wilderness-core
Version:
The SVG animation engine behind Wilderness
99 lines (82 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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;
};
exports.input = input;
exports.output = output;