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.
- package/LICENSE +21 -0
- package/README.md +188 -0
- package/bin/sourceverity.js +12 -0
- package/dist/analysis/controlFlow.d.ts +10 -0
- package/dist/analysis/controlFlow.d.ts.map +1 -0
- package/dist/analysis/controlFlow.js +278 -0
- package/dist/analysis/controlFlow.js.map +1 -0
- package/dist/analysis/frameworks.d.ts +11 -0
- package/dist/analysis/frameworks.d.ts.map +1 -0
- package/dist/analysis/frameworks.js +189 -0
- package/dist/analysis/frameworks.js.map +1 -0
- package/dist/analysis/functions.d.ts +27 -0
- package/dist/analysis/functions.d.ts.map +1 -0
- package/dist/analysis/functions.js +628 -0
- package/dist/analysis/functions.js.map +1 -0
- package/dist/analysis/promiseFlow.d.ts +44 -0
- package/dist/analysis/promiseFlow.d.ts.map +1 -0
- package/dist/analysis/promiseFlow.js +261 -0
- package/dist/analysis/promiseFlow.js.map +1 -0
- package/dist/analysis/values.d.ts +24 -0
- package/dist/analysis/values.d.ts.map +1 -0
- package/dist/analysis/values.js +189 -0
- package/dist/analysis/values.js.map +1 -0
- package/dist/baseline/manager.d.ts +20 -0
- package/dist/baseline/manager.d.ts.map +1 -0
- package/dist/baseline/manager.js +77 -0
- package/dist/baseline/manager.js.map +1 -0
- package/dist/baseline/types.d.ts +20 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +2 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/cli/args.d.ts +26 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +126 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/exitCodes.d.ts +8 -0
- package/dist/cli/exitCodes.d.ts.map +1 -0
- package/dist/cli/exitCodes.js +7 -0
- package/dist/cli/exitCodes.js.map +1 -0
- package/dist/cli/help.d.ts +5 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +46 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +156 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/core/fingerprint.d.ts +18 -0
- package/dist/core/fingerprint.d.ts.map +1 -0
- package/dist/core/fingerprint.js +26 -0
- package/dist/core/fingerprint.js.map +1 -0
- package/dist/core/paths.d.ts +10 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +30 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/suppressions.d.ts +24 -0
- package/dist/core/suppressions.d.ts.map +1 -0
- package/dist/core/suppressions.js +100 -0
- package/dist/core/suppressions.js.map +1 -0
- package/dist/core/terminal.d.ts +18 -0
- package/dist/core/terminal.d.ts.map +1 -0
- package/dist/core/terminal.js +39 -0
- package/dist/core/terminal.js.map +1 -0
- package/dist/core/types.d.ts +119 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/engine/context.d.ts +16 -0
- package/dist/engine/context.d.ts.map +1 -0
- package/dist/engine/context.js +57 -0
- package/dist/engine/context.js.map +1 -0
- package/dist/engine/registry.d.ts +26 -0
- package/dist/engine/registry.d.ts.map +1 -0
- package/dist/engine/registry.js +38 -0
- package/dist/engine/registry.js.map +1 -0
- package/dist/engine/runner.d.ts +14 -0
- package/dist/engine/runner.d.ts.map +1 -0
- package/dist/engine/runner.js +166 -0
- package/dist/engine/runner.js.map +1 -0
- package/dist/engine/symbols.d.ts +46 -0
- package/dist/engine/symbols.d.ts.map +1 -0
- package/dist/engine/symbols.js +278 -0
- package/dist/engine/symbols.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/reporters/agent.d.ts +45 -0
- package/dist/reporters/agent.d.ts.map +1 -0
- package/dist/reporters/agent.js +40 -0
- package/dist/reporters/agent.js.map +1 -0
- package/dist/reporters/json.d.ts +6 -0
- package/dist/reporters/json.d.ts.map +1 -0
- package/dist/reporters/json.js +7 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/sarif.d.ts +6 -0
- package/dist/reporters/sarif.d.ts.map +1 -0
- package/dist/reporters/sarif.js +60 -0
- package/dist/reporters/sarif.js.map +1 -0
- package/dist/reporters/terminal.d.ts +10 -0
- package/dist/reporters/terminal.d.ts.map +1 -0
- package/dist/reporters/terminal.js +105 -0
- package/dist/reporters/terminal.js.map +1 -0
- package/dist/repository/detector.d.ts +6 -0
- package/dist/repository/detector.d.ts.map +1 -0
- package/dist/repository/detector.js +231 -0
- package/dist/repository/detector.js.map +1 -0
- package/dist/repository/fileFilter.d.ts +10 -0
- package/dist/repository/fileFilter.d.ts.map +1 -0
- package/dist/repository/fileFilter.js +78 -0
- package/dist/repository/fileFilter.js.map +1 -0
- package/dist/repository/git.d.ts +7 -0
- package/dist/repository/git.d.ts.map +1 -0
- package/dist/repository/git.js +53 -0
- package/dist/repository/git.js.map +1 -0
- package/dist/repository/tsLoader.d.ts +15 -0
- package/dist/repository/tsLoader.d.ts.map +1 -0
- package/dist/repository/tsLoader.js +27 -0
- package/dist/repository/tsLoader.js.map +1 -0
- package/dist/repository/types.d.ts +38 -0
- package/dist/repository/types.d.ts.map +1 -0
- package/dist/repository/types.js +2 -0
- package/dist/repository/types.js.map +1 -0
- package/dist/rules/async/asyncForeach.d.ts +3 -0
- package/dist/rules/async/asyncForeach.d.ts.map +1 -0
- package/dist/rules/async/asyncForeach.js +76 -0
- package/dist/rules/async/asyncForeach.js.map +1 -0
- package/dist/rules/async/floatingPromise.d.ts +3 -0
- package/dist/rules/async/floatingPromise.d.ts.map +1 -0
- package/dist/rules/async/floatingPromise.js +359 -0
- package/dist/rules/async/floatingPromise.js.map +1 -0
- package/dist/rules/browser/eventListenerCleanup.d.ts +3 -0
- package/dist/rules/browser/eventListenerCleanup.d.ts.map +1 -0
- package/dist/rules/browser/eventListenerCleanup.js +378 -0
- package/dist/rules/browser/eventListenerCleanup.js.map +1 -0
- package/dist/rules/browser/observerCleanup.d.ts +3 -0
- package/dist/rules/browser/observerCleanup.d.ts.map +1 -0
- package/dist/rules/browser/observerCleanup.js +184 -0
- package/dist/rules/browser/observerCleanup.js.map +1 -0
- package/dist/rules/browser/timerCleanup.d.ts +3 -0
- package/dist/rules/browser/timerCleanup.d.ts.map +1 -0
- package/dist/rules/browser/timerCleanup.js +115 -0
- package/dist/rules/browser/timerCleanup.js.map +1 -0
- package/dist/rules/index.d.ts +19 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +41 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/network/fetchStatusUnchecked.d.ts +3 -0
- package/dist/rules/network/fetchStatusUnchecked.d.ts.map +1 -0
- package/dist/rules/network/fetchStatusUnchecked.js +96 -0
- package/dist/rules/network/fetchStatusUnchecked.js.map +1 -0
- package/dist/rules/react/asyncEffectCallback.d.ts +3 -0
- package/dist/rules/react/asyncEffectCallback.d.ts.map +1 -0
- package/dist/rules/react/asyncEffectCallback.js +62 -0
- package/dist/rules/react/asyncEffectCallback.js.map +1 -0
- package/dist/rules/react/derivedStateEffect.d.ts +3 -0
- package/dist/rules/react/derivedStateEffect.d.ts.map +1 -0
- package/dist/rules/react/derivedStateEffect.js +172 -0
- package/dist/rules/react/derivedStateEffect.js.map +1 -0
- package/dist/rules/react/missingEffectCleanup.d.ts +3 -0
- package/dist/rules/react/missingEffectCleanup.d.ts.map +1 -0
- package/dist/rules/react/missingEffectCleanup.js +86 -0
- package/dist/rules/react/missingEffectCleanup.js.map +1 -0
- package/dist/rules/typescript/nonNullAssertionRisk.d.ts +3 -0
- package/dist/rules/typescript/nonNullAssertionRisk.d.ts.map +1 -0
- package/dist/rules/typescript/nonNullAssertionRisk.js +65 -0
- package/dist/rules/typescript/nonNullAssertionRisk.js.map +1 -0
- package/dist/rules/typescript/uncheckedIndexAccess.d.ts +3 -0
- package/dist/rules/typescript/uncheckedIndexAccess.d.ts.map +1 -0
- package/dist/rules/typescript/uncheckedIndexAccess.js +79 -0
- package/dist/rules/typescript/uncheckedIndexAccess.js.map +1 -0
- package/dist/rules/typescript/unsafeUnvalidatedAssertion.d.ts +3 -0
- package/dist/rules/typescript/unsafeUnvalidatedAssertion.d.ts.map +1 -0
- package/dist/rules/typescript/unsafeUnvalidatedAssertion.js +94 -0
- package/dist/rules/typescript/unsafeUnvalidatedAssertion.js.map +1 -0
- package/dist/strictness/evaluator.d.ts +28 -0
- package/dist/strictness/evaluator.d.ts.map +1 -0
- package/dist/strictness/evaluator.js +141 -0
- package/dist/strictness/evaluator.js.map +1 -0
- package/dist/strictness/matrix.d.ts +8 -0
- package/dist/strictness/matrix.d.ts.map +1 -0
- package/dist/strictness/matrix.js +63 -0
- package/dist/strictness/matrix.js.map +1 -0
- package/dist/typescript/programManager.d.ts +18 -0
- package/dist/typescript/programManager.d.ts.map +1 -0
- package/dist/typescript/programManager.js +46 -0
- package/dist/typescript/programManager.js.map +1 -0
- package/dist/typescript/projectResolver.d.ts +17 -0
- package/dist/typescript/projectResolver.d.ts.map +1 -0
- package/dist/typescript/projectResolver.js +75 -0
- package/dist/typescript/projectResolver.js.map +1 -0
- 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
|
+
}
|