diff --git a/src/domain/javascript/javascriptSemanticAnalysis.origin_paths.test.ts b/src/domain/javascript/javascriptSemanticAnalysis.origin_paths.test.ts deleted file mode 100644 index c3e12d3273..0000000000 --- a/src/domain/javascript/javascriptSemanticAnalysis.origin_paths.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -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); -}); diff --git a/tests/composition/javascript-applications/javascriptModuleRelationships.test.ts b/tests/composition/javascript-applications/javascriptModuleRelationships.test.ts index 2db52caa56..ca6981ebb4 100644 --- a/tests/composition/javascript-applications/javascriptModuleRelationships.test.ts +++ b/tests/composition/javascript-applications/javascriptModuleRelationships.test.ts @@ -4,6 +4,7 @@ import { join } from "node:path"; import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; +import { parseJavaScriptApplicationGraph } from "../../../src/domain/javascript/javascriptApplicationGraph.js"; import { findExportNode, @@ -149,6 +150,38 @@ describe("CommonJS and ESM module relationships", () => { }); }); +it("does not assign one module origin to an export with colliding path encodings", async () => { + const root = await createTestTempDirectory("rea-ambiguous-module-origin-"); + await writeFixtureFiles(root, { + "index.js": String.raw` + import * as ns from "./fixture.js"; + const selected = choice ? ns["a\0b"] : ns.a.b; + export { selected }; + `, + "fixture.js": "export const fixture = true;\n", + }); + const { graph } = await reconstructJavaScriptFixture(root); + const applicationGraph = parseJavaScriptApplicationGraph( + JSON.parse(JSON.stringify(graph)), + ); + const selectedExport = findExportNode( + applicationGraph, + "index.js", + "selected", + ); + if (selectedExport === undefined) + throw new Error("Expected the selected export node"); + + expect( + applicationGraph.edges.filter( + ({ relation, source_node_id, properties }) => + relation === "imports" && + source_node_id === selectedExport.node_id && + properties.local_name === "selected", + ), + ).toEqual([]); +}); + describe("complete static application projections", () => { it("retains exports and JSON keys beyond the former projection prefix", async () => { const root = await moduleFixture();