indexed
Version:
database-like indexed array that always returns a new array
38 lines (32 loc) • 901 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.asClosure = asClosure;
var _utils = require('./utils');
var _Indexed = require('./Indexed');
function asClosure(arr, indexes, initializer, factory, receiver) {
receiver = receiver || Object.create(null);
var props = (0, _Indexed.Props)(arr, indexes, initializer, factory || asClosure);
var isArray = Array.isArray(receiver);
var define = (0, _utils.makeDefine)(receiver);
define('__indexedProps', props);
_Indexed.methods.forEach(function (name) {
var fn = _Indexed.Indexed.prototype[name];
if (isArray && (fn.nativeArrayMethod || name == 'length')) {
return;
}
define(name, fn);
});
if (!isArray) {
define('length', {
get: function get() {
return props.arr.length;
}
});
}
if ((0, _Indexed.shouldReindex)(props, arr, indexes)) {
receiver.reindex();
}
return receiver;
}