Files
medusa-store/packages/orchestration/src/joiner/helpers.ts
Adrien de Peretti 02fe4d1364 fix(orchestration): ToRemoteJoinerHelper property building (#5130)
* fix(orchestration): ToRemoteJoinerHelper property building

* update fix
2023-09-19 15:37:17 +02:00

58 lines
1.4 KiB
TypeScript

import { RemoteJoinerQuery } from "@medusajs/types"
export function toRemoteJoinerQuery(obj: any): RemoteJoinerQuery {
const remoteJoinerQuery: RemoteJoinerQuery = {
alias: "",
fields: [],
expands: [],
}
function extractRecursive(obj, parentName = "", isEntryPoint = true) {
for (const key in obj) {
const value = obj[key]
const canExpand =
typeof value === "object" &&
!["fields", "__args", "__directives"].includes(key)
if (canExpand) {
const entityName = parentName ? `${parentName}.${key}` : key
const expandObj: any = {
property: entityName,
}
const reference = isEntryPoint ? remoteJoinerQuery : expandObj
if (value.__args) {
reference.args = Object.entries(value.__args).map(
([name, value]) => ({
name,
value,
})
)
}
if (value.__directives) {
reference.directives = Object.entries(value.__directives).map(
([name, value]) => ({ name, value })
)
}
reference.fields = value.fields
if (isEntryPoint) {
remoteJoinerQuery.alias = key
} else {
remoteJoinerQuery.expands!.push(expandObj)
}
extractRecursive(value, isEntryPoint ? "" : entityName, false)
}
}
return remoteJoinerQuery
}
return extractRecursive(obj)
}