Teach package runtime edge materialization
This commit is contained in:
@@ -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 } : {}),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user