@graphql-tools/wrap 8.4.21 → 8.5.0-alpha-b76ec274.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/cjs/generateProxyingResolvers.js +74 -0
  2. package/cjs/index.js +12 -0
  3. package/cjs/introspect.js +30 -0
  4. package/cjs/package.json +1 -0
  5. package/cjs/transforms/ExtractField.js +51 -0
  6. package/cjs/transforms/FilterInputObjectFields.js +16 -0
  7. package/cjs/transforms/FilterInterfaceFields.js +13 -0
  8. package/cjs/transforms/FilterObjectFieldDirectives.js +33 -0
  9. package/cjs/transforms/FilterObjectFields.js +13 -0
  10. package/cjs/transforms/FilterRootFields.js +18 -0
  11. package/cjs/transforms/FilterTypes.js +19 -0
  12. package/cjs/transforms/HoistField.js +176 -0
  13. package/cjs/transforms/MapFields.js +61 -0
  14. package/cjs/transforms/MapLeafValues.js +111 -0
  15. package/cjs/transforms/PruneSchema.js +12 -0
  16. package/cjs/transforms/RemoveObjectFieldDeprecations.js +25 -0
  17. package/cjs/transforms/RemoveObjectFieldDirectives.js +16 -0
  18. package/cjs/transforms/RemoveObjectFieldsWithDeprecation.js +19 -0
  19. package/cjs/transforms/RemoveObjectFieldsWithDirective.js +19 -0
  20. package/cjs/transforms/RenameInputObjectFields.js +57 -0
  21. package/cjs/transforms/RenameInterfaceFields.js +19 -0
  22. package/cjs/transforms/RenameObjectFieldArguments.js +72 -0
  23. package/cjs/transforms/RenameObjectFields.js +19 -0
  24. package/cjs/transforms/RenameRootFields.js +16 -0
  25. package/cjs/transforms/RenameRootTypes.js +57 -0
  26. package/cjs/transforms/RenameTypes.js +69 -0
  27. package/cjs/transforms/TransformCompositeFields.js +143 -0
  28. package/cjs/transforms/TransformEnumValues.js +55 -0
  29. package/cjs/transforms/TransformInputObjectFields.js +160 -0
  30. package/cjs/transforms/TransformInterfaceFields.js +35 -0
  31. package/cjs/transforms/TransformObjectFields.js +35 -0
  32. package/cjs/transforms/TransformQuery.js +89 -0
  33. package/cjs/transforms/TransformRootFields.js +41 -0
  34. package/cjs/transforms/WrapFields.js +220 -0
  35. package/cjs/transforms/WrapQuery.js +62 -0
  36. package/cjs/transforms/WrapType.js +19 -0
  37. package/cjs/transforms/index.js +71 -0
  38. package/cjs/types.js +2 -0
  39. package/cjs/wrapSchema.js +58 -0
  40. package/esm/generateProxyingResolvers.js +69 -0
  41. package/esm/index.js +5 -0
  42. package/esm/introspect.js +26 -0
  43. package/esm/transforms/ExtractField.js +48 -0
  44. package/esm/transforms/FilterInputObjectFields.js +12 -0
  45. package/esm/transforms/FilterInterfaceFields.js +9 -0
  46. package/esm/transforms/FilterObjectFieldDirectives.js +29 -0
  47. package/esm/transforms/FilterObjectFields.js +9 -0
  48. package/esm/transforms/FilterRootFields.js +14 -0
  49. package/esm/transforms/FilterTypes.js +16 -0
  50. package/esm/transforms/HoistField.js +168 -0
  51. package/esm/transforms/MapFields.js +57 -0
  52. package/esm/transforms/MapLeafValues.js +108 -0
  53. package/esm/transforms/PruneSchema.js +9 -0
  54. package/esm/transforms/RemoveObjectFieldDeprecations.js +21 -0
  55. package/esm/transforms/RemoveObjectFieldDirectives.js +12 -0
  56. package/esm/transforms/RemoveObjectFieldsWithDeprecation.js +15 -0
  57. package/esm/transforms/RemoveObjectFieldsWithDirective.js +15 -0
  58. package/esm/transforms/RenameInputObjectFields.js +53 -0
  59. package/esm/transforms/RenameInterfaceFields.js +15 -0
  60. package/esm/transforms/RenameObjectFieldArguments.js +68 -0
  61. package/esm/transforms/RenameObjectFields.js +15 -0
  62. package/esm/transforms/RenameRootFields.js +12 -0
  63. package/esm/transforms/RenameRootTypes.js +54 -0
  64. package/esm/transforms/RenameTypes.js +66 -0
  65. package/esm/transforms/TransformCompositeFields.js +140 -0
  66. package/esm/transforms/TransformEnumValues.js +51 -0
  67. package/esm/transforms/TransformInputObjectFields.js +157 -0
  68. package/esm/transforms/TransformInterfaceFields.js +31 -0
  69. package/esm/transforms/TransformObjectFields.js +31 -0
  70. package/esm/transforms/TransformQuery.js +86 -0
  71. package/esm/transforms/TransformRootFields.js +37 -0
  72. package/esm/transforms/WrapFields.js +214 -0
  73. package/esm/transforms/WrapQuery.js +59 -0
  74. package/esm/transforms/WrapType.js +15 -0
  75. package/esm/transforms/index.js +33 -0
  76. package/esm/types.js +1 -0
  77. package/esm/wrapSchema.js +54 -0
  78. package/package.json +34 -13
  79. package/{generateProxyingResolvers.d.ts → typings/generateProxyingResolvers.d.ts} +0 -0
  80. package/typings/index.d.ts +5 -0
  81. package/{introspect.d.ts → typings/introspect.d.ts} +0 -0
  82. package/{transforms → typings/transforms}/ExtractField.d.ts +0 -0
  83. package/{transforms → typings/transforms}/FilterInputObjectFields.d.ts +1 -1
  84. package/{transforms → typings/transforms}/FilterInterfaceFields.d.ts +0 -0
  85. package/{transforms → typings/transforms}/FilterObjectFieldDirectives.d.ts +0 -0
  86. package/{transforms → typings/transforms}/FilterObjectFields.d.ts +0 -0
  87. package/{transforms → typings/transforms}/FilterRootFields.d.ts +0 -0
  88. package/{transforms → typings/transforms}/FilterTypes.d.ts +0 -0
  89. package/{transforms → typings/transforms}/HoistField.d.ts +0 -0
  90. package/{transforms → typings/transforms}/MapFields.d.ts +1 -1
  91. package/{transforms → typings/transforms}/MapLeafValues.d.ts +1 -1
  92. package/{transforms → typings/transforms}/PruneSchema.d.ts +0 -0
  93. package/{transforms → typings/transforms}/RemoveObjectFieldDeprecations.d.ts +0 -0
  94. package/{transforms → typings/transforms}/RemoveObjectFieldDirectives.d.ts +0 -0
  95. package/{transforms → typings/transforms}/RemoveObjectFieldsWithDeprecation.d.ts +0 -0
  96. package/{transforms → typings/transforms}/RemoveObjectFieldsWithDirective.d.ts +0 -0
  97. package/{transforms → typings/transforms}/RenameInputObjectFields.d.ts +0 -0
  98. package/{transforms → typings/transforms}/RenameInterfaceFields.d.ts +0 -0
  99. package/{transforms → typings/transforms}/RenameObjectFieldArguments.d.ts +0 -0
  100. package/{transforms → typings/transforms}/RenameObjectFields.d.ts +0 -0
  101. package/{transforms → typings/transforms}/RenameRootFields.d.ts +0 -0
  102. package/{transforms → typings/transforms}/RenameRootTypes.d.ts +0 -0
  103. package/{transforms → typings/transforms}/RenameTypes.d.ts +0 -0
  104. package/{transforms → typings/transforms}/TransformCompositeFields.d.ts +1 -1
  105. package/{transforms → typings/transforms}/TransformEnumValues.d.ts +2 -2
  106. package/{transforms → typings/transforms}/TransformInputObjectFields.d.ts +1 -1
  107. package/{transforms → typings/transforms}/TransformInterfaceFields.d.ts +1 -1
  108. package/{transforms → typings/transforms}/TransformObjectFields.d.ts +1 -1
  109. package/{transforms → typings/transforms}/TransformQuery.d.ts +0 -0
  110. package/{transforms → typings/transforms}/TransformRootFields.d.ts +1 -1
  111. package/{transforms → typings/transforms}/WrapFields.d.ts +0 -0
  112. package/{transforms → typings/transforms}/WrapQuery.d.ts +0 -0
  113. package/{transforms → typings/transforms}/WrapType.d.ts +0 -0
  114. package/typings/transforms/index.d.ts +32 -0
  115. package/{types.d.ts → typings/types.d.ts} +0 -0
  116. package/{wrapSchema.d.ts → typings/wrapSchema.d.ts} +0 -0
  117. package/README.md +0 -5
  118. package/index.d.ts +0 -5
  119. package/index.js +0 -1806
  120. package/index.mjs +0 -1767
  121. package/transforms/index.d.ts +0 -32
