moltres-utils
Version:
Utils for Moltres apps
71 lines (55 loc) • 2.06 kB
JavaScript
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es6.function.name");
var _isArray = _interopRequireDefault(require("../lang/isArray"));
var _isFunction = _interopRequireDefault(require("../lang/isFunction"));
var _isObject = _interopRequireDefault(require("../lang/isObject"));
var _nArySpread = _interopRequireDefault(require("./nArySpread"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Returns a function that dispatches with different strategies based on the object in list position (last argument). If it is an array, executes [fn].
*
* Otherwise, it will default to executing [fn].
*
* @function
* @since v0.0.6
* @category common
* @param {string} name The name of the method to call if it exists
* @param {Function} fn The default function to execute if the named one does not exist on the last arg
* @returns {Function} A function that dispatches on object in list position
* @example
* const get = dispatchable('get', (prop, value) => value[prop])
* get('a', { a: 'foo' }) //=> 'foo'
*
* const obj = {
* props: {
* a: 'bar'
* }
* get: (prop) => obj.props[prop]
* }
* get('a', obj) //=> 'bar'
*/
var dispatchable = function dispatchable(name, fn) {
var arity = fn.length;
var override = function override() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (args.length === 0) {
return fn.apply(this);
}
var obj = args[args.length - 1];
if (!(0, _isArray.default)(obj) && (0, _isObject.default)(obj) && (0, _isFunction.default)(obj[name]) && obj !== this) {
return obj[name].apply(obj, args);
}
return fn.apply(this, args);
};
return (0, _nArySpread.default)(arity, override);
};
var _default = dispatchable;
exports.default = _default;
//# sourceMappingURL=dispatchable.js.map
;