diff --git a/packages/delegate/src/Subschema.ts b/packages/delegate/src/Subschema.ts index 6b09bf45a1e..d2ccaf6d22d 100644 --- a/packages/delegate/src/Subschema.ts +++ b/packages/delegate/src/Subschema.ts @@ -1,9 +1,8 @@ import { GraphQLSchema } from 'graphql'; -import { Transform, applySchemaTransforms } from '@graphql-tools/utils'; - import { SubschemaConfig, + Transform, MergedTypeConfig, CreateProxyingResolverFn, Subscriber, @@ -13,6 +12,7 @@ import { } from './types'; import { FIELD_SUBSCHEMA_MAP_SYMBOL, OBJECT_SUBSCHEMA_SYMBOL } from './symbols'; +import { applySchemaTransforms } from './applySchemaTransforms'; export function getSubschema(result: any, responseKey: string): GraphQLSchema | SubschemaConfig { const subschema = result[FIELD_SUBSCHEMA_MAP_SYMBOL] && result[FIELD_SUBSCHEMA_MAP_SYMBOL][responseKey]; diff --git a/packages/delegate/src/Transformer.ts b/packages/delegate/src/Transformer.ts index 6acee7a480f..59bf49a83ec 100644 --- a/packages/delegate/src/Transformer.ts +++ b/packages/delegate/src/Transformer.ts @@ -1,6 +1,6 @@ -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; -import { DelegationContext, DelegationBinding } from './types'; +import { DelegationContext, DelegationBinding, Transform } from './types'; import { defaultDelegationBinding } from './delegationBindings'; diff --git a/packages/delegate/src/applySchemaTransforms.ts b/packages/delegate/src/applySchemaTransforms.ts new file mode 100644 index 00000000000..19f3171327c --- /dev/null +++ b/packages/delegate/src/applySchemaTransforms.ts @@ -0,0 +1,13 @@ +import { GraphQLSchema } from 'graphql'; + +import { cloneSchema } from '@graphql-tools/utils'; + +import { Transform } from './types'; + +export function applySchemaTransforms(originalSchema: GraphQLSchema, transforms: Array): GraphQLSchema { + return transforms.reduce( + (schema: GraphQLSchema, transform: Transform) => + transform.transformSchema != null ? transform.transformSchema(cloneSchema(schema)) : schema, + originalSchema + ); +} diff --git a/packages/delegate/src/delegateToSchema.ts b/packages/delegate/src/delegateToSchema.ts index bee85d2d4ce..e0b8238b2ff 100644 --- a/packages/delegate/src/delegateToSchema.ts +++ b/packages/delegate/src/delegateToSchema.ts @@ -15,7 +15,7 @@ import { import isPromise from 'is-promise'; -import { mapAsyncIterator, Transform, ExecutionResult } from '@graphql-tools/utils'; +import { mapAsyncIterator, ExecutionResult } from '@graphql-tools/utils'; import { IDelegateToSchemaOptions, @@ -24,6 +24,7 @@ import { ExecutionParams, StitchingInfo, Endpoint, + Transform, } from './types'; import { isSubschemaConfig } from './Subschema'; diff --git a/packages/delegate/src/delegationBindings.ts b/packages/delegate/src/delegationBindings.ts index 450db941775..55e2e8fbec8 100644 --- a/packages/delegate/src/delegationBindings.ts +++ b/packages/delegate/src/delegationBindings.ts @@ -1,6 +1,4 @@ -import { Transform } from '@graphql-tools/utils'; - -import { StitchingInfo, DelegationContext } from './types'; +import { Transform, StitchingInfo, DelegationContext } from './types'; import AddSelectionSets from './transforms/AddSelectionSets'; import ExpandAbstractTypes from './transforms/ExpandAbstractTypes'; diff --git a/packages/delegate/src/index.ts b/packages/delegate/src/index.ts index 3770374cb10..3de1aa4a384 100644 --- a/packages/delegate/src/index.ts +++ b/packages/delegate/src/index.ts @@ -5,6 +5,7 @@ export { createMergedResolver } from './createMergedResolver'; export { handleResult } from './results/handleResult'; export { Subschema, isSubschema, isSubschemaConfig, cloneSubschemaConfig, getSubschema } from './Subschema'; +export * from './applySchemaTransforms'; export * from './delegationBindings'; export * from './transforms'; export * from './types'; diff --git a/packages/delegate/src/transforms/AddArgumentsAsVariables.ts b/packages/delegate/src/transforms/AddArgumentsAsVariables.ts index 1849ae520b1..ef551e58358 100644 --- a/packages/delegate/src/transforms/AddArgumentsAsVariables.ts +++ b/packages/delegate/src/transforms/AddArgumentsAsVariables.ts @@ -12,7 +12,9 @@ import { VariableDefinitionNode, } from 'graphql'; -import { Transform, Request, serializeInputValue, updateArgument } from '@graphql-tools/utils'; +import { Request, serializeInputValue, updateArgument } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class AddArgumentsAsVariables implements Transform { private readonly targetSchema: GraphQLSchema; @@ -29,7 +31,11 @@ export default class AddArgumentsAsVariables implements Transform { ); } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const { document, variables } = addVariablesToRootField(this.targetSchema, originalRequest, this.args); return { diff --git a/packages/delegate/src/transforms/AddFragmentsByField.ts b/packages/delegate/src/transforms/AddFragmentsByField.ts index c8944bdd29f..0ae90e788ba 100644 --- a/packages/delegate/src/transforms/AddFragmentsByField.ts +++ b/packages/delegate/src/transforms/AddFragmentsByField.ts @@ -10,7 +10,9 @@ import { InlineFragmentNode, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class AddFragmentsByField implements Transform { private readonly targetSchema: GraphQLSchema; @@ -21,7 +23,11 @@ export default class AddFragmentsByField implements Transform { this.mapping = mapping; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = addFragmentsByField(this.targetSchema, originalRequest.document, this.mapping); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/AddSelectionSets.ts b/packages/delegate/src/transforms/AddSelectionSets.ts index 87e0769593b..fd2c12558e0 100644 --- a/packages/delegate/src/transforms/AddSelectionSets.ts +++ b/packages/delegate/src/transforms/AddSelectionSets.ts @@ -9,8 +9,9 @@ import { print, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; +import { Transform, DelegationContext } from '../types'; import { memoize2 } from '../memoize'; import VisitSelectionSets from './VisitSelectionSets'; @@ -30,8 +31,12 @@ export default class AddSelectionSets implements Transform { ); } - public transformRequest(originalRequest: Request): Request { - return this.transformer.transformRequest(originalRequest); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/delegate/src/transforms/AddSelectionSetsByField.ts b/packages/delegate/src/transforms/AddSelectionSetsByField.ts index a0e05143746..846e8e7df75 100644 --- a/packages/delegate/src/transforms/AddSelectionSetsByField.ts +++ b/packages/delegate/src/transforms/AddSelectionSetsByField.ts @@ -9,7 +9,9 @@ import { visitWithTypeInfo, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class AddSelectionSetsByField implements Transform { private readonly schema: GraphQLSchema; @@ -20,7 +22,11 @@ export default class AddSelectionSetsByField implements Transform { this.mapping = mapping; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = addSelectionSetsByField(this.schema, originalRequest.document, this.mapping); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/AddSelectionSetsByType.ts b/packages/delegate/src/transforms/AddSelectionSetsByType.ts index ac573cc7249..9233e73881e 100644 --- a/packages/delegate/src/transforms/AddSelectionSetsByType.ts +++ b/packages/delegate/src/transforms/AddSelectionSetsByType.ts @@ -9,7 +9,9 @@ import { visitWithTypeInfo, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class AddSelectionSetsByType implements Transform { private readonly targetSchema: GraphQLSchema; @@ -20,7 +22,11 @@ export default class AddSelectionSetsByType implements Transform { this.mapping = mapping; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = addSelectionSetsByType(this.targetSchema, originalRequest.document, this.mapping); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/AddTypenameToAbstract.ts b/packages/delegate/src/transforms/AddTypenameToAbstract.ts index 212da9457a0..0ac2811449b 100644 --- a/packages/delegate/src/transforms/AddTypenameToAbstract.ts +++ b/packages/delegate/src/transforms/AddTypenameToAbstract.ts @@ -10,7 +10,9 @@ import { isAbstractType, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class AddTypenameToAbstract implements Transform { private readonly targetSchema: GraphQLSchema; @@ -19,7 +21,11 @@ export default class AddTypenameToAbstract implements Transform { this.targetSchema = targetSchema; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = addTypenameToAbstract(this.targetSchema, originalRequest.document); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/CheckResultAndHandleErrors.ts b/packages/delegate/src/transforms/CheckResultAndHandleErrors.ts index 83d4561a431..0ee56d68ebc 100644 --- a/packages/delegate/src/transforms/CheckResultAndHandleErrors.ts +++ b/packages/delegate/src/transforms/CheckResultAndHandleErrors.ts @@ -1,8 +1,8 @@ import { GraphQLResolveInfo, GraphQLOutputType, GraphQLSchema } from 'graphql'; -import { Transform, getResponseKeyFromInfo, ExecutionResult } from '@graphql-tools/utils'; +import { getResponseKeyFromInfo, ExecutionResult } from '@graphql-tools/utils'; import { handleResult } from '../results/handleResult'; -import { SubschemaConfig } from '../types'; +import { SubschemaConfig, Transform, DelegationContext } from '../types'; export default class CheckResultAndHandleErrors implements Transform { private readonly context?: Record; @@ -28,9 +28,13 @@ export default class CheckResultAndHandleErrors implements Transform { this.typeMerge = typeMerge; } - public transformResult(result: any): any { + public transformResult( + originalResult: ExecutionResult, + _delegationContext: DelegationContext, + _transformationContext: Record + ): ExecutionResult { return checkResultAndHandleErrors( - result, + originalResult, this.context != null ? this.context : {}, this.info, this.fieldName, diff --git a/packages/delegate/src/transforms/ExpandAbstractTypes.ts b/packages/delegate/src/transforms/ExpandAbstractTypes.ts index 482e465069e..821c71a5719 100644 --- a/packages/delegate/src/transforms/ExpandAbstractTypes.ts +++ b/packages/delegate/src/transforms/ExpandAbstractTypes.ts @@ -15,7 +15,9 @@ import { visitWithTypeInfo, } from 'graphql'; -import { implementsAbstractType, Transform, Request } from '@graphql-tools/utils'; +import { implementsAbstractType, Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class ExpandAbstractTypes implements Transform { private readonly targetSchema: GraphQLSchema; @@ -31,7 +33,11 @@ export default class ExpandAbstractTypes implements Transform { this.interfaceExtensionsMap = interfaceExtensionsMap; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = expandAbstractTypes( this.targetSchema, this.possibleTypesMap, diff --git a/packages/delegate/src/transforms/FilterToSchema.ts b/packages/delegate/src/transforms/FilterToSchema.ts index 8c654e142e9..feb8e2ca7b7 100644 --- a/packages/delegate/src/transforms/FilterToSchema.ts +++ b/packages/delegate/src/transforms/FilterToSchema.ts @@ -21,7 +21,9 @@ import { isInterfaceType, } from 'graphql'; -import { Transform, Request, implementsAbstractType, TypeMap } from '@graphql-tools/utils'; +import { Request, implementsAbstractType, TypeMap } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class FilterToSchema implements Transform { private readonly targetSchema: GraphQLSchema; @@ -30,7 +32,11 @@ export default class FilterToSchema implements Transform { this.targetSchema = targetSchema; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { return { ...originalRequest, ...filterToSchema(this.targetSchema, originalRequest.document, originalRequest.variables), diff --git a/packages/delegate/src/transforms/ReplaceFieldWithFragment.ts b/packages/delegate/src/transforms/ReplaceFieldWithFragment.ts index 79b9d2c4077..1fef1b65e43 100644 --- a/packages/delegate/src/transforms/ReplaceFieldWithFragment.ts +++ b/packages/delegate/src/transforms/ReplaceFieldWithFragment.ts @@ -12,7 +12,9 @@ import { visitWithTypeInfo, } from 'graphql'; -import { concatInlineFragments, Transform, Request } from '@graphql-tools/utils'; +import { concatInlineFragments, Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class ReplaceFieldWithFragment implements Transform { private readonly targetSchema: GraphQLSchema; @@ -44,7 +46,11 @@ export default class ReplaceFieldWithFragment implements Transform { } } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = replaceFieldsWithFragments(this.targetSchema, originalRequest.document, this.mapping); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/VisitSelectionSets.ts b/packages/delegate/src/transforms/VisitSelectionSets.ts index dd0f70a3817..b2462ba2fba 100644 --- a/packages/delegate/src/transforms/VisitSelectionSets.ts +++ b/packages/delegate/src/transforms/VisitSelectionSets.ts @@ -13,7 +13,9 @@ import { DefinitionNode, } from 'graphql'; -import { Transform, Request, collectFields, GraphQLExecutionContext } from '@graphql-tools/utils'; +import { Request, collectFields, GraphQLExecutionContext } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; export default class VisitSelectionSets implements Transform { private readonly schema: GraphQLSchema; @@ -30,7 +32,11 @@ export default class VisitSelectionSets implements Transform { this.visitor = visitor; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = visitSelectionSets(originalRequest, this.schema, this.initialType, this.visitor); return { ...originalRequest, diff --git a/packages/delegate/src/transforms/WrapConcreteTypes.ts b/packages/delegate/src/transforms/WrapConcreteTypes.ts index dd425193a3a..0a73a9a1f4b 100644 --- a/packages/delegate/src/transforms/WrapConcreteTypes.ts +++ b/packages/delegate/src/transforms/WrapConcreteTypes.ts @@ -12,7 +12,9 @@ import { FieldNode, } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '../types'; // For motivation, see https://github.com/ardatan/graphql-tools/issues/751 @@ -25,7 +27,11 @@ export default class WrapConcreteTypes implements Transform { this.targetSchema = targetSchema; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = wrapConcreteTypes(this.returnType, this.targetSchema, originalRequest.document); return { ...originalRequest, diff --git a/packages/delegate/src/types.ts b/packages/delegate/src/types.ts index 768f0470427..6dd90f53995 100644 --- a/packages/delegate/src/types.ts +++ b/packages/delegate/src/types.ts @@ -13,11 +13,29 @@ import { OperationTypeNode, } from 'graphql'; -import { Operation, Transform, Request, TypeMap, ExecutionResult } from '@graphql-tools/utils'; +import { Operation, Request, TypeMap, ExecutionResult } from '@graphql-tools/utils'; import { Subschema } from './Subschema'; import DataLoader from 'dataloader'; +export type SchemaTransform = (originalSchema: GraphQLSchema) => GraphQLSchema; +export type RequestTransform> = ( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: T +) => Request; +export type ResultTransform> = ( + originalResult: ExecutionResult, + delegationContext: DelegationContext, + transformationContext: T +) => ExecutionResult; + +export interface Transform> { + transformSchema?: SchemaTransform; + transformRequest?: RequestTransform; + transformResult?: ResultTransform; +} + export interface DelegationContext { subschema: GraphQLSchema | SubschemaConfig; targetSchema: GraphQLSchema; diff --git a/packages/schema/src/types.ts b/packages/schema/src/types.ts index 400c456bedb..4280832126d 100644 --- a/packages/schema/src/types.ts +++ b/packages/schema/src/types.ts @@ -1,3 +1,5 @@ +import { GraphQLSchema } from 'graphql'; + import { ITypeDefinitions, IResolvers, @@ -5,7 +7,6 @@ import { IDirectiveResolvers, SchemaDirectiveVisitorClass, GraphQLParseOptions, - SchemaTransform, PruneSchemaOptions, } from '@graphql-tools/utils'; @@ -51,7 +52,7 @@ export interface IExecutableSchemaDefinition { /** * An array of schema transformation functions */ - schemaTransforms?: Array; + schemaTransforms?: Array<(originalSchema: GraphQLSchema) => GraphQLSchema>; /** * Additional options for parsing the type definitions if they are provided * as a string diff --git a/packages/utils/src/Interfaces.ts b/packages/utils/src/Interfaces.ts index 59e9d63ba37..641894c0410 100644 --- a/packages/utils/src/Interfaces.ts +++ b/packages/utils/src/Interfaces.ts @@ -58,9 +58,6 @@ export interface ExecutionResult> extends GraphQLExe extensions?: Record; } -// for backwards compatibility -export type Result = ExecutionResult; - // graphql-js non-exported typings export type TypeMap = Record; @@ -179,24 +176,6 @@ export interface IFieldResolverOptions GraphQLSchema; -export type RequestTransform> = ( - originalRequest: Request, - delegationContext?: Record, - transformationContext?: T -) => Request; -export type ResultTransform> = ( - originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: T -) => ExecutionResult; - -export interface Transform> { - transformSchema?: SchemaTransform; - transformRequest?: RequestTransform; - transformResult?: ResultTransform; -} - export type FieldNodeMapper = ( fieldNode: FieldNode, fragments: Record, diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 1fda6639b9d..a4f537e3712 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -36,7 +36,6 @@ export * from './stub'; export * from './fragments'; export * from './selectionSets'; export * from './getResponseKeyFromInfo'; -export * from './transforms'; export * from './fields'; export * from './renameType'; export * from './collectFields'; diff --git a/packages/utils/src/transforms.ts b/packages/utils/src/transforms.ts deleted file mode 100644 index 21f84881287..00000000000 --- a/packages/utils/src/transforms.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { GraphQLSchema } from 'graphql'; - -import { Request, Transform } from './Interfaces'; - -import { cloneSchema } from './clone'; - -export function applySchemaTransforms(originalSchema: GraphQLSchema, transforms: Array): GraphQLSchema { - return transforms.reduce( - (schema: GraphQLSchema, transform: Transform) => - transform.transformSchema != null ? transform.transformSchema(cloneSchema(schema)) : schema, - originalSchema - ); -} - -export function applyRequestTransforms(originalRequest: Request, transforms: Array): Request { - return transforms.reduce( - (request: Request, transform: Transform) => - transform.transformRequest != null ? transform.transformRequest(request) : request, - - originalRequest - ); -} - -export function applyResultTransforms(originalResult: any, transforms: Array): any { - return transforms.reduceRight( - (result: any, transform: Transform) => - transform.transformResult != null ? transform.transformResult(result) : result, - originalResult - ); -} diff --git a/packages/wrap/src/generateProxyingResolvers.ts b/packages/wrap/src/generateProxyingResolvers.ts index d6c3789a4b0..1a3f76f9211 100644 --- a/packages/wrap/src/generateProxyingResolvers.ts +++ b/packages/wrap/src/generateProxyingResolvers.ts @@ -1,6 +1,6 @@ import { GraphQLSchema, GraphQLFieldResolver, GraphQLObjectType, GraphQLResolveInfo } from 'graphql'; -import { Transform, Operation, getResponseKeyFromInfo, getErrors, applySchemaTransforms } from '@graphql-tools/utils'; +import { Operation, getResponseKeyFromInfo, getErrors } from '@graphql-tools/utils'; import { delegateToSchema, getSubschema, @@ -9,6 +9,8 @@ import { isSubschemaConfig, CreateProxyingResolverFn, ICreateProxyingResolverOptions, + Transform, + applySchemaTransforms, } from '@graphql-tools/delegate'; export function generateProxyingResolvers( diff --git a/packages/wrap/src/transforms/ExtendSchema.ts b/packages/wrap/src/transforms/ExtendSchema.ts index 41e243a001d..6488f1acde1 100644 --- a/packages/wrap/src/transforms/ExtendSchema.ts +++ b/packages/wrap/src/transforms/ExtendSchema.ts @@ -1,15 +1,8 @@ import { GraphQLSchema, extendSchema, parse } from 'graphql'; -import { - Transform, - IFieldResolver, - IResolvers, - Request, - FieldNodeMappers, - ExecutionResult, -} from '@graphql-tools/utils'; +import { IFieldResolver, IResolvers, Request, FieldNodeMappers, ExecutionResult } from '@graphql-tools/utils'; import { addResolversToSchema } from '@graphql-tools/schema'; -import { defaultMergedResolver } from '@graphql-tools/delegate'; +import { Transform, defaultMergedResolver, DelegationContext } from '@graphql-tools/delegate'; import { ObjectValueTransformerMap, ErrorsTransformer } from '../types'; @@ -60,16 +53,16 @@ export default class ExtendSchema implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/ExtractField.ts b/packages/wrap/src/transforms/ExtractField.ts index 3ce38c88b10..787372bf7f7 100644 --- a/packages/wrap/src/transforms/ExtractField.ts +++ b/packages/wrap/src/transforms/ExtractField.ts @@ -1,6 +1,8 @@ import { visit, Kind, SelectionSetNode, BREAK, FieldNode } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; export default class ExtractField implements Transform { private readonly from: Array; @@ -11,7 +13,11 @@ export default class ExtractField implements Transform { this.to = to; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { let fromSelection: SelectionSetNode | undefined; const ourPathFrom = JSON.stringify(this.from); const ourPathTo = JSON.stringify(this.to); diff --git a/packages/wrap/src/transforms/FilterInputObjectFields.ts b/packages/wrap/src/transforms/FilterInputObjectFields.ts index ae7c1c69453..371fc18af54 100644 --- a/packages/wrap/src/transforms/FilterInputObjectFields.ts +++ b/packages/wrap/src/transforms/FilterInputObjectFields.ts @@ -1,10 +1,13 @@ import { GraphQLSchema, GraphQLInputFieldConfig } from 'graphql'; -import { Transform, Request, InputFieldFilter } from '@graphql-tools/utils'; +import { Request, InputFieldFilter } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; -import TransformInputObjectFields from './TransformInputObjectFields'; import { InputObjectNodeTransformer } from '../types'; +import TransformInputObjectFields from './TransformInputObjectFields'; + export default class FilterInputObjectFields implements Transform { private readonly transformer: TransformInputObjectFields; @@ -21,7 +24,11 @@ export default class FilterInputObjectFields implements Transform { return this.transformer.transformSchema(originalSchema); } - public transformRequest(originalRequest: Request, delegationContext?: Record): Request { - return this.transformer.transformRequest(originalRequest, delegationContext); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/wrap/src/transforms/FilterInterfaceFields.ts b/packages/wrap/src/transforms/FilterInterfaceFields.ts index d43ec3fbb21..b0962a9e064 100644 --- a/packages/wrap/src/transforms/FilterInterfaceFields.ts +++ b/packages/wrap/src/transforms/FilterInterfaceFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, FieldFilter } from '@graphql-tools/utils'; +import { FieldFilter } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import TransformInterfaceFields from './TransformInterfaceFields'; diff --git a/packages/wrap/src/transforms/FilterObjectFieldDirectives.ts b/packages/wrap/src/transforms/FilterObjectFieldDirectives.ts index a3f2a0efb10..d0d80807cdb 100644 --- a/packages/wrap/src/transforms/FilterObjectFieldDirectives.ts +++ b/packages/wrap/src/transforms/FilterObjectFieldDirectives.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, getArgumentValues } from '@graphql-tools/utils'; +import { getArgumentValues } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import TransformObjectFields from './TransformObjectFields'; diff --git a/packages/wrap/src/transforms/FilterObjectFields.ts b/packages/wrap/src/transforms/FilterObjectFields.ts index acbb3e80faf..1bc8eb7b6f8 100644 --- a/packages/wrap/src/transforms/FilterObjectFields.ts +++ b/packages/wrap/src/transforms/FilterObjectFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, FieldFilter } from '@graphql-tools/utils'; +import { FieldFilter } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import TransformObjectFields from './TransformObjectFields'; diff --git a/packages/wrap/src/transforms/FilterRootFields.ts b/packages/wrap/src/transforms/FilterRootFields.ts index da454b4292f..d4dd3e7859e 100644 --- a/packages/wrap/src/transforms/FilterRootFields.ts +++ b/packages/wrap/src/transforms/FilterRootFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, RootFieldFilter } from '@graphql-tools/utils'; +import { RootFieldFilter } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import TransformRootFields from './TransformRootFields'; diff --git a/packages/wrap/src/transforms/FilterTypes.ts b/packages/wrap/src/transforms/FilterTypes.ts index 21938951f26..255bb0b98ef 100644 --- a/packages/wrap/src/transforms/FilterTypes.ts +++ b/packages/wrap/src/transforms/FilterTypes.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLNamedType } from 'graphql'; -import { mapSchema, Transform, MapperKind } from '@graphql-tools/utils'; +import { mapSchema, MapperKind } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; export default class FilterTypes implements Transform { private readonly filter: (type: GraphQLNamedType) => boolean; diff --git a/packages/wrap/src/transforms/HoistField.ts b/packages/wrap/src/transforms/HoistField.ts index a6920a789d1..3eaeac3c83d 100644 --- a/packages/wrap/src/transforms/HoistField.ts +++ b/packages/wrap/src/transforms/HoistField.ts @@ -12,13 +12,12 @@ import { renameFieldNode, appendObjectFields, removeObjectFields, - Transform, Request, ExecutionResult, relocatedError, } from '@graphql-tools/utils'; -import { defaultMergedResolver } from '@graphql-tools/delegate'; +import { Transform, defaultMergedResolver, DelegationContext } from '@graphql-tools/delegate'; import MapFields from './MapFields'; @@ -124,16 +123,16 @@ export default class HoistField implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/MapFields.ts b/packages/wrap/src/transforms/MapFields.ts index c45d07a81d1..d396c49a229 100644 --- a/packages/wrap/src/transforms/MapFields.ts +++ b/packages/wrap/src/transforms/MapFields.ts @@ -1,11 +1,13 @@ import { GraphQLSchema } from 'graphql'; -import { Transform, Request, FieldNodeMappers, ExecutionResult } from '@graphql-tools/utils'; +import { Request, FieldNodeMappers, ExecutionResult } from '@graphql-tools/utils'; -import TransformCompositeFields from './TransformCompositeFields'; +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import { ObjectValueTransformerMap, ErrorsTransformer } from '../types'; +import TransformCompositeFields from './TransformCompositeFields'; + export default class MapFields implements Transform { private readonly transformer: TransformCompositeFields; @@ -58,16 +60,16 @@ export default class MapFields implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/MapLeafValues.ts b/packages/wrap/src/transforms/MapLeafValues.ts index f6e2bd9137d..6f54472610d 100644 --- a/packages/wrap/src/transforms/MapLeafValues.ts +++ b/packages/wrap/src/transforms/MapLeafValues.ts @@ -15,7 +15,6 @@ import { } from 'graphql'; import { - Transform, Request, ExecutionResult, visitResult, @@ -24,6 +23,8 @@ import { transformInputValue, } from '@graphql-tools/utils'; +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + import { LeafValueTransformer } from '../types'; export interface MapLeafValuesTransformationContext { @@ -60,7 +61,7 @@ export default class MapLeafValues implements Transform, + _delegationContext: DelegationContext, transformationContext?: MapLeafValuesTransformationContext ): Request { const document = originalRequest.document; @@ -91,9 +92,9 @@ export default class MapLeafValues implements Transform, + _delegationContext: DelegationContext, transformationContext?: MapLeafValuesTransformationContext - ) { + ): ExecutionResult { return visitResult( originalResult, transformationContext.transformedRequest, diff --git a/packages/wrap/src/transforms/PruneSchema.ts b/packages/wrap/src/transforms/PruneSchema.ts index 13843a7e450..2421370cb8e 100644 --- a/packages/wrap/src/transforms/PruneSchema.ts +++ b/packages/wrap/src/transforms/PruneSchema.ts @@ -1,6 +1,8 @@ import { GraphQLSchema } from 'graphql'; -import { Transform, PruneSchemaOptions, pruneSchema } from '@graphql-tools/utils'; +import { PruneSchemaOptions, pruneSchema } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; export default class PruneTypes implements Transform { private readonly options: PruneSchemaOptions; diff --git a/packages/wrap/src/transforms/RemoveObjectFieldDeprecations.ts b/packages/wrap/src/transforms/RemoveObjectFieldDeprecations.ts index ae21c300a5d..762e67d6f19 100644 --- a/packages/wrap/src/transforms/RemoveObjectFieldDeprecations.ts +++ b/packages/wrap/src/transforms/RemoveObjectFieldDeprecations.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, valueMatchesCriteria } from '@graphql-tools/utils'; +import { valueMatchesCriteria } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import FilterObjectFieldDirectives from './FilterObjectFieldDirectives'; import TransformObjectFields from './TransformObjectFields'; diff --git a/packages/wrap/src/transforms/RemoveObjectFieldDirectives.ts b/packages/wrap/src/transforms/RemoveObjectFieldDirectives.ts index 502e59ce14b..065fa5b5324 100644 --- a/packages/wrap/src/transforms/RemoveObjectFieldDirectives.ts +++ b/packages/wrap/src/transforms/RemoveObjectFieldDirectives.ts @@ -1,6 +1,8 @@ import { GraphQLSchema } from 'graphql'; -import { Transform, valueMatchesCriteria } from '@graphql-tools/utils'; +import { valueMatchesCriteria } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import FilterObjectFieldDirectives from './FilterObjectFieldDirectives'; diff --git a/packages/wrap/src/transforms/RemoveObjectFieldsWithDeprecation.ts b/packages/wrap/src/transforms/RemoveObjectFieldsWithDeprecation.ts index c8e6cba10de..89de6b8892f 100644 --- a/packages/wrap/src/transforms/RemoveObjectFieldsWithDeprecation.ts +++ b/packages/wrap/src/transforms/RemoveObjectFieldsWithDeprecation.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, valueMatchesCriteria } from '@graphql-tools/utils'; +import { valueMatchesCriteria } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import FilterObjectFields from './FilterObjectFields'; diff --git a/packages/wrap/src/transforms/RemoveObjectFieldsWithDirective.ts b/packages/wrap/src/transforms/RemoveObjectFieldsWithDirective.ts index 2ae35ce28a4..793eada98c1 100644 --- a/packages/wrap/src/transforms/RemoveObjectFieldsWithDirective.ts +++ b/packages/wrap/src/transforms/RemoveObjectFieldsWithDirective.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, getDirectives, valueMatchesCriteria } from '@graphql-tools/utils'; +import { getDirectives, valueMatchesCriteria } from '@graphql-tools/utils'; + +import { Transform } from '@graphql-tools/delegate'; import FilterObjectFields from './FilterObjectFields'; diff --git a/packages/wrap/src/transforms/RenameInputObjectFields.ts b/packages/wrap/src/transforms/RenameInputObjectFields.ts index 2633763b1ee..a2f8cc3c0c5 100644 --- a/packages/wrap/src/transforms/RenameInputObjectFields.ts +++ b/packages/wrap/src/transforms/RenameInputObjectFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLInputFieldConfig, ObjectFieldNode } from 'graphql'; -import { Transform, Request, mapSchema, MapperKind } from '@graphql-tools/utils'; +import { Request, mapSchema, MapperKind } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import TransformInputObjectFields from './TransformInputObjectFields'; @@ -65,7 +67,11 @@ export default class RenameInputObjectFields implements Transform { return this.transformer.transformSchema(originalSchema); } - public transformRequest(originalRequest: Request, delegationContext?: Record): Request { - return this.transformer.transformRequest(originalRequest, delegationContext); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/wrap/src/transforms/RenameInterfaceFields.ts b/packages/wrap/src/transforms/RenameInterfaceFields.ts index df9e0303b8d..eeb5526e25e 100644 --- a/packages/wrap/src/transforms/RenameInterfaceFields.ts +++ b/packages/wrap/src/transforms/RenameInterfaceFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import TransformInterfaceFields from './TransformInterfaceFields'; @@ -20,7 +22,11 @@ export default class RenameInterfaceFields implements Transform { return this.transformer.transformSchema(originalSchema); } - public transformRequest(originalRequest: Request): Request { - return this.transformer.transformRequest(originalRequest); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/wrap/src/transforms/RenameObjectFields.ts b/packages/wrap/src/transforms/RenameObjectFields.ts index f305072978c..c749e51f9ee 100644 --- a/packages/wrap/src/transforms/RenameObjectFields.ts +++ b/packages/wrap/src/transforms/RenameObjectFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import TransformObjectFields from './TransformObjectFields'; @@ -20,7 +22,11 @@ export default class RenameObjectFields implements Transform { return this.transformer.transformSchema(originalSchema); } - public transformRequest(originalRequest: Request): Request { - return this.transformer.transformRequest(originalRequest); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/wrap/src/transforms/RenameRootFields.ts b/packages/wrap/src/transforms/RenameRootFields.ts index 5178f9fa516..bf3437948fb 100644 --- a/packages/wrap/src/transforms/RenameRootFields.ts +++ b/packages/wrap/src/transforms/RenameRootFields.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request } from '@graphql-tools/utils'; +import { Request } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import TransformRootFields from './TransformRootFields'; @@ -27,7 +29,11 @@ export default class RenameRootFields implements Transform { return this.transformer.transformSchema(originalSchema); } - public transformRequest(originalRequest: Request): Request { - return this.transformer.transformRequest(originalRequest); + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + transformationContext: Record + ): Request { + return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } } diff --git a/packages/wrap/src/transforms/RenameRootTypes.ts b/packages/wrap/src/transforms/RenameRootTypes.ts index 65c6946c6ed..a11c847154b 100644 --- a/packages/wrap/src/transforms/RenameRootTypes.ts +++ b/packages/wrap/src/transforms/RenameRootTypes.ts @@ -1,14 +1,8 @@ import { visit, GraphQLSchema, NamedTypeNode, Kind } from 'graphql'; -import { - Request, - ExecutionResult, - MapperKind, - Transform, - mapSchema, - renameType, - visitData, -} from '@graphql-tools/utils'; +import { Request, ExecutionResult, MapperKind, mapSchema, renameType, visitData } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; export default class RenameRootTypes implements Transform { private readonly renamer: (name: string) => string | undefined; @@ -36,7 +30,11 @@ export default class RenameRootTypes implements Transform { }); } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = visit(originalRequest.document, { [Kind.NAMED_TYPE]: (node: NamedTypeNode) => { const name = node.name.value; @@ -57,10 +55,14 @@ export default class RenameRootTypes implements Transform { }; } - public transformResult(result: ExecutionResult): ExecutionResult { + public transformResult( + originalResult: ExecutionResult, + _delegationContext: DelegationContext, + _transformationContext?: Record + ): ExecutionResult { return { - ...result, - data: visitData(result.data, object => { + ...originalResult, + data: visitData(originalResult.data, object => { const typeName = object?.__typename; if (typeName != null && typeName in this.map) { object.__typename = this.map[typeName]; diff --git a/packages/wrap/src/transforms/RenameTypes.ts b/packages/wrap/src/transforms/RenameTypes.ts index 401f4ba8be7..2abf18c56a6 100644 --- a/packages/wrap/src/transforms/RenameTypes.ts +++ b/packages/wrap/src/transforms/RenameTypes.ts @@ -9,7 +9,6 @@ import { } from 'graphql'; import { - Transform, Request, ExecutionResult, MapperKind, @@ -19,6 +18,8 @@ import { renameType, } from '@graphql-tools/utils'; +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + export default class RenameTypes implements Transform { private readonly renamer: (name: string) => string | undefined; private map: Record; @@ -60,7 +61,11 @@ export default class RenameTypes implements Transform { }); } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const document = visit(originalRequest.document, { [Kind.NAMED_TYPE]: (node: NamedTypeNode) => { const name = node.name.value; @@ -82,10 +87,14 @@ export default class RenameTypes implements Transform { }; } - public transformResult(result: ExecutionResult): ExecutionResult { + public transformResult( + originalResult: ExecutionResult, + _delegationContext: DelegationContext, + _transformationContext?: Record + ): ExecutionResult { return { - ...result, - data: visitData(result.data, object => { + ...originalResult, + data: visitData(originalResult.data, object => { const typeName = object?.__typename; if (typeName != null && typeName in this.map) { object.__typename = this.map[typeName]; diff --git a/packages/wrap/src/transforms/TransformCompositeFields.ts b/packages/wrap/src/transforms/TransformCompositeFields.ts index 56b4c782c04..488f346909b 100644 --- a/packages/wrap/src/transforms/TransformCompositeFields.ts +++ b/packages/wrap/src/transforms/TransformCompositeFields.ts @@ -11,7 +11,10 @@ import { FragmentDefinitionNode, } from 'graphql'; -import { Transform, Request, MapperKind, mapSchema, visitData, ExecutionResult } from '@graphql-tools/utils'; +import { Request, MapperKind, mapSchema, visitData, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + import { FieldTransformer, FieldNodeTransformer, DataTransformer, ErrorsTransformer } from '../types'; export default class TransformCompositeFields implements Transform { @@ -60,8 +63,8 @@ export default class TransformCompositeFields implements Transform { public transformRequest( originalRequest: Request, - _delegationContext?: Record, - transformationContext?: Record + _delegationContext: DelegationContext, + transformationContext: Record ): Request { const document = originalRequest.document; const fragments = Object.create(null); @@ -78,9 +81,9 @@ export default class TransformCompositeFields implements Transform { public transformResult( result: ExecutionResult, - _delegationContext?: Record, - transformationContext?: Record - ) { + _delegationContext: DelegationContext, + transformationContext: Record + ): ExecutionResult { if (this.dataTransformer != null) { result.data = visitData(result.data, value => this.dataTransformer(value, transformationContext)); } diff --git a/packages/wrap/src/transforms/TransformEnumValues.ts b/packages/wrap/src/transforms/TransformEnumValues.ts index 89478e3e227..d5392ca28ce 100644 --- a/packages/wrap/src/transforms/TransformEnumValues.ts +++ b/packages/wrap/src/transforms/TransformEnumValues.ts @@ -1,6 +1,8 @@ import { GraphQLSchema, GraphQLEnumValueConfig, ExecutionResult } from 'graphql'; -import { Transform, Request, MapperKind, mapSchema } from '@graphql-tools/utils'; +import { Request, MapperKind, mapSchema } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import { EnumValueTransformer, LeafValueTransformer } from '../types'; @@ -38,16 +40,16 @@ export default class TransformEnumValues implements Transform, - transformationContext?: MapLeafValuesTransformationContext + delegationContext: DelegationContext, + transformationContext: MapLeafValuesTransformationContext ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: MapLeafValuesTransformationContext + delegationContext: DelegationContext, + transformationContext: MapLeafValuesTransformationContext ) { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/TransformInputObjectFields.ts b/packages/wrap/src/transforms/TransformInputObjectFields.ts index c038115df45..ea10ccdde34 100644 --- a/packages/wrap/src/transforms/TransformInputObjectFields.ts +++ b/packages/wrap/src/transforms/TransformInputObjectFields.ts @@ -12,9 +12,11 @@ import { ObjectFieldNode, } from 'graphql'; -import { Transform, Request, MapperKind, mapSchema } from '@graphql-tools/utils'; +import { Request, MapperKind, mapSchema } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + import { InputFieldTransformer, InputFieldNodeTransformer, InputObjectNodeTransformer } from '../types'; -import { DelegationContext } from '@graphql-tools/delegate'; export default class TransformInputObjectFields implements Transform { private readonly inputFieldTransformer: InputFieldTransformer; @@ -55,7 +57,11 @@ export default class TransformInputObjectFields implements Transform { return this.transformedSchema; } - public transformRequest(originalRequest: Request, delegationContext?: Record): Request { + public transformRequest( + originalRequest: Request, + delegationContext: DelegationContext, + _transformationContextד: Record + ): Request { const fragments = Object.create(null); originalRequest.document.definitions .filter(def => def.kind === Kind.FRAGMENT_DEFINITION) @@ -68,8 +74,7 @@ export default class TransformInputObjectFields implements Transform { this.inputFieldNodeTransformer, this.inputObjectNodeTransformer, originalRequest, - // cast to DelegationContext as workaround to avoid breaking change in types until next major version - delegationContext as DelegationContext + delegationContext ); return { ...originalRequest, diff --git a/packages/wrap/src/transforms/TransformInterfaceFields.ts b/packages/wrap/src/transforms/TransformInterfaceFields.ts index 7c2976e25a3..a984eaa11dc 100644 --- a/packages/wrap/src/transforms/TransformInterfaceFields.ts +++ b/packages/wrap/src/transforms/TransformInterfaceFields.ts @@ -1,6 +1,9 @@ import { GraphQLSchema, isInterfaceType, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + import { FieldTransformer, FieldNodeTransformer } from '../types'; import TransformCompositeFields from './TransformCompositeFields'; @@ -35,16 +38,16 @@ export default class TransformInterfaceFields implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/TransformObjectFields.ts b/packages/wrap/src/transforms/TransformObjectFields.ts index bcf40c0fd90..1e9a68be5ce 100644 --- a/packages/wrap/src/transforms/TransformObjectFields.ts +++ b/packages/wrap/src/transforms/TransformObjectFields.ts @@ -1,6 +1,9 @@ import { GraphQLSchema, isObjectType, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; + import { FieldTransformer, FieldNodeTransformer } from '../types'; import TransformCompositeFields from './TransformCompositeFields'; @@ -35,16 +38,16 @@ export default class TransformObjectFields implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/TransformQuery.ts b/packages/wrap/src/transforms/TransformQuery.ts index 3ed51e534c9..febd6881c58 100644 --- a/packages/wrap/src/transforms/TransformQuery.ts +++ b/packages/wrap/src/transforms/TransformQuery.ts @@ -1,6 +1,8 @@ import { visit, Kind, SelectionSetNode, FragmentDefinitionNode, GraphQLError } from 'graphql'; -import { Transform, Request, ExecutionResult, relocatedError } from '@graphql-tools/utils'; +import { Request, ExecutionResult, relocatedError } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; export type QueryTransformer = ( selectionSet: SelectionSetNode, @@ -38,7 +40,11 @@ export default class TransformQuery implements Transform { this.fragments = fragments; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const pathLength = this.path.length; let index = 0; const document = visit(originalRequest.document, { @@ -71,7 +77,11 @@ export default class TransformQuery implements Transform { }; } - public transformResult(originalResult: ExecutionResult): ExecutionResult { + public transformResult( + originalResult: ExecutionResult, + _delegationContext: DelegationContext, + _transformationContext: Record + ): ExecutionResult { const data = this.transformData(originalResult.data); const errors = originalResult.errors; return { diff --git a/packages/wrap/src/transforms/TransformRootFields.ts b/packages/wrap/src/transforms/TransformRootFields.ts index ed14067e702..74c7f8be21d 100644 --- a/packages/wrap/src/transforms/TransformRootFields.ts +++ b/packages/wrap/src/transforms/TransformRootFields.ts @@ -1,10 +1,13 @@ import { GraphQLSchema, GraphQLFieldConfig } from 'graphql'; -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; -import TransformObjectFields from './TransformObjectFields'; import { RootFieldTransformer, FieldNodeTransformer } from '../types'; +import TransformObjectFields from './TransformObjectFields'; + export default class TransformRootFields implements Transform { private readonly rootFieldTransformer: RootFieldTransformer; private readonly fieldNodeTransformer: FieldNodeTransformer; @@ -47,16 +50,16 @@ export default class TransformRootFields implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/WrapFields.ts b/packages/wrap/src/transforms/WrapFields.ts index 7f1d4371c73..c85b2b7400a 100644 --- a/packages/wrap/src/transforms/WrapFields.ts +++ b/packages/wrap/src/transforms/WrapFields.ts @@ -11,7 +11,6 @@ import { } from 'graphql'; import { - Transform, Request, appendObjectFields, selectObjectFields, @@ -20,7 +19,7 @@ import { relocatedError, } from '@graphql-tools/utils'; -import { defaultMergedResolver } from '@graphql-tools/delegate'; +import { Transform, defaultMergedResolver, DelegationContext } from '@graphql-tools/delegate'; import MapFields from './MapFields'; @@ -138,8 +137,8 @@ export default class WrapFields implements Transform, - transformationContext?: WrapFieldsTransformationContext + delegationContext: DelegationContext, + transformationContext: WrapFieldsTransformationContext ): Request { transformationContext.nextIndex = 0; transformationContext.paths = Object.create(null); @@ -148,8 +147,8 @@ export default class WrapFields implements Transform, - transformationContext?: WrapFieldsTransformationContext + delegationContext: DelegationContext, + transformationContext: WrapFieldsTransformationContext ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/transforms/WrapQuery.ts b/packages/wrap/src/transforms/WrapQuery.ts index ebf62492d2b..04b7dbc84ba 100644 --- a/packages/wrap/src/transforms/WrapQuery.ts +++ b/packages/wrap/src/transforms/WrapQuery.ts @@ -1,6 +1,8 @@ import { FieldNode, visit, Kind, SelectionNode, SelectionSetNode } from 'graphql'; -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; export type QueryWrapper = (subtree: SelectionSetNode) => SelectionNode | SelectionSetNode; @@ -15,7 +17,11 @@ export default class WrapQuery implements Transform { this.extractor = extractor; } - public transformRequest(originalRequest: Request): Request { + public transformRequest( + originalRequest: Request, + _delegationContext: DelegationContext, + _transformationContext: Record + ): Request { const fieldPath: Array = []; const ourPath = JSON.stringify(this.path); const document = visit(originalRequest.document, { @@ -52,7 +58,11 @@ export default class WrapQuery implements Transform { }; } - public transformResult(originalResult: ExecutionResult): ExecutionResult { + public transformResult( + originalResult: ExecutionResult, + _delegationContext: DelegationContext, + _transformationContext: Record + ): ExecutionResult { const rootData = originalResult.data; if (rootData != null) { let data = rootData; diff --git a/packages/wrap/src/transforms/WrapType.ts b/packages/wrap/src/transforms/WrapType.ts index 1757b2daeee..0ca6c2af854 100644 --- a/packages/wrap/src/transforms/WrapType.ts +++ b/packages/wrap/src/transforms/WrapType.ts @@ -1,6 +1,8 @@ import { GraphQLSchema } from 'graphql'; -import { Transform, Request, ExecutionResult } from '@graphql-tools/utils'; +import { Request, ExecutionResult } from '@graphql-tools/utils'; + +import { Transform, DelegationContext } from '@graphql-tools/delegate'; import WrapFields from './WrapFields'; @@ -17,16 +19,16 @@ export default class WrapType implements Transform { public transformRequest( originalRequest: Request, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): Request { return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext); } public transformResult( originalResult: ExecutionResult, - delegationContext?: Record, - transformationContext?: Record + delegationContext: DelegationContext, + transformationContext: Record ): ExecutionResult { return this.transformer.transformResult(originalResult, delegationContext, transformationContext); } diff --git a/packages/wrap/src/types.ts b/packages/wrap/src/types.ts index 22a1200c88c..dd59d63c028 100644 --- a/packages/wrap/src/types.ts +++ b/packages/wrap/src/types.ts @@ -72,7 +72,7 @@ export type FieldNodeTransformer = ( export type LeafValueTransformer = (typeName: string, value: any) => any; -export type DataTransformer = (value: any, transformationContext?: Record) => any; +export type DataTransformer = (value: any, transformationContext: Record) => any; export type ObjectValueTransformerMap = Record; diff --git a/packages/wrap/src/wrapSchema.ts b/packages/wrap/src/wrapSchema.ts index f7aaf0f8dbc..b4846f8f4bb 100644 --- a/packages/wrap/src/wrapSchema.ts +++ b/packages/wrap/src/wrapSchema.ts @@ -6,9 +6,15 @@ import { GraphQLFieldResolver, } from 'graphql'; -import { Transform, MapperKind, mapSchema, applySchemaTransforms } from '@graphql-tools/utils'; +import { MapperKind, mapSchema } from '@graphql-tools/utils'; -import { SubschemaConfig, isSubschemaConfig, defaultMergedResolver } from '@graphql-tools/delegate'; +import { + SubschemaConfig, + Transform, + isSubschemaConfig, + defaultMergedResolver, + applySchemaTransforms, +} from '@graphql-tools/delegate'; import { generateProxyingResolvers } from './generateProxyingResolvers'; export function wrapSchema( diff --git a/website/docs/schema-wrapping.md b/website/docs/schema-wrapping.md index ea0196b14e8..1fa5c680c6b 100644 --- a/website/docs/schema-wrapping.md +++ b/website/docs/schema-wrapping.md @@ -14,7 +14,7 @@ Schema wrapping works by wrapping the original schema in a new 'gateway' schema interface Transform = { transformSchema?: (schema: GraphQLSchema) => GraphQLSchema; transformRequest?: (request: Request) => Request; - transformResult?: (result: Result) => Result; + transformResult?: (result: ExecutionResult) => ExecutionResult; }; ``` @@ -85,7 +85,7 @@ By the same reasoning, we also need a `transformResult` function, because any re interface Transform = { transformSchema?: (schema: GraphQLSchema) => GraphQLSchema; transformRequest?: (request: Request) => Request; - transformResult?: (result: Result) => Result; + transformResult?: (result: ExecutionResult) => ExecutionResult; }; type Request = { @@ -93,10 +93,6 @@ type Request = { variables: Record; extensions?: Record; }; - -type Result = ExecutionResult & { - extensions?: Record; -}; ``` ### wrapSchema