UNPKG

wilderness-core

Version:
92 lines (77 loc) 1.96 kB
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * A group of functions to transform/untransform a value. * * @typedef {Object} Middleware * * @property {string} name - The name of the middleware. * @property {function} input - Transform. * @property {function} output - Untransform. */ /** * Run every part of a value through a function. * * @param {*} value * @param {function} func * * @returns {*} * * @example * apply(2, n => n * 2) */ var apply = function apply(value, func) { var v = func(value); if ((typeof v === 'undefined' ? 'undefined' : _typeof(v)) !== 'object') { return v; } else if (Array.isArray(v)) { var arr = []; for (var i = 0, l = v.length; i < l; i++) { arr.push(apply(v[i], func)); } return arr; } else if (v !== null) { var obj = {}; for (var k in v) { obj[k] = apply(v[k], func); } return obj; } return v; }; /** * Runs each Middleware input function in turn on a value. * * @param {*} value * @param {Middleware[]} middleware * * @returns {*} * * @example * input({ foo: 1, bar: [ 2, 3 ] }, middleware) */ var input = function input(value, middleware) { var v = value; for (var i = 0, l = middleware.length; i < l; i++) { v = apply(v, middleware[i].input); } return v; }; /** * Runs each Middleware output function in reverse on a value. * * @param {*} value * @param {Middleware[]} middleware * * @returns {*} * * @example * output({ foo: 1, bar: [ 2, 3 ] }, middleware) */ var output = function output(value, middleware) { var v = value; for (var i = middleware.length - 1; i >= 0; i--) { v = apply(v, middleware[i].output); } return v; }; export { input, output };