UNPKG

@resin/pinejs

Version:

Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make

59 lines 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.instantiateHooks = exports.rollbackRequestHooks = exports.SideEffectHook = exports.Hook = void 0; const Bluebird = require("bluebird"); const _ = require("lodash"); const control_flow_1 = require("./control-flow"); class Hook { constructor(hookFn) { this.hookFn = hookFn; } async run(...args) { return this.hookFn(...args); } } exports.Hook = Hook; class SideEffectHook extends Hook { constructor(hookFn) { super(hookFn); this.rollbackFns = []; this.rolledBack = false; } registerRollback(fn) { if (this.rolledBack) { Bluebird.try(fn); } else { this.rollbackFns.push(fn); } } rollback() { if (this.rolledBack) { return; } this.rolledBack = true; return Bluebird.resolve(control_flow_1.settleMapSeries(this.rollbackFns, (fn) => fn())).return(); } } exports.SideEffectHook = SideEffectHook; exports.rollbackRequestHooks = (hooks) => { if (hooks == null) { return; } control_flow_1.settleMapSeries(_(hooks).flatMap().compact().value(), (hook) => { if (hook instanceof SideEffectHook) { return hook.rollback(); } }); }; exports.instantiateHooks = (hooks) => _.mapValues(hooks, (typeHooks) => { return typeHooks.map((hook) => { if (hook.effects) { return new SideEffectHook(hook.HOOK); } else { return new Hook(hook.HOOK); } }); }); //# sourceMappingURL=hooks.js.map