@3imed-jaberi/deepfreeze

1.0.1 • Public • Published

@3imed-jaberi/deepfreeze

Build Status Coverage Status NPM version License Code Size

The modern and amiable deep freeze, works with Map and Set 🥶

Features

  • 💅🏻 Inspired by many solutions in a modern way.
  • 🌪 Recursively Object.freeze() for objects, functions and arrays.
  • 🥞 Support for Map and Set.
  • 💉 Add .isDeepFrozen() method for each frozen object.
  • 🎯 Support Pure Deep Freeze through deep clone.
  • 🧊 Handle primitives types natively.

Installation

# npm
$ npm install @3imed-jaberi/deepfreeze
# yarn
$ yarn add @3imed-jaberi/deepfreeze

Usage

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.

API

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) use lodash.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.

License


MIT © Imed Jaberi

Dependents (0)

Package Sidebar

Install

npm i @3imed-jaberi/deepfreeze

Weekly Downloads

3

Version

1.0.1

License

MIT

Unpacked Size

8.92 kB

Total Files

5

Last publish

Collaborators

  • 3imed-jaberi