@aiready/context-analyzer 0.21.26 → 0.21.27
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/.turbo/turbo-build.log +32 -25
- package/.turbo/turbo-test.log +51 -87
- package/coverage/clover.xml +392 -1878
- package/coverage/coverage-final.json +15 -19
- package/coverage/index.html +48 -63
- package/coverage/src/analyzers/index.html +21 -21
- package/coverage/src/analyzers/python-context.ts.html +96 -96
- package/coverage/src/ast-utils.ts.html +34 -109
- package/coverage/src/classifier.ts.html +104 -104
- package/coverage/src/classify/classification-patterns.ts.html +1 -1
- package/coverage/src/classify/file-classifiers.ts.html +1 -1
- package/coverage/src/classify/index.html +1 -1
- package/coverage/src/cluster-detector.ts.html +72 -72
- package/coverage/src/defaults.ts.html +1 -1
- package/coverage/src/graph-builder.ts.html +131 -131
- package/coverage/src/index.html +101 -116
- package/coverage/src/index.ts.html +2 -2
- package/coverage/src/issue-analyzer.ts.html +32 -83
- package/coverage/src/mapper.ts.html +20 -2
- package/coverage/src/metrics.ts.html +127 -130
- package/coverage/src/orchestrator.ts.html +13 -13
- package/coverage/src/provider.ts.html +19 -19
- package/coverage/src/remediation.ts.html +59 -59
- package/coverage/src/report/console-report.ts.html +2 -2
- package/coverage/src/report/html-report.ts.html +60 -84
- package/coverage/src/report/index.html +7 -7
- package/coverage/src/report/interactive-setup.ts.html +1 -1
- package/coverage/src/scoring.ts.html +62 -62
- package/coverage/src/semantic/co-usage.ts.html +1 -1
- package/coverage/src/semantic/consolidation.ts.html +1 -1
- package/coverage/src/semantic/domain-inference.ts.html +1 -1
- package/coverage/src/semantic/index.html +1 -1
- package/coverage/src/semantic/type-graph.ts.html +1 -1
- package/coverage/src/summary.ts.html +67 -67
- package/coverage/src/types.ts.html +1 -1
- package/coverage/src/utils/dependency-graph-utils.ts.html +41 -41
- package/coverage/src/utils/index.html +21 -21
- package/coverage/src/utils/string-utils.ts.html +1 -1
- package/dist/chunk-22ZO4EKZ.mjs +1297 -0
- package/dist/chunk-4U4LDWGF.mjs +360 -0
- package/dist/chunk-BA7QGUHN.mjs +1722 -0
- package/dist/chunk-BCEZGRXI.mjs +1297 -0
- package/dist/chunk-BQCISA2F.mjs +91 -0
- package/dist/chunk-EMYD7NS6.mjs +137 -0
- package/dist/chunk-EWFR366Y.mjs +1740 -0
- package/dist/chunk-FO6YT6RG.mjs +1751 -0
- package/dist/chunk-J3SZQZNU.mjs +221 -0
- package/dist/chunk-OZE3FVZT.mjs +1089 -0
- package/dist/chunk-WHB7QI7N.mjs +91 -0
- package/dist/cli-action-CXIHOVAC.mjs +95 -0
- package/dist/cli-action-SA7SCYNV.mjs +95 -0
- package/dist/cli-action-YAJOJCXJ.mjs +95 -0
- package/dist/cli.js +688 -566
- package/dist/cli.mjs +4 -88
- package/dist/index.js +889 -773
- package/dist/index.mjs +21 -14
- package/dist/orchestrator-3L3NAZYP.mjs +10 -0
- package/dist/orchestrator-MONOZHVW.mjs +10 -0
- package/dist/orchestrator-ZR7JSKWI.mjs +10 -0
- package/dist/summary-7PZVW72O.mjs +7 -0
- package/dist/summary-LKUCJAIS.mjs +7 -0
- package/package.json +2 -2
- package/src/__tests__/analyzer.test.ts +1 -1
- package/src/__tests__/enhanced-cohesion.test.ts +4 -1
- package/src/__tests__/orchestrator.test.ts +19 -4
- package/src/__tests__/python-context.test.ts +6 -0
- package/src/__tests__/report/html-report.test.ts +8 -2
- package/src/ast-utils.ts +1 -26
- package/src/cli-definition.ts +4 -2
- package/src/issue-analyzer.ts +4 -19
- package/src/metrics.ts +1 -2
- package/src/provider.ts +4 -4
- package/src/report/html-report.ts +43 -59
- package/coverage/dist/chunk-64U3PNO3.mjs.html +0 -367
- package/coverage/dist/chunk-J3MUOWHC.mjs.html +0 -5326
- package/coverage/dist/index.html +0 -146
- package/coverage/dist/index.mjs.html +0 -1396
- package/coverage/src/analyzer.ts.html +0 -88
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">83.63% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>46/55</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">52.38% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>11/21</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">72% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>18/25</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">82.6% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>46
|
|
49
|
+
<span class='fraction'>38/46</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -218,53 +218,53 @@
|
|
|
218
218
|
<span class="cline-any cline-neutral"> </span>
|
|
219
219
|
<span class="cline-any cline-neutral"> </span>
|
|
220
220
|
<span class="cline-any cline-neutral"> </span>
|
|
221
|
-
<span class="cline-any cline-no"> </span>
|
|
222
221
|
<span class="cline-any cline-neutral"> </span>
|
|
223
222
|
<span class="cline-any cline-neutral"> </span>
|
|
224
|
-
<span class="cline-any cline-no"> </span>
|
|
225
|
-
<span class="cline-any cline-yes">1x</span>
|
|
226
223
|
<span class="cline-any cline-neutral"> </span>
|
|
227
224
|
<span class="cline-any cline-neutral"> </span>
|
|
228
|
-
<span class="cline-any cline-no"> </span>
|
|
229
|
-
<span class="cline-any cline-yes">1x</span>
|
|
230
225
|
<span class="cline-any cline-yes">1x</span>
|
|
231
226
|
<span class="cline-any cline-neutral"> </span>
|
|
227
|
+
<span class="cline-any cline-neutral"> </span>
|
|
232
228
|
<span class="cline-any cline-no"> </span>
|
|
229
|
+
<span class="cline-any cline-neutral"> </span>
|
|
230
|
+
<span class="cline-any cline-neutral"> </span>
|
|
231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
233
233
|
<span class="cline-any cline-yes">1x</span>
|
|
234
234
|
<span class="cline-any cline-yes">1x</span>
|
|
235
|
-
<span class="cline-any cline-
|
|
235
|
+
<span class="cline-any cline-neutral"> </span>
|
|
236
236
|
<span class="cline-any cline-yes">1x</span>
|
|
237
237
|
<span class="cline-any cline-yes">1x</span>
|
|
238
238
|
<span class="cline-any cline-neutral"> </span>
|
|
239
|
-
<span class="cline-any cline-
|
|
239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
240
240
|
<span class="cline-any cline-neutral"> </span>
|
|
241
241
|
<span class="cline-any cline-yes">1x</span>
|
|
242
242
|
<span class="cline-any cline-yes">1x</span>
|
|
243
243
|
<span class="cline-any cline-no"> </span>
|
|
244
|
-
<span class="cline-any cline-
|
|
245
|
-
<span class="cline-any cline-yes">1x</span>
|
|
246
|
-
<span class="cline-any cline-no"> </span>
|
|
247
|
-
<span class="cline-any cline-no"> </span>
|
|
244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
248
245
|
<span class="cline-any cline-yes">1x</span>
|
|
246
|
+
<span class="cline-any cline-neutral"> </span>
|
|
247
|
+
<span class="cline-any cline-neutral"> </span>
|
|
249
248
|
<span class="cline-any cline-yes">1x</span>
|
|
250
249
|
<span class="cline-any cline-yes">1x</span>
|
|
251
250
|
<span class="cline-any cline-yes">1x</span>
|
|
251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
252
252
|
<span class="cline-any cline-yes">1x</span>
|
|
253
253
|
<span class="cline-any cline-yes">1x</span>
|
|
254
254
|
<span class="cline-any cline-no"> </span>
|
|
255
|
-
<span class="cline-any cline-no"> </span>
|
|
256
|
-
<span class="cline-any cline-yes">1x</span>
|
|
257
|
-
<span class="cline-any cline-yes">1x</span>
|
|
258
|
-
<span class="cline-any cline-yes">1x</span>
|
|
259
255
|
<span class="cline-any cline-neutral"> </span>
|
|
260
256
|
<span class="cline-any cline-yes">1x</span>
|
|
261
257
|
<span class="cline-any cline-yes">1x</span>
|
|
258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
262
260
|
<span class="cline-any cline-yes">1x</span>
|
|
263
261
|
<span class="cline-any cline-yes">1x</span>
|
|
264
262
|
<span class="cline-any cline-yes">1x</span>
|
|
265
263
|
<span class="cline-any cline-yes">1x</span>
|
|
266
264
|
<span class="cline-any cline-yes">1x</span>
|
|
267
265
|
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
268
268
|
<span class="cline-any cline-yes">1x</span>
|
|
269
269
|
<span class="cline-any cline-neutral"> </span>
|
|
270
270
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -272,45 +272,45 @@
|
|
|
272
272
|
<span class="cline-any cline-neutral"> </span>
|
|
273
273
|
<span class="cline-any cline-neutral"> </span>
|
|
274
274
|
<span class="cline-any cline-neutral"> </span>
|
|
275
|
-
<span class="cline-any cline-no"> </span>
|
|
276
275
|
<span class="cline-any cline-neutral"> </span>
|
|
277
|
-
<span class="cline-any cline-
|
|
278
|
-
<span class="cline-any cline-no"> </span>
|
|
276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
279
277
|
<span class="cline-any cline-no"> </span>
|
|
280
278
|
<span class="cline-any cline-neutral"> </span>
|
|
281
279
|
<span class="cline-any cline-neutral"> </span>
|
|
282
280
|
<span class="cline-any cline-neutral"> </span>
|
|
283
281
|
<span class="cline-any cline-neutral"> </span>
|
|
284
282
|
<span class="cline-any cline-neutral"> </span>
|
|
285
|
-
<span class="cline-any cline-no"> </span>
|
|
286
|
-
<span class="cline-any cline-yes">1x</span>
|
|
287
283
|
<span class="cline-any cline-neutral"> </span>
|
|
288
|
-
<span class="cline-any cline-yes">1x</span>
|
|
289
284
|
<span class="cline-any cline-neutral"> </span>
|
|
290
|
-
<span class="cline-any cline-
|
|
291
|
-
<span class="cline-any cline-
|
|
285
|
+
<span class="cline-any cline-neutral"> </span>
|
|
286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
292
288
|
<span class="cline-any cline-yes">1x</span>
|
|
293
289
|
<span class="cline-any cline-neutral"> </span>
|
|
294
290
|
<span class="cline-any cline-neutral"> </span>
|
|
295
|
-
<span class="cline-any cline-no"> </span>
|
|
296
|
-
<span class="cline-any cline-no"> </span>
|
|
297
|
-
<span class="cline-any cline-no"> </span>
|
|
298
291
|
<span class="cline-any cline-yes">1x</span>
|
|
299
292
|
<span class="cline-any cline-no"> </span>
|
|
293
|
+
<span class="cline-any cline-neutral"> </span>
|
|
294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
295
|
+
<span class="cline-any cline-neutral"> </span>
|
|
296
|
+
<span class="cline-any cline-neutral"> </span>
|
|
297
|
+
<span class="cline-any cline-neutral"> </span>
|
|
298
|
+
<span class="cline-any cline-yes">1x</span>
|
|
299
|
+
<span class="cline-any cline-neutral"> </span>
|
|
300
300
|
<span class="cline-any cline-yes">1x</span>
|
|
301
301
|
<span class="cline-any cline-yes">1x</span>
|
|
302
302
|
<span class="cline-any cline-no"> </span>
|
|
303
303
|
<span class="cline-any cline-neutral"> </span>
|
|
304
|
-
<span class="cline-any cline-
|
|
304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
305
305
|
<span class="cline-any cline-yes">1x</span>
|
|
306
306
|
<span class="cline-any cline-yes">1x</span>
|
|
307
|
-
<span class="cline-any cline-
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
308
|
<span class="cline-any cline-yes">1x</span>
|
|
309
309
|
<span class="cline-any cline-yes">1x</span>
|
|
310
310
|
<span class="cline-any cline-neutral"> </span>
|
|
311
311
|
<span class="cline-any cline-yes">1x</span>
|
|
312
312
|
<span class="cline-any cline-yes">1x</span>
|
|
313
|
-
<span class="cline-any cline-
|
|
313
|
+
<span class="cline-any cline-neutral"> </span>
|
|
314
314
|
<span class="cline-any cline-neutral"> </span>
|
|
315
315
|
<span class="cline-any cline-neutral"> </span>
|
|
316
316
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -354,14 +354,14 @@ import { calculatePathEntropy } from './metrics';
|
|
|
354
354
|
/**
|
|
355
355
|
* Generate summary of context analysis results
|
|
356
356
|
*
|
|
357
|
-
* @param
|
|
357
|
+
* @param results - Array of individual file analysis results.
|
|
358
358
|
* @param options - Optional scan configuration for context extraction.
|
|
359
359
|
* @returns A consolidated summary of the entire context scan.
|
|
360
360
|
*/
|
|
361
|
-
export function
|
|
361
|
+
export function generateSummary(
|
|
362
362
|
results: ContextAnalysisResult[],
|
|
363
363
|
options: any = {}
|
|
364
|
-
): ContextSummary {
|
|
364
|
+
): ContextSummary {
|
|
365
365
|
const config = options
|
|
366
366
|
? Object.fromEntries(
|
|
367
367
|
Object.entries(options).filter(
|
|
@@ -369,33 +369,33 @@ export function g<span class="cstat-no" title="statement not covered" >enerateSu
|
|
|
369
369
|
)
|
|
370
370
|
)
|
|
371
371
|
: <span class="branch-1 cbranch-no" title="branch not covered" >{};</span>
|
|
372
|
-
|
|
372
|
+
|
|
373
373
|
const totalFiles = results.length;
|
|
374
374
|
const totalTokens = results.reduce((sum, r) => sum + r.tokenCost, 0);
|
|
375
|
-
const
|
|
375
|
+
const avgContextBudget =
|
|
376
376
|
totalFiles > 0
|
|
377
377
|
? results.reduce((sum, r) => sum + r.contextBudget, 0) / totalFiles
|
|
378
378
|
: <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
|
|
379
|
-
|
|
379
|
+
|
|
380
380
|
// Find deep files
|
|
381
381
|
const deepFiles = results
|
|
382
382
|
.filter((r) => r.importDepth > 5)
|
|
383
|
-
|
|
384
|
-
|
|
383
|
+
.map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, depth: r.importDepth }))</span>;
|
|
384
|
+
|
|
385
385
|
const maxImportDepth = Math.max(0, ...results.map((r) => r.importDepth));
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
386
|
+
|
|
387
|
+
// Find fragmented modules (clusters)
|
|
388
|
+
const moduleMap = new Map<string, ContextAnalysisResult[]>();
|
|
389
389
|
results.forEach((r) => {
|
|
390
390
|
const parts = r.file.split('/');
|
|
391
391
|
// Try to identify domain/module (e.g., packages/core, src/utils)
|
|
392
392
|
let domain = 'root';
|
|
393
393
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (parts.length > 2) {
|
|
394
|
-
<span class="cstat-no" title="statement not covered" > domain = parts.slice(0, 2).join('/')
|
|
395
|
-
|
|
394
|
+
<span class="cstat-no" title="statement not covered" > domain = parts.slice(0, 2).join('/');</span>
|
|
395
|
+
}
|
|
396
396
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (!moduleMap.has(domain)) moduleMap.set(domain, []);
|
|
397
397
|
moduleMap.get(domain)!.push(r);
|
|
398
|
-
})
|
|
398
|
+
});
|
|
399
399
|
|
|
400
400
|
const fragmentedModules: ModuleCluster[] = [];
|
|
401
401
|
moduleMap.forEach((files, domain) => {
|
|
@@ -412,45 +412,45 @@ export function g<span class="cstat-no" title="statement not covered" >enerateSu
|
|
|
412
412
|
domain,
|
|
413
413
|
files: filePaths,
|
|
414
414
|
fragmentationScore,
|
|
415
|
-
|
|
415
|
+
totalTokens: clusterTokens,
|
|
416
416
|
avgCohesion:
|
|
417
417
|
files.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, f) => <span class="cstat-no" title="statement not covered" >sum + f.cohesionScore, 0</span>) / files.length,
|
|
418
|
-
|
|
419
|
-
|
|
418
|
+
suggestedStructure: {
|
|
419
|
+
targetFiles: Math.ceil(files.length / 2),
|
|
420
420
|
consolidationPlan: [
|
|
421
421
|
`Consolidate ${files.length} files in ${domain} into fewer modules`,
|
|
422
422
|
],
|
|
423
423
|
},
|
|
424
424
|
});
|
|
425
|
-
|
|
425
|
+
}
|
|
426
426
|
});
|
|
427
427
|
|
|
428
428
|
fragmentedModules.sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >b.fragmentationScore - a.fragmentationScore)</span>;
|
|
429
429
|
|
|
430
|
-
const avgFragmentation
|
|
430
|
+
const avgFragmentation =
|
|
431
431
|
fragmentedModules.length > 0
|
|
432
432
|
? <span class="branch-0 cbranch-no" title="branch not covered" >fragmentedModules.reduce(<span class="fstat-no" title="function not covered" >(s</span>um, m) => <span class="cstat-no" title="statement not covered" >sum + m.fragmentationScore, 0</span>) /</span>
|
|
433
433
|
fragmentedModules.length
|
|
434
434
|
: 0;
|
|
435
|
-
|
|
436
|
-
// Cohesion
|
|
437
|
-
const avgCohesion
|
|
435
|
+
|
|
436
|
+
// Cohesion
|
|
437
|
+
const avgCohesion =
|
|
438
438
|
results.reduce((sum, r) => sum + r.cohesionScore, 0) / (totalFiles || <span class="branch-1 cbranch-no" title="branch not covered" >1);</span>
|
|
439
|
-
|
|
440
|
-
const
|
|
439
|
+
|
|
440
|
+
const lowCohesionFiles = results
|
|
441
441
|
.filter((r) => r.cohesionScore < 0.4)
|
|
442
442
|
.map(<span class="fstat-no" title="function not covered" >(r</span>) => (<span class="cstat-no" title="statement not covered" >{ file: r.file, score: r.cohesionScore }))</span>;
|
|
443
443
|
|
|
444
|
-
// Issues
|
|
445
|
-
const
|
|
444
|
+
// Issues
|
|
445
|
+
const criticalIssues = results.filter(
|
|
446
446
|
(r) => r.severity === 'critical'
|
|
447
|
-
).length
|
|
447
|
+
).length;
|
|
448
448
|
const majorIssues = results.filter((r) => r.severity === 'major').length;
|
|
449
449
|
const minorIssues = results.filter((r) => r.severity === 'minor').length;
|
|
450
450
|
|
|
451
451
|
const totalPotentialSavings = results.reduce(
|
|
452
452
|
(sum, r) => sum + (r.potentialSavings || 0),
|
|
453
|
-
|
|
453
|
+
0
|
|
454
454
|
);
|
|
455
455
|
|
|
456
456
|
const topExpensiveFiles = [...results]
|
|
@@ -490,7 +490,7 @@ export function g<span class="cstat-no" title="statement not covered" >enerateSu
|
|
|
490
490
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
491
491
|
Code coverage generated by
|
|
492
492
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
493
|
-
at 2026-03-
|
|
493
|
+
at 2026-03-24T11:20:59.666Z
|
|
494
494
|
</div>
|
|
495
495
|
<script src="../prettify.js"></script>
|
|
496
496
|
<script>
|
|
@@ -658,7 +658,7 @@ export interface TypeDependency {
|
|
|
658
658
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
659
659
|
Code coverage generated by
|
|
660
660
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
661
|
-
at 2026-03-
|
|
661
|
+
at 2026-03-24T11:20:59.666Z
|
|
662
662
|
</div>
|
|
663
663
|
<script src="../prettify.js"></script>
|
|
664
664
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">88.88% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>56/63</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">75.75% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>25/33</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/6</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">91.22% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>52/57</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -199,10 +199,10 @@
|
|
|
199
199
|
<span class="cline-any cline-neutral"> </span>
|
|
200
200
|
<span class="cline-any cline-neutral"> </span>
|
|
201
201
|
<span class="cline-any cline-neutral"> </span>
|
|
202
|
-
<span class="cline-any cline-yes">
|
|
202
|
+
<span class="cline-any cline-yes">17x</span>
|
|
203
203
|
<span class="cline-any cline-neutral"> </span>
|
|
204
|
-
<span class="cline-any cline-yes">
|
|
205
|
-
<span class="cline-any cline-yes">
|
|
204
|
+
<span class="cline-any cline-yes">16x</span>
|
|
205
|
+
<span class="cline-any cline-yes">16x</span>
|
|
206
206
|
<span class="cline-any cline-neutral"> </span>
|
|
207
207
|
<span class="cline-any cline-yes">6x</span>
|
|
208
208
|
<span class="cline-any cline-yes">6x</span>
|
|
@@ -284,12 +284,12 @@
|
|
|
284
284
|
<span class="cline-any cline-neutral"> </span>
|
|
285
285
|
<span class="cline-any cline-neutral"> </span>
|
|
286
286
|
<span class="cline-any cline-neutral"> </span>
|
|
287
|
-
<span class="cline-any cline-
|
|
288
|
-
<span class="cline-any cline-
|
|
289
|
-
<span class="cline-any cline-
|
|
287
|
+
<span class="cline-any cline-yes">1x</span>
|
|
288
|
+
<span class="cline-any cline-yes">1x</span>
|
|
289
|
+
<span class="cline-any cline-yes">1x</span>
|
|
290
290
|
<span class="cline-any cline-neutral"> </span>
|
|
291
291
|
<span class="cline-any cline-neutral"> </span>
|
|
292
|
-
<span class="cline-any cline-
|
|
292
|
+
<span class="cline-any cline-yes">1x</span>
|
|
293
293
|
<span class="cline-any cline-no"> </span>
|
|
294
294
|
<span class="cline-any cline-no"> </span>
|
|
295
295
|
<span class="cline-any cline-no"> </span>
|
|
@@ -297,23 +297,23 @@
|
|
|
297
297
|
<span class="cline-any cline-no"> </span>
|
|
298
298
|
<span class="cline-any cline-neutral"> </span>
|
|
299
299
|
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-
|
|
300
|
+
<span class="cline-any cline-yes">1x</span>
|
|
301
301
|
<span class="cline-any cline-neutral"> </span>
|
|
302
|
-
<span class="cline-any cline-
|
|
303
|
-
<span class="cline-any cline-
|
|
302
|
+
<span class="cline-any cline-yes">1x</span>
|
|
303
|
+
<span class="cline-any cline-yes">1x</span>
|
|
304
304
|
<span class="cline-any cline-neutral"> </span>
|
|
305
|
-
<span class="cline-any cline-
|
|
306
|
-
<span class="cline-any cline-
|
|
307
|
-
<span class="cline-any cline-
|
|
305
|
+
<span class="cline-any cline-yes">1x</span>
|
|
306
|
+
<span class="cline-any cline-yes">1x</span>
|
|
307
|
+
<span class="cline-any cline-yes">1x</span>
|
|
308
308
|
<span class="cline-any cline-no"> </span>
|
|
309
309
|
<span class="cline-any cline-neutral"> </span>
|
|
310
310
|
<span class="cline-any cline-neutral"> </span>
|
|
311
311
|
<span class="cline-any cline-neutral"> </span>
|
|
312
|
-
<span class="cline-any cline-
|
|
312
|
+
<span class="cline-any cline-yes">1x</span>
|
|
313
313
|
<span class="cline-any cline-neutral"> </span>
|
|
314
314
|
<span class="cline-any cline-neutral"> </span>
|
|
315
|
-
<span class="cline-any cline-
|
|
316
|
-
<span class="cline-any cline-
|
|
315
|
+
<span class="cline-any cline-yes">1x</span>
|
|
316
|
+
<span class="cline-any cline-yes">1x</span>
|
|
317
317
|
<span class="cline-any cline-neutral"> </span>
|
|
318
318
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
319
319
|
* Shared dependency graph utilities used by context analyzers.
|
|
@@ -406,16 +406,16 @@ export function detectGraphCycles(edges: Map<string, Set<string>>):
|
|
|
406
406
|
return cycles;
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
-
export function
|
|
409
|
+
export function detectGraphCyclesFromFile(
|
|
410
410
|
file: string,
|
|
411
411
|
edges: Map<string, Set<string>>
|
|
412
412
|
): string[][] {
|
|
413
|
-
const cycles: string[][] =
|
|
414
|
-
const visited =
|
|
415
|
-
const recursionStack =
|
|
413
|
+
const cycles: string[][] = [];
|
|
414
|
+
const visited = new Set<string>();
|
|
415
|
+
const recursionStack = new Set<string>();
|
|
416
416
|
|
|
417
|
-
function
|
|
418
|
-
<span class="
|
|
417
|
+
function dfs(current: string, path: string[]): void {
|
|
418
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (recursionStack.has(current)) {
|
|
419
419
|
const cycleStart = <span class="cstat-no" title="statement not covered" >path.indexOf(current);</span>
|
|
420
420
|
<span class="cstat-no" title="statement not covered" > if (cycleStart !== -1) {</span>
|
|
421
421
|
<span class="cstat-no" title="statement not covered" > cycles.push([...path.slice(cycleStart), current]);</span>
|
|
@@ -423,23 +423,23 @@ export function <span class="fstat-no" title="function not covered" >detectGraph
|
|
|
423
423
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
-
<span class="
|
|
426
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (visited.has(current)) <span class="cstat-no" title="statement not covered" >return;</span>
|
|
427
427
|
|
|
428
|
-
|
|
429
|
-
|
|
428
|
+
visited.add(current);
|
|
429
|
+
recursionStack.add(current);
|
|
430
430
|
|
|
431
|
-
const dependencies =
|
|
432
|
-
<span class="
|
|
433
|
-
|
|
431
|
+
const dependencies = edges.get(current);
|
|
432
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (dependencies) {
|
|
433
|
+
for (const dep of dependencies) {
|
|
434
434
|
<span class="cstat-no" title="statement not covered" > dfs(dep, [...path, current]);</span>
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
|
|
438
|
-
|
|
438
|
+
recursionStack.delete(current);
|
|
439
439
|
}
|
|
440
440
|
|
|
441
|
-
|
|
442
|
-
|
|
441
|
+
dfs(file, []);
|
|
442
|
+
return cycles;
|
|
443
443
|
}
|
|
444
444
|
</pre></td></tr></table></pre>
|
|
445
445
|
|
|
@@ -448,7 +448,7 @@ export function <span class="fstat-no" title="function not covered" >detectGraph
|
|
|
448
448
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
449
449
|
Code coverage generated by
|
|
450
450
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
451
|
-
at 2026-03-
|
|
451
|
+
at 2026-03-24T11:20:59.666Z
|
|
452
452
|
</div>
|
|
453
453
|
<script src="../../prettify.js"></script>
|
|
454
454
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">86.3% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>63/73</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">74.41% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>32/43</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>7/7</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">92.06% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>58/63</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<div class="pad1">
|
|
66
66
|
<table class="coverage-summary">
|
|
67
67
|
<thead>
|
|
@@ -79,18 +79,18 @@
|
|
|
79
79
|
</tr>
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
|
-
<td class="file
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
82
|
+
<td class="file high" data-value="dependency-graph-utils.ts"><a href="dependency-graph-utils.ts.html">dependency-graph-utils.ts</a></td>
|
|
83
|
+
<td data-value="88.88" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="63" class="abs
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="33" class="abs medium">
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="6" class="abs
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="57" class="abs
|
|
86
|
+
<td data-value="88.88" class="pct high">88.88%</td>
|
|
87
|
+
<td data-value="63" class="abs high">56/63</td>
|
|
88
|
+
<td data-value="75.75" class="pct medium">75.75%</td>
|
|
89
|
+
<td data-value="33" class="abs medium">25/33</td>
|
|
90
|
+
<td data-value="100" class="pct high">100%</td>
|
|
91
|
+
<td data-value="6" class="abs high">6/6</td>
|
|
92
|
+
<td data-value="91.22" class="pct high">91.22%</td>
|
|
93
|
+
<td data-value="57" class="abs high">52/57</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
117
|
Code coverage generated by
|
|
118
118
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
-
at 2026-03-
|
|
119
|
+
at 2026-03-24T11:20:59.666Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="../../prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -133,7 +133,7 @@ export function singularize(word: string): string {
|
|
|
133
133
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
134
134
|
Code coverage generated by
|
|
135
135
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
136
|
-
at 2026-03-
|
|
136
|
+
at 2026-03-24T11:20:59.666Z
|
|
137
137
|
</div>
|
|
138
138
|
<script src="../../prettify.js"></script>
|
|
139
139
|
<script>
|