Skip to content

Commit 6f50d77

Browse files
authored
apollo-tools: remove dependency on apollo-env (#2339)
As far as I can tell, the only use `@apollographql/apollo-tools` makes of `apollo-env` is the ability to use `Array.flat` in pre-12 Node. Now, we probably should just make this whole repo require Node 12 like we are doing for Apollo Server 3. But a simpler way to break this dependency is to just implement a single-level Array.flat ourselves. (The calls to Array.flat do not take advantage of its ability to flatten more than one level of nested array.) This will allow us to stop installing polyfills in Apollo Server 3 (see apollographql/apollo-server#2634).
1 parent a88f264 commit 6f50d77

File tree

6 files changed

+29
-34
lines changed

6 files changed

+29
-34
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@
2525
- `vscode-apollo`
2626
- <First `vscode-apollo` related entry goes here>
2727

28+
29+
- Remove dependency on `apollo-env`, so using this package no longer installs polyfills.
30+
2831
2932
- Complex directive arguments don't break `transformSchema` (Fixes #2162) [PR #2335](https://github.com/apollographql/apollo-tooling/pull/2335)
33+
3034
3135

3236
- Add a deprecation message to all `apollo service:*` commands, pointing people towards the [Apollo Rover CLI migration guide](https://go.apollo.dev/t/migration). <br/>

package-lock.json

Lines changed: 10 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/apollo-tools/package.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
"node": ">=8",
1616
"npm": ">=6"
1717
},
18-
"dependencies": {
19-
"apollo-env": "file:../apollo-env"
20-
},
2118
"jest": {
2219
"preset": "ts-jest",
2320
"testEnvironment": "node",
@@ -34,9 +31,6 @@
3431
"transformIgnorePatterns": [
3532
"/node_modules/"
3633
],
37-
"setupFiles": [
38-
"apollo-env"
39-
],
4034
"snapshotSerializers": [
4135
"<rootDir>/src/__tests__/snapshotSerializers/astSerializer.ts",
4236
"<rootDir>/src/__tests__/snapshotSerializers/graphQLTypeSerializer.ts"

packages/apollo-tools/src/buildServiceDefinition.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
isObjectType,
1414
SchemaDefinitionNode,
1515
OperationTypeNode,
16-
SchemaExtensionNode
16+
SchemaExtensionNode,
17+
OperationTypeDefinitionNode
1718
} from "graphql";
1819
import { isNode, isDocumentNode } from "./utilities/graphql";
1920
import { GraphQLResolverMap } from "./schema/resolverMap";
@@ -29,6 +30,10 @@ interface GraphQLServiceDefinition {
2930
errors?: GraphQLError[];
3031
}
3132

33+
function flattened<T>(arr: ReadonlyArray<ReadonlyArray<T>>): ReadonlyArray<T> {
34+
return new Array<T>().concat(...arr);
35+
}
36+
3237
export function buildServiceDefinition(
3338
modules: GraphQLSchemaModule[]
3439
): GraphQLServiceDefinition {
@@ -119,10 +124,11 @@ export function buildServiceDefinition(
119124
// but this matches the current 'last definition wins' behavior of `buildASTSchema`.
120125
const schemaDefinition = schemaDefinitions[schemaDefinitions.length - 1];
121126

122-
const operationTypes = [schemaDefinition, ...schemaExtensions]
123-
.map(node => node.operationTypes)
124-
.filter(isNotNullOrUndefined)
125-
.flat();
127+
const operationTypes = flattened(
128+
[schemaDefinition, ...schemaExtensions]
129+
.map(node => node.operationTypes)
130+
.filter(isNotNullOrUndefined)
131+
);
126132

127133
for (const operationType of operationTypes) {
128134
const typeName = operationType.type.name.value;
@@ -178,15 +184,15 @@ export function buildServiceDefinition(
178184
}
179185

180186
try {
181-
const typeDefinitions = Object.values(typeDefinitionsMap).flat();
182-
const directives = Object.values(directivesMap).flat();
187+
const typeDefinitions = flattened(Object.values(typeDefinitionsMap));
188+
const directives = flattened(Object.values(directivesMap));
183189

184190
let schema = buildASTSchema({
185191
kind: Kind.DOCUMENT,
186192
definitions: [...typeDefinitions, ...directives]
187193
});
188194

189-
const typeExtensions = Object.values(typeExtensionsMap).flat();
195+
const typeExtensions = flattened(Object.values(typeExtensionsMap));
190196

191197
if (typeExtensions.length > 0) {
192198
schema = extendSchema(schema, {

packages/apollo-tools/src/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import "apollo-env";
2-
31
export * from "./utilities";
42

53
export * from "./schema";

packages/apollo-tools/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@
55
"outDir": "./lib"
66
},
77
"include": ["./src/**/*"],
8-
"exclude": ["**/__tests__/*", "**/__mocks__/*"],
9-
"references": [{ "path": "../apollo-env" }]
8+
"exclude": ["**/__tests__/*", "**/__mocks__/*"]
109
}

0 commit comments

Comments
 (0)