UNPKG

@fast-check/poisoning

Version:

Set of utilities to ease detection and revert of poisoning

27 lines (26 loc) 1.44 kB
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); } }