graphql-mocks
Version:
Tools for setting up graphql test resolvers
46 lines (45 loc) • 2.61 kB
JavaScript
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
import { isObjectType, isAbstractType } from 'graphql';
import { WrapperFor } from './constants.mjs';
function isNamedWrapper(wrapper) {
return wrapper && 'name' in wrapper && 'wrap' in wrapper;
}
function applyWrappers(_x, _x2, _x3) {
return _applyWrappers.apply(this, arguments);
}
function _applyWrappers() {
_applyWrappers = _asyncToGenerator(function* (resolver, wrappers, wrapperOptions) {
wrappers = [...wrappers];
var wrapper = wrappers.shift();
if (typeof resolver !== 'function') {
throw new Error("Resolver for wrapResolver must be a function, got ".concat(typeof resolver));
}
if (!wrapper) {
return resolver;
}
var wrapperName = wrapper.name || 'UNNAMED';
if (isNamedWrapper(wrapper)) {
var namedWrapper = wrapper;
wrapperName = namedWrapper.name;
var wrapperFor = namedWrapper.wrapperFor;
if (wrapperFor === WrapperFor.FIELD && !isObjectType(wrapperOptions.type)) {
var _wrapperOptions$field;
throw new Error("Wrapper \"".concat(wrapperName, "\" is for FIELD resolvers and can't wrap [\"").concat(wrapperOptions.type.name, "\", \"").concat((_wrapperOptions$field = wrapperOptions.field) === null || _wrapperOptions$field === void 0 ? void 0 : _wrapperOptions$field.name, "\"]."));
}
if (wrapperFor === WrapperFor.TYPE && !isAbstractType(wrapperOptions.type)) {
throw new Error("Wrapper \"".concat(wrapperName, "\" is for TYPE resolvers and can't wrap [\"").concat(wrapperOptions.type.name, "\"]."));
}
wrapper = wrapper.wrap.bind(wrapper);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
var wrappedResolver = yield wrapper(resolver, wrapperOptions);
if (typeof wrappedResolver !== 'function') {
throw new Error("Wrapper \"".concat(wrapperName, "\" was not a function or did not have a wrap method, got ").concat(typeof wrappedResolver, "."));
}
return applyWrappers(wrappedResolver, wrappers, wrapperOptions);
});
return _applyWrappers.apply(this, arguments);
}
export { applyWrappers };
//# sourceMappingURL=apply-wrappers.mjs.map