Skip to content

Commit d817b56

Browse files
committed
Cease using ES features which don't exist natively on our target platforms
Honestly, this whole attempt to use modern ECMAScript features before they were ready and truly supported in the runtimes we support was I think a great experiment, but not worth the struggle. We still support Node.js 10 for a couple more weeks, but this is a constraint for me today and it's (being, generally the `apollo-server-env` and the `apollo-env` package's polyfills) have been a constraint _many_ times over. Put another way, I don't think the Pandora's box of "polyfills" is worth it for things like `Array.protytype.flat`, which are not so inherently complex that they can't be abstracted into a small function. The `core-js-pure` package does a pretty good job offering this functionality without necessitating us in-house/vendor it ourselves, but it - sadly - does not provide TypeScript types, unlike the `core-js` core itself.
1 parent 9207475 commit d817b56

5 files changed

Lines changed: 31 additions & 9 deletions

File tree

package-lock.json

Lines changed: 12 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,10 @@
5555
"@fancy-test/nock": "0.1.1",
5656
"@oclif/dev-cli": "1.26.0",
5757
"@oclif/test": "1.2.8",
58-
"@types/babel__generator": "7.6.2",
5958
"@types/babel-types": "7.0.9",
59+
"@types/babel__generator": "7.6.2",
6060
"@types/common-tags": "1.8.0",
61+
"@types/core-js": "^2.5.4",
6162
"@types/cosmiconfig": "5.0.3",
6263
"@types/glob": "7.1.1",
6364
"@types/inflected": "1.1.29",

packages/apollo-graphql/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"node": ">=6"
1212
},
1313
"dependencies": {
14+
"core-js-pure": "^3.10.2",
1415
"lodash.sortby": "^4.7.0"
1516
},
1617
"peerDependencies": {

packages/apollo-graphql/src/schema/buildSchemaFromSDL.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ import { isDocumentNode, isNode } from "../utilities/graphql";
2525
import { GraphQLResolverMap } from "./resolverMap";
2626
import { GraphQLSchemaValidationError } from "./GraphQLSchemaValidationError";
2727
import { specifiedSDLRules } from "graphql/validation/specifiedRules";
28+
29+
// TODO(Node.js 10): When we deprecate Node.js 10, remove this and switch
30+
// to using `Array.prototype.flat`.
31+
import flat from "core-js-pure/features/array/flat";
32+
2833
import {
2934
KnownTypeNamesRule,
3035
UniqueDirectivesPerLocationRule,
@@ -156,7 +161,7 @@ export function buildSchemaFromSDL(
156161
{
157162
kind: Kind.DOCUMENT,
158163
definitions: [
159-
...Object.values(definitionsMap).flat(),
164+
...flat(Object.values(definitionsMap)),
160165
...missingTypeDefinitions,
161166
...directiveDefinitions
162167
]
@@ -170,7 +175,7 @@ export function buildSchemaFromSDL(
170175
schema,
171176
{
172177
kind: Kind.DOCUMENT,
173-
definitions: Object.values(extensionsMap).flat()
178+
definitions: flat(Object.values(extensionsMap))
174179
},
175180
{
176181
assumeValidSDL: true
@@ -182,10 +187,11 @@ export function buildSchemaFromSDL(
182187
if (schemaDefinitions.length > 0 || schemaExtensions.length > 0) {
183188
operationTypeMap = {};
184189

185-
const operationTypes = [...schemaDefinitions, ...schemaExtensions]
186-
.map(node => node.operationTypes)
187-
.filter(isNotNullOrUndefined)
188-
.flat();
190+
const operationTypes = flat(
191+
[...schemaDefinitions, ...schemaExtensions]
192+
.map(node => node.operationTypes)
193+
.filter(isNotNullOrUndefined)
194+
);
189195

190196
for (const { operation, type } of operationTypes) {
191197
operationTypeMap[operation] = type.name.value;

packages/apollo-graphql/tsconfig.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
"outDir": "./lib",
66
"esModuleInterop": true,
77
"target": "es2016",
8-
"lib": ["ES2018.AsyncIterable", "ES2019.Array"]
8+
"lib": ["ES2018.AsyncIterable", "ES2019.Array"],
9+
"paths": {
10+
"*": ["./types/*"]
11+
}
912
},
1013
"include": ["src/**/*"],
1114
"exclude": ["**/__tests__", "**/__mocks__"],

0 commit comments

Comments
 (0)