@mergesignal/shared 0.8.0 → 0.8.1
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/narrativePresentation.d.ts +3 -1
- package/dist/narrativePresentation.d.ts.map +1 -1
- package/dist/narrativePresentation.js +13 -1
- package/dist/presentation/presentation.test.js +28 -0
- package/dist/presentation/presenters/presentScanDetails.d.ts.map +1 -1
- package/dist/presentation/presenters/presentScanDetails.js +2 -1
- package/package.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { ScanNarrativeFacts } from "./scanNarrativeFacts.js";
|
|
1
|
+
import type { NarrativePackageUsage, ScanNarrativeFacts } from "./scanNarrativeFacts.js";
|
|
2
|
+
/** Deduplicated union of wire usage path buckets — matches reachability/linkage semantics. */
|
|
3
|
+
export declare function normalizedPackageUsagePaths(row: NarrativePackageUsage): string[];
|
|
2
4
|
export type SummarizePackageUsageOptions = {
|
|
3
5
|
maxPaths?: number;
|
|
4
6
|
maxPackages?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"narrativePresentation.d.ts","sourceRoot":"","sources":["../src/narrativePresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"narrativePresentation.d.ts","sourceRoot":"","sources":["../src/narrativePresentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import { scanSurfaceCopy } from "./scanSurfaceCopy.js";
|
|
2
|
+
/** Deduplicated union of wire usage path buckets — matches reachability/linkage semantics. */
|
|
3
|
+
export function normalizedPackageUsagePaths(row) {
|
|
4
|
+
const paths = [];
|
|
5
|
+
const seen = new Set();
|
|
6
|
+
for (const p of [...row.paths, ...row.criticalPaths, ...row.files]) {
|
|
7
|
+
if (!p || seen.has(p))
|
|
8
|
+
continue;
|
|
9
|
+
seen.add(p);
|
|
10
|
+
paths.push(p);
|
|
11
|
+
}
|
|
12
|
+
return paths;
|
|
13
|
+
}
|
|
2
14
|
export function selectPrimaryChangedPackage(facts) {
|
|
3
15
|
return facts.changedPackages.primary;
|
|
4
16
|
}
|
|
@@ -28,7 +40,7 @@ export function summarizePackageUsage(facts, options = {}) {
|
|
|
28
40
|
const packageNames = [];
|
|
29
41
|
for (const row of rows) {
|
|
30
42
|
packageNames.push(row.packageName);
|
|
31
|
-
const rowPaths =
|
|
43
|
+
const rowPaths = normalizedPackageUsagePaths(row);
|
|
32
44
|
pathCount += rowPaths.length;
|
|
33
45
|
for (const p of rowPaths) {
|
|
34
46
|
if (pathSamples.length >= maxPaths)
|
|
@@ -6,6 +6,7 @@ import { presentGitHubCheckRun } from "./presenters/presentGitHubCheckRun.js";
|
|
|
6
6
|
import { presentGitHubPrComment } from "./presenters/presentGitHubPrComment.js";
|
|
7
7
|
import { presentCliScanSummary } from "./presenters/presentCliScanSummary.js";
|
|
8
8
|
import { scanResultFastifyRuntime, scanResultLimitedContext, scanResultTypescriptPatch, } from "./fixtures/scanResultFixtures.js";
|
|
9
|
+
import { scanResultEslint } from "./fixtures/presentationPersonaFixtures.js";
|
|
9
10
|
const SCAN_ID = "22222222-2222-4222-8222-222222222222";
|
|
10
11
|
const ORIGIN = "https://app.example.com";
|
|
11
12
|
describe("buildScanPresentationBundle", () => {
|
|
@@ -69,6 +70,33 @@ describe("presentDashboardCard personas", () => {
|
|
|
69
70
|
expect(card.verification.length).toBe(0);
|
|
70
71
|
});
|
|
71
72
|
});
|
|
73
|
+
describe("presentScanDetails usage paths", () => {
|
|
74
|
+
it("maps wire usage.files into detailPresentation.usage.items[].paths", () => {
|
|
75
|
+
const bundle = buildScanPresentationBundle({
|
|
76
|
+
result: scanResultEslint,
|
|
77
|
+
pipelineStatus: "done",
|
|
78
|
+
});
|
|
79
|
+
const details = presentScanDetails(bundle, { scanId: SCAN_ID });
|
|
80
|
+
const eslintUsage = details.usage?.items.find((item) => item.packageName === "eslint");
|
|
81
|
+
expect(eslintUsage).toBeDefined();
|
|
82
|
+
expect(eslintUsage.paths).toEqual([".eslintrc.cjs"]);
|
|
83
|
+
expect(bundle.facts.packageUsage[0]?.paths).toEqual([]);
|
|
84
|
+
expect(bundle.facts.packageUsage[0]?.files).toEqual([".eslintrc.cjs"]);
|
|
85
|
+
});
|
|
86
|
+
it("deduplicates paths across paths, criticalPaths, and files buckets", () => {
|
|
87
|
+
const bundle = buildScanPresentationBundle({
|
|
88
|
+
result: scanResultFastifyRuntime,
|
|
89
|
+
pipelineStatus: "done",
|
|
90
|
+
});
|
|
91
|
+
const details = presentScanDetails(bundle, { scanId: SCAN_ID });
|
|
92
|
+
const fastifyUsage = details.usage?.items.find((item) => item.packageName === "fastify");
|
|
93
|
+
expect(fastifyUsage).toBeDefined();
|
|
94
|
+
expect(fastifyUsage.paths.length).toBeGreaterThan(0);
|
|
95
|
+
expect(fastifyUsage.paths).toContain("apps/api/src/server.ts");
|
|
96
|
+
expect(fastifyUsage.paths).toContain("apps/api/src/middleware/auth.ts");
|
|
97
|
+
expect(new Set(fastifyUsage.paths).size).toBe(fastifyUsage.paths.length);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
72
100
|
describe("presentation parity across surfaces", () => {
|
|
73
101
|
it("same bundle drives card, details, GitHub, CLI with identical profile", () => {
|
|
74
102
|
const bundle = buildScanPresentationBundle({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentScanDetails.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanDetails.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"presentScanDetails.d.ts","sourceRoot":"","sources":["../../../src/presentation/presenters/presentScanDetails.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAGzF,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAmDF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,yBAAyB,GAC7B,uBAAuB,CAwEzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MERGE_CONCERN_LABELS } from "../../assessmentLabels.js";
|
|
2
|
+
import { normalizedPackageUsagePaths } from "../../narrativePresentation.js";
|
|
2
3
|
import { MERGE_POSTURE_LABEL } from "../../riskVocabulary.js";
|
|
3
4
|
import { buildNarrativeChannels, composeSubheadline, composeSupportingContext, evidenceContextFromProfile, projectCompactKeyPoints, } from "../compose/narrativeCompose.js";
|
|
4
5
|
import { normalizeGeneratedText, normalizeGeneratedTextNullable, } from "../../normalizeGeneratedText.js";
|
|
@@ -15,7 +16,7 @@ function mapUsage(bundle) {
|
|
|
15
16
|
: undefined,
|
|
16
17
|
items: facts.packageUsage.map((row) => ({
|
|
17
18
|
packageName: row.packageName,
|
|
18
|
-
paths: row
|
|
19
|
+
paths: normalizedPackageUsagePaths(row),
|
|
19
20
|
areas: row.areas,
|
|
20
21
|
criticalPaths: row.criticalPaths,
|
|
21
22
|
})),
|