UNPKG

@pallad/graphql-command-bus

Version:
58 lines (57 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Mapper = void 0; const monet_1 = require("monet"); const is = require("predicates"); const EntityHelper_1 = require("./EntityHelper"); class Mapper { constructor(commandBusHandler, dataLoaderManager) { this.commandBusHandler = commandBusHandler; this.dataLoaderManager = dataLoaderManager; } async handleCommand(command, executionContext, resultHandler) { const result = (await monet_1.Either.fromPromise(this.commandBusHandler(command, executionContext))).toValidation(); const finalResult = resultHandler ? await resultHandler(result, executionContext) : result; if (finalResult.isFail()) { throw finalResult.fail(); } return finalResult.success(); } createResolver(options) { const func = async (source, args, context) => { const data = { source, args, context }; const command = await options.commandFactory(data); const executionContext = { contextOptions: options.context, gqlContext: context }; return this.handleCommand(command, executionContext, options.resultHandler); }; func.rp = (rp) => { return func(rp.source, rp.args, rp.context); }; return func; } createDataLoaderResolver(dataLoaderName, argKeyName) { return (rp) => { if (!argKeyName && Object.keys(rp.args).length >= 2) { throw new Error(`Could not find key for dataloader: ${dataLoaderName}. No argKeyName provided and args have more than one values`); } const key = argKeyName ? rp.args[argKeyName] : rp.args[Object.keys(rp.args)[0]]; if (is.empty(key)) { return; } return rp.context.dataLoaders.getDataLoader(dataLoaderName).load(key); }; } createEntityHelper(entityType) { return new EntityHelper_1.EntityHelper(entityType, this, this.dataLoaderManager); } } exports.Mapper = Mapper; const mapper = new Mapper({}, {}); mapper.createResolver({ commandFactory() { return {}; } });