Initial Save

This commit is contained in:
jackbeeby
2025-03-28 12:30:19 +11:00
parent e381994f19
commit d8773925e8
9910 changed files with 982718 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
import { GraphQLSchema } from 'graphql';
import { Request } from '../Interfaces';
import { Transform } from './transforms';
export default class AddArgumentsAsVariablesTransform implements Transform {
private schema;
private args;
constructor(schema: GraphQLSchema, args: {
[key: string]: any;
});
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,156 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var AddArgumentsAsVariablesTransform = /** @class */ (function () {
function AddArgumentsAsVariablesTransform(schema, args) {
this.schema = schema;
this.args = args;
}
AddArgumentsAsVariablesTransform.prototype.transformRequest = function (originalRequest) {
var _a = addVariablesToRootField(this.schema, originalRequest.document, this.args), document = _a.document, newVariables = _a.newVariables;
var variables = __assign(__assign({}, originalRequest.variables), newVariables);
return {
document: document,
variables: variables,
};
};
return AddArgumentsAsVariablesTransform;
}());
exports.default = AddArgumentsAsVariablesTransform;
function addVariablesToRootField(targetSchema, document, args) {
var operations = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.OPERATION_DEFINITION; });
var fragments = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.FRAGMENT_DEFINITION; });
var variableNames = {};
var newOperations = operations.map(function (operation) {
var existingVariables = operation.variableDefinitions.map(function (variableDefinition) {
return variableDefinition.variable.name.value;
});
var variableCounter = 0;
var variables = {};
var generateVariableName = function (argName) {
var varName;
do {
varName = "_v" + variableCounter + "_" + argName;
variableCounter++;
} while (existingVariables.indexOf(varName) !== -1);
return varName;
};
var type;
if (operation.operation === 'subscription') {
type = targetSchema.getSubscriptionType();
}
else if (operation.operation === 'mutation') {
type = targetSchema.getMutationType();
}
else {
type = targetSchema.getQueryType();
}
var newSelectionSet = [];
operation.selectionSet.selections.forEach(function (selection) {
if (selection.kind === graphql_1.Kind.FIELD) {
var newArgs_1 = {};
selection.arguments.forEach(function (argument) {
newArgs_1[argument.name.value] = argument;
});
var name_1 = selection.name.value;
var field = type.getFields()[name_1];
field.args.forEach(function (argument) {
if (argument.name in args) {
var variableName = generateVariableName(argument.name);
variableNames[argument.name] = variableName;
newArgs_1[argument.name] = {
kind: graphql_1.Kind.ARGUMENT,
name: {
kind: graphql_1.Kind.NAME,
value: argument.name,
},
value: {
kind: graphql_1.Kind.VARIABLE,
name: {
kind: graphql_1.Kind.NAME,
value: variableName,
},
},
};
existingVariables.push(variableName);
variables[variableName] = {
kind: graphql_1.Kind.VARIABLE_DEFINITION,
variable: {
kind: graphql_1.Kind.VARIABLE,
name: {
kind: graphql_1.Kind.NAME,
value: variableName,
},
},
type: typeToAst(argument.type),
};
}
});
newSelectionSet.push(__assign(__assign({}, selection), { arguments: Object.keys(newArgs_1).map(function (argName) { return newArgs_1[argName]; }) }));
}
else {
newSelectionSet.push(selection);
}
});
return __assign(__assign({}, operation), { variableDefinitions: operation.variableDefinitions.concat(Object.keys(variables).map(function (varName) { return variables[varName]; })), selectionSet: {
kind: graphql_1.Kind.SELECTION_SET,
selections: newSelectionSet,
} });
});
var newVariables = {};
Object.keys(variableNames).forEach(function (name) {
newVariables[variableNames[name]] = args[name];
});
return {
document: __assign(__assign({}, document), { definitions: __spreadArrays(newOperations, fragments) }),
newVariables: newVariables,
};
}
function typeToAst(type) {
if (type instanceof graphql_1.GraphQLNonNull) {
var innerType = typeToAst(type.ofType);
if (innerType.kind === graphql_1.Kind.LIST_TYPE ||
innerType.kind === graphql_1.Kind.NAMED_TYPE) {
return {
kind: graphql_1.Kind.NON_NULL_TYPE,
type: innerType,
};
}
else {
throw new Error('Incorrent inner non-null type');
}
}
else if (type instanceof graphql_1.GraphQLList) {
return {
kind: graphql_1.Kind.LIST_TYPE,
type: typeToAst(type.ofType),
};
}
else {
return {
kind: graphql_1.Kind.NAMED_TYPE,
name: {
kind: graphql_1.Kind.NAME,
value: type.toString(),
},
};
}
}
//# sourceMappingURL=AddArgumentsAsVariables.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"AddArgumentsAsVariables.js","sourceRoot":"","sources":["../../src/transforms/AddArgumentsAsVariables.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,8 @@
import { GraphQLSchema } from 'graphql';
import { Request } from '../Interfaces';
import { Transform } from './transforms';
export default class AddTypenameToAbstract implements Transform {
private targetSchema;
constructor(targetSchema: GraphQLSchema);
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,53 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var AddTypenameToAbstract = /** @class */ (function () {
function AddTypenameToAbstract(targetSchema) {
this.targetSchema = targetSchema;
}
AddTypenameToAbstract.prototype.transformRequest = function (originalRequest) {
var document = addTypenameToAbstract(this.targetSchema, originalRequest.document);
return __assign(__assign({}, originalRequest), { document: document });
};
return AddTypenameToAbstract;
}());
exports.default = AddTypenameToAbstract;
function addTypenameToAbstract(targetSchema, document) {
var _a;
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();
var selections = node.selections;
if (parentType &&
(parentType instanceof graphql_1.GraphQLInterfaceType ||
parentType instanceof graphql_1.GraphQLUnionType) &&
!selections.find(function (_) {
return _.kind === graphql_1.Kind.FIELD &&
_.name.value === '__typename';
})) {
selections = selections.concat({
kind: graphql_1.Kind.FIELD,
name: {
kind: graphql_1.Kind.NAME,
value: '__typename',
},
});
}
if (selections !== node.selections) {
return __assign(__assign({}, node), { selections: selections });
}
},
_a)));
}
//# sourceMappingURL=AddTypenameToAbstract.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"AddTypenameToAbstract.js","sourceRoot":"","sources":["../../src/transforms/AddTypenameToAbstract.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAYiB;AAIjB;IAGE,+BAAY,YAA2B;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAEM,gDAAgB,GAAvB,UAAwB,eAAwB;QAC9C,IAAM,QAAQ,GAAG,qBAAqB,CACpC,IAAI,CAAC,YAAY,EACjB,eAAe,CAAC,QAAQ,CACzB,CAAC;QACF,6BACK,eAAe,KAClB,QAAQ,UAAA,IACR;IACJ,CAAC;IACH,4BAAC;AAAD,CAAC,AAjBD,IAiBC;;AAED,SAAS,qBAAqB,CAC5B,YAA2B,EAC3B,QAAsB;;IAEtB,IAAM,QAAQ,GAAG,IAAI,kBAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,eAAK,CACV,QAAQ,EACR,2BAAiB,CAAC,QAAQ;QACxB,GAAC,cAAI,CAAC,aAAa,IAAnB,UACE,IAAsB;YAEtB,IAAM,UAAU,GAAgB,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzD,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IACE,UAAU;gBACV,CAAC,UAAU,YAAY,8BAAoB;oBACzC,UAAU,YAAY,0BAAgB,CAAC;gBACzC,CAAC,UAAU,CAAC,IAAI,CACd,UAAA,CAAC;oBACC,OAAC,CAAe,CAAC,IAAI,KAAK,cAAI,CAAC,KAAK;wBACnC,CAAe,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY;gBAD5C,CAC4C,CAC/C,EACD;gBACA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;oBAC7B,IAAI,EAAE,cAAI,CAAC,KAAK;oBAChB,IAAI,EAAE;wBACJ,IAAI,EAAE,cAAI,CAAC,IAAI;wBACf,KAAK,EAAE,YAAY;qBACpB;iBACF,CAAC,CAAC;aACJ;YAED,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;gBAClC,6BACK,IAAI,KACP,UAAU,YAAA,IACV;aACH;QACH,CAAC;YACD,CACH,CAAC;AACJ,CAAC"}

View File

@@ -0,0 +1,8 @@
import { GraphQLResolveInfo } from 'graphql';
import { Transform } from './transforms';
export default class CheckResultAndHandleErrors implements Transform {
private info;
private fieldName?;
constructor(info: GraphQLResolveInfo, fieldName?: string);
transformResult(result: any): any;
}

View File

