Mutating methods are routed through internal handlers so rs-x can emit affected indexes.
public get(
originalArray: unknown[],
property: PropertyKey,
receiver: unknown,
): unknown {
if (this.isUpdateArrayKey(property)) {
return (...args: unknown[]) => {
return this.updateArray[property](originalArray, ...args);
};
}
return Reflect.get(originalArray, property, receiver);
}
The set trap handles numeric indexes and length shrink while avoiding recursive patch loops.
public set(
originalArray: unknown[],
property: PropertyKey,
value: unknown,
receiver: unknown,
): boolean {
if (!this._patching) {
if (property === 'length') {
this.setLength(originalArray, value as number);
} else if (Type.isPositiveInteger(property)) {
const index = Number(property);
originalArray[index] = value;
this.emitSet(originalArray, index, value);
} else {
Reflect.set(originalArray, property, value, receiver);
}
}
return true;
}