- 💅🏻 Inspired by many solutions in a modern way.
- 🌪 Recursively
Object.freeze()
for objects, functions and arrays. - 🥞 Support for
Map
andSet
. - 💉 Add
.isDeepFrozen()
method for each frozen object. - 🎯 Support Pure Deep Freeze through deep clone.
- 🧊 Handle primitives types natively.
# npm
$ npm install @3imed-jaberi/deepfreeze
# yarn
$ yarn add @3imed-jaberi/deepfreeze
This is a practical example of how to use.
"use strict";
const deepfreeze = require("@3imed-jaberi/deepfreeze");
const object = {
someBoolean: true,
someNumber: 10,
someString: "hello!",
someObject: { foo: "bar", someNestedObject: { nested: "inObject" } },
someArray: [false, 20, "bye!", { nested: "inArray" }],
someMap: new Map(["item1", "item2"]),
someSet: new Set(["item1", "item2"]),
};
const frozenObject = deepfreeze(object);
Object.isFrozen(frozenObject); // true
Object.isFrozen(frozenObject.someBoolean); // true
Object.isFrozen(frozenObject.someNumber); // true
Object.isFrozen(frozenObject.someString); // true
Object.isFrozen(frozenObject.someObject); // true
Object.isFrozen(frozenObject.someObject.foo); // true
Object.isFrozen(frozenObject.someObject.someNestedObject); // true
Object.isFrozen(frozenObject.someObject.someNestedObject.nested); // true
Object.isFrozen(frozenObject.someArray); // true
frozenObject.someArray.forEach((value) => {
Object.isFrozen(value); // true
});
frozenObject.someMap.clear(); // Error: Map is read-only.
frozenObject.someSet.clear(); // Error: Set is read-only.
You can pass some arguments to the freeze method;
object
— (Object) object to deep freeze.options.isProd
— (Boolean) ignore freezing in production (for better performance) (default to false
).options.pureFreeze
— (Boolean) uselodash.cloneDeep
to create a copy and use it dealing the freezing process (default to false
).
If the passed object handled by our method, a method called isDeepFrozen
will be inserted as property to the object.