@@ -0,0 +1,14 @@
Object.defineProperty(exports, "__esModule", { value: true });
var errors_1 = require("../stitching/errors");
var CheckResultAndHandleErrors = /** @class */ (function () {
function CheckResultAndHandleErrors(info, fieldName) {
this.info = info;
this.fieldName = fieldName;
}
CheckResultAndHandleErrors.prototype.transformResult = function (result) {
return errors_1.checkResultAndHandleErrors(result, this.info, this.fieldName);
};
return CheckResultAndHandleErrors;
}());
exports.default = CheckResultAndHandleErrors;
//# sourceMappingURL=CheckResultAndHandleErrors.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"CheckResultAndHandleErrors.js","sourceRoot":"","sources":["../../src/transforms/CheckResultAndHandleErrors.ts"],"names":[],"mappings":";AACA,8CAAiE;AAGjE;IAIE,oCAAY,IAAwB,EAAE,SAAkB;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEM,oDAAe,GAAtB,UAAuB,MAAW;QAChC,OAAO,mCAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IACH,iCAAC;AAAD,CAAC,AAZD,IAYC"}

View File

@@ -0,0 +1,7 @@
import { Transform } from './transforms';
import { GraphQLEnumType } from 'graphql';
export default class ConvertEnumResponse implements Transform {
private enumNode;
constructor(enumNode: GraphQLEnumType);
transformResult(result: any): any;
}

View File

@@ -0,0 +1,16 @@
Object.defineProperty(exports, "__esModule", { value: true });
var ConvertEnumResponse = /** @class */ (function () {
function ConvertEnumResponse(enumNode) {
this.enumNode = enumNode;
}
ConvertEnumResponse.prototype.transformResult = function (result) {
var value = this.enumNode.getValue(result);
if (value) {
return value.value;
}
return result;
};
return ConvertEnumResponse;
}());
exports.default = ConvertEnumResponse;
//# sourceMappingURL=ConvertEnumResponse.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ConvertEnumResponse.js","sourceRoot":"","sources":["../../src/transforms/ConvertEnumResponse.ts"],"names":[],"mappings":";AAGA;IAGE,6BAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,6CAAe,GAAtB,UAAuB,MAAW;QAChC,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE;YACT,OAAO,KAAK,CAAC,KAAK,CAAC;SACpB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACH,0BAAC;AAAD,CAAC,AAdD,IAcC"}

View File

@@ -0,0 +1,7 @@
import { GraphQLSchema } from 'graphql';
import { Transform } from '../transforms/transforms';
export default class ConvertEnumValues implements Transform {
private enumValueMap;
constructor(enumValueMap: object);
transformSchema(schema: GraphQLSchema): GraphQLSchema;
}

View File

@@ -0,0 +1,51 @@
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var visitSchema_1 = require("../transforms/visitSchema");
// Transformation used to modifiy `GraphQLEnumType` values in a schema.
var ConvertEnumValues = /** @class */ (function () {
function ConvertEnumValues(enumValueMap) {
this.enumValueMap = enumValueMap;
}
// Walk a schema looking for `GraphQLEnumType` types. If found, and
// matching types have been identified in `this.enumValueMap`, create new
// `GraphQLEnumType` types using the `this.enumValueMap` specified new
// values, and return them in the new schema.
ConvertEnumValues.prototype.transformSchema = function (schema) {
var _a;
var enumValueMap = this.enumValueMap;
if (!enumValueMap || Object.keys(enumValueMap).length === 0) {
return schema;
}
var transformedSchema = visitSchema_1.visitSchema(schema, (_a = {},
_a[visitSchema_1.VisitSchemaKind.ENUM_TYPE] = function (enumType) {
var externalToInternalValueMap = enumValueMap[enumType.name];
if (externalToInternalValueMap) {
var values = enumType.getValues();
var newValues_1 = {};
values.forEach(function (value) {
var newValue = Object.keys(externalToInternalValueMap).includes(value.name)
? externalToInternalValueMap[value.name]
: value.name;
newValues_1[value.name] = {
value: newValue,
deprecationReason: value.deprecationReason,
description: value.description,
astNode: value.astNode,
};
});
return new graphql_1.GraphQLEnumType({
name: enumType.name,
description: enumType.description,
astNode: enumType.astNode,
values: newValues_1,
});
}
return enumType;
},
_a));
return transformedSchema;
};
return ConvertEnumValues;
}());
exports.default = ConvertEnumValues;
//# sourceMappingURL=ConvertEnumValues.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ConvertEnumValues.js","sourceRoot":"","sources":["../../src/transforms/ConvertEnumValues.ts"],"names":[],"mappings":";AAAA,mCAAyD;AAEzD,yDAAyE;AAEzE,uEAAuE;AACvE;IAKE,2BAAY,YAAoB;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,mEAAmE;IACnE,yEAAyE;IACzE,sEAAsE;IACtE,6CAA6C;IACtC,2CAAe,GAAtB,UAAuB,MAAqB;;QAClC,IAAA,gCAAY,CAAU;QAC9B,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3D,OAAO,MAAM,CAAC;SACf;QAED,IAAM,iBAAiB,GAAG,yBAAW,CAAC,MAAM;YAC1C,GAAC,6BAAe,CAAC,SAAS,IAA1B,UAA4B,QAAyB;gBACnD,IAAM,0BAA0B,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAE/D,IAAI,0BAA0B,EAAE;oBAC9B,IAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACpC,IAAM,WAAS,GAAG,EAAE,CAAC;oBACrB,MAAM,CAAC,OAAO,CAAC,UAAA,KAAK;wBAClB,IAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAC/D,KAAK,CAAC,IAAI,CACX;4BACC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC;4BACxC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;wBACf,WAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;4BACtB,KAAK,EAAE,QAAQ;4BACf,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;4BAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;4BAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;yBACvB,CAAC;oBACJ,CAAC,CAAC,CAAC;oBAEH,OAAO,IAAI,yBAAe,CAAC;wBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;wBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,MAAM,EAAE,WAAS;qBAClB,CAAC,CAAC;iBACJ;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC;gBACD,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACH,wBAAC;AAAD,CAAC,AAtDD,IAsDC"}

View File

