mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
109 lines
4.0 KiB
TypeScript
109 lines
4.0 KiB
TypeScript
import { expect, it } from "vitest";
|
|
import { CdpBrowserProvider } from "../../../src/browser/CdpBrowserProvider.js";
|
|
import { analyzeWebBundleInputSchema } from "../../../src/domain/webBundleAnalysis.js";
|
|
import { startFakeCdpBrowser } from "../../fixtures/fakeCdpBrowser.js";
|
|
import { trackBrowser } from "./cdpBrowserProvider.support.js";
|
|
|
|
it.each(["none", "excluded", "mixed", "redirect", "not-selected"] as const)(
|
|
"preserves captured source-map exclusion coverage: %s",
|
|
async (mode) => {
|
|
const source = "export const observed = true;";
|
|
const browser = await startFakeCdpBrowser({
|
|
sourceMapBody: JSON.stringify({
|
|
version: 3,
|
|
names: [],
|
|
sources: ["main.js"],
|
|
sourcesContent: [source],
|
|
mappings: "AAAA",
|
|
}),
|
|
...(mode === "redirect"
|
|
? { sourceMapRedirect: "https://outside.example.test/main.js.map" }
|
|
: {}),
|
|
commandResult: ({ method }) =>
|
|
method === "Debugger.getScriptSource"
|
|
? { scriptSource: source }
|
|
: undefined,
|
|
commandEvents: (command, origin) => {
|
|
if (command.method !== "Debugger.enable") return undefined;
|
|
const script = (id: string, sourceMapURL?: string) => ({
|
|
method: "Debugger.scriptParsed",
|
|
...(command.sessionId === undefined
|
|
? {}
|
|
: { sessionId: command.sessionId }),
|
|
params: {
|
|
scriptId: id,
|
|
url: `${origin}/${id}.js`,
|
|
hash: id,
|
|
length: Buffer.byteLength(source),
|
|
isModule: true,
|
|
executionContextId: 1,
|
|
scriptLanguage: "JavaScript",
|
|
...(sourceMapURL === undefined ? {} : { sourceMapURL }),
|
|
},
|
|
});
|
|
return [
|
|
script(
|
|
"main",
|
|
mode === "none"
|
|
? undefined
|
|
: mode === "redirect"
|
|
? "/app.js.map"
|
|
: "https://outside.example.test/main.js.map",
|
|
),
|
|
...(mode === "mixed" ? [script("second", "/app.js.map")] : []),
|
|
];
|
|
},
|
|
});
|
|
trackBrowser(browser);
|
|
const provider = new CdpBrowserProvider();
|
|
try {
|
|
const result = await provider.analyzeBundle(
|
|
analyzeWebBundleInputSchema.parse({
|
|
cdp_endpoint: browser.endpoint,
|
|
allowed_origins: [browser.allowedOrigin],
|
|
target_id: "allowed-page",
|
|
observation_ms: 0,
|
|
fetch_source_maps: mode !== "not-selected",
|
|
}),
|
|
);
|
|
if (!result.ok) throw result.error;
|
|
const maps = result.value.observations.source_maps;
|
|
if (mode === "none" || mode === "not-selected") {
|
|
expect(maps).toEqual({
|
|
status: "not_requested",
|
|
requested: 0,
|
|
processed: 0,
|
|
items: [],
|
|
});
|
|
expect(result.value.completeness.status).toBe("complete");
|
|
expect(result.value.unknowns).toEqual([]);
|
|
} else {
|
|
expect(maps.status).toBe(mode === "mixed" ? "partial" : "unavailable");
|
|
expect(result.value.completeness.status).toBe("partial");
|
|
expect(result.value.unknowns).toContainEqual(
|
|
expect.objectContaining({ dimension: "source_maps" }),
|
|
);
|
|
if (mode === "redirect") {
|
|
expect(maps.excluded).toBeUndefined();
|
|
expect(maps.items[0]?.status).toBe("policy_filtered");
|
|
} else {
|
|
expect(maps.excluded).toEqual([
|
|
{ section: "source_maps", reason: "disallowed_origin", count: 1 },
|
|
]);
|
|
expect(maps.requested).toBe(mode === "mixed" ? 1 : 0);
|
|
expect(maps.processed).toBe(mode === "mixed" ? 1 : 0);
|
|
if (mode === "mixed") expect(maps.items[0]?.status).toBe("included");
|
|
}
|
|
}
|
|
expect(JSON.stringify(result.value)).not.toContain(
|
|
"outside.example.test",
|
|
);
|
|
expect(
|
|
browser.httpRequests.filter(({ url }) => url.startsWith("/app.js.map")),
|
|
).toHaveLength(mode === "mixed" || mode === "redirect" ? 1 : 0);
|
|
} finally {
|
|
await provider.close();
|
|
}
|
|
},
|
|
);
|