@fast-check/poisoning
Version:
Set of utilities to ease detection and revert of poisoning
43 lines (42 loc) • 1.27 kB
JavaScript
const SMap = Map;
const safeMapGet = Map.prototype.get;
const safeMapHas = Map.prototype.has;
const safeMapEntries = Map.prototype.entries;
const safeMapSet = Map.prototype.set;
const safeObjectDefineProperty = Object.defineProperty;
export const GetSymbol = Symbol('safe.get');
export const HasSymbol = Symbol('safe.has');
export const EntriesSymbol = Symbol('safe.entries');
export const SetSymbol = Symbol('safe.set');
function toPoisoningFreeMap(instance) {
safeObjectDefineProperty(instance, GetSymbol, {
value: safeMapGet,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, HasSymbol, {
value: safeMapHas,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, EntriesSymbol, {
value: safeMapEntries,
configurable: false,
enumerable: false,
writable: false,
});
safeObjectDefineProperty(instance, SetSymbol, {
value: safeMapSet,
configurable: false,
enumerable: false,
writable: false,
});
return instance;
}
export const PoisoningFreeMap = {
from(ins) {
return toPoisoningFreeMap(new SMap(ins));
},
};