@@ -0,0 +1,9 @@
import { GraphQLSchema } from 'graphql';
import { Transform, Request } from '../Interfaces';
export default class ExpandAbstractTypes implements Transform {
private targetSchema;
private mapping;
private reverseMapping;
constructor(transformedSchema: GraphQLSchema, targetSchema: GraphQLSchema);
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,173 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var implementsAbstractType_1 = require("../implementsAbstractType");
var ExpandAbstractTypes = /** @class */ (function () {
function ExpandAbstractTypes(transformedSchema, targetSchema) {
this.targetSchema = targetSchema;
this.mapping = extractPossibleTypes(transformedSchema, targetSchema);
this.reverseMapping = flipMapping(this.mapping);
}
ExpandAbstractTypes.prototype.transformRequest = function (originalRequest) {
var document = expandAbstractTypes(this.targetSchema, this.mapping, this.reverseMapping, originalRequest.document);
return __assign(__assign({}, originalRequest), { document: document });
};
return ExpandAbstractTypes;
}());
exports.default = ExpandAbstractTypes;
function extractPossibleTypes(transformedSchema, targetSchema) {
var typeMap = transformedSchema.getTypeMap();
var mapping = {};
Object.keys(typeMap).forEach(function (typeName) {
var type = typeMap[typeName];
if (graphql_1.isAbstractType(type)) {
var targetType = targetSchema.getType(typeName);
if (!graphql_1.isAbstractType(targetType)) {
var implementations = transformedSchema.getPossibleTypes(type) || [];
mapping[typeName] = implementations
.filter(function (impl) { return targetSchema.getType(impl.name); })
.map(function (impl) { return impl.name; });
}
}
});
return mapping;
}
function flipMapping(mapping) {
var result = {};
Object.keys(mapping).forEach(function (typeName) {
var toTypeNames = mapping[typeName];
toTypeNames.forEach(function (toTypeName) {
if (!result[toTypeName]) {
result[toTypeName] = [];
}
result[toTypeName].push(typeName);
});
});
return result;
}
function expandAbstractTypes(targetSchema, mapping, reverseMapping, document) {
var _a;
var operations = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.OPERATION_DEFINITION; });
var fragments = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.FRAGMENT_DEFINITION; });
var existingFragmentNames = fragments.map(function (fragment) { return fragment.name.value; });
var fragmentCounter = 0;
var generateFragmentName = function (typeName) {
var fragmentName;
do {
fragmentName = "_" + typeName + "_Fragment" + fragmentCounter;
fragmentCounter++;
} while (existingFragmentNames.indexOf(fragmentName) !== -1);
return fragmentName;
};
var newFragments = [];
var fragmentReplacements = {};
fragments.forEach(function (fragment) {
newFragments.push(fragment);
var possibleTypes = mapping[fragment.typeCondition.name.value];
if (possibleTypes) {
fragmentReplacements[fragment.name.value] = [];
possibleTypes.forEach(function (possibleTypeName) {
var name = generateFragmentName(possibleTypeName);
existingFragmentNames.push(name);
var newFragment = {
kind: graphql_1.Kind.FRAGMENT_DEFINITION,
name: {
kind: graphql_1.Kind.NAME,
value: name,
},
typeCondition: {
kind: graphql_1.Kind.NAMED_TYPE,
name: {
kind: graphql_1.Kind.NAME,
value: possibleTypeName,
},
},
selectionSet: fragment.selectionSet,
};
newFragments.push(newFragment);
fragmentReplacements[fragment.name.value].push({
fragmentName: name,
typeName: possibleTypeName,
});
});
}
});
var newDocument = __assign(__assign({}, document), { definitions: __spreadArrays(operations, newFragments) });
var typeInfo = new graphql_1.TypeInfo(targetSchema);
return graphql_1.visit(newDocument, graphql_1.visitWithTypeInfo(typeInfo, (_a = {},
_a[graphql_1.Kind.SELECTION_SET] = function (node) {
var newSelections = __spreadArrays(node.selections);
var parentType = graphql_1.getNamedType(typeInfo.getParentType());
node.selections.forEach(function (selection) {
if (selection.kind === graphql_1.Kind.INLINE_FRAGMENT) {
var possibleTypes = mapping[selection.typeCondition.name.value];
if (possibleTypes) {
possibleTypes.forEach(function (possibleType) {
if (implementsAbstractType_1.default(targetSchema, parentType, targetSchema.getType(possibleType))) {
newSelections.push({
kind: graphql_1.Kind.INLINE_FRAGMENT,
typeCondition: {
kind: graphql_1.Kind.NAMED_TYPE,
name: {
kind: graphql_1.Kind.NAME,
value: possibleType,
},
},
selectionSet: selection.selectionSet,
});
}
});
}
}
else if (selection.kind === graphql_1.Kind.FRAGMENT_SPREAD) {
var fragmentName = selection.name.value;
var replacements = fragmentReplacements[fragmentName];
if (replacements) {
replacements.forEach(function (replacement) {
var typeName = replacement.typeName;
if (implementsAbstractType_1.default(targetSchema, parentType, targetSchema.getType(typeName))) {
newSelections.push({
kind: graphql_1.Kind.FRAGMENT_SPREAD,
name: {
kind: graphql_1.Kind.NAME,
value: replacement.fragmentName,
},
});
}
});
}
}
});
if (parentType && reverseMapping[parentType.name]) {
newSelections.push({
kind: graphql_1.Kind.FIELD,
name: {
kind: graphql_1.Kind.NAME,
value: '__typename',
},
});
}
if (newSelections.length !== node.selections.length) {
return __assign(__assign({}, node), { selections: newSelections });
}
},
_a)));
}
//# sourceMappingURL=ExpandAbstractTypes.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
import { Transform, Request } from '../Interfaces';
export default class ExtractField implements Transform {
private from;
private to;
constructor({ from, to }: {
from: Array<string>;
to: Array<string>;
});
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,59 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var ExtractField = /** @class */ (function () {
function ExtractField(_a) {
var from = _a.from, to = _a.to;
this.from = from;
this.to = to;
}
ExtractField.prototype.transformRequest = function (originalRequest) {
var _a, _b;
var fromSelection;
var ourPathFrom = JSON.stringify(this.from);
var ourPathTo = JSON.stringify(this.to);
var fieldPath = [];
graphql_1.visit(originalRequest.document, (_a = {},
_a[graphql_1.Kind.FIELD] = {
enter: function (node) {
fieldPath.push(node.name.value);
if (ourPathFrom === JSON.stringify(fieldPath)) {
fromSelection = node.selectionSet;
return graphql_1.BREAK;
}
},
leave: function (node) {
fieldPath.pop();
},
},
_a));
fieldPath = [];
var newDocument = graphql_1.visit(originalRequest.document, (_b = {},
_b[graphql_1.Kind.FIELD] = {
enter: function (node) {
fieldPath.push(node.name.value);
if (ourPathTo === JSON.stringify(fieldPath) && fromSelection) {
return __assign(__assign({}, node), { selectionSet: fromSelection });
}
},
leave: function (node) {
fieldPath.pop();
},
},
_b));
return __assign(__assign({}, originalRequest), { document: newDocument });
};
return ExtractField;
}());
exports.default = ExtractField;
//# sourceMappingURL=ExtractField.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ExtractField.js","sourceRoot":"","sources":["../../src/transforms/ExtractField.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA0E;AAG1E;IAIE,sBAAY,EAAwD;YAAtD,cAAI,EAAE,UAAE;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAEM,uCAAgB,GAAvB,UAAwB,eAAwB;;QAC9C,IAAI,aAA+B,CAAC;QACpC,IAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,GAAkB,EAAE,CAAC;QAClC,eAAK,CAAC,eAAe,CAAC,QAAQ;YAC5B,GAAC,cAAI,CAAC,KAAK,IAAG;gBACZ,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChC,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;wBAC7C,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;wBAClC,OAAO,eAAK,CAAC;qBACd;gBACH,CAAC;gBACD,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,GAAG,EAAE,CAAC;gBAClB,CAAC;aACF;gBACD,CAAC;QAEH,SAAS,GAAG,EAAE,CAAC;QACf,IAAM,WAAW,GAAG,eAAK,CAAC,eAAe,CAAC,QAAQ;YAChD,GAAC,cAAI,CAAC,KAAK,IAAG;gBACZ,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChC,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE;wBAC5D,6BACK,IAAI,KACP,YAAY,EAAE,aAAa,IAC3B;qBACH;gBACH,CAAC;gBACD,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,GAAG,EAAE,CAAC;gBAClB,CAAC;aACF;gBACD,CAAC;QACH,6BACK,eAAe,KAClB,QAAQ,EAAE,WAAW,IACrB;IACJ,CAAC;IACH,mBAAC;AAAD,CAAC,AAnDD,IAmDC"}

View File

@@ -0,0 +1,8 @@
import { GraphQLField, GraphQLSchema } from 'graphql';
import { Transform } from './transforms';
export declare type RootFilter = (operation: 'Query' | 'Mutation' | 'Subscription', fieldName: string, field: GraphQLField<any, any>) => boolean;
export default class FilterRootFields implements Transform {
private transformer;
constructor(filter: RootFilter);
transformSchema(originalSchema: GraphQLSchema): GraphQLSchema;
}

View File

@@ -0,0 +1,20 @@
Object.defineProperty(exports, "__esModule", { value: true });
var TransformRootFields_1 = require("./TransformRootFields");
var FilterRootFields = /** @class */ (function () {
function FilterRootFields(filter) {
this.transformer = new TransformRootFields_1.default(function (operation, fieldName, field) {
if (filter(operation, fieldName, field)) {
return undefined;
}
else {
return null;
}
});
}
FilterRootFields.prototype.transformSchema = function (originalSchema) {
return this.transformer.transformSchema(originalSchema);
};
return FilterRootFields;
}());
exports.default = FilterRootFields;
//# sourceMappingURL=FilterRootFields.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"FilterRootFields.js","sourceRoot":"","sources":["../../src/transforms/FilterRootFields.ts"],"names":[],"mappings":";AAEA,6DAAwD;AAQxD;IAGE,0BAAY,MAAkB;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,6BAAmB,CACxC,UACE,SAAgD,EAChD,SAAiB,EACjB,KAA6B;YAE7B,IAAI,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE;gBACvC,OAAO,SAAS,CAAC;aAClB;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAEM,0CAAe,GAAtB,UAAuB,cAA6B;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IACH,uBAAC;AAAD,CAAC,AAtBD,IAsBC"}

View File

@@ -0,0 +1,8 @@
import { GraphQLSchema } from 'graphql';
import { Request } from '../Interfaces';
import { Transform } from './transforms';
export default class FilterToSchema implements Transform {
private targetSchema;
constructor(targetSchema: GraphQLSchema);
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,247 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var implementsAbstractType_1 = require("../implementsAbstractType");
var FilterToSchema = /** @class */ (function () {
function FilterToSchema(targetSchema) {
this.targetSchema = targetSchema;
}
FilterToSchema.prototype.transformRequest = function (originalRequest) {
var document = filterDocumentToSchema(this.targetSchema, originalRequest.document);
return __assign(__assign({}, originalRequest), { document: document });
};
return FilterToSchema;
}());
exports.default = FilterToSchema;
function filterDocumentToSchema(targetSchema, document) {
var operations = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.OPERATION_DEFINITION; });
var fragments = document.definitions.filter(function (def) { return def.kind === graphql_1.Kind.FRAGMENT_DEFINITION; });
var usedFragments = [];
var newOperations = [];
var newFragments = [];
var validFragments = fragments.filter(function (fragment) {
var typeName = fragment.typeCondition.name.value;
return Boolean(targetSchema.getType(typeName));
});
var validFragmentsWithType = {};
validFragments.forEach(function (fragment) {
var typeName = fragment.typeCondition.name.value;
var type = targetSchema.getType(typeName);
validFragmentsWithType[fragment.name.value] = type;
});
var fragmentSet = Object.create(null);
operations.forEach(function (operation) {
var type;
if (operation.operation === 'subscription') {
type = targetSchema.getSubscriptionType();
}
else if (operation.operation === 'mutation') {
type = targetSchema.getMutationType();
}
else {
type = targetSchema.getQueryType();
}
var _a = filterSelectionSet(targetSchema, type, validFragmentsWithType, operation.selectionSet), selectionSet = _a.selectionSet, operationUsedFragments = _a.usedFragments, operationUsedVariables = _a.usedVariables;
usedFragments = union(usedFragments, operationUsedFragments);
var _b = collectFragmentVariables(targetSchema, fragmentSet, validFragments, validFragmentsWithType, usedFragments), collectedUsedVariables = _b.usedVariables, collectedNewFragments = _b.newFragments, collectedFragmentSet = _b.fragmentSet;
var fullUsedVariables = union(operationUsedVariables, collectedUsedVariables);
newFragments = collectedNewFragments;
fragmentSet = collectedFragmentSet;
var variableDefinitions = operation.variableDefinitions.filter(function (variable) {
return fullUsedVariables.indexOf(variable.variable.name.value) !== -1;
});
newOperations.push({
kind: graphql_1.Kind.OPERATION_DEFINITION,
operation: operation.operation,
name: operation.name,
directives: operation.directives,
variableDefinitions: variableDefinitions,
selectionSet: selectionSet,
});
});
return {
kind: graphql_1.Kind.DOCUMENT,
definitions: __spreadArrays(newOperations, newFragments),
};
}
function collectFragmentVariables(targetSchema, fragmentSet, validFragments, validFragmentsWithType, usedFragments) {
var usedVariables = [];
var newFragments = [];
var _loop_1 = function () {
var nextFragmentName = usedFragments.pop();
var fragment = validFragments.find(function (fr) { return fr.name.value === nextFragmentName; });
if (fragment) {
var name_1 = nextFragmentName;
var typeName = fragment.typeCondition.name.value;
var type = targetSchema.getType(typeName);
var _a = filterSelectionSet(targetSchema, type, validFragmentsWithType, fragment.selectionSet), selectionSet = _a.selectionSet, fragmentUsedFragments = _a.usedFragments, fragmentUsedVariables = _a.usedVariables;
usedFragments = union(usedFragments, fragmentUsedFragments);
usedVariables = union(usedVariables, fragmentUsedVariables);
if (!fragmentSet[name_1]) {
fragmentSet[name_1] = true;
newFragments.push({
kind: graphql_1.Kind.FRAGMENT_DEFINITION,
name: {
kind: graphql_1.Kind.NAME,
value: name_1,
},
typeCondition: fragment.typeCondition,
selectionSet: selectionSet,
});
}
}
};
while (usedFragments.length !== 0) {
_loop_1();
}
return {
usedVariables: usedVariables,
newFragments: newFragments,
fragmentSet: fragmentSet,
};
}
function filterSelectionSet(schema, type, validFragments, selectionSet) {
var _a;
var usedFragments = [];
var usedVariables = [];
var typeStack = [type];
// Should be rewritten using visitWithSchema
var filteredSelectionSet = graphql_1.visit(selectionSet, (_a = {},
_a[graphql_1.Kind.FIELD] = {
enter: function (node) {
var parentType = resolveType(typeStack[typeStack.length - 1]);
if (parentType instanceof graphql_1.GraphQLObjectType ||
parentType instanceof graphql_1.GraphQLInterfaceType) {
var fields = parentType.getFields();
var field = node.name.value === '__typename'
? graphql_1.TypeNameMetaFieldDef
: fields[node.name.value];
if (!field) {
return null;
}
else {
typeStack.push(field.type);
}
var argNames_1 = (field.args || []).map(function (arg) { return arg.name; });
if (node.arguments) {
var args = node.arguments.filter(function (arg) {
return argNames_1.indexOf(arg.name.value) !== -1;
});
if (args.length !== node.arguments.length) {
return __assign(__assign({}, node), { arguments: args });
}
}
}
else if (parentType instanceof graphql_1.GraphQLUnionType &&
node.name.value === '__typename') {
typeStack.push(graphql_1.TypeNameMetaFieldDef.type);
}
},
leave: function (node) {
var _a;
var currentType = typeStack.pop();
var resolvedType = resolveType(currentType);
if (resolvedType instanceof graphql_1.GraphQLObjectType ||
resolvedType instanceof graphql_1.GraphQLInterfaceType) {
var selections = node.selectionSet && node.selectionSet.selections || null;
if (!selections || selections.length === 0) {
// need to remove any added variables. Is there a better way to do this?
graphql_1.visit(node, (_a = {},
_a[graphql_1.Kind.VARIABLE] = function (variableNode) {
var index = usedVariables.indexOf(variableNode.name.value);
if (index !== -1) {
usedVariables.splice(index, 1);
}
},
_a));
return null;
}
}
},
},
_a[graphql_1.Kind.FRAGMENT_SPREAD] = function (node) {
if (node.name.value in validFragments) {
var parentType = resolveType(typeStack[typeStack.length - 1]);
var innerType = validFragments[node.name.value];
if (!implementsAbstractType_1.default(schema, parentType, innerType)) {
return null;
}
else {
usedFragments.push(node.name.value);
return;
}
}
else {
return null;
}
},
_a[graphql_1.Kind.INLINE_FRAGMENT] = {
enter: function (node) {
if (node.typeCondition) {
var innerType = schema.getType(node.typeCondition.name.value);
var parentType = resolveType(typeStack[typeStack.length - 1]);
if (implementsAbstractType_1.default(schema, parentType, innerType)) {
typeStack.push(innerType);
}
else {
return null;
}
}
},
leave: function (node) {
typeStack.pop();
},
},
_a[graphql_1.Kind.VARIABLE] = function (node) {
usedVariables.push(node.name.value);
},
_a));
return {
selectionSet: filteredSelectionSet,
usedFragments: usedFragments,
usedVariables: usedVariables,
};
}
function resolveType(type) {
var lastType = type;
while (lastType instanceof graphql_1.GraphQLNonNull ||
lastType instanceof graphql_1.GraphQLList) {
lastType = lastType.ofType;
}
return lastType;
}
function union() {
var arrays = [];
for (var _i = 0; _i < arguments.length; _i++) {
arrays[_i] = arguments[_i];
}
var cache = {};
var result = [];
arrays.forEach(function (array) {
array.forEach(function (item) {
if (!cache[item]) {
cache[item] = true;
result.push(item);
}
});
});
return result;
}
//# sourceMappingURL=FilterToSchema.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
import { GraphQLSchema, GraphQLNamedType } from 'graphql';
import { Transform } from '../transforms/transforms';
export default class FilterTypes implements Transform {
private filter;
constructor(filter: (type: GraphQLNamedType) => boolean);
transformSchema(schema: GraphQLSchema): GraphQLSchema;
}

