ts-reconf 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/analyzer.d.ts +2 -3
  2. package/dist/analyzer.js +7 -1
  3. package/dist/analyzer.js.map +1 -1
  4. package/dist/cli.js +23 -2
  5. package/dist/cli.js.map +1 -1
  6. package/dist/loadTsConfig.d.ts +2 -2
  7. package/dist/loadTsConfig.js +4 -1
  8. package/dist/loadTsConfig.js.map +1 -1
  9. package/dist/reporter.d.ts +1 -1
  10. package/dist/reporter.js +2 -2
  11. package/dist/reporter.js.map +1 -1
  12. package/dist/rules/allowJsCheck.js +12 -2
  13. package/dist/rules/allowJsCheck.js.map +1 -1
  14. package/dist/rules/allowSyntheticDefaultImportsCheck.d.ts +2 -0
  15. package/dist/rules/allowSyntheticDefaultImportsCheck.js +18 -0
  16. package/dist/rules/allowSyntheticDefaultImportsCheck.js.map +1 -0
  17. package/dist/rules/declarationNoEmit.d.ts +2 -0
  18. package/dist/rules/declarationNoEmit.js +18 -0
  19. package/dist/rules/declarationNoEmit.js.map +1 -0
  20. package/dist/rules/defaultRedundant.js +3 -15
  21. package/dist/rules/defaultRedundant.js.map +1 -1
  22. package/dist/rules/forceConsistentCasing.d.ts +2 -0
  23. package/dist/rules/forceConsistentCasing.js +18 -0
  24. package/dist/rules/forceConsistentCasing.js.map +1 -0
  25. package/dist/rules/index.d.ts +6 -0
  26. package/dist/rules/index.js +6 -0
  27. package/dist/rules/index.js.map +1 -1
  28. package/dist/rules/legacyOption.js +3 -3
  29. package/dist/rules/legacyOption.js.map +1 -1
  30. package/dist/rules/moduleResolutionMismatch.js +2 -2
  31. package/dist/rules/moduleResolutionMismatch.js.map +1 -1
  32. package/dist/rules/moduleTypeCheck.js +5 -3
  33. package/dist/rules/moduleTypeCheck.js.map +1 -1
  34. package/dist/rules/moduleVerbatimModuleSyntaxCheck.d.ts +2 -0
  35. package/dist/rules/moduleVerbatimModuleSyntaxCheck.js +19 -0
  36. package/dist/rules/moduleVerbatimModuleSyntaxCheck.js.map +1 -0
  37. package/dist/rules/noEmitOutDir.js +3 -2
  38. package/dist/rules/noEmitOutDir.js.map +1 -1
  39. package/dist/rules/noIncludeOrFiles.js +4 -3
  40. package/dist/rules/noIncludeOrFiles.js.map +1 -1
  41. package/dist/rules/noUncheckedIndexedAccessCheck.d.ts +2 -0
  42. package/dist/rules/noUncheckedIndexedAccessCheck.js +18 -0
  43. package/dist/rules/noUncheckedIndexedAccessCheck.js.map +1 -0
  44. package/dist/rules/skipLibCheckExplain.d.ts +1 -1
  45. package/dist/rules/skipLibCheckExplain.js +2 -1
  46. package/dist/rules/skipLibCheckExplain.js.map +1 -1
  47. package/dist/rules/strictRedundant.d.ts +1 -1
  48. package/dist/rules/strictRedundant.js +3 -2
  49. package/dist/rules/strictRedundant.js.map +1 -1
  50. package/dist/rules/targetLibConflict.js +3 -2
  51. package/dist/rules/targetLibConflict.js.map +1 -1
  52. package/dist/rules/verbatimModuleIsolatedModules.d.ts +2 -0
  53. package/dist/rules/verbatimModuleIsolatedModules.js +18 -0
  54. package/dist/rules/verbatimModuleIsolatedModules.js.map +1 -0
  55. package/dist/types.d.ts +11 -2
  56. package/package.json +4 -4
