python-range
Version:
A JavaScript implementation of the Python's range() function.
33 lines (28 loc) • 1.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash.frompairs');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class ArrayIndicesProxy {
constructor(targetArray, handler) {
const newHandler = (0, _lodash2.default)(Object.entries(handler).map(([name, trap]) => {
const propertyAccessTraps = ['defineProperty', 'deleteProperty', 'get', 'getOwnPropertyDescriptor', 'has', 'set'];
if (propertyAccessTraps.includes(name)) {
return [name, (target, property, ...other) => {
if (typeof property !== 'symbol') {
const parsed = parseInt(property, 10);
if (String(parsed) === property && parsed >= 0 && parsed <= Number.MAX_VALUE) {
return trap(target, parsed, ...other);
}
}
return Reflect[name](target, property, ...other);
}];
}
return [name, trap];
}));
return new Proxy(targetArray, newHandler);
}
}
exports.default = ArrayIndicesProxy;