View File

@@ -0,0 +1,25 @@
/* tslint:disable:no-unused-expression */
Object.defineProperty(exports, "__esModule", { value: true });
var visitSchema_1 = require("../transforms/visitSchema");
var FilterTypes = /** @class */ (function () {
function FilterTypes(filter) {
this.filter = filter;
}
FilterTypes.prototype.transformSchema = function (schema) {
var _a;
var _this = this;
return visitSchema_1.visitSchema(schema, (_a = {},
_a[visitSchema_1.VisitSchemaKind.TYPE] = function (type) {
if (_this.filter(type)) {
return undefined;
}
else {
return null;
}
},
_a));
};
return FilterTypes;
}());
exports.default = FilterTypes;
//# sourceMappingURL=FilterTypes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"FilterTypes.js","sourceRoot":"","sources":["../../src/transforms/FilterTypes.ts"],"names":[],"mappings":"AAAA,yCAAyC;;AAIzC,yDAAyE;AAEzE;IAGE,qBAAY,MAA2C;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,qCAAe,GAAtB,UAAuB,MAAqB;;QAA5C,iBAUC;QATC,OAAO,yBAAW,CAAC,MAAM;YACvB,GAAC,6BAAe,CAAC,IAAI,IAAG,UAAC,IAAsB;gBAC7C,IAAI,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBACrB,OAAO,SAAS,CAAC;iBAClB;qBAAM;oBACL,OAAO,IAAI,CAAC;iBACb;YACH,CAAC;gBACD,CAAC;IACL,CAAC;IACH,kBAAC;AAAD,CAAC,AAlBD,IAkBC"}

View File

@@ -0,0 +1,7 @@
import { GraphQLField, GraphQLSchema } from 'graphql';
import { Transform } from './transforms';
export default class RenameRootFields implements Transform {
private transformer;
constructor(renamer: (operation: 'Query' | 'Mutation' | 'Subscription', name: string, field: GraphQLField<any, any>) => string);
transformSchema(originalSchema: GraphQLSchema): GraphQLSchema;
}

View File

