Publish camino-package-runtime from cbf03106e69d3e2867d7f96859741991e04402b7

This commit is contained in:
Quixos Subtree Publisher
2026-09-17 23:51:19 +00:00
32 changed files with 2226 additions and 86 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"version": 1, "version": 1,
"sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos", "sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos",
"sourceCommit": "db6d7990a4ffec273258ac313b7d2aeac57b261a", "sourceCommit": "cbf03106e69d3e2867d7f96859741991e04402b7",
"sourcePath": "quixos-instance/packages/camino-package-runtime", "sourcePath": "quixos-instance/packages/camino-package-runtime",
"exportName": "camino-package-runtime", "exportName": "camino-package-runtime",
"mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-package-runtime.git" "mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-package-runtime.git"
+7
View File
@@ -63,6 +63,13 @@ export type QxOperationSpec = {
outputType: QxValueType; outputType: QxValueType;
}; };
export type QxPortSpec = { export type QxPortSpec = {
kind: "query";
id: string;
definitionDigest: string;
variables: QxValueType;
output: QxValueType;
watch: boolean;
} | {
kind: "state"; kind: "state";
id: string; id: string;
valueType: QxValueType; valueType: QxValueType;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"} {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
+32
View File
@@ -2,6 +2,7 @@ import { create } from "@bufbuild/protobuf";
import { ValueSchema, ObjectValueSchema } from "./camino/api_pb.js"; import { ValueSchema, ObjectValueSchema } from "./camino/api_pb.js";
import { derived, jsToProtoValue, liveValue, protoValueToJs, } from "./index.js"; import { derived, jsToProtoValue, liveValue, protoValueToJs, } from "./index.js";
import { assertReferenceFree, referenceToWire } from "./references.js"; import { assertReferenceFree, referenceToWire } from "./references.js";
import { decodeQuerySnapshot } from "./queries.js";
export const defineQxInterfaceContract = (interfaceRevisionId, operations) => Object.freeze({ interfaceRevisionId, operations }); export const defineQxInterfaceContract = (interfaceRevisionId, operations) => Object.freeze({ interfaceRevisionId, operations });
export const qxDerived = (get) => ({ kind: "derived", get }); export const qxDerived = (get) => ({ kind: "derived", get });
const bindInterfaceView = (target, contract, messages) => ({ const bindInterfaceView = (target, contract, messages) => ({
@@ -170,6 +171,37 @@ export const bindQxHandler = (spec, handler, messages) => {
bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages), bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages),
]; ];
} }
case "query": {
const query = raw.query(port.id);
const variablesToWire = (variables) => {
const value = encodeQxValue(port.variables, variables, messages);
if (value.kind.case !== "objectValue")
throw new Error("QUERY_VARIABLE_INVALID");
return value.kind.value.fields;
};
return [
name,
{
async execute(variables) {
const response = await query.execute(variablesToWire(variables), port.definitionDigest);
if (response.pending.length || response.errors.length)
throw new Error("QUERY_INCOMPLETE");
return decodeQxValue(port.output, response.value, messages);
},
...(port.watch
? {
async *watch(variables, signal) {
for await (const event of query.watch(variablesToWire(variables), signal, port.definitionDigest)) {
if (!event.snapshot)
throw new Error("QUERY_SNAPSHOT_MISSING");
yield decodeQuerySnapshot(event.snapshot, port.output, event.runId, event.sequence);
}
},
}
: {}),
},
];
}
case "constructor": case "constructor":
return [ return [
name, name,
+351 -1
View File
@@ -1,5 +1,5 @@
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import type { PersistencePlan } from "./schema_pb.js"; import type { PersistencePlan, QuerySelection } from "./schema_pb.js";
import type { Message } from "@bufbuild/protobuf"; import type { Message } from "@bufbuild/protobuf";
/** /**
* Describes the file camino/api.proto. * Describes the file camino/api.proto.
@@ -826,10 +826,360 @@ export type CaminoOp = Message<"camino.CaminoOp"> & {
* Use `create(CaminoOpSchema)` to create a new message. * Use `create(CaminoOpSchema)` to create a new message.
*/ */
export declare const CaminoOpSchema: GenMessage<CaminoOp>; export declare const CaminoOpSchema: GenMessage<CaminoOp>;
/**
* @generated from message camino.QueryRequest
*/
export type QueryRequest = Message<"camino.QueryRequest"> & {
/**
* @generated from field: string query_id = 1;
*/
queryId: string;
/**
* @generated from field: string object_id = 2;
*/
objectId: string;
/**
* @generated from field: map<string, camino.Value> variables = 3;
*/
variables: {
[key: string]: Value;
};
/**
* Typed callers require this exact checked definition. Administrative/raw
* callers may omit it to explicitly select the currently installed definition.
*
* @generated from field: string expected_definition_digest = 4;
*/
expectedDefinitionDigest: string;
};
/**
* Describes the message camino.QueryRequest.
* Use `create(QueryRequestSchema)` to create a new message.
*/
export declare const QueryRequestSchema: GenMessage<QueryRequest>;
/**
* @generated from message camino.QueryPathPart
*/
export type QueryPathPart = Message<"camino.QueryPathPart"> & {
/**
* @generated from oneof camino.QueryPathPart.part
*/
part: {
/**
* @generated from field: string field = 1;
*/
value: string;
case: "field";
} | {
/**
* @generated from field: uint32 index = 2;
*/
value: number;
case: "index";
} | {
case: undefined;
value?: undefined;
};
};
/**
* Describes the message camino.QueryPathPart.
* Use `create(QueryPathPartSchema)` to create a new message.
*/
export declare const QueryPathPartSchema: GenMessage<QueryPathPart>;
/**
* @generated from message camino.QueryPendingField
*/
export type QueryPendingField = Message<"camino.QueryPendingField"> & {
/**
* @generated from field: repeated camino.QueryPathPart path = 1;
*/
path: QueryPathPart[];
/**
* @generated from field: string object_id = 2;
*/
objectId: string;
/**
* @generated from field: string interface_revision_id = 3;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 4;
*/
memberId: string;
/**
* @generated from field: string operation_id = 5;
*/
operationId: string;
/**
* @generated from field: string value_type_json = 6;
*/
valueTypeJson: string;
/**
* Internal residual facts are separate from the authored result projection.
*
* @generated from field: optional uint32 residual_window = 7;
*/
residualWindow?: number | undefined;
/**
* @generated from field: uint32 residual_row = 8;
*/
residualRow: number;
/**
* @generated from field: string residual_field = 9;
*/
residualField: string;
};
/**
* Describes the message camino.QueryPendingField.
* Use `create(QueryPendingFieldSchema)` to create a new message.
*/
export declare const QueryPendingFieldSchema: GenMessage<QueryPendingField>;
/**
* @generated from message camino.QueryStats
*/
export type QueryStats = Message<"camino.QueryStats"> & {
/**
* @generated from field: uint32 sql_count = 1;
*/
sqlCount: number;
/**
* @generated from field: double sql_ms = 2;
*/
sqlMs: number;
/**
* @generated from field: uint32 rpc_count = 3;
*/
rpcCount: number;
/**
* @generated from field: double rpc_ms = 4;
*/
rpcMs: number;
/**
* @generated from field: uint32 result_bytes = 5;
*/
resultBytes: number;
/**
* @generated from field: double preparation_ms = 6;
*/
preparationMs: number;
/**
* @generated from field: double total_ms = 7;
*/
totalMs: number;
};
/**
* Describes the message camino.QueryStats.
* Use `create(QueryStatsSchema)` to create a new message.
*/
export declare const QueryStatsSchema: GenMessage<QueryStats>;
/**
* @generated from message camino.QueryResponse
*/
export type QueryResponse = Message<"camino.QueryResponse"> & {
/**
* @generated from field: camino.Value value = 1;
*/
value?: Value | undefined;
/**
* @generated from field: string data_version = 2;
*/
dataVersion: string;
/**
* @generated from field: string binding_digest = 3;
*/
bindingDigest: string;
/**
* @generated from field: repeated camino.QueryPendingField pending = 4;
*/
pending: QueryPendingField[];
/**
* @generated from field: camino.QueryStats stats = 5;
*/
stats?: QueryStats | undefined;
/**
* Redeemable only through the host's private control socket, not an RPC grant.
*
* @generated from field: string preparation_token = 6;
*/
preparationToken: string;
/**
* @generated from field: repeated camino.QueryFieldFailure errors = 7;
*/
errors: QueryFieldFailure[];
/**
* @generated from field: repeated camino.QueryResidualWindow residual_windows = 8;
*/
residualWindows: QueryResidualWindow[];
/**
* Native reads share one database snapshot; package enrichment does not.
*
* native-snapshot | mixed
*
* @generated from field: string consistency = 9;
*/
consistency: string;
};
/**
* Describes the message camino.QueryResponse.
* Use `create(QueryResponseSchema)` to create a new message.
*/
export declare const QueryResponseSchema: GenMessage<QueryResponse>;
/**
* @generated from message camino.QueryResidualRow
*/
export type QueryResidualRow = Message<"camino.QueryResidualRow"> & {
/**
* @generated from field: string entry_id = 1;
*/
entryId: string;
/**
* @generated from field: map<string, camino.Value> fields = 2;
*/
fields: {
[key: string]: Value;
};
};
/**
* Describes the message camino.QueryResidualRow.
* Use `create(QueryResidualRowSchema)` to create a new message.
*/
export declare const QueryResidualRowSchema: GenMessage<QueryResidualRow>;
/**
* @generated from message camino.QueryResidualOrder
*/
export type QueryResidualOrder = Message<"camino.QueryResidualOrder"> & {
/**
* @generated from field: string field = 1;
*/
field: string;
/**
* @generated from field: bool descending = 2;
*/
descending: boolean;
};
/**
* Describes the message camino.QueryResidualOrder.
* Use `create(QueryResidualOrderSchema)` to create a new message.
*/
export declare const QueryResidualOrderSchema: GenMessage<QueryResidualOrder>;
/**
* @generated from message camino.QueryResidualWindow
*/
export type QueryResidualWindow = Message<"camino.QueryResidualWindow"> & {
/**
* @generated from field: repeated camino.QueryPathPart path = 1;
*/
path: QueryPathPart[];
/**
* @generated from field: repeated camino.QueryResidualRow rows = 2;
*/
rows: QueryResidualRow[];
/**
* @generated from field: string predicate_json = 3;
*/
predicateJson: string;
/**
* @generated from field: repeated camino.QueryResidualOrder order = 4;
*/
order: QueryResidualOrder[];
/**
* @generated from field: uint32 limit = 5;
*/
limit: number;
/**
* @generated from field: bool bounded_all = 6;
*/
boundedAll: boolean;
/**
* @generated from field: repeated camino.QuerySelection selection = 7;
*/
selection: QuerySelection[];
/**
* @generated from field: map<string, string> field_types = 8;
*/
fieldTypes: {
[key: string]: string;
};
};
/**
* Describes the message camino.QueryResidualWindow.
* Use `create(QueryResidualWindowSchema)` to create a new message.
*/
export declare const QueryResidualWindowSchema: GenMessage<QueryResidualWindow>;
/**
* @generated from message camino.QueryFieldFailure
*/
export type QueryFieldFailure = Message<"camino.QueryFieldFailure"> & {
/**
* @generated from field: repeated camino.QueryPathPart path = 1;
*/
path: QueryPathPart[];
/**
* @generated from field: string error = 2;
*/
error: string;
};
/**
* Describes the message camino.QueryFieldFailure.
* Use `create(QueryFieldFailureSchema)` to create a new message.
*/
export declare const QueryFieldFailureSchema: GenMessage<QueryFieldFailure>;
/**
* @generated from message camino.QueryChangesRequest
*/
export type QueryChangesRequest = Message<"camino.QueryChangesRequest"> & {
/**
* @generated from field: string query_id = 1;
*/
queryId: string;
/**
* @generated from field: string object_id = 2;
*/
objectId: string;
/**
* @generated from field: string data_version = 3;
*/
dataVersion: string;
};
/**
* Describes the message camino.QueryChangesRequest.
* Use `create(QueryChangesRequestSchema)` to create a new message.
*/
export declare const QueryChangesRequestSchema: GenMessage<QueryChangesRequest>;
/**
* @generated from message camino.QueryChangesResponse
*/
export type QueryChangesResponse = Message<"camino.QueryChangesResponse"> & {
/**
* @generated from field: bool changed = 1;
*/
changed: boolean;
};
/**
* Describes the message camino.QueryChangesResponse.
* Use `create(QueryChangesResponseSchema)` to create a new message.
*/
export declare const QueryChangesResponseSchema: GenMessage<QueryChangesResponse>;
/** /**
* @generated from service camino.CaminoService * @generated from service camino.CaminoService
*/ */
export declare const CaminoService: GenService<{ export declare const CaminoService: GenService<{
/**
* @generated from rpc camino.CaminoService.ExecuteQuery
*/
executeQuery: {
methodKind: "unary";
input: typeof QueryRequestSchema;
output: typeof QueryResponseSchema;
};
/**
* @generated from rpc camino.CaminoService.QueryChanges
*/
queryChanges: {
methodKind: "unary";
input: typeof QueryChangesRequestSchema;
output: typeof QueryChangesResponseSchema;
};
/** /**
* @generated from rpc camino.CaminoService.InstallPersistencePlan * @generated from rpc camino.CaminoService.InstallPersistencePlan
*/ */
+1 -1
View File
File diff suppressed because one or more lines are too long
+56 -1
View File
File diff suppressed because one or more lines are too long
+308
View File
@@ -224,12 +224,320 @@ export type PersistencePlan = Message<"camino.PersistencePlan"> & {
* @generated from field: repeated camino.EdgeAttachment edges = 6; * @generated from field: repeated camino.EdgeAttachment edges = 6;
*/ */
edges: EdgeAttachment[]; edges: EdgeAttachment[];
/**
* @generated from field: repeated camino.InstalledQuery queries = 7;
*/
queries: InstalledQuery[];
}; };
/** /**
* Describes the message camino.PersistencePlan. * Describes the message camino.PersistencePlan.
* Use `create(PersistencePlanSchema)` to create a new message. * Use `create(PersistencePlanSchema)` to create a new message.
*/ */
export declare const PersistencePlanSchema: GenMessage<PersistencePlan>; export declare const PersistencePlanSchema: GenMessage<PersistencePlan>;
/**
* Immutable checked query IR. Installed only with the checked persistence plan;
* query callers select its ID, never send or modify these definitions.
*
* @generated from message camino.QueryArgument
*/
export type QueryArgument = Message<"camino.QueryArgument"> & {
/**
* @generated from oneof camino.QueryArgument.value
*/
value: {
/**
* @generated from field: string variable = 1;
*/
value: string;
case: "variable";
} | {
/**
* @generated from field: string literal_json = 2;
*/
value: string;
case: "literalJson";
} | {
/**
* @generated from field: camino.QueryArgumentList list = 3;
*/
value: QueryArgumentList;
case: "list";
} | {
/**
* @generated from field: camino.QueryArgumentObject object = 4;
*/
value: QueryArgumentObject;
case: "object";
} | {
case: undefined;
value?: undefined;
};
};
/**
* Describes the message camino.QueryArgument.
* Use `create(QueryArgumentSchema)` to create a new message.
*/
export declare const QueryArgumentSchema: GenMessage<QueryArgument>;
/**
* @generated from message camino.QueryArgumentList
*/
export type QueryArgumentList = Message<"camino.QueryArgumentList"> & {
/**
* @generated from field: repeated camino.QueryArgument values = 1;
*/
values: QueryArgument[];
};
/**
* Describes the message camino.QueryArgumentList.
* Use `create(QueryArgumentListSchema)` to create a new message.
*/
export declare const QueryArgumentListSchema: GenMessage<QueryArgumentList>;
/**
* @generated from message camino.QueryArgumentObject
*/
export type QueryArgumentObject = Message<"camino.QueryArgumentObject"> & {
/**
* @generated from field: map<string, camino.QueryArgument> fields = 1;
*/
fields: {
[key: string]: QueryArgument;
};
};
/**
* Describes the message camino.QueryArgumentObject.
* Use `create(QueryArgumentObjectSchema)` to create a new message.
*/
export declare const QueryArgumentObjectSchema: GenMessage<QueryArgumentObject>;
/**
* @generated from message camino.QueryCondition
*/
export type QueryCondition = Message<"camino.QueryCondition"> & {
/**
* @generated from field: bool include = 1;
*/
include: boolean;
/**
* @generated from field: camino.QueryArgument value = 2;
*/
value?: QueryArgument | undefined;
};
/**
* Describes the message camino.QueryCondition.
* Use `create(QueryConditionSchema)` to create a new message.
*/
export declare const QueryConditionSchema: GenMessage<QueryCondition>;
/**
* @generated from message camino.QuerySelection
*/
export type QuerySelection = Message<"camino.QuerySelection"> & {
/**
* @generated from field: string name = 1;
*/
name: string;
/**
* @generated from field: string key = 2;
*/
key: string;
/**
* @generated from field: string interface_revision_id = 3;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 4;
*/
memberId: string;
/**
* @generated from field: string target_interface_revision_id = 5;
*/
targetInterfaceRevisionId: string;
/**
* @generated from field: repeated camino.QueryCondition conditions = 6;
*/
conditions: QueryCondition[];
/**
* @generated from field: map<string, camino.QueryArgument> arguments = 7;
*/
arguments: {
[key: string]: QueryArgument;
};
/**
* @generated from field: repeated camino.QuerySelection selection = 8;
*/
selection: QuerySelection[];
};
/**
* Describes the message camino.QuerySelection.
* Use `create(QuerySelectionSchema)` to create a new message.
*/
export declare const QuerySelectionSchema: GenMessage<QuerySelection>;
/**
* @generated from message camino.QueryReadBinding
*/
export type QueryReadBinding = Message<"camino.QueryReadBinding"> & {
/**
* @generated from field: string atom_id = 1;
*/
atomId: string;
/**
* @generated from field: string interface_revision_id = 2;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 3;
*/
memberId: string;
/**
* @generated from field: string getter_operation_id = 4;
*/
getterOperationId: string;
/**
* @generated from field: string slot_id = 5;
*/
slotId: string;
/**
* @generated from field: string edge_type_id = 6;
*/
edgeTypeId: string;
/**
* @generated from field: string projection_id = 7;
*/
projectionId: string;
/**
* @generated from field: bool rpc = 8;
*/
rpc: boolean;
/**
* @generated from field: string watch_start_operation_id = 9;
*/
watchStartOperationId: string;
/**
* @generated from field: string watch_stop_operation_id = 10;
*/
watchStopOperationId: string;
/**
* @generated from field: string field_name = 11;
*/
fieldName: string;
/**
* @generated from field: string value_type_json = 12;
*/
valueTypeJson: string;
/**
* @generated from field: camino.Cardinality cardinality = 13;
*/
cardinality: Cardinality;
/**
* @generated from field: string key_type = 14;
*/
keyType: string;
};
/**
* Describes the message camino.QueryReadBinding.
* Use `create(QueryReadBindingSchema)` to create a new message.
*/
export declare const QueryReadBindingSchema: GenMessage<QueryReadBinding>;
/**
* @generated from message camino.QueryBudgets
*/
export type QueryBudgets = Message<"camino.QueryBudgets"> & {
/**
* @generated from field: uint32 rows = 1;
*/
rows: number;
/**
* @generated from field: uint32 depth = 2;
*/
depth: number;
/**
* @generated from field: uint32 result_bytes = 3;
*/
resultBytes: number;
/**
* @generated from field: uint32 candidates = 4;
*/
candidates: number;
/**
* @generated from field: uint32 rpc_calls = 5;
*/
rpcCalls: number;
/**
* @generated from field: uint32 concurrency = 6;
*/
concurrency: number;
/**
* @generated from field: uint32 deadline_ms = 7;
*/
deadlineMs: number;
};
/**
* Describes the message camino.QueryBudgets.
* Use `create(QueryBudgetsSchema)` to create a new message.
*/
export declare const QueryBudgetsSchema: GenMessage<QueryBudgets>;
/**
* @generated from message camino.InstalledQuery
*/
export type InstalledQuery = Message<"camino.InstalledQuery"> & {
/**
* @generated from field: string id = 1;
*/
id: string;
/**
* @generated from field: string definition_digest = 2;
*/
definitionDigest: string;
/**
* @generated from field: string binding_digest = 3;
*/
bindingDigest: string;
/**
* @generated from field: string root_interface_revision_id = 4;
*/
rootInterfaceRevisionId: string;
/**
* @generated from field: repeated camino.QuerySelection selection = 5;
*/
selection: QuerySelection[];
/**
* @generated from field: repeated camino.QueryReadBinding bindings = 6;
*/
bindings: QueryReadBinding[];
/**
* @generated from field: camino.QueryBudgets budgets = 7;
*/
budgets?: QueryBudgets | undefined;
/**
* @generated from field: string variables_type_json = 8;
*/
variablesTypeJson: string;
/**
* @generated from field: string output_type_json = 9;
*/
outputTypeJson: string;
/**
* @generated from field: map<string, camino.QueryArgument> variable_defaults = 10;
*/
variableDefaults: {
[key: string]: QueryArgument;
};
/**
* @generated from field: bool watch = 11;
*/
watch: boolean;
/**
* @generated from field: uint32 polling_interval_ms = 12;
*/
pollingIntervalMs: number;
/**
* @generated from field: bool rpc_predicate_or_order = 13;
*/
rpcPredicateOrOrder: boolean;
};
/**
* Describes the message camino.InstalledQuery.
* Use `create(InstalledQuerySchema)` to create a new message.
*/
export declare const InstalledQuerySchema: GenMessage<InstalledQuery>;
/** /**
* @generated from enum camino.Cardinality * @generated from enum camino.Cardinality
*/ */
+1 -1
View File
File diff suppressed because one or more lines are too long
+41 -1
View File
@@ -5,7 +5,7 @@ import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
/** /**
* Describes the file camino/schema.proto. * Describes the file camino/schema.proto.
*/ */
export const file_camino_schema = /*@__PURE__*/ fileDesc("ChNjYW1pbm8vc2NoZW1hLnByb3RvEgZjYW1pbm8iNwoOQXRvbURlZmluaXRpb24SDwoHYXRvbV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiWQoPQXRvbUNvbmZvcm1hbmNlEg8KB2F0b21faWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJIsIBCg9TdGF0ZUF0dGFjaG1lbnQSDwoHc2xvdF9pZBgBIAEoCRIYChBhdHRhY2hlZF9hdG9tX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIXCg92YWx1ZV90eXBlX2pzb24YBCABKAkSGwoTc3RvcmFnZV9wb2xpY3lfanNvbhgFIAEoCRIaChJkZWZhdWx0X3ZhbHVlX2pzb24YBiABKAkSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYByABKAkiUAoSRW5kcG9pbnRDb25zdHJhaW50EhEKB2F0b21faWQYASABKAlIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAlIAEIGCgRraW5kIvsBCgxFZGdlRW5kcG9pbnQSFQoNcHJvamVjdGlvbl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSLgoKY29uc3RyYWludBgDIAEoCzIaLmNhbWluby5FbmRwb2ludENvbnN0cmFpbnQSKAoLY2FyZGluYWxpdHkYBCABKA4yEy5jYW1pbm8uQ2FyZGluYWxpdHkSDwoHb3JkZXJlZBgFIAEoCBIRCglvbl9kZWxldGUYBiABKAkSFAoMcmV0YWluX290aGVyGAcgASgIEhAKCGtleV90eXBlGAggASgJEhgKEHB1YmxpY190cmF2ZXJzYWwYCSABKAgipQEKDkVkZ2VBdHRhY2htZW50EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSIwoFZmlyc3QYAyABKAsyFC5jYW1pbm8uRWRnZUVuZHBvaW50EiQKBnNlY29uZBgEIAEoCzIULmNhbWluby5FZGdlRW5kcG9pbnQSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYBSABKAki7AEKD1BlcnNpc3RlbmNlUGxhbhIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEiUKBWF0b21zGAMgAygLMhYuY2FtaW5vLkF0b21EZWZpbml0aW9uEi0KDGNvbmZvcm1hbmNlcxgEIAMoCzIXLmNhbWluby5BdG9tQ29uZm9ybWFuY2USJwoGc3RhdGVzGAUgAygLMhcuY2FtaW5vLlN0YXRlQXR0YWNobWVudBIlCgVlZGdlcxgGIAMoCzIWLmNhbWluby5FZGdlQXR0YWNobWVudCpoCgtDYXJkaW5hbGl0eRIbChdDQVJESU5BTElUWV9VTlNQRUNJRklFRBAAEhAKDE9QVElPTkFMX09ORRABEg8KC0VYQUNUTFlfT05FEAISCAoETUFOWRADEg8KC01BTllfVU5JUVVFEARiBnByb3RvMw"); export const file_camino_schema = /*@__PURE__*/ fileDesc("ChNjYW1pbm8vc2NoZW1hLnByb3RvEgZjYW1pbm8iNwoOQXRvbURlZmluaXRpb24SDwoHYXRvbV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiWQoPQXRvbUNvbmZvcm1hbmNlEg8KB2F0b21faWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJIsIBCg9TdGF0ZUF0dGFjaG1lbnQSDwoHc2xvdF9pZBgBIAEoCRIYChBhdHRhY2hlZF9hdG9tX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIXCg92YWx1ZV90eXBlX2pzb24YBCABKAkSGwoTc3RvcmFnZV9wb2xpY3lfanNvbhgFIAEoCRIaChJkZWZhdWx0X3ZhbHVlX2pzb24YBiABKAkSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYByABKAkiUAoSRW5kcG9pbnRDb25zdHJhaW50EhEKB2F0b21faWQYASABKAlIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAlIAEIGCgRraW5kIvsBCgxFZGdlRW5kcG9pbnQSFQoNcHJvamVjdGlvbl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSLgoKY29uc3RyYWludBgDIAEoCzIaLmNhbWluby5FbmRwb2ludENvbnN0cmFpbnQSKAoLY2FyZGluYWxpdHkYBCABKA4yEy5jYW1pbm8uQ2FyZGluYWxpdHkSDwoHb3JkZXJlZBgFIAEoCBIRCglvbl9kZWxldGUYBiABKAkSFAoMcmV0YWluX290aGVyGAcgASgIEhAKCGtleV90eXBlGAggASgJEhgKEHB1YmxpY190cmF2ZXJzYWwYCSABKAgipQEKDkVkZ2VBdHRhY2htZW50EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSIwoFZmlyc3QYAyABKAsyFC5jYW1pbm8uRWRnZUVuZHBvaW50EiQKBnNlY29uZBgEIAEoCzIULmNhbWluby5FZGdlRW5kcG9pbnQSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYBSABKAkilQIKD1BlcnNpc3RlbmNlUGxhbhIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEiUKBWF0b21zGAMgAygLMhYuY2FtaW5vLkF0b21EZWZpbml0aW9uEi0KDGNvbmZvcm1hbmNlcxgEIAMoCzIXLmNhbWluby5BdG9tQ29uZm9ybWFuY2USJwoGc3RhdGVzGAUgAygLMhcuY2FtaW5vLlN0YXRlQXR0YWNobWVudBIlCgVlZGdlcxgGIAMoCzIWLmNhbWluby5FZGdlQXR0YWNobWVudBInCgdxdWVyaWVzGAcgAygLMhYuY2FtaW5vLkluc3RhbGxlZFF1ZXJ5Ip4BCg1RdWVyeUFyZ3VtZW50EhIKCHZhcmlhYmxlGAEgASgJSAASFgoMbGl0ZXJhbF9qc29uGAIgASgJSAASKQoEbGlzdBgDIAEoCzIZLmNhbWluby5RdWVyeUFyZ3VtZW50TGlzdEgAEi0KBm9iamVjdBgEIAEoCzIbLmNhbWluby5RdWVyeUFyZ3VtZW50T2JqZWN0SABCBwoFdmFsdWUiOgoRUXVlcnlBcmd1bWVudExpc3QSJQoGdmFsdWVzGAEgAygLMhUuY2FtaW5vLlF1ZXJ5QXJndW1lbnQilAEKE1F1ZXJ5QXJndW1lbnRPYmplY3QSNwoGZmllbGRzGAEgAygLMicuY2FtaW5vLlF1ZXJ5QXJndW1lbnRPYmplY3QuRmllbGRzRW50cnkaRAoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUuY2FtaW5vLlF1ZXJ5QXJndW1lbnQ6AjgBIkcKDlF1ZXJ5Q29uZGl0aW9uEg8KB2luY2x1ZGUYASABKAgSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudCLdAgoOUXVlcnlTZWxlY3Rpb24SDAoEbmFtZRgBIAEoCRILCgNrZXkYAiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAMgASgJEhEKCW1lbWJlcl9pZBgEIAEoCRIkChx0YXJnZXRfaW50ZXJmYWNlX3JldmlzaW9uX2lkGAUgASgJEioKCmNvbmRpdGlvbnMYBiADKAsyFi5jYW1pbm8uUXVlcnlDb25kaXRpb24SOAoJYXJndW1lbnRzGAcgAygLMiUuY2FtaW5vLlF1ZXJ5U2VsZWN0aW9uLkFyZ3VtZW50c0VudHJ5EikKCXNlbGVjdGlvbhgIIAMoCzIWLmNhbWluby5RdWVyeVNlbGVjdGlvbhpHCg5Bcmd1bWVudHNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudDoCOAEi6QIKEFF1ZXJ5UmVhZEJpbmRpbmcSDwoHYXRvbV9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSEQoJbWVtYmVyX2lkGAMgASgJEhsKE2dldHRlcl9vcGVyYXRpb25faWQYBCABKAkSDwoHc2xvdF9pZBgFIAEoCRIUCgxlZGdlX3R5cGVfaWQYBiABKAkSFQoNcHJvamVjdGlvbl9pZBgHIAEoCRILCgNycGMYCCABKAgSIAoYd2F0Y2hfc3RhcnRfb3BlcmF0aW9uX2lkGAkgASgJEh8KF3dhdGNoX3N0b3Bfb3BlcmF0aW9uX2lkGAogASgJEhIKCmZpZWxkX25hbWUYCyABKAkSFwoPdmFsdWVfdHlwZV9qc29uGAwgASgJEigKC2NhcmRpbmFsaXR5GA0gASgOMhMuY2FtaW5vLkNhcmRpbmFsaXR5EhAKCGtleV90eXBlGA4gASgJIpIBCgxRdWVyeUJ1ZGdldHMSDAoEcm93cxgBIAEoDRINCgVkZXB0aBgCIAEoDRIUCgxyZXN1bHRfYnl0ZXMYAyABKA0SEgoKY2FuZGlkYXRlcxgEIAEoDRIRCglycGNfY2FsbHMYBSABKA0SEwoLY29uY3VycmVuY3kYBiABKA0SEwoLZGVhZGxpbmVfbXMYByABKA0ijQQKDkluc3RhbGxlZFF1ZXJ5EgoKAmlkGAEgASgJEhkKEWRlZmluaXRpb25fZGlnZXN0GAIgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAMgASgJEiIKGnJvb3RfaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEikKCXNlbGVjdGlvbhgFIAMoCzIWLmNhbWluby5RdWVyeVNlbGVjdGlvbhIqCghiaW5kaW5ncxgGIAMoCzIYLmNhbWluby5RdWVyeVJlYWRCaW5kaW5nEiUKB2J1ZGdldHMYByABKAsyFC5jYW1pbm8uUXVlcnlCdWRnZXRzEhsKE3ZhcmlhYmxlc190eXBlX2pzb24YCCABKAkSGAoQb3V0cHV0X3R5cGVfanNvbhgJIAEoCRJHChF2YXJpYWJsZV9kZWZhdWx0cxgKIAMoCzIsLmNhbWluby5JbnN0YWxsZWRRdWVyeS5WYXJpYWJsZURlZmF1bHRzRW50cnkSDQoFd2F0Y2gYCyABKAgSGwoTcG9sbGluZ19pbnRlcnZhbF9tcxgMIAEoDRIeChZycGNfcHJlZGljYXRlX29yX29yZGVyGA0gASgIGk4KFVZhcmlhYmxlRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudDoCOAEqaAoLQ2FyZGluYWxpdHkSGwoXQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIQCgxPUFRJT05BTF9PTkUQARIPCgtFWEFDVExZX09ORRACEggKBE1BTlkQAxIPCgtNQU5ZX1VOSVFVRRAEYgZwcm90bzM");
/** /**
* Describes the message camino.AtomDefinition. * Describes the message camino.AtomDefinition.
* Use `create(AtomDefinitionSchema)` to create a new message. * Use `create(AtomDefinitionSchema)` to create a new message.
@@ -41,6 +41,46 @@ export const EdgeAttachmentSchema = /*@__PURE__*/ messageDesc(file_camino_schema
* Use `create(PersistencePlanSchema)` to create a new message. * Use `create(PersistencePlanSchema)` to create a new message.
*/ */
export const PersistencePlanSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 6); export const PersistencePlanSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 6);
/**
* Describes the message camino.QueryArgument.
* Use `create(QueryArgumentSchema)` to create a new message.
*/
export const QueryArgumentSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 7);
/**
* Describes the message camino.QueryArgumentList.
* Use `create(QueryArgumentListSchema)` to create a new message.
*/
export const QueryArgumentListSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 8);
/**
* Describes the message camino.QueryArgumentObject.
* Use `create(QueryArgumentObjectSchema)` to create a new message.
*/
export const QueryArgumentObjectSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 9);
/**
* Describes the message camino.QueryCondition.
* Use `create(QueryConditionSchema)` to create a new message.
*/
export const QueryConditionSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 10);
/**
* Describes the message camino.QuerySelection.
* Use `create(QuerySelectionSchema)` to create a new message.
*/
export const QuerySelectionSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 11);
/**
* Describes the message camino.QueryReadBinding.
* Use `create(QueryReadBindingSchema)` to create a new message.
*/
export const QueryReadBindingSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 12);
/**
* Describes the message camino.QueryBudgets.
* Use `create(QueryBudgetsSchema)` to create a new message.
*/
export const QueryBudgetsSchema = /*@__PURE__*/ messageDesc(file_camino_schema, 13);
/**
* Describes the message camino.InstalledQuery.
* Use `create(InstalledQuerySchema)` to create a new message.
*/
export const InstalledQuerySchema = /*@__PURE__*/ messageDesc(file_camino_schema, 14);
/** /**
* @generated from enum camino.Cardinality * @generated from enum camino.Cardinality
*/ */
+9 -2
View File
@@ -1,10 +1,11 @@
import http from "node:http"; import http from "node:http";
import { type QxObjectRef } from "./references.js"; import { type QxObjectRef } from "./references.js";
export * from "./bindings.js"; export * from "./bindings.js";
export * from "./queries.js";
export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js";
export { createMigrationContext, migrationObjectId, serveMigration, type MigrationContext, type MigrationInput, type MigrationOutput, type MigrationEdge, } from "./migration.js"; export { createMigrationContext, migrationObjectId, serveMigration, type MigrationContext, type MigrationInput, type MigrationOutput, type MigrationEdge, } from "./migration.js";
import { type Client, type ConnectRouter } from "@connectrpc/connect"; import { type Client, type ConnectRouter } from "@connectrpc/connect";
import { CaminoService, type Value } from "./camino/api_pb.js"; import { CaminoService, type Value, type QueryResponse } from "./camino/api_pb.js";
import { OrchestratorRuntime } from "./quixos/orch_pb.js"; import { OrchestratorRuntime } from "./quixos/orch_pb.js";
export type CaminoClient = Client<typeof CaminoService>; export type CaminoClient = Client<typeof CaminoService>;
export type OrchClient = Client<typeof OrchestratorRuntime>; export type OrchClient = Client<typeof OrchestratorRuntime>;
@@ -61,7 +62,12 @@ export type ConstructorPort = {
atomId: string; atomId: string;
construct(input?: Record<string, unknown>): Promise<QxObjectRef>; construct(input?: Record<string, unknown>): Promise<QxObjectRef>;
}; };
export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort; export type QueryPort = {
queryId: string;
execute(variables: Record<string, Value>, expectedDefinitionDigest?: string): Promise<QueryResponse>;
watch(variables: Record<string, Value>, signal: AbortSignal, expectedDefinitionDigest?: string): AsyncIterable<import("./quixos/orch_pb.js").QueryEvent>;
};
export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort;
export type RuntimeContext = { export type RuntimeContext = {
tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise<InterfacePort | undefined>; tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise<InterfacePort | undefined>;
/** Cooperative cancellation. Completion is acknowledged only after the handler returns. */ /** Cooperative cancellation. Completion is acknowledged only after the handler returns. */
@@ -75,6 +81,7 @@ export type RuntimeContext = {
edge(portId: string): EdgePort; edge(portId: string): EdgePort;
interface(portId: string): InterfacePort; interface(portId: string): InterfacePort;
constructor(portId: string): ConstructorPort; constructor(portId: string): ConstructorPort;
query(portId: string): QueryPort;
}; };
export type RuntimeSession = { export type RuntimeSession = {
id: string; id: string;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGxF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAoC,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExG,OAAO,EACL,aAAa,EAOb,KAAK,KAAK,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAU1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AACxD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAiCnF,eAAO,MAAM,SAAS,cAAe,WAAW,wBAG/C,CAAC;AACF,eAAO,MAAM,SAAS,UAAW,KAAK;IAAQ,YAAY;CAAU,CAAC;AAErE,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,KAyC/C,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,KAAK,GAAG,SAAS,KAAG,OA2BzD,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;;CACmC,CAAC;AAEjG,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAClB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAClG,CAAC;AACF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC;IACV,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;CACjC,CAAC;AACF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,WAAW,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/E,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;CACnG,CAAC;AACF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAClE,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAC;AAEjF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACjG,2FAA2F;IAC3F,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5C,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IACzC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,gFAAgF;IAChF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AACF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,YAAY,OAAO,EAAE,MAAM,EAI1B;CACF;AAOD,eAAO,MAAM,oBAAoB,WACvB,YAAY,QACd,UAAU,WACP,cAAc,KACtB,cAwLF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AACrF,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAC;AACtE,eAAO,MAAM,OAAO,QAAS,cAAc,KAAG,cAA4C,CAAC;AA0B3F,eAAO,MAAM,0BAA0B,WAAY;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,cAwJiB,aAAa,kBAgN9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAY;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC;CAC1D,yEAaA,CAAC;AACF,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,YAAY,EAAE,OAAO,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;CAClE,CAAC"} {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
+11
View File
@@ -3,6 +3,7 @@ import { readFileSync } from "node:fs";
import { createInvocationRegistry } from "./invocations.js"; import { createInvocationRegistry } from "./invocations.js";
import { isObjectReference, referenceFromWire, referenceToWire, assertReferenceFree, } from "./references.js"; import { isObjectReference, referenceFromWire, referenceToWire, assertReferenceFree, } from "./references.js";
export * from "./bindings.js"; export * from "./bindings.js";
export * from "./queries.js";
export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js";
import { AsyncLocalStorage } from "node:async_hooks"; import { AsyncLocalStorage } from "node:async_hooks";
import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"; import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
@@ -155,6 +156,15 @@ export const createRuntimeContext = (camino, orch, request) => {
const ports = new Map(); const ports = new Map();
for (const dependency of request.dependencies) { for (const dependency of request.dependencies) {
switch (dependency.binding.case) { switch (dependency.binding.case) {
case "queryId": {
const queryId = dependency.binding.value, objectId = dependency.objectId || request.objectId;
ports.set(dependency.portId, {
queryId,
execute: (variables, expectedDefinitionDigest) => orch.executeQuery({ queryId, objectId, variables, expectedDefinitionDigest }),
watch: (variables, signal, expectedDefinitionDigest) => orch.watchQuery({ queryId, objectId, variables, expectedDefinitionDigest }, { signal }),
});
break;
}
case "stateSlotId": { case "stateSlotId": {
const slotId = dependency.binding.value; const slotId = dependency.binding.value;
const dependencyObjectId = dependency.objectId || request.objectId; const dependencyObjectId = dependency.objectId || request.objectId;
@@ -298,6 +308,7 @@ export const createRuntimeContext = (camino, orch, request) => {
edge: (portId) => requirePort(portId, "edgeTypeId"), edge: (portId) => requirePort(portId, "edgeTypeId"),
interface: (portId) => requirePort(portId, "interfaceRevisionId"), interface: (portId) => requirePort(portId, "interfaceRevisionId"),
constructor: (portId) => requirePort(portId, "atomId"), constructor: (portId) => requirePort(portId, "atomId"),
query: (portId) => requirePort(portId, "queryId"),
}; };
}; };
export const derived = (get) => ({ kind: "derived", get }); export const derived = (get) => ({ kind: "derived", get });
+38
View File
@@ -0,0 +1,38 @@
import { type QxValueType } from "./bindings.js";
import type { QueryResponse } from "./camino/api_pb.js";
import type { QxObjectRef } from "./references.js";
export type QxQueryPartial<T> = T extends QxObjectRef ? T : T extends readonly (infer Item)[] ? QxQueryPartial<Item>[] : T extends object ? {
[Key in keyof T]?: QxQueryPartial<T[Key]>;
} : T;
export type QxQuerySnapshot<T> = {
runId: string;
sequence: bigint;
dataVersion: string;
bindingDigest: string;
consistency: string;
fields: {
path: readonly (string | number)[];
status: "pending" | "error";
error?: string;
}[];
} & ({
status: "ready";
data: T;
} | {
status: "partial";
data: QxQueryPartial<T>;
});
declare const queryTypes: unique symbol;
/** Generated shape evidence, not permission to run a query. */
export interface QxQueryDescriptor<Variables, Result, Root extends string = string> {
readonly id: string;
readonly definitionDigest: string;
readonly rootInterfaceRevisionId: Root;
readonly variables: QxValueType;
readonly output: QxValueType;
readonly watch: boolean;
readonly [queryTypes]?: (variables: Variables, result: Result) => [Variables, Result];
}
export declare function decodeQuerySnapshot<T>(response: QueryResponse, output: QxValueType, runId: string, sequence: bigint): QxQuerySnapshot<T>;
export {};
//# sourceMappingURL=queries.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,GACjD,CAAC,GACD,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,GAC/B,cAAc,CAAC,IAAI,CAAC,EAAE,GACtB,CAAC,SAAS,MAAM,GACd;KAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAAE,GAC7C,CAAC,CAAC;AACV,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/F,GAAG,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AACpF,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AACxC,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IAChF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACvF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,CAAC,CAAC,CA6CpB"}
+57
View File
@@ -0,0 +1,57 @@
import { decodeQxValue } from "./bindings.js";
export function decodeQuerySnapshot(response, output, runId, sequence) {
if (response.preparationToken || response.residualWindows.length)
throw new Error("QUERY_RESULT_UNFINISHED: private preparation is not a query result");
const fields = [
...response.pending.map((field) => ({ path: field.path, status: "pending" })),
...response.errors.map((field) => ({ path: field.path, status: "error", error: field.error })),
].map((field) => ({
...field,
path: field.path.map((part) => {
if (part.part.case !== "field" && part.part.case !== "index")
throw new Error("QUERY_PATCH_INVALID");
return part.part.value;
}),
}));
// Pending/error values are absent, not successful nulls of a scalar type.
const shape = structuredClone(output);
for (const field of fields) {
let cursor = shape;
for (const [index, part] of field.path.entries()) {
while (cursor.kind === "optional")
cursor = cursor.value;
const last = index === field.path.length - 1;
if (typeof part === "string" && cursor.kind === "record" && cursor.fields[part]) {
if (last)
cursor.fields[part] = { kind: "optional", value: cursor.fields[part] };
else
cursor = cursor.fields[part];
}
else if (typeof part === "number" && cursor.kind === "list")
cursor = cursor.value;
else
throw new Error("QUERY_PATCH_INVALID");
}
}
const data = decodeQxValue(shape, response.value, {});
for (const field of fields) {
let cursor = data;
for (const [index, part] of field.path.entries()) {
if (!cursor || typeof cursor !== "object")
throw new Error("QUERY_PATCH_INVALID");
if (index === field.path.length - 1)
delete cursor[part];
else
cursor = cursor[part];
}
}
return {
runId,
sequence,
dataVersion: response.dataVersion,
bindingDigest: response.bindingDigest,
consistency: response.consistency,
fields,
...(fields.length ? { status: "partial", data } : { status: "ready", data }),
};
}
+110 -1
View File
@@ -1,5 +1,6 @@
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import type { CaminoObject, CrdtValue, Value } from "../camino/api_pb.js"; import type { CaminoObject, CrdtValue, QueryPathPart, QueryRequestSchema, QueryResponse, QueryResponseSchema, Value } from "../camino/api_pb.js";
import type { InstalledQuery } from "../camino/schema_pb.js";
import type { PackageDescriptor } from "./package_pb.js"; import type { PackageDescriptor } from "./package_pb.js";
import type { CapabilityRef, ConformanceWitness, PackageExportRef } from "./refs_pb.js"; import type { CapabilityRef, ConformanceWitness, PackageExportRef } from "./refs_pb.js";
import type { DerivedDependency } from "./runtime_pb.js"; import type { DerivedDependency } from "./runtime_pb.js";
@@ -8,6 +9,44 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/orch.proto. * Describes the file quixos/orch.proto.
*/ */
export declare const file_quixos_orch: GenFile; export declare const file_quixos_orch: GenFile;
/**
* @generated from message quixos.orch.QueryEvent
*/
export type QueryEvent = Message<"quixos.orch.QueryEvent"> & {
/**
* @generated from field: string run_id = 1;
*/
runId: string;
/**
* @generated from field: uint64 sequence = 2;
*/
sequence: bigint;
/**
* @generated from field: string kind = 3;
*/
kind: string;
/**
* @generated from field: camino.QueryResponse snapshot = 4;
*/
snapshot?: QueryResponse | undefined;
/**
* @generated from field: repeated camino.QueryPathPart path = 5;
*/
path: QueryPathPart[];
/**
* @generated from field: camino.Value value = 6;
*/
value?: Value | undefined;
/**
* @generated from field: string error = 7;
*/
error: string;
};
/**
* Describes the message quixos.orch.QueryEvent.
* Use `create(QueryEventSchema)` to create a new message.
*/
export declare const QueryEventSchema: GenMessage<QueryEvent>;
/** /**
* Exact closed interface lookup; no policy selection or competing conformances. * Exact closed interface lookup; no policy selection or competing conformances.
* *
@@ -351,6 +390,10 @@ export type GetWorkspaceRequest = Message<"quixos.orch.GetWorkspaceRequest"> & {
* @generated from field: bool include_interface_contracts = 1; * @generated from field: bool include_interface_contracts = 1;
*/ */
includeInterfaceContracts: boolean; includeInterfaceContracts: boolean;
/**
* @generated from field: bool include_query_contracts = 2;
*/
includeQueryContracts: boolean;
}; };
/** /**
* Describes the message quixos.orch.GetWorkspaceRequest. * Describes the message quixos.orch.GetWorkspaceRequest.
@@ -398,12 +441,62 @@ export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> &
* @generated from field: repeated quixos.orch.ClassCapability class_capabilities = 8; * @generated from field: repeated quixos.orch.ClassCapability class_capabilities = 8;
*/ */
classCapabilities: ClassCapability[]; classCapabilities: ClassCapability[];
/**
* @generated from field: repeated quixos.orch.QueryDescription queries = 9;
*/
queries: QueryDescription[];
/**
* @generated from field: uint32 active_query_executions = 10;
*/
activeQueryExecutions: number;
}; };
/** /**
* Describes the message quixos.orch.GetWorkspaceResponse. * Describes the message quixos.orch.GetWorkspaceResponse.
* Use `create(GetWorkspaceResponseSchema)` to create a new message. * Use `create(GetWorkspaceResponseSchema)` to create a new message.
*/ */
export declare const GetWorkspaceResponseSchema: GenMessage<GetWorkspaceResponse>; export declare const GetWorkspaceResponseSchema: GenMessage<GetWorkspaceResponse>;
/**
* @generated from message quixos.orch.QueryDescription
*/
export type QueryDescription = Message<"quixos.orch.QueryDescription"> & {
/**
* @generated from field: string id = 1;
*/
id: string;
/**
* @generated from field: string name = 2;
*/
name: string;
/**
* @generated from field: string package_revision_id = 3;
*/
packageRevisionId: string;
/**
* @generated from field: string document = 4;
*/
document: string;
/**
* @generated from field: string schema = 5;
*/
schema: string;
/**
* @generated from field: repeated string source_files = 6;
*/
sourceFiles: string[];
/**
* @generated from field: string effects_json = 7;
*/
effectsJson: string;
/**
* @generated from field: camino.InstalledQuery plan = 8;
*/
plan?: InstalledQuery | undefined;
};
/**
* Describes the message quixos.orch.QueryDescription.
* Use `create(QueryDescriptionSchema)` to create a new message.
*/
export declare const QueryDescriptionSchema: GenMessage<QueryDescription>;
/** /**
* @generated from message quixos.orch.ClassCapability * @generated from message quixos.orch.ClassCapability
*/ */
@@ -695,6 +788,22 @@ export declare const PackageRuntimeStatusSchema: GenMessage<PackageRuntimeStatus
* @generated from service quixos.orch.OrchestratorRuntime * @generated from service quixos.orch.OrchestratorRuntime
*/ */
export declare const OrchestratorRuntime: GenService<{ export declare const OrchestratorRuntime: GenService<{
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.ExecuteQuery
*/
executeQuery: {
methodKind: "unary";
input: typeof QueryRequestSchema;
output: typeof QueryResponseSchema;
};
/**
* @generated from rpc quixos.orch.OrchestratorRuntime.WatchQuery
*/
watchQuery: {
methodKind: "server_streaming";
input: typeof QueryRequestSchema;
output: typeof QueryEventSchema;
};
/** /**
* @generated from rpc quixos.orch.OrchestratorRuntime.TryConform * @generated from rpc quixos.orch.OrchestratorRuntime.TryConform
*/ */
+1 -1
View File
File diff suppressed because one or more lines are too long
+40 -29
View File
File diff suppressed because one or more lines are too long
+6
View File
@@ -111,6 +111,12 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
*/ */
value: string; value: string;
case: "constructorAtomId"; case: "constructorAtomId";
} | {
/**
* @generated from field: string query_id = 7;
*/
value: string;
case: "queryId";
} | { } | {
case: undefined; case: undefined;
value?: undefined; value?: undefined;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,OACi0B,CAAC;AAEj2B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IAC5D;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,CAAC,aAAa,CACxB,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG;IAClE;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAC9B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE;QACP;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,CAAC;KACrB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,qBAAqB,CAAC;KAC7B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;KAC3B,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG;IAC9D;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAC1B,CAAC"} {"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAC21B,CAAC;AAE33B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IAC5D;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,CAAC,aAAa,CACxB,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG;IAClE;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAC9B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE;QACP;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,CAAC;KACrB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,qBAAqB,CAAC;KAC7B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;KAC3B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;KACjB,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG;IAC9D;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAC1B,CAAC"}
+1 -1
View File
@@ -5,7 +5,7 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
/** /**
* Describes the file quixos/refs.proto. * Describes the file quixos/refs.proto.
*/ */
export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLEAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciPQoORWRnZURlcGVuZGVuY3kSFAoMZWRnZV90eXBlX2lkGAEgASgJEhUKDXByb2plY3Rpb25faWQYAiABKAliBnByb3RvMw"); export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLYAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEgoIcXVlcnlfaWQYByABKAlIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyI9Cg5FZGdlRGVwZW5kZW5jeRIUCgxlZGdlX3R5cGVfaWQYASABKAkSFQoNcHJvamVjdGlvbl9pZBgCIAEoCWIGcHJvdG8z");
/** /**
* Describes the message quixos.CapabilityRef. * Describes the message quixos.CapabilityRef.
* Use `create(CapabilityRefSchema)` to create a new message. * Use `create(CapabilityRefSchema)` to create a new message.
Generated
+7 -7
View File
@@ -74,17 +74,17 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1789670978, "lastModified": 1789688984,
"narHash": "sha256-7eKHXjv5ghEUqJ/DxhrvFnMIwI7BLfqsGOT1A/7w94E=", "narHash": "sha256-wwLDdgsgJ5jpm7up/K303TIix62cDmGmwP0uN3HFehQ=",
"ref": "refs/tags/quixos-reachability/c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89", "ref": "refs/tags/quixos-reachability/ae0a5064a457ee614f08f551d1be2d0c43c83716",
"rev": "c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89", "rev": "ae0a5064a457ee614f08f551d1be2d0c43c83716",
"revCount": 78, "revCount": 84,
"type": "git", "type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git" "url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
}, },
"original": { "original": {
"ref": "refs/tags/quixos-reachability/c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89", "ref": "refs/tags/quixos-reachability/ae0a5064a457ee614f08f551d1be2d0c43c83716",
"rev": "c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89", "rev": "ae0a5064a457ee614f08f551d1be2d0c43c83716",
"type": "git", "type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git" "url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
} }
+1 -1
View File
@@ -4,7 +4,7 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
quixos-protocol.url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git?ref=refs/tags/quixos-reachability/c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89&rev=c3fe7c86b8e88b1bef1ef5dc2fdc5992bbd3bc89"; quixos-protocol.url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git?ref=refs/tags/quixos-reachability/ae0a5064a457ee614f08f551d1be2d0c43c83716&rev=ae0a5064a457ee614f08f551d1be2d0c43c83716";
quixosNixHelpers = { quixosNixHelpers = {
url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/7177130c0365f2fa58ea4877366e1c5d17db4c01&rev=7177130c0365f2fa58ea4877366e1c5d17db4c01"; url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/7177130c0365f2fa58ea4877366e1c5d17db4c01&rev=7177130c0365f2fa58ea4877366e1c5d17db4c01";
flake = false; flake = false;
+34
View File
@@ -12,6 +12,7 @@ import {
export type { QxObjectRef } from "./references.js"; export type { QxObjectRef } from "./references.js";
import { assertReferenceFree, referenceToWire } from "./references.js"; import { assertReferenceFree, referenceToWire } from "./references.js";
import { decodeQuerySnapshot } from "./queries.js";
declare const watchBrand: unique symbol; declare const watchBrand: unique symbol;
export type QxWatchHandle = string & { readonly [watchBrand]: true }; export type QxWatchHandle = string & { readonly [watchBrand]: true };
export type MessageBinding<T> = { encode(value: T): Value; decode(value: Value): T }; export type MessageBinding<T> = { encode(value: T): Value; decode(value: Value): T };
@@ -50,6 +51,7 @@ export type QxValueType =
| { kind: "optional" | "list"; value: QxValueType }; | { kind: "optional" | "list"; value: QxValueType };
export type QxOperationSpec = { id: string; inputType: QxValueType; outputType: QxValueType }; export type QxOperationSpec = { id: string; inputType: QxValueType; outputType: QxValueType };
export type QxPortSpec = export type QxPortSpec =
| { kind: "query"; id: string; definitionDigest: string; variables: QxValueType; output: QxValueType; watch: boolean }
| { kind: "state"; id: string; valueType: QxValueType; primitives: string[] } | { kind: "state"; id: string; valueType: QxValueType; primitives: string[] }
| { kind: "edge"; id: string; primitives: string[] } | { kind: "edge"; id: string; primitives: string[] }
| { kind: "interface"; id: string; interfaceRevisionId: string; operations: Record<string, QxOperationSpec> } | { kind: "interface"; id: string; interfaceRevisionId: string; operations: Record<string, QxOperationSpec> }
@@ -244,6 +246,38 @@ export const bindQxHandler = <C, O>(
bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages), bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages),
]; ];
} }
case "query": {
const query = raw.query(port.id);
const variablesToWire = (variables: unknown) => {
const value = encodeQxValue(port.variables, variables, messages);
if (value.kind.case !== "objectValue") throw new Error("QUERY_VARIABLE_INVALID");
return value.kind.value.fields;
};
return [
name,
{
async execute(variables: unknown) {
const response = await query.execute(variablesToWire(variables), port.definitionDigest);
if (response.pending.length || response.errors.length) throw new Error("QUERY_INCOMPLETE");
return decodeQxValue(port.output, response.value, messages);
},
...(port.watch
? {
async *watch(variables: unknown, signal: AbortSignal) {
for await (const event of query.watch(
variablesToWire(variables),
signal,
port.definitionDigest,
)) {
if (!event.snapshot) throw new Error("QUERY_SNAPSHOT_MISSING");
yield decodeQuerySnapshot(event.snapshot, port.output, event.runId, event.sequence);
}
},
}
: {}),
},
];
}
case "constructor": case "constructor":
return [ return [
name, name,
+413 -2
View File
File diff suppressed because one or more lines are too long
+364 -1
View File
@@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file camino/schema.proto. * Describes the file camino/schema.proto.
*/ */
export const file_camino_schema: GenFile = /*@__PURE__*/ export const file_camino_schema: GenFile = /*@__PURE__*/
fileDesc("ChNjYW1pbm8vc2NoZW1hLnByb3RvEgZjYW1pbm8iNwoOQXRvbURlZmluaXRpb24SDwoHYXRvbV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiWQoPQXRvbUNvbmZvcm1hbmNlEg8KB2F0b21faWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJIsIBCg9TdGF0ZUF0dGFjaG1lbnQSDwoHc2xvdF9pZBgBIAEoCRIYChBhdHRhY2hlZF9hdG9tX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIXCg92YWx1ZV90eXBlX2pzb24YBCABKAkSGwoTc3RvcmFnZV9wb2xpY3lfanNvbhgFIAEoCRIaChJkZWZhdWx0X3ZhbHVlX2pzb24YBiABKAkSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYByABKAkiUAoSRW5kcG9pbnRDb25zdHJhaW50EhEKB2F0b21faWQYASABKAlIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAlIAEIGCgRraW5kIvsBCgxFZGdlRW5kcG9pbnQSFQoNcHJvamVjdGlvbl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSLgoKY29uc3RyYWludBgDIAEoCzIaLmNhbWluby5FbmRwb2ludENvbnN0cmFpbnQSKAoLY2FyZGluYWxpdHkYBCABKA4yEy5jYW1pbm8uQ2FyZGluYWxpdHkSDwoHb3JkZXJlZBgFIAEoCBIRCglvbl9kZWxldGUYBiABKAkSFAoMcmV0YWluX290aGVyGAcgASgIEhAKCGtleV90eXBlGAggASgJEhgKEHB1YmxpY190cmF2ZXJzYWwYCSABKAgipQEKDkVkZ2VBdHRhY2htZW50EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSIwoFZmlyc3QYAyABKAsyFC5jYW1pbm8uRWRnZUVuZHBvaW50EiQKBnNlY29uZBgEIAEoCzIULmNhbWluby5FZGdlRW5kcG9pbnQSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYBSABKAki7AEKD1BlcnNpc3RlbmNlUGxhbhIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEiUKBWF0b21zGAMgAygLMhYuY2FtaW5vLkF0b21EZWZpbml0aW9uEi0KDGNvbmZvcm1hbmNlcxgEIAMoCzIXLmNhbWluby5BdG9tQ29uZm9ybWFuY2USJwoGc3RhdGVzGAUgAygLMhcuY2FtaW5vLlN0YXRlQXR0YWNobWVudBIlCgVlZGdlcxgGIAMoCzIWLmNhbWluby5FZGdlQXR0YWNobWVudCpoCgtDYXJkaW5hbGl0eRIbChdDQVJESU5BTElUWV9VTlNQRUNJRklFRBAAEhAKDE9QVElPTkFMX09ORRABEg8KC0VYQUNUTFlfT05FEAISCAoETUFOWRADEg8KC01BTllfVU5JUVVFEARiBnByb3RvMw"); fileDesc("ChNjYW1pbm8vc2NoZW1hLnByb3RvEgZjYW1pbm8iNwoOQXRvbURlZmluaXRpb24SDwoHYXRvbV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiWQoPQXRvbUNvbmZvcm1hbmNlEg8KB2F0b21faWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJIsIBCg9TdGF0ZUF0dGFjaG1lbnQSDwoHc2xvdF9pZBgBIAEoCRIYChBhdHRhY2hlZF9hdG9tX2lkGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRIXCg92YWx1ZV90eXBlX2pzb24YBCABKAkSGwoTc3RvcmFnZV9wb2xpY3lfanNvbhgFIAEoCRIaChJkZWZhdWx0X3ZhbHVlX2pzb24YBiABKAkSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYByABKAkiUAoSRW5kcG9pbnRDb25zdHJhaW50EhEKB2F0b21faWQYASABKAlIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAlIAEIGCgRraW5kIvsBCgxFZGdlRW5kcG9pbnQSFQoNcHJvamVjdGlvbl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSLgoKY29uc3RyYWludBgDIAEoCzIaLmNhbWluby5FbmRwb2ludENvbnN0cmFpbnQSKAoLY2FyZGluYWxpdHkYBCABKA4yEy5jYW1pbm8uQ2FyZGluYWxpdHkSDwoHb3JkZXJlZBgFIAEoCBIRCglvbl9kZWxldGUYBiABKAkSFAoMcmV0YWluX290aGVyGAcgASgIEhAKCGtleV90eXBlGAggASgJEhgKEHB1YmxpY190cmF2ZXJzYWwYCSABKAgipQEKDkVkZ2VBdHRhY2htZW50EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSIwoFZmlyc3QYAyABKAsyFC5jYW1pbm8uRWRnZUVuZHBvaW50EiQKBnNlY29uZBgEIAEoCzIULmNhbWluby5FZGdlRW5kcG9pbnQSHAoUb3duZXJfY29uZm9ybWFuY2VfaWQYBSABKAkilQIKD1BlcnNpc3RlbmNlUGxhbhIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEiUKBWF0b21zGAMgAygLMhYuY2FtaW5vLkF0b21EZWZpbml0aW9uEi0KDGNvbmZvcm1hbmNlcxgEIAMoCzIXLmNhbWluby5BdG9tQ29uZm9ybWFuY2USJwoGc3RhdGVzGAUgAygLMhcuY2FtaW5vLlN0YXRlQXR0YWNobWVudBIlCgVlZGdlcxgGIAMoCzIWLmNhbWluby5FZGdlQXR0YWNobWVudBInCgdxdWVyaWVzGAcgAygLMhYuY2FtaW5vLkluc3RhbGxlZFF1ZXJ5Ip4BCg1RdWVyeUFyZ3VtZW50EhIKCHZhcmlhYmxlGAEgASgJSAASFgoMbGl0ZXJhbF9qc29uGAIgASgJSAASKQoEbGlzdBgDIAEoCzIZLmNhbWluby5RdWVyeUFyZ3VtZW50TGlzdEgAEi0KBm9iamVjdBgEIAEoCzIbLmNhbWluby5RdWVyeUFyZ3VtZW50T2JqZWN0SABCBwoFdmFsdWUiOgoRUXVlcnlBcmd1bWVudExpc3QSJQoGdmFsdWVzGAEgAygLMhUuY2FtaW5vLlF1ZXJ5QXJndW1lbnQilAEKE1F1ZXJ5QXJndW1lbnRPYmplY3QSNwoGZmllbGRzGAEgAygLMicuY2FtaW5vLlF1ZXJ5QXJndW1lbnRPYmplY3QuRmllbGRzRW50cnkaRAoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUuY2FtaW5vLlF1ZXJ5QXJndW1lbnQ6AjgBIkcKDlF1ZXJ5Q29uZGl0aW9uEg8KB2luY2x1ZGUYASABKAgSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudCLdAgoOUXVlcnlTZWxlY3Rpb24SDAoEbmFtZRgBIAEoCRILCgNrZXkYAiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAMgASgJEhEKCW1lbWJlcl9pZBgEIAEoCRIkChx0YXJnZXRfaW50ZXJmYWNlX3JldmlzaW9uX2lkGAUgASgJEioKCmNvbmRpdGlvbnMYBiADKAsyFi5jYW1pbm8uUXVlcnlDb25kaXRpb24SOAoJYXJndW1lbnRzGAcgAygLMiUuY2FtaW5vLlF1ZXJ5U2VsZWN0aW9uLkFyZ3VtZW50c0VudHJ5EikKCXNlbGVjdGlvbhgIIAMoCzIWLmNhbWluby5RdWVyeVNlbGVjdGlvbhpHCg5Bcmd1bWVudHNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudDoCOAEi6QIKEFF1ZXJ5UmVhZEJpbmRpbmcSDwoHYXRvbV9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSEQoJbWVtYmVyX2lkGAMgASgJEhsKE2dldHRlcl9vcGVyYXRpb25faWQYBCABKAkSDwoHc2xvdF9pZBgFIAEoCRIUCgxlZGdlX3R5cGVfaWQYBiABKAkSFQoNcHJvamVjdGlvbl9pZBgHIAEoCRILCgNycGMYCCABKAgSIAoYd2F0Y2hfc3RhcnRfb3BlcmF0aW9uX2lkGAkgASgJEh8KF3dhdGNoX3N0b3Bfb3BlcmF0aW9uX2lkGAogASgJEhIKCmZpZWxkX25hbWUYCyABKAkSFwoPdmFsdWVfdHlwZV9qc29uGAwgASgJEigKC2NhcmRpbmFsaXR5GA0gASgOMhMuY2FtaW5vLkNhcmRpbmFsaXR5EhAKCGtleV90eXBlGA4gASgJIpIBCgxRdWVyeUJ1ZGdldHMSDAoEcm93cxgBIAEoDRINCgVkZXB0aBgCIAEoDRIUCgxyZXN1bHRfYnl0ZXMYAyABKA0SEgoKY2FuZGlkYXRlcxgEIAEoDRIRCglycGNfY2FsbHMYBSABKA0SEwoLY29uY3VycmVuY3kYBiABKA0SEwoLZGVhZGxpbmVfbXMYByABKA0ijQQKDkluc3RhbGxlZFF1ZXJ5EgoKAmlkGAEgASgJEhkKEWRlZmluaXRpb25fZGlnZXN0GAIgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAMgASgJEiIKGnJvb3RfaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEikKCXNlbGVjdGlvbhgFIAMoCzIWLmNhbWluby5RdWVyeVNlbGVjdGlvbhIqCghiaW5kaW5ncxgGIAMoCzIYLmNhbWluby5RdWVyeVJlYWRCaW5kaW5nEiUKB2J1ZGdldHMYByABKAsyFC5jYW1pbm8uUXVlcnlCdWRnZXRzEhsKE3ZhcmlhYmxlc190eXBlX2pzb24YCCABKAkSGAoQb3V0cHV0X3R5cGVfanNvbhgJIAEoCRJHChF2YXJpYWJsZV9kZWZhdWx0cxgKIAMoCzIsLmNhbWluby5JbnN0YWxsZWRRdWVyeS5WYXJpYWJsZURlZmF1bHRzRW50cnkSDQoFd2F0Y2gYCyABKAgSGwoTcG9sbGluZ19pbnRlcnZhbF9tcxgMIAEoDRIeChZycGNfcHJlZGljYXRlX29yX29yZGVyGA0gASgIGk4KFVZhcmlhYmxlRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5jYW1pbm8uUXVlcnlBcmd1bWVudDoCOAEqaAoLQ2FyZGluYWxpdHkSGwoXQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIQCgxPUFRJT05BTF9PTkUQARIPCgtFWEFDVExZX09ORRACEggKBE1BTlkQAxIPCgtNQU5ZX1VOSVFVRRAEYgZwcm90bzM");
/** /**
* @generated from message camino.AtomDefinition * @generated from message camino.AtomDefinition
@@ -273,6 +273,11 @@ export type PersistencePlan = Message<"camino.PersistencePlan"> & {
* @generated from field: repeated camino.EdgeAttachment edges = 6; * @generated from field: repeated camino.EdgeAttachment edges = 6;
*/ */
edges: EdgeAttachment[]; edges: EdgeAttachment[];
/**
* @generated from field: repeated camino.InstalledQuery queries = 7;
*/
queries: InstalledQuery[];
}; };
/** /**
@@ -282,6 +287,364 @@ export type PersistencePlan = Message<"camino.PersistencePlan"> & {
export const PersistencePlanSchema: GenMessage<PersistencePlan> = /*@__PURE__*/ export const PersistencePlanSchema: GenMessage<PersistencePlan> = /*@__PURE__*/
messageDesc(file_camino_schema, 6); messageDesc(file_camino_schema, 6);
/**
* Immutable checked query IR. Installed only with the checked persistence plan;
* query callers select its ID, never send or modify these definitions.
*
* @generated from message camino.QueryArgument
*/
export type QueryArgument = Message<"camino.QueryArgument"> & {
/**
* @generated from oneof camino.QueryArgument.value
*/
value: {
/**
* @generated from field: string variable = 1;
*/
value: string;
case: "variable";
} | {
/**
* @generated from field: string literal_json = 2;
*/
value: string;
case: "literalJson";
} | {
/**
* @generated from field: camino.QueryArgumentList list = 3;
*/
value: QueryArgumentList;
case: "list";
} | {
/**
* @generated from field: camino.QueryArgumentObject object = 4;
*/
value: QueryArgumentObject;
case: "object";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message camino.QueryArgument.
* Use `create(QueryArgumentSchema)` to create a new message.
*/
export const QueryArgumentSchema: GenMessage<QueryArgument> = /*@__PURE__*/
messageDesc(file_camino_schema, 7);
/**
* @generated from message camino.QueryArgumentList
*/
export type QueryArgumentList = Message<"camino.QueryArgumentList"> & {
/**
* @generated from field: repeated camino.QueryArgument values = 1;
*/
values: QueryArgument[];
};
/**
* Describes the message camino.QueryArgumentList.
* Use `create(QueryArgumentListSchema)` to create a new message.
*/
export const QueryArgumentListSchema: GenMessage<QueryArgumentList> = /*@__PURE__*/
messageDesc(file_camino_schema, 8);
/**
* @generated from message camino.QueryArgumentObject
*/
export type QueryArgumentObject = Message<"camino.QueryArgumentObject"> & {
/**
* @generated from field: map<string, camino.QueryArgument> fields = 1;
*/
fields: { [key: string]: QueryArgument };
};
/**
* Describes the message camino.QueryArgumentObject.
* Use `create(QueryArgumentObjectSchema)` to create a new message.
*/
export const QueryArgumentObjectSchema: GenMessage<QueryArgumentObject> = /*@__PURE__*/
messageDesc(file_camino_schema, 9);
/**
* @generated from message camino.QueryCondition
*/
export type QueryCondition = Message<"camino.QueryCondition"> & {
/**
* @generated from field: bool include = 1;
*/
include: boolean;
/**
* @generated from field: camino.QueryArgument value = 2;
*/
value?: QueryArgument | undefined;
};
/**
* Describes the message camino.QueryCondition.
* Use `create(QueryConditionSchema)` to create a new message.
*/
export const QueryConditionSchema: GenMessage<QueryCondition> = /*@__PURE__*/
messageDesc(file_camino_schema, 10);
/**
* @generated from message camino.QuerySelection
*/
export type QuerySelection = Message<"camino.QuerySelection"> & {
/**
* @generated from field: string name = 1;
*/
name: string;
/**
* @generated from field: string key = 2;
*/
key: string;
/**
* @generated from field: string interface_revision_id = 3;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 4;
*/
memberId: string;
/**
* @generated from field: string target_interface_revision_id = 5;
*/
targetInterfaceRevisionId: string;
/**
* @generated from field: repeated camino.QueryCondition conditions = 6;
*/
conditions: QueryCondition[];
/**
* @generated from field: map<string, camino.QueryArgument> arguments = 7;
*/
arguments: { [key: string]: QueryArgument };
/**
* @generated from field: repeated camino.QuerySelection selection = 8;
*/
selection: QuerySelection[];
};
/**
* Describes the message camino.QuerySelection.
* Use `create(QuerySelectionSchema)` to create a new message.
*/
export const QuerySelectionSchema: GenMessage<QuerySelection> = /*@__PURE__*/
messageDesc(file_camino_schema, 11);
/**
* @generated from message camino.QueryReadBinding
*/
export type QueryReadBinding = Message<"camino.QueryReadBinding"> & {
/**
* @generated from field: string atom_id = 1;
*/
atomId: string;
/**
* @generated from field: string interface_revision_id = 2;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 3;
*/
memberId: string;
/**
* @generated from field: string getter_operation_id = 4;
*/
getterOperationId: string;
/**
* @generated from field: string slot_id = 5;
*/
slotId: string;
/**
* @generated from field: string edge_type_id = 6;
*/
edgeTypeId: string;
/**
* @generated from field: string projection_id = 7;
*/
projectionId: string;
/**
* @generated from field: bool rpc = 8;
*/
rpc: boolean;
/**
* @generated from field: string watch_start_operation_id = 9;
*/
watchStartOperationId: string;
/**
* @generated from field: string watch_stop_operation_id = 10;
*/
watchStopOperationId: string;
/**
* @generated from field: string field_name = 11;
*/
fieldName: string;
/**
* @generated from field: string value_type_json = 12;
*/
valueTypeJson: string;
/**
* @generated from field: camino.Cardinality cardinality = 13;
*/
cardinality: Cardinality;
/**
* @generated from field: string key_type = 14;
*/
keyType: string;
};
/**
* Describes the message camino.QueryReadBinding.
* Use `create(QueryReadBindingSchema)` to create a new message.
*/
export const QueryReadBindingSchema: GenMessage<QueryReadBinding> = /*@__PURE__*/
messageDesc(file_camino_schema, 12);
/**
* @generated from message camino.QueryBudgets
*/
export type QueryBudgets = Message<"camino.QueryBudgets"> & {
/**
* @generated from field: uint32 rows = 1;
*/
rows: number;
/**
* @generated from field: uint32 depth = 2;
*/
depth: number;
/**
* @generated from field: uint32 result_bytes = 3;
*/
resultBytes: number;
/**
* @generated from field: uint32 candidates = 4;
*/
candidates: number;
/**
* @generated from field: uint32 rpc_calls = 5;
*/
rpcCalls: number;
/**
* @generated from field: uint32 concurrency = 6;
*/
concurrency: number;
/**
* @generated from field: uint32 deadline_ms = 7;
*/
deadlineMs: number;
};
/**
* Describes the message camino.QueryBudgets.
* Use `create(QueryBudgetsSchema)` to create a new message.
*/
export const QueryBudgetsSchema: GenMessage<QueryBudgets> = /*@__PURE__*/
messageDesc(file_camino_schema, 13);
/**
* @generated from message camino.InstalledQuery
*/
export type InstalledQuery = Message<"camino.InstalledQuery"> & {
/**
* @generated from field: string id = 1;
*/
id: string;
/**
* @generated from field: string definition_digest = 2;
*/
definitionDigest: string;
/**
* @generated from field: string binding_digest = 3;
*/
bindingDigest: string;
/**
* @generated from field: string root_interface_revision_id = 4;
*/
rootInterfaceRevisionId: string;
/**
* @generated from field: repeated camino.QuerySelection selection = 5;
*/
selection: QuerySelection[];
/**
* @generated from field: repeated camino.QueryReadBinding bindings = 6;
*/
bindings: QueryReadBinding[];
/**
* @generated from field: camino.QueryBudgets budgets = 7;
*/
budgets?: QueryBudgets | undefined;
/**
* @generated from field: string variables_type_json = 8;
*/
variablesTypeJson: string;
/**
* @generated from field: string output_type_json = 9;
*/
outputTypeJson: string;
/**
* @generated from field: map<string, camino.QueryArgument> variable_defaults = 10;
*/
variableDefaults: { [key: string]: QueryArgument };
/**
* @generated from field: bool watch = 11;
*/
watch: boolean;
/**
* @generated from field: uint32 polling_interval_ms = 12;
*/
pollingIntervalMs: number;
/**
* @generated from field: bool rpc_predicate_or_order = 13;
*/
rpcPredicateOrOrder: boolean;
};
/**
* Describes the message camino.InstalledQuery.
* Use `create(InstalledQuerySchema)` to create a new message.
*/
export const InstalledQuerySchema: GenMessage<InstalledQuery> = /*@__PURE__*/
messageDesc(file_camino_schema, 14);
/** /**
* @generated from enum camino.Cardinality * @generated from enum camino.Cardinality
*/ */
+26 -1
View File
@@ -9,6 +9,7 @@ import {
type QxObjectRef, type QxObjectRef,
} from "./references.js"; } from "./references.js";
export * from "./bindings.js"; export * from "./bindings.js";
export * from "./queries.js";
export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js";
import { AsyncLocalStorage } from "node:async_hooks"; import { AsyncLocalStorage } from "node:async_hooks";
import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"; import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
@@ -33,6 +34,7 @@ import {
RefValueSchema, RefValueSchema,
ValueSchema, ValueSchema,
type Value, type Value,
type QueryResponse,
} from "./camino/api_pb.js"; } from "./camino/api_pb.js";
import { OrchestratorRuntime } from "./quixos/orch_pb.js"; import { OrchestratorRuntime } from "./quixos/orch_pb.js";
import { import {
@@ -197,7 +199,16 @@ export type ConstructorPort = {
atomId: string; atomId: string;
construct(input?: Record<string, unknown>): Promise<QxObjectRef>; construct(input?: Record<string, unknown>): Promise<QxObjectRef>;
}; };
export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort; export type QueryPort = {
queryId: string;
execute(variables: Record<string, Value>, expectedDefinitionDigest?: string): Promise<QueryResponse>;
watch(
variables: Record<string, Value>,
signal: AbortSignal,
expectedDefinitionDigest?: string,
): AsyncIterable<import("./quixos/orch_pb.js").QueryEvent>;
};
export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort;
export type RuntimeContext = { export type RuntimeContext = {
tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise<InterfacePort | undefined>; tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise<InterfacePort | undefined>;
@@ -212,6 +223,7 @@ export type RuntimeContext = {
edge(portId: string): EdgePort; edge(portId: string): EdgePort;
interface(portId: string): InterfacePort; interface(portId: string): InterfacePort;
constructor(portId: string): ConstructorPort; constructor(portId: string): ConstructorPort;
query(portId: string): QueryPort;
}; };
export type RuntimeSession = { export type RuntimeSession = {
@@ -273,6 +285,18 @@ export const createRuntimeContext = (
const ports = new Map<string, RuntimePort>(); const ports = new Map<string, RuntimePort>();
for (const dependency of request.dependencies) { for (const dependency of request.dependencies) {
switch (dependency.binding.case) { switch (dependency.binding.case) {
case "queryId": {
const queryId = dependency.binding.value,
objectId = dependency.objectId || request.objectId;
ports.set(dependency.portId, {
queryId,
execute: (variables, expectedDefinitionDigest) =>
orch.executeQuery({ queryId, objectId, variables, expectedDefinitionDigest }),
watch: (variables, signal, expectedDefinitionDigest) =>
orch.watchQuery({ queryId, objectId, variables, expectedDefinitionDigest }, { signal }),
});
break;
}
case "stateSlotId": { case "stateSlotId": {
const slotId = dependency.binding.value; const slotId = dependency.binding.value;
const dependencyObjectId = dependency.objectId || request.objectId; const dependencyObjectId = dependency.objectId || request.objectId;
@@ -421,6 +445,7 @@ export const createRuntimeContext = (
edge: (portId: string) => requirePort<EdgePort>(portId, "edgeTypeId"), edge: (portId: string) => requirePort<EdgePort>(portId, "edgeTypeId"),
interface: (portId: string) => requirePort<InterfacePort>(portId, "interfaceRevisionId"), interface: (portId: string) => requirePort<InterfacePort>(portId, "interfaceRevisionId"),
constructor: (portId: string) => requirePort<ConstructorPort>(portId, "atomId"), constructor: (portId: string) => requirePort<ConstructorPort>(portId, "atomId"),
query: (portId: string) => requirePort<QueryPort>(portId, "queryId"),
}; };
}; };
+82
View File
@@ -0,0 +1,82 @@
import { decodeQxValue, type QxValueType } from "./bindings.js";
import type { QueryResponse } from "./camino/api_pb.js";
import type { QxObjectRef } from "./references.js";
export type QxQueryPartial<T> = T extends QxObjectRef
? T
: T extends readonly (infer Item)[]
? QxQueryPartial<Item>[]
: T extends object
? { [Key in keyof T]?: QxQueryPartial<T[Key]> }
: T;
export type QxQuerySnapshot<T> = {
runId: string;
sequence: bigint;
dataVersion: string;
bindingDigest: string;
consistency: string;
fields: { path: readonly (string | number)[]; status: "pending" | "error"; error?: string }[];
} & ({ status: "ready"; data: T } | { status: "partial"; data: QxQueryPartial<T> });
declare const queryTypes: unique symbol;
/** Generated shape evidence, not permission to run a query. */
export interface QxQueryDescriptor<Variables, Result, Root extends string = string> {
readonly id: string;
readonly definitionDigest: string;
readonly rootInterfaceRevisionId: Root;
readonly variables: QxValueType;
readonly output: QxValueType;
readonly watch: boolean;
readonly [queryTypes]?: (variables: Variables, result: Result) => [Variables, Result];
}
export function decodeQuerySnapshot<T>(
response: QueryResponse,
output: QxValueType,
runId: string,
sequence: bigint,
): QxQuerySnapshot<T> {
if (response.preparationToken || response.residualWindows.length)
throw new Error("QUERY_RESULT_UNFINISHED: private preparation is not a query result");
const fields = [
...response.pending.map((field) => ({ path: field.path, status: "pending" as const })),
...response.errors.map((field) => ({ path: field.path, status: "error" as const, error: field.error })),
].map((field) => ({
...field,
path: field.path.map((part) => {
if (part.part.case !== "field" && part.part.case !== "index") throw new Error("QUERY_PATCH_INVALID");
return part.part.value;
}),
}));
// Pending/error values are absent, not successful nulls of a scalar type.
const shape = structuredClone(output);
for (const field of fields) {
let cursor = shape;
for (const [index, part] of field.path.entries()) {
while (cursor.kind === "optional") cursor = cursor.value;
const last = index === field.path.length - 1;
if (typeof part === "string" && cursor.kind === "record" && cursor.fields[part]) {
if (last) cursor.fields[part] = { kind: "optional", value: cursor.fields[part]! };
else cursor = cursor.fields[part]!;
} else if (typeof part === "number" && cursor.kind === "list") cursor = cursor.value;
else throw new Error("QUERY_PATCH_INVALID");
}
}
const data = decodeQxValue(shape, response.value, {}) as Record<string, unknown>;
for (const field of fields) {
let cursor: unknown = data;
for (const [index, part] of field.path.entries()) {
if (!cursor || typeof cursor !== "object") throw new Error("QUERY_PATCH_INVALID");
if (index === field.path.length - 1) delete (cursor as Record<string | number, unknown>)[part];
else cursor = (cursor as Record<string | number, unknown>)[part];
}
}
return {
runId,
sequence,
dataVersion: response.dataVersion,
bindingDigest: response.bindingDigest,
consistency: response.consistency,
fields,
...(fields.length ? { status: "partial", data } : { status: "ready", data }),
} as QxQuerySnapshot<T>;
}
+162 -30
View File
File diff suppressed because one or more lines are too long
+7 -1
View File
@@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/refs.proto. * Describes the file quixos/refs.proto.
*/ */
export const file_quixos_refs: GenFile = /*@__PURE__*/ export const file_quixos_refs: GenFile = /*@__PURE__*/
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLEAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciPQoORWRnZURlcGVuZGVuY3kSFAoMZWRnZV90eXBlX2lkGAEgASgJEhUKDXByb2plY3Rpb25faWQYAiABKAliBnByb3RvMw"); fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLYAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEgoIcXVlcnlfaWQYByABKAlIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyI9Cg5FZGdlRGVwZW5kZW5jeRIUCgxlZGdlX3R5cGVfaWQYASABKAkSFQoNcHJvamVjdGlvbl9pZBgCIAEoCWIGcHJvdG8z");
/** /**
* @generated from message quixos.CapabilityRef * @generated from message quixos.CapabilityRef
@@ -136,6 +136,12 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
*/ */
value: string; value: string;
case: "constructorAtomId"; case: "constructorAtomId";
} | {
/**
* @generated from field: string query_id = 7;
*/
value: string;
case: "queryId";
} | { case: undefined; value?: undefined }; } | { case: undefined; value?: undefined };
/** /**
+55
View File
@@ -0,0 +1,55 @@
import assert from "node:assert/strict";
import test from "node:test";
import { create } from "@bufbuild/protobuf";
import { QueryResponseSchema } from "../dist/camino/api_pb.js";
import { InjectedDependencySchema } from "../dist/quixos/refs_pb.js";
import { createRuntimeContext, decodeQuerySnapshot, jsToProtoValue, protoValueToJs } from "../dist/index.js";
test("query ports carry only an injected query identity and root", async () => {
let seen;
const context = createRuntimeContext(
{},
{
executeQuery: async (request) => {
seen = request;
return create(QueryResponseSchema);
},
},
{
objectId: "obj:receiver",
input: {},
dependencies: [
create(InjectedDependencySchema, {
portId: "list",
objectId: "obj:collection",
binding: { case: "queryId", value: "pkg@1:upcoming" },
}),
],
},
);
await context.query("list").execute({ first: jsToProtoValue(30) }, "checked-definition");
assert.equal(seen.expectedDefinitionDigest, "checked-definition");
assert.equal(seen.objectId, "obj:collection");
assert.equal(seen.queryId, "pkg@1:upcoming");
assert.equal(protoValueToJs(seen.variables.first), 30);
assert.throws(() => context.query("not-injected"), /Missing/);
});
test("query snapshots distinguish an unavailable scalar from a successful null", () => {
const output = {
kind: "record",
fields: { title: { kind: "scalar", name: "string" }, score: { kind: "scalar", name: "int64" } },
};
const response = create(QueryResponseSchema, {
value: jsToProtoValue({ title: "Native title", score: null }),
pending: [{ path: [{ part: { case: "field", value: "score" } }] }],
});
const snapshot = decodeQuerySnapshot(response, output, "run1", 1n);
assert.equal(snapshot.status, "partial");
assert.deepEqual(snapshot.data, { title: "Native title" });
assert.deepEqual(snapshot.fields, [{ path: ["score"], status: "pending" }]);
assert.equal(output.fields.score.kind, "scalar");
response.pending = [];
response.value = jsToProtoValue({ title: "Native title", score: 9007199254740993n });
assert.equal(decodeQuerySnapshot(response, output, "run1", 2n).data.score, 9007199254740993n);
});