diff --git a/src/delegate/createRequest.ts b/src/delegate/createRequest.ts index 7d7813099f9..28ef8504ba9 100644 --- a/src/delegate/createRequest.ts +++ b/src/delegate/createRequest.ts @@ -174,10 +174,10 @@ function updateArgumentsWithDefaults( const argName = argument.name; const sourceArgType = argument.type; - if (argumentNodeMap[argName] == null) { + if (argumentNodeMap[argName] === undefined) { const defaultValue = argument.defaultValue; - if (defaultValue != null) { + if (defaultValue !== undefined) { updateArgument( argName, sourceArgType, diff --git a/src/polyfills/toConfig.ts b/src/polyfills/toConfig.ts index c51fdc52f4b..aeb73a704c8 100644 --- a/src/polyfills/toConfig.ts +++ b/src/polyfills/toConfig.ts @@ -140,7 +140,7 @@ export function toConfig(graphqlObject: any) { graphqlObject.subscribe != null ) { return fieldToConfig(graphqlObject); - } else if (graphqlObject.defaultValue != null) { + } else if (graphqlObject.defaultValue !== undefined) { return inputFieldToConfig(graphqlObject); } diff --git a/src/wrap/transforms/AddArgumentsAsVariables.ts b/src/wrap/transforms/AddArgumentsAsVariables.ts index 8f4d5dd4fac..e441623cec8 100644 --- a/src/wrap/transforms/AddArgumentsAsVariables.ts +++ b/src/wrap/transforms/AddArgumentsAsVariables.ts @@ -84,13 +84,16 @@ function addVariablesToRootField( const targetField = type.getFields()[selection.name.value]; - updateArguments( - targetField, - argumentNodeMap, - variableDefinitionMap, - variableValues, - args, - ); + // excludes __typename + if (targetField != null) { + updateArguments( + targetField, + argumentNodeMap, + variableDefinitionMap, + variableValues, + args, + ); + } newSelectionSet.push({ ...selection, @@ -124,6 +127,8 @@ function addVariablesToRootField( }; } +const hasOwn = Object.prototype.hasOwnProperty; + function updateArguments( targetField: GraphQLField, argumentNodeMap: Record, @@ -131,25 +136,19 @@ function updateArguments( variableValues: Record, newArgs: Record, ): void { - if (targetField != null) { - targetField.args.forEach((argument: GraphQLArgument) => { - const argName = argument.name; - const argType = argument.type; - - if (newArgs[argName] != null) { - const newArg = newArgs[argName]; - - if (newArg != null) { - updateArgument( - argName, - argType, - argumentNodeMap, - variableDefinitionMap, - variableValues, - serializeInputValue(argType, newArg), - ); - } - } - }); - } + targetField.args.forEach((argument: GraphQLArgument) => { + const argName = argument.name; + const argType = argument.type; + + if (hasOwn.call(newArgs, argName)) { + updateArgument( + argName, + argType, + argumentNodeMap, + variableDefinitionMap, + variableValues, + serializeInputValue(argType, newArgs[argName]), + ); + } + }); }