@graphql-tools/stitch
Advanced tools
Comparing version 5.0.1-alpha-b7ec6b7.0 to 5.0.1-alpha-b86f0f0.0
123
index.cjs.js
@@ -263,3 +263,3 @@ 'use strict'; | ||
} | ||
function buildTypeCandidates({ schemaLikeObjects, allSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }) { | ||
function buildTypeCandidates({ schemaLikeObjects, transformedSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }) { | ||
let schemaDef; | ||
@@ -279,3 +279,3 @@ let schemaExtensions = []; | ||
const schema = wrap.wrapSchema(schemaLikeObject); | ||
allSchemas.push(schema); | ||
transformedSchemas.set(schemaLikeObject, schema); | ||
const operationTypes = { | ||
@@ -485,24 +485,5 @@ query: schema.getQueryType(), | ||
function createMergeInfo(allSchemas, typeCandidates, mergeTypes) { | ||
function createMergeInfo(transformedSchemas, typeCandidates, mergeTypes) { | ||
return { | ||
delegate(operation, fieldName, args, context, info, transforms = []) { | ||
const schema = guessSchemaByRootField(allSchemas, operation, fieldName); | ||
const expandTransforms = new delegate.ExpandAbstractTypes(info.schema, schema); | ||
const fragmentTransform = new delegate.AddReplacementFragments(schema, info.mergeInfo.replacementFragments); | ||
return delegate.delegateToSchema({ | ||
schema, | ||
operation, | ||
fieldName, | ||
args, | ||
context, | ||
info, | ||
transforms: [...transforms, expandTransforms, fragmentTransform], | ||
}); | ||
}, | ||
delegateToSchema(options) { | ||
return delegate.delegateToSchema({ | ||
...options, | ||
transforms: options.transforms, | ||
}); | ||
}, | ||
transformedSchemas, | ||
fragments: [], | ||
@@ -660,39 +641,14 @@ replacementSelectionSets: undefined, | ||
} | ||
function operationToRootType(operation, schema) { | ||
if (operation === 'subscription') { | ||
return schema.getSubscriptionType(); | ||
} | ||
else if (operation === 'mutation') { | ||
return schema.getMutationType(); | ||
} | ||
return schema.getQueryType(); | ||
} | ||
function guessSchemaByRootField(schemas, operation, fieldName) { | ||
for (const schema of schemas) { | ||
const rootObject = operationToRootType(operation, schema); | ||
if (rootObject != null) { | ||
const fields = rootObject.getFields(); | ||
if (fieldName in fields) { | ||
return schema; | ||
} | ||
} | ||
} | ||
throw new Error(`Could not find subschema with field \`${operation}.${fieldName}\``); | ||
} | ||
function addMergeInfo(stitchedSchema, mergeInfo) { | ||
utils.forEachField(stitchedSchema, field => { | ||
if (field.resolve != null) { | ||
const fieldResolver = field.resolve; | ||
field.resolve = (parent, args, context, info) => { | ||
const newInfo = { ...info, mergeInfo }; | ||
return fieldResolver(parent, args, context, newInfo); | ||
}; | ||
return utils.mapSchemaByField(stitchedSchema, ([fieldName, originalFieldConfig]) => { | ||
const newFieldConfig = { ...originalFieldConfig }; | ||
const resolver = originalFieldConfig.resolve; | ||
if (resolver != null) { | ||
newFieldConfig.resolve = (parent, args, context, info) => resolver(parent, args, context, { ...info, mergeInfo }); | ||
} | ||
if (field.subscribe != null) { | ||
const fieldResolver = field.subscribe; | ||
field.subscribe = (parent, args, context, info) => { | ||
const newInfo = { ...info, mergeInfo }; | ||
return fieldResolver(parent, args, context, newInfo); | ||
}; | ||
const subscriber = originalFieldConfig.subscribe; | ||
if (subscriber != null) { | ||
newFieldConfig.subscribe = (parent, args, context, info) => subscriber(parent, args, context, { ...info, mergeInfo }); | ||
} | ||
return [fieldName, newFieldConfig]; | ||
}); | ||
@@ -705,12 +661,2 @@ } | ||
} | ||
const allSchemas = []; | ||
const typeCandidates = Object.create(null); | ||
const extensions = []; | ||
const directives = []; | ||
const schemaDefs = Object.create(null); | ||
const operationTypeNames = { | ||
query: 'Query', | ||
mutation: 'Mutation', | ||
subscription: 'Subscription', | ||
}; | ||
let schemaLikeObjects = [...subschemas]; | ||
@@ -737,5 +683,15 @@ if (typeDefs) { | ||
}); | ||
const transformedSchemas = new Map(); | ||
const typeCandidates = Object.create(null); | ||
const extensions = []; | ||
const directives = []; | ||
const schemaDefs = Object.create(null); | ||
const operationTypeNames = { | ||
query: 'Query', | ||
mutation: 'Mutation', | ||
subscription: 'Subscription', | ||
}; | ||
buildTypeCandidates({ | ||
schemaLikeObjects, | ||
allSchemas, | ||
transformedSchemas, | ||
typeCandidates, | ||
@@ -749,5 +705,3 @@ extensions, | ||
let mergeInfo; | ||
mergeInfo = createMergeInfo(allSchemas, typeCandidates, mergeTypes); | ||
const finalResolvers = getFinalResolvers(resolvers, mergeInfo); | ||
mergeInfo = completeMergeInfo(mergeInfo, finalResolvers); | ||
mergeInfo = createMergeInfo(transformedSchemas, typeCandidates, mergeTypes); | ||
const typeMap = buildTypeMap({ | ||
@@ -778,2 +732,8 @@ typeCandidates, | ||
}); | ||
// We allow passing in an array of resolver maps, in which case we merge them | ||
const resolverMap = Array.isArray(resolvers) ? resolvers.reduce(utils.mergeDeep, {}) : resolvers; | ||
const finalResolvers = inheritResolversFromInterfaces | ||
? schema.extendResolversFromInterfaces(schema$1, resolverMap) | ||
: resolverMap; | ||
mergeInfo = completeMergeInfo(mergeInfo, finalResolvers); | ||
schema.addResolversToSchema({ | ||
@@ -783,6 +743,6 @@ schema: schema$1, | ||
resolverValidationOptions, | ||
inheritResolversFromInterfaces, | ||
inheritResolversFromInterfaces: false, | ||
}); | ||
schema.assertResolversPresent(schema$1, resolverValidationOptions); | ||
addMergeInfo(schema$1, mergeInfo); | ||
schema$1 = addMergeInfo(schema$1, mergeInfo); | ||
if (!allowUndefinedInResolve) { | ||
@@ -807,19 +767,2 @@ schema.addCatchUndefinedToSchema(schema$1); | ||
} | ||
function getFinalResolvers(resolvers, mergeInfo) { | ||
let finalResolvers; | ||
if (typeof resolvers === 'function') { | ||
finalResolvers = resolvers(mergeInfo); | ||
} | ||
else if (Array.isArray(resolvers)) { | ||
finalResolvers = resolvers.reduce((left, right) => utils.mergeDeep(left, typeof right === 'function' ? right(mergeInfo) : right), {}); | ||
finalResolvers = resolvers.reduce(utils.mergeDeep, {}); | ||
} | ||
else { | ||
finalResolvers = resolvers; | ||
} | ||
if (finalResolvers == null) { | ||
finalResolvers = {}; | ||
} | ||
return finalResolvers; | ||
} | ||
function isDocumentNode$1(object) { | ||
@@ -826,0 +769,0 @@ return object.kind !== undefined; |
129
index.esm.js
import { Kind, GraphQLDirective, valueFromASTUntyped, GraphQLInputObjectType, GraphQLScalarType, GraphQLUnionType, GraphQLEnumType, GraphQLInterfaceType, GraphQLObjectType, DirectiveLocation, TokenKind, getDirectiveValues, GraphQLDeprecatedDirective, isSchema, isNamedType, getNamedType, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, GraphQLSchema, specifiedDirectives, extendSchema } from 'graphql'; | ||
import { createStub, createNamedStub, parseSelectionSet, typeContainsSelectionSet, parseFragmentToInlineFragment, concatInlineFragments, forEachField, rewireTypes, cloneDirective, SchemaDirectiveVisitor, mergeDeep } from '@graphql-tools/utils'; | ||
import { buildDocumentFromTypeDefinitions, addResolversToSchema, assertResolversPresent, addCatchUndefinedToSchema, addErrorLoggingToSchema, addSchemaLevelResolver, attachDirectiveResolvers } from '@graphql-tools/schema'; | ||
import { createStub, createNamedStub, mapSchemaByField, parseSelectionSet, typeContainsSelectionSet, parseFragmentToInlineFragment, concatInlineFragments, rewireTypes, cloneDirective, mergeDeep, SchemaDirectiveVisitor } from '@graphql-tools/utils'; | ||
import { buildDocumentFromTypeDefinitions, extendResolversFromInterfaces, addResolversToSchema, assertResolversPresent, addCatchUndefinedToSchema, addErrorLoggingToSchema, addSchemaLevelResolver, attachDirectiveResolvers } from '@graphql-tools/schema'; | ||
import { wrapSchema } from '@graphql-tools/wrap'; | ||
import { isSubschemaConfig, ExpandAbstractTypes, AddReplacementFragments, delegateToSchema } from '@graphql-tools/delegate'; | ||
import { isSubschemaConfig, delegateToSchema } from '@graphql-tools/delegate'; | ||
@@ -259,3 +259,3 @@ function extractTypeDefinitions(ast) { | ||
} | ||
function buildTypeCandidates({ schemaLikeObjects, allSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }) { | ||
function buildTypeCandidates({ schemaLikeObjects, transformedSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }) { | ||
let schemaDef; | ||
@@ -275,3 +275,3 @@ let schemaExtensions = []; | ||
const schema = wrapSchema(schemaLikeObject); | ||
allSchemas.push(schema); | ||
transformedSchemas.set(schemaLikeObject, schema); | ||
const operationTypes = { | ||
@@ -481,24 +481,5 @@ query: schema.getQueryType(), | ||
function createMergeInfo(allSchemas, typeCandidates, mergeTypes) { | ||
function createMergeInfo(transformedSchemas, typeCandidates, mergeTypes) { | ||
return { | ||
delegate(operation, fieldName, args, context, info, transforms = []) { | ||
const schema = guessSchemaByRootField(allSchemas, operation, fieldName); | ||
const expandTransforms = new ExpandAbstractTypes(info.schema, schema); | ||
const fragmentTransform = new AddReplacementFragments(schema, info.mergeInfo.replacementFragments); | ||
return delegateToSchema({ | ||
schema, | ||
operation, | ||
fieldName, | ||
args, | ||
context, | ||
info, | ||
transforms: [...transforms, expandTransforms, fragmentTransform], | ||
}); | ||
}, | ||
delegateToSchema(options) { | ||
return delegateToSchema({ | ||
...options, | ||
transforms: options.transforms, | ||
}); | ||
}, | ||
transformedSchemas, | ||
fragments: [], | ||
@@ -656,39 +637,14 @@ replacementSelectionSets: undefined, | ||
} | ||
function operationToRootType(operation, schema) { | ||
if (operation === 'subscription') { | ||
return schema.getSubscriptionType(); | ||
} | ||
else if (operation === 'mutation') { | ||
return schema.getMutationType(); | ||
} | ||
return schema.getQueryType(); | ||
} | ||
function guessSchemaByRootField(schemas, operation, fieldName) { | ||
for (const schema of schemas) { | ||
const rootObject = operationToRootType(operation, schema); | ||
if (rootObject != null) { | ||
const fields = rootObject.getFields(); | ||
if (fieldName in fields) { | ||
return schema; | ||
} | ||
} | ||
} | ||
throw new Error(`Could not find subschema with field \`${operation}.${fieldName}\``); | ||
} | ||
function addMergeInfo(stitchedSchema, mergeInfo) { | ||
forEachField(stitchedSchema, field => { | ||
if (field.resolve != null) { | ||
const fieldResolver = field.resolve; | ||
field.resolve = (parent, args, context, info) => { | ||
const newInfo = { ...info, mergeInfo }; | ||
return fieldResolver(parent, args, context, newInfo); | ||
}; | ||
return mapSchemaByField(stitchedSchema, ([fieldName, originalFieldConfig]) => { | ||
const newFieldConfig = { ...originalFieldConfig }; | ||
const resolver = originalFieldConfig.resolve; | ||
if (resolver != null) { | ||
newFieldConfig.resolve = (parent, args, context, info) => resolver(parent, args, context, { ...info, mergeInfo }); | ||
} | ||
if (field.subscribe != null) { | ||
const fieldResolver = field.subscribe; | ||
field.subscribe = (parent, args, context, info) => { | ||
const newInfo = { ...info, mergeInfo }; | ||
return fieldResolver(parent, args, context, newInfo); | ||
}; | ||
const subscriber = originalFieldConfig.subscribe; | ||
if (subscriber != null) { | ||
newFieldConfig.subscribe = (parent, args, context, info) => subscriber(parent, args, context, { ...info, mergeInfo }); | ||
} | ||
return [fieldName, newFieldConfig]; | ||
}); | ||
@@ -701,12 +657,2 @@ } | ||
} | ||
const allSchemas = []; | ||
const typeCandidates = Object.create(null); | ||
const extensions = []; | ||
const directives = []; | ||
const schemaDefs = Object.create(null); | ||
const operationTypeNames = { | ||
query: 'Query', | ||
mutation: 'Mutation', | ||
subscription: 'Subscription', | ||
}; | ||
let schemaLikeObjects = [...subschemas]; | ||
@@ -733,5 +679,15 @@ if (typeDefs) { | ||
}); | ||
const transformedSchemas = new Map(); | ||
const typeCandidates = Object.create(null); | ||
const extensions = []; | ||
const directives = []; | ||
const schemaDefs = Object.create(null); | ||
const operationTypeNames = { | ||
query: 'Query', | ||
mutation: 'Mutation', | ||
subscription: 'Subscription', | ||
}; | ||
buildTypeCandidates({ | ||
schemaLikeObjects, | ||
allSchemas, | ||
transformedSchemas, | ||
typeCandidates, | ||
@@ -745,5 +701,3 @@ extensions, | ||
let mergeInfo; | ||
mergeInfo = createMergeInfo(allSchemas, typeCandidates, mergeTypes); | ||
const finalResolvers = getFinalResolvers(resolvers, mergeInfo); | ||
mergeInfo = completeMergeInfo(mergeInfo, finalResolvers); | ||
mergeInfo = createMergeInfo(transformedSchemas, typeCandidates, mergeTypes); | ||
const typeMap = buildTypeMap({ | ||
@@ -774,2 +728,8 @@ typeCandidates, | ||
}); | ||
// We allow passing in an array of resolver maps, in which case we merge them | ||
const resolverMap = Array.isArray(resolvers) ? resolvers.reduce(mergeDeep, {}) : resolvers; | ||
const finalResolvers = inheritResolversFromInterfaces | ||
? extendResolversFromInterfaces(schema, resolverMap) | ||
: resolverMap; | ||
mergeInfo = completeMergeInfo(mergeInfo, finalResolvers); | ||
addResolversToSchema({ | ||
@@ -779,6 +739,6 @@ schema, | ||
resolverValidationOptions, | ||
inheritResolversFromInterfaces, | ||
inheritResolversFromInterfaces: false, | ||
}); | ||
assertResolversPresent(schema, resolverValidationOptions); | ||
addMergeInfo(schema, mergeInfo); | ||
schema = addMergeInfo(schema, mergeInfo); | ||
if (!allowUndefinedInResolve) { | ||
@@ -803,19 +763,2 @@ addCatchUndefinedToSchema(schema); | ||
} | ||
function getFinalResolvers(resolvers, mergeInfo) { | ||
let finalResolvers; | ||
if (typeof resolvers === 'function') { | ||
finalResolvers = resolvers(mergeInfo); | ||
} | ||
else if (Array.isArray(resolvers)) { | ||
finalResolvers = resolvers.reduce((left, right) => mergeDeep(left, typeof right === 'function' ? right(mergeInfo) : right), {}); | ||
finalResolvers = resolvers.reduce(mergeDeep, {}); | ||
} | ||
else { | ||
finalResolvers = resolvers; | ||
} | ||
if (finalResolvers == null) { | ||
finalResolvers = {}; | ||
} | ||
return finalResolvers; | ||
} | ||
function isDocumentNode$1(object) { | ||
@@ -822,0 +765,0 @@ return object.kind !== undefined; |
import { GraphQLSchema } from 'graphql'; | ||
import { MergeTypeCandidate, MergeInfo, IResolversParameter, MergeTypeFilter } from './types'; | ||
export declare function createMergeInfo(allSchemas: Array<GraphQLSchema>, typeCandidates: Record<string, Array<MergeTypeCandidate>>, mergeTypes?: boolean | Array<string> | MergeTypeFilter): MergeInfo; | ||
export declare function completeMergeInfo(mergeInfo: MergeInfo, resolvers: IResolversParameter): MergeInfo; | ||
export declare function addMergeInfo(stitchedSchema: GraphQLSchema, mergeInfo: MergeInfo): void; | ||
import { IResolvers } from '@graphql-tools/utils'; | ||
import { SubschemaConfig } from '@graphql-tools/delegate'; | ||
import { MergeTypeCandidate, MergeInfo, MergeTypeFilter } from './types'; | ||
export declare function createMergeInfo(transformedSchemas: Map<GraphQLSchema | SubschemaConfig, GraphQLSchema>, typeCandidates: Record<string, Array<MergeTypeCandidate>>, mergeTypes?: boolean | Array<string> | MergeTypeFilter): MergeInfo; | ||
export declare function completeMergeInfo(mergeInfo: MergeInfo, resolvers: IResolvers): MergeInfo; | ||
export declare function addMergeInfo(stitchedSchema: GraphQLSchema, mergeInfo: MergeInfo): GraphQLSchema; |
{ | ||
"name": "@graphql-tools/stitch", | ||
"version": "5.0.1-alpha-b7ec6b7.0", | ||
"version": "5.0.1-alpha-b86f0f0.0", | ||
"description": "A set of utils for faster development of GraphQL tools", | ||
@@ -9,6 +9,6 @@ "peerDependencies": { | ||
"dependencies": { | ||
"@graphql-tools/delegate": "5.0.1-alpha-b7ec6b7.0", | ||
"@graphql-tools/schema": "5.0.1-alpha-b7ec6b7.0", | ||
"@graphql-tools/wrap": "5.0.1-alpha-b7ec6b7.0", | ||
"@graphql-tools/utils": "5.0.1-alpha-b7ec6b7.0", | ||
"@graphql-tools/delegate": "5.0.1-alpha-b86f0f0.0", | ||
"@graphql-tools/schema": "5.0.1-alpha-b86f0f0.0", | ||
"@graphql-tools/wrap": "5.0.1-alpha-b86f0f0.0", | ||
"@graphql-tools/utils": "5.0.1-alpha-b86f0f0.0", | ||
"tslib": "1.11.1" | ||
@@ -15,0 +15,0 @@ }, |
import { DocumentNode, GraphQLNamedType, GraphQLSchema, GraphQLDirective, SchemaDefinitionNode, SchemaExtensionNode } from 'graphql'; | ||
import { SubschemaConfig } from '@graphql-tools/delegate'; | ||
import { MergeTypeCandidate, MergeTypeFilter, OnTypeConflict, MergeInfo } from './types'; | ||
export declare function buildTypeCandidates({ schemaLikeObjects, allSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }: { | ||
export declare function buildTypeCandidates({ schemaLikeObjects, transformedSchemas, typeCandidates, extensions, directives, schemaDefs, operationTypeNames, mergeDirectives, }: { | ||
schemaLikeObjects: Array<GraphQLSchema | SubschemaConfig | DocumentNode | GraphQLNamedType>; | ||
allSchemas: Array<GraphQLSchema>; | ||
transformedSchemas: Map<GraphQLSchema | SubschemaConfig, GraphQLSchema>; | ||
typeCandidates: Record<string, Array<MergeTypeCandidate>>; | ||
@@ -8,0 +8,0 @@ extensions: Array<DocumentNode>; |
@@ -1,4 +0,4 @@ | ||
import { GraphQLNamedType, GraphQLSchema, GraphQLResolveInfo, SelectionSetNode } from 'graphql'; | ||
import { ReplacementSelectionSetMapping, ReplacementFragmentMapping, IResolvers, ITypeDefinitions, Transform, TypeMap } from '@graphql-tools/utils'; | ||
import { IDelegateToSchemaOptions, SubschemaConfig, SchemaLikeObject } from '@graphql-tools/delegate'; | ||
import { GraphQLNamedType, GraphQLSchema, SelectionSetNode, DocumentNode } from 'graphql'; | ||
import { IResolvers, ITypeDefinitions, TypeMap } from '@graphql-tools/utils'; | ||
import { SubschemaConfig, ReplacementSelectionSetMapping, ReplacementFragmentMapping } from '@graphql-tools/delegate'; | ||
import { IExecutableSchemaDefinition } from '@graphql-tools/schema'; | ||
@@ -27,3 +27,3 @@ export declare type MergeTypeCandidate = { | ||
export interface MergeInfo { | ||
delegate: (type: 'query' | 'mutation' | 'subscription', fieldName: string, args: Record<string, any>, context: Record<string, any>, info: GraphQLResolveInfo, transforms?: Array<Transform>) => any; | ||
transformedSchemas: Map<GraphQLSchema | SubschemaConfig, GraphQLSchema>; | ||
fragments: Array<{ | ||
@@ -36,5 +36,5 @@ field: string; | ||
mergedTypes: Record<string, MergedTypeInfo>; | ||
delegateToSchema<TContext, TArgs>(options: IDelegateToSchemaOptions<TContext, TArgs>): any; | ||
} | ||
export declare type IResolversParameter = Array<IResolvers | ((mergeInfo: MergeInfo) => IResolvers)> | IResolvers | ((mergeInfo: MergeInfo) => IResolvers); | ||
export declare type SchemaLikeObject = SubschemaConfig | GraphQLSchema | string | DocumentNode | Array<GraphQLNamedType>; | ||
export interface IStitchSchemasOptions<TContext = any> extends Omit<IExecutableSchemaDefinition<TContext>, 'typeDefs'> { | ||
@@ -57,1 +57,7 @@ subschemas?: Array<GraphQLSchema | SubschemaConfig>; | ||
}) => GraphQLNamedType; | ||
declare module '@graphql-tools/utils' { | ||
interface IFieldResolverOptions<TSource = any, TContext = any, TArgs = any> { | ||
fragment?: string; | ||
selectionSet?: string; | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
197288
1631
+ Added@graphql-tools/delegate@5.0.1-alpha-b86f0f0.0(transitive)
+ Added@graphql-tools/schema@5.0.1-alpha-b86f0f0.0(transitive)
+ Added@graphql-tools/utils@5.0.1-alpha-b86f0f0.0(transitive)
+ Added@graphql-tools/wrap@5.0.1-alpha-b86f0f0.0(transitive)
- Removed@graphql-tools/delegate@5.0.1-alpha-b7ec6b7.0(transitive)
- Removed@graphql-tools/schema@5.0.1-alpha-b7ec6b7.0(transitive)
- Removed@graphql-tools/utils@5.0.1-alpha-b7ec6b7.0(transitive)
- Removed@graphql-tools/wrap@5.0.1-alpha-b7ec6b7.0(transitive)