chore(modules-sdk,orchestration): to remote joiner query (#4974)

Helper function to transform js/json object into RemoteJoinerQuery format.

```typescript
toRemoteJoinerQuery({
  product: {
    fields: ["id", "title"],
    __args: {
      skip: 0,
    },
    variants: {
      fields: ["id", "title", "handle", "sku"],
      shipping_profile: {
        profile: {
          fields: ["id", "name"],
        },
      },
    },
    collections: {
      fields: ["id", "title"],
    },
  },
})
```

outputs:
```
{
  alias: "product",
  fields: ["id", "title"],
  expands: [
    {
      property: "product.variants",
      fields: ["id", "title", "handle", "sku"],
    },
    {
      property: "product.variants.shipping_profile",
    },
    {
      property: "product.variants.shipping_profile.profile",
      fields: ["id", "name"],
    },
    {
      property: "product.collections",
      fields: ["id", "title"],
    },
  ],
  args: [
    {
      name: "skip",
      value: 0,
    },
  ],
};
```
This commit is contained in:
Carlos R. L. Rodrigues
2023-09-10 10:26:50 -03:00
committed by GitHub
parent 7a12aa04ac
commit d8649bacaa
5 changed files with 225 additions and 6 deletions

View File

@@ -1,3 +1,8 @@
import {
RemoteFetchDataCallback,
RemoteJoiner,
toRemoteJoinerQuery,
} from "@medusajs/orchestration"
import {
JoinerRelationship,
JoinerServiceConfig,
@@ -6,8 +11,6 @@ import {
RemoteExpandProperty,
RemoteJoinerQuery,
} from "@medusajs/types"
import { RemoteFetchDataCallback, RemoteJoiner } from "@medusajs/orchestration"
import { isString, toPascalCase } from "@medusajs/utils"
import { MedusaModule } from "./medusa-module"
@@ -213,12 +216,16 @@ export class RemoteQuery {
}
public async query(
query: string | RemoteJoinerQuery,
query: string | RemoteJoinerQuery | object,
variables?: Record<string, unknown>
): Promise<any> {
const finalQuery = isString(query)
? RemoteJoiner.parseQuery(query, variables)
: query
let finalQuery: RemoteJoinerQuery = query as RemoteJoinerQuery
if (isString(query)) {
finalQuery = RemoteJoiner.parseQuery(query, variables)
} else if (!isString(finalQuery?.service) && !isString(finalQuery?.alias)) {
finalQuery = toRemoteJoinerQuery(query)
}
return await this.remoteJoiner.query(finalQuery)
}