@fast-check/poisoning
Version:
Set of utilities to ease detection and revert of poisoning
43 lines (42 loc) • 1.34 kB
JavaScript
const safeArrayFrom = Array.from;
const safeArrayMap = Array.prototype.map;
const safeArrayPush = Array.prototype.push;
const safeArrayShift = Array.prototype.shift;
const safeArraySort = Array.prototype.sort;
const safeObjectDefineProperty = Object.defineProperty;
export const MapSymbol = Symbol('safe.map');
export const PushSymbol = Symbol('safe.push');
export const ShiftSymbol = Symbol('safe.shift');
export const SortSymbol = Symbol('safe.sort');
function toPoisoningFreeArray(instance) {
safeObjectDefineProperty(instance, MapSymbol, {
value: safeArrayMap,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, PushSymbol, {
value: safeArrayPush,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, ShiftSymbol, {
value: safeArrayShift,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, SortSymbol, {
value: safeArraySort,
configurable: false,
enumerable: false,
writable: false,
});
return instance;
}
export const PoisoningFreeArray = {
from(arrayLike) {
return toPoisoningFreeArray(safeArrayFrom(arrayLike));
},
};