depvitals 0.3.0 → 0.4.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/README.md +72 -3
- package/dist/cli/entry.js +8 -21
- package/dist/cli/entry.js.map +1 -1
- package/dist/cli/parseCliArgs.d.ts +5 -2
- package/dist/cli/parseCliArgs.d.ts.map +1 -1
- package/dist/cli/parseCliArgs.js +51 -36
- package/dist/cli/parseCliArgs.js.map +1 -1
- package/dist/cli/runCli.d.ts +4 -5
- package/dist/cli/runCli.d.ts.map +1 -1
- package/dist/cli/runCli.js +39 -49
- package/dist/cli/runCli.js.map +1 -1
- package/dist/config/ignoreDependencies.d.ts +2 -0
- package/dist/config/ignoreDependencies.d.ts.map +1 -1
- package/dist/config/ignoreDependencies.js +5 -1
- package/dist/config/ignoreDependencies.js.map +1 -1
- package/dist/config/readProjectConfig.d.ts +5 -0
- package/dist/config/readProjectConfig.d.ts.map +1 -1
- package/dist/config/readProjectConfig.js +24 -10
- package/dist/config/readProjectConfig.js.map +1 -1
- package/dist/core/analyzeProject.d.ts +35 -0
- package/dist/core/analyzeProject.d.ts.map +1 -1
- package/dist/core/analyzeProject.js +161 -25
- package/dist/core/analyzeProject.js.map +1 -1
- package/dist/core/evidence.d.ts +67 -0
- package/dist/core/evidence.d.ts.map +1 -0
- package/dist/core/evidence.js +115 -0
- package/dist/core/evidence.js.map +1 -0
- package/dist/core/scanContext.d.ts +20 -0
- package/dist/core/scanContext.d.ts.map +1 -0
- package/dist/core/scanContext.js +43 -0
- package/dist/core/scanContext.js.map +1 -0
- package/dist/detectors/eslintManifestConfig.d.ts +18 -0
- package/dist/detectors/eslintManifestConfig.d.ts.map +1 -1
- package/dist/detectors/eslintManifestConfig.js +55 -76
- package/dist/detectors/eslintManifestConfig.js.map +1 -1
- package/dist/detectors/eslintRcJsonConfig.d.ts +8 -2
- package/dist/detectors/eslintRcJsonConfig.d.ts.map +1 -1
- package/dist/detectors/eslintRcJsonConfig.js +25 -11
- package/dist/detectors/eslintRcJsonConfig.js.map +1 -1
- package/dist/detectors/jestManifestConfig.d.ts +15 -3
- package/dist/detectors/jestManifestConfig.d.ts.map +1 -1
- package/dist/detectors/jestManifestConfig.js +57 -79
- package/dist/detectors/jestManifestConfig.js.map +1 -1
- package/dist/reporters/jsonReporter.d.ts +39 -0
- package/dist/reporters/jsonReporter.d.ts.map +1 -0
- package/dist/reporters/jsonReporter.js +91 -0
- package/dist/reporters/jsonReporter.js.map +1 -0
- package/dist/reporters/terminalReporter.d.ts +15 -4
- package/dist/reporters/terminalReporter.d.ts.map +1 -1
- package/dist/reporters/terminalReporter.js +64 -4
- package/dist/reporters/terminalReporter.js.map +1 -1
- package/dist/scanner/moduleSpecifiers.d.ts +10 -0
- package/dist/scanner/moduleSpecifiers.d.ts.map +1 -1
- package/dist/scanner/moduleSpecifiers.js +46 -8
- package/dist/scanner/moduleSpecifiers.js.map +1 -1
- package/dist/scanner/projectManifest.d.ts +9 -0
- package/dist/scanner/projectManifest.d.ts.map +1 -1
- package/dist/scanner/projectManifest.js +7 -1
- package/dist/scanner/projectManifest.js.map +1 -1
- package/dist/scanner/scriptUsage.d.ts +13 -0
- package/dist/scanner/scriptUsage.d.ts.map +1 -1
- package/dist/scanner/scriptUsage.js +102 -32
- package/dist/scanner/scriptUsage.js.map +1 -1
- package/dist/scanner/sourceFiles.d.ts +5 -0
- package/dist/scanner/sourceFiles.d.ts.map +1 -1
- package/dist/scanner/sourceFiles.js +7 -0
- package/dist/scanner/sourceFiles.js.map +1 -1
- package/package.json +4 -2
- package/schemas/README.md +47 -0
- package/schemas/examples/README.md +27 -0
- package/schemas/examples/explain-excluded.json +53 -0
- package/schemas/examples/explain-missing.json +65 -0
- package/schemas/examples/explain-node-preload.json +70 -0
- package/schemas/examples/explain-unknown.json +53 -0
- package/schemas/examples/scan-clean.json +40 -0
- package/schemas/examples/scan-findings.json +80 -0
- package/schemas/report-v1.schema.json +376 -0
|
@@ -20,6 +20,10 @@ const CONFIG_FILENAME = 'depvitals.config.json';
|
|
|
20
20
|
* Stable entry checks do not claim adversarial protection against replacement between I/O calls.
|
|
21
21
|
*/
|
|
22
22
|
export async function readRawProjectConfig(projectRoot) {
|
|
23
|
+
return (await readRawConfigWithEntries(projectRoot)).raw;
|
|
24
|
+
}
|
|
25
|
+
/** Preserve canonical-entry checks and errors while sharing this read's entry names. */
|
|
26
|
+
async function readRawConfigWithEntries(projectRoot) {
|
|
23
27
|
const root = resolve(projectRoot);
|
|
24
28
|
const path = join(root, CONFIG_FILENAME);
|
|
25
29
|
await assertReadableRoot(root);
|
|
@@ -32,7 +36,7 @@ export async function readRawProjectConfig(projectRoot) {
|
|
|
32
36
|
throw unreadable(path, error);
|
|
33
37
|
}
|
|
34
38
|
if (!entries.includes(CONFIG_FILENAME))
|
|
35
|
-
return emptyConfig();
|
|
39
|
+
return { raw: emptyConfig(), rootEntries: Object.freeze(entries) };
|
|
36
40
|
let info;
|
|
37
41
|
try {
|
|
38
42
|
info = await lstat(path);
|
|
@@ -67,10 +71,13 @@ export async function readRawProjectConfig(projectRoot) {
|
|
|
67
71
|
}
|
|
68
72
|
}
|
|
69
73
|
const config = parsed;
|
|
70
|
-
return
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
return {
|
|
75
|
+
raw: Object.freeze({
|
|
76
|
+
ignorePaths: readStrings(config['ignorePaths'], 'ignorePaths', path),
|
|
77
|
+
ignoreDependencies: readStrings(config['ignoreDependencies'], 'ignoreDependencies', path),
|
|
78
|
+
}),
|
|
79
|
+
rootEntries: Object.freeze(entries),
|
|
80
|
+
};
|
|
74
81
|
}
|
|
75
82
|
function readStrings(value, field, path) {
|
|
76
83
|
if (value === undefined)
|
|
@@ -96,11 +103,18 @@ function unreadable(path, cause) {
|
|
|
96
103
|
}
|
|
97
104
|
/** Read once, validate all path/name rules, and return no partial configuration on failure. */
|
|
98
105
|
export async function readProjectConfig(projectRoot) {
|
|
99
|
-
|
|
106
|
+
return (await readProjectConfigSnapshot(projectRoot)).config;
|
|
107
|
+
}
|
|
108
|
+
/** Per-scan policy and entry names; not an atomic filesystem snapshot or a global cache. */
|
|
109
|
+
export async function readProjectConfigSnapshot(projectRoot) {
|
|
110
|
+
const { raw, rootEntries } = await readRawConfigWithEntries(projectRoot);
|
|
100
111
|
const path = join(resolve(projectRoot), CONFIG_FILENAME);
|
|
101
|
-
return
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
112
|
+
return {
|
|
113
|
+
config: Object.freeze({
|
|
114
|
+
ignorePaths: normalizeIgnorePaths(raw.ignorePaths, path),
|
|
115
|
+
ignoreDependencies: normalizeIgnoreDependencies(raw.ignoreDependencies, path),
|
|
116
|
+
}),
|
|
117
|
+
rootEntries,
|
|
118
|
+
};
|
|
105
119
|
}
|
|
106
120
|
//# sourceMappingURL=readProjectConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readProjectConfig.js","sourceRoot":"","sources":["../../src/config/readProjectConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAO7D,OAAO,EAAE,kBAAkB,EAA+B,MAAM,yBAAyB,CAAC;AAE1F,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACzC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,wFAAwF;QACxF,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"readProjectConfig.js","sourceRoot":"","sources":["../../src/config/readProjectConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,9 @@
|
|
|
46
46
|
*
|
|
47
47
|
* Peer/optional declarations suppress false missing results through `declaredDependencyNames`.
|
|
48
48
|
*/
|
|
49
|
+
import { type ProjectManifest } from '../scanner/projectManifest.js';
|
|
50
|
+
import type { ScanContext } from './scanContext.js';
|
|
51
|
+
import { type FindingCategory, type PackageFact } from './evidence.js';
|
|
49
52
|
/**
|
|
50
53
|
* The structured outcome of a dependency analysis.
|
|
51
54
|
*
|
|
@@ -64,6 +67,17 @@ export type AnalysisResult = {
|
|
|
64
67
|
/** External packages referenced by source but not declared anywhere, sorted alphabetically. */
|
|
65
68
|
missingDependencies: readonly string[];
|
|
66
69
|
};
|
|
70
|
+
/** Internal categories before or after dependency policy; no additional finding kind. */
|
|
71
|
+
export type AnalysisFindings = Pick<AnalysisResult, 'unusedDependencies' | 'unusedDevDependencies' | 'missingDependencies'>;
|
|
72
|
+
/** Complete internal scan facts. Presentation projects explicit fields instead of serializing this object. */
|
|
73
|
+
export type DetailedAnalysisResult = {
|
|
74
|
+
readonly projectRoot: string;
|
|
75
|
+
readonly manifest: ProjectManifest;
|
|
76
|
+
readonly config: ScanContext['config'];
|
|
77
|
+
readonly underlyingFindings: AnalysisFindings;
|
|
78
|
+
readonly findings: AnalysisFindings;
|
|
79
|
+
readonly packages: readonly PackageFact[];
|
|
80
|
+
};
|
|
67
81
|
/**
|
|
68
82
|
* Internal handoff for package names recognized by a validated static configuration reader.
|
|
69
83
|
*
|
|
@@ -131,4 +145,25 @@ export declare class AnalysisError extends Error {
|
|
|
131
145
|
* @throws {SourceFilesError} when the root is missing, is not a directory, or cannot be read.
|
|
132
146
|
*/
|
|
133
147
|
export declare function analyzeProject(projectRoot: string, options?: AnalysisOptions): Promise<AnalysisResult>;
|
|
148
|
+
/** Keep the small CLI/legacy result projection while collecting the same complete scan facts. */
|
|
149
|
+
export declare function analyzeProjectWithContext(context: ScanContext): Promise<AnalysisResult>;
|
|
150
|
+
/** Detailed analysis accepts eligible typed facts only, never the legacy names-only hint seam. */
|
|
151
|
+
export declare function analyzeProjectDetailed(context: ScanContext): Promise<DetailedAnalysisResult>;
|
|
152
|
+
/** Pure legacy projection; no collection, reclassification or input reads. */
|
|
153
|
+
export declare function projectAnalysisResult(result: DetailedAnalysisResult): AnalysisResult;
|
|
154
|
+
/** Internal package-local outcome; effective scan policy remains available to later reporters. */
|
|
155
|
+
export type PackageExplanation = {
|
|
156
|
+
readonly projectRoot: string;
|
|
157
|
+
readonly config: DetailedAnalysisResult['config'];
|
|
158
|
+
readonly findings: AnalysisFindings;
|
|
159
|
+
readonly counts: Readonly<Record<FindingCategory, number>>;
|
|
160
|
+
readonly packages: readonly [PackageFact];
|
|
161
|
+
readonly query: {
|
|
162
|
+
readonly packageName: string;
|
|
163
|
+
readonly known: boolean;
|
|
164
|
+
};
|
|
165
|
+
readonly exitCode: 0 | 1;
|
|
166
|
+
};
|
|
167
|
+
/** Project only completed scan facts. This function performs no collection or resolution. */
|
|
168
|
+
export declare function projectPackageExplanation(result: DetailedAnalysisResult, packageName: string): PackageExplanation;
|
|
134
169
|
//# sourceMappingURL=analyzeProject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeProject.d.ts","sourceRoot":"","sources":["../../src/core/analyzeProject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;
|
|
1
|
+
{"version":3,"file":"analyzeProject.d.ts","sourceRoot":"","sources":["../../src/core/analyzeProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,9 +50,11 @@ import { readFile } from 'node:fs/promises';
|
|
|
50
50
|
import { dirname } from 'node:path';
|
|
51
51
|
import { loadPackageScope, loadProjectManifest, } from '../scanner/projectManifest.js';
|
|
52
52
|
import { discoverSourceFiles } from '../scanner/sourceFiles.js';
|
|
53
|
-
import {
|
|
53
|
+
import { collectModuleSpecifiers, } from '../scanner/moduleSpecifiers.js';
|
|
54
54
|
import { classifyPackageSpecifier, isPackageSelfReference } from '../scanner/packageSpecifier.js';
|
|
55
|
-
import {
|
|
55
|
+
import { collectPackageScriptUsage } from '../scanner/scriptUsage.js';
|
|
56
|
+
import { isExactPackageRoot } from '../config/ignoreDependencies.js';
|
|
57
|
+
import { declarationGroupsFor, evidencePath, FINDING_CATEGORIES, sortedUniqueEvidence, } from './evidence.js';
|
|
56
58
|
/**
|
|
57
59
|
* Operational error for the dependency-analysis engine.
|
|
58
60
|
*
|
|
@@ -83,8 +85,86 @@ export class AnalysisError extends Error {
|
|
|
83
85
|
*/
|
|
84
86
|
export async function analyzeProject(projectRoot, options = {}) {
|
|
85
87
|
const manifest = await loadProjectManifest(projectRoot);
|
|
88
|
+
const usage = await collectUsage(manifest, options.ignorePaths);
|
|
89
|
+
// Legacy names-only hints keep their finding semantics without creating fictional provenance.
|
|
90
|
+
const used = unionNames([
|
|
91
|
+
[...usage.usedNames],
|
|
92
|
+
[...normalizeConfigHints(options.configUsedNames)],
|
|
93
|
+
]);
|
|
94
|
+
const underlying = classifyFindings(manifest, usage.sourceUsedNames, used);
|
|
95
|
+
return legacyResult(manifest.root, applyDependencyPolicy(underlying, new Set(options.ignoreDependencies ?? [])));
|
|
96
|
+
}
|
|
97
|
+
/** Keep the small CLI/legacy result projection while collecting the same complete scan facts. */
|
|
98
|
+
export async function analyzeProjectWithContext(context) {
|
|
99
|
+
return projectAnalysisResult(await analyzeProjectDetailed(context));
|
|
100
|
+
}
|
|
101
|
+
/** Detailed analysis accepts eligible typed facts only, never the legacy names-only hint seam. */
|
|
102
|
+
export async function analyzeProjectDetailed(context) {
|
|
103
|
+
const { manifest, config } = context;
|
|
104
|
+
const usage = await collectUsage(manifest, config.ignorePaths, context.configEvidence);
|
|
105
|
+
const underlyingFindings = classifyFindings(manifest, usage.sourceUsedNames, usage.usedNames);
|
|
106
|
+
const ignored = new Set(config.ignoreDependencies);
|
|
107
|
+
const findings = applyDependencyPolicy(underlyingFindings, ignored);
|
|
108
|
+
return {
|
|
109
|
+
projectRoot: manifest.root,
|
|
110
|
+
manifest,
|
|
111
|
+
config,
|
|
112
|
+
underlyingFindings,
|
|
113
|
+
findings,
|
|
114
|
+
packages: packageFacts(manifest, usage.evidence, ignored, underlyingFindings, findings),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/** Pure legacy projection; no collection, reclassification or input reads. */
|
|
118
|
+
export function projectAnalysisResult(result) {
|
|
119
|
+
return legacyResult(result.projectRoot, result.findings);
|
|
120
|
+
}
|
|
121
|
+
/** Project only completed scan facts. This function performs no collection or resolution. */
|
|
122
|
+
export function projectPackageExplanation(result, packageName) {
|
|
123
|
+
if (!isExactPackageRoot(packageName)) {
|
|
124
|
+
throw new TypeError('Invalid value for --explain: expected an exact package root (name or @scope/name), at most 214 characters.');
|
|
125
|
+
}
|
|
126
|
+
const selected = result.packages.find((pkg) => pkg.name === packageName);
|
|
127
|
+
const known = selected !== undefined;
|
|
128
|
+
const pkg = selected ?? {
|
|
129
|
+
name: packageName,
|
|
130
|
+
status: 'unknown',
|
|
131
|
+
declaredIn: [],
|
|
132
|
+
excluded: false,
|
|
133
|
+
underlyingFindings: [],
|
|
134
|
+
findings: [],
|
|
135
|
+
evidence: [],
|
|
136
|
+
};
|
|
137
|
+
const findings = {
|
|
138
|
+
unusedDependencies: result.findings.unusedDependencies.filter((name) => name === packageName),
|
|
139
|
+
unusedDevDependencies: result.findings.unusedDevDependencies.filter((name) => name === packageName),
|
|
140
|
+
missingDependencies: result.findings.missingDependencies.filter((name) => name === packageName),
|
|
141
|
+
};
|
|
142
|
+
const counts = {
|
|
143
|
+
unusedDependencies: findings.unusedDependencies.length,
|
|
144
|
+
unusedDevDependencies: findings.unusedDevDependencies.length,
|
|
145
|
+
missingDependencies: findings.missingDependencies.length,
|
|
146
|
+
};
|
|
147
|
+
return {
|
|
148
|
+
projectRoot: result.projectRoot,
|
|
149
|
+
config: result.config,
|
|
150
|
+
findings,
|
|
151
|
+
counts,
|
|
152
|
+
packages: [pkg],
|
|
153
|
+
query: { packageName, known },
|
|
154
|
+
exitCode: !known || Object.values(counts).some((count) => count > 0) ? 1 : 0,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function collectUsage(manifest, ignorePaths, configFacts = []) {
|
|
158
|
+
const evidence = new Map();
|
|
159
|
+
const add = (name, fact) => {
|
|
160
|
+
const facts = evidence.get(name);
|
|
161
|
+
if (facts === undefined)
|
|
162
|
+
evidence.set(name, [fact]);
|
|
163
|
+
else
|
|
164
|
+
facts.push(fact);
|
|
165
|
+
};
|
|
86
166
|
const sourceFiles = await discoverSourceFiles(manifest.root, {
|
|
87
|
-
ignorePaths
|
|
167
|
+
ignorePaths,
|
|
88
168
|
});
|
|
89
169
|
// External package roots referenced by source files, collapsed to their package root.
|
|
90
170
|
const sourceUsedNames = new Set();
|
|
@@ -94,13 +174,22 @@ export async function analyzeProject(projectRoot, options = {}) {
|
|
|
94
174
|
]);
|
|
95
175
|
for (const file of sourceFiles) {
|
|
96
176
|
const scope = await packageScopeForDirectory(dirname(file), scopeByDirectory);
|
|
97
|
-
const
|
|
98
|
-
|
|
177
|
+
const occurrences = await readAndExtract(file, scope.packageType);
|
|
178
|
+
const relativeFile = evidencePath(manifest.root, file);
|
|
179
|
+
for (const occurrence of occurrences) {
|
|
180
|
+
const specifier = occurrence.specifier;
|
|
99
181
|
if (isPackageSelfReference(specifier, scope.selfReference))
|
|
100
182
|
continue;
|
|
101
183
|
const classified = classifyPackageSpecifier(specifier);
|
|
102
184
|
if (classified.kind === 'external') {
|
|
103
185
|
sourceUsedNames.add(classified.packageName);
|
|
186
|
+
add(classified.packageName, {
|
|
187
|
+
kind: 'source',
|
|
188
|
+
file: relativeFile,
|
|
189
|
+
reference: occurrence.kind,
|
|
190
|
+
specifier,
|
|
191
|
+
position: occurrence.position,
|
|
192
|
+
});
|
|
104
193
|
}
|
|
105
194
|
}
|
|
106
195
|
}
|
|
@@ -110,27 +199,74 @@ export async function analyzeProject(projectRoot, options = {}) {
|
|
|
110
199
|
Object.keys(manifest.dependencies),
|
|
111
200
|
Object.keys(manifest.devDependencies),
|
|
112
201
|
]);
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// have been read and parsed successfully before any finding can be suppressed.
|
|
126
|
-
const ignoredDependencies = new Set(options.ignoreDependencies ?? []);
|
|
202
|
+
for (const fact of collectPackageScriptUsage(manifest.scripts, declaredCandidates)) {
|
|
203
|
+
add(fact.packageName, fact.evidence);
|
|
204
|
+
}
|
|
205
|
+
for (const fact of configFacts) {
|
|
206
|
+
// Config facts cannot enlarge the external inventory with undeclared packages.
|
|
207
|
+
if (manifest.declaredDependencyNames.has(fact.packageName))
|
|
208
|
+
add(fact.packageName, fact.evidence);
|
|
209
|
+
}
|
|
210
|
+
return { sourceUsedNames, usedNames: new Set(evidence.keys()), evidence };
|
|
211
|
+
}
|
|
212
|
+
/** Existing formulas, evaluated against full inventory before dependency exclusions. */
|
|
213
|
+
function classifyFindings(manifest, sourceUsedNames, usedNames) {
|
|
127
214
|
return {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
215
|
+
unusedDependencies: declaredMinus(Object.keys(manifest.dependencies), usedNames),
|
|
216
|
+
unusedDevDependencies: declaredMinus(Object.keys(manifest.devDependencies), usedNames),
|
|
217
|
+
missingDependencies: declaredMinus([...sourceUsedNames], manifest.declaredDependencyNames),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function applyDependencyPolicy(underlying, ignored) {
|
|
221
|
+
return {
|
|
222
|
+
unusedDependencies: underlying.unusedDependencies.filter((name) => !ignored.has(name)),
|
|
223
|
+
unusedDevDependencies: underlying.unusedDevDependencies.filter((name) => !ignored.has(name)),
|
|
224
|
+
missingDependencies: underlying.missingDependencies.filter((name) => !ignored.has(name)),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function legacyResult(projectRoot, findings) {
|
|
228
|
+
return {
|
|
229
|
+
projectRoot,
|
|
230
|
+
unusedDependencies: findings.unusedDependencies,
|
|
231
|
+
unusedDevDependencies: findings.unusedDevDependencies,
|
|
232
|
+
missingDependencies: findings.missingDependencies,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function categoryMembership(findings) {
|
|
236
|
+
return {
|
|
237
|
+
unusedDependencies: new Set(findings.unusedDependencies),
|
|
238
|
+
unusedDevDependencies: new Set(findings.unusedDevDependencies),
|
|
239
|
+
missingDependencies: new Set(findings.missingDependencies),
|
|
132
240
|
};
|
|
133
241
|
}
|
|
242
|
+
function packageFacts(manifest, evidenceByPackage, ignored, underlying, visible) {
|
|
243
|
+
const underlyingMembership = categoryMembership(underlying);
|
|
244
|
+
const visibleMembership = categoryMembership(visible);
|
|
245
|
+
const names = unionNames([
|
|
246
|
+
[...manifest.declaredDependencyNames],
|
|
247
|
+
[...evidenceByPackage.keys()],
|
|
248
|
+
[...ignored],
|
|
249
|
+
]);
|
|
250
|
+
return [...names].map((name) => {
|
|
251
|
+
const declaredIn = declarationGroupsFor(name, manifest);
|
|
252
|
+
const excluded = ignored.has(name);
|
|
253
|
+
const underlyingFindings = FINDING_CATEGORIES.filter((category) => underlyingMembership[category].has(name));
|
|
254
|
+
const findings = FINDING_CATEGORIES.filter((category) => visibleMembership[category].has(name));
|
|
255
|
+
const evidence = sortedUniqueEvidence(evidenceByPackage.get(name) ?? []);
|
|
256
|
+
const status = excluded
|
|
257
|
+
? 'excluded'
|
|
258
|
+
: underlyingFindings.includes('missingDependencies')
|
|
259
|
+
? 'missing'
|
|
260
|
+
: underlyingFindings.length > 0
|
|
261
|
+
? 'unused'
|
|
262
|
+
: evidence.length > 0
|
|
263
|
+
? 'used'
|
|
264
|
+
: declaredIn.length > 0
|
|
265
|
+
? 'declared'
|
|
266
|
+
: 'unknown';
|
|
267
|
+
return { name, status, declaredIn, excluded, underlyingFindings, findings, evidence };
|
|
268
|
+
});
|
|
269
|
+
}
|
|
134
270
|
/**
|
|
135
271
|
* Resolve the nearest package scope for one discovered source file.
|
|
136
272
|
*
|
|
@@ -188,11 +324,11 @@ async function readAndExtract(file, packageType) {
|
|
|
188
324
|
packageType === 'module');
|
|
189
325
|
}
|
|
190
326
|
try {
|
|
191
|
-
const occurrences =
|
|
327
|
+
const occurrences = collectModuleSpecifiers(source, {
|
|
192
328
|
jsx: usesJsxSyntax(file, source),
|
|
193
329
|
module: sourceModuleMode(file, packageType),
|
|
194
330
|
});
|
|
195
|
-
return occurrences
|
|
331
|
+
return occurrences;
|
|
196
332
|
}
|
|
197
333
|
catch (error) {
|
|
198
334
|
if (error instanceof Error && error.name === 'ModuleSpecifierError') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzeProject.js","sourceRoot":"","sources":["../../src/core/analyzeProject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAkEnE;;;;;;;GAOG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IAEjC,YAAY,OAAe,EAAE,IAAuB,EAAE,KAAe;QACnE,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,UAA2B,EAAE;IAE7B,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3D,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IAEH,sFAAsF;IACtF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,mFAAmF;IACnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAA+B;QAC7D,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;KAC9F,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAEjE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;gBAAE,SAAS;YACrE,MAAM,UAAU,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YAEvD,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,gGAAgG;IAChG,0FAA0F;IAC1F,MAAM,kBAAkB,GAAG,UAAU,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;KACtC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAErF,kGAAkG;IAClG,iGAAiG;IACjG,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEjG,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAExF,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;IAE9F,6FAA6F;IAC7F,uEAAuE;IACvE,MAAM,mBAAmB,GAAG,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IAElG,+FAA+F;IAC/F,+FAA+F;IAC/F,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvF,qBAAqB,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7F,mBAAmB,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1F,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,wBAAwB,CACrC,SAAiB,EACjB,KAAwC;IAExC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,MAAM,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,WAA+B;IAE/B,IAAI,MAAc,CAAC;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,8BAA8B,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EACzD,mBAAmB,EACnB,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,WAA+B;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEjC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YACpF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,WAAW,KAAK,QAAQ,CACzB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE;YAClD,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;YAChC,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACpE,MAAM,IAAI,aAAa,CACrB,eAAe,IAAI,2BAA2B,SAAS,CAAC,KAAK,CAAC,EAAE,EAChE,gBAAgB,EAChB,KAAK,CACN,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,IAAY,EAAE,MAAc;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,KAAmC;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,kGAAkG;IAClG,OAAO,IAAI,GAAG,CAAS,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,KAAqC;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAA2B,EAAE,IAAyB;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"analyzeProject.js","sourceRoot":"","sources":["../../src/core/analyzeProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Internal fact model. Collection and classification belong to their owning pipeline stages. */
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import type { ModuleSpecifierKind } from '../scanner/moduleSpecifiers.js';
|
|
4
|
+
import type { DependencyMap } from '../scanner/projectManifest.js';
|
|
5
|
+
export declare const DECLARATION_GROUPS: readonly ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"];
|
|
6
|
+
export type DeclarationGroup = (typeof DECLARATION_GROUPS)[number];
|
|
7
|
+
export type DeclarationInventory = Readonly<Record<DeclarationGroup, DependencyMap>>;
|
|
8
|
+
export declare const FINDING_CATEGORIES: readonly ["unusedDependencies", "unusedDevDependencies", "missingDependencies"];
|
|
9
|
+
export type FindingCategory = (typeof FINDING_CATEGORIES)[number];
|
|
10
|
+
/** Precedence only; this module does not classify packages or infer usage. */
|
|
11
|
+
export declare const PACKAGE_STATUSES: readonly ["excluded", "missing", "unused", "used", "declared", "unknown"];
|
|
12
|
+
export type PackageStatus = (typeof PACKAGE_STATUSES)[number];
|
|
13
|
+
export declare const SOURCE_REFERENCES: readonly ["import", "export-from", "dynamic-import", "require"];
|
|
14
|
+
export type SourceReference = ModuleSpecifierKind;
|
|
15
|
+
export type SourceEvidence = {
|
|
16
|
+
kind: 'source';
|
|
17
|
+
file: string;
|
|
18
|
+
reference: SourceReference;
|
|
19
|
+
specifier: string;
|
|
20
|
+
/** Original UTF-16 opening-quote offset (zero-based), line and column (one-based). */
|
|
21
|
+
position: {
|
|
22
|
+
offset: number;
|
|
23
|
+
line: number;
|
|
24
|
+
column: number;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export declare const SCRIPT_VIAS: readonly ["direct", "mapping", "runner", "node-preload"];
|
|
28
|
+
export type ScriptEvidence = {
|
|
29
|
+
kind: 'script';
|
|
30
|
+
file: 'package.json';
|
|
31
|
+
pointer: string;
|
|
32
|
+
command: string;
|
|
33
|
+
via: (typeof SCRIPT_VIAS)[number];
|
|
34
|
+
/** Script-wide accepted external candidate ordinal, before declaration filtering. */
|
|
35
|
+
occurrence: number;
|
|
36
|
+
};
|
|
37
|
+
export declare const CONFIG_DETECTORS: readonly ["eslint", "jest"];
|
|
38
|
+
export type ConfigEvidence = {
|
|
39
|
+
kind: 'config';
|
|
40
|
+
file: string;
|
|
41
|
+
pointer: string;
|
|
42
|
+
value: string;
|
|
43
|
+
detector: (typeof CONFIG_DETECTORS)[number];
|
|
44
|
+
};
|
|
45
|
+
export type Evidence = SourceEvidence | ScriptEvidence | ConfigEvidence;
|
|
46
|
+
export type PackageFact = {
|
|
47
|
+
name: string;
|
|
48
|
+
status: PackageStatus;
|
|
49
|
+
declaredIn: readonly DeclarationGroup[];
|
|
50
|
+
excluded: boolean;
|
|
51
|
+
underlyingFindings: readonly FindingCategory[];
|
|
52
|
+
findings: readonly FindingCategory[];
|
|
53
|
+
evidence: readonly Evidence[];
|
|
54
|
+
};
|
|
55
|
+
/** ECMAScript UTF-16 lexicographic order, independent of the host locale. */
|
|
56
|
+
export declare function compareStrings(a: string, b: string): number;
|
|
57
|
+
/** Own membership only: prototype properties are not declarations. Names remain case-sensitive. */
|
|
58
|
+
export declare function declarationGroupsFor(name: string, inventory: DeclarationInventory): DeclarationGroup[];
|
|
59
|
+
/** Lexical display only. The caller owns filesystem validation and symlink policy. */
|
|
60
|
+
export declare function evidencePath(root: string, file: string, paths?: Pick<typeof path, 'relative' | 'isAbsolute' | 'sep'>): string;
|
|
61
|
+
/** RFC 6901 data pointer, not a URI fragment. An empty token is significant. */
|
|
62
|
+
export declare function jsonPointer(...tokens: readonly string[]): string;
|
|
63
|
+
export declare function compareEvidence(a: Evidence, b: Evidence): number;
|
|
64
|
+
/** Explicit tuples make exact identity independent of object property insertion order. */
|
|
65
|
+
export declare function evidenceIdentity(evidence: Evidence): string;
|
|
66
|
+
export declare function sortedUniqueEvidence(records: readonly Evidence[]): Evidence[];
|
|
67
|
+
//# sourceMappingURL=evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/** Internal fact model. Collection and classification belong to their owning pipeline stages. */
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
export const DECLARATION_GROUPS = [
|
|
4
|
+
'dependencies',
|
|
5
|
+
'devDependencies',
|
|
6
|
+
'peerDependencies',
|
|
7
|
+
'optionalDependencies',
|
|
8
|
+
];
|
|
9
|
+
export const FINDING_CATEGORIES = [
|
|
10
|
+
'unusedDependencies',
|
|
11
|
+
'unusedDevDependencies',
|
|
12
|
+
'missingDependencies',
|
|
13
|
+
];
|
|
14
|
+
/** Precedence only; this module does not classify packages or infer usage. */
|
|
15
|
+
export const PACKAGE_STATUSES = [
|
|
16
|
+
'excluded',
|
|
17
|
+
'missing',
|
|
18
|
+
'unused',
|
|
19
|
+
'used',
|
|
20
|
+
'declared',
|
|
21
|
+
'unknown',
|
|
22
|
+
];
|
|
23
|
+
export const SOURCE_REFERENCES = ['import', 'export-from', 'dynamic-import', 'require'];
|
|
24
|
+
export const SCRIPT_VIAS = ['direct', 'mapping', 'runner', 'node-preload'];
|
|
25
|
+
export const CONFIG_DETECTORS = ['eslint', 'jest'];
|
|
26
|
+
/** ECMAScript UTF-16 lexicographic order, independent of the host locale. */
|
|
27
|
+
export function compareStrings(a, b) {
|
|
28
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
29
|
+
}
|
|
30
|
+
/** Own membership only: prototype properties are not declarations. Names remain case-sensitive. */
|
|
31
|
+
export function declarationGroupsFor(name, inventory) {
|
|
32
|
+
return DECLARATION_GROUPS.filter((group) => Object.hasOwn(inventory[group], name));
|
|
33
|
+
}
|
|
34
|
+
/** Lexical display only. The caller owns filesystem validation and symlink policy. */
|
|
35
|
+
export function evidencePath(root, file, paths = path) {
|
|
36
|
+
if (!paths.isAbsolute(root) || !paths.isAbsolute(file)) {
|
|
37
|
+
throw new Error('Evidence paths require an absolute project root and file');
|
|
38
|
+
}
|
|
39
|
+
const relative = paths.relative(root, file);
|
|
40
|
+
const components = relative.split(paths.sep);
|
|
41
|
+
if (paths.isAbsolute(relative) ||
|
|
42
|
+
components.some((part) => part === '' || part === '.' || part === '..')) {
|
|
43
|
+
throw new Error('Evidence file must be inside the project root');
|
|
44
|
+
}
|
|
45
|
+
return components.join('/');
|
|
46
|
+
}
|
|
47
|
+
/** RFC 6901 data pointer, not a URI fragment. An empty token is significant. */
|
|
48
|
+
export function jsonPointer(...tokens) {
|
|
49
|
+
return tokens.map((token) => '/' + token.replaceAll('~', '~0').replaceAll('/', '~1')).join('');
|
|
50
|
+
}
|
|
51
|
+
const EVIDENCE_KINDS = ['source', 'script', 'config'];
|
|
52
|
+
export function compareEvidence(a, b) {
|
|
53
|
+
const common = EVIDENCE_KINDS.indexOf(a.kind) - EVIDENCE_KINDS.indexOf(b.kind) ||
|
|
54
|
+
compareStrings(a.file, b.file);
|
|
55
|
+
if (common !== 0)
|
|
56
|
+
return common;
|
|
57
|
+
if (a.kind === 'source' && b.kind === 'source') {
|
|
58
|
+
return (a.position.offset - b.position.offset ||
|
|
59
|
+
SOURCE_REFERENCES.indexOf(a.reference) - SOURCE_REFERENCES.indexOf(b.reference) ||
|
|
60
|
+
compareStrings(a.specifier, b.specifier) ||
|
|
61
|
+
a.position.line - b.position.line ||
|
|
62
|
+
a.position.column - b.position.column);
|
|
63
|
+
}
|
|
64
|
+
if (a.kind === 'script' && b.kind === 'script') {
|
|
65
|
+
return (compareStrings(a.pointer, b.pointer) ||
|
|
66
|
+
a.occurrence - b.occurrence ||
|
|
67
|
+
SCRIPT_VIAS.indexOf(a.via) - SCRIPT_VIAS.indexOf(b.via) ||
|
|
68
|
+
compareStrings(a.command, b.command));
|
|
69
|
+
}
|
|
70
|
+
if (a.kind === 'config' && b.kind === 'config') {
|
|
71
|
+
return (compareStrings(a.pointer, b.pointer) ||
|
|
72
|
+
CONFIG_DETECTORS.indexOf(a.detector) - CONFIG_DETECTORS.indexOf(b.detector) ||
|
|
73
|
+
compareStrings(a.value, b.value));
|
|
74
|
+
}
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
/** Explicit tuples make exact identity independent of object property insertion order. */
|
|
78
|
+
export function evidenceIdentity(evidence) {
|
|
79
|
+
switch (evidence.kind) {
|
|
80
|
+
case 'source':
|
|
81
|
+
return JSON.stringify([
|
|
82
|
+
evidence.kind,
|
|
83
|
+
evidence.file,
|
|
84
|
+
evidence.reference,
|
|
85
|
+
evidence.specifier,
|
|
86
|
+
evidence.position.offset,
|
|
87
|
+
evidence.position.line,
|
|
88
|
+
evidence.position.column,
|
|
89
|
+
]);
|
|
90
|
+
case 'script':
|
|
91
|
+
return JSON.stringify([
|
|
92
|
+
evidence.kind,
|
|
93
|
+
evidence.file,
|
|
94
|
+
evidence.pointer,
|
|
95
|
+
evidence.command,
|
|
96
|
+
evidence.via,
|
|
97
|
+
evidence.occurrence,
|
|
98
|
+
]);
|
|
99
|
+
case 'config':
|
|
100
|
+
return JSON.stringify([
|
|
101
|
+
evidence.kind,
|
|
102
|
+
evidence.file,
|
|
103
|
+
evidence.pointer,
|
|
104
|
+
evidence.value,
|
|
105
|
+
evidence.detector,
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function sortedUniqueEvidence(records) {
|
|
110
|
+
const unique = new Map();
|
|
111
|
+
for (const record of records)
|
|
112
|
+
unique.set(evidenceIdentity(record), record);
|
|
113
|
+
return [...unique.values()].sort(compareEvidence);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/core/evidence.ts"],"names":[],"mappings":"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"}
|