@@ -0,0 +1,20 @@
Object.defineProperty(exports, "__esModule", { value: true });
var schemaRecreation_1 = require("../stitching/schemaRecreation");
var TransformRootFields_1 = require("./TransformRootFields");
var RenameRootFields = /** @class */ (function () {
function RenameRootFields(renamer) {
var resolveType = schemaRecreation_1.createResolveType(function (name, type) { return type; });
this.transformer = new TransformRootFields_1.default(function (operation, fieldName, field) {
return {
name: renamer(operation, fieldName, field),
field: schemaRecreation_1.fieldToFieldConfig(field, resolveType, true),
};
});
}
RenameRootFields.prototype.transformSchema = function (originalSchema) {
return this.transformer.transformSchema(originalSchema);
};
return RenameRootFields;
}());
exports.default = RenameRootFields;
//# sourceMappingURL=RenameRootFields.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"RenameRootFields.js","sourceRoot":"","sources":["../../src/transforms/RenameRootFields.ts"],"names":[],"mappings":";AAEA,kEAGuC;AACvC,6DAAwD;AAExD;IAGE,0BACE,OAIW;QAEX,IAAM,WAAW,GAAG,oCAAiB,CACnC,UAAC,IAAY,EAAE,IAAsB,IAAuB,OAAA,IAAI,EAAJ,CAAI,CACjE,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,6BAAmB,CACxC,UACE,SAAgD,EAChD,SAAiB,EACjB,KAA6B;YAE7B,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;gBAC1C,KAAK,EAAE,qCAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC;aACpD,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAEM,0CAAe,GAAtB,UAAuB,cAA6B;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IACH,uBAAC;AAAD,CAAC,AA9BD,IA8BC"}

View File

@@ -0,0 +1,18 @@
import { GraphQLSchema } from 'graphql';
import { Request, Result } from '../Interfaces';
import { Transform } from '../transforms/transforms';
export declare type RenameOptions = {
renameBuiltins: boolean;
renameScalars: boolean;
};
export default class RenameTypes implements Transform {
private renamer;
private reverseMap;
private renameBuiltins;
private renameScalars;
constructor(renamer: (name: string) => string | undefined, options?: RenameOptions);
transformSchema(originalSchema: GraphQLSchema): GraphQLSchema;
transformRequest(originalRequest: Request): Request;
transformResult(result: Result): Result;
private renameTypes;
}

View File

@@ -0,0 +1,103 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var isSpecifiedScalarType_1 = require("../isSpecifiedScalarType");
var visitSchema_1 = require("../transforms/visitSchema");
var RenameTypes = /** @class */ (function () {
function RenameTypes(renamer, options) {
this.renamer = renamer;
this.reverseMap = {};
var _a = options || {}, _b = _a.renameBuiltins, renameBuiltins = _b === void 0 ? false : _b, _c = _a.renameScalars, renameScalars = _c === void 0 ? true : _c;
this.renameBuiltins = renameBuiltins;
this.renameScalars = renameScalars;
}
RenameTypes.prototype.transformSchema = function (originalSchema) {
var _a;
var _this = this;
return visitSchema_1.visitSchema(originalSchema, (_a = {},
_a[visitSchema_1.VisitSchemaKind.TYPE] = function (type) {
if (isSpecifiedScalarType_1.default(type) && !_this.renameBuiltins) {
return undefined;
}
if (type instanceof graphql_1.GraphQLScalarType && !_this.renameScalars) {
return undefined;
}
var newName = _this.renamer(type.name);
if (newName && newName !== type.name) {
_this.reverseMap[newName] = type.name;
var newType = Object.assign(Object.create(type), type);
newType.name = newName;
return newType;
}
},
_a[visitSchema_1.VisitSchemaKind.ROOT_OBJECT] = function (type) {
return undefined;
},
_a));
};
RenameTypes.prototype.transformRequest = function (originalRequest) {
var _a;
var _this = this;
var newDocument = graphql_1.visit(originalRequest.document, (_a = {},
_a[graphql_1.Kind.NAMED_TYPE] = function (node) {
var name = node.name.value;
if (name in _this.reverseMap) {
return __assign(__assign({}, node), { name: {
kind: graphql_1.Kind.NAME,
value: _this.reverseMap[name],
} });
}
},
_a));
return {
document: newDocument,
variables: originalRequest.variables,
};
};
RenameTypes.prototype.transformResult = function (result) {
if (result.data) {
var data = this.renameTypes(result.data, 'data');
if (data !== result.data) {
return __assign(__assign({}, result), { data: data });
}
}
return result;
};
RenameTypes.prototype.renameTypes = function (value, name) {
var _this = this;
if (name === '__typename') {
return this.renamer(value);
}
if (value && typeof value === 'object') {
var newValue_1 = Array.isArray(value) ? []
// Create a new object with the same prototype.
: Object.create(Object.getPrototypeOf(value));
var returnNewValue_1 = false;
Object.keys(value).forEach(function (key) {
var oldChild = value[key];
var newChild = _this.renameTypes(oldChild, key);
newValue_1[key] = newChild;
if (newChild !== oldChild) {
returnNewValue_1 = true;
}
});
if (returnNewValue_1) {
return newValue_1;
}
}
return value;
};
return RenameTypes;
}());
exports.default = RenameTypes;
//# sourceMappingURL=RenameTypes.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"RenameTypes.js","sourceRoot":"","sources":["../../src/transforms/RenameTypes.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,12 @@
import { GraphQLSchema } from 'graphql';
import { Request } from '../Interfaces';
import { Transform } from './transforms';
export default class ReplaceFieldWithFragment implements Transform {
private targetSchema;
private mapping;
constructor(targetSchema: GraphQLSchema, fragments: Array<{
field: string;
fragment: string;
}>);
transformRequest(originalRequest: Request): Request;
}

View File

@@ -0,0 +1,157 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
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] = this.mapping[actualTypeName] || {};
if (this.mapping[actualTypeName][field]) {
this.mapping[actualTypeName][field].push(parsedFragment);
}
else {
this.mapping[actualTypeName][field] = [parsedFragment];
}
}
}
ReplaceFieldWithFragment.prototype.transformRequest = function (originalRequest) {
var document = replaceFieldsWithFragments(this.targetSchema, originalRequest.document, this.mapping);
return __assign(__assign({}, originalRequest), { document: document });
};
return ReplaceFieldWithFragment;
}());
exports.default = ReplaceFieldWithFragment;
function replaceFieldsWithFragments(targetSchema, document, mapping) {
var _a;
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 fragments = mapping[parentTypeName_1][name_1];
if (fragments && fragments.length > 0) {
var fragment = concatInlineFragments(parentTypeName_1, fragments);
selections_1 = selections_1.concat(fragment);
}
}
});
}
if (selections_1 !== node.selections) {
return __assign(__assign({}, node), { selections: selections_1 });
}
}
},
_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');
}
function concatInlineFragments(type, fragments) {
var fragmentSelections = fragments.reduce(function (selections, fragment) {
return selections.concat(fragment.selectionSet.selections);
}, []);
var deduplicatedFragmentSelection = deduplicateSelection(fragmentSelections);
return {
kind: graphql_1.Kind.INLINE_FRAGMENT,
typeCondition: {
kind: graphql_1.Kind.NAMED_TYPE,
name: {
kind: graphql_1.Kind.NAME,
value: type,
},
},
selectionSet: {
kind: graphql_1.Kind.SELECTION_SET,
selections: deduplicatedFragmentSelection,
},
};
}
function deduplicateSelection(nodes) {
var selectionMap = nodes.reduce(function (map, node) {
var _a, _b, _c;
switch (node.kind) {
case 'Field': {
if (node.alias) {
if (map.hasOwnProperty(node.alias.value)) {
return map;
}
else {
return __assign(__assign({}, map), (_a = {}, _a[node.alias.value] = node, _a));
}
}
else {
if (map.hasOwnProperty(node.name.value)) {
return map;
}
else {
return __assign(__assign({}, map), (_b = {}, _b[node.name.value] = node, _b));
}
}
}
case 'FragmentSpread': {
if (map.hasOwnProperty(node.name.value)) {
return map;
}
else {
return __assign(__assign({}, map), (_c = {}, _c[node.name.value] = node, _c));
}
}
case 'InlineFragment': {
if (map.__fragment) {
var fragment = map.__fragment;
return __assign(__assign({}, map), { __fragment: concatInlineFragments(fragment.typeCondition.name.value, [fragment, node]) });
}
else {
return __assign(__assign({}, map), { __fragment: node });
}
}
default: {
return map;
}
}
}, {});
var selection = Object.keys(selectionMap).reduce(function (selectionList, node) { return selectionList.concat(selectionMap[node]); }, []);
return selection;
}
//# sourceMappingURL=ReplaceFieldWithFragment.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ReplaceFieldWithFragment.js","sourceRoot":"","sources":["../../src/transforms/ReplaceFieldWithFragment.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,11 @@
import { GraphQLSchema, GraphQLField, GraphQLFieldConfig } from 'graphql';
import { Transform } from './transforms';
export declare type RootTransformer = (operation: 'Query' | 'Mutation' | 'Subscription', fieldName: string, field: GraphQLField<any, any>) => GraphQLFieldConfig<any, any> | {
name: string;
field: GraphQLFieldConfig<any, any>;
} | null | undefined;
export default class TransformRootFields implements Transform {
private transform;
constructor(transform: RootTransformer);
transformSchema(originalSchema: GraphQLSchema): GraphQLSchema;
}

