UNPKG

moltres-utils

Version:
71 lines (55 loc) 2.06 kB
"use strict"; 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