import { writeFile } from "node:fs/promises"; import { join } from "node:path"; import { expect, it } from "vitest"; import { importReferenceSource } from "../../../src/application/ReferenceSourceImport.js"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; it("resolves dynamic source imports while retaining computed targets as unknown", async () => { const root = await createTestTempDirectory("rea-reference-dynamic-import-"); await Promise.all([ writeFile( join(root, "main.ts"), [ 'import "./static";', 'require("./common");', 'const lazy = import("./lazy");', 'async function load() { return await import("./data.json", { with: { type: "json" } }); }', 'const name = "./not-guessed.js"; import(name);', ].join("\n"), ), ...["static.ts", "common.js", "lazy.ts"].map((path) => writeFile(join(root, path), "export {};\n"), ), writeFile(join(root, "data.json"), '{"value":1}\n'), ]); const result = await importReferenceSource({ root, caller: "reference-dynamic-import-test", policy: { secretPatterns: [] }, }); expect(result.ok).toBe(true); if (!result.ok) return; expect(result.value.parse_failures).toEqual([]); expect(result.value.relationships).toHaveLength(5); for (const [to, kind] of [ ["static.ts", "imports"], ["common.js", "requires"], ["lazy.ts", "imports"], ["data.json", "imports"], ]) expect(result.value.relationships).toContainEqual({ from_path: "main.ts", to, kind, resolution: "internal", parse_state: "parsed", }); expect(result.value.relationships).toContainEqual({ from_path: "main.ts", to: "", kind: "imports", resolution: "unknown", parse_state: "partial", }); });