test.build/core/converters/specifier.converter.test.ts
test.build/core/converters/specifier.converter.test.ts is a file in Codebase Testing. 36 lines of code and 0 definitions.
import { CALLEE_FILE, CONTAINER, sourceFile } from "./anatomy.fixture.ts";
import { describe, expect, it } from "vitest";
import type { DiskFile } from "@banes-lab/build-scripts/types/structure.types.ts";
import { importEdgesOf } from "@banes-lab/build-scripts/core/converters/specifier.converter.ts";
import { specifierResolverOf } from "@banes-lab/web/core/converters/definition.converter.ts";
const ASSETS_FILE = ["core", "assets", "link.assets.ts"].join("/");
const fileAt = function fileAt(path: string, text: string): DiskFile {
return { ...sourceFile(), path, text };
};
describe("importEdgesOf", () => {
it("folds container imports to container edges", async () => {
const edges = await importEdgesOf([sourceFile(), fileAt(CALLEE_FILE, "")], specifierResolverOf);
expect(edges).toStrictEqual([{ count: 1, from: CONTAINER, to: "core" }]);
});
it("files an aliased import under the container its file lives in, and drops one that resolves to no file", async () => {
const importer = fileAt(
`${CONTAINER}/renderers/link.renderer.ts`,
'import { a } from "#core/assets/link.assets";\nimport { b } from "#nowhere/missing";\nexport const c = a;\n',
);
const edges = await importEdgesOf(
[importer, fileAt(ASSETS_FILE, "export const a = 1;\n")],
specifierResolverOf,
);
expect(edges).toStrictEqual([{ count: 1, from: CONTAINER, to: "core" }]);
});
});
describe("specifierResolverOf across trees", () => {
it("resolves a package specifier through the owning tree's exports, a .js specifier to its .ts source", () => {
const target = "governance~shared/manifests/taxonomy.manifest.ts";
const resolve = specifierResolverOf(new Set([target, "web.ts"]));
expect(resolve("@ssot/govlab/shared/manifests/taxonomy.manifest.ts", "web.ts")).toBe(target);
expect(resolve("@ssot/govlab/shared/manifests/taxonomy.manifest.js", "web.ts")).toBe(target);
expect(resolve("@ssot/govlab/shared/manifests/missing.ts", "web.ts")).toBeNull();
expect(resolve("vitest", "web.ts")).toBeNull();
});
});