ramda-extension
Version:
Helpful functions built on top of the mighty Ramda
48 lines (40 loc) • 2.19 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _ramda = require("ramda");
var _argumentsToList = _interopRequireDefault(require("./argumentsToList"));
var _equalsLength = _interopRequireDefault(require("./equalsLength"));
var _overHead = _interopRequireDefault(require("./overHead"));
var pipe4 = (0, _ramda.curryN)(4, _ramda.pipe);
var pipe2 = (0, _ramda.curryN)(2, _ramda.pipe);
var call3 = (0, _ramda.curryN)(3, _ramda.call);
var mapOrphans = (0, _ramda.o)(_ramda.map, (0, _ramda.when)((0, _equalsLength.default)(1)));
var prependUndefined = (0, _ramda.o)(mapOrphans((0, _ramda.prepend)(undefined)), _ramda.transpose);
var appendUndefined = (0, _ramda.o)(mapOrphans((0, _ramda.append)(undefined)), _ramda.transpose);
var mapLength = (0, _ramda.map)(_ramda.length);
var inputIsSameAsDefault = (0, _ramda.o)((0, _ramda.apply)(_ramda.equals), mapLength);
var inputIsBigger = (0, _ramda.o)((0, _ramda.apply)(_ramda.lt), mapLength);
var inputIsSmaller = (0, _ramda.o)((0, _ramda.apply)(_ramda.gt), mapLength);
var transposeAndFillMissing = (0, _ramda.cond)([[inputIsSameAsDefault, _ramda.transpose], [inputIsBigger, prependUndefined], [inputIsSmaller, appendUndefined]]);
var makeDefaultArgs = (0, _ramda.o)((0, _ramda.apply)(_ramda.call), (0, _overHead.default)(_ramda.defaultTo));
var transformationPipe = pipe4(_argumentsToList.default, transposeAndFillMissing, (0, _ramda.map)(makeDefaultArgs));
var createTransformationPipeWithSuppliedFn = (0, _ramda.o)(call3, (0, _ramda.o)(transformationPipe, _ramda.apply));
var waitForArguments = pipe2(_argumentsToList.default);
var callInputsAndWaitForArguments = (0, _ramda.pipe)(_ramda.call, waitForArguments);
/**
* Creates default arguments for given function
*
* @func
* @category Function
*
* @example
*
* R_.defaultArgs(['a', 'b'], R.concat)(undefined, 'c') // ac
*
*/
var defaultArgs = (0, _ramda.useWith)((0, _ramda.flip)(callInputsAndWaitForArguments), [_ramda.identity, createTransformationPipeWithSuppliedFn]);
var _default = defaultArgs;
exports.default = _default;