View File

@@ -0,0 +1,67 @@
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var isEmptyObject_1 = require("../isEmptyObject");
var visitSchema_1 = require("./visitSchema");
var schemaRecreation_1 = require("../stitching/schemaRecreation");
var TransformRootFields = /** @class */ (function () {
function TransformRootFields(transform) {
this.transform = transform;
}
TransformRootFields.prototype.transformSchema = function (originalSchema) {
var _a;
var _this = this;
return visitSchema_1.visitSchema(originalSchema, (_a = {},
_a[visitSchema_1.VisitSchemaKind.QUERY] = function (type) {
return transformFields(type, function (fieldName, field) {
return _this.transform('Query', fieldName, field);
});
},
_a[visitSchema_1.VisitSchemaKind.MUTATION] = function (type) {
return transformFields(type, function (fieldName, field) {
return _this.transform('Mutation', fieldName, field);
});
},
_a[visitSchema_1.VisitSchemaKind.SUBSCRIPTION] = function (type) {
return transformFields(type, function (fieldName, field) {
return _this.transform('Subscription', fieldName, field);
});
},
_a));
};
return TransformRootFields;
}());
exports.default = TransformRootFields;
function transformFields(type, transformer) {
var resolveType = schemaRecreation_1.createResolveType(function (name, originalType) {
return originalType;
});
var fields = type.getFields();
var newFields = {};
Object.keys(fields).forEach(function (fieldName) {
var field = fields[fieldName];
var newField = transformer(fieldName, field);
if (typeof newField === 'undefined') {
newFields[fieldName] = schemaRecreation_1.fieldToFieldConfig(field, resolveType, true);
}
else if (newField !== null) {
if (newField.name) {
newFields[newField.name] = newField.field;
}
else {
newFields[fieldName] = newField;
}
}
});
if (isEmptyObject_1.default(newFields)) {
return null;
}
else {
return new graphql_1.GraphQLObjectType({
name: type.name,
description: type.description,
astNode: type.astNode,
fields: newFields,
});
}
}
//# sourceMappingURL=TransformRootFields.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"TransformRootFields.js","sourceRoot":"","sources":["../../src/transforms/TransformRootFields.ts"],"names":[],"mappings":";AAAA,mCAMiB;AACjB,kDAA6C;AAE7C,6CAA6D;AAC7D,kEAGuC;AAYvC;IAGE,6BAAY,SAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEM,6CAAe,GAAtB,UAAuB,cAA6B;;QAApD,iBAwBC;QAvBC,OAAO,yBAAW,CAAC,cAAc;YAC/B,GAAC,6BAAe,CAAC,KAAK,IAAG,UAAC,IAAuB;gBAC/C,OAAO,eAAe,CACpB,IAAI,EACJ,UAAC,SAAiB,EAAE,KAA6B;oBAC/C,OAAA,KAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;gBAAzC,CAAyC,CAC5C,CAAC;YACJ,CAAC;YACD,GAAC,6BAAe,CAAC,QAAQ,IAAG,UAAC,IAAuB;gBAClD,OAAO,eAAe,CACpB,IAAI,EACJ,UAAC,SAAiB,EAAE,KAA6B;oBAC/C,OAAA,KAAI,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC;gBAA5C,CAA4C,CAC/C,CAAC;YACJ,CAAC;YACD,GAAC,6BAAe,CAAC,YAAY,IAAG,UAAC,IAAuB;gBACtD,OAAO,eAAe,CACpB,IAAI,EACJ,UAAC,SAAiB,EAAE,KAA6B;oBAC/C,OAAA,KAAI,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC;gBAAhD,CAAgD,CACnD,CAAC;YACJ,CAAC;gBACD,CAAC;IACL,CAAC;IACH,0BAAC;AAAD,CAAC,AAhCD,IAgCC;;AAED,SAAS,eAAe,CACtB,IAAuB,EACvB,WAOa;IAEb,IAAM,WAAW,GAAG,oCAAiB,CACnC,UAAC,IAAY,EAAE,YAA8B;QAC3C,OAAA,YAAY;IAAZ,CAAY,CACf,CAAC;IACF,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAA,SAAS;QACnC,IAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;YACnC,SAAS,CAAC,SAAS,CAAC,GAAG,qCAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;SACrE;aAAM,IAAI,QAAQ,KAAK,IAAI,EAAE;YAC5B,IAC0D,QAAS,CAAC,IAAI,EACtE;gBACA,SAAS,CACiD,QAAS,CAAC,IAAI,CACvE,GAGC,QAAS,CAAC,KAAK,CAAC;aACnB;iBAAM;gBACL,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;aACjC;SACF;IACH,CAAC,CAAC,CAAC;IACH,IAAI,uBAAa,CAAC,SAAS,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAC;KACb;SAAM;QACL,OAAO,IAAI,2BAAiB,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;KACJ;AACH,CAAC"}

View File

@@ -0,0 +1,11 @@
import { SelectionNode, SelectionSetNode } from 'graphql';
import { Transform, Request, Result } from '../Interfaces';
export declare type QueryWrapper = (subtree: SelectionSetNode) => SelectionNode | SelectionSetNode;
export default class WrapQuery implements Transform {
private wrapper;
private extractor;
private path;
constructor(path: Array<string>, wrapper: QueryWrapper, extractor: (result: any) => any);
transformRequest(originalRequest: Request): Request;
transformResult(originalResult: Result): Result;
}

View File

@@ -0,0 +1,78 @@
var __assign = (this && this.__assign) || function () {
__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;
};
return __assign.apply(this, arguments);
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var WrapQuery = /** @class */ (function () {
function WrapQuery(path, wrapper, extractor) {
this.path = path;
this.wrapper = wrapper;
this.extractor = extractor;
}
WrapQuery.prototype.transformRequest = function (originalRequest) {
var _a;
var _this = this;
var document = originalRequest.document;
var fieldPath = [];
var ourPath = JSON.stringify(this.path);
var newDocument = graphql_1.visit(document, (_a = {},
_a[graphql_1.Kind.FIELD] = {
enter: function (node) {
fieldPath.push(node.name.value);
if (ourPath === JSON.stringify(fieldPath)) {
var wrapResult = _this.wrapper(node.selectionSet);
// Selection can be either a single selection or a selection set. If it's just one selection,
// let's wrap it in a selection set. Otherwise, keep it as is.
var selectionSet = wrapResult.kind === graphql_1.Kind.SELECTION_SET
? wrapResult
: {
kind: graphql_1.Kind.SELECTION_SET,
selections: [wrapResult]
};
return __assign(__assign({}, node), { selectionSet: selectionSet });
}
},
leave: function (node) {
fieldPath.pop();
}
},
_a));
return __assign(__assign({}, originalRequest), { document: newDocument });
};
WrapQuery.prototype.transformResult = function (originalResult) {
var rootData = originalResult.data;
if (rootData) {
var data = rootData;
var path = __spreadArrays(this.path);
while (path.length > 1) {
var next = path.shift();
if (data[next]) {
data = data[next];
}
}
data[path[0]] = this.extractor(data[path[0]]);
}
return {
data: rootData,
errors: originalResult.errors
};
};
return WrapQuery;
}());
exports.default = WrapQuery;
//# sourceMappingURL=WrapQuery.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"WrapQuery.js","sourceRoot":"","sources":["../../src/transforms/WrapQuery.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,mCAAkF;AAKlF;IAKE,mBAAY,IAAmB,EAAE,OAAqB,EAAE,SAA+B;QACrF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEM,oCAAgB,GAAvB,UAAwB,eAAwB;;QAAhD,iBAoCC;QAnCC,IAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;QAC1C,IAAM,SAAS,GAAkB,EAAE,CAAC;QACpC,IAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAM,WAAW,GAAG,eAAK,CAAC,QAAQ;YAChC,GAAC,cAAI,CAAC,KAAK,IAAG;gBACZ,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAChC,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;wBACzC,IAAM,UAAU,GAAG,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAEnD,6FAA6F;wBAC7F,8DAA8D;wBAC9D,IAAM,YAAY,GAChB,UAAU,CAAC,IAAI,KAAK,cAAI,CAAC,aAAa;4BACpC,CAAC,CAAC,UAAU;4BACZ,CAAC,CAAC;gCACE,IAAI,EAAE,cAAI,CAAC,aAAa;gCACxB,UAAU,EAAE,CAAC,UAAU,CAAC;6BACzB,CAAC;wBAER,6BACK,IAAI,KACP,YAAY,cAAA,IACZ;qBACH;gBACH,CAAC;gBACD,KAAK,EAAE,UAAC,IAAe;oBACrB,SAAS,CAAC,GAAG,EAAE,CAAC;gBAClB,CAAC;aACF;gBACD,CAAC;QACH,6BACK,eAAe,KAClB,QAAQ,EAAE,WAAW,IACrB;IACJ,CAAC;IAEM,mCAAe,GAAtB,UAAuB,cAAsB;QAC3C,IAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;QACrC,IAAI,QAAQ,EAAE;YACZ,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAM,IAAI,kBAAO,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;oBACd,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;aACF;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,cAAc,CAAC,MAAM;SAC9B,CAAC;IACJ,CAAC;IACH,gBAAC;AAAD,CAAC,AApED,IAoEC"}

