diff --git a/aio/content/examples/template-syntax/src/app/click.directive.ts b/aio/content/examples/template-syntax/src/app/click.directive.ts index 22b63955ea..ef9d68f032 100644 --- a/aio/content/examples/template-syntax/src/app/click.directive.ts +++ b/aio/content/examples/template-syntax/src/app/click.directive.ts @@ -6,7 +6,7 @@ import { Directive, ElementRef, EventEmitter, Output } from '@angular/core'; export class ClickDirective { // #docregion output-myClick @Output('myClick') clicks = new EventEmitter(); // @Output(alias) propertyName = ... - // #enddocregion output-myClick + // #enddocregion output-myClick toggle = false; @@ -23,10 +23,12 @@ export class ClickDirective { @Directive({ // #enddocregion output-myClick2 selector: '[myClick2]', + // tslint:disable: no-outputs-metadata-property // #docregion output-myClick2 outputs: ['clicks:myClick'] // propertyName:alias }) // #enddocregion output-myClick2 +// tslint:enable: no-outputs-metadata-property export class ClickDirective2 { clicks = new EventEmitter(); toggle = false; diff --git a/aio/content/examples/template-syntax/src/app/hero-detail.component.ts b/aio/content/examples/template-syntax/src/app/hero-detail.component.ts index 14cdeed0af..a4e28a47a2 100644 --- a/aio/content/examples/template-syntax/src/app/hero-detail.component.ts +++ b/aio/content/examples/template-syntax/src/app/hero-detail.component.ts @@ -8,10 +8,12 @@ import { Hero } from './hero'; @Component({ // #enddocregion input-output-2 selector: 'app-hero-detail', + // tslint:disable: no-inputs-metadata-property no-outputs-metadata-property // #docregion input-output-2 inputs: ['hero'], outputs: ['deleteRequest'], // #enddocregion input-output-2 + // tslint:enable: no-inputs-metadata-property no-outputs-metadata-property styles: ['button {margin-left: 8px} div {margin: 8px 0} img {height:24px}'], // #docregion template-1 template: ` diff --git a/aio/content/examples/tslint.json b/aio/content/examples/tslint.json index 2e81c99035..423acb996d 100644 --- a/aio/content/examples/tslint.json +++ b/aio/content/examples/tslint.json @@ -41,7 +41,7 @@ "no-switch-case-fall-through": true, "no-trailing-whitespace": true, "no-unused-expression": true, - "no-use-before-declare": true, + "no-use-before-declare": false, "no-var-keyword": true, "object-literal-sort-keys": false, "one-line": [ @@ -83,8 +83,8 @@ "check-type" ], - "use-input-property-decorator": true, - "use-output-property-decorator": true, + "no-inputs-metadata-property": true, + "no-outputs-metadata-property": true, "use-life-cycle-interface": true, "use-pipe-transform-interface": true, "component-class-suffix": true, diff --git a/aio/package.json b/aio/package.json index 05c291185b..71afbe0df1 100644 --- a/aio/package.json +++ b/aio/package.json @@ -36,7 +36,7 @@ "test-pwa-score": "node scripts/test-pwa-score", "test-pwa-score-localhost": "run-p --race \"~~http-server dist -p 4200 --silent\" \"test-pwa-score http://localhost:4200 {1} {2}\" --", "example-e2e": "yarn example-check-local && node ./tools/examples/run-example-e2e", - "example-lint": "tslint -c \"content/examples/tslint.json\" \"content/examples/**/*.ts\" -e \"content/examples/styleguide/**/*.avoid.ts\"", + "example-lint": "tslint --config \"content/examples/tslint.json\" \"content/examples/**/*.ts\" --exclude \"content/examples/styleguide/**/*.avoid.ts\"", "example-use-local": "node tools/ng-packages-installer overwrite ./tools/examples/shared --debug", "example-use-npm": "node tools/ng-packages-installer restore ./tools/examples/shared", "example-check-local": "node tools/ng-packages-installer check ./tools/examples/shared", @@ -52,7 +52,7 @@ "docs-test": "node tools/transforms/test.js", "redirects-test": "jasmine-ts --project=tests/deployment/unit tests/deployment/unit/**/*.spec.ts", "firebase-utils-test": "jasmine-ts --project=tools/firebase-test-utils tools/firebase-test-utils/*.spec.ts", - "tools-lint": "tslint -c \"tools/tslint.json\" \"tools/firebase-test-utils/**/*.ts\"", + "tools-lint": "tslint --config \"tools/tslint.json\" --project \"tools/firebase-test-utils\"", "tools-test": "./scripts/deploy-to-firebase.test.sh && yarn docs-test && yarn boilerplate:test && jasmine tools/ng-packages-installer/index.spec.js && yarn firebase-utils-test", "preserve-and-sync": "yarn docs", "serve-and-sync": "run-p \"start\" \"docs-watch --watch-only\"", @@ -108,7 +108,7 @@ "chalk": "^2.1.0", "chrome-launcher": "^0.10.5", "cjson": "^0.5.0", - "codelyzer": "~4.5.0", + "codelyzer": "^5.0.0", "cross-spawn": "^5.1.0", "css-selector-parser": "^1.3.0", "dgeni": "^0.4.11", @@ -156,7 +156,7 @@ "tree-kill": "^1.1.0", "ts-node": "^3.3.0", "tslib": "^1.9.0", - "tslint": "~5.9.1", + "tslint": "~5.15.0", "typescript": "~3.4.5", "uglify-js": "^3.0.15", "unist-util-filter": "^0.2.1", diff --git a/aio/src/app/app.component.spec.ts b/aio/src/app/app.component.spec.ts index 74b2abd3f3..e9020bc1ab 100644 --- a/aio/src/app/app.component.spec.ts +++ b/aio/src/app/app.component.spec.ts @@ -789,7 +789,7 @@ describe('AppComponent', () => { { path: 'news', title: 'News', type: 'marketing', keywords: '', titleWords: '', deprecated: false } ]; - searchService.searchResults.next({ query: 'something', results: results }); + searchService.searchResults.next({ query: 'something', results }); component.showSearchResults = true; fixture.detectChanges(); diff --git a/aio/src/app/app.component.ts b/aio/src/app/app.component.ts index c8a1c8d477..f904e14a72 100644 --- a/aio/src/app/app.component.ts +++ b/aio/src/app/app.component.ts @@ -284,10 +284,10 @@ export class AppComponent implements OnInit { notificationDismissed() { this.notificationAnimating = true; - // this should be kept in sync with the animation durations in: - // - aio/src/styles/2-modules/_notification.scss - // - aio/src/app/layout/notification/notification.component.ts - setTimeout(() => this.notificationAnimating = false, 250); + // this should be kept in sync with the animation durations in: + // - aio/src/styles/2-modules/_notification.scss + // - aio/src/app/layout/notification/notification.component.ts + setTimeout(() => this.notificationAnimating = false, 250); this.updateHostClasses(); } diff --git a/aio/src/app/custom-elements/api/api.service.ts b/aio/src/app/custom-elements/api/api.service.ts index 39a8dfb0cf..e7b6cc0b38 100644 --- a/aio/src/app/custom-elements/api/api.service.ts +++ b/aio/src/app/custom-elements/api/api.service.ts @@ -35,8 +35,8 @@ export class ApiService implements OnDestroy { private _sections = this.sectionsSubject.pipe(takeUntil(this.onDestroy)); /** - * Return a cached observable of API sections from a JSON file. - * API sections is an array of Angular top modules and metadata about their API documents (items). + * Return a cached observable of API sections from a JSON file. + * API sections is an array of Angular top modules and metadata about their API documents (items). */ get sections() { 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 e8a1cbd5a8..7067788db5 100644 --- a/aio/src/app/custom-elements/code/code-tabs.component.ts +++ b/aio/src/app/custom-elements/code/code-tabs.component.ts @@ -48,16 +48,15 @@ export class CodeTabsComponent implements OnInit, AfterViewInit { @Input() linenums: string; - @ViewChild('content', { static: true }) content: ElementRef; + @ViewChild('content', { static: true }) content: ElementRef; @ViewChildren(CodeComponent) codeComponents: QueryList; ngOnInit() { this.tabs = []; - const codeExamples = this.content.nativeElement.querySelectorAll('code-pane'); + const codeExamples = Array.from(this.content.nativeElement.querySelectorAll('code-pane')); - for (let i = 0; i < codeExamples.length; i++) { - const tabContent = codeExamples[i]; + for (const tabContent of codeExamples) { this.tabs.push(this.getTabInfo(tabContent)); } } @@ -69,7 +68,7 @@ export class CodeTabsComponent implements OnInit, AfterViewInit { } /** Gets the extracted TabInfo data from the provided code-pane element. */ - private getTabInfo(tabContent: HTMLElement): TabInfo { + private getTabInfo(tabContent: Element): TabInfo { return { class: tabContent.getAttribute('class'), code: tabContent.innerHTML, diff --git a/aio/src/app/layout/doc-viewer/doc-viewer.component.spec.ts b/aio/src/app/layout/doc-viewer/doc-viewer.component.spec.ts index 0f94629bf3..df9ede2556 100644 --- a/aio/src/app/layout/doc-viewer/doc-viewer.component.spec.ts +++ b/aio/src/app/layout/doc-viewer/doc-viewer.component.spec.ts @@ -177,9 +177,9 @@ describe('DocViewerComponent', () => { }); it('should fall back to `textContent` if `innerText` is not available', () => { - const querySelector_ = targetEl.querySelector; + const querySelector = targetEl.querySelector; spyOn(targetEl, 'querySelector').and.callFake((selector: string) => { - const elem = querySelector_.call(targetEl, selector); + const elem = querySelector.call(targetEl, selector); return elem && Object.defineProperties(elem, { innerText: {value: undefined}, textContent: {value: 'Text Content'}, @@ -192,9 +192,9 @@ describe('DocViewerComponent', () => { }); it('should still use `innerText` if available but empty', () => { - const querySelector_ = targetEl.querySelector; + const querySelector = targetEl.querySelector; spyOn(targetEl, 'querySelector').and.callFake((selector: string) => { - const elem = querySelector_.call(targetEl, selector); + const elem = querySelector.call(targetEl, selector); return elem && Object.defineProperties(elem, { innerText: { value: '' }, textContent: { value: 'Text Content' } 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 2929699c8f..59334c13b1 100644 --- a/aio/src/app/search/search-box/search-box.component.ts +++ b/aio/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; + // tslint:disable-next-line: no-output-on-prefix @Output() onSearch = this.searchSubject.pipe(distinctUntilChanged(), debounceTime(this.searchDebounce)); + // tslint:disable-next-line: no-output-on-prefix @Output() onFocus = new EventEmitter(); constructor(private locationService: LocationService) { } diff --git a/aio/src/app/search/search.worker.ts b/aio/src/app/search/search.worker.ts index e5b3eec15a..7c2f9623f6 100644 --- a/aio/src/app/search/search.worker.ts +++ b/aio/src/app/search/search.worker.ts @@ -21,17 +21,17 @@ addEventListener('message', handleMessage); // Create the lunr index - the docs should be an array of objects, each object containing // the path and search terms for a page -function createIndex(loadIndex: IndexLoader): lunr.Index { +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 lunr(/** @this */function () { + return lunr(/** @this */function() { this.ref('path'); this.field('titleWords', { boost: 10 }); this.field('headingWords', { boost: 5 }); this.field('members', { boost: 4 }); this.field('keywords', { boost: 2 }); - loadIndex(this); + loadIndexFn(this); }); } @@ -42,16 +42,16 @@ function handleMessage(message: { data: WebWorkerMessage }): void { const payload = message.data.payload; switch (type) { case 'load-index': - makeRequest(SEARCH_TERMS_URL, function (searchInfo: PageInfo[]) { + makeRequest(SEARCH_TERMS_URL, function(searchInfo: PageInfo[]) { index = createIndex(loadIndex(searchInfo)); - postMessage({ type: type, id: id, payload: true }); + postMessage({ type, id, payload: true }); }); break; case 'query-index': - postMessage({ type: type, id: id, payload: { query: payload, results: queryIndex(payload) } }); + postMessage({ type, id, payload: { query: payload, results: queryIndex(payload) } }); break; default: - postMessage({ type: type, id: id, payload: { error: 'invalid message type' } }) + postMessage({ type, id, payload: { error: 'invalid message type' } }); } } @@ -60,7 +60,7 @@ 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); @@ -92,7 +92,7 @@ function queryIndex(query: string): PageInfo[] { results = index.search(query + ' ' + titleQuery); } // Map the hits into info about each page to be returned as results - return results.map(function (hit) { return pages[hit.ref]; }); + return results.map(function(hit) { return pages[hit.ref]; }); } } catch (e) { // If the search query cannot be parsed the index throws an error diff --git a/aio/src/app/shared/attribute-utils.ts b/aio/src/app/shared/attribute-utils.ts index 758aaa422a..ddf66e9672 100644 --- a/aio/src/app/shared/attribute-utils.ts +++ b/aio/src/app/shared/attribute-utils.ts @@ -10,7 +10,7 @@ export interface AttrMap { * Attribute map keys are forced lowercase for case-insensitive lookup. * @param el The source of the attributes. */ -export function getAttrs(el: HTMLElement | ElementRef): AttrMap { +export function getAttrs(el: HTMLElement | ElementRef): AttrMap { const attrs: NamedNodeMap = el instanceof ElementRef ? el.nativeElement.attributes : el.attributes; const attrMap: AttrMap = {}; for (const attr of attrs as any as Attr[] /* cast due to https://github.com/Microsoft/TypeScript/issues/2695 */) { @@ -47,7 +47,7 @@ export function boolFromValue(attrValue: string | undefined, def: boolean = fals * @param def Default boolean value when attribute is undefined. */ export function getBoolFromAttribute( - el: HTMLElement | ElementRef, + el: HTMLElement | ElementRef, attr: string | string[], def: boolean = false): boolean { return boolFromValue(getAttrValue(getAttrs(el), attr), def); diff --git a/aio/src/app/shared/scroll.service.spec.ts b/aio/src/app/shared/scroll.service.spec.ts index 5b45d40986..ba529a593b 100644 --- a/aio/src/app/shared/scroll.service.spec.ts +++ b/aio/src/app/shared/scroll.service.spec.ts @@ -230,7 +230,7 @@ describe('ScrollService', () => { describe('#scrollToTop', () => { it('should scroll to top', () => { - const topOfPageElement = new MockElement(); + const topOfPageElement = new MockElement() as any as Element; document.getElementById.and.callFake( (id: string) => id === 'top-of-page' ? topOfPageElement : null ); @@ -253,7 +253,7 @@ describe('ScrollService', () => { }); }); - describe('#needToFixScrollPosition', async() => { + describe('#needToFixScrollPosition', async () => { it('should return true when popState event was fired after a back navigation if the browser supports ' + 'scrollRestoration`. Otherwise, needToFixScrollPosition() returns false', () => { @@ -305,7 +305,7 @@ describe('ScrollService', () => { }); }); - describe('#scrollAfterRender', async() => { + describe('#scrollAfterRender', async () => { let scrollSpy: jasmine.Spy; let scrollToTopSpy: jasmine.Spy; diff --git a/aio/src/app/shared/select/select.component.ts b/aio/src/app/shared/select/select.component.ts index e67c20e027..0a8b7edd2f 100644 --- a/aio/src/app/shared/select/select.component.ts +++ b/aio/src/app/shared/select/select.component.ts @@ -16,6 +16,7 @@ export class SelectComponent implements OnInit { @Input() options: Option[]; + // tslint:disable-next-line: no-output-native @Output() change = new EventEmitter<{option: Option, index: number}>(); diff --git a/aio/src/app/shared/toc.service.spec.ts b/aio/src/app/shared/toc.service.spec.ts index 58c53f8e37..30bb3ea03f 100644 --- a/aio/src/app/shared/toc.service.spec.ts +++ b/aio/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.'); }); diff --git a/aio/src/app/shared/toc.service.ts b/aio/src/app/shared/toc.service.ts index 0c6a53b572..91f5390cf8 100644 --- a/aio/src/app/shared/toc.service.ts +++ b/aio/src/app/shared/toc.service.ts @@ -56,9 +56,8 @@ export class TocService { private extractHeadingSafeHtml(heading: HTMLHeadingElement) { const div: HTMLDivElement = this.document.createElement('div'); div.innerHTML = heading.innerHTML; - const anchorLinks: NodeListOf = div.querySelectorAll('a'); - for (let i = 0; i < anchorLinks.length; i++) { - const anchorLink = anchorLinks[i]; + const anchorLinks = Array.from(div.querySelectorAll('a')); + for (const anchorLink of anchorLinks) { if (!anchorLink.classList.contains('header-link')) { // this is an anchor that contains actual content that we want to keep // move the contents of the anchor into its parent diff --git a/aio/src/app/sw-updates/sw-updates.service.ts b/aio/src/app/sw-updates/sw-updates.service.ts index ccbfdc7ddc..f44df3286b 100644 --- a/aio/src/app/sw-updates/sw-updates.service.ts +++ b/aio/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/aio/src/tslint.json b/aio/src/tslint.json deleted file mode 100644 index 4025ad4282..0000000000 --- a/aio/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/aio/tests/deployment/e2e/site.po.ts b/aio/tests/deployment/e2e/site.po.ts index 4fba85022e..e1bc0a5037 100644 --- a/aio/tests/deployment/e2e/site.po.ts +++ b/aio/tests/deployment/e2e/site.po.ts @@ -46,7 +46,7 @@ export class SitePage { await browser.executeScript('document.body.classList.add(\'no-animations\')'); await browser.waitForAngular(); await this.unregisterSw(); - }; + } /** * Initialize the page object and get it ready for further requests. diff --git a/aio/tools/firebase-test-utils/FirebaseRedirector.ts b/aio/tools/firebase-test-utils/FirebaseRedirector.ts index cd8a44e75a..b9228270e6 100644 --- a/aio/tools/firebase-test-utils/FirebaseRedirector.ts +++ b/aio/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/aio/tslint.json b/aio/tslint.json index bb06be5d56..8d9c3b52a1 100644 --- a/aio/tslint.json +++ b/aio/tslint.json @@ -1,29 +1,35 @@ { + "extends": "tslint:recommended", "rulesDirectory": [ - "node_modules/codelyzer", - "node_modules/vrsource-tslint-rules/rules" + "codelyzer" ], "rules": { - "callable-types": true, - "class-name": true, - "comment-format": [ + "array-type": false, + "arrow-parens": false, + "component-class-suffix": true, + "component-selector": [ true, - "check-space" + "element", + "aio", + "kebab-case" ], - "curly": true, + "contextual-lifecycle": true, "deprecation": { "severity": "warn" }, - "eofline": true, - "forin": true, - "import-blacklist": true, - "import-spacing": true, - "indent": [ + "directive-class-suffix": true, + "directive-selector": [ true, - "spaces" + "attribute", + "aio", + "camelCase" ], - "interface-over-type-literal": true, - "label-position": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, "max-line-length": [ true, 140 @@ -31,11 +37,17 @@ "member-access": false, "member-ordering": [ true, - "static-before-instance", - "variables-before-functions" + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } ], - "no-arg": true, - "no-bitwise": true, + "no-conflicting-lifecycle": true, + "no-consecutive-blank-lines": false, "no-console": [ true, "debug", @@ -44,73 +56,42 @@ "timeEnd", "trace" ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [true, "ignore-params"], - "no-jasmine-focus": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-use-before-declare": false, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ + "no-host-metadata-property": true, + "no-inferrable-types": [ true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" + "ignore-params" ], - "prefer-const": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-jasmine-focus": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": false, + "object-literal-sort-keys": false, + "only-arrow-functions": false, + "ordered-imports": false, "quotemark": [ true, "single" ], - "radix": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "trailing-comma": false, + "use-lifecycle-interface": true, "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true + "variable-name": [ + true, + "allow-leading-underscore", + "allow-pascal-case", + "ban-keywords", + "check-format", + "require-const-for-all-caps" + ] } } diff --git a/aio/yarn.lock b/aio/yarn.lock index b69c07e224..6b82d9f835 100644 --- a/aio/yarn.lock +++ b/aio/yarn.lock @@ -924,6 +924,14 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -1064,6 +1072,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +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 sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + async-each@^1.0.0, async-each@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" @@ -1153,6 +1166,13 @@ axios@^0.18.0: follow-redirects "^1.3.0" is-buffer "^1.1.5" +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" + babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2071,17 +2091,20 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codelyzer@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.5.0.tgz#a65ddeeeca2894653253a89bfa229118ff9f59b1" - integrity sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ== +codelyzer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.0.0.tgz#e4032efb23a7c5d4bcfe7321fc1789490c679837" + integrity sha512-Bif70XYt8NFf/Q9GPTxmC86OsBRfQZq1dBjdruJ5kZhJ8/jKhJL6MvCLKnYtSOG6Rhiv/44DU0cHk6GYthjy8Q== dependencies: app-root-path "^2.1.0" - css-selector-tokenizer "^0.7.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" semver-dsl "^1.0.1" source-map "^0.5.7" - sprintf-js "^1.1.1" + sprintf-js "^1.1.2" coffee-script@^1.12.5: version "1.12.7" @@ -2138,6 +2161,11 @@ comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: dependencies: trim "0.0.1" +commander@^2.11.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@^2.12.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -2566,9 +2594,10 @@ css-selector-parser@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.3.0.tgz#5f1ad43e2d8eefbfdc304fcd39a521664943e3eb" -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" +css-selector-tokenizer@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== dependencies: cssesc "^0.1.0" fastparse "^1.1.1" @@ -2627,6 +2656,11 @@ d@1: dependencies: es5-ext "^0.10.9" +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -5678,6 +5712,14 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-yaml@^3.13.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.5.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -9466,7 +9508,7 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -sprintf-js@^1.1.1: +sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== @@ -10140,9 +10182,10 @@ tslib@^1.8.0: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" -tslint@~5.9.1: - version "5.9.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" +tslint@~5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.15.0.tgz#6ffb180986d63afa1e531feb2a134dbf961e27d3" + integrity sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA== dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -10150,14 +10193,15 @@ tslint@~5.9.1: commander "^2.12.1" diff "^3.2.0" glob "^7.1.1" - js-yaml "^3.7.0" + js-yaml "^3.13.0" minimatch "^3.0.4" + mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.12.1" + tsutils "^2.29.0" -tsutils@^2.12.1: +tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==