diff --git a/.changeset/tender-timers-compete.md b/.changeset/tender-timers-compete.md new file mode 100644 index 0000000000..b23a3f753c --- /dev/null +++ b/.changeset/tender-timers-compete.md @@ -0,0 +1,5 @@ +--- +"@medusajs/modules-sdk": patch +--- + +fix(modules-sdk): Fix remote query selection diff --git a/packages/modules-sdk/src/__tests__/remote-quer.spec.ts b/packages/modules-sdk/src/__tests__/remote-quer.spec.ts deleted file mode 100644 index 03735bc1b1..0000000000 --- a/packages/modules-sdk/src/__tests__/remote-quer.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { RemoteQuery } from "../remote-query" - -describe("Remote query", () => { - it("should properly handle fields and relations transformation", () => { - const expand = { - fields: ["name", "age"], - expands: { - friend: { - fields: ["name"], - expands: { - ball: { - fields: ["*"], - }, - }, - }, - }, - } - - const result = RemoteQuery.getAllFieldsAndRelations(expand) - - expect(result).toEqual({ - select: ["name", "age", "friend.name"], - relations: ["friend", "friend.ball"], - args: { - "": undefined, - friend: undefined, - "friend.ball": undefined, - }, - }) - }) - - it("should properly handle fields and relations transformation for top level entity", () => { - const expand = { - fields: ["*"], - } - - const result = RemoteQuery.getAllFieldsAndRelations(expand) - - expect(result).toEqual({ - select: undefined, - relations: [], - args: { - "": undefined, - }, - }) - }) -}) diff --git a/packages/modules-sdk/src/__tests__/remote-query.spec.ts b/packages/modules-sdk/src/__tests__/remote-query.spec.ts new file mode 100644 index 0000000000..daccb3f277 --- /dev/null +++ b/packages/modules-sdk/src/__tests__/remote-query.spec.ts @@ -0,0 +1,109 @@ +import { RemoteQuery } from "../remote-query" + +describe("Remote query", () => { + it("should properly handle fields and relations transformation", () => { + let expand = { + fields: ["name", "age"], + expands: { + friend: { + fields: ["name"], + expands: { + ball: { + fields: ["*"], + }, + }, + }, + }, + } + + let result = RemoteQuery.getAllFieldsAndRelations(expand) + + expect(result).toEqual({ + select: ["name", "age", "friend.name"], + relations: ["friend", "friend.ball"], + args: { + "": undefined, + friend: undefined, + "friend.ball": undefined, + }, + }) + + expand = { + fields: [], + expands: { + friend: { + fields: ["name"], + expands: { + ball: { + fields: ["*"], + }, + }, + }, + }, + } + + result = RemoteQuery.getAllFieldsAndRelations(expand) + + expect(result).toEqual({ + select: ["friend.name"], + relations: ["friend", "friend.ball"], + args: { + "": undefined, + friend: undefined, + "friend.ball": undefined, + }, + }) + + expand = { + fields: [], + expands: { + friend: { + fields: ["*"], + expands: { + ball: { + fields: ["*"], + }, + }, + }, + }, + } + + result = RemoteQuery.getAllFieldsAndRelations(expand) + + expect(result).toEqual({ + select: [], + relations: ["friend", "friend.ball"], + args: { + "": undefined, + friend: undefined, + "friend.ball": undefined, + }, + }) + + expand = { + fields: [], + expands: { + friend: { + fields: [], + expands: { + ball: { + fields: ["*"], + }, + }, + }, + }, + } + + result = RemoteQuery.getAllFieldsAndRelations(expand) + + expect(result).toEqual({ + select: [], + relations: ["friend", "friend.ball"], + args: { + "": undefined, + friend: undefined, + "friend.ball": undefined, + }, + }) + }) +}) diff --git a/packages/modules-sdk/src/remote-query.ts b/packages/modules-sdk/src/remote-query.ts index 5be5c40375..a08b9e1e7a 100644 --- a/packages/modules-sdk/src/remote-query.ts +++ b/packages/modules-sdk/src/remote-query.ts @@ -93,9 +93,11 @@ export class RemoteQuery { let fields: Set = new Set() let relations: string[] = [] + let shouldSelectAll = false + for (const field of expand.fields ?? []) { if (field === "*") { - expand.fields = undefined + shouldSelectAll = true break } fields.add(prefix ? `${prefix}.${field}` : field) @@ -120,7 +122,13 @@ export class RemoteQuery { } const allFields = Array.from(fields) - return { select: allFields.length ? allFields : undefined, relations, args } + const select = + allFields.length && !shouldSelectAll + ? allFields + : shouldSelectAll + ? undefined + : [] + return { select, relations, args } } private hasPagination(options: { [attr: string]: unknown }): boolean {