recur-freeze

Freeze object recursively.

Usage no npm install needed!

<script type="module">
  import recurFreeze from 'https://cdn.skypack.dev/recur-freeze';
</script>

README

Recursive Freeze

Build Status Test Covarage Greenkeeper Latest Version

Freeze object recursively.

Installation

$ npm install recur-freeze

CDN

The library is available over a CDN:

<script src="https://unpkg.com/recur-freeze@latest/dist/recur-freeze.umd.js"></script>

<!-- Or the minified version -->
<script src="https://unpkg.com/recur-freeze@latest/dist/recur-freeze.umd.min.js"></script>

Usage

const recurFreeze = require("recur-freeze");

const jedi = {
  name: "Luke Skywalker",
  middleName: null,
  age: 19,
  address: {
    street: "Moisture Farm",
    planet: "Tatooine"
  },
  masters: ["Obi-Wan Kenobi", "Yoda"]
};

// Freeze the jedi object
recurFreeze(jedi);

// Can't change the property value
jedi.name = "Anakin Skywalker";
console.log(jedi.name); // Luke Skywalker

// Can't change the null property
jedi.middleName = "Starkiller";
console.log(jedi.middleName); // null

// Can't change the nested object property
jedi.address.planet = "Degobah";
console.log(jedi.address.planet); // Tatooine

// Can't change the array item
jedi.masters[1] = "Palpatine";
console.log(jedi.masters[1]); // Yoda

// Can't add a new property
jedi.address.postalCode = 12345;
console.log(jedi.address.postalCode); // undefined

// Can't add a new item to the array
jedi.masters[3] = 'Qui-Gon Jinn';
console.log(jedi.masters); // [ 'Obi-Wan Kenobi', 'Yoda' ]

// Can't delete the property
delete jedi.address.planet;
console.log(jedi.address.planet); // Tatooine

// Can't delete the array item
delete jedi.masters[1];
console.log(jedi.masters); // [ 'Obi-Wan Kenobi', 'Yoda' ]

Note that when you're using a strict mode, any attempt on changing the frozen object will throw a TypeError exception.

License

CC-BY-SA 4.0 ยท Risan Bagja Pradana

This package is based on code sample at MDN Object.freeze documentation by Mozilla Contributors.