diff --git a/package-lock.json b/package-lock.json index c8f356ea8b4..514798aedf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,17 @@ "@apollo/federation": { "version": "file:packages/apollo-federation", "requires": { - "apollo-env": "^0.5.1", "apollo-graphql": "^0.3.4", "apollo-server-env": "file:packages/apollo-server-env", + "core-js": "^3.4.0", "lodash.xorby": "^4.7.0" + }, + "dependencies": { + "core-js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.0.tgz", + "integrity": "sha512-lQxb4HScV71YugF/X28LtePZj9AB7WqOpcB+YztYxusvhrgZiQXPmCYfPC5LHsw/+ScEtDbXU3xbqH3CjBRmYA==" + } } }, "@apollo/gateway": { diff --git a/packages/apollo-federation/CHANGELOG.md b/packages/apollo-federation/CHANGELOG.md index 43b8dfeaa71..58403934b10 100644 --- a/packages/apollo-federation/CHANGELOG.md +++ b/packages/apollo-federation/CHANGELOG.md @@ -4,7 +4,7 @@ > The changes noted within this `vNEXT` section have not been released yet. New PRs and commits which introduce changes should include an entry in this `vNEXT` section as part of their development. When a release is being prepared, a new header will be (manually) created below and the the appropriate changes within that release will be moved into the new section. -- _Nothing yet! Stay tuned!_ +* Remove `apollo-env` dependency to eliminate circular dependency between the two packages. This circular dependency makes the tooling repo unpublishable when `apollo-env` requires a version bump. [#3463](https://github.com/apollographql/apollo-server/pull/3463) ### v0.10.1 diff --git a/packages/apollo-federation/jest.config.js b/packages/apollo-federation/jest.config.js index 95030186669..a0453dd2303 100644 --- a/packages/apollo-federation/jest.config.js +++ b/packages/apollo-federation/jest.config.js @@ -1,5 +1,8 @@ const config = require('../../jest.config.base'); module.exports = Object.assign(Object.create(null), config, { - setupFiles: ['apollo-env'], + setupFiles: [ + 'core-js/features/array/flat', + 'core-js/features/array/flat-map', + ], }); diff --git a/packages/apollo-federation/package.json b/packages/apollo-federation/package.json index 797f180f831..1eaf6612a3f 100644 --- a/packages/apollo-federation/package.json +++ b/packages/apollo-federation/package.json @@ -14,9 +14,9 @@ "access": "public" }, "dependencies": { - "apollo-env": "^0.5.1", "apollo-graphql": "^0.3.4", "apollo-server-env": "file:../apollo-server-env", + "core-js": "^3.4.0", "lodash.xorby": "^4.7.0" }, "peerDependencies": { diff --git a/packages/apollo-federation/src/composition/compose.ts b/packages/apollo-federation/src/composition/compose.ts index 472a22bfc82..c15f8d91d3f 100644 --- a/packages/apollo-federation/src/composition/compose.ts +++ b/packages/apollo-federation/src/composition/compose.ts @@ -1,5 +1,4 @@ import 'apollo-server-env'; -import 'apollo-env'; import { GraphQLSchema, extendSchema, @@ -18,9 +17,7 @@ import { TypeExtensionNode, GraphQLDirective, } from 'graphql'; -import { mapValues } from 'apollo-env'; import { transformSchema } from 'apollo-graphql'; - import federationDirectives from '../directives'; import { findDirectivesOnTypeOrField, @@ -29,6 +26,7 @@ import { mapFieldNamesToServiceName, stripExternalFieldsFromTypeDefs, typeNodesAreEquivalent, + mapValues } from './utils'; import { ServiceDefinition, diff --git a/packages/apollo-federation/src/composition/utils.ts b/packages/apollo-federation/src/composition/utils.ts index bf4204abd2f..90af28dbc71 100644 --- a/packages/apollo-federation/src/composition/utils.ts +++ b/packages/apollo-federation/src/composition/utils.ts @@ -1,5 +1,4 @@ import 'apollo-server-env'; -import { isNotNullOrUndefined } from 'apollo-env'; import { InterfaceTypeExtensionNode, FieldDefinitionNode, @@ -447,3 +446,23 @@ export const defKindToExtKind: { [kind: string]: string } = { [Kind.ENUM_TYPE_DEFINITION]: Kind.ENUM_TYPE_EXTENSION, [Kind.INPUT_OBJECT_TYPE_DEFINITION]: Kind.INPUT_OBJECT_TYPE_EXTENSION, }; + +// Transform an object's values via a callback function +export function mapValues( + object: Record, + callback: (value: T) => U, +): Record { + const result: Record = Object.create(null); + + for (const [key, value] of Object.entries(object)) { + result[key] = callback(value); + } + + return result; +} + +export function isNotNullOrUndefined( + value: T | null | undefined, +): value is T { + return value !== null && typeof value !== 'undefined'; +} diff --git a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts index 643dd5439f1..eb8fc648df0 100644 --- a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts +++ b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts @@ -8,8 +8,6 @@ import { specifiedDirectives, } from 'graphql'; import { buildSchemaFromSDL } from 'apollo-graphql'; -import { isNotNullOrUndefined } from 'apollo-env'; - import { federationDirectives } from '../../../directives'; import { ServiceDefinition } from '../../types'; import { @@ -17,6 +15,7 @@ import { isStringValueNode, logServiceAndType, errorWithCode, + isNotNullOrUndefined } from '../../utils'; /** diff --git a/packages/apollo-federation/src/composition/validate/sdl/__tests__/matchingEnums.test.ts b/packages/apollo-federation/src/composition/validate/sdl/__tests__/matchingEnums.test.ts index 651c5f70056..e751c0e251f 100644 --- a/packages/apollo-federation/src/composition/validate/sdl/__tests__/matchingEnums.test.ts +++ b/packages/apollo-federation/src/composition/validate/sdl/__tests__/matchingEnums.test.ts @@ -8,7 +8,6 @@ import { } from 'graphql'; import { validateSDL } from 'graphql/validation/validate'; import gql from 'graphql-tag'; - import { composeServices, buildMapsFromServiceList } from '../../../compose'; import { astSerializer, diff --git a/packages/apollo-federation/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts b/packages/apollo-federation/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts index 5c1b34f8c58..f46db4b24e5 100644 --- a/packages/apollo-federation/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts +++ b/packages/apollo-federation/src/composition/validate/sdl/__tests__/possibleTypeExtensions.test.ts @@ -7,7 +7,6 @@ import { } from 'graphql'; import { validateSDL } from 'graphql/validation/validate'; import gql from 'graphql-tag'; - import { buildMapsFromServiceList } from '../../../compose'; import { typeSerializer, diff --git a/packages/apollo-federation/src/composition/validate/sdl/__tests__/tsconfig.json b/packages/apollo-federation/src/composition/validate/sdl/__tests__/tsconfig.json new file mode 100644 index 00000000000..a6f70de0bfa --- /dev/null +++ b/packages/apollo-federation/src/composition/validate/sdl/__tests__/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../../../../../../tsconfig.test.base", + "include": ["**/*"], + "references": [{ "path": "../../../../../" }] +} diff --git a/packages/apollo-federation/src/index.ts b/packages/apollo-federation/src/index.ts index a670d5b0e15..036f8a0ad75 100644 --- a/packages/apollo-federation/src/index.ts +++ b/packages/apollo-federation/src/index.ts @@ -1,2 +1,5 @@ +import "core-js/features/array/flat"; +import "core-js/features/array/flat-map"; + export * from './composition'; export * from './service'; diff --git a/packages/apollo-federation/src/service/printFederatedSchema.ts b/packages/apollo-federation/src/service/printFederatedSchema.ts index bcaee36e1cb..2b44e538a7a 100644 --- a/packages/apollo-federation/src/service/printFederatedSchema.ts +++ b/packages/apollo-federation/src/service/printFederatedSchema.ts @@ -36,7 +36,6 @@ import { print, specifiedDirectives, } from 'graphql'; - import federationDirectives, { gatherDirectives } from '../directives'; import { isFederationType } from '../types'; diff --git a/packages/apollo-federation/src/types.ts b/packages/apollo-federation/src/types.ts index 7126b32c611..d73e1aeb687 100644 --- a/packages/apollo-federation/src/types.ts +++ b/packages/apollo-federation/src/types.ts @@ -37,7 +37,6 @@ export const AnyType = new GraphQLScalarType({ }, }); -// FIXME: move to apollo-env function isPromise(value: PromiseOrValue): value is Promise { return Boolean(value && 'then' in value && typeof value.then === 'function'); } diff --git a/packages/apollo-federation/tsconfig.json b/packages/apollo-federation/tsconfig.json index 4fcb63fe14f..11f3d98f15d 100644 --- a/packages/apollo-federation/tsconfig.json +++ b/packages/apollo-federation/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base", "compilerOptions": { "rootDir": "./src", - "outDir": "./dist" + "outDir": "./dist", + "lib": ["es2017", "es2019.array", "esnext.asynciterable"], }, "include": ["src/**/*"], "exclude": ["**/__tests__", "**/__mocks__"], diff --git a/tsconfig.test.base.json b/tsconfig.test.base.json index 054eb74a9fe..74aa20ca568 100644 --- a/tsconfig.test.base.json +++ b/tsconfig.test.base.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.base", "compilerOptions": { "noEmit": true, - "lib": ["es2017", "esnext.asynciterable"], + "lib": ["es2017", "es2019.array", "esnext.asynciterable"], "types": ["node", "jest", "apollo-server-env/dist/global"], "paths": { "__mocks__/*" : ["__mocks__/*"],