indexed
Version:
database-like indexed array that always returns a new array
130 lines (105 loc) • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _arrayMutative = require('./array-mutative');
var _utils = require('./utils');
var _constants = require('./constants');
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
function initializeMany(initializer, vals) {
var length = vals.length;
var i = 0;
var results = [];
while (i < length) {
var result = initializer(vals[i++]);
if (result === _constants.BREAK) {
return _constants.BREAK;
}
if (result === _constants.SKIP) {
continue;
}
results.push(result);
}
return results;
}
function concatInitialize(initializer, props, arr) {
var indexes = props.indexes;
for (var _len = arguments.length, values = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
values[_key - 3] = arguments[_key];
}
var length = values.length;
var i = 0;
var results = [];
while (i < length) {
var val = values[i++];
var result = !(0, _utils.isArrayLike)(val) ? initializer(val) : initializeMany(initializer, val);
if (result === _constants.BREAK) {
return [indexes, arr];
}
if (result === _constants.SKIP) {
continue;
}
results.push(result);
}
return _arrayMutative.concat.apply(undefined, [props, arr].concat(results));
}
function pushInitialize(initializer, props, arr) {
for (var _len2 = arguments.length, values = Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
values[_key2 - 3] = arguments[_key2];
}
var indexes = props.indexes;
values = initializeMany(initializer, values);
if (values === _constants.BREAK) {
return [indexes, arr];
}
return _arrayMutative.push.apply(undefined, [props, arr].concat(_toConsumableArray(values)));
}
function spliceInitialize(initializer, props, arr, start, deleteCount) {
for (var _len3 = arguments.length, values = Array(_len3 > 5 ? _len3 - 5 : 0), _key3 = 5; _key3 < _len3; _key3++) {
values[_key3 - 5] = arguments[_key3];
}
var indexes = props.indexes;
values = initializeMany(initializer, values);
if (values === _constants.BREAK) {
return [indexes, arr];
}
return _arrayMutative.splice.apply(undefined, [props, arr, start, deleteCount].concat(_toConsumableArray(values)));
}
function unshiftInitialize(initializer, props, arr) {
for (var _len4 = arguments.length, values = Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) {
values[_key4 - 3] = arguments[_key4];
}
var indexes = props.indexes;
values = initializeMany(initializer, values);
if (values === _constants.BREAK) {
return [indexes, arr];
}
return _arrayMutative.unshift.apply(undefined, [props, arr].concat(_toConsumableArray(values)));
}
function setInitialize(initializer, props, arr, indexOrPredicate, value, replace, remove) {
var indexes = props.indexes;
if (remove || !replace) {
return (0, _arrayMutative.set)(props, arr, indexOrPredicate, value, false, remove);
}
value = initializer(value);
if (value === _constants.BREAK || value === _constants.SKIP) {
return [indexes, arr];
}
return (0, _arrayMutative.set)(props, arr, indexOrPredicate, value, true);
}
function replaceInitialize(initializer, props, arr, indexOrPredicate, value) {
var indexes = props.indexes;
value = initializer(value);
if (value === _constants.BREAK || value === _constants.SKIP) {
return [indexes, arr];
}
return (0, _arrayMutative.replace)(props, arr, indexOrPredicate, value);
}
exports.default = {
concat: concatInitialize,
push: pushInitialize,
splice: spliceInitialize,
unshift: unshiftInitialize,
set: setInitialize,
replace: replaceInitialize
};