sourceverity 1.0.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +188 -0
  3. package/bin/sourceverity.js +12 -0
  4. package/dist/analysis/controlFlow.d.ts +10 -0
  5. package/dist/analysis/controlFlow.d.ts.map +1 -0
  6. package/dist/analysis/controlFlow.js +278 -0
  7. package/dist/analysis/controlFlow.js.map +1 -0
  8. package/dist/analysis/frameworks.d.ts +11 -0
  9. package/dist/analysis/frameworks.d.ts.map +1 -0
  10. package/dist/analysis/frameworks.js +189 -0
  11. package/dist/analysis/frameworks.js.map +1 -0
  12. package/dist/analysis/functions.d.ts +27 -0
  13. package/dist/analysis/functions.d.ts.map +1 -0
  14. package/dist/analysis/functions.js +628 -0
  15. package/dist/analysis/functions.js.map +1 -0
  16. package/dist/analysis/promiseFlow.d.ts +44 -0
  17. package/dist/analysis/promiseFlow.d.ts.map +1 -0
  18. package/dist/analysis/promiseFlow.js +261 -0
  19. package/dist/analysis/promiseFlow.js.map +1 -0
  20. package/dist/analysis/values.d.ts +24 -0
  21. package/dist/analysis/values.d.ts.map +1 -0
  22. package/dist/analysis/values.js +189 -0
  23. package/dist/analysis/values.js.map +1 -0
  24. package/dist/baseline/manager.d.ts +20 -0
  25. package/dist/baseline/manager.d.ts.map +1 -0
  26. package/dist/baseline/manager.js +77 -0
  27. package/dist/baseline/manager.js.map +1 -0
  28. package/dist/baseline/types.d.ts +20 -0
  29. package/dist/baseline/types.d.ts.map +1 -0
  30. package/dist/baseline/types.js +2 -0
  31. package/dist/baseline/types.js.map +1 -0
  32. package/dist/cli/args.d.ts +26 -0
  33. package/dist/cli/args.d.ts.map +1 -0
  34. package/dist/cli/args.js +126 -0
  35. package/dist/cli/args.js.map +1 -0
  36. package/dist/cli/exitCodes.d.ts +8 -0
  37. package/dist/cli/exitCodes.d.ts.map +1 -0
  38. package/dist/cli/exitCodes.js +7 -0
  39. package/dist/cli/exitCodes.js.map +1 -0
  40. package/dist/cli/help.d.ts +5 -0
  41. package/dist/cli/help.d.ts.map +1 -0
  42. package/dist/cli/help.js +46 -0
  43. package/dist/cli/help.js.map +1 -0
  44. package/dist/cli/main.d.ts +7 -0
  45. package/dist/cli/main.d.ts.map +1 -0
  46. package/dist/cli/main.js +156 -0
  47. package/dist/cli/main.js.map +1 -0
  48. package/dist/core/fingerprint.d.ts +18 -0
  49. package/dist/core/fingerprint.d.ts.map +1 -0
  50. package/dist/core/fingerprint.js +26 -0
  51. package/dist/core/fingerprint.js.map +1 -0
  52. package/dist/core/paths.d.ts +10 -0
  53. package/dist/core/paths.d.ts.map +1 -0
  54. package/dist/core/paths.js +30 -0
  55. package/dist/core/paths.js.map +1 -0
  56. package/dist/core/suppressions.d.ts +24 -0
  57. package/dist/core/suppressions.d.ts.map +1 -0
  58. package/dist/core/suppressions.js +100 -0
  59. package/dist/core/suppressions.js.map +1 -0
  60. package/dist/core/terminal.d.ts +18 -0
  61. package/dist/core/terminal.d.ts.map +1 -0
  62. package/dist/core/terminal.js +39 -0
  63. package/dist/core/terminal.js.map +1 -0
  64. package/dist/core/types.d.ts +119 -0
  65. package/dist/core/types.d.ts.map +1 -0
  66. package/dist/core/types.js +2 -0
  67. package/dist/core/types.js.map +1 -0
  68. package/dist/engine/context.d.ts +16 -0
  69. package/dist/engine/context.d.ts.map +1 -0
  70. package/dist/engine/context.js +57 -0
  71. package/dist/engine/context.js.map +1 -0
  72. package/dist/engine/registry.d.ts +26 -0
  73. package/dist/engine/registry.d.ts.map +1 -0
  74. package/dist/engine/registry.js +38 -0
  75. package/dist/engine/registry.js.map +1 -0
  76. package/dist/engine/runner.d.ts +14 -0
  77. package/dist/engine/runner.d.ts.map +1 -0
  78. package/dist/engine/runner.js +166 -0
  79. package/dist/engine/runner.js.map +1 -0
  80. package/dist/engine/symbols.d.ts +46 -0
  81. package/dist/engine/symbols.d.ts.map +1 -0
  82. package/dist/engine/symbols.js +278 -0
  83. package/dist/engine/symbols.js.map +1 -0
  84. package/dist/index.d.ts +20 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +32 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/reporters/agent.d.ts +45 -0
  89. package/dist/reporters/agent.d.ts.map +1 -0
  90. package/dist/reporters/agent.js +40 -0
  91. package/dist/reporters/agent.js.map +1 -0
  92. package/dist/reporters/json.d.ts +6 -0
  93. package/dist/reporters/json.d.ts.map +1 -0
  94. package/dist/reporters/json.js +7 -0
  95. package/dist/reporters/json.js.map +1 -0
  96. package/dist/reporters/sarif.d.ts +6 -0
  97. package/dist/reporters/sarif.d.ts.map +1 -0
  98. package/dist/reporters/sarif.js +60 -0
  99. package/dist/reporters/sarif.js.map +1 -0
  100. package/dist/reporters/terminal.d.ts +10 -0
  101. package/dist/reporters/terminal.d.ts.map +1 -0
  102. package/dist/reporters/terminal.js +105 -0
  103. package/dist/reporters/terminal.js.map +1 -0
  104. package/dist/repository/detector.d.ts +6 -0
  105. package/dist/repository/detector.d.ts.map +1 -0
  106. package/dist/repository/detector.js +231 -0
  107. package/dist/repository/detector.js.map +1 -0
  108. package/dist/repository/fileFilter.d.ts +10 -0
  109. package/dist/repository/fileFilter.d.ts.map +1 -0
  110. package/dist/repository/fileFilter.js +78 -0
  111. package/dist/repository/fileFilter.js.map +1 -0
  112. package/dist/repository/git.d.ts +7 -0
  113. package/dist/repository/git.d.ts.map +1 -0
  114. package/dist/repository/git.js +53 -0
  115. package/dist/repository/git.js.map +1 -0
  116. package/dist/repository/tsLoader.d.ts +15 -0
  117. package/dist/repository/tsLoader.d.ts.map +1 -0
  118. package/dist/repository/tsLoader.js +27 -0
  119. package/dist/repository/tsLoader.js.map +1 -0
  120. package/dist/repository/types.d.ts +38 -0
  121. package/dist/repository/types.d.ts.map +1 -0
  122. package/dist/repository/types.js +2 -0
  123. package/dist/repository/types.js.map +1 -0
  124. package/dist/rules/async/asyncForeach.d.ts +3 -0
  125. package/dist/rules/async/asyncForeach.d.ts.map +1 -0
  126. package/dist/rules/async/asyncForeach.js +76 -0
  127. package/dist/rules/async/asyncForeach.js.map +1 -0
  128. package/dist/rules/async/floatingPromise.d.ts +3 -0
  129. package/dist/rules/async/floatingPromise.d.ts.map +1 -0
  130. package/dist/rules/async/floatingPromise.js +359 -0
  131. package/dist/rules/async/floatingPromise.js.map +1 -0
  132. package/dist/rules/browser/eventListenerCleanup.d.ts +3 -0
  133. package/dist/rules/browser/eventListenerCleanup.d.ts.map +1 -0
  134. package/dist/rules/browser/eventListenerCleanup.js +378 -0
  135. package/dist/rules/browser/eventListenerCleanup.js.map +1 -0
  136. package/dist/rules/browser/observerCleanup.d.ts +3 -0
  137. package/dist/rules/browser/observerCleanup.d.ts.map +1 -0
  138. package/dist/rules/browser/observerCleanup.js +184 -0
  139. package/dist/rules/browser/observerCleanup.js.map +1 -0
  140. package/dist/rules/browser/timerCleanup.d.ts +3 -0
  141. package/dist/rules/browser/timerCleanup.d.ts.map +1 -0
  142. package/dist/rules/browser/timerCleanup.js +115 -0
  143. package/dist/rules/browser/timerCleanup.js.map +1 -0
  144. package/dist/rules/index.d.ts +19 -0
  145. package/dist/rules/index.d.ts.map +1 -0
  146. package/dist/rules/index.js +41 -0
  147. package/dist/rules/index.js.map +1 -0
  148. package/dist/rules/network/fetchStatusUnchecked.d.ts +3 -0
  149. package/dist/rules/network/fetchStatusUnchecked.d.ts.map +1 -0
  150. package/dist/rules/network/fetchStatusUnchecked.js +96 -0
  151. package/dist/rules/network/fetchStatusUnchecked.js.map +1 -0
  152. package/dist/rules/react/asyncEffectCallback.d.ts +3 -0
  153. package/dist/rules/react/asyncEffectCallback.d.ts.map +1 -0
  154. package/dist/rules/react/asyncEffectCallback.js +62 -0
  155. package/dist/rules/react/asyncEffectCallback.js.map +1 -0
  156. package/dist/rules/react/derivedStateEffect.d.ts +3 -0
  157. package/dist/rules/react/derivedStateEffect.d.ts.map +1 -0
  158. package/dist/rules/react/derivedStateEffect.js +172 -0
  159. package/dist/rules/react/derivedStateEffect.js.map +1 -0
  160. package/dist/rules/react/missingEffectCleanup.d.ts +3 -0
  161. package/dist/rules/react/missingEffectCleanup.d.ts.map +1 -0
  162. package/dist/rules/react/missingEffectCleanup.js +86 -0
  163. package/dist/rules/react/missingEffectCleanup.js.map +1 -0
  164. package/dist/rules/typescript/nonNullAssertionRisk.d.ts +3 -0
  165. package/dist/rules/typescript/nonNullAssertionRisk.d.ts.map +1 -0
  166. package/dist/rules/typescript/nonNullAssertionRisk.js +65 -0
  167. package/dist/rules/typescript/nonNullAssertionRisk.js.map +1 -0
  168. package/dist/rules/typescript/uncheckedIndexAccess.d.ts +3 -0
  169. package/dist/rules/typescript/uncheckedIndexAccess.d.ts.map +1 -0
  170. package/dist/rules/typescript/uncheckedIndexAccess.js +79 -0
  171. package/dist/rules/typescript/uncheckedIndexAccess.js.map +1 -0
  172. package/dist/rules/typescript/unsafeUnvalidatedAssertion.d.ts +3 -0
  173. package/dist/rules/typescript/unsafeUnvalidatedAssertion.d.ts.map +1 -0
  174. package/dist/rules/typescript/unsafeUnvalidatedAssertion.js +94 -0
  175. package/dist/rules/typescript/unsafeUnvalidatedAssertion.js.map +1 -0
  176. package/dist/strictness/evaluator.d.ts +28 -0
  177. package/dist/strictness/evaluator.d.ts.map +1 -0
  178. package/dist/strictness/evaluator.js +141 -0
  179. package/dist/strictness/evaluator.js.map +1 -0
  180. package/dist/strictness/matrix.d.ts +8 -0
  181. package/dist/strictness/matrix.d.ts.map +1 -0
  182. package/dist/strictness/matrix.js +63 -0
  183. package/dist/strictness/matrix.js.map +1 -0
  184. package/dist/typescript/programManager.d.ts +18 -0
  185. package/dist/typescript/programManager.d.ts.map +1 -0
  186. package/dist/typescript/programManager.js +46 -0
  187. package/dist/typescript/programManager.js.map +1 -0
  188. package/dist/typescript/projectResolver.d.ts +17 -0
  189. package/dist/typescript/projectResolver.d.ts.map +1 -0
  190. package/dist/typescript/projectResolver.js +75 -0
  191. package/dist/typescript/projectResolver.js.map +1 -0
  192. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/strictness/matrix.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,gBAAgB,GAAwC;IACnE;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,kDAAkD;QAC/D,QAAQ,EAAE,eAAe;KAC1B;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE,8CAA8C;QAC3D,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,wEAAwE;QACrF,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,+DAA+D;QAC5E,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE,4EAA4E;QACzF,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,0DAA0D;QACvE,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,uDAAuD;QACpE,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE,sEAAsE;QACnF,QAAQ,EAAE,cAAc;KACzB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,2DAA2D;QACxE,QAAQ,EAAE,cAAc;KACzB;CACO,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type * as tsType from "typescript";
