fix(javascript): retain distinct module provenance path components

This commit is contained in:
Rudy Celekli 2026-10-09 12:09:42 -04:00 committed by morluto
parent e995b19f83
commit 2bd7de6f8c
2 changed files with 17 additions and 1 deletions

View File

@ -0,0 +1,16 @@
import { expect, it } from "vitest";
import { analyzeJavaScriptSemantics } from "./javascriptSemanticAnalysis.js";
import { topLevelBinding } from "./javascriptSemanticAnalysis.fixture.js";
it("retains distinct module origins when a property contains the old separator", () => {
const result = analyzeJavaScriptSemantics(
'import * as ns from "./fixture.js"; const selected = choice ? ns["a\\0b"] : ns.a.b;',
);
const provenance = topLevelBinding(result, "selected").provenance;
expect(provenance.status).toBe("ambiguous");
expect(provenance.origins.map(({ importedPath }) => importedPath)).toEqual(
expect.arrayContaining([["a\0b"], ["a", "b"]]),
);
expect(provenance.origins).toHaveLength(2);
});

View File

@ -48,7 +48,7 @@ export const uniqueSemanticOrigins = (
);
const semanticOriginKey = (origin: JavaScriptModuleOrigin): string =>
`${origin.specifier}\0${origin.importedPath.join("\0")}`;
JSON.stringify([origin.specifier, origin.importedPath]);
/** Canonically distinguish primitive values across type boundaries. */
export const semanticPrimitiveKey = (