/
dimamir
/
medusa
Обзор
Документация
Войти
/
dimamir
/
medusa
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/core/utils/src/modules-sdk/module.ts
77 строк
2 KB
Harminder Virk
feat: convert MikroORM entities to DML entities (#10043)
26 ноя 2024, 17:31
Не верифицирован
26 ноя 2024, 17:31
9f20481
Код
Авторство
О чём код?
import { Constructor, IDmlEntity, ModuleExports } from "@medusajs/types" import { MedusaServiceModelObjectsSymbol } from "./medusa-service" import { buildLinkConfigFromLinkableKeys, buildLinkConfigFromModelObjects, defineJoinerConfig, } from "./joiner-config-builder" import { InfersLinksConfig } from "./types/links-config" import { DmlEntity } from "../dml" /** * Wrapper to build the module export and auto generate the joiner config if not already provided in the module service, as well as * return a linkable object based on the models * * @param serviceName * @param service * @param loaders */ export function Module< const ServiceName extends string, const Service extends Constructor<any>, ModelObjects extends Record<string, IDmlEntity<any, any>> = Service extends { $modelObjects: any } ? Service["$modelObjects"] : {}, Linkable = keyof ModelObjects extends never ? Record<string, any> : InfersLinksConfig<ServiceName, ModelObjects> >( serviceName: ServiceName, { service, loaders }: ModuleExports<Service> ): ModuleExports<Service> & { linkable: Linkable } { const modelObjects = service[MedusaServiceModelObjectsSymbol] ?? {} service.prototype.__joinerConfig ??= () => defineJoinerConfig(serviceName, { models: Object.keys(modelObjects).length ? Object.values(modelObjects) : undefined, }) let linkable = {} as Linkable if (Object.keys(modelObjects)?.length) { const dmlObjects = Object.entries(modelObjects).filter(([, model]) => DmlEntity.isDmlEntity(model) ) // TODO: Custom joiner config should take precedence over the DML auto generated linkable // Thats in the case of manually providing models in custom joiner config. // TODO: Add support for non linkable modifier DML object to be skipped from the linkable generation const linkableKeys = service.prototype.__joinerConfig().linkableKeys if (dmlObjects.length) { linkable = buildLinkConfigFromModelObjects<ServiceName, ModelObjects>( serviceName, modelObjects, linkableKeys ) as Linkable } else { linkable = buildLinkConfigFromLinkableKeys( serviceName, linkableKeys ) as Linkable } } return { service, loaders, linkable, } }