diff --git a/.editorconfig b/.editorconfig index 136f3bd6803..3c44241cc4f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,6 +7,3 @@ end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true - -[tslint.json] -indent_size = 2 diff --git a/.gitignore b/.gitignore index 867cab0c905..d3bcc025629 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ /scripts/*.js /scripts/*.js.map /lib/ -/test/executable/tslint.json node_modules/ !test/rules/**/node_modules tscommand*.txt diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 141e0095c74..00000000000 --- a/.prettierignore +++ /dev/null @@ -1,36 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# dependencies -/node_modules - -# docs -.github -/docs - -# testing -/coverage -/test/external/ -/test/files/ -/test/rules/ - -# production -/build -/lib - -# ide -/.idea - -# npm -package.json -package-lock.json - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index c37611da667..00000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "tabWidth": 4, - "printWidth": 100, - "trailingComma": "all", - "overrides": [ - { - "files": "*.json", - "options": { - "parser": "json" - } - }, - { - "files": "*.scss", - "options": { - "parser": "scss" - } - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json index 69313dbf0a7..22803497de8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,6 +21,8 @@ "node_modules": true }, + "tslint.configFile": "tslint-vscode.json", + // Always use project's provided typescript compiler version "typescript.tsdk": "node_modules/typescript/lib", "files.eol": "\n" diff --git a/package.json b/package.json index 2b651211303..e2cab5c8bc2 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,8 @@ "compile:scripts": "tsc -p scripts", "compile:test": "tsc -p test", "lint": "npm-run-all -p lint:global lint:from-bin", - "lint:global": "tslint --project test/tsconfig.json --format stylish", - "lint:from-bin": "node bin/tslint --project test/tsconfig.json --format stylish", - "precommit": "npm-run-all precommit:prettier", - "precommit:prettier": "pretty-quick --staged", - "prettier": "prettier --write './**/*.{js,ts,css,scss,md,yml}' --ignore-path ./.prettierignore", + "lint:global": "tslint --project test/tsconfig.json --format codeFrame", + "lint:from-bin": "node bin/tslint --project test/tsconfig.json --format codeFrame", "publish:local": "./scripts/npmPublish.sh", "test": "npm-run-all test:pre -p test:mocha test:rules", "test:pre": "cd ./test/config && npm install --no-save", @@ -67,11 +64,11 @@ "npm-run-all": "^4.0.2", "nyc": "^10.2.0", "prettier": "1.14.3", - "pretty-quick": "^1.6.0", "rimraf": "^2.5.4", "ts-node": "^3.3.0", - "tslint": "^5.12.0", - "tslint-config-prettier": "^1.13.0", + "tslint": "~5.12.0", + "tslint-config-prettier": "^1.15.0", + "tslint-plugin-prettier": "^2.0.1", "tslint-test-config-non-relative": "file:test/external/tslint-test-config-non-relative", "typescript": "~3.1.6" }, diff --git a/src/configs/all.ts b/src/configs/all.ts index f85d32d0571..a5658c6382c 100644 --- a/src/configs/all.ts +++ b/src/configs/all.ts @@ -40,19 +40,20 @@ export const rules = { ], }, "ban-ts-ignore": true, - "member-access": [true, "check-accessor", "check-constructor", "check-parameter-property"], - "member-ordering": [ - true, - { + "member-access": { + options: ["check-accessor", "check-constructor", "check-parameter-property"], + }, + "member-ordering": { + options: { order: "statics-first", alphabetize: true, }, - ], + }, "no-any": true, "no-empty-interface": true, "no-import-side-effect": true, // Technically this is not the strictest setting, but don't want to conflict with "typedef" - "no-inferrable-types": [true, "ignore-params"], + "no-inferrable-types": { options: ["ignore-params"] }, "no-internal-module": true, "no-magic-numbers": true, "no-namespace": true, @@ -64,33 +65,35 @@ export const rules = { "prefer-for-of": true, "prefer-readonly": true, "promise-function-async": true, - typedef: [ - true, - "call-signature", - "arrow-call-signature", - "parameter", - "arrow-parameter", - "property-declaration", - "variable-declaration", - "member-variable-declaration", - ], - "typedef-whitespace": [ - true, - { - "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", - }, - ], + typedef: { + options: [ + "call-signature", + "arrow-call-signature", + "parameter", + "arrow-parameter", + "property-declaration", + "variable-declaration", + "member-variable-declaration", + ], + }, + "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", + }, + ], + }, "unified-signatures": true, // Functionality @@ -110,7 +113,7 @@ export const rules = { "no-debugger": true, "no-duplicate-super": true, "no-duplicate-switch-case": true, - "no-duplicate-variable": [true, "check-parameters"], + "no-duplicate-variable": { options: ["check-parameters"] }, "no-dynamic-delete": true, "no-empty": true, "no-eval": true, @@ -130,7 +133,7 @@ export const rules = { "no-sparse-arrays": true, "no-submodule-imports": true, "no-unbound-method": true, - "no-unnecessary-class": [true, "allow-empty-class"], + "no-unnecessary-class": { options: ["allow-empty-class"] }, "no-unsafe-any": true, "no-unsafe-finally": true, "no-unused-expression": true, @@ -153,11 +156,13 @@ export const rules = { "cyclomatic-complexity": true, eofline: true, - indent: [true, "spaces"], - "linebreak-style": [true, "LF"], - "max-classes-per-file": [true, 1], - "max-file-line-count": [true, 1000], - "max-line-length": [true, 120], + indent: { options: ["spaces"] }, + "linebreak-style": { options: "LF" }, + "max-classes-per-file": { options: 1 }, + "max-file-line-count": { options: 1000 }, + "max-line-length": { + options: { limit: 120 }, + }, "no-default-export": true, "no-default-import": true, "no-duplicate-imports": true, @@ -168,36 +173,36 @@ export const rules = { "no-trailing-whitespace": true, "object-literal-sort-keys": true, "prefer-const": true, - "trailing-comma": [ - true, - { + "trailing-comma": { + options: { esSpecCompliant: true, multiline: "always", singleline: "never", }, - ], + }, // Style - align: [true, "parameters", "arguments", "statements", "elements", "members"], - "array-type": [true, "array-simple"], + align: { + options: ["parameters", "arguments", "statements", "elements", "members"], + }, + "array-type": { options: "array-simple" }, "arrow-parens": true, - "arrow-return-shorthand": [true, "multiline"], + "arrow-return-shorthand": { options: "multiline" }, "binary-expression-operand-order": true, "callable-types": true, "class-name": true, - "comment-format": [true, "check-space", "check-uppercase"], - "comment-type": [true, "singleline", "multiline", "doc", "directive"], + "comment-format": { options: ["check-space", "check-uppercase"] }, + "comment-type": { options: ["singleline", "multiline", "doc", "directive"] }, "completed-docs": true, - // "file-header": No sensible default deprecation: true, encoding: true, - "file-name-casing": [true, "camel-case"], + "file-name-casing": { options: "camel-case" }, "import-spacing": true, "increment-decrement": true, "interface-name": true, "interface-over-type-literal": true, - "jsdoc-format": [true, "check-multiline-start"], + "jsdoc-format": { options: "check-multiline-start" }, "match-default-export-name": true, "new-parens": true, "newline-before-return": true, @@ -213,63 +218,65 @@ export const rules = { "no-unnecessary-qualifier": true, "no-unnecessary-type-assertion": true, "number-literal-format": true, - "object-literal-key-quotes": [true, "consistent-as-needed"], + "object-literal-key-quotes": { options: "consistent-as-needed" }, "object-literal-shorthand": true, - "one-line": [ - true, - "check-catch", - "check-else", - "check-finally", - "check-open-brace", - "check-whitespace", - ], + "one-line": { + options: [ + "check-catch", + "check-else", + "check-finally", + "check-open-brace", + "check-whitespace", + ], + }, "one-variable-per-declaration": true, - "ordered-imports": [ - true, - { + "ordered-imports": { + options: { "grouped-imports": true, "import-sources-order": "case-insensitive", "named-imports-order": "case-insensitive", "module-source-path": "full", }, - ], + }, "prefer-function-over-method": true, "prefer-method-signature": true, "prefer-object-spread": true, "prefer-switch": true, "prefer-template": true, "prefer-while": true, - quotemark: [true, "double", "avoid-escape", "avoid-template"], + quotemark: { + options: ["double", "avoid-escape", "avoid-template"], + }, "return-undefined": true, - semicolon: [true, "always"], - "space-before-function-paren": [ - true, - { + semicolon: { options: ["always"] }, + "space-before-function-paren": { + options: { anonymous: "never", asyncArrow: "always", constructor: "never", method: "never", named: "never", }, - ], - "space-within-parens": [true, 0], + }, + "space-within-parens": { options: 0 }, "switch-final-break": true, "type-literal-delimiter": true, "unnecessary-bind": true, - "variable-name": [true, "ban-keywords", "check-format"], - whitespace: [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-module", - "check-separator", - "check-type", - "check-typecast", - "check-preblock", - "check-type-operator", - "check-rest-spread", - ], + "variable-name": { options: ["ban-keywords", "check-format"] }, + whitespace: { + options: [ + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type", + "check-typecast", + "check-preblock", + "check-type-operator", + "check-rest-spread", + ], + }, }; export const RULES_EXCLUDED_FROM_ALL_CONFIG = [ diff --git a/src/configs/latest.ts b/src/configs/latest.ts index 7c489301d7b..eae3fa67fb0 100644 --- a/src/configs/latest.ts +++ b/src/configs/latest.ts @@ -33,14 +33,14 @@ export const rules = { "prefer-object-spread": true, // added in v5.4 - "no-duplicate-variable": [true, "check-parameters"], + "no-duplicate-variable": { options: "check-parameters" }, // added in v5.5 "no-this-assignment": true, // added in v5.6 "no-duplicate-imports": true, - "space-within-parens": [true, 0], + "space-within-parens": { options: 0 }, "no-submodule-imports": true, // added in v5.7 @@ -59,9 +59,7 @@ export const rules = { // added in v5.8 "ban-comma-operator": true, - "jsdoc-format": { - options: "check-multiline-start", - }, + "jsdoc-format": { options: "check-multiline-start" }, "no-duplicate-switch-case": true, "no-implicit-dependencies": true, "no-return-await": true, diff --git a/src/configs/recommended.ts b/src/configs/recommended.ts index b918e6aa6e5..a692d17e862 100644 --- a/src/configs/recommended.ts +++ b/src/configs/recommended.ts @@ -57,12 +57,8 @@ export const rules = { "interface-over-type-literal": true, "jsdoc-format": true, "label-position": true, - "max-classes-per-file": { - options: [1], - }, - "max-line-length": { - options: [120], - }, + "max-classes-per-file": { options: 1 }, + "max-line-length": { options: 120 }, "member-access": true, "member-ordering": { options: { @@ -98,13 +94,10 @@ export const rules = { "no-unnecessary-initializer": true, "no-unsafe-finally": true, "no-unused-expression": true, - // disable this rule as it is very heavy performance-wise and not that useful - "no-use-before-declare": false, + "no-use-before-declare": false, // disabled because it is very heavy performance-wise and not that useful "no-var-keyword": true, "no-var-requires": true, - "object-literal-key-quotes": { - options: ["consistent-as-needed"], - }, + "object-literal-key-quotes": { options: "consistent-as-needed" }, "object-literal-shorthand": true, "object-literal-sort-keys": true, "one-line": { @@ -116,9 +109,7 @@ export const rules = { "check-whitespace", ], }, - "one-variable-per-declaration": { - options: ["ignore-for-loop"], - }, + "one-variable-per-declaration": { options: ["ignore-for-loop"] }, "only-arrow-functions": { options: ["allow-declarations", "allow-named-functions"], }, @@ -135,9 +126,7 @@ export const rules = { options: ["double", "avoid-escape"], }, radix: true, - semicolon: { - options: ["always"], - }, + semicolon: { options: ["always"] }, "space-before-function-paren": { options: { anonymous: "never", @@ -154,9 +143,7 @@ export const rules = { singleline: "never", }, }, - "triple-equals": { - options: ["allow-null-check"], - }, + "triple-equals": { options: ["allow-null-check"] }, typedef: false, "typedef-whitespace": { options: [ @@ -241,16 +228,12 @@ export const jsRules = { "check-whitespace", ], }, - "one-variable-per-declaration": { - options: ["ignore-for-loop"], - }, + "one-variable-per-declaration": { options: ["ignore-for-loop"] }, quotemark: { options: ["double", "avoid-escape"], }, radix: true, - semicolon: { - options: ["always"], - }, + semicolon: { options: ["always"] }, "space-before-function-paren": { options: { anonymous: "never", @@ -266,9 +249,7 @@ export const jsRules = { singleline: "never", }, }, - "triple-equals": { - options: ["allow-null-check"], - }, + "triple-equals": { options: ["allow-null-check"] }, "use-isnan": true, "variable-name": { options: ["ban-keywords", "check-format", "allow-pascal-case"], diff --git a/src/language/rule/abstractRule.ts b/src/language/rule/abstractRule.ts index 87264d52557..a8e96e5acd6 100644 --- a/src/language/rule/abstractRule.ts +++ b/src/language/rule/abstractRule.ts @@ -25,9 +25,9 @@ export type NoInfer = T & { [K in keyof T]: T[K] }; export abstract class AbstractRule implements IRule { public static metadata: IRuleMetadata; + public ruleName: string; protected readonly ruleArguments: any[]; protected readonly ruleSeverity: RuleSeverity; - public ruleName: string; constructor(private readonly options: IOptions) { this.ruleName = options.ruleName; diff --git a/src/language/rule/rule.ts b/src/language/rule/rule.ts index f6af7d113e7..960bdb774ca 100644 --- a/src/language/rule/rule.ts +++ b/src/language/rule/rule.ts @@ -262,12 +262,6 @@ export type Fix = Replacement | Replacement[]; export type FixJson = ReplacementJson | ReplacementJson[]; export class RuleFailure { - private readonly fileName: string; - private readonly startPosition: RuleFailurePosition; - private readonly endPosition: RuleFailurePosition; - private readonly rawLines: string; - private ruleSeverity: RuleSeverity; - public static compare(a: RuleFailure, b: RuleFailure): number { if (a.fileName !== b.fileName) { return a.fileName < b.fileName ? -1 : 1; @@ -275,6 +269,12 @@ export class RuleFailure { return a.startPosition.getPosition() - b.startPosition.getPosition(); } + private readonly fileName: string; + private readonly startPosition: RuleFailurePosition; + private readonly endPosition: RuleFailurePosition; + private readonly rawLines: string; + private ruleSeverity: RuleSeverity; + constructor( private readonly sourceFile: ts.SourceFile, start: number, diff --git a/src/linter.ts b/src/linter.ts index 5337a5b005b..42d5b8e00f6 100644 --- a/src/linter.ts +++ b/src/linter.ts @@ -30,7 +30,7 @@ import { loadConfigurationFromPath, } from "./configuration"; import { removeDisabledFailures } from "./enableDisableRules"; -import { FatalError, isError, showRuleCrashWarning } from "./error"; +import { FatalError, isError, showRuleCrashWarning, showWarningOnce } from "./error"; import { findFormatter } from "./formatterLoader"; import { ILinterOptions, LintResult } from "./index"; import { IRule, isTypedRule, Replacement, RuleFailure, RuleSeverity } from "./language/rule/rule"; @@ -49,9 +49,6 @@ export class Linter { public static getRulesDirectories = getRulesDirectories; public static loadConfigurationFromPath = loadConfigurationFromPath; - private failures: RuleFailure[] = []; - private fixes: RuleFailure[] = []; - /** * Creates a TypeScript program object from a tsconfig.json file path and optional project directory. */ @@ -119,6 +116,9 @@ export class Linter { ); } + private failures: RuleFailure[] = []; + private fixes: RuleFailure[] = []; + constructor(private readonly options: ILinterOptions, private program?: ts.Program) { if (typeof options !== "object") { throw new Error(`Unknown Linter options type: ${typeof options}`); @@ -142,6 +142,11 @@ export class Linter { const sourceFile = this.getSourceFile(fileName, source); const isJs = /\.jsx?$/i.test(fileName); const enabledRules = this.getEnabledRules(configuration, isJs); + if (enabledRules.length === 0) { + showWarningOnce( + `Tried to lint ${fileName} but found no valid, enabled rules for this file type and file path in the resolved configuration.`, + ); + } let fileFailures = this.getAllFailures(sourceFile, enabledRules); if (fileFailures.length === 0) { diff --git a/src/ruleLoader.ts b/src/ruleLoader.ts index 92ae0ce69dc..b4aa0803d8d 100644 --- a/src/ruleLoader.ts +++ b/src/ruleLoader.ts @@ -79,10 +79,7 @@ export function loadRules( showWarningOnce(warning); } - if (rules.length === 0) { - const fileType = isJs ? "JavaScript" : "TypeScript"; - showWarningOnce(`No valid rules have been specified for ${fileType} files`); - } + return rules; } diff --git a/src/rules/quotemarkRule.ts b/src/rules/quotemarkRule.ts index 055d4ebe6cd..141e876ef0f 100644 --- a/src/rules/quotemarkRule.ts +++ b/src/rules/quotemarkRule.ts @@ -195,7 +195,10 @@ function getQuotemarkPreference(ruleArguments: any[]): QUOTEMARK { return '"'; } -function getJSXQuotemarkPreference(ruleArguments: any[], regularQuotemarkPreference: QUOTEMARK): JSX_QUOTEMARK { +function getJSXQuotemarkPreference( + ruleArguments: any[], + regularQuotemarkPreference: QUOTEMARK, +): JSX_QUOTEMARK { for (const arg of ruleArguments) { switch (arg) { case OPTION_JSX_SINGLE: diff --git a/test/executable/executableTests.ts b/test/executable/executableTests.ts index c28ea1a6965..a0211ae4c3a 100644 --- a/test/executable/executableTests.ts +++ b/test/executable/executableTests.ts @@ -604,7 +604,9 @@ describe("Executable", function(this: Mocha.ISuiteCallbackContext) { if (semver.satisfies(tsVersion, ">=2.9")) { it("does not try to parse JSON files with --resolveJsonModule with TS >= 2.9", async () => { - const status = await execRunner({project: "test/files/tsconfig-resolve-json-module/tsconfig.json"}); + const status = await execRunner({ + project: "test/files/tsconfig-resolve-json-module/tsconfig.json", + }); assert.equal(status, Status.Ok, "process should exit without an error"); }); } diff --git a/tslint-vscode.json b/tslint-vscode.json new file mode 100644 index 00000000000..d942120a0d5 --- /dev/null +++ b/tslint-vscode.json @@ -0,0 +1,21 @@ +{ + "extends": "./tslint.json", + // disable all type checking rules so the vscode plugin can run + "rules": { + "await-promise": false, + "deprecation": false, + "match-default-export-name": false, + "no-boolean-literal-compare": false, + "no-floating-promises": false, + "no-for-in-array": false, + "no-inferred-empty-object-type": false, + "no-unnecessary-type-assertion": false, + "no-unsafe-any": false, + "prefer-readonly": false, + "promise-function-async": false, + "restrict-plus-operands": false, + "return-undefined": false, + "strict-boolean-expressions": false, + "use-default-type-parameter": false + } +} diff --git a/tslint.json b/tslint.json index f439c65b9ce..820279c960c 100644 --- a/tslint.json +++ b/tslint.json @@ -1,9 +1,19 @@ { - "lintOptions": { - "typeCheck": true - }, - "extends": ["tslint:all", "tslint-config-prettier"], + "extends": [ + "tslint:all", + "tslint-config-prettier", + "tslint-plugin-prettier" + ], "rules": { + // Formatting rules + "prettier": { + "options": { + "printWidth": 100, + "tabWidth": 4, + "trailingComma": "all" + } + }, + // Don't want these "cyclomatic-complexity": false, "increment-decrement": false, @@ -11,10 +21,21 @@ "no-parameter-properties": false, "no-parameter-reassignment": false, "no-unused-variable": false, + "typedef": false, + // TODO: Enable stricter options for these - "comment-format": [true, "check-space"], + "comment-format": { + "options": [ + "check-space" + ] + }, "member-access": true, - "only-arrow-functions": [true, "allow-declarations", "allow-named-functions"], + "only-arrow-functions": { + "options": [ + "allow-declarations", + "allow-named-functions" + ] + }, // TODO: Enable these "completed-docs": false, @@ -29,35 +50,57 @@ "no-void-expression": false, "prefer-function-over-method": false, "strict-type-predicates": false, - "triple-equals": [true, "allow-undefined-check"], - "typedef": false, - - "ban": [true, ["describe", "only"], ["it", "only"]], + "triple-equals": { + "options": [ + "allow-undefined-check" + ] + }, + // Misc + "ban": { + "options": [ + [ + "describe", + "only" + ], + [ + "it", + "only" + ] + ] + }, "interface-name": false, - "file-header": [true, "Copyright \\d{4} Palantir Technologies, Inc."], + "file-header": { + "options": [ + "Copyright \\d{4} Palantir Technologies, Inc." + ] + }, "max-classes-per-file": false, - "max-line-length": [true, 140], - "member-ordering": [ - true, - "public-before-private", - "static-before-instance", - "variables-before-functions" - ], - "newline-per-chained-call": false, + "member-ordering": { + "options": { + "order": "statics-first" + } + }, "no-console": { - "options": ["log"] + "options": [ + "log" + ] }, "no-switch-case-fall-through": true, - "strict-boolean-expressions": [true, "allow-boolean-or-undefined"], + "strict-boolean-expressions": { + "options": [ + "allow-boolean-or-undefined" + ] + }, "switch-default": false, - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ], + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-leading-underscore", + "allow-pascal-case" + ] + }, "linebreak-style": false } } diff --git a/yarn.lock b/yarn.lock index 5769845f368..00573ae36cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -542,6 +542,14 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +eslint-plugin-prettier@^2.2.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" + integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -565,19 +573,6 @@ event-stream@~3.3.0: stream-combiner "~0.0.4" through "~2.3.1" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -604,6 +599,11 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +fast-diff@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -637,13 +637,6 @@ find-up@^1.0.0, find-up@^1.1.2: path-exists "^2.0.0" pinkie-promise "^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" - follow-redirects@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919" @@ -697,11 +690,6 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U= -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - github@^8.2.1: version "8.2.1" resolved "https://registry.yarnpkg.com/github/-/github-8.2.1.tgz#616b2211fbcd1cc8631669aed67653e62eb53816" @@ -829,11 +817,6 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -ignore@^3.3.7: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -972,11 +955,6 @@ is-regex@^1.0.3: dependencies: has "^1.0.1" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" @@ -1057,6 +1035,11 @@ istanbul-reports@^1.1.0: dependencies: handlebars "^4.0.3" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== + js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" @@ -1116,6 +1099,11 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -1137,14 +1125,6 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" -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" - lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -1320,11 +1300,6 @@ mocha@^3.2.0: mkdirp "0.5.1" supports-color "3.1.2" -mri@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.1.tgz#85aa26d3daeeeedf80dc5984af95cc5ca5cad9f1" - integrity sha1-haom09ru7t+A3FmEr5XMXKXK2fE= - ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" @@ -1375,13 +1350,6 @@ npm-run-all@^4.0.2: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -1465,30 +1433,6 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -p-finally@^1.0.0: - version "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-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-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= - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1513,21 +1457,11 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" @@ -1590,17 +1524,6 @@ prettier@1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg== -pretty-quick@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.6.0.tgz#afc3591eb5c4cf37614a305d489a8a40e57c9258" - integrity sha512-bnCmsPy98ERD7VWBO+0y1OGWLfx/DPUjNFN2ZRVyxuGBiic1BXAGgjHsTKgBIbPISdqpP6KBEmRV0Lir4xu/BA== - dependencies: - chalk "^2.3.0" - execa "^0.8.0" - find-up "^2.1.0" - ignore "^3.3.7" - mri "^1.1.0" - ps-tree@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" @@ -1884,11 +1807,6 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" @@ -1968,28 +1886,37 @@ tsconfig@^6.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" +tslib@^1.7.1, tslib@^1.8.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + tslib@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.0.tgz#dc604ebad64bcbf696d613da6c954aa0e7ea1eb6" integrity sha512-ymKWWZJST0/CkgduC2qkzjMOWr4bouhuURNXCn/inEX0L57BnRG6FhX76o7FOnsjHazCjfU2LKeSrlS2sIKQJg== -tslib@^1.8.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslint-config-prettier@^1.15.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz#946ed6117f98f3659a65848279156d87628c33dc" + integrity sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw== -tslint-config-prettier@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.13.0.tgz#189e821931ad89e0364e4e292d5c44a14e90ecd6" - integrity sha512-assE77K7K8Q9j8CVIHiU3d1uoKc8N5v7UPpkQ9IE8BEPWkvSYR37lDuYekDlAMFqR1IpD6CrS+uOJLl6pw7Wdw== +tslint-plugin-prettier@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz#95b6a3b766622ffc44375825d7760225c50c3680" + integrity sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw== + dependencies: + eslint-plugin-prettier "^2.2.0" + lines-and-columns "^1.1.6" + tslib "^1.7.1" "tslint-test-config-non-relative@file:test/external/tslint-test-config-non-relative": version "0.0.1" -tslint@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.0.tgz#47f2dba291ed3d580752d109866fb640768fca36" - integrity sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ== +tslint@~5.12.0: + version "5.12.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" + integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw== dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1"