UNPKG

indexed

Version:

database-like indexed array that always returns a new array

332 lines (295 loc) 8.3 kB
'use strict'; var _slicedToArray = (function () { function sliceIterator(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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.createIndexes = createIndexes; exports.getIndexInIndexes = getIndexInIndexes; exports.findIndexInIndexes = findIndexInIndexes; exports.indexes = indexes; exports.addIndex = addIndex; exports.setIndexes = setIndexes; exports.shiftIndexes = shiftIndexes; exports.changeIndexes = changeIndexes; exports.removeIndexes = removeIndexes; exports.cloneIndexes = cloneIndexes; exports.copyIndexes = copyIndexes; exports.cleanIndexes = cleanIndexes; exports.findIndex = findIndex; exports.reindex = reindex; exports.copyAndReindex = copyAndReindex; exports.findIndexes = findIndexes; exports.indexesToJson = indexesToJson; exports.indexesFromJson = indexesFromJson; var _utils = require('./utils'); var _constants = require('./constants'); function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } function createIndexes(indexes) { if (indexes instanceof Map) { return indexes; } return (0, _utils.anythingToMap)(indexes, 2); } function getIndexInIndexes(indexes, name, predicate) { if (indexes.has(name) && indexes.get(name).has(predicate)) { return indexes.get(name).get(predicate); } return -1; } function findIndexInIndexes(indexes, predicateBlock, arr, thisArg) { if (!indexes) { return -1; } if (!Array.isArray(predicateBlock) || predicateBlock.length < 2) { return -1; } var _predicateBlock = _slicedToArray(predicateBlock, 2); var name = _predicateBlock[0]; var predicate = _predicateBlock[1]; if (/number|string/.test(typeof predicate === 'undefined' ? 'undefined' : _typeof(predicate))) { return getIndexInIndexes(indexes, name, predicate); } var fn = typeof predicate == 'function' ? predicate : predicate instanceof RegExp ? function (el) { return predicate.test(el); } : null; if (fn) { var map = indexes.get(name); var i = 0; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = map[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _step$value = _slicedToArray(_step.value, 2); var key = _step$value[0]; var index = _step$value[1]; var obj = arr[index]; var correct = fn.call(thisArg, key, obj, map, arr, i); if (correct === _constants.BREAK) { return -1; } if (correct) { return index; } i++; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } return -1; } function indexes(indexes, arr, name) { if (name) { return indexes.has(name) ? indexes.get(name) : false; } return indexes; } function addIndex(indexes, arr, indexName, doReindex) { if (!indexes) { indexes = new Map(); } indexes.set(indexName, new Map()); if (doReindex) { return reindex(indexes, arr); } return indexes; } function setIndexes(indexes, obj, index) { if (!indexes || (0, _utils.isInvalidObject)(obj)) { return; } indexes.forEach(function (map, n) { if (n in obj) { var prop = obj[n]; map.set(prop, index); } }); } function shiftIndexes(indexes, ratio) { if (!indexes) { return; } indexes.forEach(function (map, n) { map.forEach(function (index, key) { map.set(key, index + ratio); }); }); } function changeIndexes(indexes, obj, newObj, index) { if (!indexes) { return; } indexes.forEach(function (map, n) { if (n in obj && (0, _utils.hasOwnProperty)(newObj, n)) { var prop = obj[n]; var newProp = newObj[n]; map.has(prop) && map.delete(prop) && map.set(newProp, index); } }); } function removeIndexes(indexes, obj) { if (!indexes) { return; } indexes.forEach(function (map, n) { if (n in obj) { var prop = obj[n]; map.has(prop) && map.delete(prop); } }); } function cloneIndexes(indexes, shallow) { if (!indexes) { return; } var newIndexes = new Map(); indexes.forEach(function (map, n) { newIndexes.set(n, shallow ? new Map() : (0, _utils.copyMap)(map, 1)); }); return newIndexes; } function copyIndexes(indexes) { if (!indexes) { return; } return cloneIndexes(indexes, true); } function cleanIndexes(indexes) { indexes.forEach(function (map, n) { indexes.set(n, new Map()); }); } function findIndex(props, arr, callbackOrPredicate, thisArg) { var indexes = props.indexes; if (typeof callbackOrPredicate == 'function') { return _constants.arrProto.findIndex.call(arr, callbackOrPredicate, thisArg); } if (indexes) { return findIndexInIndexes(indexes, callbackOrPredicate, arr, thisArg); } return -1; } function reindex(indexes, arr) { if (!indexes) { return; } var length = arr.length, i = 0; cleanIndexes(indexes); while (i < length) { var value = arr[i]; setIndexes(indexes, value, i++); } return indexes; } function copyAndReindex(indexes, arr) { reindex(copyIndexes(indexes), arr); } function findIndexes(_ref, arr, predicates, thisArg) { var indexes = _ref.indexes; var i = 0;var length = predicates.length;var max = arr.length; var results = []; if (typeof predicates == 'function') { while (i < max) { var value = arr[i]; var answer = predicates.call(thisArg, value, i, arr); if (answer === _constants.BREAK) { return results; } if (answer) { results.push(i); } i++; } return results; } if (indexes) { var _ret = (function () { var _predicates = _slicedToArray(predicates, 2); var name = _predicates[0]; var pre = _predicates[1]; var map = indexes.get(name); var fn = typeof pre == 'function' ? pre : pre instanceof RegExp ? function (el) { return pre.test(el); } : null; if (fn) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = map[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _step2$value = _slicedToArray(_step2.value, 2); var key = _step2$value[0]; var index = _step2$value[1]; var obj = arr[index]; var answer = fn.call(thisArg, key, obj, map, arr, i); if (answer === _constants.BREAK) { return { v: results }; } if (answer) { results.push(index); } i++; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return { v: results }; } i = 1; var include = !!thisArg; while (i < length) { var predicate = predicates[i++]; var answer = getIndexInIndexes(indexes, name, predicate); if (answer < 0) { include && results.push(-1); } else { results.push(answer); } } })(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } return results; } function indexesToJson(indexes) { var ret = {}; indexes.forEach(function (map, name) { var list = {}; map.forEach(function (value, prop) { list[prop] = value; }); ret[name] = list; }); return ret; } function indexesFromJson(json) { return (0, _utils.anythingToMap)(json, 2); }