Skip to content

Commit db440c2

Browse files
committed
refactor(transforms)
use delegationContext within delegation transforms remove fragment hints and transforms in favor of selection set hints and transforms prune fragment functions from utils package
1 parent b73947d commit db440c2

19 files changed

+117
-947
lines changed

packages/delegate/src/delegateToSchema.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
SubschemaConfig,
2424
ExecutionParams,
2525
Transform,
26+
StitchingInfo,
2627
} from './types';
2728

2829
import { isSubschemaConfig } from './Subschema';
@@ -136,6 +137,8 @@ export function delegateRequest({
136137
allTransforms = transforms;
137138
}
138139

140+
const stitchingInfo: StitchingInfo = info?.schema.extensions?.stitchingInfo;
141+
139142
const delegationContext = {
140143
subschema: subschemaOrSubschemaConfig,
141144
targetSchema,
@@ -147,7 +150,9 @@ export function delegateRequest({
147150
returnType:
148151
returnType ?? info?.returnType ?? getDelegationReturnType(targetSchema, targetOperation, targetFieldName),
149152
transforms: allTransforms,
150-
transformedSchema: transformedSchema ?? targetSchema,
153+
transformedSchema:
154+
transformedSchema ??
155+
(stitchingInfo ? stitchingInfo.transformedSchemas.get(subschemaOrSubschemaConfig) : targetSchema),
151156
skipTypeMerging,
152157
};
153158

packages/delegate/src/delegationBindings.ts

Lines changed: 14 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,71 +4,39 @@ import AddSelectionSets from './transforms/AddSelectionSets';
44
import ExpandAbstractTypes from './transforms/ExpandAbstractTypes';
55
import WrapConcreteTypes from './transforms/WrapConcreteTypes';
66
import FilterToSchema from './transforms/FilterToSchema';
7-
import AddFragmentsByField from './transforms/AddFragmentsByField';
87
import AddTypenameToAbstract from './transforms/AddTypenameToAbstract';
98
import CheckResultAndHandleErrors from './transforms/CheckResultAndHandleErrors';
109
import AddArgumentsAsVariables from './transforms/AddArgumentsAsVariables';
1110

1211
export function defaultDelegationBinding(delegationContext: DelegationContext): Array<Transform> {
13-
const {
14-
subschema: schemaOrSubschemaConfig,
15-
targetSchema,
16-
fieldName,
17-
args,
18-
context,
19-
info,
20-
returnType,
21-
transforms = [],
22-
skipTypeMerging,
23-
} = delegationContext;
24-
const stitchingInfo: StitchingInfo = info?.schema.extensions?.stitchingInfo;
12+
let delegationTransforms: Array<Transform> = [new CheckResultAndHandleErrors()];
2513

26-
let transformedSchema = stitchingInfo?.transformedSchemas.get(schemaOrSubschemaConfig);
27-
if (transformedSchema != null) {
28-
delegationContext.transformedSchema = transformedSchema;
29-
} else {
30-
transformedSchema = delegationContext.transformedSchema;
31-
}
32-
33-
let delegationTransforms: Array<Transform> = [
34-
new CheckResultAndHandleErrors(info, fieldName, schemaOrSubschemaConfig, context, returnType, skipTypeMerging),
35-
];
14+
const info = delegationContext.info;
15+
const stitchingInfo: StitchingInfo = info?.schema.extensions?.stitchingInfo;
3616

3717
if (stitchingInfo != null) {
3818
delegationTransforms = delegationTransforms.concat([
39-
new AddSelectionSets(
40-
info.schema,
41-
returnType,
42-
{},
43-
stitchingInfo.selectionSetsByField,
44-
stitchingInfo.dynamicSelectionSetsByField
45-
),
46-
new WrapConcreteTypes(returnType, transformedSchema),
47-
new ExpandAbstractTypes(info.schema, transformedSchema),
19+
new AddSelectionSets({}, stitchingInfo.selectionSetsByField, stitchingInfo.dynamicSelectionSetsByField),
20+
new WrapConcreteTypes(),
21+
new ExpandAbstractTypes(),
4822
]);
4923
} else if (info != null) {
50-
delegationTransforms = delegationTransforms.concat([
51-
new WrapConcreteTypes(returnType, transformedSchema),
52-
new ExpandAbstractTypes(info.schema, transformedSchema),
53-
]);
24+
delegationTransforms = delegationTransforms.concat([new WrapConcreteTypes(), new ExpandAbstractTypes()]);
5425
} else {
55-
delegationTransforms.push(new WrapConcreteTypes(returnType, transformedSchema));
26+
delegationTransforms.push(new WrapConcreteTypes());
5627
}
5728

58-
delegationTransforms = delegationTransforms.concat(transforms.slice().reverse());
59-
60-
if (stitchingInfo != null) {
61-
delegationTransforms.push(new AddFragmentsByField(targetSchema, stitchingInfo.fragmentsByField));
29+
const transforms = delegationContext.transforms;
30+
if (transforms != null) {
31+
delegationTransforms = delegationTransforms.concat(transforms.slice().reverse());
6232
}
6333

34+
const args = delegationContext.args;
6435
if (args != null) {
65-
delegationTransforms.push(new AddArgumentsAsVariables(targetSchema, args));
36+
delegationTransforms.push(new AddArgumentsAsVariables(args));
6637
}
6738

68-
delegationTransforms = delegationTransforms.concat([
69-
new FilterToSchema(targetSchema),
70-
new AddTypenameToAbstract(targetSchema),
71-
]);
39+
delegationTransforms = delegationTransforms.concat([new FilterToSchema(), new AddTypenameToAbstract()]);
7240

7341
return delegationTransforms;
7442
}

packages/delegate/src/transforms/AddArgumentsAsVariables.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ import { Request, serializeInputValue, updateArgument } from '@graphql-tools/uti
1717
import { Transform, DelegationContext } from '../types';
1818

1919
export default class AddArgumentsAsVariables implements Transform {
20-
private readonly targetSchema: GraphQLSchema;
2120
private readonly args: Record<string, any>;
2221

23-
constructor(targetSchema: GraphQLSchema, args: Record<string, any>) {
24-
this.targetSchema = targetSchema;
22+
constructor(args: Record<string, any>) {
2523
this.args = Object.entries(args).reduce(
2624
(prev, [key, val]) => ({
2725
...prev,
@@ -33,10 +31,10 @@ export default class AddArgumentsAsVariables implements Transform {
3331

3432
public transformRequest(
3533
originalRequest: Request,
36-
_delegationContext: DelegationContext,
34+
delegationContext: DelegationContext,
3735
_transformationContext: Record<string, any>
3836
): Request {
39-
const { document, variables } = addVariablesToRootField(this.targetSchema, originalRequest, this.args);
37+
const { document, variables } = addVariablesToRootField(delegationContext.targetSchema, originalRequest, this.args);
4038

4139
return {
4240
...originalRequest,

packages/delegate/src/transforms/AddFragmentsByField.ts

Lines changed: 0 additions & 76 deletions
This file was deleted.

packages/delegate/src/transforms/AddSelectionSets.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
import {
2-
GraphQLSchema,
3-
SelectionSetNode,
4-
TypeInfo,
5-
GraphQLOutputType,
6-
Kind,
7-
FieldNode,
8-
SelectionNode,
9-
print,
10-
} from 'graphql';
1+
import { SelectionSetNode, TypeInfo, Kind, FieldNode, SelectionNode, print } from 'graphql';
112

123
import { Request } from '@graphql-tools/utils';
134

@@ -20,13 +11,11 @@ export default class AddSelectionSets implements Transform {
2011
private readonly transformer: VisitSelectionSets;
2112

2213
constructor(
23-
sourceSchema: GraphQLSchema,
24-
initialType: GraphQLOutputType,
2514
selectionSetsByType: Record<string, SelectionSetNode>,
2615
selectionSetsByField: Record<string, Record<string, SelectionSetNode>>,
2716
dynamicSelectionSetsByField: Record<string, Record<string, Array<(node: FieldNode) => SelectionSetNode>>>
2817
) {
29-
this.transformer = new VisitSelectionSets(sourceSchema, initialType, (node, typeInfo) =>
18+
this.transformer = new VisitSelectionSets((node, typeInfo) =>
3019
visitSelectionSet(node, typeInfo, selectionSetsByType, selectionSetsByField, dynamicSelectionSetsByField)
3120
);
3221
}

packages/delegate/src/transforms/AddSelectionSetsByField.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

packages/delegate/src/transforms/AddSelectionSetsByType.ts

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)