fluorine-lib
Version:
Reactive state and side effect management for React using a single stream of actions
70 lines (50 loc) • 2.57 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; };
exports.default = wrapActions;
var _assert = require('./assert');
var assert = _interopRequireDefault(_assert).default;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function wrapActions(observer, arg) {
var wrapRecursively = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
assert((typeof observer === 'undefined' ? 'undefined' : _typeof(observer)) === 'object' && typeof observer.next === 'function', 'Expected observer to be an object containing at least a next method.');
var transform = function transform(fn) {
return function () {
return observer.next(fn.apply(undefined, arguments));
};
};
var wrap = function wrap(input) {
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (typeof input === 'function') {
return transform(input);
}
if (Array.isArray(input)) {
return input.map(function (x, key) {
if (wrapRecursively) {
return wrap(x, keys.concat(key));
}
assert(typeof x === 'function', 'wrapActions: Expected a `function`' + (keys.length ? ' in ' + keys.toString() : '') + ' but got `' + (typeof x === 'undefined' ? 'undefined' : _typeof(x)) + '`.');
return transform(x);
});
}
if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object') {
return Object.keys(input).reduce(function (prev, key) {
if (input.hasOwnProperty(key)) {
var _x3 = input[key];
if (wrapRecursively) {
prev[key] = wrap(_x3, keys.concat(key));
} else {
assert(typeof _x3 === 'function', 'wrapActions: Expected a `function`' + (keys.length ? ' in ' + keys.toString() : '') + ' but got `' + (typeof _x3 === 'undefined' ? 'undefined' : _typeof(_x3)) + '`.');
prev[key] = transform(_x3);
}
}
return prev;
}, {});
}
throw new Error('wrapActions: Expected a `function`' + (keys.length ? ' in ' + keys.toString() : '') + ' but got `' + (typeof x === 'undefined' ? 'undefined' : _typeof(x)) + '`.');
};
return wrap(arg);
}
module.exports = exports['default'];