vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
31 lines (30 loc) • 1.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.preservePropertyGetters = preservePropertyGetters;
const assert_js_1 = require("./assert.js");
function preservePropertyGetters(objOriginal) {
// Store original getter descriptors
const getters = Object.fromEntries(Object.entries(Object.getOwnPropertyDescriptors(objOriginal)).filter(([_, desc]) => 'get' in desc));
// Make getters non-enumerable
for (const [key, desc] of Object.entries(getters)) {
Object.defineProperty(objOriginal, key, { ...desc, enumerable: false });
}
const restorePropertyGetters = function () {
const objCopy = this;
delete objOriginal._restorePropertyGetters;
delete objCopy._restorePropertyGetters;
for (const [key, desc] of Object.entries(getters)) {
if (objCopy !== objOriginal) {
(0, assert_js_1.assert)(!(key in objCopy));
Object.defineProperty(objCopy, key, desc); // Add property getters to copy
}
(0, assert_js_1.assert)(key in objOriginal);
Object.defineProperty(objOriginal, key, desc); // Restore original `enumerable` value
}
};
Object.defineProperty(objOriginal, '_restorePropertyGetters', {
value: restorePropertyGetters,
enumerable: true,
configurable: true,
});
}