mockzilla
Version:
A mocking toolkit leveraging the power of TypeScript to enhance your jest experience.
31 lines (30 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.whitelistPropertyAccess = exports.getAllProperties = exports.denyPropertyAccess = void 0;
const error_1 = require("./error");
function denyPropertyAccess(instance, property) {
Object.defineProperty(instance, property, {
get() {
throw new error_1.MockzillaError(`Property "${property}" was expected to be left ontouched`);
},
set() {
throw new error_1.MockzillaError(`Property "${property}" was expected to be left ontouched`);
},
});
}
exports.denyPropertyAccess = denyPropertyAccess;
function getAllProperties(obj) {
const properties = new Set();
for (let current = obj; Object.getPrototypeOf(current); current = Object.getPrototypeOf(current))
Object.getOwnPropertyNames(current).forEach((item) => properties.add(item));
properties.delete("constructor");
return [...properties.keys()];
}
exports.getAllProperties = getAllProperties;
function whitelistPropertyAccess(instance, ...whitelist) {
for (const property of getAllProperties(instance)) {
if (!whitelist.includes(property))
denyPropertyAccess(instance, property);
}
}
exports.whitelistPropertyAccess = whitelistPropertyAccess;