@graphql-tools/schema 8.0.3 → 8.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es5/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export { checkForResolveTypeResolver } from './checkForResolveTypeResolver';
5
5
  export { extendResolversFromInterfaces } from './extendResolversFromInterfaces';
6
6
  export * from './makeExecutableSchema';
7
7
  export * from './types';
8
+ export * from './merge-schemas';
package/es5/index.js CHANGED
@@ -204,7 +204,7 @@ function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInput
204
204
  schema = updateResolversInPlace
205
205
  ? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
206
206
  : createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
207
- if (requireResolversForResolveType || requireResolversForResolveType !== 'ignore') {
207
+ if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
208
208
  checkForResolveTypeResolver(schema, requireResolversForResolveType);
209
209
  }
210
210
  return schema;
@@ -468,7 +468,7 @@ function setFieldProperties(field, propertiesObj) {
468
468
  * ```
469
469
  */
470
470
  function makeExecutableSchema(_a) {
471
- var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f;
471
+ var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f, schemaExtensions = _a.schemaExtensions;
472
472
  // Validate and clean up arguments
473
473
  if (typeof resolverValidationOptions !== 'object') {
474
474
  throw new Error('Expected `resolverValidationOptions` to be an object');
@@ -477,7 +477,10 @@ function makeExecutableSchema(_a) {
477
477
  throw new Error('Must provide typeDefs');
478
478
  }
479
479
  var schema;
480
- if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
480
+ if (graphql.isSchema(typeDefs)) {
481
+ schema = typeDefs;
482
+ }
483
+ else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
481
484
  var mergedTypeDefs = merge.mergeTypeDefs(typeDefs, tslib.__assign(tslib.__assign({}, parseOptions), { commentDescriptions: true }));
482
485
  schema = graphql.buildSchema(mergedTypeDefs, parseOptions);
483
486
  }
@@ -499,12 +502,45 @@ function makeExecutableSchema(_a) {
499
502
  if (Object.keys(resolverValidationOptions).length > 0) {
500
503
  assertResolversPresent(schema, resolverValidationOptions);
501
504
  }
505
+ if (schemaExtensions) {
506
+ schemaExtensions = merge.mergeExtensions(utils.asArray(schemaExtensions));
507
+ merge.applyExtensions(schema, schemaExtensions);
508
+ }
502
509
  return schema;
503
510
  }
504
511
 
512
+ /**
513
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
514
+ * @param config Configuration object
515
+ */
516
+ function mergeSchemas(config) {
517
+ var e_1, _a;
518
+ var extractedTypeDefs = utils.asArray(config.typeDefs || []);
519
+ var extractedResolvers = utils.asArray(config.resolvers || []);
520
+ var extractedSchemaExtensions = utils.asArray(config.schemaExtensions || []);
521
+ var schemas = config.schemas || [];
522
+ try {
523
+ for (var schemas_1 = tslib.__values(schemas), schemas_1_1 = schemas_1.next(); !schemas_1_1.done; schemas_1_1 = schemas_1.next()) {
524
+ var schema = schemas_1_1.value;
525
+ extractedTypeDefs.push(schema);
526
+ extractedResolvers.push(utils.getResolversFromSchema(schema));
527
+ extractedSchemaExtensions.push(merge.extractExtensionsFromSchema(schema));
528
+ }
529
+ }
530
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
531
+ finally {
532
+ try {
533
+ if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1);
534
+ }
535
+ finally { if (e_1) throw e_1.error; }
536
+ }
537
+ return makeExecutableSchema(tslib.__assign(tslib.__assign({ parseOptions: config }, config), { typeDefs: extractedTypeDefs, resolvers: extractedResolvers, schemaExtensions: extractedSchemaExtensions }));
538
+ }
539
+
505
540
  exports.addResolversToSchema = addResolversToSchema;
506
541
  exports.assertResolversPresent = assertResolversPresent;
507
542
  exports.chainResolvers = chainResolvers;
508
543
  exports.checkForResolveTypeResolver = checkForResolveTypeResolver;
509
544
  exports.extendResolversFromInterfaces = extendResolversFromInterfaces;
510
545
  exports.makeExecutableSchema = makeExecutableSchema;
546
+ exports.mergeSchemas = mergeSchemas;
package/es5/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { isScalarType, getNamedType, defaultFieldResolver, isSchema, isSpecifiedScalarType, isEnumType, isUnionType, isObjectType, isInterfaceType, GraphQLEnumType, GraphQLScalarType, GraphQLUnionType, GraphQLObjectType, GraphQLInterfaceType, buildSchema, buildASTSchema } from 'graphql';
2
- import { forEachField, mapSchema, MapperKind, forEachDefaultValue, serializeInputValue, healSchema, parseInputValue, pruneSchema } from '@graphql-tools/utils/es5';
2
+ import { forEachField, mapSchema, MapperKind, forEachDefaultValue, serializeInputValue, healSchema, parseInputValue, pruneSchema, asArray, getResolversFromSchema } from '@graphql-tools/utils/es5';
3
3
  import { __values, __assign } from 'tslib';
4
- import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge/es5';
4
+ import { mergeTypeDefs, mergeResolvers, mergeExtensions, applyExtensions, extractExtensionsFromSchema } from '@graphql-tools/merge/es5';
5
5
 
6
6
  function assertResolversPresent(schema, resolverValidationOptions) {
7
7
  if (resolverValidationOptions === void 0) { resolverValidationOptions = {}; }
@@ -200,7 +200,7 @@ function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInput
200
200
  schema = updateResolversInPlace
201
201
  ? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
202
202
  : createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
203
- if (requireResolversForResolveType || requireResolversForResolveType !== 'ignore') {
203
+ if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
204
204
  checkForResolveTypeResolver(schema, requireResolversForResolveType);
205
205
  }
206
206
  return schema;
@@ -464,7 +464,7 @@ function setFieldProperties(field, propertiesObj) {
464
464
  * ```
465
465
  */
466
466
  function makeExecutableSchema(_a) {
467
- var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f;
467
+ var typeDefs = _a.typeDefs, _b = _a.resolvers, resolvers = _b === void 0 ? {} : _b, _c = _a.resolverValidationOptions, resolverValidationOptions = _c === void 0 ? {} : _c, _d = _a.parseOptions, parseOptions = _d === void 0 ? {} : _d, _e = _a.inheritResolversFromInterfaces, inheritResolversFromInterfaces = _e === void 0 ? false : _e, pruningOptions = _a.pruningOptions, _f = _a.updateResolversInPlace, updateResolversInPlace = _f === void 0 ? false : _f, schemaExtensions = _a.schemaExtensions;
468
468
  // Validate and clean up arguments
469
469
  if (typeof resolverValidationOptions !== 'object') {
470
470
  throw new Error('Expected `resolverValidationOptions` to be an object');
@@ -473,7 +473,10 @@ function makeExecutableSchema(_a) {
473
473
  throw new Error('Must provide typeDefs');
474
474
  }
475
475
  var schema;
476
- if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
476
+ if (isSchema(typeDefs)) {
477
+ schema = typeDefs;
478
+ }
479
+ else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
477
480
  var mergedTypeDefs = mergeTypeDefs(typeDefs, __assign(__assign({}, parseOptions), { commentDescriptions: true }));
478
481
  schema = buildSchema(mergedTypeDefs, parseOptions);
479
482
  }
@@ -495,7 +498,39 @@ function makeExecutableSchema(_a) {
495
498
  if (Object.keys(resolverValidationOptions).length > 0) {
496
499
  assertResolversPresent(schema, resolverValidationOptions);
497
500
  }
501
+ if (schemaExtensions) {
502
+ schemaExtensions = mergeExtensions(asArray(schemaExtensions));
503
+ applyExtensions(schema, schemaExtensions);
504
+ }
498
505
  return schema;
499
506
  }
500
507
 
501
- export { addResolversToSchema, assertResolversPresent, chainResolvers, checkForResolveTypeResolver, extendResolversFromInterfaces, makeExecutableSchema };
508
+ /**
509
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
510
+ * @param config Configuration object
511
+ */
512
+ function mergeSchemas(config) {
513
+ var e_1, _a;
514
+ var extractedTypeDefs = asArray(config.typeDefs || []);
515
+ var extractedResolvers = asArray(config.resolvers || []);
516
+ var extractedSchemaExtensions = asArray(config.schemaExtensions || []);
517
+ var schemas = config.schemas || [];
518
+ try {
519
+ for (var schemas_1 = __values(schemas), schemas_1_1 = schemas_1.next(); !schemas_1_1.done; schemas_1_1 = schemas_1.next()) {
520
+ var schema = schemas_1_1.value;
521
+ extractedTypeDefs.push(schema);
522
+ extractedResolvers.push(getResolversFromSchema(schema));
523
+ extractedSchemaExtensions.push(extractExtensionsFromSchema(schema));
524
+ }
525
+ }
526
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
527
+ finally {
528
+ try {
529
+ if (schemas_1_1 && !schemas_1_1.done && (_a = schemas_1.return)) _a.call(schemas_1);
530
+ }
531
+ finally { if (e_1) throw e_1.error; }
532
+ }
533
+ return makeExecutableSchema(__assign(__assign({ parseOptions: config }, config), { typeDefs: extractedTypeDefs, resolvers: extractedResolvers, schemaExtensions: extractedSchemaExtensions }));
534
+ }
535
+
536
+ export { addResolversToSchema, assertResolversPresent, chainResolvers, checkForResolveTypeResolver, extendResolversFromInterfaces, makeExecutableSchema, mergeSchemas };
@@ -44,4 +44,4 @@ import { IExecutableSchemaDefinition } from './types';
44
44
  * })