16
node_modules/graphql-tools/dist/transforms/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,16 @@
import { Transform } from './transforms';
export { Transform };
export { default as transformSchema } from './transformSchema';
export { default as AddArgumentsAsVariables } from './AddArgumentsAsVariables';
export { default as CheckResultAndHandleErrors, } from './CheckResultAndHandleErrors';
export { default as ReplaceFieldWithFragment, } from './ReplaceFieldWithFragment';
export { default as AddTypenameToAbstract } from './AddTypenameToAbstract';
export { default as FilterToSchema } from './FilterToSchema';
export { default as RenameTypes } from './RenameTypes';
export { default as FilterTypes } from './FilterTypes';
export { default as TransformRootFields } from './TransformRootFields';
export { default as RenameRootFields } from './RenameRootFields';
export { default as FilterRootFields } from './FilterRootFields';
export { default as ExpandAbstractTypes } from './ExpandAbstractTypes';
export { default as ExtractField } from './ExtractField';
export { default as WrapQuery } from './WrapQuery';

30
node_modules/graphql-tools/dist/transforms/index.js generated vendored Normal file
View File

@@ -0,0 +1,30 @@
Object.defineProperty(exports, "__esModule", { value: true });
var transformSchema_1 = require("./transformSchema");
exports.transformSchema = transformSchema_1.default;
var AddArgumentsAsVariables_1 = require("./AddArgumentsAsVariables");
exports.AddArgumentsAsVariables = AddArgumentsAsVariables_1.default;
var CheckResultAndHandleErrors_1 = require("./CheckResultAndHandleErrors");
exports.CheckResultAndHandleErrors = CheckResultAndHandleErrors_1.default;
var ReplaceFieldWithFragment_1 = require("./ReplaceFieldWithFragment");
exports.ReplaceFieldWithFragment = ReplaceFieldWithFragment_1.default;
var AddTypenameToAbstract_1 = require("./AddTypenameToAbstract");
exports.AddTypenameToAbstract = AddTypenameToAbstract_1.default;
var FilterToSchema_1 = require("./FilterToSchema");
exports.FilterToSchema = FilterToSchema_1.default;
var RenameTypes_1 = require("./RenameTypes");
exports.RenameTypes = RenameTypes_1.default;
var FilterTypes_1 = require("./FilterTypes");
exports.FilterTypes = FilterTypes_1.default;
var TransformRootFields_1 = require("./TransformRootFields");
exports.TransformRootFields = TransformRootFields_1.default;
var RenameRootFields_1 = require("./RenameRootFields");
exports.RenameRootFields = RenameRootFields_1.default;
var FilterRootFields_1 = require("./FilterRootFields");
exports.FilterRootFields = FilterRootFields_1.default;
var ExpandAbstractTypes_1 = require("./ExpandAbstractTypes");
exports.ExpandAbstractTypes = ExpandAbstractTypes_1.default;
var ExtractField_1 = require("./ExtractField");
exports.ExtractField = ExtractField_1.default;
var WrapQuery_1 = require("./WrapQuery");
exports.WrapQuery = WrapQuery_1.default;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":";AAGA,qDAA+D;AAAtD,4CAAA,OAAO,CAAmB;AAEnC,qEAA+E;AAAtE,4DAAA,OAAO,CAA2B;AAC3C,2EAEsC;AADpC,kEAAA,OAAO,CAA8B;AAEvC,uEAEoC;AADlC,8DAAA,OAAO,CAA4B;AAErC,iEAA2E;AAAlE,wDAAA,OAAO,CAAyB;AACzC,mDAA6D;AAApD,0CAAA,OAAO,CAAkB;AAClC,6CAAuD;AAA9C,oCAAA,OAAO,CAAe;AAC/B,6CAAuD;AAA9C,oCAAA,OAAO,CAAe;AAC/B,6DAAuE;AAA9D,oDAAA,OAAO,CAAuB;AACvC,uDAAiE;AAAxD,8CAAA,OAAO,CAAoB;AACpC,uDAAiE;AAAxD,8CAAA,OAAO,CAAoB;AACpC,6DAAuE;AAA9D,oDAAA,OAAO,CAAuB;AACvC,+CAAyD;AAAhD,sCAAA,OAAO,CAAgB;AAChC,yCAAmD;AAA1C,gCAAA,OAAO,CAAa"}

View File

@@ -0,0 +1,5 @@
import { GraphQLSchema } from 'graphql';
import { Transform } from '../transforms/transforms';
export default function transformSchema(targetSchema: GraphQLSchema, transforms: Array<Transform>): GraphQLSchema & {
transforms: Array<Transform>;
};

View File

@@ -0,0 +1,22 @@
Object.defineProperty(exports, "__esModule", { value: true });
var makeExecutableSchema_1 = require("../makeExecutableSchema");
var visitSchema_1 = require("../transforms/visitSchema");
var transforms_1 = require("../transforms/transforms");
var resolvers_1 = require("../stitching/resolvers");
function transformSchema(targetSchema, transforms) {
var schema = visitSchema_1.visitSchema(targetSchema, {}, true);
var mapping = resolvers_1.generateSimpleMapping(targetSchema);
var resolvers = resolvers_1.generateProxyingResolvers(targetSchema, transforms, mapping);
schema = makeExecutableSchema_1.addResolveFunctionsToSchema({
schema: schema,
resolvers: resolvers,
resolverValidationOptions: {
allowResolversNotInSchema: true,
},
});
schema = transforms_1.applySchemaTransforms(schema, transforms);
schema.transforms = transforms;
return schema;
}
exports.default = transformSchema;
//# sourceMappingURL=transformSchema.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"transformSchema.js","sourceRoot":"","sources":["../../src/transforms/transformSchema.ts"],"names":[],"mappings":";AACA,gEAAsE;AAEtE,yDAAwD;AACxD,uDAA4E;AAC5E,oDAGgC;AAEhC,SAAwB,eAAe,CACrC,YAA2B,EAC3B,UAA4B;IAE5B,IAAI,MAAM,GAAG,yBAAW,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACjD,IAAM,OAAO,GAAG,iCAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAM,SAAS,GAAG,qCAAyB,CACzC,YAAY,EACZ,UAAU,EACV,OAAO,CACR,CAAC;IACF,MAAM,GAAG,kDAA2B,CAAC;QACnC,MAAM,QAAA;QACN,SAAS,WAAA;QACT,yBAAyB,EAAE;YACzB,yBAAyB,EAAE,IAAI;SAChC;KACF,CAAC,CAAC;IACH,MAAM,GAAG,kCAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClD,MAAc,CAAC,UAAU,GAAG,UAAU,CAAC;IACxC,OAAO,MAA0D,CAAC;AACpE,CAAC;AArBD,kCAqBC"}

View File

@@ -0,0 +1,7 @@
import { GraphQLSchema } from 'graphql';
import { Request, Transform } from '../Interfaces';
export { Transform };
export declare function applySchemaTransforms(originalSchema: GraphQLSchema, transforms: Array<Transform>): GraphQLSchema;
export declare function applyRequestTransforms(originalRequest: Request, transforms: Array<Transform>): Request;
export declare function applyResultTransforms(originalResult: any, transforms: Array<Transform>): any;
export declare function composeTransforms(...transforms: Array<Transform>): Transform;

View File

