UNPKG

graphql-mocks

Version:

Tools for setting up graphql test resolvers

40 lines (38 loc) 1.83 kB
'use strict'; var graphql = require('graphql'); var constants = require('./constants.js'); function isNamedWrapper(wrapper) { return wrapper && 'name' in wrapper && 'wrap' in wrapper; } async function applyWrappers(resolver, wrappers, wrapperOptions) { wrappers = [...wrappers]; let wrapper = wrappers.shift(); if (typeof resolver !== 'function') { throw new Error(`Resolver for wrapResolver must be a function, got ${typeof resolver}`); } if (!wrapper) { return resolver; } let wrapperName = wrapper.name || 'UNNAMED'; if (isNamedWrapper(wrapper)) { const namedWrapper = wrapper; wrapperName = namedWrapper.name; const wrapperFor = namedWrapper.wrapperFor; if (wrapperFor === constants.WrapperFor.FIELD && !graphql.isObjectType(wrapperOptions.type)) { var _wrapperOptions$field; throw new Error(`Wrapper "${wrapperName}" is for FIELD resolvers and can't wrap ["${wrapperOptions.type.name}", "${(_wrapperOptions$field = wrapperOptions.field) === null || _wrapperOptions$field === void 0 ? void 0 : _wrapperOptions$field.name}"].`); } if (wrapperFor === constants.WrapperFor.TYPE && !graphql.isAbstractType(wrapperOptions.type)) { throw new Error(`Wrapper "${wrapperName}" is for TYPE resolvers and can't wrap ["${wrapperOptions.type.name}"].`); } wrapper = wrapper.wrap.bind(wrapper); } // eslint-disable-next-line @typescript-eslint/no-explicit-any const wrappedResolver = await wrapper(resolver, wrapperOptions); if (typeof wrappedResolver !== 'function') { throw new Error(`Wrapper "${wrapperName}" was not a function or did not have a wrap method, got ${typeof wrappedResolver}.`); } return applyWrappers(wrappedResolver, wrappers, wrapperOptions); } exports.applyWrappers = applyWrappers; //# sourceMappingURL=apply-wrappers.js.map