38 lines
1.7 KiB
TypeScript
38 lines
1.7 KiB
TypeScript
import { queryWorkspaceFixture } from "./fixtures/query-workspace.js";
|
|||
|
|
import { compileQuery } from "../src/query/compile.js";
|
||
|
|
import { queryTreeProjections } from "../src/query/tree.js";
|
||
|
|
import { linkQueries } from "../src/query/link.js";
|
||
|
|
import { compileExecutionPlan } from "../src/execution-world/plan.js";
|
||
|
|
|
||
|
|
export async function queryTreeFixture() {
|
||
|
|
const fixture = await queryWorkspaceFixture({ live: true, snapshot: true });
|
||
|
|
const declaration = {
|
||
|
|
...fixture.pkg.queries!.find((query) => query.id === "upcoming")!,
|
||
|
|
id: "tree",
|
||
|
|
displayName: "Tree",
|
||
|
|
operation: "Tree",
|
||
|
|
placement: { kind: "replica" as const },
|
||
|
|
fragments: [],
|
||
|
|
};
|
||
|
|
const checked = await compileQuery(
|
||
|
|
declaration,
|
||
|
|
fixture.interfaces,
|
||
|
|
async () => `query Tree($first:Int!, $details:Boolean!) {
|
||
|
|
root {items(first:$first) {entries {node {
|
||
|
|
...Heading @boundary(name:"basic") ...Details @boundary(name:"details") @include(if:$details)
|
||
|
|
assignee {...Person @boundary(name:"person")}
|
||
|
|
}}}}
|
||
|
|
} fragment Heading on TaskFacts {title} fragment Details on TaskFacts {rank done}
|
||
|
|
fragment Person on PersonFacts {name}`,
|
||
|
|
);
|
||
|
|
const projections = queryTreeProjections(checked);
|
||
|
|
fixture.pkg.queries = [declaration, ...projections.map((query) => query.declaration)];
|
||
|
|
fixture.pkg.checkedQueries = [checked, ...projections];
|
||
|
|
// Workspace imports retain the checked Package by value in the assembler.
|
||
|
|
const imported = fixture.workspace.packageImports.find((pkg) => pkg.revisionId === fixture.pkg.revisionId)!;
|
||
|
|
imported.queries = fixture.pkg.queries;
|
||
|
|
imported.checkedQueries = fixture.pkg.checkedQueries;
|
||
|
|
fixture.workspace.linkedQueries = linkQueries(fixture.workspace);
|
||
|
|
return { ...fixture, plan: compileExecutionPlan(fixture.workspace) };
|
||
|
|
}
|