@@ -0,0 +1,48 @@
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
function applySchemaTransforms(originalSchema, transforms) {
return transforms.reduce(function (schema, transform) {
return transform.transformSchema ? transform.transformSchema(schema) : schema;
}, originalSchema);
}
exports.applySchemaTransforms = applySchemaTransforms;
function applyRequestTransforms(originalRequest, transforms) {
return transforms.reduce(function (request, transform) {
return transform.transformRequest
? transform.transformRequest(request)
: request;
}, originalRequest);
}
exports.applyRequestTransforms = applyRequestTransforms;
function applyResultTransforms(originalResult, transforms) {
return transforms.reduce(function (result, transform) {
return transform.transformResult ? transform.transformResult(result) : result;
}, originalResult);
}
exports.applyResultTransforms = applyResultTransforms;
function composeTransforms() {
var transforms = [];
for (var _i = 0; _i < arguments.length; _i++) {
transforms[_i] = arguments[_i];
}
var reverseTransforms = __spreadArrays(transforms).reverse();
return {
transformSchema: function (originalSchema) {
return applySchemaTransforms(originalSchema, transforms);
},
transformRequest: function (originalRequest) {
return applyRequestTransforms(originalRequest, reverseTransforms);
},
transformResult: function (result) {
return applyResultTransforms(result, reverseTransforms);
},
};
}
exports.composeTransforms = composeTransforms;
//# sourceMappingURL=transforms.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../src/transforms/transforms.ts"],"names":[],"mappings":";;;;;;;;AAKA,SAAgB,qBAAqB,CACnC,cAA6B,EAC7B,UAA4B;IAE5B,OAAO,UAAU,CAAC,MAAM,CACtB,UAAC,MAAqB,EAAE,SAAoB;QAC1C,OAAA,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;IAAtE,CAAsE,EACxE,cAAc,CACf,CAAC;AACJ,CAAC;AATD,sDASC;AAED,SAAgB,sBAAsB,CACpC,eAAwB,EACxB,UAA4B;IAE5B,OAAO,UAAU,CAAC,MAAM,CACtB,UAAC,OAAgB,EAAE,SAAoB;QACrC,OAAA,SAAS,CAAC,gBAAgB;YACxB,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,OAAO;IAFX,CAEW,EAEb,eAAe,CAChB,CAAC;AACJ,CAAC;AAZD,wDAYC;AAED,SAAgB,qBAAqB,CACnC,cAAmB,EACnB,UAA4B;IAE5B,OAAO,UAAU,CAAC,MAAM,CACtB,UAAC,MAAW,EAAE,SAAoB;QAChC,OAAA,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;IAAtE,CAAsE,EACxE,cAAc,CACf,CAAC;AACJ,CAAC;AATD,sDASC;AAED,SAAgB,iBAAiB;IAAC,oBAA+B;SAA/B,UAA+B,EAA/B,qBAA+B,EAA/B,IAA+B;QAA/B,+BAA+B;;IAC/D,IAAM,iBAAiB,GAAG,eAAI,UAAU,EAAE,OAAO,EAAE,CAAC;IACpD,OAAO;QACL,eAAe,EAAf,UAAgB,cAA6B;YAC3C,OAAO,qBAAqB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC;QACD,gBAAgB,EAAhB,UAAiB,eAAwB;YACvC,OAAO,sBAAsB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACpE,CAAC;QACD,eAAe,EAAf,UAAgB,MAAc;YAC5B,OAAO,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAbD,8CAaC"}

View File

@@ -0,0 +1,21 @@
import { GraphQLSchema, GraphQLType, GraphQLNamedType } from 'graphql';
export declare enum VisitSchemaKind {
TYPE = "VisitSchemaKind.TYPE",
SCALAR_TYPE = "VisitSchemaKind.SCALAR_TYPE",
ENUM_TYPE = "VisitSchemaKind.ENUM_TYPE",
COMPOSITE_TYPE = "VisitSchemaKind.COMPOSITE_TYPE",
OBJECT_TYPE = "VisitSchemaKind.OBJECT_TYPE",
INPUT_OBJECT_TYPE = "VisitSchemaKind.INPUT_OBJECT_TYPE",
ABSTRACT_TYPE = "VisitSchemaKind.ABSTRACT_TYPE",
UNION_TYPE = "VisitSchemaKind.UNION_TYPE",
INTERFACE_TYPE = "VisitSchemaKind.INTERFACE_TYPE",
ROOT_OBJECT = "VisitSchemaKind.ROOT_OBJECT",
QUERY = "VisitSchemaKind.QUERY",
MUTATION = "VisitSchemaKind.MUTATION",
SUBSCRIPTION = "VisitSchemaKind.SUBSCRIPTION"
}
export declare type SchemaVisitor = {
[key: string]: TypeVisitor;
};
export declare type TypeVisitor = (type: GraphQLType, schema: GraphQLSchema) => GraphQLNamedType;
export declare function visitSchema(schema: GraphQLSchema, visitor: SchemaVisitor, stripResolvers?: boolean): GraphQLSchema;

View File

@@ -0,0 +1,116 @@
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var schemaRecreation_1 = require("../stitching/schemaRecreation");
var VisitSchemaKind;
(function (VisitSchemaKind) {
VisitSchemaKind["TYPE"] = "VisitSchemaKind.TYPE";
VisitSchemaKind["SCALAR_TYPE"] = "VisitSchemaKind.SCALAR_TYPE";
VisitSchemaKind["ENUM_TYPE"] = "VisitSchemaKind.ENUM_TYPE";
VisitSchemaKind["COMPOSITE_TYPE"] = "VisitSchemaKind.COMPOSITE_TYPE";
VisitSchemaKind["OBJECT_TYPE"] = "VisitSchemaKind.OBJECT_TYPE";
VisitSchemaKind["INPUT_OBJECT_TYPE"] = "VisitSchemaKind.INPUT_OBJECT_TYPE";
VisitSchemaKind["ABSTRACT_TYPE"] = "VisitSchemaKind.ABSTRACT_TYPE";
VisitSchemaKind["UNION_TYPE"] = "VisitSchemaKind.UNION_TYPE";
VisitSchemaKind["INTERFACE_TYPE"] = "VisitSchemaKind.INTERFACE_TYPE";
VisitSchemaKind["ROOT_OBJECT"] = "VisitSchemaKind.ROOT_OBJECT";
VisitSchemaKind["QUERY"] = "VisitSchemaKind.QUERY";
VisitSchemaKind["MUTATION"] = "VisitSchemaKind.MUTATION";
VisitSchemaKind["SUBSCRIPTION"] = "VisitSchemaKind.SUBSCRIPTION";
})(VisitSchemaKind = exports.VisitSchemaKind || (exports.VisitSchemaKind = {}));
function visitSchema(schema, visitor, stripResolvers) {
var types = {};
var resolveType = schemaRecreation_1.createResolveType(function (name) {
if (typeof types[name] === 'undefined') {
throw new Error("Can't find type " + name + ".");
}
return types[name];
});
var queryType = schema.getQueryType();
var mutationType = schema.getMutationType();
var subscriptionType = schema.getSubscriptionType();
var typeMap = schema.getTypeMap();
Object.keys(typeMap).map(function (typeName) {
var type = typeMap[typeName];
if (graphql_1.isNamedType(type) && graphql_1.getNamedType(type).name.slice(0, 2) !== '__') {
var specifiers = getTypeSpecifiers(type, schema);
var typeVisitor = getVisitor(visitor, specifiers);
if (typeVisitor) {
var result = typeVisitor(type, schema);
if (typeof result === 'undefined') {
types[typeName] = schemaRecreation_1.recreateType(type, resolveType, !stripResolvers);
}
else if (result === null) {
types[typeName] = null;
}
else {
types[typeName] = schemaRecreation_1.recreateType(result, resolveType, !stripResolvers);
}
}
else {
types[typeName] = schemaRecreation_1.recreateType(type, resolveType, !stripResolvers);
}
}
});
return new graphql_1.GraphQLSchema({
query: queryType ? types[queryType.name] : null,
mutation: mutationType
? types[mutationType.name]
: null,
subscription: subscriptionType
? types[subscriptionType.name]
: null,
types: Object.keys(types).map(function (name) { return types[name]; }),
});
}
exports.visitSchema = visitSchema;
function getTypeSpecifiers(type, schema) {
var specifiers = [VisitSchemaKind.TYPE];
if (type instanceof graphql_1.GraphQLObjectType) {
specifiers.unshift(VisitSchemaKind.COMPOSITE_TYPE, VisitSchemaKind.OBJECT_TYPE);
var query = schema.getQueryType();
var mutation = schema.getMutationType();
var subscription = schema.getSubscriptionType();
if (type === query) {
specifiers.push(VisitSchemaKind.ROOT_OBJECT, VisitSchemaKind.QUERY);
}
else if (type === mutation) {
specifiers.push(VisitSchemaKind.ROOT_OBJECT, VisitSchemaKind.MUTATION);
}
else if (type === subscription) {
specifiers.push(VisitSchemaKind.ROOT_OBJECT, VisitSchemaKind.SUBSCRIPTION);
}
}
else if (type instanceof graphql_1.GraphQLInputObjectType) {
specifiers.push(VisitSchemaKind.INPUT_OBJECT_TYPE);
}
else if (type instanceof graphql_1.GraphQLInterfaceType) {
specifiers.push(VisitSchemaKind.COMPOSITE_TYPE, VisitSchemaKind.ABSTRACT_TYPE, VisitSchemaKind.INTERFACE_TYPE);
}
else if (type instanceof graphql_1.GraphQLUnionType) {
specifiers.push(VisitSchemaKind.COMPOSITE_TYPE, VisitSchemaKind.ABSTRACT_TYPE, VisitSchemaKind.UNION_TYPE);
}
else if (type instanceof graphql_1.GraphQLEnumType) {
specifiers.push(VisitSchemaKind.ENUM_TYPE);
}
else if (type instanceof graphql_1.GraphQLScalarType) {
specifiers.push(VisitSchemaKind.SCALAR_TYPE);
}
return specifiers;
}
function getVisitor(visitor, specifiers) {
var typeVisitor = null;
var stack = __spreadArrays(specifiers);
while (!typeVisitor && stack.length > 0) {
var next = stack.pop();
typeVisitor = visitor[next];
}
return typeVisitor;
}
//# sourceMappingURL=visitSchema.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"visitSchema.js","sourceRoot":"","sources":["../../src/transforms/visitSchema.ts"],"names":[],"mappings":"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"}