@@ -1,3 +1,2 @@
1
- import type { CompilerOptions } from "typescript";
2
- import type { Finding } from "./types.js";
3
- export declare function analyze(config: CompilerOptions): Finding[];
1
+ import type { Finding, AnalysisContext } from "./types.js";
2
+ export declare function analyze(config: AnalysisContext): Finding[];
package/dist/analyzer.js CHANGED
@@ -1,4 +1,4 @@
1
- import { legacyOptionRule, strictRedundantRule, skipLibCheckRule, defaultRedundantRule, targetLibConflictRule, moduleKindCheckRule, allowJsCheckRule, noEmitOutDirCheckRule, noIncludeOrFilesCheckRule, moduleResolutionMismatchRule, } from "./rules/index.js";
1
+ import { legacyOptionRule, strictRedundantRule, skipLibCheckRule, defaultRedundantRule, targetLibConflictRule, moduleKindCheckRule, allowJsCheckRule, noEmitOutDirCheckRule, noIncludeOrFilesCheckRule, moduleResolutionMismatchRule, declarationNoEmitCheckRule, verbatimModuleIsolatedModulesRule, verbatimModuleSyntaxCheckRule, allowSyntheticDefaultImportsRule, noUncheckedIndexedAccessRule, forceConsistentCasingInFileNamesRule, } from "./rules/index.js";
2
2
  const rules = [
3
3
  legacyOptionRule,
4
4
  strictRedundantRule,
@@ -10,6 +10,12 @@ const rules = [
10
10
  noEmitOutDirCheckRule,
11
11
  noIncludeOrFilesCheckRule,
12
12
  moduleResolutionMismatchRule,
13
+ declarationNoEmitCheckRule,
14
+ verbatimModuleIsolatedModulesRule,
15
+ verbatimModuleSyntaxCheckRule,
16
+ allowSyntheticDefaultImportsRule,
17
+ noUncheckedIndexedAccessRule,
18
+ forceConsistentCasingInFileNamesRule
13
19
  ];
14
20
  export function analyze(config) {
15
21
  return rules.flatMap(rule => rule.analyze(config));
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,GAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,KAAK,GAAW;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,gBAAgB;IAChB,qBAAqB;IACrB,yBAAyB;IACzB,4BAA4B;CAC/B,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,MAAuB;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,0BAA0B,EAC1B,iCAAiC,EACjC,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,EAC5B,oCAAoC,GACvC,MAAM,kBAAkB,CAAC;AAE1B,MAAM,KAAK,GAAW;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,gBAAgB;IAChB,qBAAqB;IACrB,yBAAyB;IACzB,4BAA4B;IAC5B,0BAA0B;IAC1B,iCAAiC;IACjC,6BAA6B;IAC7B,gCAAgC;IAChC,4BAA4B;IAC5B,oCAAoC;CACvC,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,MAAuB;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC"}
package/dist/cli.js CHANGED
@@ -9,11 +9,32 @@ if (command !== "analyze" && fileArg) {
9
9
  }
10
10
  const file = fileArg ?? (command?.endsWith(".json") ? command : undefined) ?? "tsconfig.json";
11
11
  try {
12
+ // --version or -v
13
+ if (process.argv.includes("--version") || process.argv.includes("-v")) {
14
+ const pkg = await import("../package.json", {
15
+ with: { type: "json" }
16
+ });
17
+ console.log(`ts-reconf version ${pkg.default.version}`);
18
+ process.exit(0);
19
+ }
20
+ // --help or -h
21
+ if (process.argv.includes("--help") || process.argv.includes("-h")) {
22
+ console.log("Usage: ts-reconf analyze [tsconfig.json]");
23
+ console.log("Options:");
24
+ console.log(" --help, -h Show help");
25
+ console.log(" --version, -v Show version");
26
+ console.log(" --output-markdown, -o-md Specify output format (pretty (default) or markdown)");
27
+ process.exit(0);
28
+ }
12
29
  const config = loadTsConfig(file);
13
30
  const findings = analyze(config);
14
- const compactOuput = false;
15
- const report = compactOuput ? toMarkdown(findings, file) : toPrettyOutput(findings, file);
31
+ // `--output-pretty` (default) or `--output-markdown`
32
+ const compactOutput = process.argv.includes("--output-markdown") || process.argv.includes("-o-md");
33
+ const report = compactOutput ? toMarkdown(findings, file) : toPrettyOutput(findings, file);
16
34
  console.log(report);
35
+ if (findings.some(f => f.severity === "error")) {
36
+ process.exit(1);
37
+ }
17
38
  }
18
39
  catch (err) {
19
40
  if (err instanceof Error) {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE5C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC;AAE9F,IAAI,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,YAAY,GAAG,KAAK,CAAC;IAE3B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE1F,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAExB,CAAC;AAAC,OAAO,GAAY,EAAE,CAAC;IACpB,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { CompilerOptions } from "typescript";
2
- export declare function loadTsConfig(tsconfigPath: string): CompilerOptions;
1
+ import type { AnalysisContext } from "./types.js";
2
+ export declare function loadTsConfig(tsconfigPath: string): AnalysisContext;
@@ -7,6 +7,9 @@ export function loadTsConfig(tsconfigPath) {
7
7
  }
8
8
  const configDir = path.dirname(tsconfigPath);
9
9
  const parsedTSConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, configDir);
10
- return parsedTSConfig.options;
10
+ return {
11
+ compilerOptions: parsedTSConfig.options,
12
+ rawConfig: configFile.config
13
+ };
11
14
  }
12
15
  //# sourceMappingURL=loadTsConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadTsConfig.js","sourceRoot":"","sources":["../src/loadTsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,MAAM,YAAY,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACX,EAAE,CAAC,4BAA4B,CAC3B,UAAU,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CACP,CACJ,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE7C,MAAM,cAAc,GAAG,EAAE,CAAC,0BAA0B,CAChD,UAAU,CAAC,MAAM,EACjB,EAAE,CAAC,GAAG,EACN,SAAS,CACZ,CAAC;IAEF,OAAO,cAAc,CAAC,OAAO,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"loadTsConfig.js","sourceRoot":"","sources":["../src/loadTsConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACX,EAAE,CAAC,4BAA4B,CAC3B,UAAU,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CACP,CACJ,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE7C,MAAM,cAAc,GAAG,EAAE,CAAC,0BAA0B,CAChD,UAAU,CAAC,MAAM,EACjB,EAAE,CAAC,GAAG,EACN,SAAS,CACZ,CAAC;IAEF,OAAO;QACH,eAAe,EAAE,cAAc,CAAC,OAAO;QACvC,SAAS,EAAE,UAAU,CAAC,MAAM;KAC/B,CAAC;AACN,CAAC"}
@@ -1,3 +1,3 @@
1
- import { Finding } from "./types.js";
1
+ import type { Finding } from "./types.js";
2
2
  export declare function toMarkdown(findings: Finding[], file?: string): string;
3
3
  export declare function toPrettyOutput(findings: Finding[], file?: string): string;
package/dist/reporter.js CHANGED
@@ -12,11 +12,11 @@ export function toMarkdown(findings, file) {
12
12
  }
13
13
  function groupByCategory(findings) {
14
14
  const groups = {};
15
- for (const finding of findings) {
15
+ for (const finding of findings.sort((a, b) => a.category.localeCompare(b.category))) {
16
16
  if (!groups[finding.category]) {
17
17
  groups[finding.category] = [];
18
18
  }
19
- groups[finding.category].push(finding);
19
+ groups[finding.category]?.push(finding);
20
20
  }
21
21
  return groups;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;AAEpE,MAAM,UAAU,UAAU,CAAC,QAAmB,EAAE,IAAa;IACzD,MAAM,KAAK,GAAG,CAAC,4BAA4B,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CAAC,QAAmB;IACxC,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAmB,EAAE,IAAa;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,IAAI,IAAI,eAAe,KAAK,CAAC,CAAC;IAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GACP,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAChC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,uCAAuC,CAAC;AAEpE,MAAM,UAAU,UAAU,CAAC,QAAmB,EAAE,IAAa;IACzD,MAAM,KAAK,GAAG,CAAC,4BAA4B,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CAAC,QAAmB;IACxC,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAmB,EAAE,IAAa;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,+BAA+B,IAAI,IAAI,eAAe,KAAK,CAAC,CAAC;IAExE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GACP,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAChC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -2,11 +2,21 @@ const ruleId = "ts.allowJs.check";
2
2
  export const allowJsCheckRule = {
3
3
  id: ruleId,
4
4
  analyze(config) {
5
- const allowJs = config.allowJs;
6
- if (!allowJs) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const allowJs = compilerOptions.allowJs;
7
+ const checkJs = compilerOptions.checkJs;
8
+ if (!allowJs && !checkJs) {
7
9
  return [];
8
10
  }
9
11
  const findings = [];
12
+ if (checkJs && !allowJs) {
13
+ findings.push({
14
+ ruleId: ruleId,
15
+ severity: "warn",
16
+ message: `The "checkJs" option is enabled without "allowJs". "checkJs" has no effect unless "allowJs" is also enabled. Consider enabling "allowJs" if you want to type-check JavaScript files, or disable "checkJs" if you only want to type-check TypeScript files.`,
17
+ category: "explanation"
18
+ });
19
+ }
10
20
  findings.push({
11
21
  ruleId: ruleId,
12
22
  severity: "info",
@@ -1 +1 @@
1
- {"version":3,"file":"allowJsCheck.js","sourceRoot":"","sources":["../../src/rules/allowJsCheck.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IACV,OAAO,CAAC,MAAuB;QAE3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,QAAQ,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,4JAA4J;YACrK,QAAQ,EAAE,aAAa;SAC1B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"allowJsCheck.js","sourceRoot":"","sources":["../../src/rules/allowJsCheck.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IACV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QAExC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,4PAA4P;gBACrQ,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,4JAA4J;YACrK,QAAQ,EAAE,aAAa;SAC1B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const allowSyntheticDefaultImportsRule: Rule;
@@ -0,0 +1,18 @@
1
+ const ruleId = "ts.allowSyntheticDefaultImports.check";
2
+ export const allowSyntheticDefaultImportsRule = {
3
+ id: ruleId,
4
+ analyze(config) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const findings = [];
7
+ if (compilerOptions.allowSyntheticDefaultImports && compilerOptions.esModuleInterop) {
8
+ findings.push({
9
+ ruleId: ruleId,
10
+ severity: "info",
11
+ message: `"allowSyntheticDefaultImports" is unnecessary "esModuleInterop" already enables this behavior.`,
12
+ category: "redundant"
13
+ });
14
+ }
15
+ return findings;
16
+ }
17
+ };
18
+ //# sourceMappingURL=allowSyntheticDefaultImportsCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowSyntheticDefaultImportsCheck.js","sourceRoot":"","sources":["../../src/rules/allowSyntheticDefaultImportsCheck.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,uCAAuC,CAAC;AAEvD,MAAM,CAAC,MAAM,gCAAgC,GAAS;IAClD,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,eAAe,CAAC,4BAA4B,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;YAClF,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,gGAAgG;gBACzG,QAAQ,EAAE,WAAW;aACxB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const declarationNoEmitCheckRule: Rule;
@@ -0,0 +1,18 @@
1
+ const ruleId = "ts.declarationNoEmit.check";
2
+ export const declarationNoEmitCheckRule = {
3
+ id: ruleId,
4
+ analyze(config) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const findings = [];
7
+ if (compilerOptions.declaration && compilerOptions.noEmit) {
8
+ findings.push({
9
+ ruleId: ruleId,
10
+ severity: "warn",
11
+ message: `The "declaration" option is enabled, but "noEmit" is also set. No declaration files will be emitted, so "declaration" has no effect. Consider removing one of these options.`,
12
+ category: "redundant"
13
+ });
14
+ }
15
+ return findings;
16
+ }
17
+ };
18
+ //# sourceMappingURL=declarationNoEmit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarationNoEmit.js","sourceRoot":"","sources":["../../src/rules/declarationNoEmit.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,4BAA4B,CAAC;AAE5C,MAAM,CAAC,MAAM,0BAA0B,GAAS;IAC5C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,8KAA8K;gBACvL,QAAQ,EAAE,WAAW;aACxB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -4,8 +4,7 @@ const ruleId = "ts.default.redundant";
4
4
  */
5
5
  const DEFAULTS = {
6
6
  newLine: "lf",
7
- chartset: "utf8",
8
- importsNotUsedAsValues: "remove",
7
+ charset: "utf8",
9
8
  moduleDetection: "auto",
10
9
  reactNamespace: "React",
11
10
  removeComments: false,
@@ -28,7 +27,6 @@ const DEFAULTS = {
28
27
  rewriteRelativeImportExtensions: false,
29
28
  // Interop Constraints
30
29
  esModuleInterop: false,
31
- forceConsistentCasingInFileNames: true,
32
30
  isolatedDeclarations: false,
33
31
  isolatedModules: false,
34
32
  preserveSymlinks: false,
@@ -43,17 +41,6 @@ const DEFAULTS = {
43
41
  noLib: false,
44
42
  target: "es5",
45
43
  };
46
- /*
47
- // defaults to consider?
48
- {
49
- allowJs: false,
50
- declaration: false,
51
- incremental: false,
52
- isolatedModules: false,
53
- "esModuleInterop": false,
54
- "skipLibCheck": false,
55
- }
56
- */
57
44
  function isEqual(a, b) {
58
45
  return JSON.stringify(a) === JSON.stringify(b);
59
46
  }
@@ -61,8 +48,9 @@ export const defaultRedundantRule = {
61
48
  id: ruleId,
62
49
  analyze(config) {
63
50
  const findings = [];
51
+ const compilerOptions = config.compilerOptions;
64
52
  for (const [option, defaultValue] of Object.entries(DEFAULTS)) {
65
- if (option in config && isEqual(config[option], defaultValue)) {
53
+ if (option in compilerOptions && isEqual(compilerOptions[option], defaultValue)) {
66
54
  findings.push({
67
55
  ruleId: ruleId,
68
56
  severity: "info",
@@ -1 +1 @@
1
- {"version":3,"file":"defaultRedundant.js","sourceRoot":"","sources":["../../src/rules/defaultRedundant.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC;;GAEG;AACH,MAAM,QAAQ,GAAoD;IAC9D,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,MAAM;IAChB,sBAAsB,EAAE,QAAQ;IAChC,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,KAAK;IACrB,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,KAAK;IACb,eAAe;IACf,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,oBAAoB;IACpB,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,KAAK;IACzB,MAAM,EAAE,IAAI;IACZ,UAAU;IACV,wBAAwB,EAAE,KAAK;IAC/B,0BAA0B,EAAE,KAAK;IACjC,oBAAoB,EAAE,KAAK;IAC3B,SAAS,EAAE,KAAK;IAChB,4BAA4B,EAAE,KAAK;IACnC,iBAAiB,EAAE,KAAK;IACxB,+BAA+B,EAAE,KAAK;IACtC,sBAAsB;IACtB,eAAe,EAAE,KAAK;IACtB,gCAAgC,EAAE,IAAI;IACtC,oBAAoB,EAAE,KAAK;IAC3B,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB;IAChB,0BAA0B,EAAE,KAAK;IACjC,kBAAkB,EAAE,KAAK;IACzB,iBAAiB,EAAE,KAAK;IACxB,2BAA2B;IAC3B,qBAAqB,EAAE,KAAK;IAC5B,sBAAsB,EAAE,KAAK;IAC7B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;CAChB,CAAC;AAEF;;;;;;;;;;EAUE;AAEF,SAAS,OAAO,CAAC,CAAU,EAAE,CAAU;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACtC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAM;QACV,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,GAAG,MAAM,4CAA4C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,qCAAqC;oBAC/H,QAAQ,EAAE,WAAW;iBACxB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"defaultRedundant.js","sourceRoot":"","sources":["../../src/rules/defaultRedundant.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC;;GAEG;AACH,MAAM,QAAQ,GAAoD;IAC9D,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,MAAM;IACf,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,KAAK;IACrB,SAAS,EAAE,KAAK;IAChB,MAAM,EAAE,KAAK;IACb,eAAe;IACf,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;IAC1B,oBAAoB;IACpB,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,KAAK;IACzB,MAAM,EAAE,IAAI;IACZ,UAAU;IACV,wBAAwB,EAAE,KAAK;IAC/B,0BAA0B,EAAE,KAAK;IACjC,oBAAoB,EAAE,KAAK;IAC3B,SAAS,EAAE,KAAK;IAChB,4BAA4B,EAAE,KAAK;IACnC,iBAAiB,EAAE,KAAK;IACxB,+BAA+B,EAAE,KAAK;IACtC,sBAAsB;IACtB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,KAAK;IAC3B,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,KAAK;IACvB,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB;IAChB,0BAA0B,EAAE,KAAK;IACjC,kBAAkB,EAAE,KAAK;IACzB,iBAAiB,EAAE,KAAK;IACxB,2BAA2B;IAC3B,qBAAqB,EAAE,KAAK;IAC5B,sBAAsB,EAAE,KAAK;IAC7B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;CAChB,CAAC;AAEF,SAAS,OAAO,CAAC,CAAU,EAAE,CAAU;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACtC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAM;QACV,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAE/C,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,IAAI,MAAM,IAAI,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC9E,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,GAAG,MAAM,4CAA4C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,qCAAqC;oBAC/H,QAAQ,EAAE,WAAW;iBACxB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const forceConsistentCasingInFileNamesRule: Rule;
@@ -0,0 +1,18 @@
1
+ const ruleId = "ts.forceConsistentCasingInFileNames.missing";
2
+ export const forceConsistentCasingInFileNamesRule = {
3
+ id: ruleId,
4
+ analyze(config) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const findings = [];
7
+ if (!compilerOptions.forceConsistentCasingInFileNames && !compilerOptions.strict) {
8
+ findings.push({
9
+ ruleId: ruleId,
10
+ severity: "warn",
11
+ message: `"forceConsistentCasingInFileNames" is not enabled (and "strict" is not set). Consider enabling it to catch cross-platform casing issues early.`,
12
+ category: "suggestion"
13
+ });
14
+ }
15
+ return findings;
16
+ }
17
+ };
18
+ //# sourceMappingURL=forceConsistentCasing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forceConsistentCasing.js","sourceRoot":"","sources":["../../src/rules/forceConsistentCasing.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,6CAA6C,CAAC;AAE7D,MAAM,CAAC,MAAM,oCAAoC,GAAS;IACtD,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,CAAC,eAAe,CAAC,gCAAgC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,gJAAgJ;gBACzJ,QAAQ,EAAE,YAAY;aACzB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CAEJ,CAAA"}
@@ -8,3 +8,9 @@ export { allowJsCheckRule } from "./allowJsCheck.js";
8
8
  export { noEmitOutDirCheckRule } from "./noEmitOutDir.js";
9
9
  export { noIncludeOrFilesCheckRule } from "./noIncludeOrFiles.js";
10
10
  export { moduleResolutionMismatchRule } from "./moduleResolutionMismatch.js";
11
+ export { declarationNoEmitCheckRule } from "./declarationNoEmit.js";
12
+ export { verbatimModuleIsolatedModulesRule } from "./verbatimModuleIsolatedModules.js";
13
+ export { verbatimModuleSyntaxCheckRule } from "./moduleVerbatimModuleSyntaxCheck.js";
14
+ export { allowSyntheticDefaultImportsRule } from "./allowSyntheticDefaultImportsCheck.js";
15
+ export { noUncheckedIndexedAccessRule } from "./noUncheckedIndexedAccessCheck.js";
16
+ export { forceConsistentCasingInFileNamesRule } from "./forceConsistentCasing.js";
@@ -8,4 +8,10 @@ export { allowJsCheckRule } from "./allowJsCheck.js";
8
8
  export { noEmitOutDirCheckRule } from "./noEmitOutDir.js";
9
9
  export { noIncludeOrFilesCheckRule } from "./noIncludeOrFiles.js";
10
10
  export { moduleResolutionMismatchRule } from "./moduleResolutionMismatch.js";
11
+ export { declarationNoEmitCheckRule } from "./declarationNoEmit.js";
12
+ export { verbatimModuleIsolatedModulesRule } from "./verbatimModuleIsolatedModules.js";
13
+ export { verbatimModuleSyntaxCheckRule } from "./moduleVerbatimModuleSyntaxCheck.js";
14
+ export { allowSyntheticDefaultImportsRule } from "./allowSyntheticDefaultImportsCheck.js";
15
+ export { noUncheckedIndexedAccessRule } from "./noUncheckedIndexedAccessCheck.js";
16
+ export { forceConsistentCasingInFileNamesRule } from "./forceConsistentCasing.js";
11
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,oCAAoC,EAAE,MAAM,4BAA4B,CAAC"}
@@ -2,12 +2,11 @@ const ruleId = "ts.legacy.option";
2
2
  const legacyOptions = [
3
3
  "charset",
4
4
  "out",
5
- "noUncheckedIndexedAccess",
6
5
  "importsNotUsedAsValues",
7
6
  "keyofStringsOnly",
8
7
  "noStrictGenericChecks",
9
8
  "noImplicitUseStrict",
10
- "preserveSymlinks",
9
+ "preserveValueImports",
11
10
  "suppressExcessPropertyErrors",
12
11
  "suppressImplicitAnyIndexErrors",
13
12
  "skipDefaultLibCheck",
@@ -15,8 +14,9 @@ const legacyOptions = [
15
14
  export const legacyOptionRule = {
16
15
  id: ruleId,
17
16
  analyze(config) {
17
+ const compilerOptions = config.compilerOptions;
18
18
  return legacyOptions
19
- .filter(opt => opt in config)
19
+ .filter(opt => opt in compilerOptions)
20
20
  .map(opt => ({
21
21
  ruleId: ruleId,
22
22
  severity: "warn",
@@ -1 +1 @@
1
- {"version":3,"file":"legacyOption.js","sourceRoot":"","sources":["../../src/rules/legacyOption.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,aAAa,GAA8B;IAC7C,SAAS;IACT,KAAK;IACL,0BAA0B;IAC1B,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,8BAA8B;IAC9B,gCAAgC;IAChC,qBAAqB;CACxB,CAAC;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAM;QACV,OAAO,aAAa;aACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,MAAM,CAAC;aAC5B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,GAAG,uDAAuD,iBAAiB,CAAC,GAAG,CAAC,EAAE;YAC9F,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC,CAAC;IACZ,CAAC;CACJ,CAAC;AAEF,SAAS,iBAAiB,CAAC,GAA0B;IACjD,QAAQ,GAAG,EAAE,CAAC;QACV,KAAK,KAAK,CAAC,CAAC,OAAO,0BAA0B,CAAC;QAC9C,KAAK,8BAA8B,CAAC;QACpC,KAAK,gCAAgC;YACjC,OAAO,8CAA8C,CAAC;QAC1D,KAAK,wBAAwB;YACzB,OAAO,gDAAgD,CAAC;QAC5D,KAAK,qBAAqB;YACtB,OAAO,+BAA+B,CAAC;QAC3C;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"legacyOption.js","sourceRoot":"","sources":["../../src/rules/legacyOption.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,aAAa,GAA8B;IAC7C,SAAS;IACT,KAAK;IACL,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,qBAAqB;IACrB,sBAAsB;IACtB,8BAA8B;IAC9B,gCAAgC;IAChC,qBAAqB;CACxB,CAAC;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC/C,OAAO,aAAa;aACf,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,eAAe,CAAC;aACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,GAAG,uDAAuD,iBAAiB,CAAC,GAAG,CAAC,EAAE;YAC9F,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC,CAAC;IACZ,CAAC;CACJ,CAAC;AAEF,SAAS,iBAAiB,CAAC,GAA0B;IACjD,QAAQ,GAAG,EAAE,CAAC;QACV,KAAK,KAAK,CAAC,CAAC,OAAO,0BAA0B,CAAC;QAC9C,KAAK,8BAA8B,CAAC;QACpC,KAAK,gCAAgC;YACjC,OAAO,8CAA8C,CAAC;QAC1D,KAAK,wBAAwB;YACzB,OAAO,gDAAgD,CAAC;QAC5D,KAAK,qBAAqB;YACtB,OAAO,+BAA+B,CAAC;QAC3C;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC"}
@@ -3,7 +3,7 @@ const ruleId = "ts.module-resolution.mismatch";
3
3
  export const moduleResolutionMismatchRule = {
4
4
  id: ruleId,
5
5
  analyze(config) {
6
- const options = config ?? {};
6
+ const options = config.compilerOptions ?? {};
7
7
  const module = options.module;
8
8
  const moduleResolution = options.moduleResolution;
9
9
  if (!module)
@@ -20,7 +20,7 @@ export const moduleResolutionMismatchRule = {
20
20
  });
21
21
  return;
22
22
  }
23
- if (module === 199 && moduleResolution !== 99 || module === 100 && moduleResolution !== 3) {
23
+ if (module === ModuleKind.NodeNext && moduleResolution !== ModuleResolutionKind.NodeNext || module === ModuleKind.Node16 && moduleResolution !== ModuleResolutionKind.Node16) {
24
24
  findings.push({
25
25
  ruleId: ruleId,
26
26
  category: "conflict",
@@ -1 +1 @@
1
- {"version":3,"file":"moduleResolutionMismatch.js","sourceRoot":"","sources":["../../src/rules/moduleResolutionMismatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAwB,MAAM,YAAY,CAAC;AAGpF,MAAM,MAAM,GAAG,+BAA+B,CAAC;AAE/C,MAAM,CAAC,MAAM,4BAA4B,GAAS;IAC9C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAElD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,SAAS,MAAM,CAAC,QAAgB;YAC5B,MAAM,UAAU,GAAG,UAAU,CAAC,MAAoB,CAAC,CAAC;YAEpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,cAAc,UAAU,4EAA4E,QAAQ,8DAA8D;iBACtL,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,IAAI,MAAM,KAAK,GAAG,IAAI,gBAAgB,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;gBACxF,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,cAAc,UAAU,8BAA8B,oBAAoB,CAAC,gBAAgB,CAAC,kCAAkC,QAAQ,iFAAiF;iBACnO,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,oBAAoB;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,uKAAuK;iBACnL,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"moduleResolutionMismatch.js","sourceRoot":"","sources":["../../src/rules/moduleResolutionMismatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,MAAM,GAAG,+BAA+B,CAAC;AAE/C,MAAM,CAAC,MAAM,4BAA4B,GAAS;IAC9C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAElD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,SAAS,MAAM,CAAC,QAAgB;YAC5B,MAAM,UAAU,GAAG,UAAU,CAAC,MAAoB,CAAC,CAAC;YAEpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,cAAc,UAAU,4EAA4E,QAAQ,8DAA8D;iBACtL,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YAED,IAAI,MAAM,KAAK,UAAU,CAAC,QAAQ,IAAI,gBAAgB,KAAK,oBAAoB,CAAC,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,gBAAgB,KAAK,oBAAoB,CAAC,MAAM,EAAE,CAAC;gBAC3K,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,UAAU;oBACpB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,cAAc,UAAU,8BAA8B,oBAAoB,CAAC,gBAAgB,CAAC,kCAAkC,QAAQ,iFAAiF;iBACnO,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,oBAAoB;YACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC;oBACV,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,uKAAuK;iBACnL,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -1,13 +1,15 @@
1
+ import { ModuleKind } from "typescript";
1
2
  const ruleId = "ts.module.check";
2
3
  export const moduleKindCheckRule = {
3
4
  id: ruleId,
4
5
  analyze(config) {
5
- const module = config.module;
6
+ const compilerOptions = config.compilerOptions ?? {};
7
+ const module = compilerOptions.module;
6
8
  if (!module) {
7
9
  return [];
8
10
  }
9
- const isCommonJS = module === 1;
10
- const isESM = module > 4;
11
+ const isCommonJS = module === ModuleKind.CommonJS;
12
+ const isESM = module >= ModuleKind.ES2015;
11
13
  const findings = [];
12
14
  if (isCommonJS) {
13
15
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"moduleTypeCheck.js","sourceRoot":"","sources":["../../src/rules/moduleTypeCheck.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACrC,EAAE,EAAE,MAAM;IACV,OAAO,CAAC,MAAuB;QAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,UAAU,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,yIAAyI;gBAClJ,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"moduleTypeCheck.js","sourceRoot":"","sources":["../../src/rules/moduleTypeCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,MAAM,MAAM,GAAG,iBAAiB,CAAC;AAEjC,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACrC,EAAE,EAAE,MAAM;IACV,OAAO,CAAC,MAAuB;QAE3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,UAAU,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,yIAAyI;gBAClJ,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const verbatimModuleSyntaxCheckRule: Rule;
@@ -0,0 +1,19 @@
1
+ import { ModuleKind } from "typescript";
2
+ const ruleId = "ts.verbatimModuleSyntax.check";
3
+ export const verbatimModuleSyntaxCheckRule = {
4
+ id: ruleId,
5
+ analyze(config) {
6
+ const compilerOptions = config.compilerOptions ?? {};
7
+ const findings = [];
8
+ if (compilerOptions.module && [ModuleKind.NodeNext, ModuleKind.Node16, ModuleKind.ESNext].includes(compilerOptions.module) && !compilerOptions.verbatimModuleSyntax) {
9
+ findings.push({
10
+ ruleId: ruleId,
11
+ severity: "warn",
12
+ message: `The "verbatimModuleSyntax" is not enabled, but the module kind is set to a value that requires it. Modern ESM projects benefit from preserving import/export syntax. This avoids TypeScript rewriting imports unexpectedly. Consider enabling "verbatimModuleSyntax": true.`,
13
+ category: "suggestion"
14
+ });
15
+ }
16
+ return findings;
17
+ }
18
+ };
19
+ //# sourceMappingURL=moduleVerbatimModuleSyntaxCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleVerbatimModuleSyntaxCheck.js","sourceRoot":"","sources":["../../src/rules/moduleVerbatimModuleSyntaxCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,MAAM,MAAM,GAAG,+BAA+B,CAAC;AAE/C,MAAM,CAAC,MAAM,6BAA6B,GAAS;IAC/C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;YAClK,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,6QAA6Q;gBACtR,QAAQ,EAAE,YAAY;aACzB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -2,8 +2,9 @@ const ruleId = "ts.noEmitOutDir.check";
2
2
  export const noEmitOutDirCheckRule = {
3
3
  id: ruleId,
4
4
  analyze(config) {
5
- const noEmit = config.noEmit;
6
- const outDir = config.outDir;
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const noEmit = compilerOptions.noEmit;
7
+ const outDir = compilerOptions.outDir;
7
8
  const findings = [];
8
9
  if (noEmit && outDir) {
9
10
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"noEmitOutDir.js","sourceRoot":"","sources":["../../src/rules/noEmitOutDir.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,uBAAuB,CAAC;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACvC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE7B,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sJAAsJ;gBAC/J,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"noEmitOutDir.js","sourceRoot":"","sources":["../../src/rules/noEmitOutDir.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,uBAAuB,CAAC;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACvC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAErD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QACtC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;QAEtC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,sJAAsJ;gBAC/J,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -2,9 +2,10 @@ const ruleId = "ts.noIncludeOrFiles.check";
2
2
  export const noIncludeOrFilesCheckRule = {
3
3
  id: ruleId,
4
4
  analyze(config) {
5
- const include = config.include;
6
- const files = config.files;
7
- const exclude = config.exclude;
5
+ const rawConfig = config.rawConfig ?? {};
6
+ const include = rawConfig.include;
7
+ const files = rawConfig.files;
8
+ const exclude = rawConfig.exclude;
8
9
  const findings = [];
9
10
  if (!include && !files && !exclude) {
10
11
  findings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"noIncludeOrFiles.js","sourceRoot":"","sources":["../../src/rules/noIncludeOrFiles.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAE3C,MAAM,CAAC,MAAM,yBAAyB,GAAS;IAC3C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,wJAAwJ;gBACjK,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"noIncludeOrFiles.js","sourceRoot":"","sources":["../../src/rules/noIncludeOrFiles.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,2BAA2B,CAAC;AAE3C,MAAM,CAAC,MAAM,yBAAyB,GAAS;IAC3C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAElC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,wJAAwJ;gBACjK,QAAQ,EAAE,aAAa;aAC1B,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const noUncheckedIndexedAccessRule: Rule;
@@ -0,0 +1,18 @@
1
+ const ruleId = "ts.noUncheckedIndexedAccess.check";
2
+ export const noUncheckedIndexedAccessRule = {
3
+ id: ruleId,
4
+ analyze(config) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const findings = [];
7
+ if (!compilerOptions.noUncheckedIndexedAccess && compilerOptions.strict) {
8
+ findings.push({
9
+ ruleId: ruleId,
10
+ severity: "info",
11
+ message: `"noUncheckedIndexedAccess" is recommended when "strict" mode is enabled.`,
12
+ category: "suggestion"
13
+ });
14
+ }
15
+ return findings;
16
+ }
17
+ };
18
+ //# sourceMappingURL=noUncheckedIndexedAccessCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noUncheckedIndexedAccessCheck.js","sourceRoot":"","sources":["../../src/rules/noUncheckedIndexedAccessCheck.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,mCAAmC,CAAC;AAEnD,MAAM,CAAC,MAAM,4BAA4B,GAAS;IAC9C,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,CAAC,eAAe,CAAC,wBAAwB,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,0EAA0E;gBACnF,QAAQ,EAAE,YAAY;aACzB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- import { Rule } from "../types.js";
1
+ import type { Rule } from "../types.js";
2
2
  export declare const skipLibCheckRule: Rule;
@@ -2,7 +2,8 @@ const ruleId = "ts.skipLibCheck.explain";
2
2
  export const skipLibCheckRule = {
3
3
  id: ruleId,
4
4
  analyze(config) {
5
- if (!("skipLibCheck" in config))
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ if (!("skipLibCheck" in compilerOptions))
6
7
  return [];
7
8
  return [
8
9
  {
@@ -1 +1 @@
1
- {"version":3,"file":"skipLibCheckExplain.js","sourceRoot":"","sources":["../../src/rules/skipLibCheckExplain.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAM;QACV,IAAI,CAAC,CAAC,cAAc,IAAI,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3C,OAAO;YACH;gBACI,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,uLAAuL;gBAChM,QAAQ,EAAE,aAAa;aAC1B;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"skipLibCheckExplain.js","sourceRoot":"","sources":["../../src/rules/skipLibCheckExplain.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAS;IAClC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,CAAC,cAAc,IAAI,eAAe,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpD,OAAO;YACH;gBACI,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,uLAAuL;gBAChM,QAAQ,EAAE,aAAa;aAC1B;SACJ,CAAC;IACN,CAAC;CACJ,CAAC"}
@@ -1,2 +1,2 @@
1
- import { Rule } from "../types.js";
1
+ import type { Rule } from "../types.js";
2
2
  export declare const strictRedundantRule: Rule;
@@ -2,7 +2,8 @@ const ruleId = "ts.strict.redundant";
2
2
  export const strictRedundantRule = {
3
3
  id: ruleId,
4
4
  analyze(config) {
5
- if (!config.strict)
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ if (!compilerOptions.strict)
6
7
  return [];
7
8
  const setByStrictOptions = [
8
9
  "alwaysStrict",
@@ -16,7 +17,7 @@ export const strictRedundantRule = {
16
17
  "useUnknownInCatchVariables"
17
18
  ];
18
19
  return setByStrictOptions
19
- .filter(opt => config[opt])
20
+ .filter(opt => compilerOptions[opt])
20
21
  .map(opt => ({
21
22
  ruleId: ruleId,
22
23
  severity: "info",
@@ -1 +1 @@
1
- {"version":3,"file":"strictRedundant.js","sourceRoot":"","sources":["../../src/rules/strictRedundant.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACrC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAM;QACV,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,kBAAkB,GAA8B;YAClD,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,qBAAqB;YACrB,6BAA6B;YAC7B,qBAAqB;YACrB,kBAAkB;YAClB,8BAA8B;YAC9B,4BAA4B;SAC/B,CAAC;QAEF,OAAO,kBAAkB;aACpB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,GAAG,8CAA8C;YAC7D,QAAQ,EAAE,WAAW;SACxB,CAAC,CAAC,CAAC;IACZ,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"strictRedundant.js","sourceRoot":"","sources":["../../src/rules/strictRedundant.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,GAAG,qBAAqB,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACrC,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAErD,IAAI,CAAC,eAAe,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvC,MAAM,kBAAkB,GAA8B;YAClD,cAAc;YACd,eAAe;YACf,gBAAgB;YAChB,qBAAqB;YACrB,6BAA6B;YAC7B,qBAAqB;YACrB,kBAAkB;YAClB,8BAA8B;YAC9B,4BAA4B;SAC/B,CAAC;QAEF,OAAO,kBAAkB;aACpB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;aACnC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACT,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,GAAG,GAAG,8CAA8C;YAC7D,QAAQ,EAAE,WAAW;SACxB,CAAC,CAAC,CAAC;IACZ,CAAC;CACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { ScriptTarget } from "typescript";
1
2
  const ruleId = "ts.target-lib.conflict";
2
3
  const TARGET_ORDER = {
3
4
  "es3": 0,
@@ -48,13 +49,13 @@ function getHighestLib(libVersions) {
48
49
  export const targetLibConflictRule = {
49
50
  id: ruleId,
50
51
  analyze(config) {
51
- const options = config ?? {};
52
+ const options = config.compilerOptions ?? {};
52
53
  const target = options.target;
53
54
  const libs = options.lib;
54
55
  if (!target || !libs) {
55
56
  return [];
56
57
  }
57
- const targetOrder = Number(target);
58
+ const targetOrder = getTargetIndex(ScriptTarget[target]);
58
59
  const libVersions = extractLibVersions(libs);
59
60
  const highestLib = getHighestLib(libVersions);
60
61
  if (!highestLib) {
@@ -1 +1 @@
1
- {"version":3,"file":"targetLibConflict.js","sourceRoot":"","sources":["../../src/rules/targetLibConflict.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"targetLibConflict.js","sourceRoot":"","sources":["../../src/rules/targetLibConflict.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Rule } from "../types.js";
2
+ export declare const verbatimModuleIsolatedModulesRule: Rule;
@@ -0,0 +1,18 @@
1
+ const ruleId = "ts.verbatimModuleIsolatedModules.check";
2
+ export const verbatimModuleIsolatedModulesRule = {
3
+ id: ruleId,
4
+ analyze(config) {
5
+ const compilerOptions = config.compilerOptions ?? {};
6
+ const findings = [];
7
+ if (compilerOptions.verbatimModuleSyntax && compilerOptions.isolatedModules) {
8
+ findings.push({
9
+ ruleId: ruleId,
10
+ severity: "info",
11
+ message: `"verbatimModuleSyntax" already implies "isolatedModules". Setting both options is redundant. Consider removing one of these options for cleaner configuration.`,
12
+ category: "redundant"
13
+ });
14
+ }
15
+ return findings;
16
+ }
17
+ };
18
+ //# sourceMappingURL=verbatimModuleIsolatedModules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbatimModuleIsolatedModules.js","sourceRoot":"","sources":["../../src/rules/verbatimModuleIsolatedModules.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,wCAAwC,CAAC;AAExD,MAAM,CAAC,MAAM,iCAAiC,GAAS;IACnD,EAAE,EAAE,MAAM;IAEV,OAAO,CAAC,MAAuB;QAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,IAAI,eAAe,CAAC,oBAAoB,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;YAC1E,QAAQ,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,gKAAgK;gBACzK,QAAQ,EAAE,WAAW;aACxB,CAAC,CAAC;QACP,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,13 +1,22 @@
1
1
  import type { CompilerOptions } from "typescript";
2
2
  export type Severity = "info" | "warn" | "error";
3
- export type Category = "redundant" | "explanation" | "legacy" | "conflict" | "suggestion";
3
+ export type Category = "conflict" | "legacy" | "redundant" | "suggestion" | "explanation";
4
4
  export interface Finding {
5
5
  ruleId: string;
6
6
  message: string;
7
7
  severity: Severity;
8
8
  category: Category;
9
9
  }
10
+ export interface AnalysisContext {
11
+ compilerOptions: CompilerOptions;
12
+ rawConfig: {
13
+ include?: string[];
14
+ exclude?: string[];
15
+ files?: string[];
16
+ extends?: string;
17
+ };
18
+ }
10
19
  export interface Rule {
11
20
  id: string;
12
- analyze(config: CompilerOptions): Finding[];
21
+ analyze(config: AnalysisContext): Finding[];
13
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-reconf",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Understand and simplify (re-conf) your tsconfig.json",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -36,10 +36,10 @@
36
36
  "author": "rockcoder",
37
37
  "license": "MIT",
38
38
  "dependencies": {
39
- "typescript": "^6.0.3"
39
+ "typescript": "6.0.3"
40
40
  },
41
41
  "devDependencies": {
42
- "@types/node": "^25.6.0",
43
- "tsx": "^4.21.0"
42
+ "@types/node": "25.6.0",
43
+ "tsx": "4.21.0"
44
44
  }
45
45
  }