graphql-mocks
Version:
Tools for setting up graphql test resolvers
87 lines (63 loc) • 3.59 kB
JavaScript
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
Object.defineProperty(exports, '__esModule', {
value: true
});
var pack = require('../pack/pack.js');
require('../pack/utils/embed-pack-options-wrapper.js');
var ramda = require('ramda');
var highlight = require('../highlight/highlight.js');
require('graphql');
var fromResolverMap = require('../highlight/highlighter/from-resolver-map.js');
var walk = require('../highlight/utils/walk.js');
var getResolver = require('./get-resolver.js');
var setResolver = require('./set-resolver.js');
var applyWrappers = require('../resolver/apply-wrappers.js');
function layer(partials, options) {
options = _objectSpread({
replace: false,
wrappers: []
}, options);
const layerMiddlewares = partials.map(resolverMap => previous => {
return ramda.mergeDeepRight(previous, resolverMap);
});
const middleware = async function layerMiddleware(resolverMap, packOptions) {
const {
graphqlSchema
} = packOptions.dependencies;
if (!graphqlSchema) throw new Error('`graphqlSchema` is a required dependency');
const packed = await pack.pack({}, layerMiddlewares, packOptions);
const layeredResolverMap = packed.resolverMap;
const resolverMapReferences = highlight.hi(graphqlSchema).include(fromResolverMap.fromResolverMap(layeredResolverMap)).references; // walk references from the resulting layeredResolverMap and apply them to
// the final resolverMap for this middlware with any provided wrappers
await walk.walk(graphqlSchema, resolverMapReferences, async function ({
reference,
type,
field
}) {
var _options, _options$wrappers;
let resolver = getResolver.getResolver(layeredResolverMap, reference);
if (resolver && ((_options = options) === null || _options === void 0 ? void 0 : (_options$wrappers = _options.wrappers) === null || _options$wrappers === void 0 ? void 0 : _options$wrappers.length)) {
resolver = await applyWrappers.applyWrappers(resolver, options.wrappers, {
schema: graphqlSchema,
resolverMap,
packOptions,
type: type,
field: field
});
}
if (resolver) {
var _options2;
setResolver.setResolver(resolverMap, reference, resolver, {
replace: (_options2 = options) === null || _options2 === void 0 ? void 0 : _options2.replace
});
}
});
return resolverMap;
};
return middleware;
}
exports.layer = layer;
//# sourceMappingURL=layer.js.map
;