Teach package runtime edge materialization
This commit is contained in:
Vendored
+20
@@ -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(":") : "";
|
||||
|
||||
Reference in New Issue
Block a user