/
delegationBindings.ts
72 lines (61 loc) · 2.71 KB
/
delegationBindings.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { Transform } from '@graphql-tools/utils';
import { StitchingInfo, DelegationContext } from './types';
import ExpandAbstractTypes from './transforms/ExpandAbstractTypes';
import WrapConcreteTypes from './transforms/WrapConcreteTypes';
import FilterToSchema from './transforms/FilterToSchema';
import AddFragmentsByField from './transforms/AddFragmentsByField';
import AddSelectionSetsByField from './transforms/AddSelectionSetsByField';
import AddSelectionSetsByType from './transforms/AddSelectionSetsByType';
import AddTypenameToAbstract from './transforms/AddTypenameToAbstract';
import CheckResultAndHandleErrors from './transforms/CheckResultAndHandleErrors';
import AddArgumentsAsVariables from './transforms/AddArgumentsAsVariables';
export function defaultDelegationBinding(delegationContext: DelegationContext): Array<Transform> {
const {
subschema: schemaOrSubschemaConfig,
targetSchema,
fieldName,
args,
context,
info,
returnType,
transforms = [],
skipTypeMerging,
} = delegationContext;
const stitchingInfo: StitchingInfo = info?.schema.extensions?.stitchingInfo;
let transformedSchema = stitchingInfo?.transformedSchemas.get(schemaOrSubschemaConfig);
if (transformedSchema != null) {
delegationContext.transformedSchema = transformedSchema;
} else {
transformedSchema = delegationContext.transformedSchema;
}
let delegationTransforms: Array<Transform> = [
new CheckResultAndHandleErrors(info, fieldName, schemaOrSubschemaConfig, context, returnType, skipTypeMerging),
];
if (stitchingInfo != null) {
delegationTransforms = delegationTransforms.concat([
new AddSelectionSetsByField(info.schema, stitchingInfo.selectionSetsByField),
new AddSelectionSetsByType(info.schema, stitchingInfo.selectionSetsByType),
new WrapConcreteTypes(returnType, transformedSchema),
new ExpandAbstractTypes(info.schema, transformedSchema),
]);
} else if (info != null) {
delegationTransforms = delegationTransforms.concat([
new WrapConcreteTypes(returnType, transformedSchema),
new ExpandAbstractTypes(info.schema, transformedSchema),
]);
} else {
delegationTransforms.push(new WrapConcreteTypes(returnType, transformedSchema));
}
delegationTransforms = delegationTransforms.concat(transforms.slice().reverse());
if (stitchingInfo != null) {
delegationTransforms.push(new AddFragmentsByField(targetSchema, stitchingInfo.fragmentsByField));
}
if (args != null) {
delegationTransforms.push(new AddArgumentsAsVariables(targetSchema, args));
}
delegationTransforms = delegationTransforms.concat([
new FilterToSchema(targetSchema),
new AddTypenameToAbstract(targetSchema),
]);
return delegationTransforms;
}