UNPKG

foop

Version:

interfaces that describe their intentions.

56 lines (54 loc) 4.84 kB
var isArray = require('../is/array') var isFunction = require('../is/function') var argumentor = require('../cast/argumentor') /** * This checks whether a function has a [methodname] function. If it isn't an * array it will execute that function otherwise it will default to the internal * implementation. * * @memberOf fp * @since 5.0.0-beta.5 * * @name preferExistingMethod * @alias useMethodIfExists * @alias _checkForMethod * * @param {Function} fn internal implemtation * @param {String} methodname property to check for a custom implementation * @return {Object} Whatever the return value of the method is. * * {@link https://github.com/ramda/ramda/blob/master/src/internal/_checkForMethod.js ramda-check-for-method} * @see {@link ramda-check-for-method} * * @TODO arity * * @example * * const fallback = (list, index) => Array.prototype.slice.call(list, index) * const slice = useMethodIfExists('slice', fallback) * * const list = ['zero', 'one'] * const sliced = (list, 0) * /// uses list.slice(0) * //=> 0 * */ module.exports = function preferExistingMethod(methodname, fn) { return function() { var length = arguments.length if (length === 0) { return fn() } else { var obj = arguments[length - 1] return (isArray(obj) || !isFunction(obj[methodname])) ? fn.apply(this, arguments) : obj[methodname] .apply( obj, argumentor.apply(null, arguments).slice(length - 1) ) } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyRXhpc3RpbmdNZXRob2QuanMiLCJzb3VyY2VzIjpbInByZWZlckV4aXN0aW5nTWV0aG9kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi4vaXMvZnVuY3Rpb24nKVxuY29uc3QgYXJndW1lbnRvciA9IHJlcXVpcmUoJy4uL2Nhc3QvYXJndW1lbnRvcicpXG5cbi8qKlxuICogVGhpcyBjaGVja3Mgd2hldGhlciBhIGZ1bmN0aW9uIGhhcyBhIFttZXRob2RuYW1lXSBmdW5jdGlvbi4gSWYgaXQgaXNuJ3QgYW5cbiAqIGFycmF5IGl0IHdpbGwgZXhlY3V0ZSB0aGF0IGZ1bmN0aW9uIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIGludGVybmFsXG4gKiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAbWVtYmVyT2YgZnBcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjVcbiAqXG4gKiBAbmFtZSBwcmVmZXJFeGlzdGluZ01ldGhvZFxuICogQGFsaWFzIHVzZU1ldGhvZElmRXhpc3RzXG4gKiBAYWxpYXMgX2NoZWNrRm9yTWV0aG9kXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gaW50ZXJuYWwgaW1wbGVtdGF0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kbmFtZSBwcm9wZXJ0eSB0byBjaGVjayBmb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAqIEByZXR1cm4ge09iamVjdH0gV2hhdGV2ZXIgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgbWV0aG9kIGlzLlxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi9tYXN0ZXIvc3JjL2ludGVybmFsL19jaGVja0Zvck1ldGhvZC5qcyByYW1kYS1jaGVjay1mb3ItbWV0aG9kfVxuICogQHNlZSB7QGxpbmsgcmFtZGEtY2hlY2stZm9yLW1ldGhvZH1cbiAqXG4gKiBAVE9ETyBhcml0eVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgY29uc3QgZmFsbGJhY2sgPSAobGlzdCwgaW5kZXgpID0+IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGxpc3QsIGluZGV4KVxuICogICAgY29uc3Qgc2xpY2UgPSB1c2VNZXRob2RJZkV4aXN0cygnc2xpY2UnLCBmYWxsYmFjaylcbiAqXG4gKiAgICBjb25zdCBsaXN0ID0gWyd6ZXJvJywgJ29uZSddXG4gKiAgICBjb25zdCBzbGljZWQgPSAobGlzdCwgMClcbiAqICAgIC8vLyB1c2VzIGxpc3Quc2xpY2UoMClcbiAqICAgIC8vPT4gMFxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcmVmZXJFeGlzdGluZ01ldGhvZChtZXRob2RuYW1lLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aFxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmbigpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3Qgb2JqID0gYXJndW1lbnRzW2xlbmd0aCAtIDFdXG4gICAgICByZXR1cm4gKGlzQXJyYXkob2JqKSB8fCAhaXNGdW5jdGlvbihvYmpbbWV0aG9kbmFtZV0pKVxuICAgICAgICA/IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgOiBvYmpbbWV0aG9kbmFtZV1cbiAgICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgICBvYmosXG4gICAgICAgICAgICBhcmd1bWVudG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cykuc2xpY2UobGVuZ3RoIC0gMSlcbiAgICAgICAgICApXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzVDQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDaEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUU7RUFDN0QsT0FBTyxXQUFXO0lBQ2hCQSxHQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNoQixPQUFPLEVBQUUsRUFBRTtLQUNaO1NBQ0k7TUFDSEEsR0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNqQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1VBQ2pELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztVQUN6QixHQUFHLENBQUMsVUFBVSxDQUFDO1dBQ2QsS0FBSztZQUNKLEdBQUc7WUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztXQUNwRDtLQUNOO0dBQ0Y7Q0FDRjsifQ==