UNPKG

89.7 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7const tslib = require('tslib');
8const graphql = require('graphql');
9const utils = require('@graphql-tools/utils/es5');
10const delegate = require('@graphql-tools/delegate/es5');
11const isPromise = _interopDefault(require('is-promise'));
12
13function generateProxyingResolvers(subschemaConfig) {
14 var _a;
15 var targetSchema = subschemaConfig.schema;
16 var createProxyingResolver = (_a = subschemaConfig.createProxyingResolver) !== null && _a !== void 0 ? _a : defaultCreateProxyingResolver;
17 var transformedSchema = delegate.applySchemaTransforms(targetSchema, subschemaConfig);
18 var operationTypes = {
19 query: targetSchema.getQueryType(),
20 mutation: targetSchema.getMutationType(),
21 subscription: targetSchema.getSubscriptionType(),
22 };
23 var resolvers = {};
24 Object.keys(operationTypes).forEach(function (operation) {
25 var rootType = operationTypes[operation];
26 if (rootType != null) {
27 var typeName_1 = rootType.name;
28 var fields = rootType.getFields();
29 resolvers[typeName_1] = {};
30 Object.keys(fields).forEach(function (fieldName) {
31 var proxyingResolver = createProxyingResolver({
32 subschemaConfig: subschemaConfig,
33 transformedSchema: transformedSchema,
34 operation: operation,
35 fieldName: fieldName,
36 });
37 var finalResolver = createPossiblyNestedProxyingResolver(subschemaConfig, proxyingResolver);
38 if (operation === 'subscription') {
39 resolvers[typeName_1][fieldName] = {
40 subscribe: finalResolver,
41 resolve: function (payload, _, __, _a) {
42 var targetFieldName = _a.fieldName;
43 return payload[targetFieldName];
44 },
45 };
46 }
47 else {
48 resolvers[typeName_1][fieldName] = {
49 resolve: finalResolver,
50 };
51 }
52 });
53 }
54 });
55 return resolvers;
56}
57function createPossiblyNestedProxyingResolver(subschemaConfig, proxyingResolver) {
58 return function (parent, args, context, info) {
59 if (parent != null) {
60 var responseKey = utils.getResponseKeyFromInfo(info);
61 // Check to see if the parent contains a proxied result
62 if (delegate.isExternalObject(parent)) {
63 var unpathedErrors = delegate.getUnpathedErrors(parent);
64 var subschema = delegate.getSubschema(parent, responseKey);
65 // If there is a proxied result from this subschema, return it
66 // This can happen even for a root field when the root type ia
67 // also nested as a field within a different type.
68 if (subschemaConfig === subschema && parent[responseKey] !== undefined) {
69 return delegate.resolveExternalValue(parent[responseKey], unpathedErrors, subschema, context, info);
70 }
71 }
72 }
73 return proxyingResolver(parent, args, context, info);
74 };
75}
76function defaultCreateProxyingResolver(_a) {
77 var subschemaConfig = _a.subschemaConfig, operation = _a.operation, transformedSchema = _a.transformedSchema;
78 return function (_parent, _args, context, info) {
79 return delegate.delegateToSchema({
80 schema: subschemaConfig,
81 operation: operation,
82 context: context,
83 info: info,
84 transformedSchema: transformedSchema,
85 });
86 };
87}
88
89function wrapSchema(subschemaConfig) {
90 var targetSchema = subschemaConfig.schema;
91 var proxyingResolvers = generateProxyingResolvers(subschemaConfig);
92 var schema = createWrappingSchema(targetSchema, proxyingResolvers);
93 var transformedSchema = delegate.applySchemaTransforms(schema, subschemaConfig);
94 return delegate.applySchemaTransforms(schema, subschemaConfig, transformedSchema);
95}
96function createWrappingSchema(schema, proxyingResolvers) {
97 var _a;
98 return utils.mapSchema(schema, (_a = {},
99 _a[utils.MapperKind.ROOT_OBJECT] = function (type) {
100 var config = type.toConfig();
101 var fieldConfigMap = config.fields;
102 Object.keys(fieldConfigMap).forEach(function (fieldName) {
103 fieldConfigMap[fieldName] = tslib.__assign(tslib.__assign({}, fieldConfigMap[fieldName]), proxyingResolvers[type.name][fieldName]);
104 });
105 return new graphql.GraphQLObjectType(config);
106 },
107 _a[utils.MapperKind.OBJECT_TYPE] = function (type) {
108 var config = type.toConfig();
109 config.isTypeOf = undefined;
110 Object.keys(config.fields).forEach(function (fieldName) {
111 config.fields[fieldName].resolve = delegate.defaultMergedResolver;
112 config.fields[fieldName].subscribe = null;
113 });
114 return new graphql.GraphQLObjectType(config);
115 },
116 _a[utils.MapperKind.INTERFACE_TYPE] = function (type) {
117 var config = type.toConfig();
118 delete config.resolveType;
119 return new graphql.GraphQLInterfaceType(config);
120 },
121 _a[utils.MapperKind.UNION_TYPE] = function (type) {
122 var config = type.toConfig();
123 delete config.resolveType;
124 return new graphql.GraphQLUnionType(config);
125 },
126 _a));
127}
128
129var RenameTypes = /** @class */ (function () {
130 function RenameTypes(renamer, options) {
131 this.renamer = renamer;
132 this.map = Object.create(null);
133 this.reverseMap = Object.create(null);
134 var _a = options != null ? options : {}, _b = _a.renameBuiltins, renameBuiltins = _b === void 0 ? false : _b, _c = _a.renameScalars, renameScalars = _c === void 0 ? true : _c;
135 this.renameBuiltins = renameBuiltins;
136 this.renameScalars = renameScalars;
137 }
138 RenameTypes.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
139 var _a;
140 var _this = this;
141 return utils.mapSchema(originalWrappingSchema, (_a = {},
142 _a[utils.MapperKind.TYPE] = function (type) {
143 if (graphql.isSpecifiedScalarType(type) && !_this.renameBuiltins) {
144 return undefined;
145 }
146 if (graphql.isScalarType(type) && !_this.renameScalars) {
147 return undefined;
148 }
149 var oldName = type.name;
150 var newName = _this.renamer(oldName);
151 if (newName !== undefined && newName !== oldName) {
152 _this.map[oldName] = newName;
153 _this.reverseMap[newName] = oldName;
154 return utils.renameType(type, newName);
155 }
156 },
157 _a[utils.MapperKind.ROOT_OBJECT] = function () {
158 return undefined;
159 },
160 _a));
161 };
162 RenameTypes.prototype.transformRequest = function (originalRequest, _delegationContext, _transformationContext) {
163 var _a;
164 var _this = this;
165 var document = graphql.visit(originalRequest.document, (_a = {},
166 _a[graphql.Kind.NAMED_TYPE] = function (node) {
167 var name = node.name.value;
168 if (name in _this.reverseMap) {
169 return tslib.__assign(tslib.__assign({}, node), { name: {
170 kind: graphql.Kind.NAME,
171 value: _this.reverseMap[name],
172 } });
173 }
174 },
175 _a));
176 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document });
177 };
178 RenameTypes.prototype.transformResult = function (originalResult, _delegationContext, _transformationContext) {
179 var _this = this;
180 return tslib.__assign(tslib.__assign({}, originalResult), { data: utils.visitData(originalResult.data, function (object) {
181 var typeName = object === null || object === void 0 ? void 0 : object.__typename;
182 if (typeName != null && typeName in _this.map) {
183 object.__typename = _this.map[typeName];
184 }
185 return object;
186 }) });
187 };
188 return RenameTypes;
189}());
190
191var FilterTypes = /** @class */ (function () {
192 function FilterTypes(filter) {
193 this.filter = filter;
194 }
195 FilterTypes.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
196 var _a;
197 var _this = this;
198 return utils.mapSchema(originalWrappingSchema, (_a = {},
199 _a[utils.MapperKind.TYPE] = function (type) {
200 if (_this.filter(type)) {
201 return undefined;
202 }
203 return null;
204 },
205 _a));
206 };
207 return FilterTypes;
208}());
209
210var RenameRootTypes = /** @class */ (function () {
211 function RenameRootTypes(renamer) {
212 this.renamer = renamer;
213 this.map = Object.create(null);
214 this.reverseMap = Object.create(null);
215 }
216 RenameRootTypes.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
217 var _a;
218 var _this = this;
219 return utils.mapSchema(originalWrappingSchema, (_a = {},
220 _a[utils.MapperKind.ROOT_OBJECT] = function (type) {
221 var oldName = type.name;
222 var newName = _this.renamer(oldName);
223 if (newName !== undefined && newName !== oldName) {
224 _this.map[oldName] = newName;
225 _this.reverseMap[newName] = oldName;
226 return utils.renameType(type, newName);
227 }
228 },
229 _a));
230 };
231 RenameRootTypes.prototype.transformRequest = function (originalRequest, _delegationContext, _transformationContext) {
232 var _a;
233 var _this = this;
234 var document = graphql.visit(originalRequest.document, (_a = {},
235 _a[graphql.Kind.NAMED_TYPE] = function (node) {
236 var name = node.name.value;
237 if (name in _this.reverseMap) {
238 return tslib.__assign(tslib.__assign({}, node), { name: {
239 kind: graphql.Kind.NAME,
240 value: _this.reverseMap[name],
241 } });
242 }
243 },
244 _a));
245 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document });
246 };
247 RenameRootTypes.prototype.transformResult = function (originalResult, _delegationContext, _transformationContext) {
248 var _this = this;
249 return tslib.__assign(tslib.__assign({}, originalResult), { data: utils.visitData(originalResult.data, function (object) {
250 var typeName = object === null || object === void 0 ? void 0 : object.__typename;
251 if (typeName != null && typeName in _this.map) {
252 object.__typename = _this.map[typeName];
253 }
254 return object;
255 }) });
256 };
257 return RenameRootTypes;
258}());
259
260var TransformCompositeFields = /** @class */ (function () {
261 function TransformCompositeFields(fieldTransformer, fieldNodeTransformer, dataTransformer, errorsTransformer) {
262 this.fieldTransformer = fieldTransformer;
263 this.fieldNodeTransformer = fieldNodeTransformer;
264 this.dataTransformer = dataTransformer;
265 this.errorsTransformer = errorsTransformer;
266 this.mapping = {};
267 }
268 TransformCompositeFields.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
269 var _a;
270 var _this = this;
271 var _b;
272 this.transformedSchema = utils.mapSchema(originalWrappingSchema, (_a = {},
273 _a[utils.MapperKind.COMPOSITE_FIELD] = function (fieldConfig, fieldName, typeName) {
274 var transformedField = _this.fieldTransformer(typeName, fieldName, fieldConfig);
275 if (Array.isArray(transformedField)) {
276 var newFieldName = transformedField[0];
277 if (newFieldName !== fieldName) {
278 if (!(typeName in _this.mapping)) {
279 _this.mapping[typeName] = {};
280 }
281 _this.mapping[typeName][newFieldName] = fieldName;
282 }
283 }
284 return transformedField;
285 },
286 _a));
287 this.typeInfo = new graphql.TypeInfo(this.transformedSchema);
288 this.subscriptionTypeName = (_b = originalWrappingSchema.getSubscriptionType()) === null || _b === void 0 ? void 0 : _b.name;
289 return this.transformedSchema;
290 };
291 TransformCompositeFields.prototype.transformRequest = function (originalRequest, _delegationContext, transformationContext) {
292 var document = originalRequest.document;
293 var fragments = Object.create(null);
294 document.definitions.forEach(function (def) {
295 if (def.kind === graphql.Kind.FRAGMENT_DEFINITION) {
296 fragments[def.name.value] = def;
297 }
298 });
299 return tslib.__assign(tslib.__assign({}, originalRequest), { document: this.transformDocument(document, fragments, transformationContext) });
300 };
301 TransformCompositeFields.prototype.transformResult = function (result, _delegationContext, transformationContext) {
302 var _this = this;
303 if (this.dataTransformer != null) {
304 result.data = utils.visitData(result.data, function (value) { return _this.dataTransformer(value, transformationContext); });
305 }
306 if (this.errorsTransformer != null) {
307 result.errors = this.errorsTransformer(result.errors, transformationContext);
308 }
309 return result;
310 };
311 TransformCompositeFields.prototype.transformDocument = function (document, fragments, transformationContext) {
312 var _a;
313 var _this = this;
314 return graphql.visit(document, graphql.visitWithTypeInfo(this.typeInfo, {
315 leave: (_a = {},
316 _a[graphql.Kind.SELECTION_SET] = function (node) {
317 return _this.transformSelectionSet(node, _this.typeInfo, fragments, transformationContext);
318 },
319 _a),
320 }));
321 };
322 TransformCompositeFields.prototype.transformSelectionSet = function (node, typeInfo, fragments, transformationContext) {
323 var _this = this;
324 var parentType = typeInfo.getParentType();
325 if (parentType == null) {
326 return undefined;
327 }
328 var parentTypeName = parentType.name;
329 var newSelections = [];
330 node.selections.forEach(function (selection) {
331 var _a, _b;
332 if (selection.kind !== graphql.Kind.FIELD) {
333 newSelections.push(selection);
334 return;
335 }
336 var newName = selection.name.value;
337 // See https://github.com/ardatan/graphql-tools/issues/2282
338 if ((_this.dataTransformer != null || _this.errorsTransformer != null) &&
339 (_this.subscriptionTypeName == null || parentTypeName !== _this.subscriptionTypeName)) {
340 newSelections.push({
341 kind: graphql.Kind.FIELD,
342 name: {
343 kind: graphql.Kind.NAME,
344 value: '__typename',
345 },
346 });
347 }
348 var transformedSelection;
349 if (_this.fieldNodeTransformer == null) {
350 transformedSelection = selection;
351 }
352 else {
353 transformedSelection = _this.fieldNodeTransformer(parentTypeName, newName, selection, fragments, transformationContext);
354 transformedSelection = transformedSelection === undefined ? selection : transformedSelection;
355 }
356 if (transformedSelection == null) {
357 return;
358 }
359 else if (Array.isArray(transformedSelection)) {
360 newSelections = newSelections.concat(transformedSelection);
361 return;
362 }
363 else if (transformedSelection.kind !== graphql.Kind.FIELD) {
364 newSelections.push(transformedSelection);
365 return;
366 }
367 var typeMapping = _this.mapping[parentTypeName];
368 if (typeMapping == null) {
369 newSelections.push(transformedSelection);
370 return;
371 }
372 var oldName = _this.mapping[parentTypeName][newName];
373 if (oldName == null) {
374 newSelections.push(transformedSelection);
375 return;
376 }
377 newSelections.push(tslib.__assign(tslib.__assign({}, transformedSelection), { name: {
378 kind: graphql.Kind.NAME,
379 value: oldName,
380 }, alias: {
381 kind: graphql.Kind.NAME,
382 value: (_b = (_a = transformedSelection.alias) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : newName,
383 } }));
384 });
385 return tslib.__assign(tslib.__assign({}, node), { selections: newSelections });
386 };
387 return TransformCompositeFields;
388}());
389
390var TransformObjectFields = /** @class */ (function () {
391 function TransformObjectFields(objectFieldTransformer, fieldNodeTransformer) {
392 this.objectFieldTransformer = objectFieldTransformer;
393 this.fieldNodeTransformer = fieldNodeTransformer;
394 }
395 TransformObjectFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
396 var _this = this;
397 var compositeToObjectFieldTransformer = function (typeName, fieldName, fieldConfig) {
398 if (graphql.isObjectType(originalWrappingSchema.getType(typeName))) {
399 return _this.objectFieldTransformer(typeName, fieldName, fieldConfig);
400 }
401 return undefined;
402 };
403 this.transformer = new TransformCompositeFields(compositeToObjectFieldTransformer, this.fieldNodeTransformer);
404 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
405 };
406 TransformObjectFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
407 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
408 };
409 TransformObjectFields.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
410 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
411 };
412 return TransformObjectFields;
413}());
414
415var TransformRootFields = /** @class */ (function () {
416 function TransformRootFields(rootFieldTransformer, fieldNodeTransformer) {
417 this.rootFieldTransformer = rootFieldTransformer;
418 this.fieldNodeTransformer = fieldNodeTransformer;
419 }
420 TransformRootFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
421 var _this = this;
422 var _a, _b, _c;
423 var queryTypeName = (_a = originalWrappingSchema.getQueryType()) === null || _a === void 0 ? void 0 : _a.name;
424 var mutationTypeName = (_b = originalWrappingSchema.getMutationType()) === null || _b === void 0 ? void 0 : _b.name;
425 var subscriptionTypeName = (_c = originalWrappingSchema.getSubscriptionType()) === null || _c === void 0 ? void 0 : _c.name;
426 var rootToObjectFieldTransformer = function (typeName, fieldName, fieldConfig) {
427 if (typeName === queryTypeName) {
428 return _this.rootFieldTransformer('Query', fieldName, fieldConfig);
429 }
430 if (typeName === mutationTypeName) {
431 return _this.rootFieldTransformer('Mutation', fieldName, fieldConfig);
432 }
433 if (typeName === subscriptionTypeName) {
434 return _this.rootFieldTransformer('Subscription', fieldName, fieldConfig);
435 }
436 return undefined;
437 };
438 this.transformer = new TransformObjectFields(rootToObjectFieldTransformer, this.fieldNodeTransformer);
439 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
440 };
441 TransformRootFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
442 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
443 };
444 TransformRootFields.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
445 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
446 };
447 return TransformRootFields;
448}());
449
450var RenameRootFields = /** @class */ (function () {
451 function RenameRootFields(renamer) {
452 this.transformer = new TransformRootFields(function (operation, fieldName, fieldConfig) { return [renamer(operation, fieldName, fieldConfig), fieldConfig]; });
453 }
454 RenameRootFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
455 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
456 };
457 RenameRootFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
458 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
459 };
460 return RenameRootFields;
461}());
462
463var FilterRootFields = /** @class */ (function () {
464 function FilterRootFields(filter) {
465 this.transformer = new TransformRootFields(function (operation, fieldName, fieldConfig) {
466 if (filter(operation, fieldName, fieldConfig)) {
467 return undefined;
468 }
469 return null;
470 });
471 }
472 FilterRootFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
473 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
474 };
475 return FilterRootFields;
476}());
477
478var RenameObjectFields = /** @class */ (function () {
479 function RenameObjectFields(renamer) {
480 this.transformer = new TransformObjectFields(function (typeName, fieldName, fieldConfig) { return [
481 renamer(typeName, fieldName, fieldConfig),
482 fieldConfig,
483 ]; });
484 }
485 RenameObjectFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
486 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
487 };
488 RenameObjectFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
489 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
490 };
491 return RenameObjectFields;
492}());
493
494var FilterObjectFields = /** @class */ (function () {
495 function FilterObjectFields(filter) {
496 this.transformer = new TransformObjectFields(function (typeName, fieldName, fieldConfig) {
497 return filter(typeName, fieldName, fieldConfig) ? undefined : null;
498 });
499 }
500 FilterObjectFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
501 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
502 };
503 return FilterObjectFields;
504}());
505
506var TransformInterfaceFields = /** @class */ (function () {
507 function TransformInterfaceFields(interfaceFieldTransformer, fieldNodeTransformer) {
508 this.interfaceFieldTransformer = interfaceFieldTransformer;
509 this.fieldNodeTransformer = fieldNodeTransformer;
510 }
511 TransformInterfaceFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
512 var _this = this;
513 var compositeToObjectFieldTransformer = function (typeName, fieldName, fieldConfig) {
514 if (graphql.isInterfaceType(originalWrappingSchema.getType(typeName))) {
515 return _this.interfaceFieldTransformer(typeName, fieldName, fieldConfig);
516 }
517 return undefined;
518 };
519 this.transformer = new TransformCompositeFields(compositeToObjectFieldTransformer, this.fieldNodeTransformer);
520 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
521 };
522 TransformInterfaceFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
523 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
524 };
525 TransformInterfaceFields.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
526 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
527 };
528 return TransformInterfaceFields;
529}());
530
531var RenameInterfaceFields = /** @class */ (function () {
532 function RenameInterfaceFields(renamer) {
533 this.transformer = new TransformInterfaceFields(function (typeName, fieldName, fieldConfig) { return [
534 renamer(typeName, fieldName, fieldConfig),
535 fieldConfig,
536 ]; });
537 }
538 RenameInterfaceFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
539 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
540 };
541 RenameInterfaceFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
542 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
543 };
544 return RenameInterfaceFields;
545}());
546
547var FilterInterfaceFields = /** @class */ (function () {
548 function FilterInterfaceFields(filter) {
549 this.transformer = new TransformInterfaceFields(function (typeName, fieldName, fieldConfig) {
550 return filter(typeName, fieldName, fieldConfig) ? undefined : null;
551 });
552 }
553 FilterInterfaceFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
554 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
555 };
556 return FilterInterfaceFields;
557}());
558
559var TransformInputObjectFields = /** @class */ (function () {
560 function TransformInputObjectFields(inputFieldTransformer, inputFieldNodeTransformer, inputObjectNodeTransformer) {
561 this.inputFieldTransformer = inputFieldTransformer;
562 this.inputFieldNodeTransformer = inputFieldNodeTransformer;
563 this.inputObjectNodeTransformer = inputObjectNodeTransformer;
564 this.mapping = {};
565 }
566 TransformInputObjectFields.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
567 var _a;
568 var _this = this;
569 this.transformedSchema = utils.mapSchema(originalWrappingSchema, (_a = {},
570 _a[utils.MapperKind.INPUT_OBJECT_FIELD] = function (inputFieldConfig, fieldName, typeName) {
571 var transformedInputField = _this.inputFieldTransformer(typeName, fieldName, inputFieldConfig);
572 if (Array.isArray(transformedInputField)) {
573 var newFieldName = transformedInputField[0];
574 if (newFieldName !== fieldName) {
575 if (!(typeName in _this.mapping)) {
576 _this.mapping[typeName] = {};
577 }
578 _this.mapping[typeName][newFieldName] = fieldName;
579 }
580 }
581 return transformedInputField;
582 },
583 _a));
584 return this.transformedSchema;
585 };
586 TransformInputObjectFields.prototype.transformRequest = function (originalRequest, delegationContext, _transformationContext) {
587 var _this = this;
588 var variableValues = originalRequest.variables;
589 var fragments = Object.create(null);
590 var operations = [];
591 originalRequest.document.definitions.forEach(function (def) {
592 if (def.kind === graphql.Kind.OPERATION_DEFINITION) {
593 operations.push(def);
594 }
595 else {
596 fragments[def.name.value] = def;
597 }
598 });
599 operations.forEach(function (def) {
600 var variableDefs = def.variableDefinitions;
601 if (variableDefs != null) {
602 variableDefs.forEach(function (variableDef) {
603 var varName = variableDef.variable.name.value;
604 // requirement for 'as NamedTypeNode' appears to be a bug within types, as function should take any TypeNode
605 var varType = graphql.typeFromAST(delegationContext.transformedSchema, variableDef.type);
606 variableValues[varName] = utils.transformInputValue(varType, variableValues[varName], undefined, function (type, originalValue) {
607 var newValue = Object.create(null);
608 var fields = type.getFields();
609 Object.keys(originalValue).forEach(function (key) {
610 var _a;
611 var field = fields[key];
612 if (field != null) {
613 var newFieldName = (_a = _this.mapping[type.name]) === null || _a === void 0 ? void 0 : _a[field.name];
614 if (newFieldName != null) {
615 newValue[newFieldName] = originalValue[field.name];
616 }
617 else {
618 newValue[field.name] = originalValue[field.name];
619 }
620 }
621 });
622 return newValue;
623 });
624 });
625 }
626 });
627 originalRequest.document.definitions
628 .filter(function (def) { return def.kind === graphql.Kind.FRAGMENT_DEFINITION; })
629 .forEach(function (def) {
630 fragments[def.name.value] = def;
631 });
632 var document = this.transformDocument(originalRequest.document, this.mapping, this.inputFieldNodeTransformer, this.inputObjectNodeTransformer, originalRequest, delegationContext);
633 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document, variables: variableValues });
634 };
635 TransformInputObjectFields.prototype.transformDocument = function (document, mapping, inputFieldNodeTransformer, inputObjectNodeTransformer, request, delegationContext) {
636 var _a;
637 var typeInfo = new graphql.TypeInfo(this.transformedSchema);
638 var newDocument = graphql.visit(document, graphql.visitWithTypeInfo(typeInfo, {
639 leave: (_a = {},
640 _a[graphql.Kind.OBJECT] = function (node) {
641 var parentType = typeInfo.getInputType();
642 if (parentType != null) {
643 var parentTypeName_1 = parentType.name;
644 var newInputFields_1 = [];
645 node.fields.forEach(function (inputField) {
646 var newName = inputField.name.value;
647 var transformedInputField = inputFieldNodeTransformer != null
648 ? inputFieldNodeTransformer(parentTypeName_1, newName, inputField, request, delegationContext)
649 : inputField;
650 if (Array.isArray(transformedInputField)) {
651 transformedInputField.forEach(function (individualTransformedInputField) {
652 var typeMapping = mapping[parentTypeName_1];
653 if (typeMapping == null) {
654 newInputFields_1.push(individualTransformedInputField);
655 return;
656 }
657 var oldName = typeMapping[newName];
658 if (oldName == null) {
659 newInputFields_1.push(individualTransformedInputField);
660 return;
661 }
662 newInputFields_1.push(tslib.__assign(tslib.__assign({}, individualTransformedInputField), { name: tslib.__assign(tslib.__assign({}, individualTransformedInputField.name), { value: oldName }) }));
663 });
664 return;
665 }
666 var typeMapping = mapping[parentTypeName_1];
667 if (typeMapping == null) {
668 newInputFields_1.push(transformedInputField);
669 return;
670 }
671 var oldName = typeMapping[newName];
672 if (oldName == null) {
673 newInputFields_1.push(transformedInputField);
674 return;
675 }
676 newInputFields_1.push(tslib.__assign(tslib.__assign({}, transformedInputField), { name: tslib.__assign(tslib.__assign({}, transformedInputField.name), { value: oldName }) }));
677 });
678 var newNode = tslib.__assign(tslib.__assign({}, node), { fields: newInputFields_1 });
679 return inputObjectNodeTransformer != null
680 ? inputObjectNodeTransformer(parentTypeName_1, newNode, request, delegationContext)
681 : newNode;
682 }
683 },
684 _a),
685 }));
686 return newDocument;
687 };
688 return TransformInputObjectFields;
689}());
690
691var RenameInputObjectFields = /** @class */ (function () {
692 function RenameInputObjectFields(renamer) {
693 var _this = this;
694 this.renamer = renamer;
695 this.transformer = new TransformInputObjectFields(function (typeName, inputFieldName, inputFieldConfig) {
696 var newName = renamer(typeName, inputFieldName, inputFieldConfig);
697 if (newName !== undefined && newName !== inputFieldName) {
698 return [renamer(typeName, inputFieldName, inputFieldConfig), inputFieldConfig];
699 }
700 }, function (typeName, inputFieldName, inputFieldNode) {
701 if (!(typeName in _this.reverseMap)) {
702 return inputFieldNode;
703 }
704 var inputFieldNameMap = _this.reverseMap[typeName];
705 if (!(inputFieldName in inputFieldNameMap)) {
706 return inputFieldNode;
707 }
708 return tslib.__assign(tslib.__assign({}, inputFieldNode), { name: tslib.__assign(tslib.__assign({}, inputFieldNode.name), { value: inputFieldNameMap[inputFieldName] }) });
709 });
710 this.reverseMap = Object.create(null);
711 }
712 RenameInputObjectFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
713 var _a;
714 var _this = this;
715 utils.mapSchema(originalWrappingSchema, (_a = {},
716 _a[utils.MapperKind.INPUT_OBJECT_FIELD] = function (inputFieldConfig, fieldName, typeName) {
717 var newName = _this.renamer(typeName, fieldName, inputFieldConfig);
718 if (newName !== undefined && newName !== fieldName) {
719 if (_this.reverseMap[typeName] == null) {
720 _this.reverseMap[typeName] = Object.create(null);
721 }
722 _this.reverseMap[typeName][newName] = fieldName;
723 }
724 return undefined;
725 },
726 _a[utils.MapperKind.ROOT_OBJECT] = function () {
727 return undefined;
728 },
729 _a));
730 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
731 };
732 RenameInputObjectFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
733 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
734 };
735 return RenameInputObjectFields;
736}());
737
738var FilterInputObjectFields = /** @class */ (function () {
739 function FilterInputObjectFields(filter, inputObjectNodeTransformer) {
740 this.transformer = new TransformInputObjectFields(function (typeName, fieldName, inputFieldConfig) {
741 return filter(typeName, fieldName, inputFieldConfig) ? undefined : null;
742 }, undefined, inputObjectNodeTransformer);
743 }
744 FilterInputObjectFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
745 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
746 };
747 FilterInputObjectFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
748 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
749 };
750 return FilterInputObjectFields;
751}());
752
753var MapLeafValues = /** @class */ (function () {
754 function MapLeafValues(inputValueTransformer, outputValueTransformer) {
755 this.inputValueTransformer = inputValueTransformer;
756 this.outputValueTransformer = outputValueTransformer;
757 this.resultVisitorMap = Object.create(null);
758 }
759 MapLeafValues.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
760 var _this = this;
761 this.originalWrappingSchema = originalWrappingSchema;
762 var typeMap = originalWrappingSchema.getTypeMap();
763 Object.keys(typeMap).forEach(function (typeName) {
764 var type = typeMap[typeName];
765 if (!typeName.startsWith('__')) {
766 if (graphql.isLeafType(type)) {
767 _this.resultVisitorMap[typeName] = function (value) { return _this.outputValueTransformer(typeName, value); };
768 }
769 }
770 });
771 this.typeInfo = new graphql.TypeInfo(originalWrappingSchema);
772 return originalWrappingSchema;
773 };
774 MapLeafValues.prototype.transformRequest = function (originalRequest, _delegationContext, transformationContext) {
775 var document = originalRequest.document;
776 var variableValues = originalRequest.variables;
777 var operations = document.definitions.filter(function (def) { return def.kind === graphql.Kind.OPERATION_DEFINITION; });
778 var fragments = document.definitions.filter(function (def) { return def.kind === graphql.Kind.FRAGMENT_DEFINITION; });
779 var newOperations = this.transformOperations(operations, variableValues);
780 var transformedRequest = tslib.__assign(tslib.__assign({}, originalRequest), { document: tslib.__assign(tslib.__assign({}, document), { definitions: tslib.__spread(newOperations, fragments) }), variables: variableValues });
781 transformationContext.transformedRequest = transformedRequest;
782 return transformedRequest;
783 };
784 MapLeafValues.prototype.transformResult = function (originalResult, _delegationContext, transformationContext) {
785 return utils.visitResult(originalResult, transformationContext.transformedRequest, this.originalWrappingSchema, this.resultVisitorMap);
786 };
787 MapLeafValues.prototype.transformOperations = function (operations, variableValues) {
788 var _this = this;
789 return operations.map(function (operation) {
790 var _a;
791 var variableDefinitionMap = operation.variableDefinitions.reduce(function (prev, def) {
792 var _a;
793 return (tslib.__assign(tslib.__assign({}, prev), (_a = {}, _a[def.variable.name.value] = def, _a)));
794 }, {});
795 var newOperation = graphql.visit(operation, graphql.visitWithTypeInfo(_this.typeInfo, (_a = {},
796 _a[graphql.Kind.FIELD] = function (node) { return _this.transformFieldNode(node, variableDefinitionMap, variableValues); },
797 _a)));
798 return tslib.__assign(tslib.__assign({}, newOperation), { variableDefinitions: Object.keys(variableDefinitionMap).map(function (varName) { return variableDefinitionMap[varName]; }) });
799 });
800 };
801 MapLeafValues.prototype.transformFieldNode = function (field, variableDefinitionMap, variableValues) {
802 var _this = this;
803 var targetField = this.typeInfo.getFieldDef();
804 if (!targetField.name.startsWith('__')) {
805 var argumentNodes = field.arguments;
806 if (argumentNodes != null) {
807 var argumentNodeMap_1 = argumentNodes.reduce(function (prev, argument) {
808 var _a;
809 return (tslib.__assign(tslib.__assign({}, prev), (_a = {}, _a[argument.name.value] = argument, _a)));
810 }, Object.create(null));
811 targetField.args.forEach(function (argument) {
812 var argName = argument.name;
813 var argType = argument.type;
814 var argumentNode = argumentNodeMap_1[argName];
815 var argValue = argumentNode === null || argumentNode === void 0 ? void 0 : argumentNode.value;
816 var value;
817 if (argValue != null) {
818 value = graphql.valueFromAST(argValue, argType, variableValues);
819 }
820 utils.updateArgument(argName, argType, argumentNodeMap_1, variableDefinitionMap, variableValues, utils.transformInputValue(argType, value, function (t, v) {
821 var newValue = _this.inputValueTransformer(t.name, v);
822 return newValue === undefined ? v : newValue;
823 }));
824 });
825 return tslib.__assign(tslib.__assign({}, field), { arguments: Object.keys(argumentNodeMap_1).map(function (argName) { return argumentNodeMap_1[argName]; }) });
826 }
827 }
828 };
829 return MapLeafValues;
830}());
831
832var TransformEnumValues = /** @class */ (function () {
833 function TransformEnumValues(enumValueTransformer, inputValueTransformer, outputValueTransformer) {
834 this.enumValueTransformer = enumValueTransformer;
835 this.mapping = Object.create(null);
836 this.reverseMapping = Object.create(null);
837 this.transformer = new MapLeafValues(generateValueTransformer(inputValueTransformer, this.reverseMapping), generateValueTransformer(outputValueTransformer, this.mapping));
838 }
839 TransformEnumValues.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
840 var _a;
841 var _this = this;
842 var mappingSchema = this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
843 this.transformedSchema = utils.mapSchema(mappingSchema, (_a = {},
844 _a[utils.MapperKind.ENUM_VALUE] = function (valueConfig, typeName, _schema, externalValue) {
845 return _this.transformEnumValue(typeName, externalValue, valueConfig);
846 },
847 _a));
848 return this.transformedSchema;
849 };
850 TransformEnumValues.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
851 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
852 };
853 TransformEnumValues.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
854 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
855 };
856 TransformEnumValues.prototype.transformEnumValue = function (typeName, externalValue, enumValueConfig) {
857 var transformedEnumValue = this.enumValueTransformer(typeName, externalValue, enumValueConfig);
858 if (Array.isArray(transformedEnumValue)) {
859 var newExternalValue = transformedEnumValue[0];
860 if (newExternalValue !== externalValue) {
861 if (!(typeName in this.mapping)) {
862 this.mapping[typeName] = Object.create(null);
863 this.reverseMapping[typeName] = Object.create(null);
864 }
865 this.mapping[typeName][externalValue] = newExternalValue;
866 this.reverseMapping[typeName][newExternalValue] = externalValue;
867 }
868 }
869 return transformedEnumValue;
870 };
871 return TransformEnumValues;
872}());
873function mapEnumValues(typeName, value, mapping) {
874 var _a;
875 var newExternalValue = (_a = mapping[typeName]) === null || _a === void 0 ? void 0 : _a[value];
876 return newExternalValue != null ? newExternalValue : value;
877}
878function generateValueTransformer(valueTransformer, mapping) {
879 if (valueTransformer == null) {
880 return function (typeName, value) { return mapEnumValues(typeName, value, mapping); };
881 }
882 else {
883 return function (typeName, value) { return mapEnumValues(typeName, valueTransformer(typeName, value), mapping); };
884 }
885}
886
887var TransformQuery = /** @class */ (function () {
888 function TransformQuery(_a) {
889 var path = _a.path, queryTransformer = _a.queryTransformer, _b = _a.resultTransformer, resultTransformer = _b === void 0 ? function (result) { return result; } : _b, _c = _a.errorPathTransformer, errorPathTransformer = _c === void 0 ? function (errorPath) { return [].concat(errorPath); } : _c, _d = _a.fragments, fragments = _d === void 0 ? {} : _d;
890 this.path = path;
891 this.queryTransformer = queryTransformer;
892 this.resultTransformer = resultTransformer;
893 this.errorPathTransformer = errorPathTransformer;
894 this.fragments = fragments;
895 }
896 TransformQuery.prototype.transformRequest = function (originalRequest, _delegationContext, _transformationContext) {
897 var _a;
898 var _this = this;
899 var pathLength = this.path.length;
900 var index = 0;
901 var document = graphql.visit(originalRequest.document, (_a = {},
902 _a[graphql.Kind.FIELD] = {
903 enter: function (node) {
904 if (index === pathLength || node.name.value !== _this.path[index]) {
905 return false;
906 }
907 index++;
908 if (index === pathLength) {
909 var selectionSet = _this.queryTransformer(node.selectionSet, _this.fragments);
910 return tslib.__assign(tslib.__assign({}, node), { selectionSet: selectionSet });
911 }
912 },
913 leave: function () {
914 index--;
915 },
916 },
917 _a));
918 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document });
919 };
920 TransformQuery.prototype.transformResult = function (originalResult, _delegationContext, _transformationContext) {
921 var data = this.transformData(originalResult.data);
922 var errors = originalResult.errors;
923 return {
924 data: data,
925 errors: errors != null ? this.transformErrors(errors) : undefined,
926 };
927 };
928 TransformQuery.prototype.transformData = function (data) {
929 var leafIndex = this.path.length - 1;
930 var index = 0;
931 var newData = data;
932 if (newData) {
933 var next = this.path[index];
934 while (index < leafIndex) {
935 if (data[next]) {
936 newData = newData[next];
937 }
938 else {
939 break;
940 }
941 index++;
942 next = this.path[index];
943 }
944 newData[next] = this.resultTransformer(newData[next]);
945 }
946 return newData;
947 };
948 TransformQuery.prototype.transformErrors = function (errors) {
949 var _this = this;
950 return errors.map(function (error) {
951 var path = error.path;
952 var match = true;
953 var index = 0;
954 while (index < _this.path.length) {
955 if (path[index] !== _this.path[index]) {
956 match = false;
957 break;
958 }
959 index++;
960 }
961 var newPath = match ? path.slice(0, index).concat(_this.errorPathTransformer(path.slice(index))) : path;
962 return utils.relocatedError(error, newPath);
963 });
964 };
965 return TransformQuery;
966}());
967
968var FilterObjectFieldDirectives = /** @class */ (function () {
969 function FilterObjectFieldDirectives(filter) {
970 this.filter = filter;
971 }
972 FilterObjectFieldDirectives.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
973 var _this = this;
974 var transformer = new TransformObjectFields(function (_typeName, _fieldName, fieldConfig) {
975 var keepDirectives = fieldConfig.astNode.directives.filter(function (dir) {
976 var directiveDef = originalWrappingSchema.getDirective(dir.name.value);
977 var directiveValue = directiveDef ? utils.getArgumentValues(directiveDef, dir) : undefined;
978 return _this.filter(dir.name.value, directiveValue);
979 });
980 if (keepDirectives.length !== fieldConfig.astNode.directives.length) {
981 fieldConfig = tslib.__assign(tslib.__assign({}, fieldConfig), { astNode: tslib.__assign(tslib.__assign({}, fieldConfig.astNode), { directives: keepDirectives }) });
982 return fieldConfig;
983 }
984 });
985 return transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
986 };
987 return FilterObjectFieldDirectives;
988}());
989
990var RemoveObjectFieldDirectives = /** @class */ (function () {
991 function RemoveObjectFieldDirectives(directiveName, args) {
992 if (args === void 0) { args = {}; }
993 this.transformer = new FilterObjectFieldDirectives(function (dirName, dirValue) {
994 return !(utils.valueMatchesCriteria(dirName, directiveName) && utils.valueMatchesCriteria(dirValue, args));
995 });
996 }
997 RemoveObjectFieldDirectives.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
998 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
999 };
1000 return RemoveObjectFieldDirectives;
1001}());
1002
1003var RemoveObjectFieldsWithDirective = /** @class */ (function () {
1004 function RemoveObjectFieldsWithDirective(directiveName, args) {
1005 if (args === void 0) { args = {}; }
1006 this.directiveName = directiveName;
1007 this.args = args;
1008 }
1009 RemoveObjectFieldsWithDirective.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1010 var _this = this;
1011 var transformer = new FilterObjectFields(function (_typeName, _fieldName, fieldConfig) {
1012 var valueMap = utils.getDirectives(originalWrappingSchema, fieldConfig);
1013 return !Object.keys(valueMap).some(function (directiveName) {
1014 return utils.valueMatchesCriteria(directiveName, _this.directiveName) &&
1015 ((Array.isArray(valueMap[directiveName]) &&
1016 valueMap[directiveName].some(function (value) { return utils.valueMatchesCriteria(value, _this.args); })) ||
1017 utils.valueMatchesCriteria(valueMap[directiveName], _this.args));
1018 });
1019 });
1020 return transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
1021 };
1022 return RemoveObjectFieldsWithDirective;
1023}());
1024
1025var RemoveObjectFieldDeprecations = /** @class */ (function () {
1026 function RemoveObjectFieldDeprecations(reason) {
1027 var args = { reason: reason };
1028 this.removeDirectives = new FilterObjectFieldDirectives(function (dirName, dirValue) {
1029 return !(dirName === 'deprecated' && utils.valueMatchesCriteria(dirValue, args));
1030 });
1031 this.removeDeprecations = new TransformObjectFields(function (_typeName, _fieldName, fieldConfig) {
1032 if (fieldConfig.deprecationReason && utils.valueMatchesCriteria(fieldConfig.deprecationReason, reason)) {
1033 fieldConfig = tslib.__assign({}, fieldConfig);
1034 delete fieldConfig.deprecationReason;
1035 }
1036 return fieldConfig;
1037 });
1038 }
1039 RemoveObjectFieldDeprecations.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1040 return this.removeDeprecations.transformSchema(this.removeDirectives.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema), subschemaConfig, transformedSchema);
1041 };
1042 return RemoveObjectFieldDeprecations;
1043}());
1044
1045var RemoveObjectFieldsWithDeprecation = /** @class */ (function () {
1046 function RemoveObjectFieldsWithDeprecation(reason) {
1047 this.transformer = new FilterObjectFields(function (_typeName, _fieldName, fieldConfig) {
1048 if (fieldConfig.deprecationReason) {
1049 return !utils.valueMatchesCriteria(fieldConfig.deprecationReason, reason);
1050 }
1051 return true;
1052 });
1053 }
1054 RemoveObjectFieldsWithDeprecation.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1055 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
1056 };
1057 return RemoveObjectFieldsWithDeprecation;
1058}());
1059
1060var PruneTypes = /** @class */ (function () {
1061 function PruneTypes(options) {
1062 if (options === void 0) { options = {}; }
1063 this.options = options;
1064 }
1065 PruneTypes.prototype.transformSchema = function (originalWrappingSchema, _subschemaConfig, _transformedSchema) {
1066 return utils.pruneSchema(originalWrappingSchema, this.options);
1067 };
1068 return PruneTypes;
1069}());
1070
1071var MapFields = /** @class */ (function () {
1072 function MapFields(fieldNodeTransformerMap, objectValueTransformerMap, errorsTransformer) {
1073 this.fieldNodeTransformerMap = fieldNodeTransformerMap;
1074 this.objectValueTransformerMap = objectValueTransformerMap;
1075 this.errorsTransformer = errorsTransformer;
1076 }
1077 MapFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1078 var _this = this;
1079 var _a;
1080 var subscriptionTypeName = (_a = originalWrappingSchema.getSubscriptionType()) === null || _a === void 0 ? void 0 : _a.name;
1081 this.transformer = new TransformCompositeFields(function () { return undefined; }, function (typeName, fieldName, fieldNode, fragments, transformationContext) {
1082 var typeTransformers = _this.fieldNodeTransformerMap[typeName];
1083 if (typeTransformers == null) {
1084 return undefined;
1085 }
1086 var fieldNodeTransformer = typeTransformers[fieldName];
1087 if (fieldNodeTransformer == null) {
1088 return undefined;
1089 }
1090 return fieldNodeTransformer(fieldNode, fragments, transformationContext);
1091 }, this.objectValueTransformerMap != null
1092 ? function (data, transformationContext) {
1093 if (data == null) {
1094 return data;
1095 }
1096 var typeName = data.__typename;
1097 if (typeName == null) {
1098 // see https://github.com/ardatan/graphql-tools/issues/2282
1099 typeName = subscriptionTypeName;
1100 if (typeName == null) {
1101 return data;
1102 }
1103 }
1104 var transformer = _this.objectValueTransformerMap[typeName];
1105 if (transformer == null) {
1106 return data;
1107 }
1108 return transformer(data, transformationContext);
1109 }
1110 : undefined, this.errorsTransformer != null ? this.errorsTransformer : undefined);
1111 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
1112 };
1113 MapFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
1114 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
1115 };
1116 MapFields.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
1117 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
1118 };
1119 return MapFields;
1120}());
1121
1122var WrapFields = /** @class */ (function () {
1123 function WrapFields(outerTypeName, wrappingFieldNames, wrappingTypeNames, fieldNames, prefix) {
1124 var _a, _b, _c;
1125 if (prefix === void 0) { prefix = 'gqtld'; }
1126 this.outerTypeName = outerTypeName;
1127 this.wrappingFieldNames = wrappingFieldNames;
1128 this.wrappingTypeNames = wrappingTypeNames;
1129 this.numWraps = wrappingFieldNames.length;
1130 this.fieldNames = fieldNames;
1131 var remainingWrappingFieldNames = this.wrappingFieldNames.slice();
1132 var outerMostWrappingFieldName = remainingWrappingFieldNames.shift();
1133 this.transformer = new MapFields((_a = {},
1134 _a[outerTypeName] = (_b = {},
1135 _b[outerMostWrappingFieldName] = function (fieldNode, fragments, transformationContext) {
1136 return hoistFieldNodes({
1137 fieldNode: fieldNode,
1138 path: remainingWrappingFieldNames,
1139 fieldNames: fieldNames,
1140 fragments: fragments,
1141 transformationContext: transformationContext,
1142 prefix: prefix,
1143 });
1144 },
1145 _b),
1146 _a), (_c = {},
1147 _c[outerTypeName] = function (value, context) { return dehoistValue(value, context); },
1148 _c), function (errors, context) { return dehoistErrors(errors, context); });
1149 }
1150 WrapFields.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1151 var _a, _b, _c;
1152 var _this = this;
1153 var _d, _e, _f;
1154 var targetFieldConfigMap = utils.selectObjectFields(originalWrappingSchema, this.outerTypeName, !this.fieldNames ? function () { return true; } : function (fieldName) { return _this.fieldNames.includes(fieldName); });
1155 var newTargetFieldConfigMap = Object.create(null);
1156 Object.keys(targetFieldConfigMap).forEach(function (fieldName) {
1157 var field = targetFieldConfigMap[fieldName];
1158 var newField = tslib.__assign(tslib.__assign({}, field), { resolve: delegate.defaultMergedResolver });
1159 newTargetFieldConfigMap[fieldName] = newField;
1160 });
1161 var wrapIndex = this.numWraps - 1;
1162 var wrappingTypeName = this.wrappingTypeNames[wrapIndex];
1163 var wrappingFieldName = this.wrappingFieldNames[wrapIndex];
1164 var newSchema = utils.appendObjectFields(originalWrappingSchema, wrappingTypeName, newTargetFieldConfigMap);
1165 for (wrapIndex--; wrapIndex > -1; wrapIndex--) {
1166 var nextWrappingTypeName = this.wrappingTypeNames[wrapIndex];
1167 newSchema = utils.appendObjectFields(newSchema, nextWrappingTypeName, (_a = {},
1168 _a[wrappingFieldName] = {
1169 type: newSchema.getType(wrappingTypeName),
1170 resolve: delegate.defaultMergedResolver,
1171 },
1172 _a));
1173 wrappingTypeName = nextWrappingTypeName;
1174 wrappingFieldName = this.wrappingFieldNames[wrapIndex];
1175 }
1176 var wrappingRootField = this.outerTypeName === ((_d = originalWrappingSchema.getQueryType()) === null || _d === void 0 ? void 0 : _d.name) ||
1177 this.outerTypeName === ((_e = originalWrappingSchema.getMutationType()) === null || _e === void 0 ? void 0 : _e.name);
1178 var resolve;
1179 if (transformedSchema) {
1180 if (wrappingRootField) {
1181 var targetSchema = subschemaConfig.schema;
1182 var operation = this.outerTypeName === targetSchema.getQueryType().name ? 'query' : 'mutation';
1183 var createProxyingResolver = (_f = subschemaConfig.createProxyingResolver) !== null && _f !== void 0 ? _f : defaultCreateProxyingResolver;
1184 resolve = createProxyingResolver({
1185 subschemaConfig: subschemaConfig,
1186 transformedSchema: transformedSchema,
1187 operation: operation,
1188 fieldName: wrappingFieldName,
1189 });
1190 }
1191 else {
1192 resolve = delegate.defaultMergedResolver;
1193 }
1194 }
1195 var selectedFieldNames = Object.keys(newTargetFieldConfigMap);
1196 _c = tslib.__read(utils.modifyObjectFields(newSchema, this.outerTypeName, function (fieldName) { return selectedFieldNames.includes(fieldName); }, (_b = {},
1197 _b[wrappingFieldName] = {
1198 type: newSchema.getType(wrappingTypeName),
1199 resolve: resolve,
1200 },
1201 _b)), 1), newSchema = _c[0];
1202 return this.transformer.transformSchema(newSchema, subschemaConfig, transformedSchema);
1203 };
1204 WrapFields.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
1205 transformationContext.nextIndex = 0;
1206 transformationContext.paths = Object.create(null);
1207 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
1208 };
1209 WrapFields.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
1210 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
1211 };
1212 return WrapFields;
1213}());
1214function collectFields(selectionSet, fragments, fields, visitedFragmentNames) {
1215 if (fields === void 0) { fields = []; }
1216 if (visitedFragmentNames === void 0) { visitedFragmentNames = {}; }
1217 if (selectionSet != null) {
1218 selectionSet.selections.forEach(function (selection) {
1219 switch (selection.kind) {
1220 case graphql.Kind.FIELD:
1221 fields.push(selection);
1222 break;
1223 case graphql.Kind.INLINE_FRAGMENT:
1224 collectFields(selection.selectionSet, fragments, fields, visitedFragmentNames);
1225 break;
1226 case graphql.Kind.FRAGMENT_SPREAD: {
1227 var fragmentName = selection.name.value;
1228 if (!visitedFragmentNames[fragmentName]) {
1229 visitedFragmentNames[fragmentName] = true;
1230 collectFields(fragments[fragmentName].selectionSet, fragments, fields, visitedFragmentNames);
1231 }
1232 break;
1233 }
1234 }
1235 });
1236 }
1237 return fields;
1238}
1239function aliasFieldNode(fieldNode, str) {
1240 return tslib.__assign(tslib.__assign({}, fieldNode), { alias: {
1241 kind: graphql.Kind.NAME,
1242 value: str,
1243 } });
1244}
1245function hoistFieldNodes(_a) {
1246 var fieldNode = _a.fieldNode, fieldNames = _a.fieldNames, path = _a.path, fragments = _a.fragments, transformationContext = _a.transformationContext, prefix = _a.prefix, _b = _a.index, index = _b === void 0 ? 0 : _b, _c = _a.wrappingPath, wrappingPath = _c === void 0 ? [] : _c;
1247 var alias = fieldNode.alias != null ? fieldNode.alias.value : fieldNode.name.value;
1248 var newFieldNodes = [];
1249 if (index < path.length) {
1250 var pathSegment_1 = path[index];
1251 collectFields(fieldNode.selectionSet, fragments).forEach(function (possibleFieldNode) {
1252 if (possibleFieldNode.name.value === pathSegment_1) {
1253 var newWrappingPath = wrappingPath.concat([alias]);
1254 newFieldNodes = newFieldNodes.concat(hoistFieldNodes({
1255 fieldNode: possibleFieldNode,
1256 fieldNames: fieldNames,
1257 path: path,
1258 fragments: fragments,
1259 transformationContext: transformationContext,
1260 prefix: prefix,
1261 index: index + 1,
1262 wrappingPath: newWrappingPath,
1263 }));
1264 }
1265 });
1266 }
1267 else {
1268 collectFields(fieldNode.selectionSet, fragments).forEach(function (possibleFieldNode) {
1269 if (!fieldNames || fieldNames.includes(possibleFieldNode.name.value)) {
1270 var nextIndex = transformationContext.nextIndex;
1271 transformationContext.nextIndex++;
1272 var indexingAlias = "__" + prefix + nextIndex + "__";
1273 transformationContext.paths[indexingAlias] = {
1274 pathToField: wrappingPath.concat([alias]),
1275 alias: possibleFieldNode.alias != null ? possibleFieldNode.alias.value : possibleFieldNode.name.value,
1276 };
1277 newFieldNodes.push(aliasFieldNode(possibleFieldNode, indexingAlias));
1278 }
1279 });
1280 }
1281 return newFieldNodes;
1282}
1283function dehoistValue(originalValue, context) {
1284 if (originalValue == null) {
1285 return originalValue;
1286 }
1287 var newValue = Object.create(null);
1288 Object.keys(originalValue).forEach(function (alias) {
1289 var obj = newValue;
1290 var path = context.paths[alias];
1291 if (path == null) {
1292 newValue[alias] = originalValue[alias];
1293 return;
1294 }
1295 var pathToField = path.pathToField;
1296 var fieldAlias = path.alias;
1297 pathToField.forEach(function (key) {
1298 obj = obj[key] = obj[key] || Object.create(null);
1299 });
1300 obj[fieldAlias] = originalValue[alias];
1301 });
1302 return newValue;
1303}
1304function dehoistErrors(errors, context) {
1305 if (errors === undefined) {
1306 return undefined;
1307 }
1308 return errors.map(function (error) {
1309 var originalPath = error.path;
1310 if (originalPath == null) {
1311 return error;
1312 }
1313 var newPath = [];
1314 originalPath.forEach(function (pathSegment) {
1315 if (typeof pathSegment !== 'string') {
1316 newPath.push(pathSegment);
1317 return;
1318 }
1319 var path = context.paths[pathSegment];
1320 if (path == null) {
1321 newPath.push(pathSegment);
1322 return;
1323 }
1324 newPath = newPath.concat(path.pathToField, [path.alias]);
1325 });
1326 return utils.relocatedError(error, newPath);
1327 });
1328}
1329
1330var WrapType = /** @class */ (function () {
1331 function WrapType(outerTypeName, innerTypeName, fieldName) {
1332 this.transformer = new WrapFields(outerTypeName, [fieldName], [innerTypeName]);
1333 }
1334 WrapType.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1335 return this.transformer.transformSchema(originalWrappingSchema, subschemaConfig, transformedSchema);
1336 };
1337 WrapType.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
1338 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
1339 };
1340 WrapType.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
1341 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
1342 };
1343 return WrapType;
1344}());
1345
1346var HoistField = /** @class */ (function () {
1347 function HoistField(typeName, pathConfig, newFieldName, alias) {
1348 var _a, _b, _c;
1349 if (alias === void 0) { alias = '__gqtlw__'; }
1350 this.typeName = typeName;
1351 this.newFieldName = newFieldName;
1352 var path = pathConfig.map(function (segment) { return (typeof segment === 'string' ? segment : segment.fieldName); });
1353 this.argFilters = pathConfig.map(function (segment, index) {
1354 if (typeof segment === 'string' || segment.argFilter == null) {
1355 return index === pathConfig.length - 1 ? function () { return true; } : function () { return false; };
1356 }
1357 return segment.argFilter;
1358 });
1359 var pathToField = path.slice();
1360 var oldFieldName = pathToField.pop();
1361 this.oldFieldName = oldFieldName;
1362 this.pathToField = pathToField;
1363 var argLevels = Object.create(null);
1364 this.transformer = new MapFields((_a = {},
1365 _a[typeName] = (_b = {},
1366 _b[newFieldName] = function (fieldNode) {
1367 return wrapFieldNode(renameFieldNode(fieldNode, oldFieldName), pathToField, alias, argLevels);
1368 },
1369 _b),
1370 _a), (_c = {},
1371 _c[typeName] = function (value) { return unwrapValue(value, alias); },
1372 _c), function (errors) { return unwrapErrors(errors, alias); });
1373 this.argLevels = argLevels;
1374 }
1375 HoistField.prototype.transformSchema = function (originalWrappingSchema, subschemaConfig, transformedSchema) {
1376 var _a;
1377 var _this = this;
1378 var _b, _c, _d;
1379 var argsMap = Object.create(null);
1380 var innerType = this.pathToField.reduce(function (acc, pathSegment, index) {
1381 var field = acc.getFields()[pathSegment];
1382 field.args.forEach(function (arg) {
1383 if (_this.argFilters[index](arg)) {
1384 argsMap[arg.name] = arg;
1385 _this.argLevels[arg.name] = index;
1386 }
1387 });
1388 return graphql.getNullableType(field.type);
1389 }, originalWrappingSchema.getType(this.typeName));
1390 var _e = tslib.__read(utils.removeObjectFields(originalWrappingSchema, innerType.name, function (fieldName) { return fieldName === _this.oldFieldName; }), 2), newSchema = _e[0], targetFieldConfigMap = _e[1];
1391 var targetField = targetFieldConfigMap[this.oldFieldName];
1392 var resolve;
1393 if (transformedSchema) {
1394 var hoistingToRootField = this.typeName === ((_b = originalWrappingSchema.getQueryType()) === null || _b === void 0 ? void 0 : _b.name) ||
1395 this.typeName === ((_c = originalWrappingSchema.getMutationType()) === null || _c === void 0 ? void 0 : _c.name);
1396 if (hoistingToRootField) {
1397 var targetSchema = subschemaConfig.schema;
1398 var operation = this.typeName === targetSchema.getQueryType().name ? 'query' : 'mutation';
1399 var createProxyingResolver = (_d = subschemaConfig.createProxyingResolver) !== null && _d !== void 0 ? _d : defaultCreateProxyingResolver;
1400 resolve = createProxyingResolver({
1401 subschemaConfig: subschemaConfig,
1402 transformedSchema: transformedSchema,
1403 operation: operation,
1404 fieldName: this.newFieldName,
1405 });
1406 }
1407 else {
1408 resolve = delegate.defaultMergedResolver;
1409 }
1410 }
1411 var newTargetField = tslib.__assign(tslib.__assign({}, targetField), { resolve: resolve });
1412 var level = this.pathToField.length;
1413 Object.keys(targetField.args).forEach(function (argName) {
1414 var argConfig = targetField.args[argName];
1415 var arg = tslib.__assign(tslib.__assign({}, argConfig), { name: argName, description: argConfig.description, defaultValue: argConfig.defaultValue, extensions: argConfig.extensions, astNode: argConfig.astNode });
1416 if (_this.argFilters[level](arg)) {
1417 argsMap[argName] = arg;
1418 _this.argLevels[arg.name] = level;
1419 }
1420 });
1421 newTargetField.args = argsMap;
1422 newSchema = utils.appendObjectFields(newSchema, this.typeName, (_a = {},
1423 _a[this.newFieldName] = newTargetField,
1424 _a));
1425 return this.transformer.transformSchema(newSchema, subschemaConfig, transformedSchema);
1426 };
1427 HoistField.prototype.transformRequest = function (originalRequest, delegationContext, transformationContext) {
1428 return this.transformer.transformRequest(originalRequest, delegationContext, transformationContext);
1429 };
1430 HoistField.prototype.transformResult = function (originalResult, delegationContext, transformationContext) {
1431 return this.transformer.transformResult(originalResult, delegationContext, transformationContext);
1432 };
1433 return HoistField;
1434}());
1435function wrapFieldNode(fieldNode, path, alias, argLevels) {
1436 return path.reduceRight(function (acc, fieldName, index) { return ({
1437 kind: graphql.Kind.FIELD,
1438 alias: {
1439 kind: graphql.Kind.NAME,
1440 value: alias,
1441 },
1442 name: {
1443 kind: graphql.Kind.NAME,
1444 value: fieldName,
1445 },
1446 selectionSet: {
1447 kind: graphql.Kind.SELECTION_SET,
1448 selections: [acc],
1449 },
1450 arguments: fieldNode.arguments.filter(function (arg) { return argLevels[arg.name.value] === index; }),
1451 }); }, tslib.__assign(tslib.__assign({}, fieldNode), { arguments: fieldNode.arguments.filter(function (arg) { return argLevels[arg.name.value] === path.length; }) }));
1452}
1453function renameFieldNode(fieldNode, name) {
1454 return tslib.__assign(tslib.__assign({}, fieldNode), { alias: {
1455 kind: graphql.Kind.NAME,
1456 value: fieldNode.alias != null ? fieldNode.alias.value : fieldNode.name.value,
1457 }, name: {
1458 kind: graphql.Kind.NAME,
1459 value: name,
1460 } });
1461}
1462function unwrapValue(originalValue, alias) {
1463 var newValue = originalValue;
1464 var object = newValue[alias];
1465 while (object != null) {
1466 newValue = object;
1467 object = newValue[alias];
1468 }
1469 delete originalValue[alias];
1470 Object.assign(originalValue, newValue);
1471 return originalValue;
1472}
1473function unwrapErrors(errors, alias) {
1474 if (errors === undefined) {
1475 return undefined;
1476 }
1477 return errors.map(function (error) {
1478 var originalPath = error.path;
1479 if (originalPath == null) {
1480 return error;
1481 }
1482 var newPath = originalPath.filter(function (pathSegment) { return pathSegment !== alias; });
1483 return utils.relocatedError(error, newPath);
1484 });
1485}
1486
1487var WrapQuery = /** @class */ (function () {
1488 function WrapQuery(path, wrapper, extractor) {
1489 this.path = path;
1490 this.wrapper = wrapper;
1491 this.extractor = extractor;
1492 }
1493 WrapQuery.prototype.transformRequest = function (originalRequest, _delegationContext, _transformationContext) {
1494 var _a;
1495 var _this = this;
1496 var fieldPath = [];
1497 var ourPath = JSON.stringify(this.path);
1498 var document = graphql.visit(originalRequest.document, (_a = {},
1499 _a[graphql.Kind.FIELD] = {
1500 enter: function (node) {
1501 fieldPath.push(node.name.value);
1502 if (ourPath === JSON.stringify(fieldPath)) {
1503 var wrapResult = _this.wrapper(node.selectionSet);
1504 // Selection can be either a single selection or a selection set. If it's just one selection,
1505 // let's wrap it in a selection set. Otherwise, keep it as is.
1506 var selectionSet = wrapResult != null && wrapResult.kind === graphql.Kind.SELECTION_SET
1507 ? wrapResult
1508 : {
1509 kind: graphql.Kind.SELECTION_SET,
1510 selections: [wrapResult],
1511 };
1512 return tslib.__assign(tslib.__assign({}, node), { selectionSet: selectionSet });
1513 }
1514 },
1515 leave: function () {
1516 fieldPath.pop();
1517 },
1518 },
1519 _a));
1520 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document });
1521 };
1522 WrapQuery.prototype.transformResult = function (originalResult, _delegationContext, _transformationContext) {
1523 var rootData = originalResult.data;
1524 if (rootData != null) {
1525 var data = rootData;
1526 var path = tslib.__spread(this.path);
1527 while (path.length > 1) {
1528 var next = path.shift();
1529 if (data[next]) {
1530 data = data[next];
1531 }
1532 }
1533 data[path[0]] = this.extractor(data[path[0]]);
1534 }
1535 return {
1536 data: rootData,
1537 errors: originalResult.errors,
1538 };
1539 };
1540 return WrapQuery;
1541}());
1542
1543var ExtractField = /** @class */ (function () {
1544 function ExtractField(_a) {
1545 var from = _a.from, to = _a.to;
1546 this.from = from;
1547 this.to = to;
1548 }
1549 ExtractField.prototype.transformRequest = function (originalRequest, _delegationContext, _transformationContext) {
1550 var _a, _b;
1551 var fromSelection;
1552 var ourPathFrom = JSON.stringify(this.from);
1553 var ourPathTo = JSON.stringify(this.to);
1554 var fieldPath = [];
1555 graphql.visit(originalRequest.document, (_a = {},
1556 _a[graphql.Kind.FIELD] = {
1557 enter: function (node) {
1558 fieldPath.push(node.name.value);
1559 if (ourPathFrom === JSON.stringify(fieldPath)) {
1560 fromSelection = node.selectionSet;
1561 return graphql.BREAK;
1562 }
1563 },
1564 leave: function () {
1565 fieldPath.pop();
1566 },
1567 },
1568 _a));
1569 fieldPath = [];
1570 var document = graphql.visit(originalRequest.document, (_b = {},
1571 _b[graphql.Kind.FIELD] = {
1572 enter: function (node) {
1573 fieldPath.push(node.name.value);
1574 if (ourPathTo === JSON.stringify(fieldPath) && fromSelection != null) {
1575 return tslib.__assign(tslib.__assign({}, node), { selectionSet: fromSelection });
1576 }
1577 },
1578 leave: function () {
1579 fieldPath.pop();
1580 },
1581 },
1582 _b));
1583 return tslib.__assign(tslib.__assign({}, originalRequest), { document: document });
1584 };
1585 return ExtractField;
1586}());
1587
1588function makeRemoteExecutableSchema(_a) {
1589 var schemaOrTypeDefs = _a.schema, executor = _a.executor, subscriber = _a.subscriber, _b = _a.createResolver, createResolver = _b === void 0 ? defaultCreateRemoteResolver : _b, buildSchemaOptions = _a.buildSchemaOptions;
1590 var targetSchema = typeof schemaOrTypeDefs === 'string' ? graphql.buildSchema(schemaOrTypeDefs, buildSchemaOptions) : schemaOrTypeDefs;
1591 return wrapSchema({
1592 schema: targetSchema,
1593 createProxyingResolver: function () { return createResolver(executor, subscriber); },
1594 });
1595}
1596function defaultCreateRemoteResolver(executor, subscriber) {
1597 return function (_parent, _args, context, info) {
1598 return delegate.delegateToSchema({
1599 schema: { schema: info.schema, executor: executor, subscriber: subscriber },
1600 context: context,
1601 info: info,
1602 });
1603 };
1604}
1605
1606var cleanInternalStack = function (stack) { return stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); };
1607
1608/**
1609Escape RegExp special characters.
1610You can also use this to escape a string that is inserted into the middle of a regex, for example, into a character class.
1611@example
1612```
1613import escapeStringRegexp = require('escape-string-regexp');
1614const escapedString = escapeStringRegexp('How much $ for a 🦄?');
1615//=> 'How much \\$ for a 🦄\\?'
1616new RegExp(escapedString);
1617```
1618*/
1619var escapeStringRegexp = function (string) {
1620 if (typeof string !== 'string') {
1621 throw new TypeError('Expected a string');
1622 }
1623 // Escape characters with special meaning either inside or outside character sets.
1624 // Use a simple backslash escape when it’s always valid, and a `\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.
1625 return string
1626 .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
1627 .replace(/-/g, '\\x2d');
1628};
1629
1630var extractPathRegex = /\s+at.*[(\s](.*)\)?/;
1631var pathRegex = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/;
1632/**
1633Clean up error stack traces. Removes the mostly unhelpful internal Node.js entries.
1634@param stack - The `stack` property of an `Error`.
1635@example
1636```
1637import cleanStack = require('clean-stack');
1638const error = new Error('Missing unicorn');
1639console.log(error.stack);
1640// Error: Missing unicorn
1641// at Object.<anonymous> (/Users/sindresorhus/dev/clean-stack/unicorn.js:2:15)
1642// at Module._compile (module.js:409:26)
1643// at Object.Module._extensions..js (module.js:416:10)
1644// at Module.load (module.js:343:32)
1645// at Function.Module._load (module.js:300:12)
1646// at Function.Module.runMain (module.js:441:10)
1647// at startup (node.js:139:18)
1648console.log(cleanStack(error.stack));
1649// Error: Missing unicorn
1650// at Object.<anonymous> (/Users/sindresorhus/dev/clean-stack/unicorn.js:2:15)
1651```
1652*/
1653var cleanStack = function (stack, basePath) {
1654 var basePathRegex = basePath && new RegExp("(at | \\()" + escapeStringRegexp(basePath), 'g');
1655 return stack.replace(/\\/g, '/')
1656 .split('\n')
1657 .filter(function (line) {
1658 var pathMatches = line.match(extractPathRegex);
1659 if (pathMatches === null || !pathMatches[1]) {
1660 return true;
1661 }
1662 var match = pathMatches[1];
1663 // Electron
1664 if (match.includes('.app/Contents/Resources/electron.asar') ||
1665 match.includes('.app/Contents/Resources/default_app.asar')) {
1666 return false;
1667 }
1668 return !pathRegex.test(match);
1669 })
1670 .filter(function (line) { return line.trim() !== ''; })
1671 .map(function (line) {
1672 if (basePathRegex) {
1673 line = line.replace(basePathRegex, '$1');
1674 }
1675 return line;
1676 })
1677 .join('\n');
1678};
1679
1680/**
1681Indent each line in a string.
1682@param string - The string to indent.
1683@param count - How many times you want `options.indent` repeated. Default: `1`.
1684@example
1685```
1686import indentString = require('indent-string');
1687indentString('Unicorns\nRainbows', 4);
1688//=> ' Unicorns\n Rainbows'
1689indentString('Unicorns\nRainbows', 4, {indent: '♥'});
1690//=> '♥♥♥♥Unicorns\n♥♥♥♥Rainbows'
1691```
1692*/
1693var indentString = function (string, count, options) {
1694 if (count === void 0) { count = 1; }
1695 options = Object.assign({
1696 indent: ' ',
1697 includeEmptyLines: false,
1698 }, options);
1699 if (typeof string !== 'string') {
1700 throw new TypeError("Expected `input` to be a `string`, got `" + typeof string + "`");
1701 }
1702 if (typeof count !== 'number') {
1703 throw new TypeError("Expected `count` to be a `number`, got `" + typeof count + "`");
1704 }
1705 if (count < 0) {
1706 throw new RangeError("Expected `count` to be at least 0, got `" + count + "`");
1707 }
1708 if (typeof options.indent !== 'string') {
1709 throw new TypeError("Expected `options.indent` to be a `string`, got `" + typeof options.indent + "`");
1710 }
1711 if (count === 0) {
1712 return string;
1713 }
1714 var regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm;
1715 return string.replace(regex, options.indent.repeat(count));
1716};
1717
1718var AggregateError = /** @class */ (function (_super) {
1719 tslib.__extends(AggregateError, _super);
1720 function AggregateError(errors) {
1721 var _this = this;
1722 if (!Array.isArray(errors)) {
1723 throw new TypeError("Expected input to be an Array, got " + typeof errors);
1724 }
1725 var normalizedErrors = errors.map(function (error) {
1726 if (error instanceof Error) {
1727 return error;
1728 }
1729 if (error !== null && typeof error === 'object') {
1730 // Handle plain error objects with message property and/or possibly other metadata
1731 return Object.assign(new Error(error.message), error);
1732 }
1733 return new Error(error);
1734 });
1735 var message = normalizedErrors
1736 .map(function (error) {
1737 // The `stack` property is not standardized, so we can't assume it exists
1738 return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error);
1739 })
1740 .join('\n');
1741 message = '\n' + indentString(message, 4);
1742 _this = _super.call(this, message) || this;
1743 _this.name = 'AggregateError';
1744 Object.defineProperty(_this, Symbol.iterator, {
1745 get: function () { return function () { return normalizedErrors[Symbol.iterator](); }; },
1746 });
1747 return _this;
1748 }
1749 return AggregateError;
1750}(Error));
1751
1752function getSchemaFromIntrospection(introspectionResult) {
1753 var _a, _b;
1754 if ((_a = introspectionResult === null || introspectionResult === void 0 ? void 0 : introspectionResult.data) === null || _a === void 0 ? void 0 : _a.__schema) {
1755 return graphql.buildClientSchema(introspectionResult.data);
1756 }
1757 else if ((_b = introspectionResult === null || introspectionResult === void 0 ? void 0 : introspectionResult.errors) === null || _b === void 0 ? void 0 : _b.length) {
1758 if (introspectionResult.errors.length > 1) {
1759 var combinedError = new AggregateError(introspectionResult.errors);
1760 throw combinedError;
1761 }
1762 var error = introspectionResult.errors[0];
1763 throw error.originalError || error;
1764 }
1765 else {
1766 throw new Error('Could not obtain introspection result, received: ' + JSON.stringify(introspectionResult));
1767 }
1768}
1769function introspectSchema(executor, context, options) {
1770 var parsedIntrospectionQuery = graphql.parse(graphql.getIntrospectionQuery(options));
1771 var introspectionResult = executor({
1772 document: parsedIntrospectionQuery,
1773 context: context,
1774 });
1775 if (isPromise(introspectionResult)) {
1776 return introspectionResult.then(function (introspection) { return getSchemaFromIntrospection(introspection); });
1777 }
1778 return getSchemaFromIntrospection(introspectionResult);
1779}
1780// Keep for backwards compability. Will be removed on next release.
1781function introspectSchemaSync(executor, context, options) {
1782 return introspectSchema(executor, context, options);
1783}
1784
1785exports.ExtractField = ExtractField;
1786exports.FilterInputObjectFields = FilterInputObjectFields;
1787exports.FilterInterfaceFields = FilterInterfaceFields;
1788exports.FilterObjectFieldDirectives = FilterObjectFieldDirectives;
1789exports.FilterObjectFields = FilterObjectFields;
1790exports.FilterRootFields = FilterRootFields;
1791exports.FilterTypes = FilterTypes;
1792exports.HoistField = HoistField;
1793exports.MapFields = MapFields;
1794exports.MapLeafValues = MapLeafValues;
1795exports.PruneSchema = PruneTypes;
1796exports.RemoveObjectFieldDeprecations = RemoveObjectFieldDeprecations;
1797exports.RemoveObjectFieldDirectives = RemoveObjectFieldDirectives;
1798exports.RemoveObjectFieldsWithDeprecation = RemoveObjectFieldsWithDeprecation;
1799exports.RemoveObjectFieldsWithDirective = RemoveObjectFieldsWithDirective;
1800exports.RenameInputObjectFields = RenameInputObjectFields;
1801exports.RenameInterfaceFields = RenameInterfaceFields;
1802exports.RenameObjectFields = RenameObjectFields;
1803exports.RenameRootFields = RenameRootFields;
1804exports.RenameRootTypes = RenameRootTypes;
1805exports.RenameTypes = RenameTypes;
1806exports.TransformCompositeFields = TransformCompositeFields;
1807exports.TransformEnumValues = TransformEnumValues;
1808exports.TransformInputObjectFields = TransformInputObjectFields;
1809exports.TransformInterfaceFields = TransformInterfaceFields;
1810exports.TransformObjectFields = TransformObjectFields;
1811exports.TransformQuery = TransformQuery;
1812exports.TransformRootFields = TransformRootFields;
1813exports.WrapFields = WrapFields;
1814exports.WrapQuery = WrapQuery;
1815exports.WrapType = WrapType;
1816exports.defaultCreateProxyingResolver = defaultCreateProxyingResolver;
1817exports.defaultCreateRemoteResolver = defaultCreateRemoteResolver;
1818exports.generateProxyingResolvers = generateProxyingResolvers;
1819exports.introspectSchema = introspectSchema;
1820exports.introspectSchemaSync = introspectSchemaSync;
1821exports.makeRemoteExecutableSchema = makeRemoteExecutableSchema;
1822exports.wrapSchema = wrapSchema;
1823//# sourceMappingURL=index.cjs.js.map