123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.enableGraphQLExtensions = exports.GraphQLExtensionStack = exports.GraphQLExtension = void 0;
- const graphql_1 = require("graphql");
- class GraphQLExtension {
- }
- exports.GraphQLExtension = GraphQLExtension;
- class GraphQLExtensionStack {
- constructor(extensions) {
- this.extensions = extensions;
- }
- requestDidStart(o) {
- return this.handleDidStart(ext => ext.requestDidStart && ext.requestDidStart(o));
- }
- parsingDidStart(o) {
- return this.handleDidStart(ext => ext.parsingDidStart && ext.parsingDidStart(o));
- }
- validationDidStart() {
- return this.handleDidStart(ext => ext.validationDidStart && ext.validationDidStart());
- }
- executionDidStart(o) {
- if (o.executionArgs.fieldResolver) {
- this.fieldResolver = o.executionArgs.fieldResolver;
- }
- return this.handleDidStart(ext => ext.executionDidStart && ext.executionDidStart(o));
- }
- didEncounterErrors(errors) {
- this.extensions.forEach(extension => {
- if (extension.didEncounterErrors) {
- extension.didEncounterErrors(errors);
- }
- });
- }
- willSendResponse(o) {
- let reference = o;
- [...this.extensions].reverse().forEach(extension => {
- if (extension.willSendResponse) {
- const result = extension.willSendResponse(reference);
- if (result) {
- reference = result;
- }
- }
- });
- return reference;
- }
- willResolveField(source, args, context, info) {
- const handlers = this.extensions
- .map(extension => extension.willResolveField &&
- extension.willResolveField(source, args, context, info))
- .filter(x => x)
- .reverse();
- return (error, result) => {
- for (const handler of handlers) {
- handler(error, result);
- }
- };
- }
- format() {
- return this.extensions
- .map(extension => extension.format && extension.format())
- .filter(x => x).reduce((extensions, [key, value]) => Object.assign(extensions, { [key]: value }), {});
- }
- handleDidStart(startInvoker) {
- const endHandlers = [];
- this.extensions.forEach(extension => {
- try {
- const endHandler = startInvoker(extension);
- if (endHandler) {
- endHandlers.push(endHandler);
- }
- }
- catch (error) {
- console.error(error);
- }
- });
- return (...errors) => {
- endHandlers.reverse();
- for (const endHandler of endHandlers) {
- try {
- endHandler(...errors);
- }
- catch (error) {
- console.error(error);
- }
- }
- };
- }
- }
- exports.GraphQLExtensionStack = GraphQLExtensionStack;
- function enableGraphQLExtensions(schema) {
- if (schema._extensionsEnabled) {
- return schema;
- }
- schema._extensionsEnabled = true;
- forEachField(schema, wrapField);
- return schema;
- }
- exports.enableGraphQLExtensions = enableGraphQLExtensions;
- function wrapField(field) {
- const fieldResolver = field.resolve;
- field.resolve = (source, args, context, info) => {
- const parentPath = info.path.prev;
- const extensionStack = context && context._extensionStack;
- const handler = (extensionStack &&
- extensionStack.willResolveField(source, args, context, info)) ||
- ((_err, _result) => {
- });
- const resolveObject = info.parentType.resolveObject;
- let whenObjectResolved;
- if (parentPath && resolveObject) {
- if (!parentPath.__fields) {
- parentPath.__fields = {};
- }
- parentPath.__fields[info.fieldName] = info.fieldNodes;
- whenObjectResolved = parentPath.__whenObjectResolved;
- if (!whenObjectResolved) {
- whenObjectResolved = Promise.resolve().then(() => {
- return resolveObject(source, parentPath.__fields, context, info);
- });
- parentPath.__whenObjectResolved = whenObjectResolved;
- }
- }
- try {
- const actualFieldResolver = fieldResolver ||
- (extensionStack && extensionStack.fieldResolver) ||
- graphql_1.defaultFieldResolver;
- let result;
- if (whenObjectResolved) {
- result = whenObjectResolved.then((resolvedObject) => {
- return actualFieldResolver(resolvedObject, args, context, info);
- });
- }
- else {
- result = actualFieldResolver(source, args, context, info);
- }
- whenResultIsFinished(result, handler);
- return result;
- }
- catch (error) {
- handler(error);
- throw error;
- }
- };
- }
- function isPromise(x) {
- return x && typeof x.then === 'function';
- }
- function whenResultIsFinished(result, callback) {
- if (isPromise(result)) {
- result.then((r) => callback(null, r), (err) => callback(err));
- }
- else if (Array.isArray(result)) {
- if (result.some(isPromise)) {
- Promise.all(result).then((r) => callback(null, r), (err) => callback(err));
- }
- else {
- callback(null, result);
- }
- }
- else {
- callback(null, result);
- }
- }
- function forEachField(schema, fn) {
- const typeMap = schema.getTypeMap();
- Object.keys(typeMap).forEach(typeName => {
- const type = typeMap[typeName];
- if (!graphql_1.getNamedType(type).name.startsWith('__') &&
- type instanceof graphql_1.GraphQLObjectType) {
- const fields = type.getFields();
- Object.keys(fields).forEach(fieldName => {
- const field = fields[fieldName];
- fn(field, typeName, fieldName);
- });
- }
- });
- }
- //# sourceMappingURL=index.js.map
|