import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import { resolve } from "node:path"; import { compileCapabilityResourceSource, compileCapabilitySource, formatQx, } from "../src/capability-language/index.js"; import type { InterfaceRevision } from "../src/capability-model/types.js"; import { compileQuery } from "../src/query/compile.js"; const directory = resolve("test/fixtures/local-first-reader"); export const readReaderFixture = (name: string) => readFile(resolve(directory, name), "utf8"); const source = { repository: "https://example.test/reader.git", commit: "a".repeat(40) }; export const loadReaderWorkspace = async (transform = (name: string, text: string) => text) => { const interfaces = new Map(); for (const name of ["DocumentData", "HighlightData", "CommentData", "DocumentActions", "DocumentFactory"]) { const text = transform(`${name}.qx`, await readReaderFixture(`${name}.qx`)); const result = compileCapabilityResourceSource(formatQx(text), { source }); assert.ok(result.ok && result.resource.kind === "interface", `${name}: ${JSON.stringify(result.diagnostics)}`); interfaces.set(name, result.resource.revision); } const environment = { interfaces, interfaceClosure: [...interfaces.values()] }; const pkg = compileCapabilityResourceSource( formatQx(transform("ReaderRuntime.qx", await readReaderFixture("ReaderRuntime.qx"))), { source, environment, }, ); assert.ok(pkg.ok && pkg.resource.kind === "package", JSON.stringify(pkg.diagnostics)); const revision = pkg.resource.revision; revision.checkedQueries = await Promise.all( revision.queries!.map((query) => compileQuery(query, [...interfaces.values()], async (name) => transform(name, await readReaderFixture(name))), ), ); const result = compileCapabilitySource(formatQx(await readReaderFixture("workspace.qx")), "workspace.qx", { ...environment, packages: new Map([["ReaderRuntime", revision]]), packageClosure: [revision], }); assert.ok(result.ok, JSON.stringify(result.diagnostics)); return result.workspace; };