diff --git a/package-lock.json b/package-lock.json index 59da17d83..10d14617f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2805,13 +2805,13 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.20.0.tgz", - "integrity": "sha512-sw+3HO5aehYqn5w177z2D82ZQlqHCwcKSMboueo7oE4KU9QiC0SAgfS/D4z9xXvpTc8Bt41Raa9fBR8T2tIhoQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.23.0.tgz", + "integrity": "sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.20.0", - "@typescript-eslint/scope-manager": "4.20.0", + "@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", @@ -2841,55 +2841,55 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.20.0.tgz", - "integrity": "sha512-sQNlf6rjLq2yB5lELl3gOE7OuoA/6IVXJUJ+Vs7emrQMva14CkOwyQwD7CW+TkmOJ4Q/YGmoDLmbfFrpGmbKng==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.20.0", - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/typescript-estree": "4.20.0", + "@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": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.20.0.tgz", - "integrity": "sha512-m6vDtgL9EABdjMtKVw5rr6DdeMCH3OA1vFb0dAyuZSa3e5yw1YRzlwFnm9knma9Lz6b2GPvoNSa8vOXrqsaglA==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.23.0.tgz", + "integrity": "sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.20.0", - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/typescript-estree": "4.20.0", + "@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": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.20.0.tgz", - "integrity": "sha512-/zm6WR6iclD5HhGpcwl/GOYDTzrTHmvf8LLLkwKqqPKG6+KZt/CfSgPCiybshmck66M2L5fWSF/MKNuCwtKQSQ==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/visitor-keys": "4.20.0" + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" } }, "@typescript-eslint/types": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.20.0.tgz", - "integrity": "sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.20.0.tgz", - "integrity": "sha512-Knpp0reOd4ZsyoEJdW8i/sK3mtZ47Ls7ZHvD8WVABNx5Xnn7KhenMTRGegoyMTx6TiXlOVgMz9r0pDgXTEEIHA==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", - "@typescript-eslint/visitor-keys": "4.20.0", + "@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", @@ -2918,19 +2918,19 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz", - "integrity": "sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.20.0", + "@typescript-eslint/types": "4.23.0", "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } diff --git a/package.json b/package.json index 11995c428..e46631960 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,8 @@ "@types/lodash": "4.14.169", "@types/minimatch": "3.0.4", "@types/node": "12.20.13", - "@typescript-eslint/eslint-plugin": "4.20.0", - "@typescript-eslint/parser": "4.20.0", + "@typescript-eslint/eslint-plugin": "4.23.0", + "@typescript-eslint/parser": "4.23.0", "babel-jest": "26.6.3", "eslint": "7.26.0", "husky": "6.0.0", diff --git a/src/converters/comments/convertComments.test.ts b/src/converters/comments/convertComments.test.ts index 527aa151f..596296f4f 100644 --- a/src/converters/comments/convertComments.test.ts +++ b/src/converters/comments/convertComments.test.ts @@ -27,7 +27,7 @@ describe("convertComments", () => { dependencies, { comments: undefined }, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert @@ -49,7 +49,7 @@ describe("convertComments", () => { dependencies, { comments: true }, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert @@ -74,7 +74,7 @@ describe("convertComments", () => { dependencies, { comments: true }, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert @@ -96,7 +96,7 @@ describe("convertComments", () => { dependencies, { comments: ["*.ts"] }, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert @@ -115,7 +115,7 @@ describe("convertComments", () => { dependencies, { comments: ["*.ts"] }, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert diff --git a/src/converters/comments/convertFileComments.test.ts b/src/converters/comments/convertFileComments.test.ts index 29e763497..1fb8dae1f 100644 --- a/src/converters/comments/convertFileComments.test.ts +++ b/src/converters/comments/convertFileComments.test.ts @@ -26,7 +26,12 @@ describe("convertFileComments", () => { const dependencies = createStubDependencies(readFileError); // Act - const result = await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + const result = await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(result).toBe(readFileError); @@ -39,7 +44,12 @@ describe("convertFileComments", () => { `); // Act - await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(dependencies.fileSystem.writeFile).not.toHaveBeenCalled(); @@ -70,7 +80,12 @@ export const g = true; `); // Act - await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(dependencies.fileSystem.writeFile).toHaveBeenCalledWith( @@ -110,7 +125,12 @@ export const b = true; `); // Act - await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(dependencies.fileSystem.writeFile).toHaveBeenCalledWith( @@ -136,7 +156,7 @@ export const a = true; await convertFileComments( dependencies, stubFileName, - new Map(), + new Map(), new Map([["ts-a", ["es-cached"]]]), ); @@ -162,7 +182,7 @@ export const a = true; dependencies, stubFileName, new Map([["ts-a", ["es-cached"]]]), - new Map(), + new Map(), ); // Assert @@ -183,7 +203,12 @@ export const a = true; `); // Act - await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(dependencies.fileSystem.writeFile).toHaveBeenCalledWith( @@ -203,7 +228,12 @@ export const a = true; `); // Act - await convertFileComments(dependencies, stubFileName, new Map(), new Map()); + await convertFileComments( + dependencies, + stubFileName, + new Map(), + new Map(), + ); // Assert expect(dependencies.fileSystem.writeFile).toHaveBeenCalledWith( diff --git a/src/converters/editorConfigs/converters/convertVSCodeConfig.ts b/src/converters/editorConfigs/converters/convertVSCodeConfig.ts index f47694be8..5a7738d9e 100644 --- a/src/converters/editorConfigs/converters/convertVSCodeConfig.ts +++ b/src/converters/editorConfigs/converters/convertVSCodeConfig.ts @@ -13,12 +13,16 @@ const knownMissingSettings = [ ]; export const convertVSCodeConfig: EditorConfigConverter = (rawEditorSettings, settings) => { - const editorSettings = parseJson(rawEditorSettings); - const autoFixOnSave = editorSettings["editor.codeActionsOnSave"]?.["source.fixAll.tslint"]; + const editorSettings: Record = parseJson(rawEditorSettings); + const autoFixOnSave = + editorSettings["editor.codeActionsOnSave"] && + typeof editorSettings["editor.codeActionsOnSave"] === "object" && + editorSettings["editor.codeActionsOnSave"]?.["source.fixAll.tslint"]; // Only create a new config file path if the input and output configs roughly match const eslintPathMatches = editorSettings["tslint.configFile"] && + typeof editorSettings["tslint.configFile"] === "string" && !path.relative( path.dirname(editorSettings["tslint.configFile"]), path.dirname(settings.config), diff --git a/src/converters/lintConfigs/convertLintConfig.test.ts b/src/converters/lintConfigs/convertLintConfig.test.ts index 964059f15..5ddb32155 100644 --- a/src/converters/lintConfigs/convertLintConfig.test.ts +++ b/src/converters/lintConfigs/convertLintConfig.test.ts @@ -36,7 +36,7 @@ describe("convertLintConfig", () => { dependencies, stubSettings, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert @@ -62,7 +62,7 @@ describe("convertLintConfig", () => { dependencies, stubSettings, createStubOriginalConfigurationsData(), - new Map(), + new Map(), ); // Assert diff --git a/src/converters/lintConfigs/createESLintConfiguration.test.ts b/src/converters/lintConfigs/createESLintConfiguration.test.ts index 334458c27..678708ddc 100644 --- a/src/converters/lintConfigs/createESLintConfiguration.test.ts +++ b/src/converters/lintConfigs/createESLintConfiguration.test.ts @@ -17,7 +17,7 @@ describe("createESLintConfiguration", () => { dependencies, originalConfigurations, true, - new Map(), + new Map(), ); // Assert diff --git a/src/converters/lintConfigs/formatting/formatters/withKeysSorted.ts b/src/converters/lintConfigs/formatting/formatters/withKeysSorted.ts index ea5975f13..0e5f097a5 100644 --- a/src/converters/lintConfigs/formatting/formatters/withKeysSorted.ts +++ b/src/converters/lintConfigs/formatting/formatters/withKeysSorted.ts @@ -1,6 +1,6 @@ -export const withKeysSorted = (input: any) => { - const output: Record = {}; - const keys = Object.keys(input).sort((a, b) => a.localeCompare(b)); +export const withKeysSorted = >(input: T) => { + const output = {} as T; + const keys: (keyof T)[] = Object.keys(input).sort((a, b) => a.localeCompare(b)); for (const key of keys) { output[key] = input[key]; diff --git a/src/converters/lintConfigs/pruning/removeExtendsDuplicatedRules.test.ts b/src/converters/lintConfigs/pruning/removeExtendsDuplicatedRules.test.ts index 35669984a..8a551a674 100644 --- a/src/converters/lintConfigs/pruning/removeExtendsDuplicatedRules.test.ts +++ b/src/converters/lintConfigs/pruning/removeExtendsDuplicatedRules.test.ts @@ -33,7 +33,7 @@ describe("removeExtendsDuplicatedRules", () => { }); // Act - const { differentRules } = removeExtendsDuplicatedRules(allRules, new Map()); + const { differentRules } = removeExtendsDuplicatedRules(allRules, new Map()); // Assert expect(differentRules.size).toBe(1); diff --git a/src/converters/lintConfigs/rules/convertRule.test.ts b/src/converters/lintConfigs/rules/convertRule.test.ts index baea97e42..1cd184d90 100644 --- a/src/converters/lintConfigs/rules/convertRule.test.ts +++ b/src/converters/lintConfigs/rules/convertRule.test.ts @@ -6,7 +6,7 @@ import { TSLintRuleOptions } from "./types"; describe("convertRule", () => { it("returns undefined when no converter exists for a rule", () => { // Arrange - const converters = new Map(); + const converters = new Map(); // Act const result = convertRule( diff --git a/src/converters/lintConfigs/rules/convertRule.ts b/src/converters/lintConfigs/rules/convertRule.ts index 93e339eb4..81a364656 100644 --- a/src/converters/lintConfigs/rules/convertRule.ts +++ b/src/converters/lintConfigs/rules/convertRule.ts @@ -13,7 +13,8 @@ export const convertRule = ( try { return converter(tslintRule); - } catch (error) { - return ConversionError.forRuleError(error, tslintRule); + } catch (error: unknown) { + // TODO: Maybe we can provide a different error message for generic errors. + return ConversionError.forRuleError(error as Error, tslintRule); } }; diff --git a/src/converters/lintConfigs/rules/convertRules.test.ts b/src/converters/lintConfigs/rules/convertRules.test.ts index 1c9a21637..64236f736 100644 --- a/src/converters/lintConfigs/rules/convertRules.test.ts +++ b/src/converters/lintConfigs/rules/convertRules.test.ts @@ -15,7 +15,7 @@ describe("convertRules", () => { const { missing } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, undefined, - new Map(), + new Map(), ); // Assert @@ -32,7 +32,7 @@ describe("convertRules", () => { const { missing } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -47,7 +47,7 @@ describe("convertRules", () => { const { missing } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -64,7 +64,7 @@ describe("convertRules", () => { const { failed } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -127,7 +127,7 @@ describe("convertRules", () => { const { failed } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -155,7 +155,7 @@ describe("convertRules", () => { const { converted } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -197,7 +197,7 @@ describe("convertRules", () => { const { converted } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -239,7 +239,7 @@ describe("convertRules", () => { const { converted } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert @@ -272,7 +272,7 @@ describe("convertRules", () => { const { plugins } = convertRules( { ruleConverters: converters, ruleMergers: mergers }, { [tslintRule.ruleName]: tslintRule }, - new Map(), + new Map(), ); // Assert diff --git a/src/converters/lintConfigs/rules/convertRules.ts b/src/converters/lintConfigs/rules/convertRules.ts index 99e568fe5..f60ce38b7 100644 --- a/src/converters/lintConfigs/rules/convertRules.ts +++ b/src/converters/lintConfigs/rules/convertRules.ts @@ -7,6 +7,7 @@ import { formatRawTslintRule } from "./formats/formatRawTslintRule"; import { RuleMerger } from "./ruleMerger"; import { RuleConverter } from "./ruleConverter"; import { TSLintRuleOptions, ESLintRuleOptions } from "./types"; +import { Entries } from "../../../utils"; export type ConvertRulesDependencies = { ruleConverters: Map; @@ -36,7 +37,7 @@ export const convertRules = ( const plugins = new Set(); if (rawTslintRules !== undefined) { - for (const [ruleName, value] of Object.entries(rawTslintRules)) { + for (const [ruleName, value] of Object.entries(rawTslintRules) as Entries) { // 1. The raw TSLint rule is converted to a standardized format. const tslintRule = formatRawTslintRule(ruleName, value); diff --git a/src/converters/lintConfigs/rules/ruleConverters/import-blacklist.ts b/src/converters/lintConfigs/rules/ruleConverters/import-blacklist.ts index 57d0c72fc..fac78c01c 100644 --- a/src/converters/lintConfigs/rules/ruleConverters/import-blacklist.ts +++ b/src/converters/lintConfigs/rules/ruleConverters/import-blacklist.ts @@ -28,8 +28,10 @@ export const convertImportBlacklist: RuleConverter = (tslintRule) => { const eslintRule = isString(rule) ? rule : { - name: Object.keys(rule)[0], - importNames: Object.values(rule)[0] as string[], + name: Object.keys(rule as Record)[0], + importNames: Object.values( + rule as Record, + )[0] as string[], }; return { ...rules, paths: [...(rules.paths || []), eslintRule] }; } @@ -55,6 +57,6 @@ export const convertImportBlacklist: RuleConverter = (tslintRule) => { }; }; -function isString(value: string): boolean { +function isString(value: any): boolean { return typeof value === "string"; } diff --git a/src/converters/lintConfigs/rules/ruleConverters/no-submodule-imports.ts b/src/converters/lintConfigs/rules/ruleConverters/no-submodule-imports.ts index 7176902b7..8b0e9b468 100644 --- a/src/converters/lintConfigs/rules/ruleConverters/no-submodule-imports.ts +++ b/src/converters/lintConfigs/rules/ruleConverters/no-submodule-imports.ts @@ -9,9 +9,9 @@ export const convertNoSubmoduleImports: RuleConverter = (tslintRule) => { tslintRule.ruleArguments.length >= 2 ) { allow.push( - ...tslintRule.ruleArguments.map((ruleArg) => { - return typeof ruleArg === "string" ? ruleArg.concat("/*") : ruleArg; - }), + ...(tslintRule.ruleArguments as string[]) + .slice(1, tslintRule.ruleArguments.length) + .map((ruleArg) => ruleArg.concat("/*")), ); } diff --git a/src/converters/lintConfigs/rules/ruleConverters/semicolon.ts b/src/converters/lintConfigs/rules/ruleConverters/semicolon.ts index 04707136d..d974cac3c 100644 --- a/src/converters/lintConfigs/rules/ruleConverters/semicolon.ts +++ b/src/converters/lintConfigs/rules/ruleConverters/semicolon.ts @@ -26,7 +26,7 @@ export const convertSemicolon: RuleConverter = (tslintRule) => { ruleArguments: [ { multiline: { - delimiter: getMultilineDelimiter(tslintRule.ruleArguments[0]), + delimiter: getMultilineDelimiter(tslintRule.ruleArguments[0] as "always" | "never"), requireLast: true, }, singleline: { diff --git a/src/converters/lintConfigs/rules/ruleConverters/tests/no-submodule-imports.test.ts b/src/converters/lintConfigs/rules/ruleConverters/tests/no-submodule-imports.test.ts index 7a24e12c5..b493b709e 100644 --- a/src/converters/lintConfigs/rules/ruleConverters/tests/no-submodule-imports.test.ts +++ b/src/converters/lintConfigs/rules/ruleConverters/tests/no-submodule-imports.test.ts @@ -25,7 +25,7 @@ describe(convertNoSubmoduleImports, () => { plugins: ["eslint-plugin-import"], rules: [ { - ruleArguments: [{ allow: [true, "rxjs/*"] }], + ruleArguments: [{ allow: ["rxjs/*"] }], ruleName: "import/no-internal-modules", }, ], diff --git a/src/converters/lintConfigs/rules/ruleConverters/trailing-comma.ts b/src/converters/lintConfigs/rules/ruleConverters/trailing-comma.ts index f5f0cec83..9ee4358d1 100644 --- a/src/converters/lintConfigs/rules/ruleConverters/trailing-comma.ts +++ b/src/converters/lintConfigs/rules/ruleConverters/trailing-comma.ts @@ -4,11 +4,11 @@ const unsupportedKeyInEsLint = "typeLiterals"; export const convertTrailingComma: RuleConverter = (tslintRule) => { const eslintArgs = tslintRule.ruleArguments.length - ? collectArguments(tslintRule.ruleArguments) + ? collectArguments(tslintRule.ruleArguments as TSLintArg[]) : undefined; const notices = tslintRule.ruleArguments.length - ? collectNotices(tslintRule.ruleArguments) + ? collectNotices(tslintRule.ruleArguments as TSLintArg[]) : undefined; return { @@ -134,8 +134,9 @@ function buildNoticeForEsSpecCompliant(arg: TSLintArg): string { function buildNoticeForTypeLiterals(arg: TSLintArg): string { const { singleline, multiline } = arg; - const hasTypeLiterals = (field: any) => - typeof field === "object" && Object.keys(field).includes(unsupportedKeyInEsLint); + const hasTypeLiterals = (field: TSLintArgValue | undefined) => + typeof field === "object" && + (Object.keys(field) as (keyof TSLintObject)[]).includes(unsupportedKeyInEsLint); if (hasTypeLiterals(singleline) || hasTypeLiterals(multiline)) { return `ESLint does not support config property ${unsupportedKeyInEsLint}`; diff --git a/src/converters/lintConfigs/rules/ruleMergers/member-delimiter-style.ts b/src/converters/lintConfigs/rules/ruleMergers/member-delimiter-style.ts index 6a224dd7c..7898b643e 100644 --- a/src/converters/lintConfigs/rules/ruleMergers/member-delimiter-style.ts +++ b/src/converters/lintConfigs/rules/ruleMergers/member-delimiter-style.ts @@ -5,6 +5,7 @@ export const mergeNoMemberDelimiterStyle: RuleMerger = (existingOptions, newOpti return []; } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument return [merge((existingOptions ?? [])[0] ?? {}, (newOptions ?? [])[0] ?? {})]; }; diff --git a/src/converters/lintConfigs/rules/ruleMergers/no-unnecessary-type-assertion.ts b/src/converters/lintConfigs/rules/ruleMergers/no-unnecessary-type-assertion.ts index 983aeb430..c70b07f8c 100644 --- a/src/converters/lintConfigs/rules/ruleMergers/no-unnecessary-type-assertion.ts +++ b/src/converters/lintConfigs/rules/ruleMergers/no-unnecessary-type-assertion.ts @@ -20,6 +20,7 @@ export const mergeNoUnnecessaryTypeAssertion: RuleMerger = (existingOptions, new typesToIgnore = []; } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument typesToIgnore.push(...options[0].typesToIgnore); } diff --git a/src/input/findReportedConfiguration.ts b/src/input/findReportedConfiguration.ts index df199f56e..8d1a9a79a 100644 --- a/src/input/findReportedConfiguration.ts +++ b/src/input/findReportedConfiguration.ts @@ -27,7 +27,7 @@ export const findReportedConfiguration = async ( } }; -const execAndCatch = async (exec: Exec, fullCommand: string) => { +const execAndCatch = async (exec: Exec, fullCommand: string): Promise => { try { const { stderr, stdout } = await exec(fullCommand); diff --git a/src/input/findTSLintConfiguration.ts b/src/input/findTSLintConfiguration.ts index b39240f50..0947a1f40 100644 --- a/src/input/findTSLintConfiguration.ts +++ b/src/input/findTSLintConfiguration.ts @@ -4,6 +4,7 @@ import { Exec } from "../adapters/exec"; import { SansDependencies } from "../binding"; import { uniqueFromSources } from "../utils"; import { importer } from "./importer"; +import { TSLintRuleOptions } from "../converters/lintConfigs/rules/types"; export type TSLintConfiguration = { extends?: string[]; @@ -11,7 +12,7 @@ export type TSLintConfiguration = { rules?: TSLintConfigurationRules; }; -export type TSLintConfigurationRules = Record; +export type TSLintConfigurationRules = Record>; export type FindTSLintConfigurationDependencies = { exec: Exec; diff --git a/src/input/mergeLintConfigurations.test.ts b/src/input/mergeLintConfigurations.test.ts index b6b1bf01a..a5f1219b4 100644 --- a/src/input/mergeLintConfigurations.test.ts +++ b/src/input/mergeLintConfigurations.test.ts @@ -6,10 +6,7 @@ import { TSLintConfiguration } from "./findTSLintConfiguration"; const stubTSLintConfiguration: OriginalConfigurations = { full: { rulesDirectory: [], - rules: { - disabled: true, - enabled: true, - }, + rules: {}, }, raw: {}, }; diff --git a/src/settings.stubs.ts b/src/settings.stubs.ts index eed3457c7..e785f8e4d 100644 --- a/src/settings.stubs.ts +++ b/src/settings.stubs.ts @@ -9,7 +9,7 @@ export const createStubOriginalConfigurationsData = ( ): AllOriginalConfigurations => ({ tslint: { full: { - rules: [], + rules: {}, rulesDirectory: [], }, raw: {}, diff --git a/src/utils.ts b/src/utils.ts index 391af14f3..0a592c437 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,15 +1,19 @@ import JSON5 from "json5"; +export type Entries = { + [K in keyof T]: [K, T[K]]; +}[keyof T][]; + export const isDefined = (item: Item | undefined): item is Item => item !== undefined; export const isError = (item: Item | Error): item is Error => item instanceof Error; export const isTruthy = (item: Item | false | undefined | null | 0): item is Item => !!item; -export const removeEmptyMembers = (items: Item): Item => { - const result: any = {}; +export const removeEmptyMembers = >(items: T): T => { + const result = {} as T; - for (const [key, value] of Object.entries(items)) { + for (const [key, value] of Object.entries(items) as Entries) { if ( !(value instanceof Array && value.length === 0) && !(value instanceof Object && Object.keys(value).length === 0)