From 10e151e9b57a9be03c356e32f4700edf0dc58c9b Mon Sep 17 00:00:00 2001 From: tmair Date: Thu, 11 Jan 2024 12:25:44 +0100 Subject: [PATCH] docs: fix `ng lint` and tools lint command in documentation (#7387) * docs: fix ng lint command * docs: fix tools lint * docs: revert iteration of NodeeList --- apps/rxjs.dev/.eslintrc.js | 91 +++ apps/rxjs.dev/.eslintrc.json | 185 ------ apps/rxjs.dev/angular.json | 51 +- apps/rxjs.dev/package.json | 16 +- apps/rxjs.dev/src/app/app.component.ts | 14 +- apps/rxjs.dev/src/app/app.module.ts | 3 +- .../announcement-bar.component.ts | 1 + .../api/api-list.component.spec.ts | 94 +-- .../app/custom-elements/api/api.service.ts | 4 +- .../code/code-example.component.spec.ts | 4 +- .../code/code-example.component.ts | 5 +- .../code/code-tabs.component.ts | 1 + .../custom-elements/code/code.component.ts | 3 +- .../code/pretty-printer.service.ts | 9 +- .../contributor-list.component.spec.ts | 6 +- .../contributor/contributor-list.component.ts | 5 +- .../contributor/contributor.component.ts | 1 + .../contributor/contributor.service.ts | 6 +- .../current-location.component.ts | 1 + .../expandable-section.component.ts | 2 +- .../live-example.component.spec.ts | 2 +- .../live-example/live-example.component.ts | 3 +- ...perator-decision-tree-data.service.spec.ts | 8 +- .../operator-decision-tree.component.ts | 2 +- .../operator-decision-tree.service.ts | 12 +- .../operator-decision-tree/utils.spec.ts | 12 +- .../operator-decision-tree/utils.ts | 6 +- .../resource/resource-list.component.ts | 2 + .../resource/resource.service.spec.ts | 91 ++- .../app/documents/document.service.spec.ts | 55 +- .../src/app/documents/document.service.ts | 4 +- .../doc-viewer/doc-viewer.component.spec.ts | 4 +- .../layout/doc-viewer/doc-viewer.component.ts | 152 +++-- .../notification/notification.component.ts | 4 +- .../app/navigation/navigation.service.spec.ts | 8 +- .../search/search-box/search-box.component.ts | 4 +- apps/rxjs.dev/src/app/search/search.worker.ts | 9 +- .../src/app/shared/attribute-utils.spec.ts | 2 +- .../src/app/shared/attribute-utils.ts | 4 + .../rxjs.dev/src/app/shared/copier.service.ts | 2 +- .../src/app/shared/custom-icon-registry.ts | 4 +- .../src/app/shared/deployment.service.ts | 2 +- apps/rxjs.dev/src/app/shared/ga.service.ts | 4 +- .../src/app/shared/location.service.ts | 6 +- .../src/app/shared/reporting-error-handler.ts | 3 +- .../src/app/shared/scroll-spy.service.spec.ts | 94 ++- .../rxjs.dev/src/app/shared/scroll.service.ts | 1 + .../search-results.component.spec.ts | 8 +- .../src/app/shared/select/select.component.ts | 3 +- .../src/app/shared/toc.service.spec.ts | 14 +- apps/rxjs.dev/src/app/shared/toc.service.ts | 11 +- .../src/app/sw-updates/sw-updates.service.ts | 2 +- apps/rxjs.dev/src/testing/doc-viewer-utils.ts | 10 +- apps/rxjs.dev/src/tsconfig.app.json | 19 - apps/rxjs.dev/src/tsconfig.spec.json | 19 - apps/rxjs.dev/src/tslint.json | 17 - .../firebase-test-utils/FirebaseRedirector.ts | 4 +- apps/rxjs.dev/tsconfig.app.json | 23 + apps/rxjs.dev/tsconfig.json | 52 +- apps/rxjs.dev/tsconfig.spec.json | 20 + yarn.lock | 628 ++++++++++++++---- 61 files changed, 1068 insertions(+), 764 deletions(-) create mode 100644 apps/rxjs.dev/.eslintrc.js delete mode 100644 apps/rxjs.dev/.eslintrc.json delete mode 100644 apps/rxjs.dev/src/tsconfig.app.json delete mode 100644 apps/rxjs.dev/src/tsconfig.spec.json delete mode 100644 apps/rxjs.dev/src/tslint.json create mode 100644 apps/rxjs.dev/tsconfig.app.json create mode 100644 apps/rxjs.dev/tsconfig.spec.json diff --git a/apps/rxjs.dev/.eslintrc.js b/apps/rxjs.dev/.eslintrc.js new file mode 100644 index 0000000000..cc97d8e7ef --- /dev/null +++ b/apps/rxjs.dev/.eslintrc.js @@ -0,0 +1,91 @@ +module.exports = { + root: true, + overrides: [ + { + files: ['*.ts'], + parserOptions: { + project: ['./tsconfig.json', './tests/e2e/tsconfig.e2e.json'], + createDefaultProgram: true, + tsconfigRootDir: __dirname, + }, + extends: [ + 'plugin:@angular-eslint/ng-cli-compat', + 'plugin:@angular-eslint/ng-cli-compat--formatting-add-on', + 'plugin:@angular-eslint/template/process-inline-templates', + ], + rules: { + '@typescript-eslint/ban-types': 'error', + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'aio', + style: 'kebab-case', + }, + ], + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'aio', + style: 'camelCase', + }, + ], + 'dot-notation': 'error', + indent: 'off', + 'max-len': ['error', 140], + '@typescript-eslint/member-delimiter-style': [ + 'error', + { + singleline: { + delimiter: 'comma', + requireLast: false, + }, + }, + ], + '@typescript-eslint/member-ordering': 'off', + '@typescript-eslint/naming-convention': 'off', + 'no-console': ['error', { allow: ['log', 'warn', 'error'] }], + 'no-empty-function': 'off', + '@angular-eslint/no-host-metadata-property': 'off', + 'no-restricted-syntax': [ + 'error', + { + selector: 'CallExpression[callee.name=/^(fdescribe|fit)$/]', + message: "Don't keep jasmine focus methods.", + }, + ], + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': ['error'], + 'no-tabs': 'error', + 'no-underscore-dangle': 'off', + 'no-unused-expressions': 'off', + '@typescript-eslint/no-unused-expressions': ['error'], + 'no-use-before-define': 'off', + 'prefer-arrow/prefer-arrow-functions': 'off', + quotes: 'off', + '@typescript-eslint/quotes': ['error', 'single', { avoidEscape: true }], + semi: 'error', + 'jsdoc/newline-after-description': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + { + files: ['*.html'], + extends: ['plugin:@angular-eslint/template/recommended'], + rules: { + '@angular-eslint/template/accessibility-alt-text': 'error', + '@angular-eslint/template/accessibility-elements-content': 'error', + '@angular-eslint/template/accessibility-label-has-associated-control': 'error', + '@angular-eslint/template/accessibility-table-scope': 'error', + '@angular-eslint/template/accessibility-valid-aria': 'error', + '@angular-eslint/template/click-events-have-key-events': 'error', + '@angular-eslint/template/eqeqeq': 'off', + '@angular-eslint/template/mouse-events-have-key-events': 'error', + '@angular-eslint/template/no-autofocus': 'error', + '@angular-eslint/template/no-distracting-elements': 'error', + '@angular-eslint/template/no-positive-tabindex': 'error', + }, + }, + ], +}; diff --git a/apps/rxjs.dev/.eslintrc.json b/apps/rxjs.dev/.eslintrc.json deleted file mode 100644 index 7d164b9f63..0000000000 --- a/apps/rxjs.dev/.eslintrc.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "root": true, - "overrides": [ - { - "files": ["*.ts"], - "parserOptions": { - "project": ["tsconfig.json", "tests/e2e/tsconfig.json"], - "createDefaultProgram": true - }, - "plugins": [ - "@typescript-eslint", - // "@angular-eslint", - "eslint-plugin-jsdoc", - "eslint-plugin-import", - "eslint-plugin-jsdoc", - "eslint-plugin-prefer-arrow" - ], - "rules": { - "@angular-eslint/component-class-suffix": "error", - "@angular-eslint/component-selector": [ - "error", - { - "prefix": "aio", - "style": "kebab-case", - "type": "element" - } - ], - "@angular-eslint/contextual-lifecycle": "error", - "@angular-eslint/directive-class-suffix": "error", - "@angular-eslint/directive-selector": [ - "error", - { - "prefix": "aio", - "style": "camelCase", - "type": "attribute" - } - ], - "@angular-eslint/no-conflicting-lifecycle": "error", - "@angular-eslint/no-host-metadata-property": "off", - "@angular-eslint/no-input-rename": "error", - "@angular-eslint/no-inputs-metadata-property": "error", - "@angular-eslint/no-output-native": "error", - "@angular-eslint/no-output-on-prefix": "error", - "@angular-eslint/no-output-rename": "error", - "@angular-eslint/no-outputs-metadata-property": "error", - "@angular-eslint/use-lifecycle-interface": "error", - "@angular-eslint/use-pipe-transform-interface": "error", - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": "off", - "@typescript-eslint/ban-types": "error", - "@typescript-eslint/consistent-type-assertions": "error", - "@typescript-eslint/dot-notation": "error", - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/member-delimiter-style": [ - "error", - { - "singleline": { - "delimiter": "comma", - "requireLast": false - } - } - ], - "@typescript-eslint/member-ordering": "off", - "@typescript-eslint/naming-convention": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-empty-interface": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-inferrable-types": [ - "error", - { - "ignoreParameters": true - } - ], - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-parameter-properties": "off", - "@typescript-eslint/no-shadow": ["error"], - "@typescript-eslint/no-unused-expressions": "error", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/quotes": [ - "error", - "single", - { - "avoidEscape": true - } - ], - "@typescript-eslint/semi": ["error", "always"], - "@typescript-eslint/triple-slash-reference": [ - "error", - { - "lib": "always", - "path": "always", - "types": "prefer-import" - } - ], - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/unified-signatures": "error", - "arrow-body-style": "error", - "arrow-parens": "off", - "comma-dangle": "off", - "complexity": "off", - "constructor-super": "error", - "curly": "error", - "eol-last": "error", - "eqeqeq": ["error", "smart"], - "guard-for-in": "error", - "id-denylist": ["error", "any", "Number", "number", "String", "string", "Boolean", "boolean", "Undefined", "undefined"], - "id-match": "error", - "import/no-deprecated": "warn", - "indent": "off", - "jsdoc/check-alignment": "error", - "jsdoc/no-types": "error", - "max-classes-per-file": "off", - "max-len": ["error", 120], - "new-parens": "error", - "no-bitwise": "error", - "no-caller": "error", - "no-cond-assign": "error", - "no-console": [ - "error", - { - "allow": ["log", "warn", "error"] - } - ], - "no-debugger": "error", - "no-empty": "off", - "no-empty-function": "off", - "no-eval": "error", - "no-fallthrough": "error", - "no-invalid-this": "off", - "no-multiple-empty-lines": "off", - "no-new-wrappers": "error", - "no-restricted-imports": [ - "error", - { - "message": "Please import directly from \"rxjs\" instead", - "name": "rxjs/Rx" - } - ], - "no-restricted-syntax": [ - "error", - { - "message": "Don't keep jasmine focus methods.", - "selector": "CallExpression[callee.name=/^(fdescribe|fit)$/]" - } - ], - "no-shadow": "off", - "no-tabs": "error", - "no-throw-literal": "error", - "no-trailing-spaces": "error", - "no-undef-init": "error", - "no-underscore-dangle": "off", - "no-unsafe-finally": "error", - "no-unused-expressions": "off", - "no-unused-labels": "error", - "no-use-before-define": "off", - "no-var": "error", - "object-shorthand": "error", - "one-var": ["error", "never"], - "prefer-arrow/prefer-arrow-functions": "off", - "prefer-const": "error", - "quote-props": ["error", "as-needed"], - "quotes": "off", - "radix": "error", - "sort-keys": "off", - "space-before-function-paren": [ - "error", - { - "anonymous": "never", - "asyncArrow": "always", - "named": "never" - } - ], - "use-isnan": "error", - "valid-typeof": "off" - } - } - ] -} diff --git a/apps/rxjs.dev/angular.json b/apps/rxjs.dev/angular.json index 569aefad19..cda1fb6f7f 100644 --- a/apps/rxjs.dev/angular.json +++ b/apps/rxjs.dev/angular.json @@ -1,12 +1,17 @@ { - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "$schema": "../../node_modules/@angular/cli/lib/config/schema.json", "version": 1, + "cli": { + "packageManager": "yarn", + "analytics": false + }, "newProjectRoot": "projects", "projects": { "site": { "root": "", "sourceRoot": "src", "projectType": "application", + "prefix": "aio", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", @@ -14,7 +19,7 @@ "outputPath": "dist", "index": "src/index.html", "main": "src/main.ts", - "tsConfig": "src/tsconfig.app.json", + "tsConfig": "tsconfig.app.json", "webWorkerTsConfig": "tsconfig.worker.json", "namedChunks": true, "polyfills": "src/polyfills.ts", @@ -36,15 +41,21 @@ "output": "/assets/js" } ], - "styles": [ - "src/styles.scss" - ], + "styles": ["src/styles.scss"], "scripts": [], "vendorChunk": true, "extractLicenses": false, "buildOptimizer": false, "sourceMap": true, - "optimization": false + "optimization": { + "fonts": true, + "scripts": true, + "styles": { + "inlineCritical": false, + "minify": true + } + }, + "outputHashing": "all" }, "configurations": { "fast": { @@ -175,11 +186,9 @@ "main": "src/test.ts", "karmaConfig": "src/karma.conf.js", "polyfills": "src/polyfills.ts", - "tsConfig": "src/tsconfig.spec.json", + "tsConfig": "tsconfig.spec.json", "scripts": [], - "styles": [ - "src/styles.scss" - ], + "styles": ["src/styles.scss"], "assets": [ "src/img", "src/assets", @@ -199,14 +208,13 @@ } ] } - } - } - }, - "site-e2e": { - "root": "e2e", - "sourceRoot": "e2e", - "projectType": "application", - "architect": { + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/!(generated)/**/*.ts", "src/!(generated)/**/*.html", "tests/**/*.ts"] + } + }, "e2e": { "builder": "@angular-devkit/build-angular:protractor", "options": { @@ -219,13 +227,12 @@ }, "defaultProject": "site", "schematics": { + "@schematics/angular:application": { + "strict": true + }, "@schematics/angular:component": { "inlineStyle": true, - "prefix": "aio", "style": "scss" - }, - "@schematics/angular:directive": { - "prefix": "aio" } } } diff --git a/apps/rxjs.dev/package.json b/apps/rxjs.dev/package.json index 69e1b32e18..bda89b1e0b 100644 --- a/apps/rxjs.dev/package.json +++ b/apps/rxjs.dev/package.json @@ -28,7 +28,7 @@ "docs-lint": "eslint --ignore-path=\"tools/transforms/.eslintignore\" tools/transforms", "docs-test": "npx ts-node -P tsconfig.docs.json tools/transforms/test.js", "firebase-utils-test": "jasmine-ts tools/firebase-test-utils/*.spec.ts", - "tools-lint": "tslint -c \"tools/tslint.json\" \"tools/firebase-test-utils/**/*.ts\"", + "tools-lint": "eslint tools/firebase-test-utils", "tools-test": "./scripts/deploy-to-firebase.test.sh && yarn docs-test && yarn firebase-utils-test", "preserve-and-sync": "yarn docs", "serve-and-sync": "concurrently --kill-others \"yarn docs-watch --watch-only\" \"yarn start\"", @@ -64,6 +64,10 @@ }, "devDependencies": { "@angular-devkit/build-angular": "~13.1.2", + "@angular-eslint/builder": "^13.0.0", + "@angular-eslint/eslint-plugin": "^13.0.0", + "@angular-eslint/eslint-plugin-template": "^13.0.0", + "@angular-eslint/template-parser": "^13.0.0", "@angular/cli": "^13.1.2", "@angular/compiler-cli": "^13.1.1", "@jsdevtools/rehype-inline-svg": "^1.1.1", @@ -75,21 +79,21 @@ "@types/lunr": "^2.3.3", "@types/node": "^20.6.3", "@types/svgo": "^1.3.3", + "@types/trusted-types": "^2.0.7", "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", + "@typescript-eslint/parser": "^6.9.1", "archiver": "^3.0.0", "canonical-path": "^1.0.0", "chalk": "^2.1.0", "cjson": "^0.5.0", - "codelyzer": "^6.0.0", "concurrently": "^5.3.0", "cross-spawn": "^6.0.5", "css-selector-parser": "^1.3.0", "dgeni": "^0.4.14", "dgeni-packages": "^0.30.0", - "eslint": "^8.51.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jasmine": "^4.1.3", + "eslint": "^8.0.0", + "eslint-plugin-import": "^2.23.4", + "eslint-plugin-jasmine": "^4.1.2", "eslint-plugin-jsdoc": "^46.8.2", "eslint-plugin-prefer-arrow": "^1.2.3", "firebase-tools": "^9.3.0", diff --git a/apps/rxjs.dev/src/app/app.component.ts b/apps/rxjs.dev/src/app/app.component.ts index a0a702360e..75e2c52fbe 100644 --- a/apps/rxjs.dev/src/app/app.component.ts +++ b/apps/rxjs.dev/src/app/app.component.ts @@ -193,7 +193,7 @@ export class AppComponent implements OnInit { private scrollService: ScrollService, private searchService: SearchService, private tocService: TocService, - @Inject(DOCUMENT) private dom + @Inject(DOCUMENT) private dom: Document ) {} ngOnInit() { @@ -230,7 +230,7 @@ export class AppComponent implements OnInit { // Compute the version picker list from the current version and the versions in the navigation map combineLatest( this.navigationService.versionInfo, - this.navigationService.navigationViews.pipe(map((views) => views['docVersions'])) + this.navigationService.navigationViews.pipe(map((views) => views.docVersions)) ).subscribe(([versionInfo, versions]) => { this.docVersions = [...versions]; @@ -243,10 +243,10 @@ export class AppComponent implements OnInit { }); this.navigationService.navigationViews.subscribe((views) => { - this.footerNodes = views['Footer'] || []; - this.sideNavNodes = views['SideNav'] || []; - this.topMenuNodes = views['TopBar'] || []; - this.topMenuNarrowNodes = views['TopBarNarrow'] || this.topMenuNodes; + this.footerNodes = views.Footer || []; + this.sideNavNodes = views.SideNav || []; + this.topMenuNodes = views.TopBar || []; + this.topMenuNarrowNodes = views.TopBarNarrow || this.topMenuNodes; }); this.navigationService.versionInfo.subscribe((vi) => (this.versionInfo = vi)); @@ -305,7 +305,7 @@ export class AppComponent implements OnInit { } const head = this.dom.getElementsByTagName('head')[0]; - let element: HTMLLinkElement = this.dom.querySelector(`link[rel='canonical']`) || null; + let element: HTMLLinkElement | null = this.dom.querySelector('link[rel=\'canonical\']') || null; if (element === null) { element = this.dom.createElement('link') as HTMLLinkElement; head.appendChild(element); diff --git a/apps/rxjs.dev/src/app/app.module.ts b/apps/rxjs.dev/src/app/app.module.ts index 4ff6a8ff82..666bfd11be 100644 --- a/apps/rxjs.dev/src/app/app.module.ts +++ b/apps/rxjs.dev/src/app/app.module.ts @@ -44,7 +44,6 @@ import { SwUpdatesModule } from 'app/sw-updates/sw-updates.module'; import {environment} from '../environments/environment'; // These are the hardcoded inline svg sources to be used by the `` component. -// tslint:disable: max-line-length export const svgIconProviders = [ { provide: SVG_ICONS, @@ -65,6 +64,7 @@ export const svgIconProviders = [ svgSource: '' + '' + + // eslint-disable-next-line max-len '' + '', }, @@ -105,7 +105,6 @@ export const svgIconProviders = [ multi: true, }, ]; -// tslint:enable: max-line-length @NgModule({ imports: [ diff --git a/apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts b/apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts index 6698ec19bb..1155361f1b 100644 --- a/apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts @@ -46,6 +46,7 @@ export interface Announcement { template: `
+

Learn More diff --git a/apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts b/apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts index 6b31361315..c632f3958e 100644 --- a/apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts @@ -30,6 +30,7 @@ describe('ApiListComponent', () => { /** * Expectation Utility: Assert that filteredSections has the expected result for this test + * * @param itemTest - return true if the item passes the match test * * Subscribes to `filteredSections` and performs expectation within subscription callback. @@ -216,69 +217,68 @@ class TestApiService { sections = this.sectionsSubject.asObservable(); } -// tslint:disable:quotemark const apiSections: ApiSection[] = [ { - "name": "common", - "title": "common", - "path": "api/common", - "deprecated": false, - "items": [ + name: 'common', + title: 'common', + path: 'api/common', + deprecated: false, + items: [ { - "name": "class_1", - "title": "Class 1", - "path": "api/common/class_1", - "docType": "class", - "stability": "experimental", - "securityRisk": false, + name: 'class_1', + title: 'Class 1', + path: 'api/common/class_1', + docType: 'class', + stability: 'experimental', + securityRisk: false, }, { - "name": "class_2", - "title": "Class 2", - "path": "api/common/class_2", - "docType": "class", - "stability": "stable", - "securityRisk": false, + name: 'class_2', + title: 'Class 2', + path: 'api/common/class_2', + docType: 'class', + stability: 'stable', + securityRisk: false, }, { - "name": "directive_1", - "title": "Directive 1", - "path": "api/common/directive_1", - "docType": "directive", - "stability": "stable", - "securityRisk": true, + name: 'directive_1', + title: 'Directive 1', + path: 'api/common/directive_1', + docType: 'directive', + stability: 'stable', + securityRisk: true, } ] }, { - "name": "core", - "title": "core", - "path": "api/core", - "deprecated": false, - "items": [ + name: 'core', + title: 'core', + path: 'api/core', + deprecated: false, + items: [ { - "name": "class_3", - "title": "Class 3", - "path": "api/core/class_3", - "docType": "class", - "stability": "experimental", - "securityRisk": false, + name: 'class_3', + title: 'Class 3', + path: 'api/core/class_3', + docType: 'class', + stability: 'experimental', + securityRisk: false, }, { - "name": "function_1", - "title": "Function 1", - "path": "api/core/function 1", - "docType": "function", - "stability": "deprecated", - "securityRisk": true, + name: 'function_1', + title: 'Function 1', + path: 'api/core/function 1', + docType: 'function', + stability: 'deprecated', + securityRisk: true, }, { - "name": "const_1", - "title": "Const 1", - "path": "api/core/const_1", - "docType": "const", - "stability": "stable", - "securityRisk": false, + name: 'const_1', + title: 'Const 1', + path: 'api/core/const_1', + docType: 'const', + stability: 'stable', + securityRisk: false, } ] } diff --git a/apps/rxjs.dev/src/app/custom-elements/api/api.service.ts b/apps/rxjs.dev/src/app/custom-elements/api/api.service.ts index 751a82fbca..a5349f4166 100644 --- a/apps/rxjs.dev/src/app/custom-elements/api/api.service.ts +++ b/apps/rxjs.dev/src/app/custom-elements/api/api.service.ts @@ -45,7 +45,7 @@ export class ApiService implements OnDestroy { this.fetchSections(); // TODO: get URL for fetchSections by configuration? // makes sectionsSubject hot; subscribe ensures stays alive (always refCount > 0); - this._sections.subscribe(sections => this.logger.log('ApiService got API sections') ); + this._sections.subscribe(() => this.logger.log('ApiService got API sections') ); } return this._sections.pipe(tap(sections => { @@ -67,7 +67,7 @@ export class ApiService implements OnDestroy { * API sections is an array of Angular top modules and metadata about their API documents (items). * Updates `sections` observable * - * @param {string} [src] - Name of the api list JSON file + * @param src Name of the api list JSON file */ fetchSections(src?: string) { // TODO: get URL by configuration? diff --git a/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts b/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts index 54431dad80..95765a82c4 100644 --- a/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts @@ -30,7 +30,7 @@ describe('CodeExampleComponent', () => { }); it('should be able to capture the code snippet provided in content', () => { - expect(codeExampleComponent.aioCode.code.trim()).toBe(`const foo = "bar";`); + expect(codeExampleComponent.aioCode.code.trim()).toBe('const foo = "bar";'); }); it('should change aio-code classes based on header presence', () => { @@ -91,7 +91,7 @@ describe('CodeExampleComponent', () => { ` }) class HostComponent { - code = `const foo = "bar";`; + code = 'const foo = "bar";'; header = 'Great Example'; path = 'code-path'; hidecopy: boolean | string = false; diff --git a/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts b/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts index 4ef6cb1c39..1adda5a10f 100644 --- a/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts @@ -14,6 +14,7 @@ import { CodeComponent } from './code.component'; * ``` */ @Component({ + // eslint-disable-next-line @angular-eslint/component-selector selector: 'code-example', template: ` @@ -30,7 +31,7 @@ import { CodeComponent } from './code.component'; `, }) export class CodeExampleComponent implements AfterViewInit { - classes: {}; + classes: Record; @Input() language: string; @@ -65,11 +66,13 @@ export class CodeExampleComponent implements AfterViewInit { get hidecopy(): boolean { return this._hidecopy; } private _hidecopy: boolean; + // eslint-disable-next-line @angular-eslint/no-input-rename @Input('hide-copy') set hyphenatedHideCopy(hidecopy: boolean) { this.hidecopy = hidecopy; } + // eslint-disable-next-line @angular-eslint/no-input-rename @Input('hideCopy') set capitalizedHideCopy(hidecopy: boolean) { this.hidecopy = hidecopy; diff --git a/apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts b/apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts index cd6801dd29..0abfeb74e3 100644 --- a/apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts @@ -20,6 +20,7 @@ export interface TabInfo { * The optional `linenums` attribute is the default `linenums` for each code pane. */ @Component({ + // eslint-disable-next-line @angular-eslint/component-selector selector: 'code-tabs', template: ` diff --git a/apps/rxjs.dev/src/app/custom-elements/code/code.component.ts b/apps/rxjs.dev/src/app/custom-elements/code/code.component.ts index a509106681..2357cbb973 100644 --- a/apps/rxjs.dev/src/app/custom-elements/code/code.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/code/code.component.ts @@ -5,6 +5,7 @@ import { CopierService } from 'app/shared/copier.service'; import { MatSnackBar } from '@angular/material/snack-bar'; import { tap } from 'rxjs/operators'; import { StackblitzService } from 'app/shared/stackblitz.service'; +// @ts-expect-error import version from '../../../../tools/stackblitz/rxjs.version'; /** @@ -139,7 +140,7 @@ export class CodeComponent implements OnChanges { .pipe(tap(() => this.codeFormatted.emit())) .subscribe( (c) => this.setCodeHtml(c), - (err) => { + () => { /* ignore failure to format */ } ); diff --git a/apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts b/apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts index 557d8d2f7b..9ba4020a30 100644 --- a/apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts +++ b/apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts @@ -37,13 +37,14 @@ export class PrettyPrinter { /** * Format code snippet as HTML - * @param {string} code - the code snippet to format; should already be HTML encoded - * @param {string} [language] - The language of the code to render (could be javascript, html, typescript, etc) - * @param {string|number} [linenums] - Whether to display line numbers: + * + * @param code the code snippet to format; should already be HTML encoded + * @param language The language of the code to render (could be javascript, html, typescript, etc) + * @param linenums Whether to display line numbers: * - false: don't display * - true: do display * - number: do display but start at the given number - * @returns Observable - Observable of formatted code + * @returns Observable of formatted code */ formatCode(code: string, language?: string, linenums?: number | boolean) { return this.prettyPrintOne.pipe( diff --git a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts index 4ecb04612c..f3a9065645 100644 --- a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts @@ -61,7 +61,7 @@ describe('ContributorListComponent', () => { it('should set the query to the "GDE" group when user selects "GDE"', () => { component = getComponent(); component.selectGroup('GDE'); - expect(locationService.searchResult['group']).toBe('GDE'); + expect(locationService.searchResult.group).toBe('GDE'); }); it('should set the query to the first group when user selects unknown name', () => { @@ -69,7 +69,7 @@ describe('ContributorListComponent', () => { component.selectGroup('GDE'); // a legit group that isn't the first component.selectGroup('foo'); // not a legit group name - expect(locationService.searchResult['group']).toBe('Angular'); + expect(locationService.searchResult.group).toBe('Angular'); }); //// Test Helpers //// @@ -79,7 +79,7 @@ describe('ContributorListComponent', () => { return comp; } - interface SearchResult { [index: string]: string; }; + interface SearchResult { [index: string]: string }; class TestLocationService { searchResult: SearchResult = {}; diff --git a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts index cb31a6ea24..a09a933b6a 100644 --- a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts @@ -4,9 +4,10 @@ import { ContributorService } from './contributor.service'; import { LocationService } from 'app/shared/location.service'; @Component({ - selector: `aio-contributor-list`, + selector: 'aio-contributor-list', template: `
+

{{person.name}}

{{person.bio}}

diff --git a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts index 581acdc9e1..910c23d4b9 100644 --- a/apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts +++ b/apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts @@ -40,8 +40,7 @@ export class ContributorService { }), // Flatten group map into sorted group array of sorted contributors - map(cmap => { - return Object.keys(cmap).map(key => { + map(cmap => Object.keys(cmap).map(key => { const order = knownGroups.indexOf(key); return { name: key, @@ -49,8 +48,7 @@ export class ContributorService { contributors: cmap[key].sort(compareContributors) } as ContributorGroup; }) - .sort(compareGroups); - }), + .sort(compareGroups)), publishLast(), ); diff --git a/apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts b/apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts index 38af7b148d..35d2c6ff56 100644 --- a/apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts @@ -4,6 +4,7 @@ import { LocationService } from 'app/shared/location.service'; /** Renders the current location path. */ @Component({ + // eslint-disable-next-line @angular-eslint/component-selector selector: 'current-location', template: '{{ location.currentPath | async }}' }) diff --git a/apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts b/apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts index de0496ece2..6fcf92f307 100644 --- a/apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts @@ -13,5 +13,5 @@ import { Component, Input } from '@angular/core'; `, }) export class ExpandableSectionComponent { - @Input() title; + @Input() title: string; } diff --git a/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts b/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts index 8974c4a5d3..0848f526dd 100644 --- a/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts @@ -17,7 +17,7 @@ describe('LiveExampleComponent', () => { @Component({ selector: 'aio-host-comp', - template: `` + template: '' }) class HostComponent { } diff --git a/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts b/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts index 8a75739c28..14c7b9aa33 100644 --- a/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts @@ -50,6 +50,7 @@ const ZIP_BASE = CONTENT_URL_PREFIX + 'zips/'; * // ~/resources/live-examples/toh-pt1/minimal.stackblitz.json */ @Component({ + // eslint-disable-next-line @angular-eslint/component-selector selector: 'live-example', template: ` @@ -151,7 +152,7 @@ export class LiveExampleComponent implements AfterContentInit { */ @Component({ selector: 'aio-embedded-stackblitz', - template: ``, + template: '', styles: ['iframe { min-height: 400px; }'], }) export class EmbeddedStackblitzComponent implements AfterViewInit { diff --git a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.spec.ts b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.spec.ts index f8349f9dad..4955328752 100644 --- a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.spec.ts @@ -21,11 +21,11 @@ describe('OperatorDecisionTreeDataService', () => { it('should get the decision-tree-data.json', () => { service.getDecisionTree$().subscribe( data => expect(data).toBe(treeStub) - ) - const req = httpTestingController.expectOne('/generated/docs/app/decision-tree-data.json') - expect(req.request.method).toEqual('GET') + ); + const req = httpTestingController.expectOne('/generated/docs/app/decision-tree-data.json'); + expect(req.request.method).toEqual('GET'); - req.flush(treeStub) + req.flush(treeStub); httpTestingController.verify(); }); }); diff --git a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts index 4527e11a1f..de28bf76c2 100644 --- a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts @@ -9,7 +9,7 @@ import { OperatorDecisionTreeService } from './operator-decision-tree.service'; selector: 'aio-operator-decision-tree', template: `

Operator Decision Tree

- +

{{ currentSentence$ | async }}

diff --git a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts index b1ffa5fcfd..d217f01a37 100644 --- a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts +++ b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts @@ -28,9 +28,7 @@ export class OperatorDecisionTreeService { isInitialDecision(previousBranchIds) ? 'Start by choosing an option from the list below.' : `${previousBranchIds - .map(entityId => { - return tree[entityId].label; - }) + .map(entityId => tree[entityId].label) .join(' ')}...`.trim() ) ); @@ -39,13 +37,11 @@ export class OperatorDecisionTreeService { this.tree$, this.state$ ).pipe( - filter(([tree, state]) => { - return ( + filter(([tree, state]) => ( treeIsErrorFree(tree) && !!tree[state.currentBranchId] && !!tree[state.currentBranchId].options - ); - }), + )), map(([tree, state]) => { // Project is currently using TypeScript 2.9.2 // With TS 3.1+ this can be done better if we map to [tree, node] and typeguard with a tuple in a filter @@ -53,7 +49,7 @@ export class OperatorDecisionTreeService { const node = tree[state.currentBranchId]; return nodeHasOptions(node) ? node.options.map(option => tree[option]) - : tree['initial'].options.map(option => tree[option]); + : tree.initial.options.map(option => tree[option]); }) ); diff --git a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.spec.ts b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.spec.ts index 9d53485c03..84363fd743 100644 --- a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.spec.ts @@ -3,13 +3,13 @@ import { isInitialDecision, treeIsErrorFree, nodeHasOptions } from './utils'; describe('isInitialDecision', () => { describe('when it is an initial decision', () => { it('should be true', () => { - expect(isInitialDecision(['initial'])).toBe(true) + expect(isInitialDecision(['initial'])).toBe(true); }); }); describe('when it is not an initial decision', () => { it('should be false', () => { - expect(isInitialDecision(['initial', 'foo'])).toBe(false) + expect(isInitialDecision(['initial', 'foo'])).toBe(false); }); }); }); @@ -17,13 +17,13 @@ describe('isInitialDecision', () => { describe('treeIsErrorFree', () => { describe('when the tree is error free', () => { it('should return true', () => { - expect(treeIsErrorFree({})).toBe(true) + expect(treeIsErrorFree({} as any)).toBe(true); }); }); describe('when the tree has an error', () => { it('should return false', () => { - expect(treeIsErrorFree({error: true})).toBe(false) + expect(treeIsErrorFree({error: true} as any)).toBe(false); }); }); }); @@ -31,13 +31,13 @@ describe('treeIsErrorFree', () => { describe('nodeHasOptions', () => { describe('when node has options', () => { it('should return true', () => { - expect(nodeHasOptions({options: ['123']})).toBe(true) + expect(nodeHasOptions({options: ['123']} as any)).toBe(true); }); }); describe('when node has no options', () => { it('should return false', () => { - expect(nodeHasOptions({})).toBe(false) + expect(nodeHasOptions({} as any)).toBe(false); }); }); }); diff --git a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts index e45dc19813..39e3a29e76 100644 --- a/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts +++ b/apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts @@ -1,4 +1,4 @@ -import { OperatorTreeNodeWithOptions } from './interfaces'; +import { OperatorDecisionTree, OperatorTreeNode, OperatorTreeNodeWithOptions } from './interfaces'; export function isInitialDecision(previousBranchIds: string[]): boolean { return ( @@ -6,10 +6,10 @@ export function isInitialDecision(previousBranchIds: string[]): boolean { ); } -export function treeIsErrorFree(tree): boolean { +export function treeIsErrorFree(tree: OperatorDecisionTree): boolean { return !tree.error; } -export function nodeHasOptions(node): node is OperatorTreeNodeWithOptions { +export function nodeHasOptions(node: OperatorTreeNode): node is OperatorTreeNodeWithOptions { return !!node.options; } diff --git a/apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts b/apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts index f1331fa72a..9b6d9d1085 100644 --- a/apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts +++ b/apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts @@ -11,12 +11,14 @@ import { ResourceService } from './resource.service';
+

{{ category.title }}

+

{{ subCategory.title }}

diff --git a/apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts b/apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts index e376268df6..db32d80cde 100644 --- a/apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts +++ b/apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts @@ -86,64 +86,63 @@ describe('ResourceService', () => { }); function getTestResources() { - // tslint:disable:quotemark return { - "Cat 3": { - "order": 3, - "subCategories": { - "Cat3 SubCat1": { - "order": 2, - "resources": { - "Cat3 SubCat1 Res1": { - "desc": "Meetup in Barcelona, Spain. ", - "rev": true, - "title": "Angular Beers", - "url": "http://www.meetup.com/AngularJS-Beers/" + 'Cat 3': { + order: 3, + subCategories: { + 'Cat3 SubCat1': { + order: 2, + resources: { + 'Cat3 SubCat1 Res1': { + desc: 'Meetup in Barcelona, Spain. ', + rev: true, + title: 'Angular Beers', + url: 'http://www.meetup.com/AngularJS-Beers/' }, - "Cat3 SubCat1 Res2": { - "desc": "Angular Camps in Barcelona, Spain.", - "rev": true, - "title": "Angular Camp", - "url": "http://angularcamp.org/" + 'Cat3 SubCat1 Res2': { + desc: 'Angular Camps in Barcelona, Spain.', + rev: true, + title: 'Angular Camp', + url: 'http://angularcamp.org/' } } }, - "Cat3 SubCat2": { - "order": 1, - "resources": { - "Cat3 SubCat2 Res1": { - "desc": "A community index of components and libraries", - "rev": true, - "title": "Catalog of Angular Components & Libraries", - "url": "https://a/b/c" + 'Cat3 SubCat2': { + order: 1, + resources: { + 'Cat3 SubCat2 Res1': { + desc: 'A community index of components and libraries', + rev: true, + title: 'Catalog of Angular Components & Libraries', + url: 'https://a/b/c' } } }, } }, - "Cat 1": { - "order": 1, - "subCategories": { - "Cat1 SubCat1": { - "order": 1, - "resources": { - "S S S": { - "desc": "SSS", - "rev": true, - "title": "Sssss", - "url": "http://s/s/s" + 'Cat 1': { + order: 1, + subCategories: { + 'Cat1 SubCat1': { + order: 1, + resources: { + 'S S S': { + desc: 'SSS', + rev: true, + title: 'Sssss', + url: 'http://s/s/s' }, - "A A A": { - "desc": "AAA", - "rev": true, - "title": "Aaaa", - "url": "http://a/a/a" + 'A A A': { + desc: 'AAA', + rev: true, + title: 'Aaaa', + url: 'http://a/a/a' }, - "Z Z Z": { - "desc": "ZZZ", - "rev": true, - "title": "Zzzzz", - "url": "http://z/z/z" + 'Z Z Z': { + desc: 'ZZZ', + rev: true, + title: 'Zzzzz', + url: 'http://z/z/z' } } }, diff --git a/apps/rxjs.dev/src/app/documents/document.service.spec.ts b/apps/rxjs.dev/src/app/documents/document.service.spec.ts index 3ff3d0cd02..4f17ad20e1 100644 --- a/apps/rxjs.dev/src/app/documents/document.service.spec.ts +++ b/apps/rxjs.dev/src/app/documents/document.service.spec.ts @@ -7,14 +7,11 @@ import { LocationService } from 'app/shared/location.service'; import { MockLocationService } from 'testing/location.service'; import { Logger } from 'app/shared/logger.service'; import { MockLogger } from 'testing/logger.service'; -import { DocumentService, DocumentContents, - FETCHING_ERROR_ID, FILE_NOT_FOUND_ID } from './document.service'; - +import { DocumentService, DocumentContents, FETCHING_ERROR_ID, FILE_NOT_FOUND_ID } from './document.service'; const CONTENT_URL_PREFIX = 'generated/docs/'; describe('DocumentService', () => { - let httpMock: HttpTestingController; function createInjector(initialUrl: string) { @@ -24,7 +21,7 @@ describe('DocumentService', () => { DocumentService, { provide: LocationService, useFactory: () => new MockLocationService(initialUrl) }, { provide: Logger, useClass: MockLogger }, - ] + ], }); } @@ -34,14 +31,13 @@ describe('DocumentService', () => { return { locationService: injector.get(LocationService) as MockLocationService, docService: injector.get(DocumentService) as DocumentService, - logger: injector.get(Logger) as MockLogger + logger: injector.get(Logger) as MockLogger, }; } afterEach(() => httpMock.verify()); describe('currentDocument', () => { - it('should fetch a document for the initial location', () => { const { docService } = getServices('initial/doc'); docService.currentDocument.subscribe(); @@ -50,12 +46,12 @@ describe('DocumentService', () => { }); it('should emit a document each time the location changes', () => { - let latestDocument: DocumentContents|undefined; + let latestDocument: DocumentContents | undefined; const doc0 = { contents: 'doc 0', id: 'initial/doc' }; const doc1 = { contents: 'doc 1', id: 'new/doc' }; const { docService, locationService } = getServices('initial/doc'); - docService.currentDocument.subscribe(doc => latestDocument = doc); + docService.currentDocument.subscribe((doc) => (latestDocument = doc)); expect(latestDocument).toBeUndefined(); httpMock.expectOne({}).flush(doc0); @@ -67,17 +63,15 @@ describe('DocumentService', () => { }); it('should emit the not-found document if the document is not found on the server', () => { - let currentDocument: DocumentContents|undefined; + let currentDocument: DocumentContents | undefined; const notFoundDoc = { id: FILE_NOT_FOUND_ID, contents: '

Page Not Found

' }; const { docService, logger } = getServices('missing/doc'); - docService.currentDocument.subscribe(doc => currentDocument = doc); + docService.currentDocument.subscribe((doc) => (currentDocument = doc)); // Initial request return 404. - httpMock.expectOne({}).flush(null, {status: 404, statusText: 'NOT FOUND'}); - expect(logger.output.error).toEqual([ - [jasmine.any(Error)] - ]); - expect(logger.output.error[0][0].message).toEqual(`Document file not found at 'missing/doc'`); + httpMock.expectOne({}).flush(null, { status: 404, statusText: 'NOT FOUND' }); + expect(logger.output.error).toEqual([[jasmine.any(Error)]]); + expect(logger.output.error[0][0].message).toEqual("Document file not found at 'missing/doc'"); // Subsequent request for not-found document. logger.output.error = []; @@ -87,14 +81,14 @@ describe('DocumentService', () => { }); it('should emit a hard-coded not-found document if the not-found document is not found on the server', () => { - let currentDocument: DocumentContents|undefined; + let currentDocument: DocumentContents | undefined; const hardCodedNotFoundDoc = { contents: 'Document not found', id: FILE_NOT_FOUND_ID }; const nextDoc = { contents: 'Next Doc', id: 'new/doc' }; const { docService, locationService } = getServices(FILE_NOT_FOUND_ID); - docService.currentDocument.subscribe(doc => currentDocument = doc); + docService.currentDocument.subscribe((doc) => (currentDocument = doc)); - httpMock.expectOne({}).flush(null, { status: 404, statusText: 'NOT FOUND'}); + httpMock.expectOne({}).flush(null, { status: 404, statusText: 'NOT FOUND' }); expect(currentDocument).toEqual(hardCodedNotFoundDoc); // now check that we haven't killed the currentDocument observable sequence @@ -109,15 +103,14 @@ describe('DocumentService', () => { const doc2 = { contents: 'doc 2' } as DocumentContents; const { docService, locationService, logger } = getServices('initial/doc'); - docService.currentDocument.subscribe(doc => latestDocument = doc); + docService.currentDocument.subscribe((doc) => (latestDocument = doc)); - httpMock.expectOne({}).flush(null, {status: 500, statusText: 'Server Error'}); + httpMock.expectOne({}).flush(null, { status: 500, statusText: 'Server Error' }); expect(latestDocument.id).toEqual(FETCHING_ERROR_ID); - expect(logger.output.error).toEqual([ - [jasmine.any(Error)] - ]); - expect(logger.output.error[0][0].message) - .toEqual(`Error fetching document 'initial/doc': (Http failure response for generated/docs/initial/doc.json: 500 Server Error)`); + expect(logger.output.error).toEqual([[jasmine.any(Error)]]); + expect(logger.output.error[0][0].message).toEqual( + "Error fetching document 'initial/doc': (Http failure response for generated/docs/initial/doc.json: 500 Server Error)" + ); locationService.go('new/doc'); httpMock.expectOne({}).flush(doc1); @@ -133,7 +126,7 @@ describe('DocumentService', () => { const doc1 = { contents: 'doc 1' } as DocumentContents; const { docService, locationService } = getServices('initial/doc'); - docService.currentDocument.subscribe(doc => latestDocument = doc); + docService.currentDocument.subscribe((doc) => (latestDocument = doc)); httpMock.expectOne({}).flush('this is invalid JSON'); expect(latestDocument.id).toEqual(FETCHING_ERROR_ID); @@ -151,26 +144,26 @@ describe('DocumentService', () => { const doc1 = { contents: 'doc 1' } as DocumentContents; const { docService, locationService } = getServices('url/0'); - subscription = docService.currentDocument.subscribe(doc => latestDocument = doc); + subscription = docService.currentDocument.subscribe((doc) => (latestDocument = doc)); httpMock.expectOne({}).flush(doc0); expect(latestDocument).toEqual(jasmine.objectContaining(doc0)); subscription.unsubscribe(); - subscription = docService.currentDocument.subscribe(doc => latestDocument = doc); + subscription = docService.currentDocument.subscribe((doc) => (latestDocument = doc)); locationService.go('url/1'); httpMock.expectOne({}).flush(doc1); expect(latestDocument).toEqual(jasmine.objectContaining(doc1)); subscription.unsubscribe(); // This should not trigger a new request. - subscription = docService.currentDocument.subscribe(doc => latestDocument = doc); + subscription = docService.currentDocument.subscribe((doc) => (latestDocument = doc)); locationService.go('url/0'); httpMock.expectNone({}); expect(latestDocument).toEqual(jasmine.objectContaining(doc0)); subscription.unsubscribe(); // This should not trigger a new request. - subscription = docService.currentDocument.subscribe(doc => latestDocument = doc); + subscription = docService.currentDocument.subscribe((doc) => (latestDocument = doc)); locationService.go('url/1'); httpMock.expectNone({}); expect(latestDocument).toEqual(jasmine.objectContaining(doc1)); diff --git a/apps/rxjs.dev/src/app/documents/document.service.ts b/apps/rxjs.dev/src/app/documents/document.service.ts index 83a5da9e33..7e001df6c8 100644 --- a/apps/rxjs.dev/src/app/documents/document.service.ts +++ b/apps/rxjs.dev/src/app/documents/document.service.ts @@ -66,9 +66,7 @@ export class DocumentService { throw Error('Invalid data'); } }), - catchError((error: HttpErrorResponse) => { - return error.status === 404 ? this.getFileNotFoundDoc(id) : this.getErrorDoc(id, error); - }), + catchError((error: HttpErrorResponse) => error.status === 404 ? this.getFileNotFoundDoc(id) : this.getErrorDoc(id, error)), ) .subscribe(subject); diff --git a/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.spec.ts b/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.spec.ts index 93a67bdcf6..95d4c5c090 100644 --- a/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.spec.ts +++ b/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.spec.ts @@ -20,7 +20,7 @@ describe('DocViewerComponent', () => { let parentComponent: TestParentComponent; let docViewerEl: HTMLElement; let docViewer: TestDocViewerComponent; - let metaServiceMock: jasmine.SpyObj + let metaServiceMock: jasmine.SpyObj; const safeFlushAsapScheduler = () => asapScheduler.actions.length && asapScheduler.flush(); @@ -48,7 +48,7 @@ describe('DocViewerComponent', () => { let renderSpy: jasmine.Spy; const setCurrentDoc = (newDoc: TestParentComponent['currentDoc']) => { - + parentComponent.currentDoc = newDoc; // set default with id if parameter is not defined parentFixture.detectChanges(); // Run change detection to propagate the new doc to `DocViewer`. safeFlushAsapScheduler(); // Flush `asapScheduler` to trigger `DocViewer#render()`. diff --git a/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts b/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts index 301bd91b8d..bc6d950b85 100644 --- a/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts +++ b/apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts @@ -9,7 +9,6 @@ import { Logger } from 'app/shared/logger.service'; import { TocService } from 'app/shared/toc.service'; import { ElementsLoader } from 'app/custom-elements/elements-loader'; - // Constants export const NO_ANIMATIONS = 'no-animations'; @@ -19,7 +18,7 @@ const initialDocViewerContent = initialDocViewerElement ? initialDocViewerElemen @Component({ selector: 'aio-doc-viewer', - template: '' + template: '', // TODO(robwormald): shadow DOM and emulated don't work here (?!) // encapsulation: ViewEncapsulation.Native }) @@ -62,12 +61,13 @@ export class DocViewerComponent implements OnDestroy { @Output() docRendered = new EventEmitter(); constructor( - elementRef: ElementRef, - private logger: Logger, - private titleService: Title, - private metaService: Meta, - private tocService: TocService, - private elementsLoader: ElementsLoader) { + elementRef: ElementRef, + private logger: Logger, + private titleService: Title, + private metaService: Meta, + private tocService: TocService, + private elementsLoader: ElementsLoader + ) { this.hostElement = elementRef.nativeElement; // Security: the initialDocViewerContent comes from the prerendered DOM and is considered to be secure this.hostElement.innerHTML = initialDocViewerContent; @@ -77,12 +77,12 @@ export class DocViewerComponent implements OnDestroy { } this.docContents$ - .pipe( - observeOn(asapScheduler), - switchMap(newDoc => this.render(newDoc)), - takeUntil(this.onDestroy$), - ) - .subscribe(); + .pipe( + observeOn(asapScheduler), + switchMap((newDoc) => this.render(newDoc)), + takeUntil(this.onDestroy$) + ) + .subscribe(); } ngOnDestroy() { @@ -109,13 +109,13 @@ export class DocViewerComponent implements OnDestroy { return () => { this.tocService.reset(); - let title: string|null = ''; - let description: string|null = ''; + let title: string | null = ''; + let description: string | null = ''; // Only create ToC for docs with an `

` heading. // If you don't want a ToC, add "no-toc" class to `

`. if (titleEl) { - title = (typeof titleEl.innerText === 'string') ? titleEl.innerText : titleEl.textContent; + title = typeof titleEl.innerText === 'string' ? titleEl.innerText : titleEl.textContent; if (needsToc) { this.tocService.genToc(targetElem, docId); @@ -139,21 +139,21 @@ export class DocViewerComponent implements OnDestroy { this.setNoIndex(doc.id === FILE_NOT_FOUND_ID || doc.id === FETCHING_ERROR_ID); return this.void$.pipe( - // Security: `doc.contents` is always authored by the documentation team - // and is considered to be safe. - tap(() => this.nextViewContainer.innerHTML = doc.contents || ''), - tap(() => addTitleAndToc = this.prepareTitleAndToc(this.nextViewContainer, doc.id)), - switchMap(() => this.elementsLoader.loadContainedCustomElements(this.nextViewContainer)), - tap(() => this.docReady.emit()), - switchMap(() => this.swapViews(addTitleAndToc)), - tap(() => this.docRendered.emit()), - catchError(err => { - const errorMessage = (err instanceof Error) ? err.stack : err; - this.logger.error(new Error(`[DocViewer] Error preparing document '${doc.id}': ${errorMessage}`)); - this.nextViewContainer.innerHTML = ''; - this.setNoIndex(true); - return this.void$; - }), + // Security: `doc.contents` is always authored by the documentation team + // and is considered to be safe. + tap(() => (this.nextViewContainer.innerHTML = doc.contents || '')), + tap(() => (addTitleAndToc = this.prepareTitleAndToc(this.nextViewContainer, doc.id))), + switchMap(() => this.elementsLoader.loadContainedCustomElements(this.nextViewContainer)), + tap(() => this.docReady.emit()), + switchMap(() => this.swapViews(addTitleAndToc)), + tap(() => this.docRendered.emit()), + catchError((err) => { + const errorMessage = err instanceof Error ? err.stack : err; + this.logger.error(new Error(`[DocViewer] Error preparing document '${doc.id}': ${errorMessage}`)); + this.nextViewContainer.innerHTML = ''; + this.setNoIndex(true); + return this.void$; + }) ); } @@ -178,7 +178,7 @@ export class DocViewerComponent implements OnDestroy { * the element has been attached to the DOM. */ protected swapViews(onInsertedCb = () => {}): Observable { - const raf$ = new Observable(subscriber => { + const raf$ = new Observable((subscriber) => { const rafId = requestAnimationFrame(() => { subscriber.next(); subscriber.complete(); @@ -194,28 +194,36 @@ export class DocViewerComponent implements OnDestroy { const seconds = Number(cssValue.replace(/s$/, '')); return 1000 * seconds; }; - const animateProp = - (elem: HTMLElement, prop: keyof CSSStyleDeclaration, from: string, to: string, duration = 200) => { - const animationsDisabled = !DocViewerComponent.animationsEnabled - || this.hostElement.classList.contains(NO_ANIMATIONS); - if (prop === 'length' || prop === 'parentRule') { - // We cannot animate length or parentRule properties because they are readonly - return this.void$; - } - elem.style.transition = ''; - return animationsDisabled - ? this.void$.pipe(tap(() => elem.style[`${prop}`] = to)) - : this.void$.pipe( - // In order to ensure that the `from` value will be applied immediately (i.e. - // without transition) and that the `to` value will be affected by the - // `transition` style, we need to ensure an animation frame has passed between - // setting each style. - switchMap(() => raf$), tap(() => elem.style[`${prop}`] = from), - switchMap(() => raf$), tap(() => elem.style.transition = `all ${duration}ms ease-in-out`), - switchMap(() => raf$), tap(() => elem.style[`${prop}`] = to), - switchMap(() => timer(getActualDuration(elem))), switchMap(() => this.void$), - ); - }; + const animateProp = ( + elem: HTMLElement, + prop: T, + from: CSSStyleDeclaration[T], + to: CSSStyleDeclaration[T], + duration = 200 + ) => { + const animationsDisabled = !DocViewerComponent.animationsEnabled || this.hostElement.classList.contains(NO_ANIMATIONS); + if (prop === 'length' || prop === 'parentRule') { + // We cannot animate length or parentRule properties because they are readonly + return this.void$; + } + elem.style.transition = ''; + return animationsDisabled + ? this.void$.pipe(tap(() => (elem.style[prop] = to))) + : this.void$.pipe( + // In order to ensure that the `from` value will be applied immediately (i.e. + // without transition) and that the `to` value will be affected by the + // `transition` style, we need to ensure an animation frame has passed between + // setting each style. + switchMap(() => raf$), + tap(() => (elem.style[prop] = from)), + switchMap(() => raf$), + tap(() => (elem.style.transition = `all ${duration}ms ease-in-out`)), + switchMap(() => raf$), + tap(() => (elem.style[prop] = to)), + switchMap(() => timer(getActualDuration(elem))), + switchMap(() => this.void$) + ); + }; const animateLeave = (elem: HTMLElement) => animateProp(elem, 'opacity', '1', '0.1'); const animateEnter = (elem: HTMLElement) => animateProp(elem, 'opacity', '0.1', '1'); @@ -224,26 +232,26 @@ export class DocViewerComponent implements OnDestroy { if (this.currViewContainer.parentElement) { done$ = done$.pipe( - // Remove the current view from the viewer. - switchMap(() => animateLeave(this.currViewContainer)), - tap(() => this.currViewContainer.parentElement!.removeChild(this.currViewContainer)), - tap(() => this.docRemoved.emit()), + // Remove the current view from the viewer. + switchMap(() => animateLeave(this.currViewContainer)), + tap(() => this.currViewContainer.parentElement?.removeChild(this.currViewContainer)), + tap(() => this.docRemoved.emit()) ); } return done$.pipe( - // Insert the next view into the viewer. - tap(() => this.hostElement.appendChild(this.nextViewContainer)), - tap(() => onInsertedCb()), - tap(() => this.docInserted.emit()), - switchMap(() => animateEnter(this.nextViewContainer)), - // Update the view references and clean up unused nodes. - tap(() => { - const prevViewContainer = this.currViewContainer; - this.currViewContainer = this.nextViewContainer; - this.nextViewContainer = prevViewContainer; - this.nextViewContainer.innerHTML = ''; // Empty to release memory. - }), + // Insert the next view into the viewer. + tap(() => this.hostElement.appendChild(this.nextViewContainer)), + tap(() => onInsertedCb()), + tap(() => this.docInserted.emit()), + switchMap(() => animateEnter(this.nextViewContainer)), + // Update the view references and clean up unused nodes. + tap(() => { + const prevViewContainer = this.currViewContainer; + this.currViewContainer = this.nextViewContainer; + this.nextViewContainer = prevViewContainer; + this.nextViewContainer.innerHTML = ''; // Empty to release memory. + }) ); } @@ -255,7 +263,7 @@ export class DocViewerComponent implements OnDestroy { if (description) { const formattedDescription = description.replace(/<\/?\w*>/gm, ''); - this.metaService.updateTag({ name: 'twitter:description', content: formattedDescription}); + this.metaService.updateTag({ name: 'twitter:description', content: formattedDescription }); this.metaService.updateTag({ property: 'og:description', content: formattedDescription }); } } diff --git a/apps/rxjs.dev/src/app/layout/notification/notification.component.ts b/apps/rxjs.dev/src/app/layout/notification/notification.component.ts index ba2381f74c..50e62acd6f 100644 --- a/apps/rxjs.dev/src/app/layout/notification/notification.component.ts +++ b/apps/rxjs.dev/src/app/layout/notification/notification.component.ts @@ -7,7 +7,9 @@ const LOCAL_STORAGE_NAMESPACE = 'aio-notification/'; @Component({ selector: 'aio-notification', - template: ` + template: ` + + diff --git a/apps/rxjs.dev/src/app/navigation/navigation.service.spec.ts b/apps/rxjs.dev/src/app/navigation/navigation.service.spec.ts index 76b888dda6..7a1b2ae549 100644 --- a/apps/rxjs.dev/src/app/navigation/navigation.service.spec.ts +++ b/apps/rxjs.dev/src/app/navigation/navigation.service.spec.ts @@ -63,7 +63,7 @@ describe('NavigationService', () => { const sideNav: NavigationNode[] = [{ title: 'a', tooltip: 'a tip' }, { title: 'b' }, { title: 'c!' }, { url: 'foo', title: '' }]; beforeEach(() => { - navService.navigationViews.subscribe((views) => (view = views['sideNav'])); + navService.navigationViews.subscribe((views) => (view = views.sideNav)); httpMock.expectOne({}).flush({ sideNav }); }); @@ -129,7 +129,7 @@ describe('NavigationService', () => { view: 'SideNav', nodes: [sideNavNodes[0].children![0], sideNavNodes[0]], }, - }); + } as any); locationService.go('d'); expect(currentNodes).toEqual({ @@ -138,7 +138,7 @@ describe('NavigationService', () => { view: 'SideNav', nodes: [sideNavNodes[0].children![0].children![1], sideNavNodes[0].children![0], sideNavNodes[0]], }, - }); + } as any); locationService.go('f'); expect(currentNodes).toEqual({ @@ -222,7 +222,7 @@ describe('NavigationService', () => { expectedDocVersions = docVersions.map((v) => ({ ...v, ...{ tooltip: v.title + '.' } })); - navService.navigationViews.subscribe((views) => (actualDocVersions = views['docVersions'])); + navService.navigationViews.subscribe((views) => (actualDocVersions = views.docVersions)); }); it('should extract the docVersions', () => { diff --git a/apps/rxjs.dev/src/app/search/search-box/search-box.component.ts b/apps/rxjs.dev/src/app/search/search-box/search-box.component.ts index 9e27340609..17fc6edc50 100644 --- a/apps/rxjs.dev/src/app/search/search-box/search-box.component.ts +++ b/apps/rxjs.dev/src/app/search/search-box/search-box.component.ts @@ -30,7 +30,9 @@ export class SearchBoxComponent implements OnInit { private searchSubject = new Subject(); @ViewChild('searchBox', {static: true}) searchBox: ElementRef; + // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output() onSearch = this.searchSubject.pipe(distinctUntilChanged(), debounceTime(this.searchDebounce)); + // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output() onFocus = new EventEmitter(); constructor(private locationService: LocationService) { } @@ -39,7 +41,7 @@ export class SearchBoxComponent implements OnInit { * When we first show this search box we trigger a search if there is a search query in the URL */ ngOnInit() { - const query = this.locationService.search()['search']; + const query = this.locationService.search().search; if (query) { this.query = query; this.doSearch(); diff --git a/apps/rxjs.dev/src/app/search/search.worker.ts b/apps/rxjs.dev/src/app/search/search.worker.ts index e3b4d9935c..1b3a43cc4e 100644 --- a/apps/rxjs.dev/src/app/search/search.worker.ts +++ b/apps/rxjs.dev/src/app/search/search.worker.ts @@ -39,8 +39,8 @@ interface EncodedPage { addEventListener('message', handleMessage); -const customLunr = function (config: lunr.ConfigFunction) { - var builder = new lunr.Builder(); +const customLunr = function(config: lunr.ConfigFunction) { + const builder = new lunr.Builder(); builder.pipeline.add(lunr.trimmer, lunr.stemmer); builder.searchPipeline.add(lunr.stemmer); config.call(builder, builder); @@ -53,7 +53,7 @@ function createIndex(loadIndexFn: IndexLoader): lunr.Index { // The lunr typings are missing QueryLexer so we have to add them here manually. const queryLexer = (lunr as any as { QueryLexer: { termSeparator: RegExp } }).QueryLexer; queryLexer.termSeparator = lunr.tokenizer.separator = /\s+/; - return customLunr(function () { + return customLunr(function() { this.ref('path'); this.field('topics', { boost: 15 }); this.field('title', { boost: 10 }); @@ -88,7 +88,7 @@ function handleMessage(message: { data: WebWorkerMessage }): void { function makeRequest(url: string, callback: (response: any) => void): void { // The JSON file that is loaded should be an array of PageInfo: const searchDataRequest = new XMLHttpRequest(); - searchDataRequest.onload = function () { + searchDataRequest.onload = function() { callback(JSON.parse(this.responseText)); }; searchDataRequest.open('GET', url); @@ -128,6 +128,7 @@ function queryIndex(query: string): PageInfo[] { let results = index.query((queryBuilder) => { queryBuilder.term(lunr.tokenizer(query), { fields: ['title'], + // eslint-disable-next-line no-bitwise wildcard: lunr.Query.wildcard.TRAILING | lunr.Query.wildcard.LEADING, usePipeline: true, presence: lunr.Query.presence.REQUIRED, diff --git a/apps/rxjs.dev/src/app/shared/attribute-utils.spec.ts b/apps/rxjs.dev/src/app/shared/attribute-utils.spec.ts index dd0ee2c265..e483777d30 100644 --- a/apps/rxjs.dev/src/app/shared/attribute-utils.spec.ts +++ b/apps/rxjs.dev/src/app/shared/attribute-utils.spec.ts @@ -7,7 +7,7 @@ describe('Attribute Utilities', () => { beforeEach(() => { const div = document.createElement('div'); - div.innerHTML = `
`; + div.innerHTML = '
'; testEl = div.querySelector('div')!; }); diff --git a/apps/rxjs.dev/src/app/shared/attribute-utils.ts b/apps/rxjs.dev/src/app/shared/attribute-utils.ts index 758aaa422a..767cbb28ce 100644 --- a/apps/rxjs.dev/src/app/shared/attribute-utils.ts +++ b/apps/rxjs.dev/src/app/shared/attribute-utils.ts @@ -8,6 +8,7 @@ export interface AttrMap { /** * Get attribute map from element or ElementRef `attributes`. * Attribute map keys are forced lowercase for case-insensitive lookup. + * * @param el The source of the attributes. */ export function getAttrs(el: HTMLElement | ElementRef): AttrMap { @@ -21,6 +22,7 @@ export function getAttrs(el: HTMLElement | ElementRef): AttrMap { /** * Return the attribute that matches `attr`. + * * @param attr Name of the attribute or a string of candidate attribute names. */ export function getAttrValue(attrs: AttrMap, attr: string | string[]): string | undefined { @@ -33,6 +35,7 @@ export function getAttrValue(attrs: AttrMap, attr: string | string[]): string | /** * Return the boolean state of an attribute value (if supplied) + * * @param attrValue The string value of some attribute (or undefined if attribute not present). * @param def Default boolean value when attribute is undefined. */ @@ -42,6 +45,7 @@ export function boolFromValue(attrValue: string | undefined, def: boolean = fals /** * Return the boolean state of attribute from an element + * * @param el The source of the attributes. * @param atty Name of the attribute or a string of candidate attribute names. * @param def Default boolean value when attribute is undefined. diff --git a/apps/rxjs.dev/src/app/shared/copier.service.ts b/apps/rxjs.dev/src/app/shared/copier.service.ts index 4cc06baccd..ac4fc9104f 100644 --- a/apps/rxjs.dev/src/app/shared/copier.service.ts +++ b/apps/rxjs.dev/src/app/shared/copier.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from "@angular/core"; +import { Injectable } from '@angular/core'; /** * This class is based on the code in the following projects: * diff --git a/apps/rxjs.dev/src/app/shared/custom-icon-registry.ts b/apps/rxjs.dev/src/app/shared/custom-icon-registry.ts index c9c60ef0d3..020a89f3dc 100644 --- a/apps/rxjs.dev/src/app/shared/custom-icon-registry.ts +++ b/apps/rxjs.dev/src/app/shared/custom-icon-registry.ts @@ -36,13 +36,13 @@ interface SvgIconMap { export class CustomIconRegistry extends MatIconRegistry { private preloadedSvgElements: SvgIconMap = {}; - constructor(http: HttpClient, sanitizer: DomSanitizer, @Optional() @Inject(DOCUMENT) document, + constructor(http: HttpClient, sanitizer: DomSanitizer, @Optional() @Inject(DOCUMENT) document: Document, @Inject(SVG_ICONS) svgIcons: SvgIconInfo[], errorHandler: ErrorHandler) { super(http, sanitizer, document, errorHandler); this.loadSvgElements(svgIcons); } - getNamedSvgIcon(iconName: string, namespace?: string) { + override getNamedSvgIcon(iconName: string, namespace?: string) { if (this.preloadedSvgElements[iconName]) { return of(this.preloadedSvgElements[iconName].cloneNode(true) as SVGElement); } diff --git a/apps/rxjs.dev/src/app/shared/deployment.service.ts b/apps/rxjs.dev/src/app/shared/deployment.service.ts index 6a3f0ee79a..d9cf031616 100644 --- a/apps/rxjs.dev/src/app/shared/deployment.service.ts +++ b/apps/rxjs.dev/src/app/shared/deployment.service.ts @@ -11,7 +11,7 @@ export class Deployment { * The deployment mode set from the environment provided at build time; * or overridden by the `mode` query parameter: e.g. `...?mode=archive` */ - mode: string = this.location.search()['mode'] || environment.mode; + mode: string = this.location.search().mode || environment.mode; constructor(private location: LocationService) {} }; diff --git a/apps/rxjs.dev/src/app/shared/ga.service.ts b/apps/rxjs.dev/src/app/shared/ga.service.ts index 65318f2a20..ec557cf2e9 100644 --- a/apps/rxjs.dev/src/app/shared/ga.service.ts +++ b/apps/rxjs.dev/src/app/shared/ga.service.ts @@ -14,7 +14,7 @@ export class GaService { private previousUrl: string; constructor(@Inject(WindowToken) private window: Window) { - this.ga('create', environment['gaId'] , 'auto'); + this.ga('create', environment.gaId , 'auto'); } locationChanged(url: string) { @@ -34,7 +34,7 @@ export class GaService { } ga(...args: any[]) { - const gaFn = (this.window as any)['ga']; + const gaFn = (this.window as any).ga; if (gaFn) { gaFn(...args); } diff --git a/apps/rxjs.dev/src/app/shared/location.service.ts b/apps/rxjs.dev/src/app/shared/location.service.ts index a200774e58..2db05d71ce 100644 --- a/apps/rxjs.dev/src/app/shared/location.service.ts +++ b/apps/rxjs.dev/src/app/shared/location.service.ts @@ -30,9 +30,7 @@ export class LocationService { this.urlSubject.next(location.path(true)); - this.location.subscribe(state => { - return this.urlSubject.next(state.url || ''); - }); + this.location.subscribe(state => this.urlSubject.next(state.url || '')); swUpdates.updateActivated.subscribe(() => this.swUpdateActivated = true); } @@ -64,7 +62,7 @@ export class LocationService { } search() { - const search: { [index: string]: string|undefined; } = {}; + const search: { [index: string]: string|undefined } = {}; const path = this.location.path(); const q = path.indexOf('?'); if (q > -1) { diff --git a/apps/rxjs.dev/src/app/shared/reporting-error-handler.ts b/apps/rxjs.dev/src/app/shared/reporting-error-handler.ts index 35f0f80e99..7afc6d5508 100644 --- a/apps/rxjs.dev/src/app/shared/reporting-error-handler.ts +++ b/apps/rxjs.dev/src/app/shared/reporting-error-handler.ts @@ -15,9 +15,10 @@ export class ReportingErrorHandler extends ErrorHandler { /** * Send error info to Google Analytics, in addition to the default handling. + * * @param error Information about the error. */ - handleError(error: string | Error) { + override handleError(error: string | Error) { try { super.handleError(error); diff --git a/apps/rxjs.dev/src/app/shared/scroll-spy.service.spec.ts b/apps/rxjs.dev/src/app/shared/scroll-spy.service.spec.ts index 061625d865..db936beb65 100644 --- a/apps/rxjs.dev/src/app/shared/scroll-spy.service.spec.ts +++ b/apps/rxjs.dev/src/app/shared/scroll-spy.service.spec.ts @@ -5,7 +5,6 @@ import { DOCUMENT } from '@angular/common'; import { ScrollService } from 'app/shared/scroll.service'; import { ScrollItem, ScrollSpiedElement, ScrollSpiedElementGroup, ScrollSpyService } from 'app/shared/scroll-spy.service'; - describe('ScrollSpiedElement', () => { it('should expose the spied element and index', () => { const elem = {} as Element; @@ -17,7 +16,7 @@ describe('ScrollSpiedElement', () => { describe('#calculateTop()', () => { it('should calculate the `top` value', () => { - const elem = {getBoundingClientRect: () => ({top: 100})} as Element; + const elem = { getBoundingClientRect: () => ({ top: 100 }) } as Element; const spiedElem = new ScrollSpiedElement(elem, 42); spiedElem.calculateTop(0, 0); @@ -35,7 +34,6 @@ describe('ScrollSpiedElement', () => { }); }); - describe('ScrollSpiedElementGroup', () => { describe('#calibrate()', () => { it('should calculate `top` for all spied elements', () => { @@ -60,25 +58,27 @@ describe('ScrollSpiedElementGroup', () => { describe('#onScroll()', () => { let group: ScrollSpiedElementGroup; - let activeItems: (ScrollItem|null)[]; + let activeItems: (ScrollItem | null)[]; - const activeIndices = () => activeItems.map(x => x && x.index); + const activeIndices = () => activeItems.map((x) => x && x.index); beforeEach(() => { const tops = [50, 150, 100]; - spyOn(ScrollSpiedElement.prototype, 'calculateTop').and.callFake( - function(this: ScrollSpiedElement, scrollTop: number, topOffset: number) { + spyOn(ScrollSpiedElement.prototype, 'calculateTop').and.callFake(function( + this: ScrollSpiedElement, + scrollTop: number, + topOffset: number + ) { this.top = tops[this.index]; }); activeItems = []; group = new ScrollSpiedElementGroup([{}, {}, {}] as Element[]); - group.activeScrollItem.subscribe(item => activeItems.push(item)); + group.activeScrollItem.subscribe((item) => activeItems.push(item)); group.calibrate(20, 10); }); - it('should emit a `ScrollItem` on `activeScrollItem`', () => { expect(activeItems.length).toBe(0); @@ -131,7 +131,7 @@ describe('ScrollSpiedElementGroup', () => { it('should emit null if there are no spied elements (even if scrolled to the bottom)', () => { group = new ScrollSpiedElementGroup([]); - group.activeScrollItem.subscribe(item => activeItems.push(item)); + group.activeScrollItem.subscribe((item) => activeItems.push(item)); group.onScroll(20, 140); expect(activeItems).toEqual([null]); @@ -145,7 +145,6 @@ describe('ScrollSpiedElementGroup', () => { }); }); - describe('ScrollSpyService', () => { let injector: Injector; let scrollSpyService: ScrollSpyService; @@ -154,13 +153,12 @@ describe('ScrollSpyService', () => { injector = ReflectiveInjector.resolveAndCreate([ { provide: DOCUMENT, useValue: { body: {} } }, { provide: ScrollService, useValue: { topOffset: 50 } }, - ScrollSpyService + ScrollSpyService, ]); scrollSpyService = injector.get(ScrollSpyService); }); - describe('#spyOn()', () => { let getSpiedElemGroups: () => ScrollSpiedElementGroup[]; @@ -168,7 +166,6 @@ describe('ScrollSpyService', () => { getSpiedElemGroups = () => (scrollSpyService as any).spiedElementGroups; }); - it('should create a `ScrollSpiedElementGroup` when called', () => { expect(getSpiedElemGroups().length).toBe(0); @@ -192,10 +189,8 @@ describe('ScrollSpyService', () => { it('should call `onResize()` if it is the first `ScrollSpiedElementGroup`', () => { const actions: string[] = []; - const onResizeSpy = spyOn(ScrollSpyService.prototype as any, 'onResize') - .and.callFake(() => actions.push('onResize')); - const calibrateSpy = spyOn(ScrollSpiedElementGroup.prototype, 'calibrate') - .and.callFake(() => actions.push('calibrate')); + const onResizeSpy = spyOn(ScrollSpyService.prototype as any, 'onResize').and.callFake(() => actions.push('onResize')); + const calibrateSpy = spyOn(ScrollSpiedElementGroup.prototype, 'calibrate').and.callFake(() => actions.push('calibrate')); expect(onResizeSpy).not.toHaveBeenCalled(); expect(calibrateSpy).not.toHaveBeenCalled(); @@ -215,27 +210,27 @@ describe('ScrollSpyService', () => { const info2 = scrollSpyService.spyOn([]); const spiedElemGroups = getSpiedElemGroups(); - info1.active.subscribe(item => activeIndices1.push(item && item.index)); - info2.active.subscribe(item => activeIndices2.push(item && item.index)); + info1.active.subscribe((item) => activeIndices1.push(item && item.index)); + info2.active.subscribe((item) => activeIndices2.push(item && item.index)); activeIndices1.length = 0; activeIndices2.length = 0; - spiedElemGroups[0].activeScrollItem.next({index: 1} as ScrollItem); - spiedElemGroups[0].activeScrollItem.next({index: 2} as ScrollItem); - spiedElemGroups[1].activeScrollItem.next({index: 3} as ScrollItem); + spiedElemGroups[0].activeScrollItem.next({ index: 1 } as ScrollItem); + spiedElemGroups[0].activeScrollItem.next({ index: 2 } as ScrollItem); + spiedElemGroups[1].activeScrollItem.next({ index: 3 } as ScrollItem); spiedElemGroups[0].activeScrollItem.next(null); - spiedElemGroups[1].activeScrollItem.next({index: 4} as ScrollItem); + spiedElemGroups[1].activeScrollItem.next({ index: 4 } as ScrollItem); spiedElemGroups[1].activeScrollItem.next(null); - spiedElemGroups[0].activeScrollItem.next({index: 5} as ScrollItem); - spiedElemGroups[1].activeScrollItem.next({index: 6} as ScrollItem); + spiedElemGroups[0].activeScrollItem.next({ index: 5 } as ScrollItem); + spiedElemGroups[1].activeScrollItem.next({ index: 6 } as ScrollItem); expect(activeIndices1).toEqual([1, 2, null, 5]); expect(activeIndices2).toEqual([3, 4, null, 6]); }); it('should remember and emit the last active item to new subscribers', () => { - const items = [{index: 1}, {index: 2}, {index: 3}] as ScrollItem[]; - let lastActiveItem: ScrollItem|null; + const items = [{ index: 1 }, { index: 2 }, { index: 3 }] as ScrollItem[]; + let lastActiveItem: ScrollItem | null; const info = scrollSpyService.spyOn([]); const spiedElemGroup = getSpiedElemGroups()[0]; @@ -245,24 +240,24 @@ describe('ScrollSpyService', () => { spiedElemGroup.activeScrollItem.next(items[2]); spiedElemGroup.activeScrollItem.next(null); spiedElemGroup.activeScrollItem.next(items[1]); - info.active.subscribe(item => lastActiveItem = item); + info.active.subscribe((item) => (lastActiveItem = item)); expect(lastActiveItem!).toBe(items[1]); spiedElemGroup.activeScrollItem.next(null); - info.active.subscribe(item => lastActiveItem = item); + info.active.subscribe((item) => (lastActiveItem = item)); expect(lastActiveItem!).toBeNull(); }); it('should only emit distinct values on `active`', () => { - const items = [{index: 1}, {index: 2}] as ScrollItem[]; + const items = [{ index: 1 }, { index: 2 }] as ScrollItem[]; const activeIndices: (number | null)[] = []; const info = scrollSpyService.spyOn([]); const spiedElemGroup = getSpiedElemGroups()[0]; - info.active.subscribe(item => activeIndices.push(item && item.index)); + info.active.subscribe((item) => activeIndices.push(item && item.index)); activeIndices.length = 0; spiedElemGroup.activeScrollItem.next(items[0]); @@ -305,7 +300,6 @@ describe('ScrollSpyService', () => { onResizeSpy = spyOn(ScrollSpyService.prototype as any, 'onResize'); }); - it('should be subscribed to when the first group of elements is spied on', fakeAsync(() => { window.dispatchEvent(new Event('resize')); expect(onResizeSpy).not.toHaveBeenCalled(); @@ -385,7 +379,6 @@ describe('ScrollSpyService', () => { onScrollSpy = spyOn(ScrollSpyService.prototype as any, 'onScroll'); }); - it('should be subscribed to when the first group of elements is spied on', fakeAsync(() => { window.dispatchEvent(new Event('scroll')); expect(onScrollSpy).not.toHaveBeenCalled(); @@ -461,12 +454,12 @@ describe('ScrollSpyService', () => { scrollSpyService.spyOn([]); const spiedElemGroups: ScrollSpiedElementGroup[] = (scrollSpyService as any).spiedElementGroups; - const calibrateSpies = spiedElemGroups.map(group => spyOn(group, 'calibrate')); + const calibrateSpies = spiedElemGroups.map((group) => spyOn(group, 'calibrate')); - calibrateSpies.forEach(spy => expect(spy).not.toHaveBeenCalled()); + calibrateSpies.forEach((spy) => expect(spy).not.toHaveBeenCalled()); (scrollSpyService as any).onResize(); - calibrateSpies.forEach(spy => expect(spy).toHaveBeenCalled()); + calibrateSpies.forEach((spy) => expect(spy).toHaveBeenCalled()); }); }); @@ -477,12 +470,12 @@ describe('ScrollSpyService', () => { scrollSpyService.spyOn([]); const spiedElemGroups: ScrollSpiedElementGroup[] = (scrollSpyService as any).spiedElementGroups; - const onScrollSpies = spiedElemGroups.map(group => spyOn(group, 'onScroll')); + const onScrollSpies = spiedElemGroups.map((group) => spyOn(group, 'onScroll')); - onScrollSpies.forEach(spy => expect(spy).not.toHaveBeenCalled()); + onScrollSpies.forEach((spy) => expect(spy).not.toHaveBeenCalled()); (scrollSpyService as any).onScroll(); - onScrollSpies.forEach(spy => expect(spy).toHaveBeenCalled()); + onScrollSpies.forEach((spy) => expect(spy).toHaveBeenCalled()); }); it('should first re-calibrate if the content height has changed', () => { @@ -493,25 +486,26 @@ describe('ScrollSpyService', () => { scrollSpyService.spyOn([]); const spiedElemGroups: ScrollSpiedElementGroup[] = (scrollSpyService as any).spiedElementGroups; - const onScrollSpies = spiedElemGroups.map(group => spyOn(group, 'onScroll')); - const calibrateSpies = spiedElemGroups.map((group, i) => spyOn(group, 'calibrate') - .and.callFake(() => expect(onScrollSpies[i]).not.toHaveBeenCalled())); + const onScrollSpies = spiedElemGroups.map((group) => spyOn(group, 'onScroll')); + const calibrateSpies = spiedElemGroups.map((group, i) => + spyOn(group, 'calibrate').and.callFake(() => expect(onScrollSpies[i]).not.toHaveBeenCalled()) + ); - calibrateSpies.forEach(spy => expect(spy).not.toHaveBeenCalled()); - onScrollSpies.forEach(spy => expect(spy).not.toHaveBeenCalled()); + calibrateSpies.forEach((spy) => expect(spy).not.toHaveBeenCalled()); + onScrollSpies.forEach((spy) => expect(spy).not.toHaveBeenCalled()); // No content height change... (scrollSpyService as any).onScroll(); - calibrateSpies.forEach(spy => expect(spy).not.toHaveBeenCalled()); - onScrollSpies.forEach(spy => expect(spy).toHaveBeenCalled()); + calibrateSpies.forEach((spy) => expect(spy).not.toHaveBeenCalled()); + onScrollSpies.forEach((spy) => expect(spy).toHaveBeenCalled()); - onScrollSpies.forEach(spy => spy.calls.reset()); + onScrollSpies.forEach((spy) => spy.calls.reset()); body.scrollHeight = 100; // Viewport changed... (scrollSpyService as any).onScroll(); - calibrateSpies.forEach(spy => expect(spy).toHaveBeenCalled()); - onScrollSpies.forEach(spy => expect(spy).toHaveBeenCalled()); + calibrateSpies.forEach((spy) => expect(spy).toHaveBeenCalled()); + onScrollSpies.forEach((spy) => expect(spy).toHaveBeenCalled()); }); }); }); diff --git a/apps/rxjs.dev/src/app/shared/scroll.service.ts b/apps/rxjs.dev/src/app/shared/scroll.service.ts index 5916b28038..8136124f6d 100644 --- a/apps/rxjs.dev/src/app/shared/scroll.service.ts +++ b/apps/rxjs.dev/src/app/shared/scroll.service.ts @@ -98,6 +98,7 @@ export class ScrollService { /** * When we load a document, we have to scroll to the correct position depending on whether this is a new location, * a back/forward in the history, or a refresh + * * @param delay before we scroll to the good position */ scrollAfterRender(delay: number) { diff --git a/apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts b/apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts index 7a1f583581..b27a6bb90c 100644 --- a/apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts +++ b/apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts @@ -23,11 +23,7 @@ describe('SearchResultsComponent', () => { { path: 'api/c', title: 'API C' }, ] // fill it out to exceed 10 guide pages - .concat( - 'nmlkjihgfe'.split('').map((l) => { - return { path: 'guide/' + l, title: 'Guide ' + l }; - }) - ) + .concat('nmlkjihgfe'.split('').map((l) => ({ path: 'guide/' + l, title: 'Guide ' + l }))) // add these empty fields to satisfy interface .map((r) => ({ ...{ keywords: '', titleWords: '', type: '' }, ...r })); @@ -35,7 +31,7 @@ describe('SearchResultsComponent', () => { } function compareTitle(l: SearchResult, r: SearchResult) { - return l.title!.toUpperCase() > r.title!.toUpperCase() ? 1 : -1; + return l.title?.toUpperCase() > r.title?.toUpperCase() ? 1 : -1; } function setSearchResults(query: string, results: SearchResult[]) { diff --git a/apps/rxjs.dev/src/app/shared/select/select.component.ts b/apps/rxjs.dev/src/app/shared/select/select.component.ts index 7587327387..b734c41479 100644 --- a/apps/rxjs.dev/src/app/shared/select/select.component.ts +++ b/apps/rxjs.dev/src/app/shared/select/select.component.ts @@ -35,7 +35,8 @@ export class SelectComponent implements OnInit { options: Option[]; @Output() - change = new EventEmitter<{ option: Option; index: number }>(); + // eslint-disable-next-line @angular-eslint/no-output-native + change = new EventEmitter<{ option: Option, index: number }>(); @Input() showSymbol = false; diff --git a/apps/rxjs.dev/src/app/shared/toc.service.spec.ts b/apps/rxjs.dev/src/app/shared/toc.service.spec.ts index cce8d35dcb..9e008333c2 100644 --- a/apps/rxjs.dev/src/app/shared/toc.service.spec.ts +++ b/apps/rxjs.dev/src/app/shared/toc.service.spec.ts @@ -264,7 +264,7 @@ describe('TocService', () => { it('should have "SafeHtml" content which is heading\'s innerHTML ', () => { const heading = headings[3]; const content = lastTocList[3].content; - expect((content).changingThisBreaksApplicationSecurity) + expect((content as TestSafeHtml).changingThisBreaksApplicationSecurity) .toEqual(heading.innerHTML); }); @@ -321,7 +321,7 @@ describe('TocService', () => { }); it('should have removed anchor link from tocItem html content', () => { - expect((tocItem.content) + expect((tocItem.content as TestSafeHtml) .changingThisBreaksApplicationSecurity) .toEqual('Setup to develop locally.'); }); @@ -341,18 +341,16 @@ interface TestSafeHtml extends SafeHtml { class TestDomSanitizer { bypassSecurityTrustHtml = jasmine.createSpy('bypassSecurityTrustHtml') - .and.callFake((html: string) => { - return { + .and.callFake((html: string) => ({ changingThisBreaksApplicationSecurity: html, getTypeName: () => 'HTML', - } as TestSafeHtml; - }); + } as TestSafeHtml)); } class MockScrollSpyService { private $$lastInfo: { - active: Subject, - unspy: jasmine.Spy, + active: Subject; + unspy: jasmine.Spy; } | undefined; get $lastInfo() { diff --git a/apps/rxjs.dev/src/app/shared/toc.service.ts b/apps/rxjs.dev/src/app/shared/toc.service.ts index e5fdd0196a..4a6ce78139 100644 --- a/apps/rxjs.dev/src/app/shared/toc.service.ts +++ b/apps/rxjs.dev/src/app/shared/toc.service.ts @@ -4,7 +4,6 @@ import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { ReplaySubject } from 'rxjs'; import { ScrollSpyInfo, ScrollSpyService } from 'app/shared/scroll-spy.service'; - export interface TocItem { content: SafeHtml; href: string; @@ -19,10 +18,7 @@ export class TocService { activeItemIndex = new ReplaySubject(1); private scrollSpyInfo: ScrollSpyInfo | null = null; - constructor( - @Inject(DOCUMENT) private document: any, - private domSanitizer: DomSanitizer, - private scrollSpyService: ScrollSpyService) { } + constructor(@Inject(DOCUMENT) private document: any, private domSanitizer: DomSanitizer, private scrollSpyService: ScrollSpyService) {} genToc(docElement?: Element, docId = '') { this.resetScrollSpyInfo(); @@ -34,7 +30,7 @@ export class TocService { const headings = this.findTocHeadings(docElement); const idMap = new Map(); - const tocList = headings.map(heading => ({ + const tocList = headings.map((heading) => ({ content: this.extractHeadingSafeHtml(heading), href: `${docId}#${this.getId(heading, idMap)}`, level: heading.tagName.toLowerCase(), @@ -44,7 +40,7 @@ export class TocService { this.tocList.next(tocList); this.scrollSpyInfo = this.scrollSpyService.spyOn(headings); - this.scrollSpyInfo.active.subscribe(item => this.activeItemIndex.next(item && item.index)); + this.scrollSpyInfo.active.subscribe((item) => this.activeItemIndex.next(item && item.index)); } reset() { @@ -57,6 +53,7 @@ export class TocService { const div: HTMLDivElement = this.document.createElement('div'); div.innerHTML = heading.innerHTML; const anchorLinks: NodeListOf = div.querySelectorAll('a'); + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < anchorLinks.length; i++) { const anchorLink = anchorLinks[i]; if (!anchorLink.classList.contains('header-link')) { diff --git a/apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts b/apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts index ccbfdc7ddc..ac2763d732 100644 --- a/apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts +++ b/apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts @@ -59,7 +59,7 @@ export class SwUpdatesService implements OnDestroy { } private log(message: string) { - const timestamp = (new Date).toISOString(); + const timestamp = (new Date()).toISOString(); this.logger.log(`[SwUpdates - ${timestamp}]: ${message}`); } } diff --git a/apps/rxjs.dev/src/testing/doc-viewer-utils.ts b/apps/rxjs.dev/src/testing/doc-viewer-utils.ts index d53cf942a6..6da9d91f3b 100644 --- a/apps/rxjs.dev/src/testing/doc-viewer-utils.ts +++ b/apps/rxjs.dev/src/testing/doc-viewer-utils.ts @@ -17,12 +17,12 @@ import { ElementsLoader } from 'app/custom-elements/elements-loader'; //////////////////////////////////////////////////////////////////////////////////////////////////// export class TestDocViewerComponent extends DocViewerComponent { - currViewContainer: HTMLElement; - nextViewContainer: HTMLElement; + override currViewContainer: HTMLElement; + override nextViewContainer: HTMLElement; - prepareTitleAndToc(targetElem: HTMLElement, docId: string): () => void { return null as any; } - render(doc: DocumentContents): Observable { return null as any; } - swapViews(onInsertedCb?: () => void): Observable { return null as any; } + override prepareTitleAndToc(targetElem: HTMLElement, docId: string): () => void { return null as any; } + override render(doc: DocumentContents): Observable { return null as any; } + override swapViews(onInsertedCb?: () => void): Observable { return null as any; } } diff --git a/apps/rxjs.dev/src/tsconfig.app.json b/apps/rxjs.dev/src/tsconfig.app.json deleted file mode 100644 index 9c189f622a..0000000000 --- a/apps/rxjs.dev/src/tsconfig.app.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/app", - "baseUrl": "", - "types": [], - "importHelpers": true - }, - "angularCompilerOptions": { - "preserveWhitespaces": false - }, - "files": [ - "main.ts", - "polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/apps/rxjs.dev/src/tsconfig.spec.json b/apps/rxjs.dev/src/tsconfig.spec.json deleted file mode 100644 index f8ad4e40ce..0000000000 --- a/apps/rxjs.dev/src/tsconfig.spec.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] - }, - "files": [ - "test.ts", - "polyfills.ts" - ], - "include": [ - "testing/**/*.ts", - "**/*.spec.ts", - "**/*.d.ts" - ] -} \ No newline at end of file diff --git a/apps/rxjs.dev/src/tslint.json b/apps/rxjs.dev/src/tslint.json deleted file mode 100644 index 4025ad4282..0000000000 --- a/apps/rxjs.dev/src/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "aio", - "camelCase" - ], - "component-selector": [ - true, - "element", - "aio", - "kebab-case" - ] - } -} diff --git a/apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirector.ts b/apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirector.ts index cd8a44e75a..b9228270e6 100644 --- a/apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirector.ts +++ b/apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirector.ts @@ -25,8 +25,8 @@ export class FirebaseRedirector { throw new Error('infinite redirect loop'); } private doRedirect(url: string) { - for (let i = 0; i < this.redirects.length; i++) { - const newUrl = this.redirects[i].replace(url); + for (const redirect of this.redirects) { + const newUrl = redirect.replace(url); if (newUrl !== undefined) { return newUrl; } diff --git a/apps/rxjs.dev/tsconfig.app.json b/apps/rxjs.dev/tsconfig.app.json new file mode 100644 index 0000000000..183c53c5f3 --- /dev/null +++ b/apps/rxjs.dev/tsconfig.app.json @@ -0,0 +1,23 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noPropertyAccessFromIndexSignature": false, + "outDir": "./out-tsc/app", + "types": [ + "trusted-types" + ], + "plugins": [ + { + "name": "tsec", + "exemptionConfig": "./security-exemptions.json" + } + ] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] + } \ No newline at end of file diff --git a/apps/rxjs.dev/tsconfig.json b/apps/rxjs.dev/tsconfig.json index 9082db4c2c..8a45002ade 100644 --- a/apps/rxjs.dev/tsconfig.json +++ b/apps/rxjs.dev/tsconfig.json @@ -1,36 +1,48 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "compilerOptions": { - "importHelpers": true, - "strict": true, - "noImplicitAny": false, - "strictPropertyInitialization": false, - "skipLibCheck": true, - "outDir": "./dist/out-tsc", "baseUrl": "src", + "outDir": "./out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + // NOTE: Intentionally deviate from default Angular CLI settings + // (due to many violations and uglier syntax). + "noPropertyAccessFromIndexSignature": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, "sourceMap": true, "declaration": false, - "moduleResolution": "node", + "downlevelIteration": true, "experimentalDecorators": true, - "noUnusedLocals": true, - "target": "es2015", - "typeRoots": [ - "node_modules/@types" - ], + "moduleResolution": "node", + "importHelpers": true, + "target": "es2017", + "module": "es2020", "lib": [ - "es2016", + "es2020", "dom" ], - "module": "esnext" - }, - "angularCompilerOptions": { - "strictTemplates": true, + "skipLibCheck": true, + // disabled because this is on by default in tsc 2.7 breaking our codebase - we need to refactor + "strictPropertyInitialization": false }, "exclude": [ - "content", - "tools", "aio-builds-setup", + "content", + "dist", "node_modules", + "out-tsc", "scripts" - ] + ], + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "disableTypeScriptVersionCheck": true, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } } \ No newline at end of file diff --git a/apps/rxjs.dev/tsconfig.spec.json b/apps/rxjs.dev/tsconfig.spec.json new file mode 100644 index 0000000000..632d4d4036 --- /dev/null +++ b/apps/rxjs.dev/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noUnusedParameters": false, + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/testing/**/*.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index d907388fcc..d56265b2e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,6 +154,52 @@ ora "5.4.1" rxjs "6.6.7" +"@angular-eslint/builder@^13.0.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-13.5.0.tgz#84480d7d02e4ac0dbee86d4533a4d1626eb1279e" + integrity sha512-IYY/HYS4fSddJLs2pAkMkKhHL07driUILPxGnGLblfWuoJBhRspyrVL3uZc3Q4iJXc1RJfaOno9oRw11FGyL6Q== + dependencies: + "@nrwl/devkit" "13.1.3" + +"@angular-eslint/bundled-angular-compiler@13.5.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.5.0.tgz#5b417f7f4503b5588957bb4b963b752e0b76a158" + integrity sha512-7M/5ilxqPD3ydgqqdLsYs3kBwZgNg2Y6C01B5SEHZNLqLT9kAJa7I4y6GlxCZqejCIh554kdXGeV3abIxFccSg== + +"@angular-eslint/eslint-plugin-template@^13.0.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.5.0.tgz#c7769d045ba792891199f1c9fd1be37ba54c5a49" + integrity sha512-ZVSXayn8MqYOhYomH2Cjc0azhuUQbY9fp9dKjJZOD64KhP8BYHw8+Ogc9E/FU5oZQ9fKw6A+23NAYKmLNqSAgA== + dependencies: + "@angular-eslint/bundled-angular-compiler" "13.5.0" + "@typescript-eslint/experimental-utils" "5.27.1" + aria-query "^4.2.2" + axobject-query "^2.2.0" + +"@angular-eslint/eslint-plugin@^13.0.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-13.5.0.tgz#7af8414e2e51421079f3f92eccf1e548090adba0" + integrity sha512-k9o9WIqUkdO8tdYFCJ54PUWsNd9HHflih/GmA13EWciBYx8QxciwBh0u4NSAnbtOwp4Y7juGZ/Dta5ZrT/2VBA== + dependencies: + "@angular-eslint/utils" "13.5.0" + "@typescript-eslint/experimental-utils" "5.27.1" + +"@angular-eslint/template-parser@^13.0.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-13.5.0.tgz#9930b4d7618ae7bd2d3783ce9840ef4a9b45fdc9" + integrity sha512-k+24+kBjaOuthfp9RBQB0zH6UqeizZuFQFEuZEQbvirPbdQ2SqNBw7IcmW2Qw1v7fjFe6/6gqK7wm2g7o9ZZvA== + dependencies: + "@angular-eslint/bundled-angular-compiler" "13.5.0" + eslint-scope "^5.1.0" + +"@angular-eslint/utils@13.5.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-13.5.0.tgz#bb4aefc2f1259084e9dfe6c2ac3e266acd929e6f" + integrity sha512-wX3W6STSDJDJ7ZyEsUdBp4HUPwmillMmKcdnFsy+qxbpJFzFOxOFpK1zet4ELsq1XpB89i9vRvC3vYbpHn3CSw== + dependencies: + "@angular-eslint/bundled-angular-compiler" "13.5.0" + "@typescript-eslint/experimental-utils" "5.27.1" + "@angular/animations@^13.1.1": version "13.4.0" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-13.4.0.tgz#f70a69c4fd5009ba6dcd7e9ad6b71872e7597139" @@ -218,11 +264,6 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" - integrity sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ== - "@angular/compiler@^13.1.1": version "13.4.0" resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-13.4.0.tgz#ec24a2b71808abd1e3c629e4935a378d487d0143" @@ -230,11 +271,6 @@ dependencies: tslib "^2.3.0" -"@angular/core@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" - integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== - "@angular/core@^13.1.1": version "13.4.0" resolved "https://registry.yarnpkg.com/@angular/core/-/core-13.4.0.tgz#1418e3c2be203dd7d72494dd43279483757eacff" @@ -1577,6 +1613,14 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== +"@babel/runtime-corejs3@^7.10.2": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.7.tgz#2c3d323d21569f2950c9126780bfa400632360bd" + integrity sha512-ER55qzLREVA5YxeyQ3Qu48tgsF2ZrFjFjUS6V6wF0cikSw+goBJgB9PBRM1T6+Ah4iiM+sxmfS/Sy/jdzFfhiQ== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" + "@babel/runtime-corejs3@^7.12.1": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.5.tgz#818778beea4f23d40b77b5ad213894404c14f3f3" @@ -1592,6 +1636,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.7.tgz#dd7c88deeb218a0f8bd34d5db1aa242e0f203193" + integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.6", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" @@ -1721,11 +1772,31 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + "@eslint/js@8.54.0": version "8.54.0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -2058,6 +2129,25 @@ node-gyp "^8.2.0" read-package-json-fast "^2.0.1" +"@nrwl/cli@*", "@nrwl/cli@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.9.3.tgz#5946ee84953fd9e67708fd39049f0f5f328ede14" + integrity sha512-qiAKHkov3iBx6hroPTitUrkRSUZFQqVgNJiF9gXRFC6pNJe9RS4rlmcIaoUFOboi9CnH5jwblNJVcz8YSVYOvA== + dependencies: + nx "15.9.3" + +"@nrwl/devkit@13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.1.3.tgz#8b119587984371a4caf0b3601a7481e04bac65a3" + integrity sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA== + dependencies: + "@nrwl/tao" "13.1.3" + ejs "^3.1.5" + ignore "^5.0.4" + rxjs "^6.5.4" + semver "7.3.4" + tslib "^2.0.0" + "@nrwl/devkit@17.2.6": version "17.2.6" resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-17.2.6.tgz#ab283bc16fde0b3c4a73ce59c1364b89d9b73468" @@ -2072,6 +2162,75 @@ dependencies: "@nx/js" "17.2.6" +"@nrwl/nx-darwin-arm64@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.3.tgz#a365c081637a002d0cb31b829e7b8cff1765477f" + integrity sha512-2htJzVa+S/uLg5tj4nbO/tRz2SRMQIpT6EeWMgDGuEKQdpuRLVj2ez9hMpkRn9tl1tBUwR05hbV28DnOLRESVA== + +"@nrwl/nx-darwin-x64@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.3.tgz#cd0f293e5f07b6c685316e1d9482bdb041c5e796" + integrity sha512-p+8UkfC6KTLOX4XRt7NSP8DoTzEgs73+SN0csoXT9VsNO35+F0Z5zMZxpEc7RVo5Wen/4PGh2OWA+8gtgntsJQ== + +"@nrwl/nx-linux-arm-gnueabihf@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.3.tgz#8b8ff6fb8ecae11067e01e7f18632194fb45f738" + integrity sha512-xwW7bZtggrxhFbYvvWWArtcSWwoxWzi/4wNgP3wPbcZFNZiraahVQSpIyJXrS9aajGbdvuDBM8cbDsMj9v7mwg== + +"@nrwl/nx-linux-arm64-gnu@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.3.tgz#597a26db180efb1912aa32907749141709976009" + integrity sha512-KNxDL2OAHxhFqztEjv2mNwXD6xrzoUury7NsYZYqlxJUNc3YYBfRSLEatnw491crvMBndbxfGVTWEO9S4YmRuw== + +"@nrwl/nx-linux-arm64-musl@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.3.tgz#8cd50627f62e8677d354167ec8f0bdea9fdc39af" + integrity sha512-AxoZzfsXH7ZqDE+WrQtRumufIcSIBw4U/LikiDLaWWoGtNpAfKLkD/PHirZiNxHIeGy1Toi4ccMUolXbafLVFw== + +"@nrwl/nx-linux-x64-gnu@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.3.tgz#65eb4435e4eded2f0f938c7a4df3bc0de7029592" + integrity sha512-P8AOPRufvV4a5cSczNsw84zFAI7NgAiEBTybYcyymdNJmo0iArJXEmvj/G4mB20O8VCsCkwqMYAu6nQEnES1Kw== + +"@nrwl/nx-linux-x64-musl@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.3.tgz#ea663ce2c67f3ee2113c05b29adf49afaf4ced7d" + integrity sha512-4ZYDp7T319+xbw7Z7KVtRefzaXJipZfgrM49r+Y1FAfYDc8y18zvKz3slK26wfWz+EUZwKsa/DfA2KmyRG3DvQ== + +"@nrwl/nx-win32-arm64-msvc@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.3.tgz#6777b22bd83860d5bc455a70aaca267f0b5b5477" + integrity sha512-UhgxIPgTZBKN1oxlLPSklkSzVL3hA4lAiVc9A0Utumpbp0ob/Xx+2vHzg3cnmNH3jWkZ+9OsC2dKyeMB6gAbSw== + +"@nrwl/nx-win32-x64-msvc@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.3.tgz#03dc071b93cc0b91646a097bf0337658364c0011" + integrity sha512-gdnvqURKnu0EQGOFJ6NUKq6wSB+viNb7Z8qtKhzSmFwVjT8akOnLWn7ZhL9v28TAjLM7/s1Mwvmz/IMj1PGlcQ== + +"@nrwl/tao@13.1.3": + version "13.1.3" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.1.3.tgz#5a88029b0aa9dfd4bca0a86d3dde2b608c468b36" + integrity sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA== + dependencies: + chalk "4.1.0" + enquirer "~2.3.6" + fs-extra "^9.1.0" + jsonc-parser "3.0.0" + nx "13.1.3" + rxjs "^6.5.4" + rxjs-for-await "0.0.2" + semver "7.3.4" + tmp "~0.2.1" + tslib "^2.0.0" + yargs-parser "20.0.0" + +"@nrwl/tao@15.9.3": + version "15.9.3" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.9.3.tgz#c88fe0493e028ff73b8746d90f5942c73f15e937" + integrity sha512-NcjFCbuMa53C3fBrK7qLUImUBySyr9EVwmiZuAv9sZZtm4eILK8w3qihjrB4FFUuLjPU/SViriYXi+hF2tbP4w== + dependencies: + nx "15.9.3" + "@nrwl/tao@17.2.6": version "17.2.6" resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.6.tgz#eab09ad1c5751e4310bb8c21796e25df1e8310b1" @@ -2209,6 +2368,14 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.18.1.tgz#8e47caf57a84b1dcc1722b2025693348cdf443b4" integrity sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA== +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + "@phenomnomnominal/tsquery@~5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz#a2a5abc89f92c01562a32806655817516653a388" @@ -2744,6 +2911,11 @@ resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@types/unist@*", "@types/unist@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20" @@ -2787,6 +2959,13 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/experimental-utils@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.27.1.tgz#c5c5121a75cf875bfae8083c50f5ae7bfde6145a" + integrity sha512-Vd8uewIixGP93sEnmTRIH6jHZYRQRkGPDPpapACMvitJKX8335VHNyqKTE+mZ+m3E2c5VznTZfSsSsS5IF7vUA== + dependencies: + "@typescript-eslint/utils" "5.27.1" + "@typescript-eslint/parser@^6.9.0": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.13.1.tgz#29d6d4e5fab4669e58bc15f6904b67da65567487" @@ -2798,6 +2977,25 @@ "@typescript-eslint/visitor-keys" "6.13.1" debug "^4.3.4" +"@typescript-eslint/parser@^6.9.1": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.17.0.tgz#8cd7a0599888ca6056082225b2fdf9a635bf32a1" + integrity sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A== + dependencies: + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz#4d1504392d01fe5f76f4a5825991ec78b7b7894d" + integrity sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg== + dependencies: + "@typescript-eslint/types" "5.27.1" + "@typescript-eslint/visitor-keys" "5.27.1" + "@typescript-eslint/scope-manager@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz#58c7c37c6a957d3d9f59bc4f64c2888e0cac1d70" @@ -2806,6 +3004,14 @@ "@typescript-eslint/types" "6.13.1" "@typescript-eslint/visitor-keys" "6.13.1" +"@typescript-eslint/scope-manager@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" + integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== + dependencies: + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" + "@typescript-eslint/type-utils@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz#e6e5885e387841cae9c38fc0638fd8b7561973d6" @@ -2816,11 +3022,34 @@ debug "^4.3.4" ts-api-utils "^1.0.1" +"@typescript-eslint/types@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" + integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== + "@typescript-eslint/types@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.13.1.tgz#b56f26130e7eb8fa1e429c75fb969cae6ad7bb5c" integrity sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg== +"@typescript-eslint/types@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" + integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== + +"@typescript-eslint/typescript-estree@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz#7621ee78607331821c16fffc21fc7a452d7bc808" + integrity sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw== + dependencies: + "@typescript-eslint/types" "5.27.1" + "@typescript-eslint/visitor-keys" "5.27.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/typescript-estree@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz#d01dda78d2487434d1c503853fa00291c566efa4" @@ -2834,6 +3063,32 @@ semver "^7.5.4" ts-api-utils "^1.0.1" +"@typescript-eslint/typescript-estree@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" + integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== + dependencies: + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" + integrity sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.27.1" + "@typescript-eslint/types" "5.27.1" + "@typescript-eslint/typescript-estree" "5.27.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/utils@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.13.1.tgz#925b3a2453a71ada914ae329b7bb7e7d96634b2f" @@ -2847,6 +3102,14 @@ "@typescript-eslint/typescript-estree" "6.13.1" semver "^7.5.4" +"@typescript-eslint/visitor-keys@5.27.1": + version "5.27.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz#05a62666f2a89769dac2e6baa48f74e8472983af" + integrity sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ== + dependencies: + "@typescript-eslint/types" "5.27.1" + eslint-visitor-keys "^3.3.0" + "@typescript-eslint/visitor-keys@6.13.1": version "6.13.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz#c4b692dcc23a4fc60685b718f10fde789d65a540" @@ -2855,6 +3118,14 @@ "@typescript-eslint/types" "6.13.1" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" + integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== + dependencies: + "@typescript-eslint/types" "6.17.0" + eslint-visitor-keys "^3.4.1" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -3014,6 +3285,14 @@ js-yaml "^3.10.0" tslib "^2.4.0" +"@yarnpkg/parsers@^3.0.0-rc.18": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0.tgz#a43136f094bca5dcc1ae784c296446a85211cc62" + integrity sha512-jVZa3njBv6tcOUw34nlUdUM/40wwtm/gnVF8rtk0tA6vNcokqYI8CFU1BZjlpFwUSZaXxYkrtuPE/f2MMFlTxQ== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + "@zkochan/js-yaml@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" @@ -3381,11 +3660,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" - integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== - "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -3479,13 +3753,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw== +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" arr-diff@^4.0.0: version "4.0.0" @@ -3674,11 +3948,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - ast-types@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -3723,6 +3992,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -3760,6 +4034,15 @@ axe-core@4.1.3: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.3.tgz#64a4c85509e0991f5168340edc4bedd1ceea6966" integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== +axios@^1.0.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4" + integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axios@^1.5.1: version "1.6.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" @@ -3769,12 +4052,10 @@ axios@^1.5.1: form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" - integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== - dependencies: - ast-types-flow "0.0.7" +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== babel-loader@8.2.3: version "8.2.3" @@ -4423,6 +4704,14 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" @@ -4775,26 +5064,6 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -codelyzer@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.2.tgz#25d72eae641e8ff13ffd7d99b27c9c7ad5d7e135" - integrity sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g== - dependencies: - "@angular/compiler" "9.0.0" - "@angular/core" "9.0.0" - app-root-path "^3.0.0" - aria-query "^3.0.0" - axobject-query "2.0.2" - css-selector-tokenizer "^0.7.1" - cssauron "^1.4.0" - damerau-levenshtein "^1.0.4" - rxjs "^6.5.3" - semver-dsl "^1.0.1" - source-map "^0.5.7" - sprintf-js "^1.1.2" - tslib "^1.10.0" - zone.js "~0.10.3" - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -4919,7 +5188,7 @@ commander@7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^2.11.0, commander@^2.20.0: +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -5411,14 +5680,6 @@ css-selector-parser@^1.3.0: resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== -css-selector-tokenizer@^0.7.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -5454,13 +5715,6 @@ css@^3.0.0: source-map "^0.6.1" source-map-resolve "^0.6.0" -cssauron@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" - integrity sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw== - dependencies: - through X.X.X - cssdb@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.1.0.tgz#ec728d5f5c0811debd0820cbebda505d43003400" @@ -5539,11 +5793,6 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -damerau-levenshtein@^1.0.4: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -6090,6 +6339,11 @@ dotenv@^6.1.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + dotenv@~16.3.1: version "16.3.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" @@ -6178,7 +6432,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.7: +ejs@^3.1.5, ejs@^3.1.7: version "3.1.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== @@ -6630,10 +6884,10 @@ eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.28.1: - version "2.29.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" - integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== +eslint-plugin-import@^2.23.4: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: array-includes "^3.1.7" array.prototype.findlastindex "^1.2.3" @@ -6651,9 +6905,9 @@ eslint-plugin-import@^2.28.1: object.groupby "^1.0.1" object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" -eslint-plugin-jasmine@^4.1.3: +eslint-plugin-jasmine@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.3.tgz#c4ced986a61dd5b180982bafe6da1cbac0941c52" integrity sha512-q8j8KnLH/4uwmPELFZvEyfEcuCuGxXScJaRdqHjOjz064GcfX6aoFbzy5VohZ5QYk2+WvoqMoqDSb9nRLf89GQ== @@ -6678,7 +6932,7 @@ eslint-plugin-prefer-arrow@^1.2.3: resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041" integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== -eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -6694,17 +6948,73 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.51.0, eslint@^8.52.0: +eslint@^8.0.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +eslint@^8.52.0: version "8.54.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== @@ -7144,11 +7454,6 @@ fast-url-parser@^1.1.3: dependencies: punycode "^1.3.2" -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -7525,6 +7830,16 @@ fs-extra@^8.0.1, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -10895,6 +11210,13 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@9.0.3, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -10909,13 +11231,6 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -11240,7 +11555,7 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-addon-api@^3.0.0: +node-addon-api@^3.0.0, node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== @@ -11269,7 +11584,7 @@ node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.2.2: +node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: version "4.7.1" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.7.1.tgz#cd7d2eb48e594874053150a9418ac85af83ca8f7" integrity sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg== @@ -11522,6 +11837,64 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +nx@13.1.3: + version "13.1.3" + resolved "https://registry.yarnpkg.com/nx/-/nx-13.1.3.tgz#0b2db9b5bc87a47fb3a90014d2b2abb44f568851" + integrity sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw== + dependencies: + "@nrwl/cli" "*" + +nx@15.9.3: + version "15.9.3" + resolved "https://registry.yarnpkg.com/nx/-/nx-15.9.3.tgz#72f4186ea41ccf0e2713ce248848a22464c8949e" + integrity sha512-GLwbykfTABc7/UZjQEEnV1bQbTVC53W+Zj4xWY640/45I4iZf/TUqKMBCgtLZ9v89gEsKOM4zsx55CqHT3bekA== + dependencies: + "@nrwl/cli" "15.9.3" + "@nrwl/tao" "15.9.3" + "@parcel/watcher" "2.0.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "^3.0.0-rc.18" + "@zkochan/js-yaml" "0.0.6" + axios "^1.0.0" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^11.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + strong-log-transformer "^2.1.0" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nrwl/nx-darwin-arm64" "15.9.3" + "@nrwl/nx-darwin-x64" "15.9.3" + "@nrwl/nx-linux-arm-gnueabihf" "15.9.3" + "@nrwl/nx-linux-arm64-gnu" "15.9.3" + "@nrwl/nx-linux-arm64-musl" "15.9.3" + "@nrwl/nx-linux-x64-gnu" "15.9.3" + "@nrwl/nx-linux-x64-musl" "15.9.3" + "@nrwl/nx-win32-arm64-msvc" "15.9.3" + "@nrwl/nx-win32-x64-msvc" "15.9.3" + nx@17.2.6: version "17.2.6" resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.6.tgz#717297e0757237aa010f2e07aa8fdf68e77ea104" @@ -13548,7 +13921,12 @@ rusha@^0.8.13: resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68" integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== -rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.6.0: +rxjs-for-await@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz#26598a1d6167147cc192172970e7eed4e620384b" + integrity sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw== + +rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.2, rxjs@^6.5.4, rxjs@^6.6.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -13757,13 +14135,6 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver-dsl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" - integrity sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng== - dependencies: - semver "^5.3.0" - semver-regex@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" @@ -13812,7 +14183,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0, semve resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -14275,7 +14646,7 @@ source-map@0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== @@ -14377,11 +14748,6 @@ split@0.3: dependencies: through "2" -sprintf-js@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -14974,7 +15340,7 @@ through2@2.0.1: readable-stream "~2.0.0" xtend "~4.0.0" -through@2, "through@>=2.2.7 <3", through@X.X.X, through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -15190,7 +15556,17 @@ tsconfig-paths-webpack-plugin@3.5.1: enhanced-resolve "^5.7.0" tsconfig-paths "^3.9.0" -tsconfig-paths@^3.14.2, tsconfig-paths@^3.9.0: +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^3.9.0: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -15214,16 +15590,23 @@ tslib@2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@^1.10.0, tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -15895,6 +16278,11 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-compile-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + valid-url@^1: version "1.0.9" resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" @@ -16583,6 +16971,11 @@ yamljs@^0.3.0: argparse "^1.0.7" glob "^7.0.5" +yargs-parser@20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.0.0.tgz#c65a1daaa977ad63cebdd52159147b789a4e19a9" + integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -16711,11 +17104,6 @@ zip-stream@^4.1.0: compress-commons "^4.1.2" readable-stream "^3.6.0" -zone.js@~0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" - integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== - zone.js@~0.11.4: version "0.11.8" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.8.tgz#40dea9adc1ad007b5effb2bfed17f350f1f46a21"