Select Git revision
-
Brady James Garvin authoredBrady James Garvin authored
view.js 1.24 KiB
export class View {
constructor(sequence, low, high) {
const substrate = Array(high - low);
if (sequence instanceof View) {
substrate.original = sequence.original;
substrate.low = sequence.low + low;
substrate.high = sequence.low + high;
} else {
substrate.original = sequence;
substrate.low = low;
substrate.high = high;
}
const toOriginalIndex = (property) => {
if (typeof property === 'string' && /^\d+$/.test(property)) {
const result = substrate.low + Number(property);
if (result < substrate.high) {
return result;
}
}
return undefined;
};
return new Proxy(substrate, {
get(target, property, receiver) {
const originalIndex = toOriginalIndex(property);
if (originalIndex !== undefined) {
return target.original[originalIndex];
}
return Reflect.get(target, property, receiver);
},
set(target, property, value, receiver) {
const originalIndex = toOriginalIndex(property);
if (originalIndex !== undefined) {
target.original[originalIndex] = value;
return true;
}
return Reflect.set(target, property, value, receiver);
},
});
}
}