"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = require("graphql"); var ReplaceFieldWithFragment = /** @class */ (function () { function ReplaceFieldWithFragment(targetSchema, fragments) { this.targetSchema = targetSchema; this.mapping = {}; for (var _i = 0, fragments_1 = fragments; _i < fragments_1.length; _i++) { var _a = fragments_1[_i], field = _a.field, fragment = _a.fragment; var parsedFragment = parseFragmentToInlineFragment(fragment); var actualTypeName = parsedFragment.typeCondition.name.value; this.mapping[actualTypeName] = fragments[actualTypeName] || {}; this.mapping[actualTypeName][field] = parsedFragment; } } ReplaceFieldWithFragment.prototype.transformRequest = function (originalRequest) { var document = replaceFieldsWithFragments(this.targetSchema, originalRequest.document, this.mapping); return __assign({}, originalRequest, { document: document }); }; return ReplaceFieldWithFragment; }()); exports.default = ReplaceFieldWithFragment; function replaceFieldsWithFragments(targetSchema, document, mapping) { var typeInfo = new graphql_1.TypeInfo(targetSchema); return graphql_1.visit(document, graphql_1.visitWithTypeInfo(typeInfo, (_a = {}, _a[graphql_1.Kind.SELECTION_SET] = function (node) { var parentType = typeInfo.getParentType(); if (parentType) { var parentTypeName_1 = parentType.name; var selections_1 = node.selections; if (mapping[parentTypeName_1]) { node.selections.forEach(function (selection) { if (selection.kind === graphql_1.Kind.FIELD) { var name_1 = selection.name.value; var fragment = mapping[parentTypeName_1][name_1]; if (fragment) { selections_1 = selections_1.concat(fragment); } } }); } if (selections_1 !== node.selections) { return __assign({}, node, { selections: selections_1 }); } } }, _a))); var _a; } function parseFragmentToInlineFragment(definitions) { if (definitions.trim().startsWith('fragment')) { var document_1 = graphql_1.parse(definitions); for (var _i = 0, _a = document_1.definitions; _i < _a.length; _i++) { var definition = _a[_i]; if (definition.kind === graphql_1.Kind.FRAGMENT_DEFINITION) { return { kind: graphql_1.Kind.INLINE_FRAGMENT, typeCondition: definition.typeCondition, selectionSet: definition.selectionSet, }; } } } var query = graphql_1.parse("{" + definitions + "}") .definitions[0]; for (var _b = 0, _c = query.selectionSet.selections; _b < _c.length; _b++) { var selection = _c[_b]; if (selection.kind === graphql_1.Kind.INLINE_FRAGMENT) { return selection; } } throw new Error('Could not parse fragment'); } //# sourceMappingURL=ReplaceFieldWithFragment.js.map