diff --git a/.eslintignore b/.eslintignore index d5a49554f..43d7ca18b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,7 +1,7 @@ node_modules/ coverage/ dist/ -src/assets/old-client/ +src/assets/ baw-client/ decorate-angular-cli.js e2e/protractor.conf.js diff --git a/.eslintrc.json b/.eslintrc.json index 3202b9785..1b7977121 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,45 +1,45 @@ { - "root": true, "ignorePatterns": ["projects/**/*"], "overrides": [ { - "files": ["*.ts"], - "parserOptions": { - "project": ["tsconfig.json", "tsconfig.e2e.json"], - "createDefaultProgram": true - }, "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", "plugin:@angular-eslint/ng-cli-compat", "plugin:@angular-eslint/ng-cli-compat--formatting-add-on", - "plugin:@angular-eslint/template/process-inline-templates" + "plugin:@angular-eslint/template/process-inline-templates", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript" + ], + "files": ["*.ts"], + "parserOptions": { + "createDefaultProgram": true, + "project": ["tsconfig.json", "tsconfig.e2e.json"] + }, + "plugins": [ + "eslint-plugin-rxjs", + "rxjs-angular", + "@typescript-eslint", + "import" ], - "plugins": ["eslint-plugin-rxjs", "rxjs-angular"], "rules": { - "no-implicit-globals": "error", - "no-underscore-dangle": "off", - "@typescript-eslint/member-ordering": "off", - "no-shadow": "off", - "@typescript-eslint/no-shadow": ["error"], - "quotes": ["error", "double", { "avoidEscape": true }], - "@typescript-eslint/quotes": [ - "error", - "double", - { "avoidEscape": true } - ], + "import/no-unresolved": "off", + "import/no-deprecated": "error", "@angular-eslint/component-selector": [ "error", { - "type": "element", "prefix": ["baw"], - "style": "kebab-case" + "style": "kebab-case", + "type": "element" } ], "@angular-eslint/directive-selector": [ "error", { - "type": "attribute", "prefix": ["baw"], - "style": "camelCase" + "style": "camelCase", + "type": "attribute" } ], "@angular-eslint/use-component-view-encapsulation": "error", @@ -52,6 +52,7 @@ "accessibility": "explicit" } ], + "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/member-delimiter-style": [ "off", { @@ -65,26 +66,57 @@ } } ], + "@typescript-eslint/member-ordering": "off", + "@typescript-eslint/no-shadow": ["error"], + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_" + } + ], + "@typescript-eslint/quotes": [ + "error", + "double", + { + "avoidEscape": true + } + ], "@typescript-eslint/semi": ["off", null], "arrow-parens": ["off", "always"], "brace-style": ["error", "1tbs"], "eqeqeq": ["error", "always"], "guard-for-in": "off", "import/order": "error", + "no-implicit-globals": "error", "no-multiple-empty-lines": "error", + "no-shadow": "off", + "no-underscore-dangle": "off", "prefer-arrow/prefer-arrow-functions": "off", + "quotes": [ + "error", + "double", + { + "avoidEscape": true + } + ], + "rxjs-angular/prefer-takeuntil": [ + "error", + { + "checkDestroy": false + } + ], "rxjs/no-create": "error", "rxjs/no-internal": "error", "rxjs/no-nested-subscribe": "error", "rxjs/no-unsafe-takeuntil": "error", - "rxjs-angular/prefer-takeuntil": ["error", { "checkDestroy": false }], "space-before-function-paren": "off" } }, { - "files": ["*.html"], "extends": ["plugin:@angular-eslint/template/recommended"], + "files": ["*.html"], "rules": {} } - ] + ], + "root": true } diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts index b51fb640a..c1e756b61 100644 --- a/e2e/src/app.e2e-spec.ts +++ b/e2e/src/app.e2e-spec.ts @@ -1,13 +1,10 @@ import { AppPage } from "./app.po"; -import { LoginPage } from "./login.po"; describe("workbench-client", () => { let page: AppPage; - let loginPage: LoginPage; beforeEach(() => { page = new AppPage(); - loginPage = new LoginPage(); page.navigateTo(); }); diff --git a/package-lock.json b/package-lock.json index cba5b36d9..72aa411fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5219,9 +5219,9 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5256,41 +5256,41 @@ } }, "@typescript-eslint/parser": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.18.0.tgz", - "integrity": "sha512-W3z5S0ZbecwX3PhJEAnq4mnjK5JJXvXUDBYIYGoweCyWyuvAKfGHvzmpUzgB5L4cRBb+cTu9U/ro66dx7dIimA==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.19.0.tgz", + "integrity": "sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.18.0", - "@typescript-eslint/types": "4.18.0", - "@typescript-eslint/typescript-estree": "4.18.0", + "@typescript-eslint/scope-manager": "4.19.0", + "@typescript-eslint/types": "4.19.0", + "@typescript-eslint/typescript-estree": "4.19.0", "debug": "^4.1.1" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.18.0.tgz", - "integrity": "sha512-olX4yN6rvHR2eyFOcb6E4vmhDPsfdMyfQ3qR+oQNkAv8emKKlfxTWUXU5Mqxs2Fwe3Pf1BoPvrwZtwngxDzYzQ==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.19.0.tgz", + "integrity": "sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g==", "dev": true, "requires": { - "@typescript-eslint/types": "4.18.0", - "@typescript-eslint/visitor-keys": "4.18.0" + "@typescript-eslint/types": "4.19.0", + "@typescript-eslint/visitor-keys": "4.19.0" } }, "@typescript-eslint/types": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.18.0.tgz", - "integrity": "sha512-/BRociARpj5E+9yQ7cwCF/SNOWwXJ3qhjurMuK2hIFUbr9vTuDeu476Zpu+ptxY2kSxUHDGLLKy+qGq2sOg37A==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.19.0.tgz", + "integrity": "sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.18.0.tgz", - "integrity": "sha512-wt4xvF6vvJI7epz+rEqxmoNQ4ZADArGQO9gDU+cM0U5fdVv7N+IAuVoVAoZSOZxzGHBfvE3XQMLdy+scsqFfeg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.19.0.tgz", + "integrity": "sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.18.0", - "@typescript-eslint/visitor-keys": "4.18.0", + "@typescript-eslint/types": "4.19.0", + "@typescript-eslint/visitor-keys": "4.19.0", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -5299,19 +5299,19 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.18.0.tgz", - "integrity": "sha512-Q9t90JCvfYaN0OfFUgaLqByOfz8yPeTAdotn/XYNm5q9eHax90gzdb+RJ6E9T5s97Kv/UHWKERTmqA0jTKAEHw==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.19.0.tgz", + "integrity": "sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A==", "dev": true, "requires": { - "@typescript-eslint/types": "4.18.0", + "@typescript-eslint/types": "4.19.0", "eslint-visitor-keys": "^2.0.0" } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5901,14 +5901,119 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } } }, "array-union": { @@ -5941,23 +6046,140 @@ }, "dependencies": { "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } } } } @@ -9196,9 +9418,9 @@ } }, "eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -9305,9 +9527,9 @@ } }, "globals": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", - "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -9384,9 +9606,9 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -11077,6 +11299,11 @@ "sshpk": "^1.7.0" } }, + "http-status": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.5.0.tgz", + "integrity": "sha512-wcGvY31MpFNHIkUcXHHnvrE4IKYlpvitJw5P/1u892gMBAM46muQ+RH7UN1d+Ntnfx5apnOnVY6vcLmrWHOLwg==" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -13083,6 +13310,18 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, "lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -13101,6 +13340,12 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -19586,21 +19831,26 @@ "dev": true }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.8.tgz", + "integrity": "sha512-OBAdezyozae8IvjHGXBDHByVkLCcsmffXUSj8LXkNb0SluRd4ug3GFCjk6JynZONIPhOkyr0Nnvbq1rlIspXyQ==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" }, "dependencies": { "ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.1.tgz", + "integrity": "sha512-46ZA4TalFcLLqX1dEU3dhdY38wAtDydJ4e7QQTVekLUTzXkb1LfqU6VOBXC/a9wiv4T094WURqJH6ZitF92Kqw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", diff --git a/package.json b/package.json index 6f0a01332..c868bde9d 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "express": "^4.17.1", "filesize": "^6.1.0", "full-icu": "^1.3.1", + "http-status": "^1.5.0", "humanize-duration": "^3.25.1", "immutable": "^4.0.0-rc.12", "include-media": "^1.4.9", @@ -94,11 +95,11 @@ "@types/jasminewd2": "^2.0.8", "@types/luxon": "^1.26.2", "@types/node": "^14.14.35", - "@typescript-eslint/eslint-plugin": "4.18.0", - "@typescript-eslint/parser": "^4.18.0", + "@typescript-eslint/eslint-plugin": "^4.18.0", + "@typescript-eslint/parser": "^4.19.0", "codelyzer": "^6.0.1", - "eslint": "^7.22.0", - "eslint-plugin-import": "2.22.1", + "eslint": "^7.23.0", + "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsdoc": "32.3.0", "eslint-plugin-prefer-arrow": "1.2.3", "eslint-plugin-rxjs": "latest", diff --git a/src/app/components/admin/analysis-jobs/list/list.component.spec.ts b/src/app/components/admin/analysis-jobs/list/list.component.spec.ts index a4b41962f..3a736ad21 100644 --- a/src/app/components/admin/analysis-jobs/list/list.component.spec.ts +++ b/src/app/components/admin/analysis-jobs/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminAnalysisJobsComponent } from "./list.component"; describe("AdminAnalysisJobsComponent", () => { let api: AnalysisJobsService; - let defaultModel: AnalysisJob; let defaultModels: AnalysisJob[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminAnalysisJobsComponent", () => { fixture = TestBed.createComponent(AdminAnalysisJobsComponent); api = TestBed.inject(AnalysisJobsService); - defaultModel = new AnalysisJob(generateAnalysisJob()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new AnalysisJob(generateAnalysisJob())); diff --git a/src/app/components/admin/audio-recordings/list/list.component.spec.ts b/src/app/components/admin/audio-recordings/list/list.component.spec.ts index 6c17f5d63..cfcf7f739 100644 --- a/src/app/components/admin/audio-recordings/list/list.component.spec.ts +++ b/src/app/components/admin/audio-recordings/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminAudioRecordingsComponent } from "./list.component"; describe("AdminAudioRecordingsComponent", () => { let api: AudioRecordingsService; - let defaultModel: AudioRecording; let defaultModels: AudioRecording[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminAudioRecordingsComponent", () => { fixture = TestBed.createComponent(AdminAudioRecordingsComponent); api = TestBed.inject(AudioRecordingsService); - defaultModel = new AudioRecording(generateAudioRecording()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new AudioRecording(generateAudioRecording())); diff --git a/src/app/components/admin/orphan/list/list.component.spec.ts b/src/app/components/admin/orphan/list/list.component.spec.ts index 200b4c8ed..6a979ed4d 100644 --- a/src/app/components/admin/orphan/list/list.component.spec.ts +++ b/src/app/components/admin/orphan/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminOrphansComponent } from "./list.component"; describe("AdminOrphansComponent", () => { let api: ShallowSitesService; - let defaultModel: Site; let defaultModels: Site[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminOrphansComponent", () => { fixture = TestBed.createComponent(AdminOrphansComponent); api = TestBed.inject(ShallowSitesService); - defaultModel = new Site(generateSite()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new Site(generateSite())); diff --git a/src/app/components/admin/orphan/list/list.component.ts b/src/app/components/admin/orphan/list/list.component.ts index 805a1dcf7..98c2e3c0b 100644 --- a/src/app/components/admin/orphan/list/list.component.ts +++ b/src/app/components/admin/orphan/list/list.component.ts @@ -8,11 +8,7 @@ import { PagedTableTemplate } from "@helpers/tableTemplate/pagedTableTemplate"; import { Id } from "@interfaces/apiInterfaces"; import { Site } from "@models/Site"; import { List } from "immutable"; -import { - adminOrphanMenuItem, - adminOrphansCategory, - adminOrphansMenuItem, -} from "../orphans.menus"; +import { adminOrphansCategory, adminOrphansMenuItem } from "../orphans.menus"; @Component({ selector: "baw-admin-orphans", diff --git a/src/app/components/admin/scripts/list/list.component.spec.ts b/src/app/components/admin/scripts/list/list.component.spec.ts index 8991dc311..095f86215 100644 --- a/src/app/components/admin/scripts/list/list.component.spec.ts +++ b/src/app/components/admin/scripts/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminScriptsComponent } from "./list.component"; describe("AdminScriptsComponent", () => { let api: ScriptsService; - let defaultModel: Script; let defaultModels: Script[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminScriptsComponent", () => { fixture = TestBed.createComponent(AdminScriptsComponent); api = TestBed.inject(ScriptsService); - defaultModel = new Script(generateScript()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new Script(generateScript(i))); diff --git a/src/app/components/admin/tag-group/list/list.component.spec.ts b/src/app/components/admin/tag-group/list/list.component.spec.ts index b88843aee..a480bf8cf 100644 --- a/src/app/components/admin/tag-group/list/list.component.spec.ts +++ b/src/app/components/admin/tag-group/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminTagGroupsComponent } from "./list.component"; describe("AdminTagGroupsComponent", () => { let api: TagGroupsService; - let defaultModel: TagGroup; let defaultModels: TagGroup[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminTagGroupsComponent", () => { fixture = TestBed.createComponent(AdminTagGroupsComponent); api = TestBed.inject(TagGroupsService); - defaultModel = new TagGroup(generateTagGroup()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new TagGroup(generateTagGroup())); diff --git a/src/app/components/admin/tags/list/list.component.spec.ts b/src/app/components/admin/tags/list/list.component.spec.ts index 7aff74f56..31dc0a81e 100644 --- a/src/app/components/admin/tags/list/list.component.spec.ts +++ b/src/app/components/admin/tags/list/list.component.spec.ts @@ -12,7 +12,6 @@ import { AdminTagsComponent } from "./list.component"; describe("AdminTagsComponent", () => { let api: TagsService; - let defaultModel: Tag; let defaultModels: Tag[]; let fixture: ComponentFixture; @@ -30,7 +29,6 @@ describe("AdminTagsComponent", () => { fixture = TestBed.createComponent(AdminTagsComponent); api = TestBed.inject(TagsService); - defaultModel = new Tag(generateTag()); defaultModels = []; for (let i = 0; i < defaultApiPageSize; i++) { defaultModels.push(new Tag(generateTag(i))); diff --git a/src/app/components/data-request/data-request.component.spec.ts b/src/app/components/data-request/data-request.component.spec.ts index 5e94f05c3..ea630f9b0 100644 --- a/src/app/components/data-request/data-request.component.spec.ts +++ b/src/app/components/data-request/data-request.component.spec.ts @@ -1,19 +1,13 @@ -import { - HttpClientTestingModule, - HttpTestingController, -} from "@angular/common/http/testing"; +import { HttpClientTestingModule } from "@angular/common/http/testing"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; -import { ConfigService } from "@services/config/config.service"; import { MockAppConfigModule } from "@services/config/configMock.module"; import { SharedModule } from "@shared/shared.module"; import { appLibraryImports } from "src/app/app.module"; import { DataRequestComponent } from "./data-request.component"; xdescribe("DataRequestComponent", () => { - let httpMock: HttpTestingController; let component: DataRequestComponent; - let config: ConfigService; let fixture: ComponentFixture; beforeEach(() => { @@ -29,8 +23,6 @@ xdescribe("DataRequestComponent", () => { }).compileComponents(); fixture = TestBed.createComponent(DataRequestComponent); - httpMock = TestBed.inject(HttpTestingController); - config = TestBed.inject(ConfigService); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src/app/components/error/resolver-handler.component.spec.ts b/src/app/components/error/resolver-handler.component.spec.ts index 902ec0587..e9e90de83 100644 --- a/src/app/components/error/resolver-handler.component.spec.ts +++ b/src/app/components/error/resolver-handler.component.spec.ts @@ -11,7 +11,7 @@ import { ResolverHandlerComponent } from "./resolver-handler.component"; const mockErrorHandler = MockComponent(ErrorHandlerComponent); -describe("PageNotFoundComponent", () => { +describe("ResolverHandlerComponent", () => { let spec: SpectatorRouting; const createComponent = createRoutingFactory({ component: ResolverHandlerComponent, diff --git a/src/app/components/error/resolver-handler.component.ts b/src/app/components/error/resolver-handler.component.ts index 1bfca1e3b..060b18b1e 100644 --- a/src/app/components/error/resolver-handler.component.ts +++ b/src/app/components/error/resolver-handler.component.ts @@ -1,10 +1,11 @@ import { Component, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; -import { apiReturnCodes } from "@baw-api/baw-api.service"; +import { unknownErrorCode } from "@baw-api/baw-api.service"; import { IPageInfo } from "@helpers/page/pageInfo"; import { withUnsubscribe } from "@helpers/unsubscribe/unsubscribe"; import { takeUntil } from "rxjs/operators"; +import httpCodes from "http-status"; @Component({ template: ` @@ -27,7 +28,7 @@ export class ResolverHandlerComponent (err) => { console.error("ErrorHandlerComponent: ", err); this.error = { - status: apiReturnCodes.unknown, + status: unknownErrorCode, message: "Unable to load data from Server.", }; } @@ -52,7 +53,7 @@ export class ResolverHandlerComponent this.error = data[key].error; // If unauthorized response, no point downgrading to "Not Found" - if (this.error.status === apiReturnCodes.unauthorized) { + if (this.error.status === httpCodes.UNAUTHORIZED) { return; } } diff --git a/src/app/components/profile/pages/my-edit/my-edit.component.spec.ts b/src/app/components/profile/pages/my-edit/my-edit.component.spec.ts index 9cbd20a4f..6cb2b6817 100644 --- a/src/app/components/profile/pages/my-edit/my-edit.component.spec.ts +++ b/src/app/components/profile/pages/my-edit/my-edit.component.spec.ts @@ -3,7 +3,7 @@ import { ActivatedRoute } from "@angular/router"; import { RouterTestingModule } from "@angular/router/testing"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; -import { userResolvers, UserService } from "@baw-api/user/user.service"; +import { userResolvers } from "@baw-api/user/user.service"; import { User } from "@models/User"; import { SharedModule } from "@shared/shared.module"; import { generateUser } from "@test/fakes/User"; @@ -12,7 +12,6 @@ import { appLibraryImports } from "src/app/app.module"; import { MyEditComponent } from "./my-edit.component"; describe("MyProfileEditComponent", () => { - let api: UserService; let component: MyEditComponent; let fixture: ComponentFixture; let defaultUser: User; @@ -39,7 +38,6 @@ describe("MyProfileEditComponent", () => { fixture = TestBed.createComponent(MyEditComponent); component = fixture.componentInstance; - api = TestBed.inject(UserService); fixture.detectChanges(); } diff --git a/src/app/components/projects/harvest-complete/harvest-complete.component.ts b/src/app/components/projects/harvest-complete/harvest-complete.component.ts index 098346606..404ca69c9 100644 --- a/src/app/components/projects/harvest-complete/harvest-complete.component.ts +++ b/src/app/components/projects/harvest-complete/harvest-complete.component.ts @@ -33,7 +33,7 @@ export class HarvestCompleteComponent ); } - public playPath(site: Site) { + public playPath(_site: Site) { // TODO Fix this, need audio recording for site // listenRecordingMenuItem return getUnknownViewUrl("Feature not implemented yet"); diff --git a/src/app/components/projects/pages/details/details.component.spec.ts b/src/app/components/projects/pages/details/details.component.spec.ts index b6a6bd05d..cbbed0f58 100644 --- a/src/app/components/projects/pages/details/details.component.spec.ts +++ b/src/app/components/projects/pages/details/details.component.spec.ts @@ -1,4 +1,3 @@ -import { componentFactoryName } from "@angular/compiler"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; import { defaultApiPageSize } from "@baw-api/baw-api.service"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; diff --git a/src/app/components/projects/pages/permissions/permissions.component.spec.ts b/src/app/components/projects/pages/permissions/permissions.component.spec.ts index 5da261ef9..4c1ffa1ca 100644 --- a/src/app/components/projects/pages/permissions/permissions.component.spec.ts +++ b/src/app/components/projects/pages/permissions/permissions.component.spec.ts @@ -3,10 +3,7 @@ import { ActivatedRoute } from "@angular/router"; import { RouterTestingModule } from "@angular/router/testing"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; -import { - projectResolvers, - ProjectsService, -} from "@baw-api/project/projects.service"; +import { projectResolvers } from "@baw-api/project/projects.service"; import { Project } from "@models/Project"; import { SharedModule } from "@shared/shared.module"; import { generateProject } from "@test/fakes/Project"; @@ -15,7 +12,6 @@ import { appLibraryImports } from "src/app/app.module"; import { PermissionsComponent } from "./permissions.component"; describe("PermissionsComponent", () => { - let api: ProjectsService; let component: PermissionsComponent; let defaultProject: Project; let fixture: ComponentFixture; @@ -42,7 +38,6 @@ describe("PermissionsComponent", () => { fixture = TestBed.createComponent(PermissionsComponent); component = fixture.componentInstance; - api = TestBed.inject(ProjectsService); fixture.detectChanges(); } diff --git a/src/app/components/projects/site-card/site-card.component.spec.ts b/src/app/components/projects/site-card/site-card.component.spec.ts index 39c7a6f44..7e3cba507 100644 --- a/src/app/components/projects/site-card/site-card.component.spec.ts +++ b/src/app/components/projects/site-card/site-card.component.spec.ts @@ -2,7 +2,6 @@ import { RouterTestingModule } from "@angular/router/testing"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; import { AudioRecordingsService } from "@baw-api/audio-recording/audio-recordings.service"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; -import { listenRecordingMenuItem } from "@components/listen/listen.menus"; import { AudioRecording } from "@models/AudioRecording"; import { Project } from "@models/Project"; import { Region } from "@models/Region"; @@ -16,7 +15,7 @@ import { generateProject } from "@test/fakes/Project"; import { generateRegion } from "@test/fakes/Region"; import { generateSite } from "@test/fakes/Site"; import { nStepObservable } from "@test/helpers/general"; -import { assertImage, assertRoute, assertUrl } from "@test/helpers/html"; +import { assertImage, assertUrl } from "@test/helpers/html"; import { websiteHttpUrl } from "@test/helpers/url"; import { Subject } from "rxjs"; import { SiteCardComponent } from "./site-card.component"; diff --git a/src/app/components/shared/action-menu/action-menu.component.spec.ts b/src/app/components/shared/action-menu/action-menu.component.spec.ts index d11aa8fad..e7bc2c588 100644 --- a/src/app/components/shared/action-menu/action-menu.component.spec.ts +++ b/src/app/components/shared/action-menu/action-menu.component.spec.ts @@ -1,4 +1,3 @@ -import { Params } from "@angular/router"; import { RouterTestingModule } from "@angular/router/testing"; import { defaultMenu } from "@helpers/page/defaultMenus"; import { IPageInfo } from "@helpers/page/pageInfo"; diff --git a/src/app/components/shared/cms/cms.component.spec.ts b/src/app/components/shared/cms/cms.component.spec.ts index b407574b1..fca22d0d9 100644 --- a/src/app/components/shared/cms/cms.component.spec.ts +++ b/src/app/components/shared/cms/cms.component.spec.ts @@ -18,7 +18,6 @@ import { CmsComponent } from "./cms.component"; describe("CmsComponent", () => { let cmsService: SpyObject; - let component: CmsComponent; let spectator: Spectator; const createComponent = createComponentFactory({ component: CmsComponent, @@ -40,7 +39,6 @@ describe("CmsComponent", () => { beforeEach(() => { spectator = createComponent({ detectChanges: false }); - component = spectator.component; cmsService = spectator.inject(CmsService); }); diff --git a/src/app/components/shared/detail-view/render-field/render-field.component.ts b/src/app/components/shared/detail-view/render-field/render-field.component.ts index aa5bf72fa..77d801f6c 100644 --- a/src/app/components/shared/detail-view/render-field/render-field.component.ts +++ b/src/app/components/shared/detail-view/render-field/render-field.component.ts @@ -282,7 +282,7 @@ export class RenderFieldComponent invalidCallback: () => void ) { // Url from https://urlregex.com/ - // eslint-disable-next-line max-len + // eslint-disable-next-line max-len, no-useless-escape const urlRegex = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/; if (!urlRegex.test(src)) { invalidCallback(); diff --git a/src/app/components/shared/error-handler/error-handler.component.spec.ts b/src/app/components/shared/error-handler/error-handler.component.spec.ts index d3273323a..9f4a7cb71 100644 --- a/src/app/components/shared/error-handler/error-handler.component.spec.ts +++ b/src/app/components/shared/error-handler/error-handler.component.spec.ts @@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, OnInit } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; -import { apiReturnCodes } from "@baw-api/baw-api.service"; +import { unknownErrorCode } from "@baw-api/baw-api.service"; import { MockAppConfigModule } from "@services/config/configMock.module"; import { generateApiErrorDetails } from "@test/fakes/ApiErrorDetails"; import { SharedModule } from "../shared.module"; @@ -117,7 +117,7 @@ describe("ErrorHandlerComponent", () => { it("should handle unknown code", () => { component.error = generateApiErrorDetails("Custom", { - status: apiReturnCodes.unknown, + status: unknownErrorCode, message: "Unknown error has occurred.", }); fixture.detectChanges(); diff --git a/src/app/components/shared/error-handler/error-handler.component.ts b/src/app/components/shared/error-handler/error-handler.component.ts index 418b0b9e1..899d3211c 100644 --- a/src/app/components/shared/error-handler/error-handler.component.ts +++ b/src/app/components/shared/error-handler/error-handler.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from "@angular/core"; import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; -import { apiReturnCodes } from "@baw-api/baw-api.service"; import { reportProblemMenuItem } from "@components/report-problem/report-problem.menus"; +import httpCodes from "http-status"; /** * Error Handler Wrapper @@ -12,13 +12,13 @@ import { reportProblemMenuItem } from "@components/report-problem/report-problem

- + Unauthorized Access - + Access Forbidden - + Not Found Unknown Error @@ -37,5 +37,5 @@ import { reportProblemMenuItem } from "@components/report-problem/report-problem export class ErrorHandlerComponent { @Input() public error: ApiErrorDetails; public reportProblem = reportProblemMenuItem.route; - public apiReturnCodes = apiReturnCodes; + public httpCodes = httpCodes; } diff --git a/src/app/components/shared/formly/file-input.directive.ts b/src/app/components/shared/formly/file-input.directive.ts index f8afc025b..7585be9a9 100644 --- a/src/app/components/shared/formly/file-input.directive.ts +++ b/src/app/components/shared/formly/file-input.directive.ts @@ -25,10 +25,10 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; // https://github.com/angular/angular/issues/7341 export class FileValueAccessorDirective implements ControlValueAccessor { public value: any; - public onChange = (_) => {}; + public onChange = () => {}; public onTouched = () => {}; - public writeValue(value) {} + public writeValue() {} public registerOnChange(fn: any) { this.onChange = fn; } diff --git a/src/app/components/shared/formly/timezone-input.component.spec.ts b/src/app/components/shared/formly/timezone-input.component.spec.ts index 5f6163140..384f04ddd 100644 --- a/src/app/components/shared/formly/timezone-input.component.spec.ts +++ b/src/app/components/shared/formly/timezone-input.component.spec.ts @@ -27,10 +27,6 @@ describe("FormlyTimezoneInput", () => { ], }); - function getInput() { - return spectator.query("input"); - } - function setup(options: FormlyTemplateOptions = {}) { formGroup = new FormGroup({ timezone: new FormControl("") }); model = {}; diff --git a/src/app/components/shared/header/header-item/header-item.component.spec.ts b/src/app/components/shared/header/header-item/header-item.component.spec.ts index 3528eed79..44444687e 100644 --- a/src/app/components/shared/header/header-item/header-item.component.spec.ts +++ b/src/app/components/shared/header/header-item/header-item.component.spec.ts @@ -1,4 +1,4 @@ -import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { ComponentFixture } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { menuLink, menuRoute } from "@interfaces/menusInterfaces"; import { StrongRoute } from "@interfaces/strongRoute"; diff --git a/src/app/components/shared/header/header.component.spec.ts b/src/app/components/shared/header/header.component.spec.ts index 0697cae6d..5807eb962 100644 --- a/src/app/components/shared/header/header.component.spec.ts +++ b/src/app/components/shared/header/header.component.spec.ts @@ -84,12 +84,6 @@ describe("HeaderComponent", () => { describe(userType.type + " user", () => { let isLoggedIn: boolean; let defaultUser: SessionUser; - const linkIndex = { - project: 0, - listen: 1, - library: 2, - contactUs: 4, - }; function getNavLinks() { return spec.queryAll("a.nav-link"); diff --git a/src/app/components/sites/pages/harvest/point.component.spec.ts b/src/app/components/sites/pages/harvest/point.component.spec.ts index ab0362952..2776c6f69 100644 --- a/src/app/components/sites/pages/harvest/point.component.spec.ts +++ b/src/app/components/sites/pages/harvest/point.component.spec.ts @@ -1,7 +1,4 @@ -import { - HttpClientTestingModule, - HttpTestingController, -} from "@angular/common/http/testing"; +import { HttpClientTestingModule } from "@angular/common/http/testing"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; @@ -9,7 +6,6 @@ import { SharedModule } from "@shared/shared.module"; import { PointHarvestComponent } from "./point.component"; describe("PointHarvestComponent", () => { - let httpMock: HttpTestingController; let component: PointHarvestComponent; let fixture: ComponentFixture; @@ -26,7 +22,6 @@ describe("PointHarvestComponent", () => { fixture = TestBed.createComponent(PointHarvestComponent); component = fixture.componentInstance; - httpMock = TestBed.inject(HttpTestingController); fixture.detectChanges(); }); diff --git a/src/app/components/sites/pages/harvest/site.component.spec.ts b/src/app/components/sites/pages/harvest/site.component.spec.ts index 9a358fa27..baf44a67d 100644 --- a/src/app/components/sites/pages/harvest/site.component.spec.ts +++ b/src/app/components/sites/pages/harvest/site.component.spec.ts @@ -1,7 +1,4 @@ -import { - HttpClientTestingModule, - HttpTestingController, -} from "@angular/common/http/testing"; +import { HttpClientTestingModule } from "@angular/common/http/testing"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { RouterTestingModule } from "@angular/router/testing"; import { MockBawApiModule } from "@baw-api/baw-apiMock.module"; @@ -9,7 +6,6 @@ import { SharedModule } from "@shared/shared.module"; import { SiteHarvestComponent } from "./site.component"; describe("SiteHarvestComponent", () => { - let httpMock: HttpTestingController; let component: SiteHarvestComponent; let fixture: ComponentFixture; @@ -26,7 +22,6 @@ describe("SiteHarvestComponent", () => { fixture = TestBed.createComponent(SiteHarvestComponent); component = fixture.componentInstance; - httpMock = TestBed.inject(HttpTestingController); fixture.detectChanges(); }); diff --git a/src/app/components/visualize/visualize.menus.ts b/src/app/components/visualize/visualize.menus.ts index bc812af05..f504f3534 100644 --- a/src/app/components/visualize/visualize.menus.ts +++ b/src/app/components/visualize/visualize.menus.ts @@ -4,7 +4,7 @@ import { StrongRoute } from "@interfaces/strongRoute"; export const visualizeRoute = StrongRoute.newRoot().add( "visualize", - ({ siteIds, siteId, regionId, projectId, extent0, extent1, lane }) => { + ({ siteIds, siteId, projectId, extent0, extent1, lane }) => { const qsp = { extent0, extent1, diff --git a/src/app/helpers/tableTemplate/pagedTableTemplate.ts b/src/app/helpers/tableTemplate/pagedTableTemplate.ts index fe970d5ee..bbfb94912 100644 --- a/src/app/helpers/tableTemplate/pagedTableTemplate.ts +++ b/src/app/helpers/tableTemplate/pagedTableTemplate.ts @@ -79,7 +79,7 @@ export abstract class PagedTableTemplate .subscribe( () => this.getPageData(), // Filter event doesn't have an error output - (err) => {} + (err) => console.error(err) ); } diff --git a/src/app/interfaces/menusInterfaces.ts b/src/app/interfaces/menusInterfaces.ts index f06b42c8b..3bb4af21c 100644 --- a/src/app/interfaces/menusInterfaces.ts +++ b/src/app/interfaces/menusInterfaces.ts @@ -125,7 +125,7 @@ export interface MenuLink extends MenuItem { export function menuLink>(item: T): MenuLink { return Object.assign(item, { - kind: "MenuLink" as "MenuLink", + kind: "MenuLink" as const, active: false, indentation: 0, }); @@ -154,7 +154,7 @@ export function menuRoute>( item: T ): MenuRoute { return Object.assign(item, { - kind: "MenuRoute" as "MenuRoute", + kind: "MenuRoute" as const, active: false, indentation: item.parent ? item.parent.indentation + 1 : 0, order: item.parent?.order ?? item.order, @@ -176,7 +176,7 @@ export function menuAction>( item: T ): MenuAction { return Object.assign(item, { - kind: "MenuAction" as "MenuAction", + kind: "MenuAction" as const, active: false, indentation: 0, }); diff --git a/src/app/interfaces/strongRoute.ts b/src/app/interfaces/strongRoute.ts index 3dd6c3f82..765ae8148 100644 --- a/src/app/interfaces/strongRoute.ts +++ b/src/app/interfaces/strongRoute.ts @@ -214,7 +214,7 @@ export class StrongRoute { if (x.isParameter) { const key = x.pathFragment.substr(1, x.pathFragment.length - 1); - if (params.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(params, key)) { return params[key]; } else { const msg = `Parameter named ${x.pathFragment} was not supplied a value and a default value was not given`; @@ -346,6 +346,7 @@ export class StrongRoute { private rootToHere(): [StrongRoute[], StrongRoute[]] { const fragments = []; const parameters = []; + // eslint-disable-next-line @typescript-eslint/no-this-alias let current: StrongRoute = this; while (isInstantiated(current)) { fragments.push(current); diff --git a/src/app/models/AbstractModel.ts b/src/app/models/AbstractModel.ts index cf8981cc2..488a2222f 100644 --- a/src/app/models/AbstractModel.ts +++ b/src/app/models/AbstractModel.ts @@ -52,6 +52,7 @@ export abstract class AbstractModel> { * * @param args Url arguments */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public getViewUrl(...args: any[]): string { return this.viewUrl; } diff --git a/src/app/models/AssociationDecorators.ts b/src/app/models/AssociationDecorators.ts index e755a269e..894e61162 100644 --- a/src/app/models/AssociationDecorators.ts +++ b/src/app/models/AssociationDecorators.ts @@ -168,7 +168,7 @@ function createModelDecorator< ): AbstractModel | AbstractModel[] | Readonly { // Check for any backing models const backingFieldKey = "_" + identifierKey; - if (parent.hasOwnProperty(backingFieldKey)) { + if (Object.prototype.hasOwnProperty.call(parent, backingFieldKey)) { return parent[backingFieldKey]; } diff --git a/src/app/pipes/isGhostUser/is-ghost-user.pipe.spec.ts b/src/app/pipes/isGhostUser/is-ghost-user.pipe.spec.ts index 991cd39bf..a3c164bd3 100644 --- a/src/app/pipes/isGhostUser/is-ghost-user.pipe.spec.ts +++ b/src/app/pipes/isGhostUser/is-ghost-user.pipe.spec.ts @@ -23,17 +23,17 @@ describe("IsGhostUserPipe", () => { [ { - type: "unknown" as "unknown", + type: "unknown" as const, unknown: true, deleted: false, }, { - type: "deleted" as "deleted", + type: "deleted" as const, unknown: false, deleted: true, }, { - type: "all" as "all", + type: "all" as const, unknown: true, deleted: true, }, diff --git a/src/app/services/baw-api/account/accounts.service.ts b/src/app/services/baw-api/account/accounts.service.ts index 7af26e501..4f5fcccaa 100644 --- a/src/app/services/baw-api/account/accounts.service.ts +++ b/src/app/services/baw-api/account/accounts.service.ts @@ -4,6 +4,7 @@ import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; import { API_ROOT } from "@helpers/app-initializer/app-initializer"; import { stringTemplate } from "@helpers/stringTemplate/stringTemplate"; import { IUser, User } from "@models/User"; +import httpCodes from "http-status"; import { Observable, of, throwError } from "rxjs"; import { catchError } from "rxjs/operators"; import { @@ -15,7 +16,7 @@ import { option, StandardApi, } from "../api-common"; -import { apiReturnCodes, Filters } from "../baw-api.service"; +import { Filters } from "../baw-api.service"; import { Resolvers } from "../resolver-common"; const userId: IdParamOptional = id; @@ -46,10 +47,10 @@ export class AccountsService extends StandardApi { // Return unknown or deleted user depending on error code catchError((err: ApiErrorDetails) => { switch (err.status) { - case apiReturnCodes.unauthorized: + case httpCodes.UNAUTHORIZED: // Return unknown user, this only occurs when user is anonymous to the logged in/guest user return of(User.unknownUser); - case apiReturnCodes.notFound: + case httpCodes.NOT_FOUND: // Return deleted user, this only occurs when a user is soft-deleted return of(User.deletedUser); default: diff --git a/src/app/services/baw-api/api.interceptor.service.spec.ts b/src/app/services/baw-api/api.interceptor.service.spec.ts index 048d6b285..eeb3db814 100644 --- a/src/app/services/baw-api/api.interceptor.service.spec.ts +++ b/src/app/services/baw-api/api.interceptor.service.spec.ts @@ -11,7 +11,6 @@ import { HttpMethod, SpectatorHttp, } from "@ngneat/spectator"; -import { ConfigService } from "@services/config/config.service"; import { generateApiErrorResponse } from "@test/fakes/ApiErrorDetails"; import { generateSessionUser } from "@test/fakes/User"; import { noop } from "rxjs"; @@ -21,7 +20,6 @@ import { shouldNotFail, shouldNotSucceed } from "./baw-api.service.spec"; describe("BawApiInterceptor", () => { let apiRoot: string; let http: HttpClient; - let config: ConfigService; let spec: SpectatorHttp; const createService = createHttpFactory({ service: SecurityService, @@ -44,7 +42,6 @@ describe("BawApiInterceptor", () => { beforeEach(() => { spec = createService(); http = spec.inject(HttpClient); - config = spec.inject(ConfigService); apiRoot = spec.inject(API_ROOT); }); diff --git a/src/app/services/baw-api/baw-api.service.ts b/src/app/services/baw-api/baw-api.service.ts index ec764b145..edb987b58 100644 --- a/src/app/services/baw-api/baw-api.service.ts +++ b/src/app/services/baw-api/baw-api.service.ts @@ -16,25 +16,7 @@ import { map } from "rxjs/operators"; import { ApiErrorDetails } from "./api.interceptor.service"; export const defaultApiPageSize = 25; - export const unknownErrorCode = -1; - -/** - * @deprecated Use STATUS_CODES instead - */ -export const apiReturnCodes = { - unknown: -1, - success: 200, - created: 201, - badRequest: 400, - unauthorized: 401, - forbidden: 403, - notFound: 404, - unsupportedMediaType: 415, - unprocessableEntity: 422, - internalServerFailure: 500, -}; - export const STUB_MODEL_BUILDER = new InjectionToken("test.model.builder"); /** diff --git a/src/app/services/baw-api/cms/cms.service.spec.ts b/src/app/services/baw-api/cms/cms.service.spec.ts index a483b8c0a..29a6faf14 100644 --- a/src/app/services/baw-api/cms/cms.service.spec.ts +++ b/src/app/services/baw-api/cms/cms.service.spec.ts @@ -13,7 +13,6 @@ import { CMS, CmsService } from "./cms.service"; export const cmsRoot = testApiConfig.environment.apiRoot + "/cms/"; describe("CmsService", () => { - let api: SecurityService; let spectator: SpectatorHttp; const createService = createHttpFactory({ service: CmsService, @@ -24,7 +23,6 @@ describe("CmsService", () => { beforeEach(() => { spectator = createService(); - api = spectator.inject(SecurityService); }); afterEach(() => spectator.controller.verify()); diff --git a/src/app/services/baw-api/mock/apiMocks.service.ts b/src/app/services/baw-api/mock/apiMocks.service.ts index 0a4720c5f..e0e51dc64 100644 --- a/src/app/services/baw-api/mock/apiMocks.service.ts +++ b/src/app/services/baw-api/mock/apiMocks.service.ts @@ -21,10 +21,13 @@ export const MOCK = new ServiceToken( "STANDARD_API_SERVICE" ); +// eslint-disable-next-line @typescript-eslint/no-unused-vars const multipleModels = (...args: any[]) => new Observable(); +// eslint-disable-next-line @typescript-eslint/no-unused-vars const singleModel = (...args: any[]) => new Observable(); +// eslint-disable-next-line @typescript-eslint/no-unused-vars const deleteMock = (...args: any[]) => new Observable(); @Injectable() diff --git a/src/app/services/baw-api/mock/shallowSitesMock.service.ts b/src/app/services/baw-api/mock/shallowSitesMock.service.ts index abec1a640..51db9dc95 100644 --- a/src/app/services/baw-api/mock/shallowSitesMock.service.ts +++ b/src/app/services/baw-api/mock/shallowSitesMock.service.ts @@ -5,6 +5,7 @@ import { MockModel } from "./baseApiMock.service"; @Injectable() export class MockShallowSitesService extends MockStandardApiService { + // eslint-disable-next-line @typescript-eslint/no-unused-vars public orphans(...args: any[]) { return new Observable(); } diff --git a/src/app/services/baw-api/security/security.service.spec.ts b/src/app/services/baw-api/security/security.service.spec.ts index a39a132de..209d5db03 100644 --- a/src/app/services/baw-api/security/security.service.spec.ts +++ b/src/app/services/baw-api/security/security.service.spec.ts @@ -8,7 +8,6 @@ import { unknownErrorCode } from "@baw-api/baw-api.service"; import { MockShowApiService } from "@baw-api/mock/apiMocks.service"; import { SessionUser, User } from "@models/User"; import { createHttpFactory, SpectatorHttp } from "@ngneat/spectator"; -import { ConfigService } from "@services/config/config.service"; import { MockAppConfigModule } from "@services/config/configMock.module"; import { generateApiErrorDetails } from "@test/fakes/ApiErrorDetails"; import { generateLoginDetails } from "@test/fakes/LoginDetails"; @@ -30,7 +29,6 @@ import { } from "./security.service"; describe("SecurityService", () => { - let apiRoot: string; let defaultUser: User; let defaultSessionUser: SessionUser; let defaultRegisterDetails: RegisterDetails; @@ -58,24 +56,11 @@ describe("SecurityService", () => { return nStepObservable(subject, () => response ?? error, !!error); } - function interceptHtmlRequest(page: any, error?: ApiErrorDetails) { - const spy = jasmine.createSpy("formHtmlRequest"); - spec.service["formHtmlRequest"] = spy; - return intercept(spy, page, error); - } - - function interceptDataRequest(error?: ApiErrorDetails) { - const spy = jasmine.createSpy("formDataRequest"); - spec.service["formDataRequest"] = spy; - return intercept(spy, !error ? "" : undefined, error); - } - beforeEach(() => { localStorage.clear(); spec = createService(); userApi = spec.inject(UserService); - apiRoot = spec.inject(ConfigService).environment.apiRoot; defaultAuthToken = modelData.random.alphaNumeric(20); defaultError = generateApiErrorDetails(); diff --git a/src/app/test/fakes/ApiErrorDetails.ts b/src/app/test/fakes/ApiErrorDetails.ts index ced270408..af86aadbf 100644 --- a/src/app/test/fakes/ApiErrorDetails.ts +++ b/src/app/test/fakes/ApiErrorDetails.ts @@ -1,6 +1,8 @@ import { ApiErrorDetails } from "@baw-api/api.interceptor.service"; -import { ApiResponse, apiReturnCodes } from "@baw-api/baw-api.service"; +import { ApiResponse, unknownErrorCode } from "@baw-api/baw-api.service"; +import httpCodes from "http-status"; +// TODO Replace this with http-status numbers instead of string typing type HTTPStatus = | "Unauthorized" | "Not Found" @@ -25,29 +27,29 @@ export function generateApiErrorDetails( switch (type) { case "Unauthorized": - status = apiReturnCodes.unauthorized; + status = httpCodes.UNAUTHORIZED; message = type; break; case "Not Found": - status = apiReturnCodes.notFound; + status = httpCodes.NOT_FOUND; message = type; break; case "Bad Request": - status = apiReturnCodes.badRequest; + status = httpCodes.BAD_REQUEST; message = type; break; case "Unprocessable Entity": - status = apiReturnCodes.unprocessableEntity; + status = httpCodes.UNPROCESSABLE_ENTITY; message = "Record could not be saved"; break; case "Internal Server Error": - status = apiReturnCodes.internalServerFailure; + status = httpCodes.INTERNAL_SERVER_ERROR; message = "Internal Server Failure"; break; } return { - status: custom?.status ?? status ?? apiReturnCodes.unknown, + status: custom?.status ?? status ?? unknownErrorCode, message: custom?.message ?? message ?? "Unknown", info: custom?.info ?? undefined, }; diff --git a/src/app/test/helpers/html.ts b/src/app/test/helpers/html.ts index f56d892a3..ab66ab88e 100644 --- a/src/app/test/helpers/html.ts +++ b/src/app/test/helpers/html.ts @@ -1,7 +1,6 @@ import { DebugElement } from "@angular/core"; import { ComponentFixture, tick } from "@angular/core/testing"; import { By } from "@angular/platform-browser"; -import { Params } from "@angular/router"; import { AuthenticatedImageDirective } from "@directives/image/image.directive"; import { LineTruncationDirective } from "ngx-line-truncation"; diff --git a/src/app/test/helpers/paginationTemplate.ts b/src/app/test/helpers/paginationTemplate.ts index 8025be931..8c232a5ec 100644 --- a/src/app/test/helpers/paginationTemplate.ts +++ b/src/app/test/helpers/paginationTemplate.ts @@ -1,11 +1,9 @@ -import { defaultApiPageSize } from "@baw-api/baw-api.service"; import { PaginationTemplate } from "@helpers/paginationTemplate/paginationTemplate"; import { AbstractModel } from "@models/AbstractModel"; import { NgbPagination } from "@ng-bootstrap/ng-bootstrap"; import { Spectator } from "@ngneat/spectator"; import { DebounceInputComponent } from "@shared/debounce-input/debounce-input.component"; import { LoadingComponent } from "@shared/loading/loading.component"; -import { createScanner } from "typescript"; export function assertPaginationTemplate< M extends AbstractModel,