2
+ import type { TsProjectConfig } from "./projectResolver.js";
3
+ import type { TypeScriptInstance } from "../repository/tsLoader.js";
4
+ export interface ProjectProgram {
5
+ readonly config: TsProjectConfig;
6
+ readonly program: tsType.Program;
7
+ readonly checker: tsType.TypeChecker;
8
+ readonly sourceFiles: readonly tsType.SourceFile[];
9
+ readonly projectRoot: string;
10
+ }
11
+ /**
12
+ * Constructs an initialized TypeScript Program and TypeChecker for each project.
13
+ *
14
+ * Excludes external library declaration files (.d.ts) from the active
15
+ * source file audit list, while retaining them in the Program for full semantic resolution.
16
+ */
17
+ export declare function createProjectPrograms(projects: readonly TsProjectConfig[], tsInst: TypeScriptInstance, fileFilter?: (filePath: string) => boolean): readonly ProjectProgram[];
18
+ //# sourceMappingURL=programManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programManager.d.ts","sourceRoot":"","sources":["../../src/typescript/programManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,CAAC,UAAU,EAAE,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GACzC,SAAS,cAAc,EAAE,CA8C3B"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Constructs an initialized TypeScript Program and TypeChecker for each project.
3
+ *
4
+ * Excludes external library declaration files (.d.ts) from the active
5
+ * source file audit list, while retaining them in the Program for full semantic resolution.
6
+ */
7
+ export function createProjectPrograms(projects, tsInst, fileFilter) {
8
+ const ts = tsInst.ts;
9
+ const result = [];
10
+ for (const proj of projects) {
11
+ // If project has no root files, skip compilation
12
+ if (proj.fileNames.length === 0) {
13
+ continue;
14
+ }
15
+ const host = ts.createCompilerHost(proj.rawCompilerOptions, true);
16
+ const program = ts.createProgram({
17
+ rootNames: proj.fileNames,
18
+ options: proj.rawCompilerOptions,
19
+ host,
20
+ });
21
+ const checker = program.getTypeChecker();
22
+ const allSourceFiles = program.getSourceFiles();
23
+ const activeFiles = [];
24
+ for (const sf of allSourceFiles) {
25
+ // Exclude ambient declaration files (.d.ts) and node_modules from direct rule scanning
26
+ if (sf.isDeclarationFile) {
27
+ continue;
28
+ }
29
+ const filePath = sf.fileName;
30
+ // Filter out files outside the project or excluded by .gitignore
31
+ if (fileFilter && !fileFilter(filePath)) {
32
+ continue;
33
+ }
34
+ activeFiles.push(sf);
35
+ }
36
+ result.push({
37
+ config: proj,
38
+ program,
39
+ checker,
40
+ sourceFiles: activeFiles,
41
+ projectRoot: proj.projectDir,
42
+ });
43
+ }
44
+ return result;
45
+ }
46
+ //# sourceMappingURL=programManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programManager.js","sourceRoot":"","sources":["../../src/typescript/programManager.ts"],"names":[],"mappings":"AAaA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAoC,EACpC,MAA0B,EAC1B,UAA0C;IAE1C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,iDAAiD;QACjD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,kBAAkB;YAChC,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAEhD,MAAM,WAAW,GAAwB,EAAE,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;YAChC,uFAAuF;YACvF,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC7B,iEAAiE;YACjE,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,IAAI;YACZ,OAAO;YACP,OAAO;YACP,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,IAAI,CAAC,UAAU;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type * as tsType from "typescript";
2
+ import type { RepositoryContext } from "../repository/types.js";
3
+ import type { TypeScriptInstance } from "../repository/tsLoader.js";
4
+ export interface TsProjectConfig {
5
+ readonly configPath: string;
6
+ readonly projectDir: string;
7
+ readonly parsedCommandLine: tsType.ParsedCommandLine;
8
+ readonly fileNames: readonly string[];
9
+ readonly rawCompilerOptions: tsType.CompilerOptions;
10
+ readonly references: readonly string[];
11
+ }
12
+ /**
13
+ * Discovers and parses all tsconfig projects across the repository root and packages.
14
+ * Resolves project references and removes duplicates.
15
+ */
16
+ export declare function resolveTsProjects(repo: RepositoryContext, tsInst: TypeScriptInstance): readonly TsProjectConfig[];
17
+ //# sourceMappingURL=projectResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectResolver.d.ts","sourceRoot":"","sources":["../../src/typescript/projectResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,eAAe,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AA+CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,kBAAkB,GACzB,SAAS,eAAe,EAAE,CA4C5B"}
@@ -0,0 +1,75 @@
1
+ import path from "node:path";
2
+ /**
3
+ * Resolves and parses a tsconfig.json using the repository's TypeScript compiler API.
4
+ */
5
+ function parseTsConfigFile(configPath, tsInst) {
6
+ const ts = tsInst.ts;
7
+ const projectDir = path.dirname(path.resolve(configPath));
8
+ const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
9
+ if (configFile.error) {
10
+ return null;
11
+ }
12
+ const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, projectDir, undefined, configPath);
13
+ const references = [];
14
+ if (parsed.projectReferences) {
15
+ for (const ref of parsed.projectReferences) {
16
+ if (ref.path) {
17
+ const resolvedRefPath = path.isAbsolute(ref.path)
18
+ ? ref.path
19
+ : path.resolve(projectDir, ref.path);
20
+ references.push(resolvedRefPath);
21
+ }
22
+ }
23
+ }
24
+ return {
25
+ configPath: path.resolve(configPath),
26
+ projectDir,
27
+ parsedCommandLine: parsed,
28
+ fileNames: parsed.fileNames,
29
+ rawCompilerOptions: parsed.options,
30
+ references,
31
+ };
32
+ }
33
+ /**
34
+ * Discovers and parses all tsconfig projects across the repository root and packages.
35
+ * Resolves project references and removes duplicates.
36
+ */
37
+ export function resolveTsProjects(repo, tsInst) {
38
+ const ts = tsInst.ts;
39
+ const visitedConfigs = new Set();
40
+ const projects = [];
41
+ const candidateDirs = [repo.rootDir];
42
+ for (const pkg of repo.packages) {
43
+ candidateDirs.push(pkg.packageDir);
44
+ }
45
+ const exploreConfig = (configPath) => {
46
+ const normalized = path.resolve(configPath);
47
+ if (visitedConfigs.has(normalized)) {
48
+ return;
49
+ }
50
+ visitedConfigs.add(normalized);
51
+ const project = parseTsConfigFile(normalized, tsInst);
52
+ if (!project) {
53
+ return;
54
+ }
55
+ projects.push(project);
56
+ // Recursively resolve project references
57
+ for (const ref of project.references) {
58
+ let refConfig = ref;
59
+ if (ts.sys.directoryExists(ref)) {
60
+ refConfig = path.join(ref, "tsconfig.json");
61
+ }
62
+ if (ts.sys.fileExists(refConfig)) {
63
+ exploreConfig(refConfig);
64
+ }
65
+ }
66
+ };
67
+ for (const dir of candidateDirs) {
68
+ const tsconfigPath = path.join(dir, "tsconfig.json");
69
+ if (ts.sys.fileExists(tsconfigPath)) {
70
+ exploreConfig(tsconfigPath);
71
+ }
72
+ }
73
+ return projects;
74
+ }
75
+ //# sourceMappingURL=projectResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectResolver.js","sourceRoot":"","sources":["../../src/typescript/projectResolver.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "sourceverity",
3
+ "version": "1.0.0",
4
+ "description": "Repository-aware frontend correctness and quality auditor",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "sourceverity": "./bin/sourceverity.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "bin",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "clean:dist": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
26
+ "clean:tests": "node -e \"fs.rmSync('dist-tests', { recursive: true, force: true })\"",
27
+ "clean": "npm run clean:dist && npm run clean:tests",
28
+ "build": "npm run clean:dist && tsc",
29
+ "build:tests": "npm run clean:tests && tsc -p tsconfig.tests.json",
30
+ "test": "npm run build:tests && node scripts/run-tests.js",
31
+ "test:all": "npm run build:tests && node scripts/run-tests.js",
32
+ "typecheck": "tsc --noEmit -p tsconfig.tests.json",
33
+ "verify": "npm run build && npm run typecheck && npm run test && node scripts/verify-package.js",
34
+ "benchmark": "node scripts/benchmark.js"
35
+ },
36
+ "engines": {
37
+ "node": ">=20.12.0"
38
+ },
39
+ "dependencies": {
40
+ "ignore": "^5.3.2"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^20.12.0",
44
+ "typescript": "^5.8.0"
45
+ },
46
+ "keywords": [
47
+ "auditor",
48
+ "typescript",
49
+ "react",
50
+ "correctness",
51
+ "quality",
52
+ "type-safety",
53
+ "static-analysis"
54
+ ],
55
+ "license": "MIT"
56
+ }