Complete prepared presentation build and runtime integration

This commit is contained in:
Timothy J. Aveni
2026-09-27 18:51:05 -07:00
parent fdb7cd3f6f
commit b499298299
13 changed files with 1013 additions and 38 deletions
+9 -2
View File
@@ -46,7 +46,7 @@ export type CapabilityRepositoryResolver = (
/** An explicitly selected build frontend supplies ordinary query sources. The
* assembler never chooses a frontend by inspecting an interface/contract ID.
* Generated sources go through the same query and imported-fragment checks. */
export type PackageQueryGenerator = (input: {
export type PackageQueryGenerator = ((input: {
readonly package: Readonly<PackageRevision>;
readonly interfaces: readonly InterfaceRevision[];
readonly readSource: (name: string) => Promise<string>;
@@ -54,7 +54,12 @@ export type PackageQueryGenerator = (input: {
readonly queries: readonly QueryDeclaration[];
readonly documents: ReadonlyMap<string, string>;
readonly compositions?: readonly QueryComposition[];
}>;
readonly artifacts?: Readonly<Record<string, unknown>>;
}>) & {
/** Optional explicit frontend stage after workspace binding resolution.
* Its output still passes normal workspace/query validation. */
completeWorkspace?: (workspace: WorkspaceRevision) => Promise<void>;
};
export type ResolvedCapabilityResource = {
key: string;
@@ -297,6 +302,7 @@ const createResourceGraphResolver = (
readSource: (name) => readRepositorySource(snapshot.directory, name),
});
if (generated) {
if (generated.artifacts) compiled.resource.revision.buildArtifacts = structuredClone(generated.artifacts);
const queries = [...(compiled.resource.revision.queries ?? [])];
for (const query of generated.queries) {
if (queries.some((entry) => entry.id === query.id || entry.displayName === query.displayName))
@@ -534,6 +540,7 @@ export const compileWorkspaceRepository = async (options: {
: {}),
...(options.sourceRootCommit ? { sourceRootCommit: options.sourceRootCommit } : {}),
};
await options.generateQueries?.completeWorkspace?.(workspace);
const checked = compileWorkspaceRevision(workspace);
if (!checked.ok) {
throw new Error(