From 833382c1884f6ca62b16a1e16862fa78aaf483c2 Mon Sep 17 00:00:00 2001 From: Arda TANRIKULU Date: Mon, 7 Nov 2022 12:09:34 +0300 Subject: [PATCH] fix(wrap): optional argument value is not defined with MapLeafValues transform --- .changeset/twelve-owls-glow.md | 5 +++++ packages/wrap/src/transforms/MapLeafValues.ts | 12 +++++++----- .../wrap/tests/transformMapLeafValues.test.ts | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 .changeset/twelve-owls-glow.md diff --git a/.changeset/twelve-owls-glow.md b/.changeset/twelve-owls-glow.md new file mode 100644 index 00000000000..e8bcf7c4dc3 --- /dev/null +++ b/.changeset/twelve-owls-glow.md @@ -0,0 +1,5 @@ +--- +'@graphql-tools/wrap': patch +--- + +Fix the bug when an optional argument's value is not provided with MapLeafValues transform diff --git a/packages/wrap/src/transforms/MapLeafValues.ts b/packages/wrap/src/transforms/MapLeafValues.ts index 1738c5c09af..dcf487d3bcb 100644 --- a/packages/wrap/src/transforms/MapLeafValues.ts +++ b/packages/wrap/src/transforms/MapLeafValues.ts @@ -179,14 +179,16 @@ export default class MapLeafValues> return newValue === undefined ? v : newValue; }); - if (argValue.kind === Kind.VARIABLE) { + if (argValue?.kind === Kind.VARIABLE) { variableValues[argValue.name.value] = transformedValue; } else { const newValueNode = astFromValue(transformedValue, argType); - argumentNodeMap[argName] = { - ...argumentNode, - value: newValueNode!, - }; + if (newValueNode != null) { + argumentNodeMap[argName] = { + ...argumentNode, + value: newValueNode, + }; + } } } diff --git a/packages/wrap/tests/transformMapLeafValues.test.ts b/packages/wrap/tests/transformMapLeafValues.test.ts index 3e6d9f61648..3602ac6c218 100644 --- a/packages/wrap/tests/transformMapLeafValues.test.ts +++ b/packages/wrap/tests/transformMapLeafValues.test.ts @@ -81,4 +81,21 @@ describe('MapLeafValues', () => { expect(result.data['testEnum']).toBe('THREE'); expect(result.data['testScalar']).toBe(15); }); + test('works if optional argument is not provided', async () => { + const query = /* GraphQL */ ` + query MyQuery { + testEnum + testScalar + } + `; + + const result = await execute({ + schema: transformedSchema, + document: parse(query), + }); + if (isIncrementalResult(result)) throw Error('result is incremental'); + assertSome(result.data); + expect(result.data['testEnum']).toBe(null); + expect(result.data['testScalar']).toBe(null); + }); });