@graphql-tools/wrap 8.4.21 → 8.5.0-alpha-6c480b2d.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.
- package/cjs/generateProxyingResolvers.js +74 -0
- package/cjs/index.js +12 -0
- package/cjs/introspect.js +30 -0
- package/cjs/package.json +1 -0
- package/cjs/transforms/ExtractField.js +51 -0
- package/cjs/transforms/FilterInputObjectFields.js +16 -0
- package/cjs/transforms/FilterInterfaceFields.js +13 -0
- package/cjs/transforms/FilterObjectFieldDirectives.js +33 -0
- package/cjs/transforms/FilterObjectFields.js +13 -0
- package/cjs/transforms/FilterRootFields.js +18 -0
- package/cjs/transforms/FilterTypes.js +19 -0
- package/cjs/transforms/HoistField.js +176 -0
- package/cjs/transforms/MapFields.js +61 -0
- package/cjs/transforms/MapLeafValues.js +111 -0
- package/cjs/transforms/PruneSchema.js +12 -0
- package/cjs/transforms/RemoveObjectFieldDeprecations.js +25 -0
- package/cjs/transforms/RemoveObjectFieldDirectives.js +16 -0
- package/cjs/transforms/RemoveObjectFieldsWithDeprecation.js +19 -0
- package/cjs/transforms/RemoveObjectFieldsWithDirective.js +19 -0
- package/cjs/transforms/RenameInputObjectFields.js +57 -0
- package/cjs/transforms/RenameInterfaceFields.js +19 -0
- package/cjs/transforms/RenameObjectFieldArguments.js +72 -0
- package/cjs/transforms/RenameObjectFields.js +19 -0
- package/cjs/transforms/RenameRootFields.js +16 -0
- package/cjs/transforms/RenameRootTypes.js +57 -0
- package/cjs/transforms/RenameTypes.js +69 -0
- package/cjs/transforms/TransformCompositeFields.js +143 -0
- package/cjs/transforms/TransformEnumValues.js +55 -0
- package/cjs/transforms/TransformInputObjectFields.js +160 -0
- package/cjs/transforms/TransformInterfaceFields.js +35 -0
- package/cjs/transforms/TransformObjectFields.js +35 -0
- package/cjs/transforms/TransformQuery.js +89 -0
- package/cjs/transforms/TransformRootFields.js +41 -0
- package/cjs/transforms/WrapFields.js +220 -0
- package/cjs/transforms/WrapQuery.js +62 -0
- package/cjs/transforms/WrapType.js +19 -0
- package/cjs/transforms/index.js +71 -0
- package/cjs/types.js +2 -0
- package/cjs/wrapSchema.js +58 -0
- package/esm/generateProxyingResolvers.js +69 -0
- package/esm/index.js +5 -0
- package/esm/introspect.js +26 -0
- package/esm/transforms/ExtractField.js +48 -0
- package/esm/transforms/FilterInputObjectFields.js +12 -0
- package/esm/transforms/FilterInterfaceFields.js +9 -0
- package/esm/transforms/FilterObjectFieldDirectives.js +29 -0
- package/esm/transforms/FilterObjectFields.js +9 -0
- package/esm/transforms/FilterRootFields.js +14 -0
- package/esm/transforms/FilterTypes.js +16 -0
- package/esm/transforms/HoistField.js +168 -0
- package/esm/transforms/MapFields.js +57 -0
- package/esm/transforms/MapLeafValues.js +108 -0
- package/esm/transforms/PruneSchema.js +9 -0
- package/esm/transforms/RemoveObjectFieldDeprecations.js +21 -0
- package/esm/transforms/RemoveObjectFieldDirectives.js +12 -0
- package/esm/transforms/RemoveObjectFieldsWithDeprecation.js +15 -0
- package/esm/transforms/RemoveObjectFieldsWithDirective.js +15 -0
- package/esm/transforms/RenameInputObjectFields.js +53 -0
- package/esm/transforms/RenameInterfaceFields.js +15 -0
- package/esm/transforms/RenameObjectFieldArguments.js +68 -0
- package/esm/transforms/RenameObjectFields.js +15 -0
- package/esm/transforms/RenameRootFields.js +12 -0
- package/esm/transforms/RenameRootTypes.js +54 -0
- package/esm/transforms/RenameTypes.js +66 -0
- package/esm/transforms/TransformCompositeFields.js +140 -0
- package/esm/transforms/TransformEnumValues.js +51 -0
- package/esm/transforms/TransformInputObjectFields.js +157 -0
- package/esm/transforms/TransformInterfaceFields.js +31 -0
- package/esm/transforms/TransformObjectFields.js +31 -0
- package/esm/transforms/TransformQuery.js +86 -0
- package/esm/transforms/TransformRootFields.js +37 -0
- package/esm/transforms/WrapFields.js +214 -0
- package/esm/transforms/WrapQuery.js +59 -0
- package/esm/transforms/WrapType.js +15 -0
- package/esm/transforms/index.js +33 -0
- package/esm/types.js +1 -0
- package/esm/wrapSchema.js +54 -0
- package/package.json +34 -13
- package/{generateProxyingResolvers.d.ts → typings/generateProxyingResolvers.d.ts} +0 -0
- package/typings/index.d.ts +5 -0
- package/{introspect.d.ts → typings/introspect.d.ts} +0 -0
- package/{transforms → typings/transforms}/ExtractField.d.ts +0 -0
- package/{transforms → typings/transforms}/FilterInputObjectFields.d.ts +1 -1
- package/{transforms → typings/transforms}/FilterInterfaceFields.d.ts +0 -0
- package/{transforms → typings/transforms}/FilterObjectFieldDirectives.d.ts +0 -0
- package/{transforms → typings/transforms}/FilterObjectFields.d.ts +0 -0
- package/{transforms → typings/transforms}/FilterRootFields.d.ts +0 -0
- package/{transforms → typings/transforms}/FilterTypes.d.ts +0 -0
- package/{transforms → typings/transforms}/HoistField.d.ts +0 -0
- package/{transforms → typings/transforms}/MapFields.d.ts +1 -1
- package/{transforms → typings/transforms}/MapLeafValues.d.ts +1 -1
- package/{transforms → typings/transforms}/PruneSchema.d.ts +0 -0
- package/{transforms → typings/transforms}/RemoveObjectFieldDeprecations.d.ts +0 -0
- package/{transforms → typings/transforms}/RemoveObjectFieldDirectives.d.ts +0 -0
- package/{transforms → typings/transforms}/RemoveObjectFieldsWithDeprecation.d.ts +0 -0
- package/{transforms → typings/transforms}/RemoveObjectFieldsWithDirective.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameInputObjectFields.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameInterfaceFields.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameObjectFieldArguments.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameObjectFields.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameRootFields.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameRootTypes.d.ts +0 -0
- package/{transforms → typings/transforms}/RenameTypes.d.ts +0 -0
- package/{transforms → typings/transforms}/TransformCompositeFields.d.ts +1 -1
- package/{transforms → typings/transforms}/TransformEnumValues.d.ts +2 -2
- package/{transforms → typings/transforms}/TransformInputObjectFields.d.ts +1 -1
- package/{transforms → typings/transforms}/TransformInterfaceFields.d.ts +1 -1
- package/{transforms → typings/transforms}/TransformObjectFields.d.ts +1 -1
- package/{transforms → typings/transforms}/TransformQuery.d.ts +0 -0
- package/{transforms → typings/transforms}/TransformRootFields.d.ts +1 -1
- package/{transforms → typings/transforms}/WrapFields.d.ts +0 -0
- package/{transforms → typings/transforms}/WrapQuery.d.ts +0 -0
- package/{transforms → typings/transforms}/WrapType.d.ts +0 -0
- package/typings/transforms/index.d.ts +32 -0
- package/{types.d.ts → typings/types.d.ts} +0 -0
- package/{wrapSchema.d.ts → typings/wrapSchema.d.ts} +0 -0
- package/index.d.ts +0 -5
- package/index.js +0 -1806
- package/index.mjs +0 -1767
- package/transforms/index.d.ts +0 -32
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ExtractField = exports.WrapQuery = exports.MapFields = exports.HoistField = exports.WrapFields = exports.WrapType = exports.PruneSchema = exports.RemoveObjectFieldsWithDeprecation = exports.RemoveObjectFieldDeprecations = exports.RemoveObjectFieldsWithDirective = exports.RemoveObjectFieldDirectives = exports.FilterObjectFieldDirectives = exports.TransformQuery = exports.TransformEnumValues = exports.MapLeafValues = exports.FilterInputObjectFields = exports.RenameInputObjectFields = exports.TransformInputObjectFields = exports.FilterInterfaceFields = exports.RenameInterfaceFields = exports.TransformInterfaceFields = exports.FilterObjectFields = exports.RenameObjectFieldArguments = exports.RenameObjectFields = exports.TransformObjectFields = exports.FilterRootFields = exports.RenameRootFields = exports.TransformRootFields = exports.TransformCompositeFields = exports.RenameRootTypes = exports.FilterTypes = exports.RenameTypes = void 0;
|
|
7
|
+
var RenameTypes_js_1 = require("./RenameTypes.js");
|
|
8
|
+
Object.defineProperty(exports, "RenameTypes", { enumerable: true, get: function () { return __importDefault(RenameTypes_js_1).default; } });
|
|
9
|
+
var FilterTypes_js_1 = require("./FilterTypes.js");
|
|
10
|
+
Object.defineProperty(exports, "FilterTypes", { enumerable: true, get: function () { return __importDefault(FilterTypes_js_1).default; } });
|
|
11
|
+
var RenameRootTypes_js_1 = require("./RenameRootTypes.js");
|
|
12
|
+
Object.defineProperty(exports, "RenameRootTypes", { enumerable: true, get: function () { return __importDefault(RenameRootTypes_js_1).default; } });
|
|
13
|
+
var TransformCompositeFields_js_1 = require("./TransformCompositeFields.js");
|
|
14
|
+
Object.defineProperty(exports, "TransformCompositeFields", { enumerable: true, get: function () { return __importDefault(TransformCompositeFields_js_1).default; } });
|
|
15
|
+
var TransformRootFields_js_1 = require("./TransformRootFields.js");
|
|
16
|
+
Object.defineProperty(exports, "TransformRootFields", { enumerable: true, get: function () { return __importDefault(TransformRootFields_js_1).default; } });
|
|
17
|
+
var RenameRootFields_js_1 = require("./RenameRootFields.js");
|
|
18
|
+
Object.defineProperty(exports, "RenameRootFields", { enumerable: true, get: function () { return __importDefault(RenameRootFields_js_1).default; } });
|
|
19
|
+
var FilterRootFields_js_1 = require("./FilterRootFields.js");
|
|
20
|
+
Object.defineProperty(exports, "FilterRootFields", { enumerable: true, get: function () { return __importDefault(FilterRootFields_js_1).default; } });
|
|
21
|
+
var TransformObjectFields_js_1 = require("./TransformObjectFields.js");
|
|
22
|
+
Object.defineProperty(exports, "TransformObjectFields", { enumerable: true, get: function () { return __importDefault(TransformObjectFields_js_1).default; } });
|
|
23
|
+
var RenameObjectFields_js_1 = require("./RenameObjectFields.js");
|
|
24
|
+
Object.defineProperty(exports, "RenameObjectFields", { enumerable: true, get: function () { return __importDefault(RenameObjectFields_js_1).default; } });
|
|
25
|
+
var RenameObjectFieldArguments_js_1 = require("./RenameObjectFieldArguments.js");
|
|
26
|
+
Object.defineProperty(exports, "RenameObjectFieldArguments", { enumerable: true, get: function () { return __importDefault(RenameObjectFieldArguments_js_1).default; } });
|
|
27
|
+
var FilterObjectFields_js_1 = require("./FilterObjectFields.js");
|
|
28
|
+
Object.defineProperty(exports, "FilterObjectFields", { enumerable: true, get: function () { return __importDefault(FilterObjectFields_js_1).default; } });
|
|
29
|
+
var TransformInterfaceFields_js_1 = require("./TransformInterfaceFields.js");
|
|
30
|
+
Object.defineProperty(exports, "TransformInterfaceFields", { enumerable: true, get: function () { return __importDefault(TransformInterfaceFields_js_1).default; } });
|
|
31
|
+
var RenameInterfaceFields_js_1 = require("./RenameInterfaceFields.js");
|
|
32
|
+
Object.defineProperty(exports, "RenameInterfaceFields", { enumerable: true, get: function () { return __importDefault(RenameInterfaceFields_js_1).default; } });
|
|
33
|
+
var FilterInterfaceFields_js_1 = require("./FilterInterfaceFields.js");
|
|
34
|
+
Object.defineProperty(exports, "FilterInterfaceFields", { enumerable: true, get: function () { return __importDefault(FilterInterfaceFields_js_1).default; } });
|
|
35
|
+
var TransformInputObjectFields_js_1 = require("./TransformInputObjectFields.js");
|
|
36
|
+
Object.defineProperty(exports, "TransformInputObjectFields", { enumerable: true, get: function () { return __importDefault(TransformInputObjectFields_js_1).default; } });
|
|
37
|
+
var RenameInputObjectFields_js_1 = require("./RenameInputObjectFields.js");
|
|
38
|
+
Object.defineProperty(exports, "RenameInputObjectFields", { enumerable: true, get: function () { return __importDefault(RenameInputObjectFields_js_1).default; } });
|
|
39
|
+
var FilterInputObjectFields_js_1 = require("./FilterInputObjectFields.js");
|
|
40
|
+
Object.defineProperty(exports, "FilterInputObjectFields", { enumerable: true, get: function () { return __importDefault(FilterInputObjectFields_js_1).default; } });
|
|
41
|
+
var MapLeafValues_js_1 = require("./MapLeafValues.js");
|
|
42
|
+
Object.defineProperty(exports, "MapLeafValues", { enumerable: true, get: function () { return __importDefault(MapLeafValues_js_1).default; } });
|
|
43
|
+
var TransformEnumValues_js_1 = require("./TransformEnumValues.js");
|
|
44
|
+
Object.defineProperty(exports, "TransformEnumValues", { enumerable: true, get: function () { return __importDefault(TransformEnumValues_js_1).default; } });
|
|
45
|
+
var TransformQuery_js_1 = require("./TransformQuery.js");
|
|
46
|
+
Object.defineProperty(exports, "TransformQuery", { enumerable: true, get: function () { return __importDefault(TransformQuery_js_1).default; } });
|
|
47
|
+
var FilterObjectFieldDirectives_js_1 = require("./FilterObjectFieldDirectives.js");
|
|
48
|
+
Object.defineProperty(exports, "FilterObjectFieldDirectives", { enumerable: true, get: function () { return __importDefault(FilterObjectFieldDirectives_js_1).default; } });
|
|
49
|
+
var RemoveObjectFieldDirectives_js_1 = require("./RemoveObjectFieldDirectives.js");
|
|
50
|
+
Object.defineProperty(exports, "RemoveObjectFieldDirectives", { enumerable: true, get: function () { return __importDefault(RemoveObjectFieldDirectives_js_1).default; } });
|
|
51
|
+
var RemoveObjectFieldsWithDirective_js_1 = require("./RemoveObjectFieldsWithDirective.js");
|
|
52
|
+
Object.defineProperty(exports, "RemoveObjectFieldsWithDirective", { enumerable: true, get: function () { return __importDefault(RemoveObjectFieldsWithDirective_js_1).default; } });
|
|
53
|
+
var RemoveObjectFieldDeprecations_js_1 = require("./RemoveObjectFieldDeprecations.js");
|
|
54
|
+
Object.defineProperty(exports, "RemoveObjectFieldDeprecations", { enumerable: true, get: function () { return __importDefault(RemoveObjectFieldDeprecations_js_1).default; } });
|
|
55
|
+
var RemoveObjectFieldsWithDeprecation_js_1 = require("./RemoveObjectFieldsWithDeprecation.js");
|
|
56
|
+
Object.defineProperty(exports, "RemoveObjectFieldsWithDeprecation", { enumerable: true, get: function () { return __importDefault(RemoveObjectFieldsWithDeprecation_js_1).default; } });
|
|
57
|
+
var PruneSchema_js_1 = require("./PruneSchema.js");
|
|
58
|
+
Object.defineProperty(exports, "PruneSchema", { enumerable: true, get: function () { return __importDefault(PruneSchema_js_1).default; } });
|
|
59
|
+
var WrapType_js_1 = require("./WrapType.js");
|
|
60
|
+
Object.defineProperty(exports, "WrapType", { enumerable: true, get: function () { return __importDefault(WrapType_js_1).default; } });
|
|
61
|
+
var WrapFields_js_1 = require("./WrapFields.js");
|
|
62
|
+
Object.defineProperty(exports, "WrapFields", { enumerable: true, get: function () { return __importDefault(WrapFields_js_1).default; } });
|
|
63
|
+
var HoistField_js_1 = require("./HoistField.js");
|
|
64
|
+
Object.defineProperty(exports, "HoistField", { enumerable: true, get: function () { return __importDefault(HoistField_js_1).default; } });
|
|
65
|
+
var MapFields_js_1 = require("./MapFields.js");
|
|
66
|
+
Object.defineProperty(exports, "MapFields", { enumerable: true, get: function () { return __importDefault(MapFields_js_1).default; } });
|
|
67
|
+
// superseded by TransformQuery
|
|
68
|
+
var WrapQuery_js_1 = require("./WrapQuery.js");
|
|
69
|
+
Object.defineProperty(exports, "WrapQuery", { enumerable: true, get: function () { return __importDefault(WrapQuery_js_1).default; } });
|
|
70
|
+
var ExtractField_js_1 = require("./ExtractField.js");
|
|
71
|
+
Object.defineProperty(exports, "ExtractField", { enumerable: true, get: function () { return __importDefault(ExtractField_js_1).default; } });
|
package/cjs/types.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wrapSchema = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
const utils_1 = require("@graphql-tools/utils");
|
|
6
|
+
const delegate_1 = require("@graphql-tools/delegate");
|
|
7
|
+
const generateProxyingResolvers_js_1 = require("./generateProxyingResolvers.js");
|
|
8
|
+
function wrapSchema(subschemaConfig) {
|
|
9
|
+
const targetSchema = subschemaConfig.schema;
|
|
10
|
+
const proxyingResolvers = (0, generateProxyingResolvers_js_1.generateProxyingResolvers)(subschemaConfig);
|
|
11
|
+
const schema = createWrappingSchema(targetSchema, proxyingResolvers);
|
|
12
|
+
const transformedSchema = (0, delegate_1.applySchemaTransforms)(schema, subschemaConfig);
|
|
13
|
+
return (0, delegate_1.applySchemaTransforms)(schema, subschemaConfig, transformedSchema);
|
|
14
|
+
}
|
|
15
|
+
exports.wrapSchema = wrapSchema;
|
|
16
|
+
function createWrappingSchema(schema, proxyingResolvers) {
|
|
17
|
+
return (0, utils_1.mapSchema)(schema, {
|
|
18
|
+
[utils_1.MapperKind.ROOT_OBJECT]: type => {
|
|
19
|
+
var _a;
|
|
20
|
+
const config = type.toConfig();
|
|
21
|
+
const fieldConfigMap = config.fields;
|
|
22
|
+
for (const fieldName in fieldConfigMap) {
|
|
23
|
+
const field = fieldConfigMap[fieldName];
|
|
24
|
+
if (field == null) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
fieldConfigMap[fieldName] = {
|
|
28
|
+
...field,
|
|
29
|
+
...(_a = proxyingResolvers[type.name]) === null || _a === void 0 ? void 0 : _a[fieldName],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return new graphql_1.GraphQLObjectType(config);
|
|
33
|
+
},
|
|
34
|
+
[utils_1.MapperKind.OBJECT_TYPE]: type => {
|
|
35
|
+
const config = type.toConfig();
|
|
36
|
+
config.isTypeOf = undefined;
|
|
37
|
+
for (const fieldName in config.fields) {
|
|
38
|
+
const field = config.fields[fieldName];
|
|
39
|
+
if (field == null) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
field.resolve = delegate_1.defaultMergedResolver;
|
|
43
|
+
field.subscribe = undefined;
|
|
44
|
+
}
|
|
45
|
+
return new graphql_1.GraphQLObjectType(config);
|
|
46
|
+
},
|
|
47
|
+
[utils_1.MapperKind.INTERFACE_TYPE]: type => {
|
|
48
|
+
const config = type.toConfig();
|
|
49
|
+
delete config.resolveType;
|
|
50
|
+
return new graphql_1.GraphQLInterfaceType(config);
|
|
51
|
+
},
|
|
52
|
+
[utils_1.MapperKind.UNION_TYPE]: type => {
|
|
53
|
+
const config = type.toConfig();
|
|
54
|
+
delete config.resolveType;
|
|
55
|
+
return new graphql_1.GraphQLUnionType(config);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getResponseKeyFromInfo, getRootTypeMap } from '@graphql-tools/utils';
|
|
2
|
+
import { delegateToSchema, getSubschema, resolveExternalValue, applySchemaTransforms, isExternalObject, getUnpathedErrors, } from '@graphql-tools/delegate';
|
|
3
|
+
export function generateProxyingResolvers(subschemaConfig) {
|
|
4
|
+
var _a;
|
|
5
|
+
const targetSchema = subschemaConfig.schema;
|
|
6
|
+
const createProxyingResolver = (_a = subschemaConfig.createProxyingResolver) !== null && _a !== void 0 ? _a : defaultCreateProxyingResolver;
|
|
7
|
+
const transformedSchema = applySchemaTransforms(targetSchema, subschemaConfig);
|
|
8
|
+
const rootTypeMap = getRootTypeMap(targetSchema);
|
|
9
|
+
const resolvers = {};
|
|
10
|
+
for (const [operation, rootType] of rootTypeMap.entries()) {
|
|
11
|
+
const typeName = rootType.name;
|
|
12
|
+
const fields = rootType.getFields();
|
|
13
|
+
resolvers[typeName] = {};
|
|
14
|
+
for (const fieldName in fields) {
|
|
15
|
+
const proxyingResolver = createProxyingResolver({
|
|
16
|
+
subschemaConfig,
|
|
17
|
+
transformedSchema,
|
|
18
|
+
operation,
|
|
19
|
+
fieldName,
|
|
20
|
+
});
|
|
21
|
+
const finalResolver = createPossiblyNestedProxyingResolver(subschemaConfig, proxyingResolver);
|
|
22
|
+
if (operation === 'subscription') {
|
|
23
|
+
resolvers[typeName][fieldName] = {
|
|
24
|
+
subscribe: finalResolver,
|
|
25
|
+
resolve: identical,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
resolvers[typeName][fieldName] = {
|
|
30
|
+
resolve: finalResolver,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return resolvers;
|
|
36
|
+
}
|
|
37
|
+
function identical(value) {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function createPossiblyNestedProxyingResolver(subschemaConfig, proxyingResolver) {
|
|
41
|
+
return function possiblyNestedProxyingResolver(parent, args, context, info) {
|
|
42
|
+
if (parent != null) {
|
|
43
|
+
const responseKey = getResponseKeyFromInfo(info);
|
|
44
|
+
// Check to see if the parent contains a proxied result
|
|
45
|
+
if (isExternalObject(parent)) {
|
|
46
|
+
const unpathedErrors = getUnpathedErrors(parent);
|
|
47
|
+
const subschema = getSubschema(parent, responseKey);
|
|
48
|
+
// If there is a proxied result from this subschema, return it
|
|
49
|
+
// This can happen even for a root field when the root type ia
|
|
50
|
+
// also nested as a field within a different type.
|
|
51
|
+
if (subschemaConfig === subschema && parent[responseKey] !== undefined) {
|
|
52
|
+
return resolveExternalValue(parent[responseKey], unpathedErrors, subschema, context, info);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return proxyingResolver(parent, args, context, info);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function defaultCreateProxyingResolver({ subschemaConfig, operation, transformedSchema, }) {
|
|
60
|
+
return function proxyingResolver(_parent, _args, context, info) {
|
|
61
|
+
return delegateToSchema({
|
|
62
|
+
schema: subschemaConfig,
|
|
63
|
+
operation,
|
|
64
|
+
context,
|
|
65
|
+
info,
|
|
66
|
+
transformedSchema,
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
}
|
package/esm/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getIntrospectionQuery, buildClientSchema, parse, } from 'graphql';
|
|
2
|
+
import { ValueOrPromise } from 'value-or-promise';
|
|
3
|
+
import { isAsyncIterable } from '@graphql-tools/utils';
|
|
4
|
+
function getSchemaFromIntrospection(introspectionResult, options) {
|
|
5
|
+
var _a;
|
|
6
|
+
if ((_a = introspectionResult === null || introspectionResult === void 0 ? void 0 : introspectionResult.data) === null || _a === void 0 ? void 0 : _a.__schema) {
|
|
7
|
+
return buildClientSchema(introspectionResult.data, options);
|
|
8
|
+
}
|
|
9
|
+
throw new Error('Could not obtain introspection result, received: ' + JSON.stringify(introspectionResult));
|
|
10
|
+
}
|
|
11
|
+
export function introspectSchema(executor, context, options) {
|
|
12
|
+
const parsedIntrospectionQuery = parse(getIntrospectionQuery(options), options);
|
|
13
|
+
return new ValueOrPromise(() => executor({
|
|
14
|
+
document: parsedIntrospectionQuery,
|
|
15
|
+
context,
|
|
16
|
+
}))
|
|
17
|
+
.then(introspection => {
|
|
18
|
+
if (isAsyncIterable(introspection)) {
|
|
19
|
+
const iterator = introspection[Symbol.asyncIterator]();
|
|
20
|
+
return iterator.next().then(({ value }) => value);
|
|
21
|
+
}
|
|
22
|
+
return introspection;
|
|
23
|
+
})
|
|
24
|
+
.then(introspection => getSchemaFromIntrospection(introspection, options))
|
|
25
|
+
.resolve();
|
|
26
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { visit, Kind, BREAK } from 'graphql';
|
|
2
|
+
export default class ExtractField {
|
|
3
|
+
constructor({ from, to }) {
|
|
4
|
+
this.from = from;
|
|
5
|
+
this.to = to;
|
|
6
|
+
}
|
|
7
|
+
transformRequest(originalRequest, _delegationContext, _transformationContext) {
|
|
8
|
+
let fromSelection;
|
|
9
|
+
const ourPathFrom = JSON.stringify(this.from);
|
|
10
|
+
const ourPathTo = JSON.stringify(this.to);
|
|
11
|
+
let fieldPath = [];
|
|
12
|
+
visit(originalRequest.document, {
|
|
13
|
+
[Kind.FIELD]: {
|
|
14
|
+
enter: (node) => {
|
|
15
|
+
fieldPath.push(node.name.value);
|
|
16
|
+
if (ourPathFrom === JSON.stringify(fieldPath)) {
|
|
17
|
+
fromSelection = node.selectionSet;
|
|
18
|
+
return BREAK;
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
leave: () => {
|
|
22
|
+
fieldPath.pop();
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
fieldPath = [];
|
|
27
|
+
const document = visit(originalRequest.document, {
|
|
28
|
+
[Kind.FIELD]: {
|
|
29
|
+
enter: (node) => {
|
|
30
|
+
fieldPath.push(node.name.value);
|
|
31
|
+
if (ourPathTo === JSON.stringify(fieldPath) && fromSelection != null) {
|
|
32
|
+
return {
|
|
33
|
+
...node,
|
|
34
|
+
selectionSet: fromSelection,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
leave: () => {
|
|
39
|
+
fieldPath.pop();
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
...originalRequest,
|
|
45
|
+
document,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import TransformInputObjectFields from './TransformInputObjectFields.js';
|
|
2
|
+
export default class FilterInputObjectFields {
|
|
3
|
+
constructor(filter, inputObjectNodeTransformer) {
|
|
4
|
+
this.transformer = new TransformInputObjectFields((typeName, fieldName, inputFieldConfig) => filter(typeName, fieldName, inputFieldConfig) ? undefined : null, undefined, inputObjectNodeTransformer);
|
|
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,9 @@
|
|
|
1
|
+
import TransformInterfaceFields from './TransformInterfaceFields.js';
|
|
2
|
+
export default class FilterInterfaceFields {
|
|
3
|
+
constructor(filter) {
|
|
4
|
+
this.transformer = new TransformInterfaceFields((typeName, fieldName, fieldConfig) => filter(typeName, fieldName, fieldConfig) ? undefined : null);
|
|
5
|
+
}
|
|
6
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
7
|
+
return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getArgumentValues } from '@graphql-tools/utils';
|
|
2
|
+
import TransformObjectFields from './TransformObjectFields.js';
|
|
3
|
+
export default class FilterObjectFieldDirectives {
|
|
4
|
+
constructor(filter) {
|
|
5
|
+
this.filter = filter;
|
|
6
|
+
}
|
|
7
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
8
|
+
const transformer = new TransformObjectFields((_typeName, _fieldName, fieldConfig) => {
|
|
9
|
+
var _a, _b, _c, _d;
|
|
10
|
+
const keepDirectives = (_c = (_b = (_a = fieldConfig.astNode) === null || _a === void 0 ? void 0 : _a.directives) === null || _b === void 0 ? void 0 : _b.filter(dir => {
|
|
11
|
+
const directiveDef = originalWrappingSchema.getDirective(dir.name.value);
|
|
12
|
+
const directiveValue = directiveDef ? getArgumentValues(directiveDef, dir) : undefined;
|
|
13
|
+
return this.filter(dir.name.value, directiveValue);
|
|
14
|
+
})) !== null && _c !== void 0 ? _c : [];
|
|
15
|
+
if (((_d = fieldConfig.astNode) === null || _d === void 0 ? void 0 : _d.directives) != null &&
|
|
16
|
+
keepDirectives.length !== fieldConfig.astNode.directives.length) {
|
|
17
|
+
fieldConfig = {
|
|
18
|
+
...fieldConfig,
|
|
19
|
+
astNode: {
|
|
20
|
+
...fieldConfig.astNode,
|
|
21
|
+
directives: keepDirectives,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
return fieldConfig;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import TransformObjectFields from './TransformObjectFields.js';
|
|
2
|
+
export default class FilterObjectFields {
|
|
3
|
+
constructor(filter) {
|
|
4
|
+
this.transformer = new TransformObjectFields((typeName, fieldName, fieldConfig) => filter(typeName, fieldName, fieldConfig) ? undefined : null);
|
|
5
|
+
}
|
|
6
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
7
|
+
return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import TransformRootFields from './TransformRootFields.js';
|
|
2
|
+
export default class FilterRootFields {
|
|
3
|
+
constructor(filter) {
|
|
4
|
+
this.transformer = new TransformRootFields((operation, fieldName, fieldConfig) => {
|
|
5
|
+
if (filter(operation, fieldName, fieldConfig)) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
12
|
+
return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { mapSchema, MapperKind } from '@graphql-tools/utils';
|
|
2
|
+
export default class FilterTypes {
|
|
3
|
+
constructor(filter) {
|
|
4
|
+
this.filter = filter;
|
|
5
|
+
}
|
|
6
|
+
transformSchema(originalWrappingSchema, _subschemaConfig, _transformedSchema) {
|
|
7
|
+
return mapSchema(originalWrappingSchema, {
|
|
8
|
+
[MapperKind.TYPE]: (type) => {
|
|
9
|
+
if (this.filter(type)) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { getNullableType, Kind, } from 'graphql';
|
|
2
|
+
import { appendObjectFields, removeObjectFields, relocatedError, } from '@graphql-tools/utils';
|
|
3
|
+
import { defaultMergedResolver } from '@graphql-tools/delegate';
|
|
4
|
+
import { defaultCreateProxyingResolver } from '../generateProxyingResolvers.js';
|
|
5
|
+
import MapFields from './MapFields.js';
|
|
6
|
+
export default class HoistField {
|
|
7
|
+
constructor(typeName, pathConfig, newFieldName, alias = '__gqtlw__') {
|
|
8
|
+
this.typeName = typeName;
|
|
9
|
+
this.newFieldName = newFieldName;
|
|
10
|
+
const path = pathConfig.map(segment => (typeof segment === 'string' ? segment : segment.fieldName));
|
|
11
|
+
this.argFilters = pathConfig.map((segment, index) => {
|
|
12
|
+
if (typeof segment === 'string' || segment.argFilter == null) {
|
|
13
|
+
return index === pathConfig.length - 1 ? () => true : () => false;
|
|
14
|
+
}
|
|
15
|
+
return segment.argFilter;
|
|
16
|
+
});
|
|
17
|
+
const pathToField = path.slice();
|
|
18
|
+
const oldFieldName = pathToField.pop();
|
|
19
|
+
if (oldFieldName == null) {
|
|
20
|
+
throw new Error(`Cannot hoist field to ${newFieldName} on type ${typeName}, no path provided.`);
|
|
21
|
+
}
|
|
22
|
+
this.oldFieldName = oldFieldName;
|
|
23
|
+
this.pathToField = pathToField;
|
|
24
|
+
const argLevels = Object.create(null);
|
|
25
|
+
this.transformer = new MapFields({
|
|
26
|
+
[typeName]: {
|
|
27
|
+
[newFieldName]: fieldNode => wrapFieldNode(renameFieldNode(fieldNode, oldFieldName), pathToField, alias, argLevels),
|
|
28
|
+
},
|
|
29
|
+
}, {
|
|
30
|
+
[typeName]: value => unwrapValue(value, alias),
|
|
31
|
+
}, errors => (errors != null ? unwrapErrors(errors, alias) : undefined));
|
|
32
|
+
this.argLevels = argLevels;
|
|
33
|
+
}
|
|
34
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
35
|
+
var _a, _b, _c, _d;
|
|
36
|
+
const argsMap = Object.create(null);
|
|
37
|
+
const innerType = this.pathToField.reduce((acc, pathSegment, index) => {
|
|
38
|
+
const field = acc.getFields()[pathSegment];
|
|
39
|
+
for (const arg of field.args) {
|
|
40
|
+
if (this.argFilters[index](arg)) {
|
|
41
|
+
argsMap[arg.name] = arg;
|
|
42
|
+
this.argLevels[arg.name] = index;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return getNullableType(field.type);
|
|
46
|
+
}, originalWrappingSchema.getType(this.typeName));
|
|
47
|
+
let [newSchema, targetFieldConfigMap] = removeObjectFields(originalWrappingSchema, innerType.name, fieldName => fieldName === this.oldFieldName);
|
|
48
|
+
const targetField = targetFieldConfigMap[this.oldFieldName];
|
|
49
|
+
let resolve;
|
|
50
|
+
if (transformedSchema) {
|
|
51
|
+
const hoistingToRootField = this.typeName === ((_a = originalWrappingSchema.getQueryType()) === null || _a === void 0 ? void 0 : _a.name) ||
|
|
52
|
+
this.typeName === ((_b = originalWrappingSchema.getMutationType()) === null || _b === void 0 ? void 0 : _b.name);
|
|
53
|
+
if (hoistingToRootField) {
|
|
54
|
+
const targetSchema = subschemaConfig.schema;
|
|
55
|
+
const operation = this.typeName === ((_c = targetSchema.getQueryType()) === null || _c === void 0 ? void 0 : _c.name) ? 'query' : 'mutation';
|
|
56
|
+
const createProxyingResolver = (_d = subschemaConfig.createProxyingResolver) !== null && _d !== void 0 ? _d : defaultCreateProxyingResolver;
|
|
57
|
+
resolve = createProxyingResolver({
|
|
58
|
+
subschemaConfig,
|
|
59
|
+
transformedSchema,
|
|
60
|
+
operation: operation,
|
|
61
|
+
fieldName: this.newFieldName,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
resolve = defaultMergedResolver;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const newTargetField = {
|
|
69
|
+
...targetField,
|
|
70
|
+
resolve: resolve,
|
|
71
|
+
};
|
|
72
|
+
const level = this.pathToField.length;
|
|
73
|
+
const args = targetField.args;
|
|
74
|
+
if (args != null) {
|
|
75
|
+
for (const argName in args) {
|
|
76
|
+
const argConfig = args[argName];
|
|
77
|
+
if (argConfig == null) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const arg = {
|
|
81
|
+
...argConfig,
|
|
82
|
+
name: argName,
|
|
83
|
+
description: argConfig.description,
|
|
84
|
+
defaultValue: argConfig.defaultValue,
|
|
85
|
+
extensions: argConfig.extensions,
|
|
86
|
+
astNode: argConfig.astNode,
|
|
87
|
+
};
|
|
88
|
+
if (this.argFilters[level](arg)) {
|
|
89
|
+
argsMap[argName] = arg;
|
|
90
|
+
this.argLevels[arg.name] = level;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
newTargetField.args = argsMap;
|
|
95
|
+
newSchema = appendObjectFields(newSchema, this.typeName, {
|
|
96
|
+
[this.newFieldName]: newTargetField,
|
|
97
|
+
});
|
|
98
|
+
return this.transformer.transformSchema(newSchema, subschemaConfig, transformedSchema);
|
|
99
|
+
}
|
|
100
|
+
transformRequest(originalRequest, delegationContext, transformationContext) {
|
|
101
|
+
return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
|
|
102
|
+
}
|
|
103
|
+
transformResult(originalResult, delegationContext, transformationContext) {
|
|
104
|
+
return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function wrapFieldNode(fieldNode, path, alias, argLevels) {
|
|
108
|
+
return path.reduceRight((acc, fieldName, index) => ({
|
|
109
|
+
kind: Kind.FIELD,
|
|
110
|
+
alias: {
|
|
111
|
+
kind: Kind.NAME,
|
|
112
|
+
value: alias,
|
|
113
|
+
},
|
|
114
|
+
name: {
|
|
115
|
+
kind: Kind.NAME,
|
|
116
|
+
value: fieldName,
|
|
117
|
+
},
|
|
118
|
+
selectionSet: {
|
|
119
|
+
kind: Kind.SELECTION_SET,
|
|
120
|
+
selections: [acc],
|
|
121
|
+
},
|
|
122
|
+
arguments: fieldNode.arguments != null
|
|
123
|
+
? fieldNode.arguments.filter(arg => argLevels[arg.name.value] === index)
|
|
124
|
+
: undefined,
|
|
125
|
+
}), {
|
|
126
|
+
...fieldNode,
|
|
127
|
+
arguments: fieldNode.arguments != null
|
|
128
|
+
? fieldNode.arguments.filter(arg => argLevels[arg.name.value] === path.length)
|
|
129
|
+
: undefined,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export function renameFieldNode(fieldNode, name) {
|
|
133
|
+
return {
|
|
134
|
+
...fieldNode,
|
|
135
|
+
alias: {
|
|
136
|
+
kind: Kind.NAME,
|
|
137
|
+
value: fieldNode.alias != null ? fieldNode.alias.value : fieldNode.name.value,
|
|
138
|
+
},
|
|
139
|
+
name: {
|
|
140
|
+
kind: Kind.NAME,
|
|
141
|
+
value: name,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function unwrapValue(originalValue, alias) {
|
|
146
|
+
let newValue = originalValue;
|
|
147
|
+
let object = newValue[alias];
|
|
148
|
+
while (object != null) {
|
|
149
|
+
newValue = object;
|
|
150
|
+
object = newValue[alias];
|
|
151
|
+
}
|
|
152
|
+
delete originalValue[alias];
|
|
153
|
+
Object.assign(originalValue, newValue);
|
|
154
|
+
return originalValue;
|
|
155
|
+
}
|
|
156
|
+
function unwrapErrors(errors, alias) {
|
|
157
|
+
if (errors === undefined) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
return errors.map(error => {
|
|
161
|
+
const originalPath = error.path;
|
|
162
|
+
if (originalPath == null) {
|
|
163
|
+
return error;
|
|
164
|
+
}
|
|
165
|
+
const newPath = originalPath.filter(pathSegment => pathSegment !== alias);
|
|
166
|
+
return relocatedError(error, newPath);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import TransformCompositeFields from './TransformCompositeFields.js';
|
|
2
|
+
export default class MapFields {
|
|
3
|
+
constructor(fieldNodeTransformerMap, objectValueTransformerMap, errorsTransformer) {
|
|
4
|
+
this.fieldNodeTransformerMap = fieldNodeTransformerMap;
|
|
5
|
+
this.objectValueTransformerMap = objectValueTransformerMap;
|
|
6
|
+
this.errorsTransformer = errorsTransformer;
|
|
7
|
+
}
|
|
8
|
+
_getTransformer() {
|
|
9
|
+
const transformer = this.transformer;
|
|
10
|
+
if (transformer === undefined) {
|
|
11
|
+
throw new Error(`The MapFields transform's "transformRequest" and "transformResult" methods cannot be used without first calling "transformSchema".`);
|
|
12
|
+
}
|
|
13
|
+
return transformer;
|
|
14
|
+
}
|
|
15
|
+
transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema) {
|
|
16
|
+
var _a;
|
|
17
|
+
const subscriptionTypeName = (_a = originalWrappingSchema.getSubscriptionType()) === null || _a === void 0 ? void 0 : _a.name;
|
|
18
|
+
const objectValueTransformerMap = this.objectValueTransformerMap;
|
|
19
|
+
this.transformer = new TransformCompositeFields(() => undefined, (typeName, fieldName, fieldNode, fragments, transformationContext) => {
|
|
20
|
+
const typeTransformers = this.fieldNodeTransformerMap[typeName];
|
|
21
|
+
if (typeTransformers == null) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const fieldNodeTransformer = typeTransformers[fieldName];
|
|
25
|
+
if (fieldNodeTransformer == null) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
return fieldNodeTransformer(fieldNode, fragments, transformationContext);
|
|
29
|
+
}, objectValueTransformerMap != null
|
|
30
|
+
? (data, transformationContext) => {
|
|
31
|
+
if (data == null) {
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
let typeName = data.__typename;
|
|
35
|
+
if (typeName == null) {
|
|
36
|
+
// see https://github.com/ardatan/graphql-tools/issues/2282
|
|
37
|
+
typeName = subscriptionTypeName;
|
|
38
|
+
if (typeName == null) {
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const transformer = objectValueTransformerMap[typeName];
|
|
43
|
+
if (transformer == null) {
|
|
44
|
+
return data;
|
|
45
|
+
}
|
|
46
|
+
return transformer(data, transformationContext);
|
|
47
|
+
}
|
|
48
|
+
: undefined, this.errorsTransformer != null ? this.errorsTransformer : undefined);
|
|
49
|
+
return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
|
|
50
|
+
}
|
|
51
|
+
transformRequest(originalRequest, delegationContext, transformationContext) {
|
|
52
|
+
return this._getTransformer().transformRequest(originalRequest, delegationContext, transformationContext);
|
|
53
|
+
}
|
|
54
|
+
transformResult(originalResult, delegationContext, transformationContext) {
|
|
55
|
+
return this._getTransformer().transformResult(originalResult, delegationContext, transformationContext);
|
|
56
|
+
}
|
|
57
|
+
}
|