graphql-mocks
Version:
Tools for setting up graphql test resolvers
59 lines (40 loc) • 1.91 kB
JavaScript
Object.defineProperty(exports, '__esModule', {
value: true
});
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
;