45
45
  * ```
46
46
  */
47
- export declare function makeExecutableSchema<TContext = any>({ typeDefs, resolvers, resolverValidationOptions, parseOptions, inheritResolversFromInterfaces, pruningOptions, updateResolversInPlace, }: IExecutableSchemaDefinition<TContext>): GraphQLSchema;
47
+ export declare function makeExecutableSchema<TContext = any>({ typeDefs, resolvers, resolverValidationOptions, parseOptions, inheritResolversFromInterfaces, pruningOptions, updateResolversInPlace, schemaExtensions, }: IExecutableSchemaDefinition<TContext>): GraphQLSchema;
@@ -0,0 +1,16 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { IExecutableSchemaDefinition } from './types';
3
+ /**
4
+ * Configuration object for schema merging
5
+ */
6
+ export declare type MergeSchemasConfig<T = any> = Partial<IExecutableSchemaDefinition<T>> & IExecutableSchemaDefinition<T>['parseOptions'] & {
7
+ /**
8
+ * The schemas to be merged
9
+ */
10
+ schemas?: GraphQLSchema[];
11
+ };
12
+ /**
13
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
14
+ * @param config Configuration object
15
+ */
16
+ export declare function mergeSchemas(config: MergeSchemasConfig): GraphQLSchema;
package/es5/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@graphql-tools/schema/es5",
3
- "version": "8.0.3",
3
+ "version": "8.1.2",
4
4
  "description": "A set of utils for faster development of GraphQL tools",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
7
  "graphql": "^14.0.0 || ^15.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@graphql-tools/merge": "7.0.0",
11
- "@graphql-tools/utils": "8.0.2",
10
+ "@graphql-tools/merge": "^8.0.2",
11
+ "@graphql-tools/utils": "^8.1.1",
12
12
  "tslib": "~2.3.0",
13
13
  "value-or-promise": "1.0.10"
14
14
  },
package/es5/types.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { TypeSource, IResolvers, IResolverValidationOptions, GraphQLParseOptions, PruneSchemaOptions } from '@graphql-tools/utils';
2
+ import { SchemaExtensions } from '@graphql-tools/merge';
3
+ import { BuildSchemaOptions } from 'graphql';
2
4
  /**
3
5
  * Configuration object for creating an executable schema
4
6
  */
@@ -19,7 +21,7 @@ export interface IExecutableSchemaDefinition<TContext = any> {
19
21
  * Additional options for parsing the type definitions if they are provided
20
22
  * as a string
21
23
  */
22
- parseOptions?: GraphQLParseOptions;
24
+ parseOptions?: BuildSchemaOptions & GraphQLParseOptions;
23
25
  /**
24
26
  * GraphQL object types that implement interfaces will inherit any missing
25
27
  * resolvers from their interface types defined in the `resolvers` object
@@ -33,4 +35,8 @@ export interface IExecutableSchemaDefinition<TContext = any> {
33
35
  * Do not create a schema again and use the one from `buildASTSchema`
34
36
  */
35
37
  updateResolversInPlace?: boolean;
38
+ /**
39
+ * Schema extensions
40
+ */
41
+ schemaExtensions?: SchemaExtensions | Array<SchemaExtensions>;
36
42
  }
package/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export { checkForResolveTypeResolver } from './checkForResolveTypeResolver';
5
5
  export { extendResolversFromInterfaces } from './extendResolversFromInterfaces';
6
6
  export * from './makeExecutableSchema';
7
7
  export * from './types';
8
+ export * from './merge-schemas';
package/index.js CHANGED
@@ -192,7 +192,7 @@ function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInput
192
192
  schema = updateResolversInPlace
193
193
  ? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
194
194
  : createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
195
- if (requireResolversForResolveType || requireResolversForResolveType !== 'ignore') {
195
+ if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
196
196
  checkForResolveTypeResolver(schema, requireResolversForResolveType);
197
197
  }
198
198
  return schema;
@@ -473,7 +473,7 @@ function setFieldProperties(field, propertiesObj) {
473
473
  * })
474
474
  * ```