@@ -0,0 +1,108 @@
1
+ import { visit, Kind, TypeInfo, visitWithTypeInfo, valueFromAST, isLeafType, } from 'graphql';
2
+ import { visitResult, updateArgument, transformInputValue, createVariableNameGenerator, } from '@graphql-tools/utils';
3
+ export default class MapLeafValues {
4
+ constructor(inputValueTransformer, outputValueTransformer) {
5
+ this.inputValueTransformer = inputValueTransformer;
6
+ this.outputValueTransformer = outputValueTransformer;
7
+ this.resultVisitorMap = Object.create(null);
8
+ }
9
+ _getTypeInfo() {
10
+ const typeInfo = this.typeInfo;
11
+ if (typeInfo === undefined) {
12
+ throw new Error(`The MapLeafValues transform's "transformRequest" and "transformResult" methods cannot be used without first calling "transformSchema".`);
13
+ }
14
+ return typeInfo;
15
+ }
16
+ _getOriginalWrappingSchema() {
17
+ const originalWrappingSchema = this.originalWrappingSchema;
18
+ if (originalWrappingSchema === undefined) {
19
+ throw new Error(`The MapLeafValues transform's "transformRequest" and "transformResult" methods cannot be used without first calling "transformSchema".`);
20
+ }
21
+ return originalWrappingSchema;
22
+ }
23
+ transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
24
+ this.originalWrappingSchema = originalWrappingSchema;
25
+ const typeMap = originalWrappingSchema.getTypeMap();
26
+ for (const typeName in typeMap) {
27
+ const type = typeMap[typeName];
28
+ if (!typeName.startsWith('__')) {
29
+ if (isLeafType(type)) {
30
+ this.resultVisitorMap[typeName] = (value) => this.outputValueTransformer(typeName, value);
31
+ }
32
+ }
33
+ }
34
+ this.typeInfo = new TypeInfo(originalWrappingSchema);
35
+ return originalWrappingSchema;
36
+ }
37
+ transformRequest(originalRequest, _delegationContext, transformationContext) {
38
+ var _a;
39
+ const document = originalRequest.document;
40
+ const variableValues = (_a = originalRequest.variables) !== null && _a !== void 0 ? _a : {};
41
+ const operations = document.definitions.filter(def => def.kind === Kind.OPERATION_DEFINITION);
42
+ const fragments = document.definitions.filter(def => def.kind === Kind.FRAGMENT_DEFINITION);
43
+ const newOperations = this.transformOperations(operations, variableValues);
44
+ const transformedRequest = {
45
+ ...originalRequest,
46
+ document: {
47
+ ...document,
48
+ definitions: [...newOperations, ...fragments],
49
+ },
50
+ variables: variableValues,
51
+ };
52
+ transformationContext.transformedRequest = transformedRequest;
53
+ return transformedRequest;
54
+ }
55
+ transformResult(originalResult, _delegationContext, transformationContext) {
56
+ return visitResult(originalResult, transformationContext.transformedRequest, this._getOriginalWrappingSchema(), this.resultVisitorMap);
57
+ }
58
+ transformOperations(operations, variableValues) {
59
+ return operations.map((operation) => {
60
+ var _a;
61
+ const variableDefinitionMap = ((_a = operation.variableDefinitions) !== null && _a !== void 0 ? _a : []).reduce((prev, def) => ({
62
+ ...prev,
63
+ [def.variable.name.value]: def,
64
+ }), {});
65
+ const newOperation = visit(operation, visitWithTypeInfo(this._getTypeInfo(), {
66
+ [Kind.FIELD]: node => this.transformFieldNode(node, variableDefinitionMap, variableValues),
67
+ }));
68
+ return {
69
+ ...newOperation,
70
+ variableDefinitions: Object.values(variableDefinitionMap),
71
+ };
72
+ });
73
+ }
74
+ transformFieldNode(field, variableDefinitionMap, variableValues) {
75
+ const targetField = this._getTypeInfo().getFieldDef();
76
+ if (!targetField) {
77
+ return;
78
+ }
79
+ const generateVariableName = createVariableNameGenerator(variableDefinitionMap);
80
+ if (!targetField.name.startsWith('__')) {
81
+ const argumentNodes = field.arguments;
82
+ if (argumentNodes != null) {
83
+ const argumentNodeMap = argumentNodes.reduce((prev, argument) => ({
84
+ ...prev,
85
+ [argument.name.value]: argument,
86
+ }), Object.create(null));
87
+ for (const argument of targetField.args) {
88
+ const argName = argument.name;
89
+ const argType = argument.type;
90
+ const argumentNode = argumentNodeMap[argName];
91
+ const argValue = argumentNode === null || argumentNode === void 0 ? void 0 : argumentNode.value;
92
+ let value;
93
+ if (argValue != null) {
94
+ value = valueFromAST(argValue, argType, variableValues);
95
+ }
96
+ updateArgument(argumentNodeMap, variableDefinitionMap, variableValues, argName, generateVariableName(argName), argType, transformInputValue(argType, value, (t, v) => {
97
+ const newValue = this.inputValueTransformer(t.name, v);
98
+ return newValue === undefined ? v : newValue;
99
+ }));
100
+ }
101
+ return {
102
+ ...field,
103
+ arguments: Object.values(argumentNodeMap),
104
+ };
105
+ }
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,9 @@
1
+ import { pruneSchema } from '@graphql-tools/utils';
2
+ export default class PruneTypes {
3
+ constructor(options = {}) {
4
+ this.options = options;
5
+ }
6
+ transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
7
+ return pruneSchema(originalWrappingSchema, this.options);
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ import { valueMatchesCriteria } from '@graphql-tools/utils';
2
+ import FilterObjectFieldDirectives from './FilterObjectFieldDirectives.js';
3
+ import TransformObjectFields from './TransformObjectFields.js';
4
+ export default class RemoveObjectFieldDeprecations {
5
+ constructor(reason) {
6
+ const args = { reason };
7
+ this.removeDirectives = new FilterObjectFieldDirectives((dirName, dirValue) => {
8
+ return !(dirName === 'deprecated' && valueMatchesCriteria(dirValue, args));
9
+ });
10
+ this.removeDeprecations = new TransformObjectFields((_typeName, _fieldName, fieldConfig) => {
11
+ if (fieldConfig.deprecationReason && valueMatchesCriteria(fieldConfig.deprecationReason, reason)) {
12
+ fieldConfig = { ...fieldConfig };
13
+ delete fieldConfig.deprecationReason;
14
+ }
15
+ return fieldConfig;
16
+ });
17
+ }
18
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
19
+ return this.removeDeprecations.transformSchema(this.removeDirectives.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema), subschemaConfig, transformedSchema);
20
+ }
21
+ }
@@ -0,0 +1,12 @@
1
+ import { valueMatchesCriteria } from '@graphql-tools/utils';
2
+ import FilterObjectFieldDirectives from './FilterObjectFieldDirectives.js';
3
+ export default class RemoveObjectFieldDirectives {
4
+ constructor(directiveName, args = {}) {
5
+ this.transformer = new FilterObjectFieldDirectives((dirName, dirValue) => {
6
+ return !(valueMatchesCriteria(dirName, directiveName) && valueMatchesCriteria(dirValue, args));
7
+ });
8
+ }
9
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
10
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
11
+ }
12
+ }
@@ -0,0 +1,15 @@
1
+ import { valueMatchesCriteria } from '@graphql-tools/utils';
2
+ import FilterObjectFields from './FilterObjectFields.js';
3
+ export default class RemoveObjectFieldsWithDeprecation {
4
+ constructor(reason) {
5
+ this.transformer = new FilterObjectFields((_typeName, _fieldName, fieldConfig) => {
6
+ if (fieldConfig.deprecationReason) {
7
+ return !valueMatchesCriteria(fieldConfig.deprecationReason, reason);
8
+ }
9
+ return true;
10
+ });
11
+ }
12
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
13
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ import { getDirectives, valueMatchesCriteria } from '@graphql-tools/utils';
2
+ import FilterObjectFields from './FilterObjectFields.js';
3
+ export default class RemoveObjectFieldsWithDirective {
4
+ constructor(directiveName, args = {}) {
5
+ this.directiveName = directiveName;
6
+ this.args = args;
7
+ }
8
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
9
+ const transformer = new FilterObjectFields((_typeName, _fieldName, fieldConfig) => {
10
+ const directives = getDirectives(originalWrappingSchema, fieldConfig);
11
+ return !directives.some(directive => valueMatchesCriteria(directive.name, this.directiveName) && valueMatchesCriteria(directive.args, this.args));
12
+ });
13
+ return transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
14
+ }
15
+ }
@@ -0,0 +1,53 @@
1
+ import { mapSchema, MapperKind } from '@graphql-tools/utils';
2
+ import TransformInputObjectFields from './TransformInputObjectFields.js';
3
+ export default class RenameInputObjectFields {
4
+ constructor(renamer) {
5
+ this.renamer = renamer;
6
+ this.transformer = new TransformInputObjectFields((typeName, inputFieldName, inputFieldConfig) => {
7
+ const newName = renamer(typeName, inputFieldName, inputFieldConfig);
8
+ if (newName !== undefined && newName !== inputFieldName) {
9
+ const value = renamer(typeName, inputFieldName, inputFieldConfig);
10
+ if (value != null) {
11
+ return [value, inputFieldConfig];
12
+ }
13
+ }
14
+ }, (typeName, inputFieldName, inputFieldNode) => {
15
+ if (!(typeName in this.reverseMap)) {
16
+ return inputFieldNode;
17
+ }
18
+ const inputFieldNameMap = this.reverseMap[typeName];
19
+ if (!(inputFieldName in inputFieldNameMap)) {
20
+ return inputFieldNode;
21
+ }
22
+ return {
23
+ ...inputFieldNode,
24
+ name: {
25
+ ...inputFieldNode.name,
26
+ value: inputFieldNameMap[inputFieldName],
27
+ },
28
+ };
29
+ });
30
+ this.reverseMap = Object.create(null);
31
+ }
32
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
33
+ mapSchema(originalWrappingSchema, {
34
+ [MapperKind.INPUT_OBJECT_FIELD]: (inputFieldConfig, fieldName, typeName) => {
35
+ const newName = this.renamer(typeName, fieldName, inputFieldConfig);
36
+ if (newName !== undefined && newName !== fieldName) {
37
+ if (this.reverseMap[typeName] == null) {
38
+ this.reverseMap[typeName] = Object.create(null);
39
+ }
40
+ this.reverseMap[typeName][newName] = fieldName;
41
+ }
42
+ return undefined;
43
+ },
44
+ [MapperKind.ROOT_OBJECT]() {
45
+ return undefined;
46
+ },
47
+ });
48
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
49
+ }
50
+ transformRequest(originalRequest, delegationContext, transformationContext) {
51
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
52
+ }
53
+ }
@@ -0,0 +1,15 @@
1
+ import TransformInterfaceFields from './TransformInterfaceFields.js';
2
+ export default class RenameInterfaceFields {
3
+ constructor(renamer) {
4
+ this.transformer = new TransformInterfaceFields((typeName, fieldName, fieldConfig) => [
5
+ renamer(typeName, fieldName, fieldConfig),
6
+ fieldConfig,
7
+ ]);
8
+ }
9
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
10
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
11
+ }
12
+ transformRequest(originalRequest, delegationContext, transformationContext) {
13
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
14
+ }
15
+ }
@@ -0,0 +1,68 @@
1
+ import { mapSchema, MapperKind } from '@graphql-tools/utils';
2
+ import TransformObjectFields from './TransformObjectFields.js';
3
+ export default class RenameObjectFieldArguments {
4
+ constructor(renamer) {
5
+ this.renamer = renamer;
6
+ this.transformer = new TransformObjectFields((typeName, fieldName, fieldConfig) => {
7
+ const argsConfig = Object.fromEntries(Object.entries(fieldConfig.args || []).map(([argName, conf]) => {
8
+ const newName = renamer(typeName, fieldName, argName);
9
+ if (newName !== undefined && newName !== argName) {
10
+ if (newName != null) {
11
+ return [newName, conf];
12
+ }
13
+ }
14
+ return [argName, conf];
15
+ }));
16
+ return [fieldName, { ...fieldConfig, args: argsConfig }];
17
+ }, (typeName, fieldName, inputFieldNode) => {
18
+ if (!(typeName in this.reverseMap)) {
19
+ return inputFieldNode;
20
+ }
21
+ if (!(fieldName in this.reverseMap[typeName])) {
22
+ return inputFieldNode;
23
+ }
24
+ const fieldNameMap = this.reverseMap[typeName][fieldName];
25
+ return {
26
+ ...inputFieldNode,
27
+ arguments: (inputFieldNode.arguments || []).map(argNode => {
28
+ return argNode.name.value in fieldNameMap
29
+ ? {
30
+ ...argNode,
31
+ name: {
32
+ ...argNode.name,
33
+ value: fieldNameMap[argNode.name.value],
34
+ },
35
+ }
36
+ : argNode;
37
+ }),
38
+ };
39
+ });
40
+ this.reverseMap = Object.create(null);
41
+ }
42
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
43
+ mapSchema(originalWrappingSchema, {
44
+ [MapperKind.OBJECT_FIELD]: (fieldConfig, fieldName, typeName) => {
45
+ Object.entries(fieldConfig.args || {}).forEach(([argName]) => {
46
+ const newName = this.renamer(typeName, fieldName, argName);
47
+ if (newName !== undefined && newName !== fieldName) {
48
+ if (this.reverseMap[typeName] == null) {
49
+ this.reverseMap[typeName] = Object.create(null);
50
+ }
51
+ if (this.reverseMap[typeName][fieldName] == null) {
52
+ this.reverseMap[typeName][fieldName] = Object.create(null);
53
+ }
54
+ this.reverseMap[typeName][fieldName][newName] = argName;
55
+ }
56
+ });
57
+ return undefined;
58
+ },
59
+ [MapperKind.ROOT_OBJECT]() {
60
+ return undefined;
61
+ },
62
+ });
63
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
64
+ }
65
+ transformRequest(originalRequest, delegationContext, transformationContext) {
66
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
67
+ }
68
+ }
@@ -0,0 +1,15 @@
1
+ import TransformObjectFields from './TransformObjectFields.js';
2
+ export default class RenameObjectFields {
3
+ constructor(renamer) {
4
+ this.transformer = new TransformObjectFields((typeName, fieldName, fieldConfig) => [
5
+ renamer(typeName, fieldName, fieldConfig),
6
+ fieldConfig,
7
+ ]);
8
+ }
9
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
10
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
11
+ }
12
+ transformRequest(originalRequest, delegationContext, transformationContext) {
13
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ import TransformRootFields from './TransformRootFields.js';
2
+ export default class RenameRootFields {
3
+ constructor(renamer) {
4
+ this.transformer = new TransformRootFields((operation, fieldName, fieldConfig) => [renamer(operation, fieldName, fieldConfig), fieldConfig]);
5
+ }
6
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
7
+ return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
8
+ }
9
+ transformRequest(originalRequest, delegationContext, transformationContext) {
10
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
11
+ }
12
+ }
@@ -0,0 +1,54 @@
1
+ import { visit, Kind } from 'graphql';
2
+ import { MapperKind, mapSchema, renameType, visitData } from '@graphql-tools/utils';
3
+ export default class RenameRootTypes {
4
+ constructor(renamer) {
5
+ this.renamer = renamer;
6
+ this.map = Object.create(null);
7
+ this.reverseMap = Object.create(null);
8
+ }
9
+ transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
10
+ return mapSchema(originalWrappingSchema, {
11
+ [MapperKind.ROOT_OBJECT]: type => {
12
+ const oldName = type.name;
13
+ const newName = this.renamer(oldName);
14
+ if (newName !== undefined && newName !== oldName) {
15
+ this.map[oldName] = newName;
16
+ this.reverseMap[newName] = oldName;
17
+ return renameType(type, newName);
18
+ }
19
+ },
20
+ });
21
+ }
22
+ transformRequest(originalRequest, _delegationContext, _transformationContext) {
23
+ const document = visit(originalRequest.document, {
24
+ [Kind.NAMED_TYPE]: (node) => {
25
+ const name = node.name.value;
26
+ if (name in this.reverseMap) {
27
+ return {
28
+ ...node,
29
+ name: {
30
+ kind: Kind.NAME,
31
+ value: this.reverseMap[name],
32
+ },
33
+ };
34
+ }
35
+ },
36
+ });
37
+ return {
38
+ ...originalRequest,
39
+ document,
40
+ };
41
+ }
42
+ transformResult(originalResult, _delegationContext, _transformationContext) {
43
+ return {
44
+ ...originalResult,
45
+ data: visitData(originalResult.data, object => {
46
+ const typeName = object === null || object === void 0 ? void 0 : object.__typename;
47
+ if (typeName != null && typeName in this.map) {
48
+ object.__typename = this.map[typeName];
49
+ }
50
+ return object;
51
+ }),
52
+ };
53
+ }
54
+ }
@@ -0,0 +1,66 @@
1
+ import { Kind, isScalarType, isSpecifiedScalarType, visit, } from 'graphql';
2
+ import { MapperKind, mapSchema, visitData, renameType, } from '@graphql-tools/utils';
3
+ export default class RenameTypes {
4
+ constructor(renamer, options) {
5
+ this.renamer = renamer;
6
+ this.map = Object.create(null);
7
+ this.reverseMap = Object.create(null);
8
+ const { renameBuiltins = false, renameScalars = true } = options != null ? options : {};
9
+ this.renameBuiltins = renameBuiltins;
10
+ this.renameScalars = renameScalars;
11
+ }
12
+ transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
13
+ return mapSchema(originalWrappingSchema, {
14
+ [MapperKind.TYPE]: (type) => {
15
+ if (isSpecifiedScalarType(type) && !this.renameBuiltins) {
16
+ return undefined;
17
+ }
18
+ if (isScalarType(type) && !this.renameScalars) {
19
+ return undefined;
20
+ }
21
+ const oldName = type.name;
22
+ const newName = this.renamer(oldName);
23
+ if (newName !== undefined && newName !== oldName) {
24
+ this.map[oldName] = newName;
25
+ this.reverseMap[newName] = oldName;
26
+ return renameType(type, newName);
27
+ }
28
+ },
29
+ [MapperKind.ROOT_OBJECT]() {
30
+ return undefined;
31
+ },
32
+ });
33
+ }
34
+ transformRequest(originalRequest, _delegationContext, _transformationContext) {
35
+ const document = visit(originalRequest.document, {
36
+ [Kind.NAMED_TYPE]: (node) => {
37
+ const name = node.name.value;
38
+ if (name in this.reverseMap) {
39
+ return {
40
+ ...node,
41
+ name: {
42
+ kind: Kind.NAME,
43
+ value: this.reverseMap[name],
44
+ },
45
+ };
46
+ }
47
+ },
48
+ });
49
+ return {
50
+ ...originalRequest,
51
+ document,
52
+ };
53
+ }
54
+ transformResult(originalResult, _delegationContext, _transformationContext) {
55
+ return {
56
+ ...originalResult,
57
+ data: visitData(originalResult.data, object => {
58
+ const typeName = object === null || object === void 0 ? void 0 : object.__typename;
59
+ if (typeName != null && typeName in this.map) {
60
+ object.__typename = this.map[typeName];
61
+ }
62
+ return object;
63
+ }),
64
+ };
65
+ }
66
+ }
@@ -0,0 +1,140 @@
1
+ import { TypeInfo, visit, visitWithTypeInfo, Kind, } from 'graphql';
2
+ import { MapperKind, mapSchema, visitData } from '@graphql-tools/utils';
3
+ export default class TransformCompositeFields {
4
+ constructor(fieldTransformer, fieldNodeTransformer, dataTransformer, errorsTransformer) {
5
+ this.fieldTransformer = fieldTransformer;
6
+ this.fieldNodeTransformer = fieldNodeTransformer;
7
+ this.dataTransformer = dataTransformer;
8
+ this.errorsTransformer = errorsTransformer;
9
+ this.mapping = {};
10
+ }
11
+ _getTypeInfo() {
12
+ const typeInfo = this.typeInfo;
13
+ if (typeInfo === undefined) {
14
+ throw new Error(`The TransformCompositeFields transform's "transformRequest" and "transformResult" methods cannot be used without first calling "transformSchema".`);
15
+ }
16
+ return typeInfo;
17
+ }
18
+ transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
19
+ var _a;
20
+ this.transformedSchema = mapSchema(originalWrappingSchema, {
21
+ [MapperKind.COMPOSITE_FIELD]: (fieldConfig, fieldName, typeName) => {
22
+ const transformedField = this.fieldTransformer(typeName, fieldName, fieldConfig);
23
+ if (Array.isArray(transformedField)) {
24
+ const newFieldName = transformedField[0];
25
+ if (newFieldName !== fieldName) {
26
+ if (!(typeName in this.mapping)) {
27
+ this.mapping[typeName] = {};
28
+ }
29
+ this.mapping[typeName][newFieldName] = fieldName;
30
+ }
31
+ }
32
+ return transformedField;
33
+ },
34
+ });
35
+ this.typeInfo = new TypeInfo(this.transformedSchema);
36
+ this.subscriptionTypeName = (_a = originalWrappingSchema.getSubscriptionType()) === null || _a === void 0 ? void 0 : _a.name;
37
+ return this.transformedSchema;
38
+ }
39
+ transformRequest(originalRequest, _delegationContext, transformationContext) {
40
+ const document = originalRequest.document;
41
+ return {
42
+ ...originalRequest,
43
+ document: this.transformDocument(document, transformationContext),
44
+ };
45
+ }
46
+ transformResult(result, _delegationContext, transformationContext) {
47
+ const dataTransformer = this.dataTransformer;
48
+ if (dataTransformer != null) {
49
+ result.data = visitData(result.data, value => dataTransformer(value, transformationContext));
50
+ }
51
+ if (this.errorsTransformer != null && Array.isArray(result.errors)) {
52
+ result.errors = this.errorsTransformer(result.errors, transformationContext);
53
+ }
54
+ return result;
55
+ }
56
+ transformDocument(document, transformationContext) {
57
+ const fragments = Object.create(null);
58
+ for (const def of document.definitions) {
59
+ if (def.kind === Kind.FRAGMENT_DEFINITION) {
60
+ fragments[def.name.value] = def;
61
+ }
62
+ }
63
+ return visit(document, visitWithTypeInfo(this._getTypeInfo(), {
64
+ [Kind.SELECTION_SET]: {
65
+ leave: node => this.transformSelectionSet(node, this._getTypeInfo(), fragments, transformationContext),
66
+ },
67
+ }));
68
+ }
69
+ transformSelectionSet(node, typeInfo, fragments, transformationContext) {
70
+ var _a, _b;
71
+ const parentType = typeInfo.getParentType();
72
+ if (parentType == null) {
73
+ return undefined;
74
+ }
75
+ const parentTypeName = parentType.name;
76
+ let newSelections = [];
77
+ for (const selection of node.selections) {
78
+ if (selection.kind !== Kind.FIELD) {
79
+ newSelections.push(selection);
80
+ continue;
81
+ }
82
+ const newName = selection.name.value;
83
+ // See https://github.com/ardatan/graphql-tools/issues/2282
84
+ if ((this.dataTransformer != null || this.errorsTransformer != null) &&
85
+ (this.subscriptionTypeName == null || parentTypeName !== this.subscriptionTypeName)) {
86
+ newSelections.push({
87
+ kind: Kind.FIELD,
88
+ name: {
89
+ kind: Kind.NAME,
90
+ value: '__typename',
91
+ },
92
+ });
93
+ }
94
+ let transformedSelection;
95
+ if (this.fieldNodeTransformer == null) {
96
+ transformedSelection = selection;
97
+ }
98
+ else {
99
+ transformedSelection = this.fieldNodeTransformer(parentTypeName, newName, selection, fragments, transformationContext);
100
+ transformedSelection = transformedSelection === undefined ? selection : transformedSelection;
101
+ }
102
+ if (transformedSelection == null) {
103
+ continue;
104
+ }
105
+ else if (Array.isArray(transformedSelection)) {
106
+ newSelections = newSelections.concat(transformedSelection);
107
+ continue;
108
+ }
109
+ else if (transformedSelection.kind !== Kind.FIELD) {
110
+ newSelections.push(transformedSelection);
111
+ continue;
112
+ }
113
+ const typeMapping = this.mapping[parentTypeName];
114
+ if (typeMapping == null) {
115
+ newSelections.push(transformedSelection);
116
+ continue;
117
+ }
118
+ const oldName = this.mapping[parentTypeName][newName];
119
+ if (oldName == null) {
120
+ newSelections.push(transformedSelection);
121
+ continue;
122
+ }
123
+ newSelections.push({
124
+ ...transformedSelection,
125
+ name: {
126
+ kind: Kind.NAME,
127
+ value: oldName,
128
+ },
129
+ alias: {
130
+ kind: Kind.NAME,
131
+ value: (_b = (_a = transformedSelection.alias) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : newName,
132
+ },
133
+ });
134
+ }
135
+ return {
136
+ ...node,
137
+ selections: newSelections,
138
+ };
139
+ }
140
+ }
@@ -0,0 +1,51 @@
1
+ import { MapperKind, mapSchema } from '@graphql-tools/utils';
2
+ import MapLeafValues from './MapLeafValues.js';
3
+ export default class TransformEnumValues {
4
+ constructor(enumValueTransformer, inputValueTransformer, outputValueTransformer) {
5
+ this.enumValueTransformer = enumValueTransformer;
6
+ this.mapping = Object.create(null);
7
+ this.reverseMapping = Object.create(null);
8
+ this.transformer = new MapLeafValues(generateValueTransformer(inputValueTransformer, this.reverseMapping), generateValueTransformer(outputValueTransformer, this.mapping));
9
+ }
10
+ transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
11
+ const mappingSchema = this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
12
+ this.transformedSchema = mapSchema(mappingSchema, {
13
+ [MapperKind.ENUM_VALUE]: (valueConfig, typeName, _schema, externalValue) => this.transformEnumValue(typeName, externalValue, valueConfig),
14
+ });
15
+ return this.transformedSchema;
16
+ }
17
+ transformRequest(originalRequest, delegationContext, transformationContext) {
18
+ return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
19
+ }
20
+ transformResult(originalResult, delegationContext, transformationContext) {
21
+ return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
22
+ }
23
+ transformEnumValue(typeName, externalValue, enumValueConfig) {
24
+ const transformedEnumValue = this.enumValueTransformer(typeName, externalValue, enumValueConfig);
25
+ if (Array.isArray(transformedEnumValue)) {
26
+ const newExternalValue = transformedEnumValue[0];
27
+ if (newExternalValue !== externalValue) {
28
+ if (!(typeName in this.mapping)) {
29
+ this.mapping[typeName] = Object.create(null);
30
+ this.reverseMapping[typeName] = Object.create(null);
31
+ }
32
+ this.mapping[typeName][externalValue] = newExternalValue;
33
+ this.reverseMapping[typeName][newExternalValue] = externalValue;
34
+ }
35
+ }
36
+ return transformedEnumValue;
37
+ }
38
+ }
39
+ function mapEnumValues(typeName, value, mapping) {
40
+ var _a;
41
+ const newExternalValue = (_a = mapping[typeName]) === null || _a === void 0 ? void 0 : _a[value];
42
+ return newExternalValue != null ? newExternalValue : value;
43
+ }
44
+ function generateValueTransformer(valueTransformer, mapping) {
45
+ if (valueTransformer == null) {
46
+ return (typeName, value) => mapEnumValues(typeName, value, mapping);
47
+ }
48
+ else {
49
+ return (typeName, value) => mapEnumValues(typeName, valueTransformer(typeName, value), mapping);
50
+ }
51
+ }