@fast-check/poisoning
Version:
Set of utilities to ease detection and revert of poisoning
27 lines (26 loc) • 1.44 kB
JavaScript
import { captureAllGlobals } from './internals/CaptureAllGlobals.js';
import { shouldIgnoreGlobal, shouldIgnoreProperty } from './internals/FilterNonEligibleDiffs.js';
import { trackDiffsOnGlobals } from './internals/TrackDiffsOnGlobal.js';
const initialGlobals = captureAllGlobals();
function trackDiffsOnGlobalsBasedOnOptions(options) {
const ignoredRootRegex = options !== undefined && options.ignoredRootRegex !== undefined ? options.ignoredRootRegex : undefined;
return ignoredRootRegex !== undefined
? trackDiffsOnGlobals(initialGlobals, (globalDetails) => !shouldIgnoreGlobal(globalDetails, ignoredRootRegex), (globalDetails, propertyName) => !shouldIgnoreProperty(globalDetails, propertyName, ignoredRootRegex))
: trackDiffsOnGlobals(initialGlobals, () => true, () => true);
}
export function restoreGlobals(options) {
const diffs = trackDiffsOnGlobalsBasedOnOptions(options);
for (let index = 0; index !== diffs.length; ++index) {
diffs[index].patch();
}
}
export function assertNoPoisoning(options) {
const diffs = trackDiffsOnGlobalsBasedOnOptions(options);
if (diffs.length !== 0) {
let impactedElements = diffs[0].fullyQualifiedKeyName;
for (let index = 1; index !== diffs.length; ++index) {
impactedElements += ', ' + diffs[index].fullyQualifiedKeyName;
}
throw new Error('Poisoning detected on ' + impactedElements);
}
}