prostgles-types
Version:
Shared TypeScript object definitions for prostgles-client and prostgles-server
36 lines • 1.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeGetKeys = exports.safeGetProperty = exports.safeHasOwn = void 0;
const DANGEROUS_PROTO_PROPS = ["__proto__", "constructor", "prototype"];
/**
* Safely check if an object has a property (works with __proto__ and constructor)
*/
const safeHasOwn = (obj, key) => {
return Object.prototype.hasOwnProperty.call(obj, key);
};
exports.safeHasOwn = safeHasOwn;
/**
* Safely get a property value without triggering prototype chain issues
*/
const safeGetProperty = (obj, key) => {
if (DANGEROUS_PROTO_PROPS.includes(key)) {
// Use Object.getOwnPropertyDescriptor to safely access these properties
const descriptor = Object.getOwnPropertyDescriptor(obj, key);
return descriptor?.value;
}
return obj[key];
};
exports.safeGetProperty = safeGetProperty;
const safeGetKeys = (obj) => {
const keys = Object.keys(obj);
// Object.keys already returns own enumerable properties
// But we need to also check for dangerous props that might be own properties
for (const prop of DANGEROUS_PROTO_PROPS) {
if ((0, exports.safeHasOwn)(obj, prop) && !keys.includes(prop)) {
keys.push(prop);
}
}
return keys;
};
exports.safeGetKeys = safeGetKeys;
//# sourceMappingURL=utils.js.map