Teach package runtime edge materialization

This commit is contained in:
Timothy J. Aveni
2026-07-15 07:54:17 -07:00
parent d2e3172a62
commit df4946e016
16 changed files with 271 additions and 44 deletions
+67 -10
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+27
View File
@@ -427,6 +427,28 @@ const isManyCardinality = (cardinality: Cardinality) =>
cardinality === "many_ordered" ||
cardinality === "many_unique_ordered";
const materializationFromOption = (
value: unknown,
fallbackVersion: string,
) => {
const object = asObject(value);
if (!object) {
return undefined;
}
const classRef = symbolRefFromOption(object.class, {
namespace: "",
name: "",
version: fallbackVersion,
});
if (!classRef.name) {
throw new Error("Edge materialization requires class");
}
return {
class: classRef,
connectProjection: readString(object, "connect_projection") ?? "",
};
};
const endpointFromOption = (params: {
option: unknown;
fallbackClass?: SymbolRef;
@@ -453,6 +475,10 @@ const endpointFromOption = (params: {
const cardinality = object?.cardinality === undefined
? params.fallbackCardinality
: cardinalityFromOption(object.cardinality);
const materialization = materializationFromOption(
object?.materialize,
params.fallbackVersion,
);
if (!classRef?.name && !interfaceRef?.name) {
throw new Error(`Edge endpoint ${projection} requires class or interface`);
}
@@ -462,6 +488,7 @@ const endpointFromOption = (params: {
projection,
cardinality,
indexed: readBoolean(object, "indexed") ?? false,
...(materialization ? { materialization } : {}),
};
};
+6
View File
@@ -28,6 +28,11 @@ export type Cardinality =
export type EdgeDirectionality = "directed" | "undirected";
export type EdgeMaterialization = {
class: SymbolRef;
connectProjection: string;
};
export type FieldStorageKind =
| "stored"
| "derived"
@@ -90,6 +95,7 @@ export type EdgeEndpointSchema = {
projection: string;
cardinality: Cardinality;
indexed: boolean;
materialization?: EdgeMaterialization;
};
export type EdgeSchema = {