perf(javascript): index source-map ignore lists per leaf (#1905)

This commit is contained in:
cyanseek authored and GitHub committed 2026-10-12 01:01:33 +08:00
1 parent 38539a2f4a
commit 898d5096f9
2 files changed
+47 -4

No files matched your search

+6 -4
View File
@@ -355,7 +355,10 @@ export const inspectSourceMapValue = (
}
const leaf = inspectLeaf(node, budget, options);
leaves.push({ map: leaf, offset: node.offset, stop: node.stop });
if (options.profile !== "browser-collection")
if (options.profile !== "browser-collection") {
const ignoredSources = new Set(
leaf.ignoreList ?? leaf.x_google_ignoreList ?? [],
);
for (const [sourceIndex, source] of leaf.sources.entries())
declarations.push({
sectionPath: node.path,
@@ -363,10 +366,9 @@ export const inspectSourceMapValue = (
source,
root: leaf.sourceRoot ?? null,
content: leaf.sourcesContent?.[sourceIndex] ?? null,
ignored: (leaf.ignoreList ?? leaf.x_google_ignoreList ?? []).includes(
sourceIndex,
),
ignored: ignoredSources.has(sourceIndex),
});
}
}
return {
format: root.sections === undefined ? "regular" : "indexed",
@@ -29,6 +29,47 @@ it("traces BOM-prefixed maps with a source-map transport prefix ending in CR", (
});
});
it("keeps ignore-list precedence and section-local indexes for duplicate sources", () => {
const map = {
version: 3,
sections: [
{
offset: { line: 0, column: 0 },
map: {
...leaf,
sources: ["same.ts", "same.ts"],
sourcesContent: ["first", "second"],
mappings: "AAAA,ACAA",
ignoreList: [1, 1],
x_google_ignoreList: [0],
},
},
{
offset: { line: 1, column: 0 },
map: { ...leaf, x_google_ignoreList: [0] },
},
{
offset: { line: 2, column: 0 },
map: { ...leaf, ignoreList: [], x_google_ignoreList: [0] },
},
],
};
expect(trace(map).matches).toMatchObject([
{ source_index: 0, ignored: false, content: { text: "first" } },
{ source_index: 1, ignored: true, content: { text: "second" } },
]);
expect(trace(map, { line: 2, column: 0 }).matches[0]).toMatchObject({
section_path: [1],
source_index: 0,
ignored: true,
});
expect(trace(map, { line: 3, column: 0 }).matches[0]).toMatchObject({
section_path: [2],
source_index: 0,
ignored: false,
});
});
describe("upstream source-map point evidence", () => {
it("preserves every duplicate-column/source-URL candidate and its own embedded bytes", () => {
const report = trace({