@kernlang/review 3.3.9 → 3.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/dist/call-graph.d.ts +10 -0
- package/dist/call-graph.js +138 -9
- package/dist/call-graph.js.map +1 -1
- package/dist/concept-rules/auth-drift.js +2 -0
- package/dist/concept-rules/auth-drift.js.map +1 -1
- package/dist/concept-rules/auth-propagation-drift.js +2 -0
- package/dist/concept-rules/auth-propagation-drift.js.map +1 -1
- package/dist/concept-rules/body-shape-drift.d.ts +1 -1
- package/dist/concept-rules/body-shape-drift.js +5 -3
- package/dist/concept-rules/body-shape-drift.js.map +1 -1
- package/dist/concept-rules/contract-drift.js +3 -1
- package/dist/concept-rules/contract-drift.js.map +1 -1
- package/dist/concept-rules/contract-method-drift.js +2 -0
- package/dist/concept-rules/contract-method-drift.js.map +1 -1
- package/dist/concept-rules/index.js +2 -33
- package/dist/concept-rules/index.js.map +1 -1
- package/dist/concept-rules/request-validation-drift.js +3 -0
- package/dist/concept-rules/request-validation-drift.js.map +1 -1
- package/dist/concept-rules/root-cause.d.ts +4 -0
- package/dist/concept-rules/root-cause.js +31 -0
- package/dist/concept-rules/root-cause.js.map +1 -0
- package/dist/concept-rules/unbounded-collection-query.js +2 -0
- package/dist/concept-rules/unbounded-collection-query.js.map +1 -1
- package/dist/concept-rules/unhandled-api-error-shape.js +2 -0
- package/dist/concept-rules/unhandled-api-error-shape.js.map +1 -1
- package/dist/default-export.d.ts +41 -0
- package/dist/default-export.js +76 -0
- package/dist/default-export.js.map +1 -0
- package/dist/eval.d.ts +67 -0
- package/dist/eval.js +177 -0
- package/dist/eval.js.map +1 -0
- package/dist/file-context.js +32 -13
- package/dist/file-context.js.map +1 -1
- package/dist/file-role.d.ts +6 -0
- package/dist/file-role.js +27 -0
- package/dist/file-role.js.map +1 -1
- package/dist/framework-seeds.d.ts +46 -0
- package/dist/framework-seeds.js +245 -0
- package/dist/framework-seeds.js.map +1 -0
- package/dist/git-env.d.ts +1 -0
- package/dist/git-env.js +25 -0
- package/dist/git-env.js.map +1 -0
- package/dist/graph.js +246 -21
- package/dist/graph.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +200 -56
- package/dist/index.js.map +1 -1
- package/dist/mappers/ts-concepts.js +87 -20
- package/dist/mappers/ts-concepts.js.map +1 -1
- package/dist/path-canonical.d.ts +34 -0
- package/dist/path-canonical.js +85 -0
- package/dist/path-canonical.js.map +1 -0
- package/dist/policy.d.ts +22 -0
- package/dist/policy.js +47 -0
- package/dist/policy.js.map +1 -0
- package/dist/project-context.d.ts +135 -0
- package/dist/project-context.js +563 -0
- package/dist/project-context.js.map +1 -0
- package/dist/public-api.d.ts +21 -0
- package/dist/public-api.js +17 -2
- package/dist/public-api.js.map +1 -1
- package/dist/reporter.js +22 -0
- package/dist/reporter.js.map +1 -1
- package/dist/rule-quality.d.ts +58 -0
- package/dist/rule-quality.js +357 -0
- package/dist/rule-quality.js.map +1 -0
- package/dist/rules/dead-code.d.ts +2 -2
- package/dist/rules/dead-code.js +88 -4
- package/dist/rules/dead-code.js.map +1 -1
- package/dist/rules/index.d.ts +22 -0
- package/dist/rules/index.js +32 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/kern-source.d.ts +4 -0
- package/dist/rules/kern-source.js +183 -0
- package/dist/rules/kern-source.js.map +1 -1
- package/dist/rules/react.js +52 -3
- package/dist/rules/react.js.map +1 -1
- package/dist/rules/suggest-kern-primitive.js +0 -1
- package/dist/rules/suggest-kern-primitive.js.map +1 -1
- package/dist/semantic-diff.js +2 -0
- package/dist/semantic-diff.js.map +1 -1
- package/dist/suppression/apply-suppression.js +2 -0
- package/dist/suppression/apply-suppression.js.map +1 -1
- package/dist/suppression/parse-directives.d.ts +13 -5
- package/dist/suppression/parse-directives.js +62 -8
- package/dist/suppression/parse-directives.js.map +1 -1
- package/dist/suppression/types.d.ts +9 -0
- package/dist/suppression/types.js +6 -1
- package/dist/suppression/types.js.map +1 -1
- package/dist/taint-crossfile.js +15 -8
- package/dist/taint-crossfile.js.map +1 -1
- package/dist/telemetry.d.ts +126 -0
- package/dist/telemetry.js +303 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +165 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -3
package/dist/graph.js
CHANGED
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* Codex contributions: extension fallback, shortest-distance tracking, skip counters.
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync } from 'fs';
|
|
11
|
-
import { resolve } from 'path';
|
|
12
|
-
import { Project } from 'ts-morph';
|
|
11
|
+
import { dirname, relative, resolve } from 'path';
|
|
12
|
+
import { Project, SyntaxKind } from 'ts-morph';
|
|
13
|
+
import { createPathCanonicalizer } from './path-canonical.js';
|
|
13
14
|
/** Extension fallback map: .js→.ts, .jsx→.tsx (Codex idea) */
|
|
14
15
|
const EXT_FALLBACK = {
|
|
15
16
|
'.js': ['.ts', '.tsx'],
|
|
@@ -36,28 +37,54 @@ export function resolveImportGraph(entryFiles, options = {}) {
|
|
|
36
37
|
const visited = new Set();
|
|
37
38
|
const queue = [];
|
|
38
39
|
let skipped = 0;
|
|
40
|
+
// Producer 1 (unresolved named re-export → blocker on importing file's
|
|
41
|
+
// localName) and Producer 2 (non-literal dynamic import → telemetry).
|
|
42
|
+
// Both accumulate across the BFS walk and ride out on GraphResult.
|
|
43
|
+
const blockers = [];
|
|
44
|
+
let unmappedDynamicImports = 0;
|
|
45
|
+
let malformedImports = 0;
|
|
46
|
+
// Path canonicalisation (red-team #9). Every path that becomes a fileMap
|
|
47
|
+
// KEY or is fed to ts-morph's `addSourceFileAtPath` runs through this
|
|
48
|
+
// memoised canonicaliser so two display paths pointing at the same
|
|
49
|
+
// physical file (pnpm symlinks, macOS /var → /private/var) collapse to
|
|
50
|
+
// a single GraphFile. Display paths are preserved on `gf.path` —
|
|
51
|
+
// the canonicalisation only affects internal identity keys.
|
|
52
|
+
const canonicalize = createPathCanonicalizer();
|
|
39
53
|
// Seed BFS with entry files
|
|
40
54
|
for (const entry of entryFiles) {
|
|
41
|
-
|
|
55
|
+
const canonicalEntry = canonicalize(entry);
|
|
56
|
+
// Feed the canonical form to ts-morph so its internal SourceFile
|
|
57
|
+
// store is keyed canonically. When a barrel reachable via a symlink
|
|
58
|
+
// imports the same file via realpath, ts-morph's resolution uses
|
|
59
|
+
// dirname(canonical) and lands on the canonical form too — keeping
|
|
60
|
+
// the project consistent without any other intervention.
|
|
61
|
+
let sf = project.getSourceFile(canonicalEntry);
|
|
42
62
|
if (!sf) {
|
|
43
63
|
try {
|
|
44
|
-
sf = project.addSourceFileAtPath(
|
|
64
|
+
sf = project.addSourceFileAtPath(canonicalEntry);
|
|
45
65
|
}
|
|
46
66
|
catch {
|
|
47
|
-
const entryPath = resolve(
|
|
67
|
+
const entryPath = resolve(canonicalEntry);
|
|
48
68
|
if (!existsSync(entryPath)) {
|
|
49
69
|
skipped++;
|
|
50
70
|
continue;
|
|
51
71
|
}
|
|
52
72
|
if (!fileMap.has(entryPath)) {
|
|
53
|
-
|
|
73
|
+
// Fallback path — rare, only when ts-morph rejects but the file
|
|
74
|
+
// exists on disk. We can't get a SourceFile so we synthesise a
|
|
75
|
+
// GraphFile entry with display = caller's input.
|
|
76
|
+
fileMap.set(entryPath, makeGraphFile(entry, entryPath, 0));
|
|
54
77
|
}
|
|
55
78
|
continue;
|
|
56
79
|
}
|
|
57
80
|
}
|
|
58
|
-
const p = sf.getFilePath();
|
|
81
|
+
const p = canonicalize(sf.getFilePath());
|
|
59
82
|
if (!fileMap.has(p)) {
|
|
60
|
-
|
|
83
|
+
// Display = caller's original entry path (so `report.filePath`
|
|
84
|
+
// matches what the user passed in, even when the entry sits behind
|
|
85
|
+
// a symlinked tmpdir — the regression-repo-shapes fixtures rely on
|
|
86
|
+
// this).
|
|
87
|
+
fileMap.set(p, makeGraphFile(entry, p, 0));
|
|
61
88
|
queue.push({ path: p, distance: 0 });
|
|
62
89
|
}
|
|
63
90
|
}
|
|
@@ -74,14 +101,44 @@ export function resolveImportGraph(entryFiles, options = {}) {
|
|
|
74
101
|
continue;
|
|
75
102
|
const current = fileMap.get(filePath);
|
|
76
103
|
// Collect module references from imports and re-exports (barrel file support)
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
104
|
+
const scan = collectModuleEdgeRefs(sf, canonicalize);
|
|
105
|
+
unmappedDynamicImports += scan.unmappedDynamicImports;
|
|
106
|
+
malformedImports += scan.malformedImports;
|
|
107
|
+
for (const ref of scan.refs) {
|
|
108
|
+
const { sourceFile: resolvedFile, via } = resolveModuleReference(project, sf, ref.specifier, ref.resolved, canonicalize);
|
|
80
109
|
if (!resolvedFile) {
|
|
110
|
+
// Producer 1: a re-export with a relative specifier that even the
|
|
111
|
+
// extension-fallback couldn't resolve becomes a symbol-scoped
|
|
112
|
+
// blocker on the IMPORTING file's localName. Symbol scope only —
|
|
113
|
+
// never file scope (see ReachabilityBlocker jsdoc and red-team v3).
|
|
114
|
+
//
|
|
115
|
+
// Two re-export shapes carry a concrete local name and qualify:
|
|
116
|
+
// - `named-reexport` — `export { foo } from './x'`
|
|
117
|
+
// - `namespace-reexport` — `export * as ns from './x'`
|
|
118
|
+
// Bare `export *` (kind `export-all`) is excluded because there is
|
|
119
|
+
// no symbol to pin. Bare specifiers (`react`, `lodash/get`) are
|
|
120
|
+
// also excluded: unresolved bare specifiers mean a missing dep,
|
|
121
|
+
// not an unknowable target, and dead-export's package-public-API
|
|
122
|
+
// logic already shields those callers.
|
|
123
|
+
if ((ref.kind === 'named-reexport' || ref.kind === 'namespace-reexport') &&
|
|
124
|
+
ref.localName &&
|
|
125
|
+
(ref.specifier.startsWith('.') || ref.specifier.startsWith('/'))) {
|
|
126
|
+
blockers.push({
|
|
127
|
+
reason: 'unresolved-re-export',
|
|
128
|
+
filePath,
|
|
129
|
+
exportName: ref.localName,
|
|
130
|
+
site: { file: filePath, line: ref.line ?? 0 },
|
|
131
|
+
});
|
|
132
|
+
}
|
|
81
133
|
skipped++;
|
|
82
134
|
continue;
|
|
83
135
|
}
|
|
84
|
-
|
|
136
|
+
// Canonical-key the resolved file. ts-morph's getFilePath() is
|
|
137
|
+
// verbatim from the parent's path; if we fed canonical above, it
|
|
138
|
+
// returns canonical here too, so this is usually a no-op. Run it
|
|
139
|
+
// anyway so any externally-supplied `options.project` (which may
|
|
140
|
+
// not have been seeded canonical) still produces a clean key.
|
|
141
|
+
const resolvedPath = canonicalize(resolvedFile.getFilePath());
|
|
85
142
|
// Skip .d.ts and node_modules (even if resolved via path alias)
|
|
86
143
|
if (resolvedPath.endsWith('.d.ts')) {
|
|
87
144
|
skipped++;
|
|
@@ -105,7 +162,17 @@ export function resolveImportGraph(entryFiles, options = {}) {
|
|
|
105
162
|
current.imports.push(resolvedPath);
|
|
106
163
|
}
|
|
107
164
|
if (!fileMap.has(resolvedPath)) {
|
|
108
|
-
|
|
165
|
+
// Derive a DISPLAY path for the reached file from the parent's
|
|
166
|
+
// display path (red-team #9, multi-AI brainstorm Option B + 4th
|
|
167
|
+
// option). The relative form between parent's canonical dir and
|
|
168
|
+
// the resolved canonical path applied to the parent's display
|
|
169
|
+
// dir reproduces the symlink view the user sees: a barrel
|
|
170
|
+
// imported from `/var/folders/.../entry.ts` resolves its './worker'
|
|
171
|
+
// import to `/var/folders/.../worker.ts`, not the realpath form.
|
|
172
|
+
const parentCanonicalDir = dirname(filePath);
|
|
173
|
+
const relFromCanonical = relative(parentCanonicalDir, resolvedPath);
|
|
174
|
+
const displayPath = resolve(dirname(current.path), relFromCanonical);
|
|
175
|
+
const nextFile = makeGraphFile(displayPath, resolvedPath, distance + 1);
|
|
109
176
|
nextFile.importedBy.push(filePath);
|
|
110
177
|
nextFile.incomingEdges.push(edge);
|
|
111
178
|
fileMap.set(resolvedPath, nextFile);
|
|
@@ -131,20 +198,26 @@ export function resolveImportGraph(entryFiles, options = {}) {
|
|
|
131
198
|
totalFiles: files.length,
|
|
132
199
|
skipped,
|
|
133
200
|
project,
|
|
201
|
+
blockers,
|
|
202
|
+
unmappedDynamicImports,
|
|
203
|
+
malformedImports,
|
|
134
204
|
};
|
|
135
205
|
}
|
|
136
206
|
/**
|
|
137
207
|
* Extension fallback: when ts-morph can't resolve ./foo.js, try ./foo.ts and ./foo.tsx.
|
|
138
208
|
* Common in ESM projects where imports use .js but source files are .ts.
|
|
139
209
|
*/
|
|
140
|
-
function tryExtensionFallback(project, fromFile, specifier) {
|
|
210
|
+
function tryExtensionFallback(project, fromFile, specifier, canonicalize) {
|
|
141
211
|
for (const [jsExt, tsExts] of Object.entries(EXT_FALLBACK)) {
|
|
142
212
|
if (!specifier.endsWith(jsExt))
|
|
143
213
|
continue;
|
|
144
214
|
const base = specifier.slice(0, -jsExt.length);
|
|
145
215
|
for (const tsExt of tsExts) {
|
|
146
216
|
const candidate = base + tsExt;
|
|
147
|
-
|
|
217
|
+
// Canonicalise before adding so ts-morph stores the realpath form.
|
|
218
|
+
// Same physical file reachable via two display paths collapses to
|
|
219
|
+
// a single SourceFile, preventing duplicate entries (red-team #9).
|
|
220
|
+
const fullPath = canonicalize(resolve(fromFile.getDirectoryPath(), candidate));
|
|
148
221
|
const existing = project.getSourceFile(fullPath);
|
|
149
222
|
if (existing)
|
|
150
223
|
return existing;
|
|
@@ -160,9 +233,10 @@ function tryExtensionFallback(project, fromFile, specifier) {
|
|
|
160
233
|
}
|
|
161
234
|
return undefined;
|
|
162
235
|
}
|
|
163
|
-
function makeGraphFile(path, distance) {
|
|
236
|
+
function makeGraphFile(path, canonicalPath, distance) {
|
|
164
237
|
return {
|
|
165
238
|
path,
|
|
239
|
+
canonicalPath,
|
|
166
240
|
distance,
|
|
167
241
|
imports: [],
|
|
168
242
|
importedBy: [],
|
|
@@ -170,20 +244,28 @@ function makeGraphFile(path, distance) {
|
|
|
170
244
|
incomingEdges: [],
|
|
171
245
|
};
|
|
172
246
|
}
|
|
173
|
-
function resolveModuleReference(project, fromFile, specifier, resolved) {
|
|
247
|
+
function resolveModuleReference(project, fromFile, specifier, resolved, canonicalize) {
|
|
174
248
|
if (resolved)
|
|
175
249
|
return { sourceFile: resolved, via: 'ts-morph' };
|
|
176
250
|
if (specifier.startsWith('.') || specifier.startsWith('/')) {
|
|
177
|
-
const fallback = tryExtensionFallback(project, fromFile, specifier);
|
|
251
|
+
const fallback = tryExtensionFallback(project, fromFile, specifier, canonicalize);
|
|
178
252
|
if (fallback)
|
|
179
253
|
return { sourceFile: fallback, via: 'extension-fallback' };
|
|
180
254
|
}
|
|
181
255
|
return { sourceFile: undefined, via: 'ts-morph' };
|
|
182
256
|
}
|
|
183
|
-
function collectModuleEdgeRefs(sourceFile) {
|
|
257
|
+
function collectModuleEdgeRefs(sourceFile, canonicalize) {
|
|
184
258
|
const refs = [];
|
|
259
|
+
let unmappedDynamicImports = 0;
|
|
260
|
+
let malformedImports = 0;
|
|
185
261
|
for (const decl of sourceFile.getImportDeclarations()) {
|
|
186
262
|
try {
|
|
263
|
+
// `import type { X } from './m'` and `import type Foo from './m'` are
|
|
264
|
+
// erased at compile time. They MUST NOT contribute caller edges,
|
|
265
|
+
// otherwise dead-export reachability counts type-only references as
|
|
266
|
+
// proof a runtime symbol is alive — a category of FP red-team flagged.
|
|
267
|
+
if (decl.isTypeOnly())
|
|
268
|
+
continue;
|
|
187
269
|
const specifier = decl.getModuleSpecifierValue();
|
|
188
270
|
const resolved = decl.getModuleSpecifierSourceFile();
|
|
189
271
|
let recorded = false;
|
|
@@ -199,6 +281,9 @@ function collectModuleEdgeRefs(sourceFile) {
|
|
|
199
281
|
recorded = true;
|
|
200
282
|
}
|
|
201
283
|
for (const named of decl.getNamedImports()) {
|
|
284
|
+
// Mixed form: `import { Foo, type Bar } from './m'` — Bar is erased.
|
|
285
|
+
if (named.isTypeOnly())
|
|
286
|
+
continue;
|
|
202
287
|
refs.push({
|
|
203
288
|
specifier,
|
|
204
289
|
resolved,
|
|
@@ -223,11 +308,71 @@ function collectModuleEdgeRefs(sourceFile) {
|
|
|
223
308
|
refs.push({ specifier, resolved, kind: 'side-effect-import' });
|
|
224
309
|
}
|
|
225
310
|
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
// ts-morph threw while reading this static-import declaration.
|
|
313
|
+
// Causes seen in the wild: malformed AST after a parse-error file,
|
|
314
|
+
// transient FS race during watch-mode, an internal ts-morph
|
|
315
|
+
// assertion. Swallowing silently was a bug — operators had no way
|
|
316
|
+
// to know analysis was incomplete. Now we count, surface via
|
|
317
|
+
// review-health, and log under KERN_DEBUG so the failure is
|
|
318
|
+
// recoverable AND observable.
|
|
319
|
+
malformedImports++;
|
|
320
|
+
if (process.env.KERN_DEBUG) {
|
|
321
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
322
|
+
console.error(`graph: failed to read import declaration in ${sourceFile.getFilePath()}: ${msg}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Dynamic imports — `import('./mod')` / `await import('./mod')`. ts-morph
|
|
327
|
+
// models the call's expression as `SyntaxKind.ImportKeyword` (NOT an
|
|
328
|
+
// identifier whose text is "import"), so this is the correct discriminator
|
|
329
|
+
// — red-team #5 specifically called out the identifier-based check as a
|
|
330
|
+
// bug that would silently skip every dynamic import.
|
|
331
|
+
//
|
|
332
|
+
// Only LITERAL specifiers produce an edge here. A non-literal argument
|
|
333
|
+
// (e.g. `import(routes[role])`) is left untouched: step 9b will record a
|
|
334
|
+
// symbol-scoped ReachabilityBlocker for that case so the resulting
|
|
335
|
+
// dead-export confidence is capped — never silently suppressed.
|
|
336
|
+
for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
|
|
337
|
+
const callee = call.getExpression();
|
|
338
|
+
if (callee.getKind() !== SyntaxKind.ImportKeyword)
|
|
339
|
+
continue;
|
|
340
|
+
const args = call.getArguments();
|
|
341
|
+
if (args.length === 0)
|
|
342
|
+
continue;
|
|
343
|
+
const first = args[0];
|
|
344
|
+
if (!first)
|
|
345
|
+
continue;
|
|
346
|
+
const argKind = first.getKind();
|
|
347
|
+
if (argKind !== SyntaxKind.StringLiteral && argKind !== SyntaxKind.NoSubstitutionTemplateLiteral) {
|
|
348
|
+
// Producer 2 (telemetry-only): the specifier isn't a literal so we can't
|
|
349
|
+
// derive a target file or export name. Step 9b's invariant #5 — NEVER
|
|
350
|
+
// produce a blocker here. The exportName cannot be inferred and falling
|
|
351
|
+
// back to file scope re-introduces red-team CRITICAL #1 (one dynamic
|
|
352
|
+
// import silenced 50 unrelated symbols). Counter only.
|
|
353
|
+
unmappedDynamicImports++;
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
let specifier;
|
|
357
|
+
try {
|
|
358
|
+
specifier = first.getLiteralValue();
|
|
359
|
+
}
|
|
226
360
|
catch {
|
|
227
|
-
|
|
361
|
+
continue;
|
|
228
362
|
}
|
|
363
|
+
const resolved = resolveDynamicImportTarget(sourceFile, specifier, canonicalize);
|
|
364
|
+
refs.push({
|
|
365
|
+
specifier,
|
|
366
|
+
resolved,
|
|
367
|
+
kind: 'dynamic-import',
|
|
368
|
+
});
|
|
229
369
|
}
|
|
230
370
|
for (const decl of sourceFile.getExportDeclarations()) {
|
|
371
|
+
// `export type { X } from './m'` is erased at compile time and must not
|
|
372
|
+
// contribute a re-export edge. Same reasoning as the import side: a
|
|
373
|
+
// type-only re-export is not evidence the runtime symbol is alive.
|
|
374
|
+
if (decl.isTypeOnly())
|
|
375
|
+
continue;
|
|
231
376
|
let specifier;
|
|
232
377
|
let resolved;
|
|
233
378
|
try {
|
|
@@ -239,22 +384,102 @@ function collectModuleEdgeRefs(sourceFile) {
|
|
|
239
384
|
catch {
|
|
240
385
|
continue;
|
|
241
386
|
}
|
|
387
|
+
// `export * as ns from './m'` — ts-morph models this distinctly from
|
|
388
|
+
// bare `export *` (which has no namespace export node). The namespace
|
|
389
|
+
// alias is a concrete local name we can scope a Producer 1 blocker
|
|
390
|
+
// against when the target is unresolved. Bare `export *` stays under
|
|
391
|
+
// `export-all` and never produces a blocker (no symbol to pin).
|
|
392
|
+
const namespaceExport = decl.getNamespaceExport();
|
|
393
|
+
if (namespaceExport) {
|
|
394
|
+
refs.push({
|
|
395
|
+
specifier,
|
|
396
|
+
resolved,
|
|
397
|
+
kind: 'namespace-reexport',
|
|
398
|
+
importedName: '*',
|
|
399
|
+
localName: namespaceExport.getName(),
|
|
400
|
+
line: namespaceExport.getStartLineNumber(),
|
|
401
|
+
});
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
242
404
|
const namedExports = decl.getNamedExports();
|
|
243
405
|
if (namedExports.length === 0) {
|
|
244
406
|
refs.push({ specifier, resolved, kind: 'export-all' });
|
|
245
407
|
continue;
|
|
246
408
|
}
|
|
247
409
|
for (const named of namedExports) {
|
|
410
|
+
// Mixed form: `export { foo, type Bar } from './m'`.
|
|
411
|
+
if (named.isTypeOnly())
|
|
412
|
+
continue;
|
|
248
413
|
refs.push({
|
|
249
414
|
specifier,
|
|
250
415
|
resolved,
|
|
251
416
|
kind: 'named-reexport',
|
|
252
417
|
importedName: named.getName(),
|
|
253
418
|
localName: named.getAliasNode()?.getText() ?? named.getName(),
|
|
419
|
+
line: named.getStartLineNumber(),
|
|
254
420
|
});
|
|
255
421
|
}
|
|
256
422
|
}
|
|
257
|
-
return refs;
|
|
423
|
+
return { refs, unmappedDynamicImports, malformedImports };
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Resolve a literal dynamic-import specifier to a SourceFile in the project.
|
|
427
|
+
* ts-morph's CallExpression has no `getModuleSpecifierSourceFile()` analogue,
|
|
428
|
+
* so this mirrors the resolution shape that static imports get for free:
|
|
429
|
+
*
|
|
430
|
+
* 1. Direct hit on the joined absolute path (already a `.ts(x)` file).
|
|
431
|
+
* 2. Extension probe: append `.ts`, `.tsx`, `.js`, `.jsx`.
|
|
432
|
+
* 3. Directory probe: `<spec>/index.ts(x)`.
|
|
433
|
+
*
|
|
434
|
+
* Returns undefined for relative specifiers that don't land on any source
|
|
435
|
+
* file under the project — those become unresolved dynamic-import edges,
|
|
436
|
+
* which step 9b's blocker logic distinguishes from non-literal cases.
|
|
437
|
+
*
|
|
438
|
+
* Bare/package specifiers (e.g. `import('react')`) are intentionally NOT
|
|
439
|
+
* resolved; the import-graph already skips node_modules at the BFS level.
|
|
440
|
+
*/
|
|
441
|
+
function resolveDynamicImportTarget(fromFile, specifier, canonicalize) {
|
|
442
|
+
if (!specifier.startsWith('.') && !specifier.startsWith('/'))
|
|
443
|
+
return undefined;
|
|
444
|
+
const project = fromFile.getProject();
|
|
445
|
+
const fromDir = fromFile.getDirectoryPath();
|
|
446
|
+
// Canonicalise the joined path so dynamic-import targets that traverse
|
|
447
|
+
// a symlink (pnpm `node_modules/.pnpm/...`) collapse to the same key
|
|
448
|
+
// ts-morph already has for the realpath form.
|
|
449
|
+
const abs = canonicalize(resolve(fromDir, specifier));
|
|
450
|
+
const direct = project.getSourceFile(abs);
|
|
451
|
+
if (direct)
|
|
452
|
+
return direct;
|
|
453
|
+
const extensionCandidates = ['.ts', '.tsx', '.js', '.jsx'];
|
|
454
|
+
for (const ext of extensionCandidates) {
|
|
455
|
+
const cand = canonicalize(abs + ext);
|
|
456
|
+
const known = project.getSourceFile(cand);
|
|
457
|
+
if (known)
|
|
458
|
+
return known;
|
|
459
|
+
if (existsSync(cand)) {
|
|
460
|
+
try {
|
|
461
|
+
return project.addSourceFileAtPath(cand);
|
|
462
|
+
}
|
|
463
|
+
catch {
|
|
464
|
+
/* unreadable candidate — fall through */
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
for (const ext of ['.ts', '.tsx']) {
|
|
469
|
+
const cand = canonicalize(resolve(abs, `index${ext}`));
|
|
470
|
+
const known = project.getSourceFile(cand);
|
|
471
|
+
if (known)
|
|
472
|
+
return known;
|
|
473
|
+
if (existsSync(cand)) {
|
|
474
|
+
try {
|
|
475
|
+
return project.addSourceFileAtPath(cand);
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
/* unreadable candidate — fall through */
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return undefined;
|
|
258
483
|
}
|
|
259
484
|
function pushUniqueEdge(edges, edge) {
|
|
260
485
|
const exists = edges.some((existing) => existing.from === edge.from &&
|
package/dist/graph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,9 +18,10 @@ export { runConceptRules } from './concept-rules/index.js';
|
|
|
18
18
|
export type { ConfidenceGraph, ConfidenceNode, ConfidenceSpec, ConfidenceSummary, DuplicateNameEntry, MultiFileConfidenceGraph, NeedsEntry, SerializedConfidenceGraph, } from './confidence.js';
|
|
19
19
|
export { buildConfidenceGraph, buildMultiFileConfidenceGraph, computeConfidenceSummary, parseConfidence, propagateConfidence, resolveBaseConfidence, serializeGraph, } from './confidence.js';
|
|
20
20
|
export { structuralDiff } from './differ.js';
|
|
21
|
+
export { evaluateReviewReports, formatReviewEvalSummary, normalizeReviewEvalManifest, type ReviewEvalCase, type ReviewEvalCaseConfig, type ReviewEvalCaseResult, type ReviewEvalExpectations, type ReviewEvalFindingExpectation, type ReviewEvalManifest, type ReviewEvalRunMetadata, type ReviewEvalSummary, summarizeReviewEvalResults, } from './eval.js';
|
|
21
22
|
export { linkToNodes, runESLint, runTSCDiagnostics, runTSCDiagnosticsFromPaths } from './external-tools.js';
|
|
22
23
|
export { buildFileContextMap, clearFileContextCache } from './file-context.js';
|
|
23
|
-
export { classifyFileRole } from './file-role.js';
|
|
24
|
+
export { classifyFileRole, classifyFileRoleByPath } from './file-role.js';
|
|
24
25
|
export { resolveImportGraph } from './graph.js';
|
|
25
26
|
export { findTsConfig, inferFromFile, inferFromSource } from './inferrer.js';
|
|
26
27
|
export type { KernLintRule } from './kern-lint.js';
|
|
@@ -34,11 +35,13 @@ export type { NormViolation } from './norm-miner.js';
|
|
|
34
35
|
export { mineNorms } from './norm-miner.js';
|
|
35
36
|
export type { ObligationType, ProofObligation } from './obligations.js';
|
|
36
37
|
export { obligationsFromNorms, obligationsFromStructure, synthesizeObligations } from './obligations.js';
|
|
38
|
+
export { applyReviewPolicyDefaults, getReviewPolicyProfile, inferReviewPolicy, type ReviewPolicyExplicitOptions, type ReviewPolicyProfile, } from './policy.js';
|
|
37
39
|
export type { PublicApiMap, PublicApiOverrides } from './public-api.js';
|
|
38
40
|
export { buildPublicApiMap, EMPTY_PUBLIC_API, expandPublicApiThroughReExports, isPublicApi, resolvePackageEntryFiles, resolveSpecifierToSrc, } from './public-api.js';
|
|
39
41
|
export { runQualityRules } from './quality-rules.js';
|
|
40
42
|
export { assignDefaultConfidence, calculateStats, checkEnforcement, dedup, formatEnforcement, formatReport, formatReportJSON, formatSARIF, formatSARIFWithMetadata, formatSARIFWithSuppressions, formatSummary, sortAndDedup, sortFindings, } from './reporter.js';
|
|
41
43
|
export { debugDetail, ReviewHealthBuilder } from './review-health.js';
|
|
44
|
+
export { applyRuleQualityCalibration, applyRuleSupersession, getRuleQualityProfile, isRulePromotedForCi, type RuleCiDefault, type RuleLifecycle, type RulePrecision, type RuleQualityIssue, type RuleQualityProfile, validateRuleQualityRegistry, } from './rule-quality.js';
|
|
42
45
|
export { CONFIDENCE_RULES, lintConfidenceGraph, lintMultiFileConfidenceGraph } from './rules/confidence.js';
|
|
43
46
|
export { actionMissingIdempotent, assumeLowTrust, branchNonExhaustive, collectUnbounded, expectRangeInverted, GROUND_LAYER_RULES, guardWithoutElse, reasonWithoutBasis, } from './rules/ground-layer.js';
|
|
44
47
|
export type { RuleInfo } from './rules/index.js';
|
|
@@ -52,8 +55,9 @@ export type { StrictMode, SuppressionDirective, SuppressionResult } from './supp
|
|
|
52
55
|
export { applySuppression, configDirectives, isConceptRule, parseDirectives } from './suppression/index.js';
|
|
53
56
|
export type { CrossFileTaintResult, ExportedFunction, TaintPath, TaintResult, TaintSink, TaintSource, } from './taint.js';
|
|
54
57
|
export { analyzeTaint, analyzeTaintCrossFile, buildExportMap, buildImportMap, crossFileTaintToFindings, isSanitizerSufficient, taintToFindings, } from './taint.js';
|
|
58
|
+
export { buildReviewTelemetry, formatReviewTelemetrySummary, parseReviewTelemetryJsonl, type ReviewTelemetryFinding, type ReviewTelemetryOptions, type ReviewTelemetryRule, type ReviewTelemetryRuleSummary, type ReviewTelemetrySnapshot, type ReviewTelemetrySummary, readReviewTelemetrySnapshots, summarizeReviewTelemetry, type WriteReviewTelemetryOptions, type WriteReviewTelemetryResult, writeReviewTelemetrySnapshot, } from './telemetry.js';
|
|
55
59
|
export { detectTemplates } from './template-detector.js';
|
|
56
|
-
export type { AnalysisContext, Confidence, EnforceResult, FileContext, FileRole, GraphEdge, GraphEdgeKind, GraphFile, GraphOptions, GraphResult, InferResult, ReviewConfig, ReviewFinding, ReviewHealth, ReviewHealthEntry, ReviewHealthKind, ReviewHealthSubsystem, ReviewReport, ReviewRule, ReviewStats, RuleContext, RuntimeBoundary, SourceSpan, TemplateMatch, } from './types.js';
|
|
60
|
+
export type { AnalysisContext, CalibrationStage, Confidence, EnforceResult, FileContext, FileRole, GraphEdge, GraphEdgeKind, GraphFile, GraphOptions, GraphResult, InferResult, ReviewConfig, ReviewFinding, ReviewHealth, ReviewHealthEntry, ReviewHealthKind, ReviewHealthSubsystem, ReviewPolicy, ReviewReport, ReviewRule, ReviewStats, ReviewTelemetryConfig, RootCause, RuleContext, RuntimeBoundary, SourceSpan, TemplateMatch, } from './types.js';
|
|
57
61
|
export { createFingerprint } from './types.js';
|
|
58
62
|
import { clearReviewCache } from './cache.js';
|
|
59
63
|
export type { ImplRoute, SpecCheckResult, SpecContract, SpecViolation, ViolationKind } from './spec-checker.js';
|
|
@@ -119,6 +123,10 @@ export declare function reviewKernSource(source: string, filePath?: string, _con
|
|
|
119
123
|
export declare function reviewPythonSource(source: string, filePath?: string, config?: ReviewConfig): ReviewReport;
|
|
120
124
|
/**
|
|
121
125
|
* Review all .ts/.tsx/.py files in a directory.
|
|
126
|
+
*
|
|
127
|
+
* Honors the project's .gitignore by skipping untracked-and-ignored files —
|
|
128
|
+
* tracked artifacts are always reviewed even when their directory matches
|
|
129
|
+
* .gitignore, so published `dist/*.gen.ts` and similar do not slip through.
|
|
122
130
|
*/
|
|
123
131
|
export declare function reviewDirectory(dirPath: string, recursive?: boolean, config?: ReviewConfig): ReviewReport[];
|
|
124
132
|
/**
|