foop
Version:
interfaces that describe their intentions.
48 lines (46 loc) • 3.71 kB
JavaScript
var argumentor = require('../cast/argumentor')
/**
* @desc flip the fn args:
* Creates a function that invokes `func` with arguments reversed.
*
* @memberOf fp
* @symb 🙃
* @since 5.0.0-beta.4
*
* @param {Function} fn The function to invoke with its first two parameters reversed.
* @return {*} The result of invoking `fn` with its first two parameters' order reversed.
*
* @func
* @ramda v0.1.0
* @category Function
* @sig ((a, b, c, ...) -> z) -> (b -> a -> c -> ... -> z)
*
* @TODO could also just call with fn.apply([b, a]), and have flipN
*
* {@link https://github.com/lodash/lodash/blob/4.2.1-npm-packages/lodash.flip/index.js lodash-flip}
* {@link https://github.com/ramda/ramda/blob/master/src/flip.js ramda-flip}
* @see {@link ramda-flip}
* @see {@link lodash-flip}
* @see fp/reverse
*
* @types fp
* @tests fp/flip
*
* @example
*
* var mergeThree = (a, b, c) => [].concat(a, b, c)
* mergeThree(1, 2, 3); //=> [1, 2, 3]
* flip(mergeThree)(1, 2, 3); //=> [3, 2, 1]
*
* const flipped = flip((...args) => args)
* flipped('a', 'b', 'c', 'd')
* //=> ['d', 'c', 'b', 'a']
*
*/
module.exports = function flip(fn) {
// could wrap in arity
return function() {
return fn.apply(this, argumentor.apply(null, arguments).reverse())
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpcC5qcyIsInNvdXJjZXMiOlsiZmxpcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBhcmd1bWVudG9yID0gcmVxdWlyZSgnLi4vY2FzdC9hcmd1bWVudG9yJylcblxuLyoqXG4gKiBAZGVzYyBmbGlwIHRoZSBmbiBhcmdzOlxuICogICAgICAgQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gKlxuICogQG1lbWJlck9mIGZwXG4gKiBAc3ltYiDwn5mDXG4gKiBAc2luY2UgNS4wLjAtYmV0YS40XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGludm9rZSB3aXRoIGl0cyBmaXJzdCB0d28gcGFyYW1ldGVycyByZXZlcnNlZC5cbiAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgaW52b2tpbmcgYGZuYCB3aXRoIGl0cyBmaXJzdCB0d28gcGFyYW1ldGVycycgb3JkZXIgcmV2ZXJzZWQuXG4gKlxuICogQGZ1bmNcbiAqIEByYW1kYSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyAoKGEsIGIsIGMsIC4uLikgLT4geikgLT4gKGIgLT4gYSAtPiBjIC0+IC4uLiAtPiB6KVxuICpcbiAqIEBUT0RPIGNvdWxkIGFsc28ganVzdCBjYWxsIHdpdGggZm4uYXBwbHkoW2IsIGFdKSwgYW5kIGhhdmUgZmxpcE5cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjIuMS1ucG0tcGFja2FnZXMvbG9kYXNoLmZsaXAvaW5kZXguanMgbG9kYXNoLWZsaXB9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvbWFzdGVyL3NyYy9mbGlwLmpzIHJhbWRhLWZsaXB9XG4gKiBAc2VlIHtAbGluayByYW1kYS1mbGlwfVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWZsaXB9XG4gKiBAc2VlIGZwL3JldmVyc2VcbiAqXG4gKiBAdHlwZXMgZnBcbiAqIEB0ZXN0cyBmcC9mbGlwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBtZXJnZVRocmVlID0gKGEsIGIsIGMpID0+IFtdLmNvbmNhdChhLCBiLCBjKVxuICogICAgICBtZXJnZVRocmVlKDEsIDIsIDMpOyAgICAgICAvLz0+IFsxLCAyLCAzXVxuICogICAgICBmbGlwKG1lcmdlVGhyZWUpKDEsIDIsIDMpOyAvLz0+IFszLCAyLCAxXVxuICpcbiAqICAgICAgY29uc3QgZmxpcHBlZCA9IGZsaXAoKC4uLmFyZ3MpID0+IGFyZ3MpXG4gKiAgICAgIGZsaXBwZWQoJ2EnLCAnYicsICdjJywgJ2QnKVxuICogICAgICAvLz0+IFsnZCcsICdjJywgJ2InLCAnYSddXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsaXAoZm4pIHtcbiAgLy8gY291bGQgd3JhcCBpbiBhcml0eVxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50b3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5yZXZlcnNlKCkpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0NoRCxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTs7RUFFakMsT0FBTyxXQUFXO0lBQ2hCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7R0FDbkU7Q0FDRjsifQ==