mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 04:27:21 +00:00
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import { transformObject } from "core/utils";
|
|
import { Entity, type Field } from "data";
|
|
import { FIELDS, RELATIONS, type TAppDataEntity, type TAppDataRelation } from "data/data-schema";
|
|
|
|
export function constructEntity(name: string, entityConfig: TAppDataEntity) {
|
|
const fields = transformObject(entityConfig.fields ?? {}, (fieldConfig, name) => {
|
|
const { type } = fieldConfig;
|
|
if (!(type in FIELDS)) {
|
|
throw new Error(`Field type "${type}" not found`);
|
|
}
|
|
|
|
const { field } = FIELDS[type as any];
|
|
const returnal = new field(name, fieldConfig.config) as Field;
|
|
return returnal;
|
|
});
|
|
|
|
return new Entity(
|
|
name,
|
|
Object.values(fields),
|
|
entityConfig.config as any,
|
|
entityConfig.type as any,
|
|
);
|
|
}
|
|
|
|
export function constructRelation(
|
|
relationConfig: TAppDataRelation,
|
|
resolver: (name: Entity | string) => Entity,
|
|
) {
|
|
return new RELATIONS[relationConfig.type].cls(
|
|
resolver(relationConfig.source),
|
|
resolver(relationConfig.target),
|
|
relationConfig.config,
|
|
);
|
|
}
|