UNPKG

fluid-chains

Version:

A simple way to organize asynchronous Javascript functions.

75 lines (64 loc) 2.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.RunMiddleware = exports.CM = undefined; var _ChainStorage = require('./ChainStorage'); var _ChainContext = require('./ChainContext'); var _ChainContext2 = _interopRequireDefault(_ChainContext); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var CM = exports.CM = function CM(name, action) { _classCallCheck(this, CM); validate(name, action); this.type = 'MIDDLEWARE'; this.execute = function (done, param, next) { _lodash2.default.defer(function () { try { action(param, next, done); } catch (err) { done(err); } }); }; (0, _ChainStorage.putChain)(name, this); }; var RunMiddleware = exports.RunMiddleware = function RunMiddleware(param, done, next) { var middlewares = (0, _ChainStorage.getMiddlewares)(); if (middlewares && middlewares.length) { runMiddleware(middlewares, param, done, next); } else { done(); } }; function runMiddleware(middlewares, param, done, next, index) { if (!index) { index = 0; } try { if (index < middlewares.length) { _lodash2.default.clone(middlewares[index]()).execute(function (err) { if (err) { done(err); } else { index++; runMiddleware(middlewares, param, done, next, index); } }, param, next); } else { done(); } } catch (err) { done(err); } } function validate(name, action) { if (!name) { throw new Error('Name is required.'); } if (!action) { throw new Error('Action (Function) is required.'); } }