import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { capabilityId, type WorkspaceRevision, } from "../../src/capability-model/index.js"; import { compileCapabilitySource } from "../../src/capability-language/index.js"; export const fixtureId = { workspace: capabilityId.workspace("workspace:todo"), workspaceRevision: capabilityId.workspaceRevision("workspace:todo@1"), project: capabilityId.atom("atom:project"), person: capabilityId.atom("atom:person"), namedV1: capabilityId.interfaceRevision("interface:named@1"), ownedV1: capabilityId.interfaceRevision("interface:owned@1"), summaryV1: capabilityId.interfaceRevision("interface:summary@1"), namedGet: capabilityId.operation("operation:named:name:get"), namedSet: capabilityId.operation("operation:named:name:set"), ownerResolve: capabilityId.operation("operation:owned:owner:resolve"), summaryGet: capabilityId.operation("operation:summary:summary:get"), projectTitle: capabilityId.slot("slot:project:title"), personName: capabilityId.slot("slot:person:name"), projectOwner: capabilityId.edgeType("edge:project:owner"), projectOwnerProjection: capabilityId.edgeProjection( "projection:project-owner:owner", ), projectNamedConformance: { atomId: capabilityId.atom("atom:project"), interfaceRevisionId: capabilityId.interfaceRevision("interface:named@1"), }, personNamedConformance: { atomId: capabilityId.atom("atom:person"), interfaceRevisionId: capabilityId.interfaceRevision("interface:named@1"), }, projectOwnedConformance: { atomId: capabilityId.atom("atom:project"), interfaceRevisionId: capabilityId.interfaceRevision("interface:owned@1"), }, projectSummaryConformance: { atomId: capabilityId.atom("atom:project"), interfaceRevisionId: capabilityId.interfaceRevision("interface:summary@1"), }, todoRuntimeV1: capabilityId.packageRevision("package:todo-runtime@1"), summaryGetExport: capabilityId.packageExport( "export:todo-runtime:summary-get", ), createPersonExport: capabilityId.packageExport( "export:todo-runtime:create-person", ), titlePort: capabilityId.dependencyPort("port:summary:title"), namedPort: capabilityId.dependencyPort("port:summary:named"), personPort: capabilityId.dependencyPort("port:summary:person"), } as const; export const capabilityFixturePath = resolve( process.cwd(), "test/fixtures/todo.capabilities.qx", ); export const capabilityFixtureSource = readFileSync( capabilityFixturePath, "utf8", ); export const makeValidCapabilityWorkspace = (): WorkspaceRevision => { const result = compileCapabilitySource( capabilityFixtureSource, capabilityFixturePath, ); if (!result.ok) { throw new Error( result.diagnostics .map((entry) => `${entry.phase}/${entry.code}: ${entry.message}`) .join("\n"), ); } return structuredClone(result.workspace); };