@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 +1 -0
- package/es5/index.js +39 -3
- package/es5/index.mjs +41 -6
- package/es5/makeExecutableSchema.d.ts +1 -1
- package/es5/merge-schemas.d.ts +16 -0
- package/es5/package.json +3 -3
- package/es5/types.d.ts +7 -1
- package/index.d.ts +1 -0
- package/index.js +34 -3
- package/index.mjs +36 -6
- package/makeExecutableSchema.d.ts +1 -1
- package/merge-schemas.d.ts +16 -0
- package/package.json +3 -3
- package/types.d.ts +7 -1
package/es5/index.d.ts
CHANGED
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
11
|
-
"@graphql-tools/utils": "8.
|
|
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
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
11
|
-
"@graphql-tools/utils": "8.
|
|
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
|
}
|