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
+20
View File
@@ -308,6 +308,24 @@ const isManyCardinality = (cardinality) => cardinality === "many" ||
cardinality === "many_unique" ||
cardinality === "many_ordered" ||
cardinality === "many_unique_ordered";
const materializationFromOption = (value, fallbackVersion) => {
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) => {
const object = asObject(params.option);
const classRef = asObject(object?.class)
@@ -328,6 +346,7 @@ 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`);
}
@@ -337,6 +356,7 @@ const endpointFromOption = (params) => {
projection,
cardinality,
indexed: readBoolean(object, "indexed") ?? false,
...(materialization ? { materialization } : {}),
};
};
const symbolKey = (ref) => ref ? [ref.namespace, ref.name, ref.version, ref.hash ?? ""].join(":") : "";