f4987093f6
- define and validate the capability and resource-lock languages - provision workspace source repositories through Central Gitea - build package runtimes from pinned standalone sources - replace legacy schema compilation with workspace persistence plans - add stable optimistic registers and Automerge CRDT documents - modernize TypeScript/Nix package builds and runtime activation readiness
79 lines
2.9 KiB
TypeScript
79 lines
2.9 KiB
TypeScript
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);
|
|
};
|