Files
quixos-protocol/test/emit-portable-reader.ts
T

52 lines
2.7 KiB
TypeScript

/** Qualification artifact emitted after tests, never a production fixture dependency. */
import { mkdir, writeFile } from "node:fs/promises";
import { loadReaderWorkspace } from "./reader-fixture.js";
import { compileKernelProgram } from "../src/execution-world/kernel.js";
import { compileExecutionPlan } from "../src/execution-world/plan.js";
import { generatePortableTypeScriptBindings } from "../src/bindings/portable.js";
import { generatePortableClientBindings } from "../src/bindings/portable-client.js";
import { loadCompositeWorkspace } from "./composite-fixture.js";
const plan = compileExecutionPlan(await loadReaderWorkspace());
await mkdir("dist/portable-reader", { recursive: true });
for (const target of ["browser", "server"])
await writeFile(
`dist/portable-reader/${target}.ts`,
generatePortableTypeScriptBindings(plan.definition.bindingSchema, "package:reader-runtime@1", { target }),
);
await writeFile("dist/portable-reader/plan.json", JSON.stringify(plan));
await writeFile("dist/portable-reader/kernel.json", JSON.stringify(compileKernelProgram(plan)));
await writeFile("dist/portable-reader/client.ts", generatePortableClientBindings(plan, { target: "browser" }));
const serviceWorkspace = structuredClone(plan.definition.workspace);
serviceWorkspace.atoms = [];
serviceWorkspace.conformances = [];
serviceWorkspace.constructors = [];
serviceWorkspace.interfaceImports = [];
serviceWorkspace.sharedAttachments = [];
serviceWorkspace.packageImports[0]!.queries = [];
serviceWorkspace.packageImports[0]!.checkedQueries = [];
const original = serviceWorkspace.packageImports[0]!.exports.find((e) => e.kind === "function")!;
serviceWorkspace.packageImports[0]!.exports = [
{
...original,
kind: "function",
execution: { kind: "remote" },
inputType: { kind: "scalar", name: "string" },
outputType: { kind: "scalar", name: "string" },
dependencyPorts: [],
},
];
await writeFile("dist/portable-reader/service-plan.json", JSON.stringify(compileExecutionPlan(serviceWorkspace)));
const composite = compileExecutionPlan(await loadCompositeWorkspace());
await mkdir("dist/portable-reader/composite", { recursive: true });
await writeFile("dist/portable-reader/composite/plan.json", JSON.stringify(composite));
await writeFile("dist/portable-reader/composite/kernel.json", JSON.stringify(compileKernelProgram(composite)));
for (const target of ["browser", "server"])
for (const [name, revision] of [
["reader", "package:reader-runtime@1"],
["comment", "package:comment-runtime@1"],
] as const)
await writeFile(
`dist/portable-reader/composite/${name}-${target}.ts`,
generatePortableTypeScriptBindings(composite.definition.bindingSchema, revision, { target }),
);