feat: Application types generation from project GQL schema's (#8995)
This commit is contained in:
committed by
GitHub
parent
ac30a989f4
commit
2c5e72d141
@@ -51,7 +51,7 @@ export function defineJoinerConfig(
|
||||
alias?: JoinerServiceConfigAlias[]
|
||||
schema?: string
|
||||
models?: DmlEntity<any, any>[] | { name: string }[]
|
||||
linkableKeys?: Record<string, string>
|
||||
linkableKeys?: ModuleJoinerConfig["linkableKeys"]
|
||||
primaryKeys?: string[]
|
||||
} = {}
|
||||
): Omit<
|
||||
@@ -151,18 +151,19 @@ export function defineJoinerConfig(
|
||||
schema = toGraphQLSchema([...modelDefinitions.values()])
|
||||
}
|
||||
|
||||
if (!linkableKeys) {
|
||||
const linkableKeysFromDml = buildLinkableKeysFromDmlObjects([
|
||||
...modelDefinitions.values(),
|
||||
])
|
||||
const linkableKeysFromMikroOrm = buildLinkableKeysFromMikroOrmObjects([
|
||||
...mikroOrmObjects.values(),
|
||||
])
|
||||
linkableKeys = {
|
||||
...linkableKeysFromDml,
|
||||
...linkableKeysFromMikroOrm,
|
||||
}
|
||||
const linkableKeysFromDml = buildLinkableKeysFromDmlObjects([
|
||||
...modelDefinitions.values(),
|
||||
])
|
||||
const linkableKeysFromMikroOrm = buildLinkableKeysFromMikroOrmObjects([
|
||||
...mikroOrmObjects.values(),
|
||||
])
|
||||
|
||||
const mergedLinkableKeys = {
|
||||
...linkableKeysFromDml,
|
||||
...linkableKeysFromMikroOrm,
|
||||
...linkableKeys,
|
||||
}
|
||||
linkableKeys = mergedLinkableKeys
|
||||
|
||||
if (!primaryKeys && modelDefinitions.size) {
|
||||
const linkConfig = buildLinkConfigFromModelObjects(
|
||||
@@ -370,6 +371,7 @@ export function buildLinkConfigFromModelObjects<
|
||||
const linkableKeyName =
|
||||
parsedProperty.dataType.options?.linkable ??
|
||||
`${camelToSnakeCase(model.name).toLowerCase()}_${property}`
|
||||
|
||||
modelLinkConfig[property] = {
|
||||
linkable: linkableKeyName,
|
||||
primaryKey: property,
|
||||
@@ -397,21 +399,24 @@ export function buildLinkConfigFromLinkableKeys<
|
||||
|
||||
for (const [linkable, modelName] of Object.entries(linkableKeys)) {
|
||||
const kebabCasedModelName = camelToSnakeCase(toCamelCase(modelName))
|
||||
|
||||
const inferredReferenceProperty = linkable.replace(
|
||||
`${kebabCasedModelName}_`,
|
||||
""
|
||||
)
|
||||
|
||||
const keyName = lowerCaseFirst(modelName)
|
||||
const config = {
|
||||
linkable: linkable,
|
||||
primaryKey: inferredReferenceProperty,
|
||||
serviceName,
|
||||
field: lowerCaseFirst(modelName),
|
||||
field: keyName,
|
||||
}
|
||||
linkConfig[lowerCaseFirst(modelName)] = {
|
||||
[inferredReferenceProperty]: config,
|
||||
|
||||
linkConfig[keyName] ??= {
|
||||
toJSON: () => config,
|
||||
}
|
||||
linkConfig[keyName][inferredReferenceProperty] = config
|
||||
}
|
||||
|
||||
return linkConfig as Record<string, any>
|
||||
@@ -432,6 +437,5 @@ export function buildModelsNameToLinkableKeysMap(
|
||||
valueFrom: key.split("_").pop()!,
|
||||
})
|
||||
})
|
||||
|
||||
return entityLinkableKeysMap
|
||||
}
|
||||
|
||||
@@ -35,12 +35,12 @@ export function Module<
|
||||
} {
|
||||
const modelObjects = service[MedusaServiceModelObjectsSymbol] ?? {}
|
||||
|
||||
const defaultJoinerConfig = defineJoinerConfig(serviceName, {
|
||||
models: Object.keys(modelObjects).length
|
||||
? Object.values(modelObjects)
|
||||
: undefined,
|
||||
})
|
||||
service.prototype.__joinerConfig ??= () => defaultJoinerConfig
|
||||
service.prototype.__joinerConfig ??= () =>
|
||||
defineJoinerConfig(serviceName, {
|
||||
models: Object.keys(modelObjects).length
|
||||
? Object.values(modelObjects)
|
||||
: undefined,
|
||||
})
|
||||
|
||||
let linkable = {} as Linkable
|
||||
|
||||
|
||||
Reference in New Issue
Block a user