475
475
  */
476
- function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOptions = {}, parseOptions = {}, inheritResolversFromInterfaces = false, pruningOptions, updateResolversInPlace = false, }) {
476
+ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOptions = {}, parseOptions = {}, inheritResolversFromInterfaces = false, pruningOptions, updateResolversInPlace = false, schemaExtensions, }) {
477
477
  // Validate and clean up arguments
478
478
  if (typeof resolverValidationOptions !== 'object') {
479
479
  throw new Error('Expected `resolverValidationOptions` to be an object');
@@ -482,7 +482,10 @@ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOpti
482
482
  throw new Error('Must provide typeDefs');
483
483
  }
484
484
  let schema;
485
- if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
485
+ if (graphql.isSchema(typeDefs)) {
486
+ schema = typeDefs;
487
+ }
488
+ else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
486
489
  const mergedTypeDefs = merge.mergeTypeDefs(typeDefs, {
487
490
  ...parseOptions,
488
491
  commentDescriptions: true,
@@ -507,12 +510,40 @@ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOpti
507
510
  if (Object.keys(resolverValidationOptions).length > 0) {
508
511
  assertResolversPresent(schema, resolverValidationOptions);
509
512
  }
513
+ if (schemaExtensions) {
514
+ schemaExtensions = merge.mergeExtensions(utils.asArray(schemaExtensions));
515
+ merge.applyExtensions(schema, schemaExtensions);
516
+ }
510
517
  return schema;
511
518
  }
512
519
 
520
+ /**
521
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
522
+ * @param config Configuration object
523
+ */
524
+ function mergeSchemas(config) {
525
+ const extractedTypeDefs = utils.asArray(config.typeDefs || []);
526
+ const extractedResolvers = utils.asArray(config.resolvers || []);
527
+ const extractedSchemaExtensions = utils.asArray(config.schemaExtensions || []);
528
+ const schemas = config.schemas || [];
529
+ for (const schema of schemas) {
530
+ extractedTypeDefs.push(schema);
531
+ extractedResolvers.push(utils.getResolversFromSchema(schema));
532
+ extractedSchemaExtensions.push(merge.extractExtensionsFromSchema(schema));
533
+ }
534
+ return makeExecutableSchema({
535
+ parseOptions: config,
536
+ ...config,
537
+ typeDefs: extractedTypeDefs,
538
+ resolvers: extractedResolvers,
539
+ schemaExtensions: extractedSchemaExtensions,
540
+ });
541
+ }
542
+
513
543
  exports.addResolversToSchema = addResolversToSchema;
514
544
  exports.assertResolversPresent = assertResolversPresent;
515
545
  exports.chainResolvers = chainResolvers;
516
546
  exports.checkForResolveTypeResolver = checkForResolveTypeResolver;
517
547
  exports.extendResolversFromInterfaces = extendResolversFromInterfaces;
518
548
  exports.makeExecutableSchema = makeExecutableSchema;
549
+ exports.mergeSchemas = mergeSchemas;
package/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { isScalarType, getNamedType, defaultFieldResolver, isSchema, isSpecifiedScalarType, isEnumType, isUnionType, isObjectType, isInterfaceType, GraphQLEnumType, GraphQLScalarType, GraphQLUnionType, GraphQLObjectType, GraphQLInterfaceType, buildSchema, buildASTSchema } from 'graphql';
2
- import { forEachField, mapSchema, MapperKind, forEachDefaultValue, serializeInputValue, healSchema, parseInputValue, pruneSchema } from '@graphql-tools/utils';
3
- import { mergeTypeDefs, mergeResolvers } from '@graphql-tools/merge';
2
+ import { forEachField, mapSchema, MapperKind, forEachDefaultValue, serializeInputValue, healSchema, parseInputValue, pruneSchema, asArray, getResolversFromSchema } from '@graphql-tools/utils';
3
+ import { mergeTypeDefs, mergeResolvers, mergeExtensions, applyExtensions, extractExtensionsFromSchema } from '@graphql-tools/merge';
4
4
 
5
5
  function assertResolversPresent(schema, resolverValidationOptions = {}) {
6
6
  const { requireResolversForArgs, requireResolversForNonScalar, requireResolversForAllFields } = resolverValidationOptions;
@@ -188,7 +188,7 @@ function addResolversToSchema(schemaOrOptions, legacyInputResolvers, legacyInput
188
188
  schema = updateResolversInPlace
189
189
  ? addResolversToExistingSchema(schema, resolvers, defaultFieldResolver)
190
190
  : createNewSchemaWithResolvers(schema, resolvers, defaultFieldResolver);
191
- if (requireResolversForResolveType || requireResolversForResolveType !== 'ignore') {
191
+ if (requireResolversForResolveType && requireResolversForResolveType !== 'ignore') {
192
192
  checkForResolveTypeResolver(schema, requireResolversForResolveType);
193
193
  }
194
194
  return schema;
@@ -469,7 +469,7 @@ function setFieldProperties(field, propertiesObj) {
469
469
  * })
470
470
  * ```
471
471
  */
472
- function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOptions = {}, parseOptions = {}, inheritResolversFromInterfaces = false, pruningOptions, updateResolversInPlace = false, }) {
472
+ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOptions = {}, parseOptions = {}, inheritResolversFromInterfaces = false, pruningOptions, updateResolversInPlace = false, schemaExtensions, }) {
473
473
  // Validate and clean up arguments
474
474
  if (typeof resolverValidationOptions !== 'object') {
475
475
  throw new Error('Expected `resolverValidationOptions` to be an object');
@@ -478,7 +478,10 @@ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOpti
478
478
  throw new Error('Must provide typeDefs');
479
479
  }
480
480
  let schema;
481
- if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
481
+ if (isSchema(typeDefs)) {
482
+ schema = typeDefs;
483
+ }
484
+ else if (parseOptions === null || parseOptions === void 0 ? void 0 : parseOptions.commentDescriptions) {
482
485
  const mergedTypeDefs = mergeTypeDefs(typeDefs, {
483
486
  ...parseOptions,
484
487
  commentDescriptions: true,
@@ -503,7 +506,34 @@ function makeExecutableSchema({ typeDefs, resolvers = {}, resolverValidationOpti
503
506
  if (Object.keys(resolverValidationOptions).length > 0) {
504
507
  assertResolversPresent(schema, resolverValidationOptions);
505
508
  }
509
+ if (schemaExtensions) {
510
+ schemaExtensions = mergeExtensions(asArray(schemaExtensions));
511
+ applyExtensions(schema, schemaExtensions);
512
+ }
506
513
  return schema;
507
514
  }
508
515
 
509
- export { addResolversToSchema, assertResolversPresent, chainResolvers, checkForResolveTypeResolver, extendResolversFromInterfaces, makeExecutableSchema };
516
+ /**
517
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
518
+ * @param config Configuration object
519
+ */
520
+ function mergeSchemas(config) {
521
+ const extractedTypeDefs = asArray(config.typeDefs || []);
522
+ const extractedResolvers = asArray(config.resolvers || []);
523
+ const extractedSchemaExtensions = asArray(config.schemaExtensions || []);
524
+ const schemas = config.schemas || [];
525
+ for (const schema of schemas) {
526
+ extractedTypeDefs.push(schema);
527
+ extractedResolvers.push(getResolversFromSchema(schema));
528
+ extractedSchemaExtensions.push(extractExtensionsFromSchema(schema));
529
+ }
530
+ return makeExecutableSchema({
531
+ parseOptions: config,
532
+ ...config,
533
+ typeDefs: extractedTypeDefs,
534
+ resolvers: extractedResolvers,
535
+ schemaExtensions: extractedSchemaExtensions,
536
+ });
537
+ }
538
+
539
+ export { addResolversToSchema, assertResolversPresent, chainResolvers, checkForResolveTypeResolver, extendResolversFromInterfaces, makeExecutableSchema, mergeSchemas };
@@ -44,4 +44,4 @@ import { IExecutableSchemaDefinition } from './types';
44
44
  * })
45
45
  * ```
46
46
  */
47
- export declare function makeExecutableSchema<TContext = any>({ typeDefs, resolvers, resolverValidationOptions, parseOptions, inheritResolversFromInterfaces, pruningOptions, updateResolversInPlace, }: IExecutableSchemaDefinition<TContext>): GraphQLSchema;
47
+ export declare function makeExecutableSchema<TContext = any>({ typeDefs, resolvers, resolverValidationOptions, parseOptions, inheritResolversFromInterfaces, pruningOptions, updateResolversInPlace, schemaExtensions, }: IExecutableSchemaDefinition<TContext>): GraphQLSchema;
@@ -0,0 +1,16 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ import { IExecutableSchemaDefinition } from './types';
3
+ /**
4
+ * Configuration object for schema merging
5
+ */
6
+ export declare type MergeSchemasConfig<T = any> = Partial<IExecutableSchemaDefinition<T>> & IExecutableSchemaDefinition<T>['parseOptions'] & {
7
+ /**
8
+ * The schemas to be merged
9
+ */
10
+ schemas?: GraphQLSchema[];
11
+ };
12
+ /**
13
+ * Synchronously merges multiple schemas, typeDefinitions and/or resolvers into a single schema.
14
+ * @param config Configuration object
15
+ */
16
+ export declare function mergeSchemas(config: MergeSchemasConfig): GraphQLSchema;
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@graphql-tools/schema",
3
- "version": "8.0.3",
3
+ "version": "8.1.2",
4
4
  "description": "A set of utils for faster development of GraphQL tools",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
7
  "graphql": "^14.0.0 || ^15.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@graphql-tools/merge": "7.0.0",
11
- "@graphql-tools/utils": "8.0.2",
10
+ "@graphql-tools/merge": "^8.0.2",
11
+ "@graphql-tools/utils": "^8.1.1",
12
12
  "tslib": "~2.3.0",
13
13
  "value-or-promise": "1.0.10"
14
14
  },
package/types.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { TypeSource, IResolvers, IResolverValidationOptions, GraphQLParseOptions, PruneSchemaOptions } from '@graphql-tools/utils';
2
+ import { SchemaExtensions } from '@graphql-tools/merge';
3
+ import { BuildSchemaOptions } from 'graphql';
2
4
  /**
3
5
  * Configuration object for creating an executable schema
4
6
  */
@@ -19,7 +21,7 @@ export interface IExecutableSchemaDefinition<TContext = any> {
19
21
  * Additional options for parsing the type definitions if they are provided
20
22
  * as a string
21
23
  */
22
- parseOptions?: GraphQLParseOptions;
24
+ parseOptions?: BuildSchemaOptions & GraphQLParseOptions;
23
25
  /**
24
26
  * GraphQL object types that implement interfaces will inherit any missing
25
27
  * resolvers from their interface types defined in the `resolvers` object
@@ -33,4 +35,8 @@ export interface IExecutableSchemaDefinition<TContext = any> {
33
35
  * Do not create a schema again and use the one from `buildASTSchema`
34
36
  */
35
37
  updateResolversInPlace?: boolean;
38
+ /**
39
+ * Schema extensions
40
+ */
41
+ schemaExtensions?: SchemaExtensions | Array<SchemaExtensions>;
36
42
  }