@mfederczuk/deeptools
Version:
A set of utility functions that recursively operate on objects
1 lines • 1.81 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports.deepFreeze=deepFreeze;const NullWeakSet_1=require("./_internal/NullWeakSet");const utils_1=require("./_internal/utils");const deepFreezePropertiesOfObject=(obj,keys,frozenObjects)=>{for(const key of keys){const descriptor=(0,utils_1.getOwnPropertyDescriptor)(obj,key);deepFreezeInternal(descriptor.get,frozenObjects);deepFreezeInternal(descriptor.set,frozenObjects);deepFreezeInternal(descriptor.value,frozenObjects)}};const deepFreezePrototypeExcludingConstructor=(prototype,frozenObjects)=>{const keys=(0,utils_1.getPropertyKeys)(prototype).filter(key=>key!=="constructor");deepFreezePropertiesOfObject(prototype,keys,frozenObjects)};const deepFreezeFunctionWithPrototype=(func,frozenObjects)=>{const keys=(0,utils_1.getPropertyKeys)(func).filter(key=>key!=="prototype");deepFreezePrototypeExcludingConstructor(func.prototype,frozenObjects);deepFreezePropertiesOfObject(func,keys,frozenObjects);return Object.freeze(func)};const deepFreezeInternal=(obj,frozenObjects)=>{if(!(0,utils_1.isNotPrimitive)(obj)){return obj}if(frozenObjects.has(obj)){return obj}frozenObjects.add(obj);if(typeof obj==="function"&&"prototype"in obj){return deepFreezeFunctionWithPrototype(obj,frozenObjects)}deepFreezePropertiesOfObject(obj,(0,utils_1.getPropertyKeys)(obj),frozenObjects);if(obj instanceof Map||obj instanceof Set){for(const[key,value]of obj.entries()){deepFreezeInternal(value,frozenObjects);deepFreezeInternal(key,frozenObjects)}}return Object.freeze(obj)};function deepFreeze(obj,options){let frozenObjects;if((options===null||options===void 0?void 0:options.mindCircularReferences)===true){frozenObjects=new WeakSet}else{frozenObjects=new NullWeakSet_1.NullWeakSet}return deepFreezeInternal(obj,frozenObjects)}deepFreeze(deepFreeze);