moltres-utils
Version:
Utils for Moltres apps
100 lines (71 loc) • 3.98 kB
JavaScript
require("core-js/modules/es6.object.define-property");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.dispatchableAssoc = exports.baseAssoc = exports.default = void 0;
require("core-js/modules/es7.symbol.async-iterator");
require("core-js/modules/es6.symbol");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.is-array");
var _allWith = _interopRequireDefault(require("../common/allWith"));
var _always = _interopRequireDefault(require("./always"));
var _assocPath = _interopRequireDefault(require("./assocPath"));
var _castPath = _interopRequireDefault(require("./castPath"));
var _curry = _interopRequireDefault(require("../common/curry"));
var _dispatchable = _interopRequireDefault(require("../common/dispatchable"));
var _isArray = _interopRequireDefault(require("../lang/isArray"));
var _isFunction = _interopRequireDefault(require("../lang/isFunction"));
var _isUndefined = _interopRequireDefault(require("../lang/isUndefined"));
var _over = _interopRequireDefault(require("./over"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var baseAssoc = function baseAssoc(selector, value, collection) {
if ((0, _isUndefined.default)(selector)) {
return value;
}
if ((0, _isFunction.default)(selector)) {
return (0, _over.default)(selector, (0, _always.default)(value), collection);
}
var parts = selector;
if (!(0, _isArray.default)(selector)) {
parts = (0, _castPath.default)(selector, collection);
}
return (0, _assocPath.default)(parts, value, collection);
};
exports.baseAssoc = baseAssoc;
var dispatchableAssoc = (0, _dispatchable.default)('assoc', baseAssoc);
/**
* Makes a shallow clone of an object, setting or overriding the specified property with the given value. Note that this copies and flattens prototype properties onto the new object as well. All non-primitive properties are copied by reference.
*
* Supports path based property selectors 'foo.bar' and functional selectors which performs an over on the entire collection and sets each matching selector to the given value.
*
* @function
* @since v0.0.3
* @category data
* @sig String -> a -> {k: v} -> {k: v}
* @param {Array | String | Function} selector The property path to set or functional selector
* @param {*} value The new value
* @param {*} collection The collection to clone and assign the new value
* @returns {*} A new collection equivalent to the original except for the changed selector path.
* @example
*
* assoc('c', 3, {a: 1, b: 2}) //=> {a: 1, b: 2, c: 3}
* assoc('c.d', 3, {a: 1, b: 2}) //=> {a: 1, b: 2, c: { d: 3 }}
* assoc([ 'c', 'd' ], 3, {a: 1, b: 2}) //=> {a: 1, b: 2, c: { d: 3 }}
*/
exports.dispatchableAssoc = dispatchableAssoc;
var assoc = (0, _curry.default)(function (selector, value, collection) {
return (0, _allWith.default)(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
resolvedSelector = _ref2[0],
resolvedCollection = _ref2[1];
return dispatchableAssoc(resolvedSelector, value, resolvedCollection);
}, [selector, collection]);
});
var _default = assoc;
exports.default = _default;
//# sourceMappingURL=assoc.js.map
;