Add exported query fragments and scoped coverage observations

This commit is contained in:
Timothy J. Aveni
2026-09-22 16:18:57 -07:00
parent eba85ba158
commit a8869e4545
13 changed files with 2503 additions and 1715 deletions
+47
View File
@@ -218,3 +218,50 @@ package Runtime id "package:runtime" revision "package:runtime@1" { }
/requires external interface Named \(interface:named@1\)/,
);
});
test("resource-owned fragment imports compile through the locked package closure", async (context) => {
const directory = await mkdtemp(path.join(os.tmpdir(), "quixos-fragment-assembly-"));
context.after(() => rm(directory, { recursive: true, force: true }));
const dirs = Object.fromEntries(["item", "rows", "screen"].map((name) => [name, path.join(directory, name)]));
await Promise.all(Object.values(dirs).map((dir) => mkdir(dir)));
const dependency = (kind: string, name: string) =>
`${kind} ${name} source {repository "https://example.test/${name.toLowerCase()}.git"; commit "${namedCommit}";}`;
await writeFile(path.join(dirs.item!, "quixos.lock"), lock());
await writeFile(
path.join(dirs.item!, "interface.qx"),
`interface Item id "item" revision "item@1" {queryable value title id "title" : string {get id "title:get" execution snapshot targets [browser,server];}}`,
);
await writeFile(path.join(dirs.rows!, "quixos.lock"), lock(dependency("interface", "Item")));
await writeFile(
path.join(dirs.rows!, "package.qx"),
`import interface Item; package Rows id "rows" revision "rows@1" {query fragment Row id "row" root Item document "row.graphql" fragment "Row";}`,
);
await writeFile(path.join(dirs.rows!, "row.graphql"), "fragment Row on Item {_camino {ref} title}");
await writeFile(
path.join(dirs.screen!, "quixos.lock"),
lock(dependency("interface", "Item") + dependency("package", "Rows")),
);
await writeFile(
path.join(dirs.screen!, "package.qx"),
`import interface Item; import package Rows; package Screen id "screen" revision "screen@1" {
query Inputs id "inputs" root Item document "screen.graphql" operation "Screen" {replica; fragments Rows.Row;}
query View id "view" root Item document "screen.graphql" operation "Screen" {local from Inputs; fragments Rows.Row;}
}`,
);
await writeFile(path.join(dirs.screen!, "screen.graphql"), "query Screen {root {...Row}}");
const result = await compileCapabilityResourceRepository({
rootDirectory: dirs.screen!,
kind: "package",
source: { resolver: "git", repository: "https://example.test/screen.git", commit: packageCommit },
resolveResource: async (source) => {
const name = new URL(source.repository).pathname.slice(1, -4);
assert.ok(dirs[name], name);
return { directory: dirs[name]! };
},
});
assert.equal(result.resource.kind, "package");
if (result.resource.kind !== "package") throw Error("expected package");
const view = result.resource.revision.checkedQueries!.find((q) => q.declaration.id === "view")!;
assert.equal(view.selection[0]!.selection[0]!.fragmentSpread?.package, "rows@1");
assert.equal(result.resources.length, 3);
});