@fast-check/poisoning
Version:
Set of utilities to ease detection and revert of poisoning
31 lines (30 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.restoreGlobals = restoreGlobals;
exports.assertNoPoisoning = assertNoPoisoning;
const CaptureAllGlobals_js_1 = require("./internals/CaptureAllGlobals.js");
const FilterNonEligibleDiffs_js_1 = require("./internals/FilterNonEligibleDiffs.js");
const TrackDiffsOnGlobal_js_1 = require("./internals/TrackDiffsOnGlobal.js");
const initialGlobals = (0, CaptureAllGlobals_js_1.captureAllGlobals)();
function trackDiffsOnGlobalsBasedOnOptions(options) {
const ignoredRootRegex = options !== undefined && options.ignoredRootRegex !== undefined ? options.ignoredRootRegex : undefined;
return ignoredRootRegex !== undefined
? (0, TrackDiffsOnGlobal_js_1.trackDiffsOnGlobals)(initialGlobals, (globalDetails) => !(0, FilterNonEligibleDiffs_js_1.shouldIgnoreGlobal)(globalDetails, ignoredRootRegex), (globalDetails, propertyName) => !(0, FilterNonEligibleDiffs_js_1.shouldIgnoreProperty)(globalDetails, propertyName, ignoredRootRegex))
: (0, TrackDiffsOnGlobal_js_1.trackDiffsOnGlobals)(initialGlobals, () => true, () => true);
}
function restoreGlobals(options) {
const diffs = trackDiffsOnGlobalsBasedOnOptions(options);
for (let index = 0; index !== diffs.length; ++index) {
diffs[index].patch();
}
}
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);
}
}