diff --git a/.nycrc b/.nycrc index f05df1be10..c271c712af 100644 --- a/.nycrc +++ b/.nycrc @@ -1,5 +1,5 @@ { "include": ["src/"], - "exclude": [], + "exclude": ["src/polyfills"], "temp-directory": "coverage" } diff --git a/src/execution/values.js b/src/execution/values.js index db9bef6de5..8c3ca24710 100644 --- a/src/execution/values.js +++ b/src/execution/values.js @@ -7,8 +7,8 @@ * @flow strict */ +import find from '../polyfills/find'; import { GraphQLError } from '../error/GraphQLError'; -import find from '../jsutils/find'; import inspect from '../jsutils/inspect'; import invariant from '../jsutils/invariant'; import keyMap from '../jsutils/keyMap'; diff --git a/src/jsutils/mapValue.js b/src/jsutils/mapValue.js index 5dbc4f37c8..07851db3f8 100644 --- a/src/jsutils/mapValue.js +++ b/src/jsutils/mapValue.js @@ -8,7 +8,7 @@ */ import type { ObjMap } from './ObjMap'; -import objectEntries from './objectEntries'; +import objectEntries from '../polyfills/objectEntries'; /** * Creates an object map with the same keys as `map` and values generated by diff --git a/src/polyfills/README.md b/src/polyfills/README.md new file mode 100644 index 0000000000..55054b2312 --- /dev/null +++ b/src/polyfills/README.md @@ -0,0 +1,9 @@ +Polyfills +--------- + +This directory contains dependency-free polyfills for ES6 & ES7 functions used +throughout the codebase. + +Each polyfill should belong in its own file and be the default export. + +These functions are not part of the module interface and are subject to change. diff --git a/src/jsutils/find.js b/src/polyfills/find.js similarity index 100% rename from src/jsutils/find.js rename to src/polyfills/find.js diff --git a/src/jsutils/isFinite.js b/src/polyfills/isFinite.js similarity index 100% rename from src/jsutils/isFinite.js rename to src/polyfills/isFinite.js diff --git a/src/jsutils/isInteger.js b/src/polyfills/isInteger.js similarity index 100% rename from src/jsutils/isInteger.js rename to src/polyfills/isInteger.js diff --git a/src/jsutils/objectEntries.js b/src/polyfills/objectEntries.js similarity index 91% rename from src/jsutils/objectEntries.js rename to src/polyfills/objectEntries.js index d2db21a2f4..9092ecad4a 100644 --- a/src/jsutils/objectEntries.js +++ b/src/polyfills/objectEntries.js @@ -7,7 +7,7 @@ * @flow strict */ -import type { ObjMap } from './ObjMap'; +import type { ObjMap } from '../jsutils/ObjMap'; declare function objectEntries(obj: ObjMap): Array<[string, T]>; diff --git a/src/jsutils/objectValues.js b/src/polyfills/objectValues.js similarity index 90% rename from src/jsutils/objectValues.js rename to src/polyfills/objectValues.js index d6bab482e2..3b2c2ecf04 100644 --- a/src/jsutils/objectValues.js +++ b/src/polyfills/objectValues.js @@ -7,7 +7,7 @@ * @flow strict */ -import type { ObjMap } from './ObjMap'; +import type { ObjMap } from '../jsutils/ObjMap'; declare function objectValues(obj: ObjMap): Array; diff --git a/src/type/definition.js b/src/type/definition.js index 247526e0c1..c4c01efadb 100644 --- a/src/type/definition.js +++ b/src/type/definition.js @@ -7,6 +7,7 @@ * @flow strict */ +import objectEntries from '../polyfills/objectEntries'; import defineToJSON from '../jsutils/defineToJSON'; import defineToStringTag from '../jsutils/defineToStringTag'; import instanceOf from '../jsutils/instanceOf'; @@ -15,7 +16,6 @@ import invariant from '../jsutils/invariant'; import keyMap from '../jsutils/keyMap'; import mapValue from '../jsutils/mapValue'; import type { ObjMap } from '../jsutils/ObjMap'; -import objectEntries from '../jsutils/objectEntries'; import { Kind } from '../language/kinds'; import { valueFromASTUntyped } from '../utilities/valueFromASTUntyped'; import type { diff --git a/src/type/directives.js b/src/type/directives.js index bb7740c9c3..747bbda56c 100644 --- a/src/type/directives.js +++ b/src/type/directives.js @@ -7,6 +7,7 @@ * @flow strict */ +import objectEntries from '../polyfills/objectEntries'; import type { GraphQLFieldConfigArgumentMap, GraphQLArgument, @@ -18,7 +19,6 @@ import defineToJSON from '../jsutils/defineToJSON'; import instanceOf from '../jsutils/instanceOf'; import invariant from '../jsutils/invariant'; import inspect from '../jsutils/inspect'; -import objectEntries from '../jsutils/objectEntries'; import type { DirectiveDefinitionNode } from '../language/ast'; import { DirectiveLocation, diff --git a/src/type/introspection.js b/src/type/introspection.js index 63630d95c9..a21249f4ed 100644 --- a/src/type/introspection.js +++ b/src/type/introspection.js @@ -7,8 +7,8 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import isInvalid from '../jsutils/isInvalid'; -import objectValues from '../jsutils/objectValues'; import { astFromValue } from '../utilities/astFromValue'; import { print } from '../language/printer'; import { diff --git a/src/type/scalars.js b/src/type/scalars.js index 81f8614014..a200ee7a6b 100644 --- a/src/type/scalars.js +++ b/src/type/scalars.js @@ -7,9 +7,9 @@ * @flow strict */ +import isFinite from '../polyfills/isFinite'; +import isInteger from '../polyfills/isInteger'; import inspect from '../jsutils/inspect'; -import isFinite from '../jsutils/isFinite'; -import isInteger from '../jsutils/isInteger'; import { GraphQLScalarType, isNamedType } from './definition'; import { Kind } from '../language/kinds'; diff --git a/src/type/schema.js b/src/type/schema.js index ac39cf47cf..006211e823 100644 --- a/src/type/schema.js +++ b/src/type/schema.js @@ -7,6 +7,8 @@ * @flow strict */ +import find from '../polyfills/find'; +import objectValues from '../polyfills/objectValues'; import { isAbstractType, isObjectType, @@ -34,10 +36,8 @@ import type { GraphQLError } from '../error/GraphQLError'; import inspect from '../jsutils/inspect'; import { __Schema } from './introspection'; import defineToStringTag from '../jsutils/defineToStringTag'; -import find from '../jsutils/find'; import instanceOf from '../jsutils/instanceOf'; import invariant from '../jsutils/invariant'; -import objectValues from '../jsutils/objectValues'; import type { ObjMap } from '../jsutils/ObjMap'; /** diff --git a/src/type/validate.js b/src/type/validate.js index 779f3727a0..0f96ee14ad 100644 --- a/src/type/validate.js +++ b/src/type/validate.js @@ -7,6 +7,9 @@ * @flow strict */ +import find from '../polyfills/find'; +import objectValues from '../polyfills/objectValues'; +import objectEntries from '../polyfills/objectEntries'; import { isObjectType, isInterfaceType, @@ -31,9 +34,6 @@ import { isIntrospectionType } from './introspection'; import { assertSchema } from './schema'; import type { GraphQLSchema } from './schema'; import inspect from '../jsutils/inspect'; -import find from '../jsutils/find'; -import objectValues from '../jsutils/objectValues'; -import objectEntries from '../jsutils/objectEntries'; import { GraphQLError } from '../error/GraphQLError'; import type { ASTNode, diff --git a/src/utilities/TypeInfo.js b/src/utilities/TypeInfo.js index b217131acd..f8ea241271 100644 --- a/src/utilities/TypeInfo.js +++ b/src/utilities/TypeInfo.js @@ -7,6 +7,7 @@ * @flow strict */ +import find from '../polyfills/find'; import { Kind } from '../language/kinds'; import { isObjectType, @@ -39,7 +40,6 @@ import { import type { GraphQLSchema } from '../type/schema'; import type { ASTNode, FieldNode } from '../language/ast'; import { typeFromAST } from './typeFromAST'; -import find from '../jsutils/find'; /** * TypeInfo is a utility class which, given a GraphQL schema, can keep track diff --git a/src/utilities/astFromValue.js b/src/utilities/astFromValue.js index cf73305c78..ad986366ca 100644 --- a/src/utilities/astFromValue.js +++ b/src/utilities/astFromValue.js @@ -9,10 +9,10 @@ import { forEach, isCollection } from 'iterall'; +import objectValues from '../polyfills/objectValues'; import inspect from '../jsutils/inspect'; import isNullish from '../jsutils/isNullish'; import isInvalid from '../jsutils/isInvalid'; -import objectValues from '../jsutils/objectValues'; import type { ValueNode } from '../language/ast'; import { Kind } from '../language/kinds'; import type { GraphQLInputType } from '../type/definition'; diff --git a/src/utilities/buildASTSchema.js b/src/utilities/buildASTSchema.js index a67f1a8262..f1a8f3b459 100644 --- a/src/utilities/buildASTSchema.js +++ b/src/utilities/buildASTSchema.js @@ -7,10 +7,10 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import invariant from '../jsutils/invariant'; import keyMap from '../jsutils/keyMap'; import keyValMap from '../jsutils/keyValMap'; -import objectValues from '../jsutils/objectValues'; import type { ObjMap } from '../jsutils/ObjMap'; import { valueFromAST } from './valueFromAST'; import { assertValidSDL } from '../validation/validate'; diff --git a/src/utilities/coerceValue.js b/src/utilities/coerceValue.js index 37281a7c77..7b817ae3b5 100644 --- a/src/utilities/coerceValue.js +++ b/src/utilities/coerceValue.js @@ -8,10 +8,10 @@ */ import { forEach, isCollection } from 'iterall'; +import objectValues from '../polyfills/objectValues'; import inspect from '../jsutils/inspect'; import isInvalid from '../jsutils/isInvalid'; import orList from '../jsutils/orList'; -import objectValues from '../jsutils/objectValues'; import suggestionList from '../jsutils/suggestionList'; import { GraphQLError } from '../error/GraphQLError'; import type { ASTNode } from '../language/ast'; diff --git a/src/utilities/extendSchema.js b/src/utilities/extendSchema.js index 93ca48894b..f34efe2248 100644 --- a/src/utilities/extendSchema.js +++ b/src/utilities/extendSchema.js @@ -7,10 +7,10 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import invariant from '../jsutils/invariant'; import mapValue from '../jsutils/mapValue'; import keyValMap from '../jsutils/keyValMap'; -import objectValues from '../jsutils/objectValues'; import { ASTDefinitionBuilder } from './buildASTSchema'; import { assertValidSDLExtension } from '../validation/validate'; import { assertSchema, GraphQLSchema } from '../type/schema'; diff --git a/src/utilities/findBreakingChanges.js b/src/utilities/findBreakingChanges.js index 01389cdc77..9d0db3ec4b 100644 --- a/src/utilities/findBreakingChanges.js +++ b/src/utilities/findBreakingChanges.js @@ -7,6 +7,7 @@ * @flow strict */ +import find from '../polyfills/find'; import { isScalarType, isObjectType, @@ -30,7 +31,6 @@ import type { import type { GraphQLDirective } from '../type/directives'; import type { GraphQLSchema } from '../type/schema'; -import find from '../jsutils/find'; import keyMap from '../jsutils/keyMap'; import type { ObjMap } from '../jsutils/ObjMap'; diff --git a/src/utilities/lexicographicSortSchema.js b/src/utilities/lexicographicSortSchema.js index 570d3e45f9..14698bdc08 100644 --- a/src/utilities/lexicographicSortSchema.js +++ b/src/utilities/lexicographicSortSchema.js @@ -7,9 +7,9 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import type { ObjMap } from '../jsutils/ObjMap'; import keyValMap from '../jsutils/keyValMap'; -import objectValues from '../jsutils/objectValues'; import { GraphQLSchema } from '../type/schema'; import { GraphQLDirective } from '../type/directives'; import type { GraphQLNamedType } from '../type/definition'; diff --git a/src/utilities/schemaPrinter.js b/src/utilities/schemaPrinter.js index aa9b01c096..ac57eefa5a 100644 --- a/src/utilities/schemaPrinter.js +++ b/src/utilities/schemaPrinter.js @@ -7,9 +7,9 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import isNullish from '../jsutils/isNullish'; import isInvalid from '../jsutils/isInvalid'; -import objectValues from '../jsutils/objectValues'; import { astFromValue } from '../utilities/astFromValue'; import { print } from '../language/printer'; import type { GraphQLSchema } from '../type/schema'; diff --git a/src/utilities/valueFromAST.js b/src/utilities/valueFromAST.js index f198d1fcca..d2fbedc096 100644 --- a/src/utilities/valueFromAST.js +++ b/src/utilities/valueFromAST.js @@ -7,9 +7,9 @@ * @flow strict */ +import objectValues from '../polyfills/objectValues'; import keyMap from '../jsutils/keyMap'; import isInvalid from '../jsutils/isInvalid'; -import objectValues from '../jsutils/objectValues'; import type { ObjMap } from '../jsutils/ObjMap'; import { Kind } from '../language/kinds'; import { diff --git a/src/validation/rules/OverlappingFieldsCanBeMerged.js b/src/validation/rules/OverlappingFieldsCanBeMerged.js index b6b35ed4d3..9157c82a89 100644 --- a/src/validation/rules/OverlappingFieldsCanBeMerged.js +++ b/src/validation/rules/OverlappingFieldsCanBeMerged.js @@ -7,12 +7,12 @@ * @flow strict */ +import find from '../../polyfills/find'; +import objectEntries from '../../polyfills/objectEntries'; import type { ValidationContext } from '../ValidationContext'; import { GraphQLError } from '../../error/GraphQLError'; import inspect from '../../jsutils/inspect'; -import find from '../../jsutils/find'; import type { ObjMap } from '../../jsutils/ObjMap'; -import objectEntries from '../../jsutils/objectEntries'; import type { SelectionSetNode, FieldNode, diff --git a/src/validation/rules/ValuesOfCorrectType.js b/src/validation/rules/ValuesOfCorrectType.js index 159206a97b..fa8d1b0a59 100644 --- a/src/validation/rules/ValuesOfCorrectType.js +++ b/src/validation/rules/ValuesOfCorrectType.js @@ -7,6 +7,7 @@ * @flow strict */ +import objectValues from '../../polyfills/objectValues'; import type { ValidationContext } from '../ValidationContext'; import { GraphQLError } from '../../error/GraphQLError'; import type { ValueNode } from '../../language/ast'; @@ -27,7 +28,6 @@ import inspect from '../../jsutils/inspect'; import isInvalid from '../../jsutils/isInvalid'; import keyMap from '../../jsutils/keyMap'; import orList from '../../jsutils/orList'; -import objectValues from '../../jsutils/objectValues'; import suggestionList from '../../jsutils/suggestionList'; export function badValueMessage(