From ca7d4c3403c952e5fae046706d2b57651d7d6c4a Mon Sep 17 00:00:00 2001 From: dario-piotrowicz Date: Thu, 15 Jul 2021 21:59:57 +0100 Subject: [PATCH] refactor(docs-infra): migrate aio from tslint to eslint (#42820) migrate aio to eslint as tslint has been deprecated, the migration is restricted to the aio app and its e2e tests and does not include the other tools, for such reason both tslint and codelyzer have not been removed (to be done in a next PR) some minor tweaks needed to be applied to the code so that it would adhere to the new ESLinting behaviour most TSLint rules have been substituted with their ESLint equivalent, with some exceptions: * [whitespace] does not have an ESLint equivalent (suggested to be handled by prettier) * [import-spacing] does not have an ESLint equivalent (suggested to be handled by prettier) * [ban] replaced with [no-restricted-syntax] as there is no (official/included) ESLint equivalent some rules have minor different behaviours compared to their TSLint counterparts: * @typescript-eslint/naming-convention: - typescript-eslint does not enforce uppercase for const only. * @typescript-eslint/no-unused-expressions: - The TSLint optional config "allow-new" is the default ESLint behavior and will no longer be ignored. * arrow-body-style: - ESLint will throw an error if the function body is multiline yet has a one-line return on it. * eqeqeq: - Option "smart" allows for comparing two literal values, evaluating the value of typeof and null comparisons. * no-console: - Custom console methods, if they exist, will no longer be allowed. * no-invalid-this: - Functions in methods will no longer be ignored. * no-underscore-dangle: - Leading and trailing underscores (_) on identifiers will now be ignored. * prefer-arrow/prefer-arrow-functions: - ESLint does not support allowing standalone function declarations. - ESLint does not support allowing named functions defined with the function keyword. * space-before-function-paren: - Option "constructor" is not supported by ESLint. - Option "method" is not supported by ESLint. additional notes: * the current typescript version used by the aio app is 4.3.5, which is not supported by typescript-eslint (the supported versions are >=3.3.1 and <4.3.0). this causes a warning message to appear during linting, this issue should likely/hopefully disappear in the future as typescript-eslint catches up * The new "no-console" rule is not completely equivalent to what we had prior the migration, this is because TSLint's "no-console" rule let you specify the methods you did not want to allow, whilst ESLint's "no-console" lets you specify the methods that you do want to allow, so and in order not to have a very long list of methods in the ESLint rule it's been decided for the time being to simply only allow the "log", "warn" and "error" methods * 4 dependencies have been added as they have been considered necessary (see: https://github.com/angular/angular/pull/42820#discussion_r669978232) extra: * the migration has been performed by following: https://github.com/angular-eslint/angular-eslint#migrating-an-angular-cli-project-from-codelyzer-and-tslin * more on typescript-eslint at: https://github.com/typescript-eslint/typescript-eslint PR Close #42820 --- aio/.eslintrc.json | 91 ++++ aio/angular.json | 14 +- aio/content/file-not-found.md | 2 +- aio/package.json | 11 +- aio/src/404-body.html | 2 +- aio/src/app/app.component.spec.ts | 3 +- aio/src/app/app.module.ts | 4 +- .../api/api-list.component.spec.ts | 4 +- .../code/code-example.component.spec.ts | 4 +- .../code/code-example.component.ts | 6 +- .../code/code-tabs.component.ts | 2 +- .../code/code.component.spec.ts | 1 - .../custom-elements/code/code.component.ts | 2 +- .../code/pretty-printer.service.ts | 3 +- .../contributor-list.component.spec.ts | 4 +- .../contributor/contributor-list.component.ts | 4 +- .../contributor/contributor.service.ts | 7 +- .../live-example.component.spec.ts | 2 +- .../live-example/live-example.component.ts | 4 +- .../resource/resource-list.component.html | 4 +- .../resource/resource-list.component.spec.ts | 4 +- .../resource/resource-list.component.ts | 1 - .../app/documents/document.service.spec.ts | 4 +- aio/src/app/documents/document.service.ts | 6 +- .../layout/doc-viewer/doc-viewer.component.ts | 16 +- .../mode-banner/mode-banner.component.ts | 2 +- .../search/search-box/search-box.component.ts | 4 +- aio/src/app/search/search.service.ts | 2 +- aio/src/app/shared/attribute-utils.spec.ts | 2 +- aio/src/app/shared/attribute-utils.ts | 8 +- aio/src/app/shared/custom-icon-registry.ts | 7 +- aio/src/app/shared/location.service.ts | 6 +- aio/src/app/shared/reporting-error-handler.ts | 1 + aio/src/app/shared/scroll.service.ts | 3 +- aio/src/app/shared/select/select.component.ts | 20 +- aio/src/app/shared/toc.service.spec.ts | 14 +- aio/tests/deployment/e2e/site.po.ts | 4 +- aio/tests/e2e/src/api-pages.e2e-spec.ts | 4 +- aio/tests/e2e/src/app.e2e-spec.ts | 4 +- aio/tests/e2e/src/pwa-manifest.po.ts | 20 +- .../mocks/methodParameters.ts | 4 +- .../angular-api-package/mocks/testSrc.ts | 7 +- aio/tslint.json | 170 ------- aio/yarn.lock | 438 +++++++++++++++++- 44 files changed, 624 insertions(+), 301 deletions(-) create mode 100644 aio/.eslintrc.json delete mode 100644 aio/tslint.json diff --git a/aio/.eslintrc.json b/aio/.eslintrc.json new file mode 100644 index 0000000000..2f94590cd8 --- /dev/null +++ b/aio/.eslintrc.json @@ -0,0 +1,91 @@ +{ + "root": true, + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json", + "tests/e2e/tsconfig.json" + ], + "createDefaultProgram": true + }, + "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", + "@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", + "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": "error", + "no-use-before-define": "off", + "prefer-arrow/prefer-arrow-functions": "off", + "quotes": "off", + "@typescript-eslint/quotes": ["error", "single", {"avoidEscape": true}], + "semi": "error" + } + }, + { + "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/aio/angular.json b/aio/angular.json index 513d7eef7f..215aa49ea4 100644 --- a/aio/angular.json +++ b/aio/angular.json @@ -196,16 +196,12 @@ } }, "lint": { - "builder": "@angular-devkit/build-angular:tslint", + "builder": "@angular-eslint/builder:lint", "options": { - "tsConfig": [ - "tsconfig.app.json", - "tsconfig.spec.json", - "tsconfig.worker.json", - "tests/e2e/tsconfig.json" - ], - "exclude": [ - "**/node_modules/**" + "lintFilePatterns": [ + "src/!(generated)/**/*.ts", + "src/!(generated)/**/*.html", + "tests/**/*.ts" ] } }, diff --git a/aio/content/file-not-found.md b/aio/content/file-not-found.md index b8a0ff887f..02b880dd99 100644 --- a/aio/content/file-not-found.md +++ b/aio/content/file-not-found.md @@ -1,6 +1,6 @@
- + not found

Page Not Found

We're sorry. The page you are looking for cannot be found.

diff --git a/aio/package.json b/aio/package.json index 371e27b460..d789f5af43 100644 --- a/aio/package.json +++ b/aio/package.json @@ -105,6 +105,10 @@ }, "devDependencies": { "@angular-devkit/build-angular": "12.1.1", + "@angular-eslint/builder": "12.2.2", + "@angular-eslint/eslint-plugin": "12.2.2", + "@angular-eslint/eslint-plugin-template": "12.2.2", + "@angular-eslint/template-parser": "12.2.2", "@angular/cli": "12.1.1", "@angular/compiler-cli": "12.1.1", "@swc/cli": "^0.1.36", @@ -114,6 +118,8 @@ "@types/node": "^12.7.9", "@types/stemmer": "^1.0.2", "@types/xregexp": "^4.3.0", + "@typescript-eslint/eslint-plugin": "4.23.0", + "@typescript-eslint/parser": "4.23.0", "@yarnpkg/lockfile": "^1.1.0", "archiver": "^5.3.0", "assert": "^2.0.0", @@ -127,8 +133,11 @@ "dgeni-packages": "^0.29.1", "entities": "^2.2.0", "esbuild": "^0.12.0", - "eslint": "^7.23.0", + "eslint": "^7.26.0", + "eslint-plugin-import": "^2.23.4", "eslint-plugin-jasmine": "^4.1.2", + "eslint-plugin-jsdoc": "^35.4.3", + "eslint-plugin-prefer-arrow": "^1.2.3", "find-free-port": "^2.0.0", "firebase-tools": "^9.8.0", "fs-extra": "^10.0.0", diff --git a/aio/src/404-body.html b/aio/src/404-body.html index a41585acb3..3e48190479 100644 --- a/aio/src/404-body.html +++ b/aio/src/404-body.html @@ -27,7 +27,7 @@
- + not found

Resource Not Found

We're sorry. The resource you are looking for cannot be found.

diff --git a/aio/src/app/app.component.spec.ts b/aio/src/app/app.component.spec.ts index 18385db24a..b3f2718d67 100644 --- a/aio/src/app/app.component.spec.ts +++ b/aio/src/app/app.component.spec.ts @@ -589,7 +589,7 @@ describe('AppComponent', () => { }); describe('restrainScrolling()', () => { - const preventedScrolling = (currentTarget: object, deltaY: number) => { + const preventedScrolling = (currentTarget: { scrollTop: number, scrollHeight?: number, clientHeight?: number }, deltaY: number) => { const evt = { deltaY, currentTarget, @@ -1311,7 +1311,6 @@ class TestHttpClient { { title: 'v2', url: 'https://v2.angular.io' } ]; - // tslint:disable:quotemark navJson = { TopBar: [ { diff --git a/aio/src/app/app.module.ts b/aio/src/app/app.module.ts index 4a27d5b562..c81ccecec4 100644 --- a/aio/src/app/app.module.ts +++ b/aio/src/app/app.module.ts @@ -47,7 +47,7 @@ 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 +/* eslint-disable max-len */ export const svgIconProviders = [ { provide: SVG_ICONS, @@ -145,7 +145,7 @@ export const svgIconProviders = [ multi: true, }, ]; -// tslint:enable: max-line-length +/* eslint-enable max-len */ @NgModule({ imports: [ diff --git a/aio/src/app/custom-elements/api/api-list.component.spec.ts b/aio/src/app/custom-elements/api/api-list.component.spec.ts index c12aa9f5c2..1f79d2e600 100644 --- a/aio/src/app/custom-elements/api/api-list.component.spec.ts +++ b/aio/src/app/custom-elements/api/api-list.component.spec.ts @@ -29,7 +29,8 @@ describe('ApiListComponent', () => { }); /** - * Expectation Utility: Assert that filteredSections has the expected result for this test + * Expectation Utility: Assert that filteredSections has the expected result for this test. + * * @param itemTest - return true if the item passes the match test * * Subscibes to `filteredSections` and performs expectation within subscription callback. @@ -220,7 +221,6 @@ class TestApiService { sections = this.sectionsSubject.asObservable(); } -// tslint:disable:quotemark const apiSections: ApiSection[] = [ { name: 'common', diff --git a/aio/src/app/custom-elements/code/code-example.component.spec.ts b/aio/src/app/custom-elements/code/code-example.component.spec.ts index 91d6dc673d..56d5598aeb 100644 --- a/aio/src/app/custom-elements/code/code-example.component.spec.ts +++ b/aio/src/app/custom-elements/code/code-example.component.spec.ts @@ -33,7 +33,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 clean-up the projected code snippet once captured', () => { @@ -98,7 +98,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/aio/src/app/custom-elements/code/code-example.component.ts b/aio/src/app/custom-elements/code/code-example.component.ts index c7219edac1..6a01e9b13b 100644 --- a/aio/src/app/custom-elements/code/code-example.component.ts +++ b/aio/src/app/custom-elements/code/code-example.component.ts @@ -1,4 +1,4 @@ -/* tslint:disable component-selector */ +/* eslint-disable @angular-eslint/component-selector */ import { Component, HostBinding, ElementRef, ViewChild, Input, AfterViewInit } from '@angular/core'; import { CodeComponent } from './code.component'; @@ -32,7 +32,7 @@ import { CodeComponent } from './code.component'; `, }) export class CodeExampleComponent implements AfterViewInit { - classes: {}; + classes: { 'headed-code': boolean, 'simple-code': boolean }; @Input() language: string; @@ -67,11 +67,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/aio/src/app/custom-elements/code/code-tabs.component.ts b/aio/src/app/custom-elements/code/code-tabs.component.ts index 3ed2cc6d11..1a0e5adb80 100644 --- a/aio/src/app/custom-elements/code/code-tabs.component.ts +++ b/aio/src/app/custom-elements/code/code-tabs.component.ts @@ -1,4 +1,4 @@ -/* tslint:disable component-selector */ +/* eslint-disable @angular-eslint/component-selector */ import { AfterViewInit, Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { CodeComponent } from './code.component'; diff --git a/aio/src/app/custom-elements/code/code.component.spec.ts b/aio/src/app/custom-elements/code/code.component.spec.ts index f223af7f44..d7914e7918 100644 --- a/aio/src/app/custom-elements/code/code.component.spec.ts +++ b/aio/src/app/custom-elements/code/code.component.spec.ts @@ -290,7 +290,6 @@ describe('CodeComponent', () => { }); //// Test helpers //// -// tslint:disable:member-ordering @Component({ selector: 'aio-host-comp', template: ` diff --git a/aio/src/app/custom-elements/code/code.component.ts b/aio/src/app/custom-elements/code/code.component.ts index a3b40df5ae..44ad422767 100644 --- a/aio/src/app/custom-elements/code/code.component.ts +++ b/aio/src/app/custom-elements/code/code.component.ts @@ -120,7 +120,7 @@ export class CodeComponent implements OnChanges { .pipe(tap(formattedCode => this.setCodeHtml(formattedCode))); if (linenums !== false && this.language === 'none') { - this.logger.warn(`Using 'linenums' with 'language: none' is currently not supported.`); + this.logger.warn("Using 'linenums' with 'language: none' is currently not supported."); } ((this.language === 'none' ? skipPrettify : prettifyCode) as Observable) diff --git a/aio/src/app/custom-elements/code/pretty-printer.service.ts b/aio/src/app/custom-elements/code/pretty-printer.service.ts index 0f234dd787..f03616f8e2 100644 --- a/aio/src/app/custom-elements/code/pretty-printer.service.ts +++ b/aio/src/app/custom-elements/code/pretty-printer.service.ts @@ -36,7 +36,8 @@ export class PrettyPrinter { } /** - * Format code snippet as HTML + * Format code snippet as HTML. + * * @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: diff --git a/aio/src/app/custom-elements/contributor/contributor-list.component.spec.ts b/aio/src/app/custom-elements/contributor/contributor-list.component.spec.ts index ccf426558a..19e6943d6c 100644 --- a/aio/src/app/custom-elements/contributor/contributor-list.component.spec.ts +++ b/aio/src/app/custom-elements/contributor/contributor-list.component.spec.ts @@ -81,7 +81,9 @@ describe('ContributorListComponent', () => { return comp; } - interface SearchResult { [index: string]: string; } + interface SearchResult { + [index: string]: string; + } class TestLocationService { searchResult: SearchResult = {}; diff --git a/aio/src/app/custom-elements/contributor/contributor-list.component.ts b/aio/src/app/custom-elements/contributor/contributor-list.component.ts index a55f631f18..980d3f9186 100644 --- a/aio/src/app/custom-elements/contributor/contributor-list.component.ts +++ b/aio/src/app/custom-elements/contributor/contributor-list.component.ts @@ -4,12 +4,12 @@ import { ContributorService } from './contributor.service'; import { LocationService } from 'app/shared/location.service'; @Component({ - selector: `aio-contributor-list`, + selector: 'aio-contributor-list', template: ` diff --git a/aio/src/app/custom-elements/contributor/contributor.service.ts b/aio/src/app/custom-elements/contributor/contributor.service.ts index 520e15223b..05be2dd9da 100644 --- a/aio/src/app/custom-elements/contributor/contributor.service.ts +++ b/aio/src/app/custom-elements/contributor/contributor.service.ts @@ -37,8 +37,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, @@ -46,8 +45,8 @@ export class ContributorService { contributors: cmap[key].sort(compareContributors) } as ContributorGroup; }) - .sort(compareGroups); - }), + .sort(compareGroups) + ), publishLast(), ); diff --git a/aio/src/app/custom-elements/live-example/live-example.component.spec.ts b/aio/src/app/custom-elements/live-example/live-example.component.spec.ts index 1225c9e2e0..de3741096a 100644 --- a/aio/src/app/custom-elements/live-example/live-example.component.spec.ts +++ b/aio/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/aio/src/app/custom-elements/live-example/live-example.component.ts b/aio/src/app/custom-elements/live-example/live-example.component.ts index d5c6246a3f..d8390c560d 100644 --- a/aio/src/app/custom-elements/live-example/live-example.component.ts +++ b/aio/src/app/custom-elements/live-example/live-example.component.ts @@ -1,4 +1,4 @@ -/* tslint:disable component-selector */ +/* eslint-disable @angular-eslint/component-selector */ import { AfterContentInit, AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; import { Location } from '@angular/common'; import { CONTENT_URL_PREFIX } from 'app/documents/document.service'; @@ -136,7 +136,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/aio/src/app/custom-elements/resource/resource-list.component.html b/aio/src/app/custom-elements/resource/resource-list.component.html index d26938d462..0ac703950d 100644 --- a/aio/src/app/custom-elements/resource/resource-list.component.html +++ b/aio/src/app/custom-elements/resource/resource-list.component.html @@ -8,9 +8,7 @@
- -

{{subCategory.title}}

- +

{{subCategory.title}}

diff --git a/aio/src/app/custom-elements/resource/resource-list.component.spec.ts b/aio/src/app/custom-elements/resource/resource-list.component.spec.ts index 11c31ff241..06ba2477e3 100644 --- a/aio/src/app/custom-elements/resource/resource-list.component.spec.ts +++ b/aio/src/app/custom-elements/resource/resource-list.component.spec.ts @@ -86,7 +86,9 @@ describe('ResourceListComponent', () => { categories = of(this.testCategories); } - interface SearchResult { [index: string]: string; } + interface SearchResult { + [index: string]: string; + } class TestLocationService { searchResult: SearchResult = {}; diff --git a/aio/src/app/custom-elements/resource/resource-list.component.ts b/aio/src/app/custom-elements/resource/resource-list.component.ts index 63be0ec155..9393c16c37 100644 --- a/aio/src/app/custom-elements/resource/resource-list.component.ts +++ b/aio/src/app/custom-elements/resource/resource-list.component.ts @@ -4,7 +4,6 @@ import { Category } from './resource.model'; import { ResourceService } from './resource.service'; import { LocationService } from 'app/shared/location.service'; -/* tslint:disable:template-accessibility-elements-content */ @Component({ selector: 'aio-resource-list', templateUrl: 'resource-list.component.html' diff --git a/aio/src/app/documents/document.service.spec.ts b/aio/src/app/documents/document.service.spec.ts index 6ea5132a6c..62f5d2e774 100644 --- a/aio/src/app/documents/document.service.spec.ts +++ b/aio/src/app/documents/document.service.spec.ts @@ -93,7 +93,7 @@ describe('DocumentService', () => { expect(logger.output.error).toEqual([ [jasmine.any(Error)] ]); - expect(logger.output.error[0][0].message).toEqual(`Document file not found at 'missing/doc'`); + expect(logger.output.error[0][0].message).toEqual("Document file not found at 'missing/doc'"); // Subsequent request for not-found document. logger.output.error = []; @@ -134,7 +134,7 @@ describe('DocumentService', () => { [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)`); + .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); diff --git a/aio/src/app/documents/document.service.ts b/aio/src/app/documents/document.service.ts index 872f8b6205..a9ff6a6805 100644 --- a/aio/src/app/documents/document.service.ts +++ b/aio/src/app/documents/document.service.ts @@ -67,9 +67,9 @@ 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/aio/src/app/layout/doc-viewer/doc-viewer.component.ts b/aio/src/app/layout/doc-viewer/doc-viewer.component.ts index dcab6be9c3..b1610c7c78 100644 --- a/aio/src/app/layout/doc-viewer/doc-viewer.component.ts +++ b/aio/src/app/layout/doc-viewer/doc-viewer.component.ts @@ -62,12 +62,12 @@ 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; @@ -311,7 +311,7 @@ async function printSwDebugInfo(): Promise { async function getCacheEntries( name: string, includeValues: boolean, - ignoredKeys: string[] = []): Promise<{key: string, value?: object}[]> { + ignoredKeys: string[] = []): Promise<{key: string, value?: unknown}[]> { const ignoredUrls = new Set(ignoredKeys.map(key => new Request(key).url)); const cache = await caches.open(name); @@ -324,7 +324,7 @@ async function printSwDebugInfo(): Promise { return entries; } - function printCacheEntries(name: string, entries: {key: string, value?: object}[]): void { + function printCacheEntries(name: string, entries: {key: string, value?: unknown}[]): void { const entriesStr = entries .map(({key, value}) => ` - ${key}${!value ? '' : `: ${JSON.stringify(value)}`}`) .join('\n'); diff --git a/aio/src/app/layout/mode-banner/mode-banner.component.ts b/aio/src/app/layout/mode-banner/mode-banner.component.ts index efc0e229cd..759dcc5c38 100644 --- a/aio/src/app/layout/mode-banner/mode-banner.component.ts +++ b/aio/src/app/layout/mode-banner/mode-banner.component.ts @@ -4,7 +4,7 @@ import { VersionInfo } from 'app/navigation/navigation.service'; @Component({ selector: 'aio-mode-banner', template: ` -
+ diff --git a/aio/src/app/search/search-box/search-box.component.ts b/aio/src/app/search/search-box/search-box.component.ts index 741df09dd1..eefcc19eb1 100644 --- a/aio/src/app/search/search-box/search-box.component.ts +++ b/aio/src/app/search/search-box/search-box.component.ts @@ -30,9 +30,9 @@ export class SearchBoxComponent implements AfterViewInit { private searchSubject = new Subject(); @ViewChild('searchBox', { static: true }) searchBox: ElementRef; - // tslint:disable-next-line: no-output-on-prefix + // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output() onSearch = this.searchSubject.pipe(distinctUntilChanged(), debounceTime(this.searchDebounce)); - // tslint:disable-next-line: no-output-on-prefix + // eslint-disable-next-line @angular-eslint/no-output-on-prefix @Output() onFocus = new EventEmitter(); constructor(private locationService: LocationService) { } diff --git a/aio/src/app/search/search.service.ts b/aio/src/app/search/search.service.ts index 280ffc7141..52c69471f4 100644 --- a/aio/src/app/search/search.service.ts +++ b/aio/src/app/search/search.service.ts @@ -27,7 +27,6 @@ export class SearchService { .pipe( concatMap(() => { // Create the worker and load the index - // tslint:disable-next-line: whitespace const worker = new Worker(new URL('./search.worker', import.meta.url), { type: 'module' }); this.worker = WebWorkerClient.create(worker, this.zone); return this.worker.sendMessage('load-index'); @@ -42,6 +41,7 @@ export class SearchService { /** * Search the index using the given query and emit results on the observable that is returned. + * * @param query The query to run against the index. * @returns an observable collection of search results */ diff --git a/aio/src/app/shared/attribute-utils.spec.ts b/aio/src/app/shared/attribute-utils.spec.ts index 25246a4ea9..50e0abf14f 100644 --- a/aio/src/app/shared/attribute-utils.spec.ts +++ b/aio/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') as HTMLElement; }); diff --git a/aio/src/app/shared/attribute-utils.ts b/aio/src/app/shared/attribute-utils.ts index ddf66e9672..ec732c007a 100644 --- a/aio/src/app/shared/attribute-utils.ts +++ b/aio/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 { @@ -32,7 +34,8 @@ export function getAttrValue(attrs: AttrMap, attr: string | string[]): string | } /** - * Return the boolean state of an attribute value (if supplied) + * 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. */ @@ -41,7 +44,8 @@ export function boolFromValue(attrValue: string | undefined, def: boolean = fals } /** - * Return the boolean state of attribute from an element + * 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/aio/src/app/shared/custom-icon-registry.ts b/aio/src/app/shared/custom-icon-registry.ts index 8ad73b2a29..4cc0f04862 100644 --- a/aio/src/app/shared/custom-icon-registry.ts +++ b/aio/src/app/shared/custom-icon-registry.ts @@ -59,11 +59,10 @@ export class CustomIconRegistry extends MatIconRegistry { } private loadSvgElement(iconName: string, namespace?: string): SVGElement | undefined { - const svgIcon = this.svgIcons.find(icon => { - return namespace + const svgIcon = this.svgIcons.find(icon => namespace ? icon.name === iconName && icon.namespace === namespace - : icon.name === iconName; - }); + : icon.name === iconName + ); if (!svgIcon) { return; diff --git a/aio/src/app/shared/location.service.ts b/aio/src/app/shared/location.service.ts index 95c4dd16a1..41d7ff6662 100644 --- a/aio/src/app/shared/location.service.ts +++ b/aio/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 || '')); } /** @@ -79,7 +77,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/aio/src/app/shared/reporting-error-handler.ts b/aio/src/app/shared/reporting-error-handler.ts index badb88bdff..33a0e947c1 100644 --- a/aio/src/app/shared/reporting-error-handler.ts +++ b/aio/src/app/shared/reporting-error-handler.ts @@ -15,6 +15,7 @@ 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: any) { diff --git a/aio/src/app/shared/scroll.service.ts b/aio/src/app/shared/scroll.service.ts index 43155f1c98..394e52aa45 100644 --- a/aio/src/app/shared/scroll.service.ts +++ b/aio/src/app/shared/scroll.service.ts @@ -113,7 +113,8 @@ export class ScrollService implements OnDestroy { /** * 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 + * 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/aio/src/app/shared/select/select.component.ts b/aio/src/app/shared/select/select.component.ts index 0a8b7edd2f..a854deb6d4 100644 --- a/aio/src/app/shared/select/select.component.ts +++ b/aio/src/app/shared/select/select.component.ts @@ -10,24 +10,18 @@ export interface Option { templateUrl: 'select.component.html' }) export class SelectComponent implements OnInit { - @Input() - selected: Option; + @Input() selected: Option; - @Input() - options: Option[]; + @Input() options: Option[]; - // tslint:disable-next-line: no-output-native - @Output() - change = new EventEmitter<{option: Option, index: number}>(); + // eslint-disable-next-line @angular-eslint/no-output-native + @Output() change = new EventEmitter<{option: Option, index: number}>(); - @Input() - showSymbol = false; + @Input() showSymbol = false; - @Input() - label: string; + @Input() label: string; - @Input() - disabled: boolean; + @Input() disabled: boolean; showOptions = false; diff --git a/aio/src/app/shared/toc.service.spec.ts b/aio/src/app/shared/toc.service.spec.ts index 85a7c8c894..c4e25c996e 100644 --- a/aio/src/app/shared/toc.service.spec.ts +++ b/aio/src/app/shared/toc.service.spec.ts @@ -345,18 +345,16 @@ interface TestSafeHtml extends SafeHtml { class TestDomSanitizer { bypassSecurityTrustHtml = jasmine.createSpy('bypassSecurityTrustHtml') - .and.callFake((html: string) => { - return { - changingThisBreaksApplicationSecurity: html, - getTypeName: () => 'HTML', - } as TestSafeHtml; - }); + .and.callFake((html: string) => ({ + changingThisBreaksApplicationSecurity: html, + getTypeName: () => 'HTML', + } as TestSafeHtml)); } class MockScrollSpyService { private $$lastInfo: { - active: Subject, - unspy: jasmine.Spy, + active: Subject; + unspy: jasmine.Spy; } | undefined; get $lastInfo() { diff --git a/aio/tests/deployment/e2e/site.po.ts b/aio/tests/deployment/e2e/site.po.ts index e1bc0a5037..d7a6beb68a 100644 --- a/aio/tests/deployment/e2e/site.po.ts +++ b/aio/tests/deployment/e2e/site.po.ts @@ -1,4 +1,4 @@ -import { browser, by, element, ExpectedConditions } from 'protractor'; +import { browser, by, element, ElementFinder, ExpectedConditions } from 'protractor'; export class SitePage { /** The base URL with the trailing `/` stripped off (if any). */ @@ -34,7 +34,7 @@ export class SitePage { async getSearchResults() { const results = element.all(by.css('.search-results li')); await browser.wait(ExpectedConditions.presenceOf(results.first()), 8000); - return await results.map(link => link!.getText()); + return await results.map(link => (link as ElementFinder).getText()); } /** diff --git a/aio/tests/e2e/src/api-pages.e2e-spec.ts b/aio/tests/e2e/src/api-pages.e2e-spec.ts index 6a2318fddb..720617c277 100644 --- a/aio/tests/e2e/src/api-pages.e2e-spec.ts +++ b/aio/tests/e2e/src/api-pages.e2e-spec.ts @@ -69,11 +69,11 @@ describe('Api pages', () => { it('should show links to github', async () => { await page.navigateTo('api/core/EventEmitter'); - /* tslint:disable:max-line-length */ + /* eslint-disable max-len */ expect(await page.ghLinks.get(0).getAttribute('href')) .toMatch(/https:\/\/github\.com\/angular\/angular\/edit\/master\/packages\/core\/src\/event_emitter\.ts\?message=docs\(core\)%3A%20describe%20your%20change\.\.\.#L\d+-L\d+/); expect(await page.ghLinks.get(1).getAttribute('href')) .toMatch(/https:\/\/github\.com\/angular\/angular\/tree\/[^/]+\/packages\/core\/src\/event_emitter\.ts#L\d+-L\d+/); - /* tslint:enable:max-line-length */ + /* eslint-enable max-len */ }); }); diff --git a/aio/tests/e2e/src/app.e2e-spec.ts b/aio/tests/e2e/src/app.e2e-spec.ts index 50e77ca67b..0210521216 100644 --- a/aio/tests/e2e/src/app.e2e-spec.ts +++ b/aio/tests/e2e/src/app.e2e-spec.ts @@ -230,15 +230,15 @@ describe('site App', () => { it('should be present on all docs pages', async () => { await page.navigateTo('tutorial/toh-pt1'); expect(await page.ghLinks.count()).toEqual(1); - /* tslint:disable:max-line-length */ + /* eslint-disable max-len */ expect(await page.ghLinks.get(0).getAttribute('href')) .toMatch(/https:\/\/github\.com\/angular\/angular\/edit\/master\/aio\/content\/tutorial\/toh-pt1\.md\?message=docs%3A%20describe%20your%20change\.\.\./); await page.navigateTo('guide/router'); expect(await page.ghLinks.count()).toEqual(1); - /* tslint:disable:max-line-length */ expect(await page.ghLinks.get(0).getAttribute('href')) .toMatch(/https:\/\/github\.com\/angular\/angular\/edit\/master\/aio\/content\/guide\/router\.md\?message=docs%3A%20describe%20your%20change\.\.\./); + /* eslint-enable max-len */ }); it('should not be present on top level pages', async () => { diff --git a/aio/tests/e2e/src/pwa-manifest.po.ts b/aio/tests/e2e/src/pwa-manifest.po.ts index 5cd1932d20..be31e70110 100644 --- a/aio/tests/e2e/src/pwa-manifest.po.ts +++ b/aio/tests/e2e/src/pwa-manifest.po.ts @@ -12,7 +12,7 @@ export type Json = null | boolean | number | string | Json[] | { [key: string]: * See https://developer.mozilla.org/en-US/docs/Web/Manifest. */ export type PwaManifest = Json & { - shortcuts?: PwaShortcutItem[], + shortcuts?: PwaShortcutItem[]; }; /** @@ -20,11 +20,11 @@ export type PwaManifest = Json & { * See https://developer.mozilla.org/en-US/docs/Web/Manifest/shortcuts. */ export type PwaShortcutItem = Json & { - url: string, - name: string, - short_name?: string, - description?: string, - icons?: PwaImageResource[], + url: string; + name: string; + short_name?: string; + description?: string; + icons?: PwaImageResource[]; }; /** @@ -33,10 +33,10 @@ export type PwaShortcutItem = Json & { * See https://w3c.github.io/manifest/#manifestimageresource-and-its-members. */ export type PwaImageResource = Json & { - src: string, - sizes?: string, - type?: string, - purpose?: string, + src: string; + sizes?: string; + type?: string; + purpose?: string; }; diff --git a/aio/tools/transforms/angular-api-package/mocks/methodParameters.ts b/aio/tools/transforms/angular-api-package/mocks/methodParameters.ts index 2772938049..acf63449d2 100644 --- a/aio/tools/transforms/angular-api-package/mocks/methodParameters.ts +++ b/aio/tools/transforms/angular-api-package/mocks/methodParameters.ts @@ -1,8 +1,9 @@ +/* eslint-disable no-unused-vars */ export class TestClass { method1( /** description of param1 */ param1: number, /** description of param2 */ param2?: string, - /** description of param3 */ param3: object = {}, + /** description of param3 */ param3: unknown = {}, /** description of param4 */ param4 = 'default string', ) { /// @@ -10,6 +11,7 @@ export class TestClass { /** * Some description of method 2 + * * @param param5 description of param5 * @param param6 description of param6 * @param param7 description of param7 diff --git a/aio/tools/transforms/angular-api-package/mocks/testSrc.ts b/aio/tools/transforms/angular-api-package/mocks/testSrc.ts index 8a0dcd7343..80c95983bf 100644 --- a/aio/tools/transforms/angular-api-package/mocks/testSrc.ts +++ b/aio/tools/transforms/angular-api-package/mocks/testSrc.ts @@ -22,13 +22,14 @@ export * from './importedSrc'; * This is MyClass */ export class MyClass { - message: String; + message: string; /** * Create a new MyClass - * @param {String} name The name to say hello to + * + * @param name The name to say hello to */ - constructor(name) { this.message = 'hello ' + name; } + constructor(name: string) { this.message = 'hello ' + name; } /** * Return a greeting message diff --git a/aio/tslint.json b/aio/tslint.json deleted file mode 100644 index 1fd7816557..0000000000 --- a/aio/tslint.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "extends": "tslint:recommended", - "rulesDirectory": [ - "codelyzer" - ], - "rules": { - "align": { - "options": [ - "parameters", - "statements" - ] - }, - "array-type": false, - "arrow-return-shorthand": true, - "ban": [ - true, - {"name": "fdescribe", "message": "Don't keep jasmine focus methods."}, - {"name": "fit", "message": "Don't keep jasmine focus methods."} - ], - "curly": true, - "deprecation": { - "severity": "warning" - }, - "eofline": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": { - "options": [ - "spaces" - ] - }, - "max-classes-per-file": false, - "max-line-length": [ - true, - 140 - ], - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-empty": false, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-switch-case-fall-through": true, - "no-var-requires": false, - "object-literal-key-quotes": [ - true, - "as-needed" - ], - "quotemark": [ - true, - "single" - ], - "semicolon": { - "options": [ - "always" - ] - }, - "space-before-function-paren": { - "options": { - "anonymous": "never", - "asyncArrow": "always", - "constructor": "never", - "method": "never", - "named": "never" - } - }, - // TODO(gkalpak): Fix the code and enable this to align with CLI. (Failures: 243) - // "typedef": [ - // true, - // "call-signature" - // ], - "typedef-whitespace": { - "options": [ - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ] - }, - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case", - "require-const-for-all-caps" - ] - }, - "whitespace": { - "options": [ - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - }, - "component-class-suffix": true, - "contextual-lifecycle": true, - "directive-class-suffix": true, - "no-conflicting-lifecycle": true, - "no-host-metadata-property": true, - "no-input-rename": true, - "no-inputs-metadata-property": true, - "no-output-native": true, - "no-output-on-prefix": true, - "no-output-rename": true, - "no-outputs-metadata-property": true, - "template-accessibility-alt-text": true, - "template-accessibility-elements-content": true, - "template-accessibility-label-for": true, - "template-accessibility-tabindex-no-positive": true, - "template-accessibility-table-scope": true, - "template-accessibility-valid-aria": true, - "template-banana-in-box": true, - "template-click-events-have-key-events": true, - "template-mouse-events-have-key-events": true, - "template-no-autofocus": true, - "template-no-distracting-elements": true, - "template-no-negated-async": true, - "use-lifecycle-interface": true, - "use-pipe-transform-interface": true, - "directive-selector": [ - true, - "attribute", - "aio", - "camelCase" - ], - "component-selector": [ - true, - "element", - "aio", - "kebab-case" - ] - } -} diff --git a/aio/yarn.lock b/aio/yarn.lock index 4a8c982504..14691e2c5d 100644 --- a/aio/yarn.lock +++ b/aio/yarn.lock @@ -123,6 +123,36 @@ ora "5.4.1" rxjs "6.6.7" +"@angular-eslint/builder@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-12.2.2.tgz#3feedd73b7c97ef9fab41de0c0b4962385220864" + integrity sha512-V5p0cxlbBNpZQqsbGNq5Qtt061DvZE2lzIb9Yoq1jP+wcv/PuDvkVz2ik5sJqaOaMaQOSXT+jI5Iq+w0XNkPmQ== + dependencies: + "@nrwl/devkit" ">= 12.0.0 < 13.0.0" + +"@angular-eslint/eslint-plugin-template@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-12.2.2.tgz#4073a1e7a306f8c8f14893ab207ea0860c98e201" + integrity sha512-BZUjo1jFboNUEGE3XauWLBgxOoQpstwnPm9gRl8sr+g9SdhMsI+xvwCPhNzbrDYNayBwP/XRPLWmMc+zEzmoog== + dependencies: + "@typescript-eslint/experimental-utils" "4.23.0" + aria-query "^4.2.2" + axobject-query "^2.2.0" + +"@angular-eslint/eslint-plugin@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-12.2.2.tgz#11f975a6fd23f3cfc559d201a0e3d1cc2dd4c8c1" + integrity sha512-n1dIoXCjEZj8nZOLR2i+/Q87JZ9cm/UgGZ/17UXHMZBo03b+kh9iiabPzLzmIphcI1IQIWAfhH/41YIqBER7vw== + dependencies: + "@typescript-eslint/experimental-utils" "4.23.0" + +"@angular-eslint/template-parser@12.2.2": + version "12.2.2" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-12.2.2.tgz#5a024d06f46dc3f94001c558f999a5dd855f9ed0" + integrity sha512-Tm8xhBd0k+wb8hT+8oq6moFaFQm5tpFFNjIu1kTLcva4cJoRFdNBPDX3IHVOGThb/9VSXDS4So4P2aXMeszCvQ== + dependencies: + eslint-scope "^5.1.0" + "@angular/animations@12.1.1": version "12.1.1" resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-12.1.1.tgz#7da62f1c753e9d3e6f4ada9ef8f4dd97795265b5" @@ -1120,7 +1150,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime-corejs3@^7.12.1": +"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.12.1": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.7.tgz#0ef292bbce40ca00f874c9724ef175a12476465c" integrity sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA== @@ -1128,7 +1158,7 @@ core-js-pure "^3.15.0" regenerator-runtime "^0.13.4" -"@babel/runtime@7.14.6", "@babel/runtime@^7.8.4": +"@babel/runtime@7.14.6", "@babel/runtime@^7.10.2", "@babel/runtime@^7.8.4": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== @@ -1186,6 +1216,15 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d" integrity sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g== +"@es-joy/jsdoccomment@^0.9.0-alpha.1": + version "0.9.0-alpha.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz#f48bd162e185ec7f9f222273a282d10e52fe52f7" + integrity sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA== + dependencies: + comment-parser "1.1.6-beta.0" + esquery "^1.4.0" + jsdoc-type-pratt-parser "1.0.4" + "@eslint/eslintrc@^0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" @@ -1392,6 +1431,33 @@ node-gyp "^7.1.0" read-package-json-fast "^2.0.1" +"@nrwl/devkit@>= 12.0.0 < 13.0.0": + version "12.5.8" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-12.5.8.tgz#0450f9d2bb614fcc478086d1529e37ed91d9c884" + integrity sha512-Rhcx8fU30qfoaCMrMUND5lZIDu/0Fik26dE3flgKRgfeGprPSctq/w/k81+HJy7inGVvis20JBSeYH1HSPcePw== + dependencies: + "@nrwl/tao" "12.5.8" + ejs "^3.1.5" + ignore "^5.0.4" + semver "7.3.4" + tslib "^2.0.0" + +"@nrwl/tao@12.5.8": + version "12.5.8" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-12.5.8.tgz#20bde1f54210fb1d0a60f1814b5b1b6578169f7d" + integrity sha512-sbVxUnnZMLAFFwbEE/dx4W7U4fUKW5pTIIzlnNuzzTn8KDN3rAON6KqXF+KR/Ny9cGlmkBKlWSq8PvhUrSaZvw== + dependencies: + chalk "4.1.0" + enquirer "~2.3.6" + fs-extra "^9.1.0" + jsonc-parser "3.0.0" + 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" + "@opentelemetry/api@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.0.1.tgz#03c72f548431da5820a0c8864d1401e348e7e79f" @@ -1664,7 +1730,7 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.8.1.tgz#8feebf4035d1e4c6a6ed4d27f3bbd285d8d0da91" integrity sha512-ioRNoJvv0eXL1c9BZKpnywZWb5YflhaSiF3IOp9deyoh30MOwkB3bNuzi4UW76EFEhcmqpoEpdWhcUAAilomTw== -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": version "7.0.8" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== @@ -1770,6 +1836,76 @@ dependencies: "@types/node" "*" +"@typescript-eslint/eslint-plugin@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.23.0.tgz#29d3c9c81f6200b1fd6d8454cfb007ba176cde80" + integrity sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw== + dependencies: + "@typescript-eslint/experimental-utils" "4.23.0" + "@typescript-eslint/scope-manager" "4.23.0" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + lodash "^4.17.15" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz#f2059434cd6e5672bfeab2fb03b7c0a20622266f" + integrity sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/scope-manager" "4.23.0" + "@typescript-eslint/types" "4.23.0" + "@typescript-eslint/typescript-estree" "4.23.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.23.0.tgz#239315d38e42e852bef43a4b0b01bef78f78911c" + integrity sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug== + dependencies: + "@typescript-eslint/scope-manager" "4.23.0" + "@typescript-eslint/types" "4.23.0" + "@typescript-eslint/typescript-estree" "4.23.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz#8792ef7eacac122e2ec8fa2d30a59b8d9a1f1ce4" + integrity sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w== + dependencies: + "@typescript-eslint/types" "4.23.0" + "@typescript-eslint/visitor-keys" "4.23.0" + +"@typescript-eslint/types@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.23.0.tgz#da1654c8a5332f4d1645b2d9a1c64193cae3aa3b" + integrity sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw== + +"@typescript-eslint/typescript-estree@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz#0753b292097523852428a6f5a1aa8ccc1aae6cd9" + integrity sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw== + dependencies: + "@typescript-eslint/types" "4.23.0" + "@typescript-eslint/visitor-keys" "4.23.0" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.23.0": + version "4.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz#7215cc977bd3b4ef22467b9023594e32f9e4e455" + integrity sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg== + dependencies: + "@typescript-eslint/types" "4.23.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.11.0": version "1.11.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" @@ -2255,6 +2391,14 @@ aria-query@^3.0.0: ast-types-flow "0.0.7" commander "^2.11.0" +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: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2285,6 +2429,17 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -2307,6 +2462,15 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -2390,6 +2554,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + async@^1.3.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -2417,6 +2586,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +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" @@ -2462,6 +2636,11 @@ axobject-query@2.0.2: 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.2: version "8.2.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" @@ -2948,6 +3127,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@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -3385,6 +3572,11 @@ commander@^7.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +comment-parser@1.1.6-beta.0: + version "1.1.6-beta.0" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.6-beta.0.tgz#57e503b18d0a5bd008632dcc54b1f95c2fffe8f6" + integrity sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3976,14 +4168,14 @@ date-format@^3.0.0: resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== -debug@2.6.9, debug@^2.0.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.0.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@~4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -3997,7 +4189,7 @@ debug@4.3.1: dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -4274,6 +4466,13 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4438,6 +4637,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +ejs@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== + dependencies: + jake "^10.6.1" + electron-to-chromium@^1.3.723: version "1.3.775" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.775.tgz#046517d1f2cea753e06fff549995b9dc45e20082" @@ -4515,7 +4721,7 @@ enhanced-resolve@5.8.2, enhanced-resolve@^5.8.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.5, enquirer@^2.3.6, enquirer@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4566,7 +4772,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: version "1.18.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== @@ -4709,12 +4915,69 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" + integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.23.4: + version "2.23.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" + integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.1" + find-up "^2.0.0" + has "^1.0.3" + is-core-module "^2.4.0" + minimatch "^3.0.4" + object.values "^1.1.3" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" + tsconfig-paths "^3.9.0" + eslint-plugin-jasmine@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-jasmine/-/eslint-plugin-jasmine-4.1.2.tgz#50cc20d603b02b37727f8d174d4b83b9b8ef25a5" integrity sha512-Jr52EBi6Ql5WVDvRCKBID9kRD6/CaObvCWmgHpqobczX2Mzt8/QMu9vpgx6q/O5jyQ9CIGrKaEbPuEfHRf8guw== -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-plugin-jsdoc@^35.4.3: + version "35.4.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.4.3.tgz#54deb74b0f53bda4bda5ee1ccfd0deace71c8943" + integrity sha512-hBEn+VNjVX0IKoZ2OdZs0Z1fU8CqZkBSzLqD8ZpwZEamrdi2TUgKvujvETe8gXYQ/67hpRtbR5iPFTgmWpRevw== + dependencies: + "@es-joy/jsdoccomment" "^0.9.0-alpha.1" + comment-parser "1.1.6-beta.0" + debug "^4.3.2" + esquery "^1.4.0" + jsdoc-type-pratt-parser "^1.0.4" + lodash "^4.17.21" + regextras "^0.8.0" + semver "^7.3.5" + spdx-expression-parse "^3.0.1" + +eslint-plugin-prefer-arrow@^1.2.3: + version "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.0.0, 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== @@ -4722,7 +4985,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: +eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -4739,7 +5002,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.17.0, eslint@^7.23.0: +eslint@^7.17.0, eslint@^7.26.0: version "7.30.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8" integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg== @@ -5172,6 +5435,13 @@ file-uri-to-path@2: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== +filelist@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b" + integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ== + dependencies: + minimatch "^3.0.4" + filesize@^6.1.0: version "6.4.0" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" @@ -5221,6 +5491,13 @@ find-free-port@^2.0.0: resolved "https://registry.yarnpkg.com/find-free-port/-/find-free-port-2.0.0.tgz#4b22e5f6579eb1a38c41ac6bcb3efed1b6da9b1b" integrity sha1-SyLl9leesaOMQaxryz7+0bbamxs= +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -5425,6 +5702,16 @@ 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.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -5673,7 +5960,7 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.3: +globby@^11.0.1, globby@^11.0.3: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== @@ -6235,7 +6522,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: +ignore@^5.0.4, ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -6554,7 +6841,7 @@ is-color-stop@^1.1.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.2.0: +is-core-module@^2.2.0, is-core-module@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== @@ -7011,6 +7298,16 @@ istanbul-reports@^3.0.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.6.1: + version "10.8.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" + integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jasmine-core@^3.6.0, jasmine-core@~3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.8.0.tgz#815399aae5aa5d9beeb1262805f981b99ffc9bf0" @@ -7117,6 +7414,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdoc-type-pratt-parser@1.0.4, jsdoc-type-pratt-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz#5750d2d32ffb001866537d3baaedea7cf84c7036" + integrity sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ== + jsdom@^16.0.0: version "16.6.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" @@ -7635,6 +7937,14 @@ loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7840,7 +8150,7 @@ lodash.values@^2.4.1: dependencies: lodash.keys "~2.4.1" -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8825,6 +9135,15 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + objectdiff@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/objectdiff/-/objectdiff-1.1.0.tgz#8d7a15be6cb8670df8a490cc6be12a4f05ea82f4" @@ -8993,6 +9312,13 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -9007,6 +9333,13 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -9040,6 +9373,11 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -9331,6 +9669,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -9345,6 +9690,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + portfinder@^1.0.23, portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -10262,6 +10614,14 @@ read-package-json-fast@^2.0.1: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -10402,7 +10762,7 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: +regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -10419,6 +10779,11 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regextras@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.8.0.tgz#ec0f99853d4912839321172f608b544814b02217" + integrity sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ== + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -10641,7 +11006,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.3.2: +resolve@1.20.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -10759,7 +11124,12 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@6.6.7, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.6, rxjs@^6.6.7: +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.3, rxjs@^6.5.4, rxjs@^6.6.6, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -10930,6 +11300,13 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + semver@7.3.5, semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -11331,7 +11708,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -11985,7 +12362,7 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: +tmp@^0.2.1, tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== @@ -12116,6 +12493,15 @@ ts-node@^10.0.0: source-map-support "^0.5.17" yn "3.1.1" +tsconfig-paths@^3.9.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz#79ae67a68c15289fdf5c51cb74f397522d795ed7" + integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== + dependencies: + json5 "^2.2.0" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@2.3.0, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" @@ -12152,6 +12538,13 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" +tsutils@^3.17.1: + 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" @@ -13268,6 +13661,11 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +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@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"