build(docs-infra): upgrade tslint to 5.15.0 and codelyzer to 5.0.0 (#29926)

This commit also changes the `tslint.json` config file to (reasonably
closely) match what the cli would generate for a new app.

PR Close #29926
This commit is contained in:
George Kalpakas 2019-04-24 15:27:24 +03:00 committed by Andrew Kushnir
parent eb85c8a742
commit 282167a37f
22 changed files with 172 additions and 159 deletions

View File

@ -6,7 +6,7 @@ import { Directive, ElementRef, EventEmitter, Output } from '@angular/core';
export class ClickDirective {
// #docregion output-myClick
@Output('myClick') clicks = new EventEmitter<string>(); // @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<string>();
toggle = false;

View File

@ -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: `

View File

@ -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,

View File

@ -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",

View File

@ -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();

View File

@ -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();
}

View File

@ -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() {

View File

@ -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<HTMLDivElement>;
@ViewChildren(CodeComponent) codeComponents: QueryList<CodeComponent>;
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,

View File

@ -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' }

View File

@ -30,7 +30,9 @@ export class SearchBoxComponent implements OnInit {
private searchSubject = new Subject<string>();
@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<string>();
constructor(private locationService: LocationService) { }

View File

@ -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

View File

@ -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);

View File

@ -230,7 +230,7 @@ describe('ScrollService', () => {
describe('#scrollToTop', () => {
it('should scroll to top', () => {
const topOfPageElement = <Element><any> 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;

View File

@ -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}>();

View File

@ -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((<TestSafeHtml>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((<TestSafeHtml>tocItem.content)
expect((tocItem.content as TestSafeHtml)
.changingThisBreaksApplicationSecurity)
.toEqual('Setup to develop <i>locally</i>.');
});

View File

@ -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<HTMLAnchorElement> = 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

View File

@ -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}`);
}
}

View File

@ -1,17 +0,0 @@
{
"extends": "../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"aio",
"camelCase"
],
"component-selector": [
true,
"element",
"aio",
"kebab-case"
]
}
}

View File

@ -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.

View File

@ -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;
}

View File

@ -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"
]
}
}

View File

@ -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==