From 4a5618e60cdaf5664f269380235db48ef4550fac Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Tue, 21 May 2019 12:12:28 +0300 Subject: [PATCH] Enable "sketchy-null-mixed" Flow check --- .flowconfig | 2 +- src/error/GraphQLError.js | 8 +++++++- src/jsutils/inspect.js | 2 +- src/jsutils/invariant.js | 3 ++- src/language/__tests__/toJSONDeep.js | 2 +- src/language/__tests__/visitor-test.js | 4 ++-- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/.flowconfig b/.flowconfig index 75fcf47dbe..c7d484ac4c 100644 --- a/.flowconfig +++ b/.flowconfig @@ -13,7 +13,7 @@ sketchy-null-bool=off sketchy-null-string=off sketchy-null-number=error -sketchy-null-mixed=off +sketchy-null-mixed=error sketchy-number=error untyped-type-import=error nonstrict-import=off diff --git a/src/error/GraphQLError.js b/src/error/GraphQLError.js index c25c964f95..175eb72b01 100644 --- a/src/error/GraphQLError.js +++ b/src/error/GraphQLError.js @@ -138,7 +138,13 @@ export function GraphQLError( // eslint-disable-line no-redeclare }, []); } - const _extensions = extensions || (originalError && originalError.extensions); + let _extensions = extensions; + if (_extensions == null && originalError != null) { + const originalExtensions = originalError.extensions; + if (originalExtensions != null && typeof originalExtensions === 'object') { + _extensions = originalExtensions; + } + } Object.defineProperties(this, { message: { diff --git a/src/jsutils/inspect.js b/src/jsutils/inspect.js index e277dd1504..c5642b4d03 100644 --- a/src/jsutils/inspect.js +++ b/src/jsutils/inspect.js @@ -41,7 +41,7 @@ function formatObjectValue(value, previouslySeenValues) { if (value) { const customInspectFn = getCustomFn(value); - if (customInspectFn) { + if (customInspectFn !== undefined) { // $FlowFixMe(>=0.90.0) const customValue = customInspectFn.call(value); diff --git a/src/jsutils/invariant.js b/src/jsutils/invariant.js index a3cf0daf38..350cff5b86 100644 --- a/src/jsutils/invariant.js +++ b/src/jsutils/invariant.js @@ -8,8 +8,9 @@ */ export default function invariant(condition: mixed, message: string) { + const booleanCondition = Boolean(condition); /* istanbul ignore else */ - if (!condition) { + if (!booleanCondition) { throw new Error(message); } } diff --git a/src/language/__tests__/toJSONDeep.js b/src/language/__tests__/toJSONDeep.js index 6b22e842ee..4b0c3042f7 100644 --- a/src/language/__tests__/toJSONDeep.js +++ b/src/language/__tests__/toJSONDeep.js @@ -12,7 +12,7 @@ * on any nested value which defines it. */ export default function toJSONDeep(value: T): T { - if (!value || typeof value !== 'object') { + if (value == null || typeof value !== 'object') { return value; } diff --git a/src/language/__tests__/visitor-test.js b/src/language/__tests__/visitor-test.js index 2bbca5dc33..f14eaf8d91 100644 --- a/src/language/__tests__/visitor-test.js +++ b/src/language/__tests__/visitor-test.js @@ -472,7 +472,7 @@ describe('Visitor', () => { 'enter', node.kind, key, - parent && parent.kind ? parent.kind : undefined, + parent && parent.kind != null ? parent.kind : undefined, ]); checkVisitorFnArgs(ast, arguments); @@ -484,7 +484,7 @@ describe('Visitor', () => { 'leave', node.kind, key, - parent && parent.kind ? parent.kind : undefined, + parent && parent.kind != null ? parent.kind : undefined, ]); expect(argsStack.pop()).to.deep.equal([...arguments]);