fluid-func
Version:
A way to write your code with functional programming in mind.
59 lines (54 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var executeActions = function executeActions(context, plugins) {
var resolvedContext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
var done = arguments[4];
if (index < plugins.length) {
try {
var plugin = plugins[index];
var action = plugin.action(context);
if (action instanceof Promise) {
action.then(function (data) {
resolvedContext = _extends({}, resolvedContext);
resolvedContext[plugin.name] = data;
index++;
executeActions(context, plugins, resolvedContext, index, done);
}).catch(function (err) {
done(err);
});
} else {
if (action) {
resolvedContext = _extends({}, resolvedContext);
resolvedContext[plugin.name] = action;
}
index++;
executeActions(context, plugins, resolvedContext, index, done);
}
} catch (err) {
done(err);
}
} else {
done(undefined, resolvedContext);
}
};
var executeBeforePlugins = exports.executeBeforePlugins = function executeBeforePlugins(chain, context, plugins) {
var beforeChain = "before_" + chain;
var chainPlugins = plugins ? plugins[beforeChain] : undefined;
return new Promise(function (resolve, reject) {
if (chainPlugins) {
executeActions(context, chainPlugins, {}, 0, function (err, resolvedContext) {
if (err) {
reject(err);
} else {
resolve(resolvedContext);
}
});
} else {
resolve();
}
});
};