2026-09-22 17:22:48 -07:00
|
|
|
import assert from "node:assert/strict";
|
|
|
|
|
import { test } from "node:test";
|
|
|
|
|
import { loadReaderWorkspace } from "./reader-fixture.js";
|
|
|
|
|
import { compileExecutionPlan, compileQueryProgram } from "../src/execution-world/index.js";
|
|
|
|
|
import { compileInspectionTemplates } from "../src/execution-world/inspection.js";
|
|
|
|
|
test("public member inspection installs a finite set of typed lazy templates", async () => {
|
|
|
|
|
const plan = compileExecutionPlan(await loadReaderWorkspace());
|
|
|
|
|
const result = compileInspectionTemplates(plan);
|
|
|
|
|
assert.ok(result.templates.length);
|
|
|
|
|
const document = result.templates.find(
|
|
|
|
|
(template) =>
|
|
|
|
|
template.members.some((member) => member.name === "content") &&
|
|
|
|
|
template.members.some((member) => member.name === "highlights"),
|
|
|
|
|
)!;
|
2026-09-25 12:02:05 -07:00
|
|
|
assert.ok(document.inputs && document.view && document.server && document.completeInputs && document.completeView);
|
|
|
|
|
assert.equal(document.completeView.sourceQuery, document.completeInputs.query);
|
2026-09-22 17:22:48 -07:00
|
|
|
assert.equal(document.view.sourceQuery, document.inputs.query);
|
|
|
|
|
assert.ok(document.members.find((member) => member.name === "highlights")?.many);
|
|
|
|
|
assert.ok(!document.members.some((member) => member.name === "revise"));
|
|
|
|
|
const compiled = compileQueryProgram(plan) as {
|
|
|
|
|
queries: { id: string; selection: { selection: { conditions: unknown[] }[] }[] }[];
|
|
|
|
|
};
|
|
|
|
|
for (const descriptor of result.contracts) {
|
|
|
|
|
const query = compiled.queries.find(
|
|
|
|
|
(query) => query.id === JSON.stringify([descriptor.package, descriptor.query]),
|
|
|
|
|
)!;
|
|
|
|
|
assert.ok(query);
|
|
|
|
|
assert.ok(
|
|
|
|
|
query.selection[0]!.selection.every((field) => field.conditions.length === 1),
|
|
|
|
|
"Each field admission is independently selected",
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
assert.ok(!JSON.stringify(result.templates).includes("slot:"));
|
|
|
|
|
assert.equal(result.queries.length, result.contracts.length);
|
2026-09-25 12:02:05 -07:00
|
|
|
assert.ok(result.queries.length <= plan.definition.workspace.interfaceImports.length * 5);
|
2026-09-22 17:22:48 -07:00
|
|
|
});
|