From 6a1586d5b70519d58423493c32192365d0072fa3 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 5 Nov 2020 11:16:56 -0800 Subject: [PATCH] Bugfix for validating optimistic updates containing undefined fields Reviewed By: kassens Differential Revision: D24749857 fbshipit-source-id: ddc91365e5b2cd5591d3da7cda4c62212ddd651a --- .../mutations/__tests__/validateMutation-test.js | 2 +- packages/relay-runtime/mutations/validateMutation.js | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/relay-runtime/mutations/__tests__/validateMutation-test.js b/packages/relay-runtime/mutations/__tests__/validateMutation-test.js index 4d860b46c80ac..482554de3f53c 100644 --- a/packages/relay-runtime/mutations/__tests__/validateMutation-test.js +++ b/packages/relay-runtime/mutations/__tests__/validateMutation-test.js @@ -551,7 +551,7 @@ describe('validateOptimisticResponse', () => { }, }, variables: null, - shouldWarn: true, + shouldWarn: false, }, { name: 'Does not log a warning for client-side schema extensions', diff --git a/packages/relay-runtime/mutations/validateMutation.js b/packages/relay-runtime/mutations/validateMutation.js index 311f85413334b..8675483c25ebe 100644 --- a/packages/relay-runtime/mutations/validateMutation.js +++ b/packages/relay-runtime/mutations/validateMutation.js @@ -30,6 +30,8 @@ type ValidationContext = {| const warning = require('warning'); +const hasOwnProperty = Object.prototype.hasOwnProperty; + let validateMutation = () => {}; if (__DEV__) { const addFieldToDiff = (path: string, diff: Object, isScalar) => { @@ -147,7 +149,7 @@ if (__DEV__) { context.visitedPaths.add(path); switch (field.kind) { case 'ScalarField': - if (optimisticResponse.hasOwnProperty(fieldName) === false) { + if (hasOwnProperty.call(optimisticResponse, fieldName) === false) { addFieldToDiff(path, context.missingDiff, true); } return; @@ -155,7 +157,7 @@ if (__DEV__) { const selections = field.selections; if ( optimisticResponse[fieldName] === null || - (Object.hasOwnProperty(fieldName) && + (hasOwnProperty.call(optimisticResponse, fieldName) && optimisticResponse[fieldName] === undefined) ) { return;