public generateModelFromMetadata = <
P extends Neo4jSupportedProperties,
R extends AnyObject = object,
M extends AnyObject = object,
S extends AnyObject = object,
>(
metadata: NeogmaModelMetadata,
): NeogmaModel<P, R, M, S> => {
const parsedMetadata = parseModelMetadata(metadata);
const relationships = parsedMetadata.relationships ?? [];
for (const relationship in relationships) {
const relatedModel = metadata.relationships[relationship].model;
if (relatedModel === 'self') {
continue;
}
const relatedModelLabel = relatedModel['name'];
if (this.models[relatedModelLabel]) {
relationships[relationship].model = this.models[relatedModelLabel];
} else {
const relatedModelMetadata = getRelatedModelMetadata(relatedModel);
relationships[relationship].model =
this.generateModelFromMetadata(relatedModelMetadata);
}
}
return ModelFactory(parsedMetadata, this) as unknown as NeogmaModel<
P,
R,
M,
S
>;
};
public addModel = <
P extends Neo4jSupportedProperties,
R extends AnyObject = object,
M extends AnyObject = object,
S extends AnyObject = object,
>(
model: Object,
): NeogmaModel<P, R, M, S> => {
const metadata = getModelMetadata(model);
return this.generateModelFromMetadata(metadata);
};
public generateModelFromMetadata = <
P extends Neo4jSupportedProperties,
R extends AnyObject = object,
M extends AnyObject = object,
S extends AnyObject = object,
>(
metadata: NeogmaModelMetadata,
): NeogmaModel<P, R, M, S> => {
const parsedMetadata = parseModelMetadata(metadata);
const relationships = parsedMetadata.relationships ?? [];
for (const relationship in relationships) {
const relatedModel = metadata.relationships[relationship].model;
if (relatedModel === 'self') {
continue;
}
const relatedModelLabel = relatedModel['name'];
if (this.models[relatedModelLabel]) {
relationships[relationship].model = this.models[relatedModelLabel];
} else {
const relatedModelMetadata = getRelatedModelMetadata(relatedModel);
relationships[relationship].model =
this.generateModelFromMetadata(relatedModelMetadata);
}
}
return ModelFactory(parsedMetadata, this) as unknown as NeogmaModel<
P,
R,
M,
S
>;
};
public addModel = <
P extends Neo4jSupportedProperties,
R extends AnyObject = object,
M extends AnyObject = object,
S extends AnyObject = object,
>(
model: Object,
): NeogmaModel<P, R, M, S> => {
const metadata = getModelMetadata(model);
return this.generateModelFromMetadata(metadata);
};