Add bounded public member inspection through shared query scopes
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { compileInspectionTemplates } from "./inspection.js";
|
||||
import { portableValueSchema } from "../bindings/portable.js";
|
||||
import { ExecutionPlanError, hexDigest, type ExecutionPlan } from "./plan.js";
|
||||
import type { ValueType } from "../capability-model/types.js";
|
||||
@@ -26,44 +27,47 @@ export function compileQueryProgram(plan: ExecutionPlan): unknown {
|
||||
return {
|
||||
codec: "camino-query-program-v1",
|
||||
plan: plan.digest,
|
||||
queries: plan.definition.queries.map(({ id, query, admittedOperations }) => {
|
||||
const checked = query.checked;
|
||||
return {
|
||||
id,
|
||||
...(checked.declaration.fragment && !checked.declaration.fragment.admission
|
||||
? {
|
||||
fragment: {
|
||||
package: query.packageRevisionId,
|
||||
id: checked.declaration.id,
|
||||
digest: checked.definitionDigest,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
placement: checked.declaration.placement?.kind ?? "remote",
|
||||
source:
|
||||
checked.declaration.placement?.kind === "local"
|
||||
? JSON.stringify([query.packageRevisionId, checked.declaration.placement.sourceQueryId])
|
||||
: null,
|
||||
root: checked.declaration.root,
|
||||
atoms: query.rootAtoms,
|
||||
variables: portableValueSchema(checked.variables),
|
||||
defaults: checked.variableDefaults,
|
||||
selection: lowerTypes(checked.selection),
|
||||
budgets: checked.declaration.budgets,
|
||||
fields: query.fields.map((field) => {
|
||||
const member = interfaces
|
||||
.find((i) => i.revisionId === field.interfaceRevisionId)!
|
||||
.members.find((m) => m.id === field.memberId)!;
|
||||
return {
|
||||
atom: field.atomId,
|
||||
interface: field.interfaceRevisionId,
|
||||
member: field.memberId,
|
||||
name: member.displayName,
|
||||
operation: JSON.stringify([field.atomId, field.interfaceRevisionId, field.getter]),
|
||||
};
|
||||
}),
|
||||
admittedOperations,
|
||||
};
|
||||
}),
|
||||
queries: [
|
||||
...compileInspectionTemplates(plan).queries,
|
||||
...plan.definition.queries.map(({ id, query, admittedOperations }) => {
|
||||
const checked = query.checked;
|
||||
return {
|
||||
id,
|
||||
...(checked.declaration.fragment && !checked.declaration.fragment.admission
|
||||
? {
|
||||
fragment: {
|
||||
package: query.packageRevisionId,
|
||||
id: checked.declaration.id,
|
||||
digest: checked.definitionDigest,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
placement: checked.declaration.placement?.kind ?? "remote",
|
||||
source:
|
||||
checked.declaration.placement?.kind === "local"
|
||||
? JSON.stringify([query.packageRevisionId, checked.declaration.placement.sourceQueryId])
|
||||
: null,
|
||||
root: checked.declaration.root,
|
||||
atoms: query.rootAtoms,
|
||||
variables: portableValueSchema(checked.variables),
|
||||
defaults: checked.variableDefaults,
|
||||
selection: lowerTypes(checked.selection),
|
||||
budgets: checked.declaration.budgets,
|
||||
fields: query.fields.map((field) => {
|
||||
const member = interfaces
|
||||
.find((i) => i.revisionId === field.interfaceRevisionId)!
|
||||
.members.find((m) => m.id === field.memberId)!;
|
||||
return {
|
||||
atom: field.atomId,
|
||||
interface: field.interfaceRevisionId,
|
||||
member: field.memberId,
|
||||
name: member.displayName,
|
||||
operation: JSON.stringify([field.atomId, field.interfaceRevisionId, field.getter]),
|
||||
};
|
||||
}),
|
||||
admittedOperations,
|
||||
};
|
||||
}),
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user