subzero

7.0.2 • Public • Published

subzero npm version Build Status

mksfw.gif

About:

Freeze a class, freeze a function, or freeze an object. For Node version 6 or greater.

install:

npm install subzero

usage:

function list (each function explained in more detail below):

  1. subzero.megaFreeze

Note: the mega freeze function was inspired by MDN and deep-freeze.

freezer.jpg


1) subzero.megaFreeze( functionOrClassOrObjectToFreeze )

Deep freeze a class, a function, or an object. This will freeze any classes, functions, and objects within the class/function/object being mega-frozen. It works by recursively freezing anything of type "object" or "function".

'use strict';
 
const subzero = require( 'subzero' );
 
/*
    this example uses a function,
    subzero.megaFreeze also works with objects and classes
*/
function f() {}
 
const InnerClass = class {};
 
InnerClass.x = {
 
    y: {}
};
 
const innerFunction = function() {};
 
innerFunction.x = {
 
    y: {}
};
 
const objectInsideAlreadyFrozenObject = {};
 
const functionInsideAlreadyFrozenObject = function() {};
 
const objectInsideAlreadyFrozenFunction = {};
 
const functionInsideAlreadyFrozenFunction = function() {};
 
const functionToFreeze = function() {};
 
functionToFreeze.objectInsideAlreadyFrozenFunction = objectInsideAlreadyFrozenFunction;
 
functionToFreeze.functionInsideAlreadyFrozenFunction = functionInsideAlreadyFrozenFunction;
 
const frozenFunctionWithNonFrozenObjectAndFunctionInside = Object.freeze( functionToFreeze );
 
const buff = new Buffer( 69 );
 
buff.x = {
 
    y: {},
 
    f: function() {}
};
 
f.a = {
 
    b: {
 
        c: {
 
            d: {
 
                InnerClass,
 
                innerFunction,
 
                buff,
 
                e: Object.freeze({
 
                    objectInsideAlreadyFrozenObject,
 
                    functionInsideAlreadyFrozenObject
                }),
 
                frozenFunctionWithNonFrozenObjectAndFunctionInside
            }
        }
    }
};
 
f.prototype.x = {
 
    y: {
 
        z: {}
    },
 
    w: {}
};
 
/*
    It's time to freeze your opponent for the flawless victory with fatality.
 
    None of the following assertions will throw an AssertionError:
*/
 
console.assert( !Object.isFrozen( f ) );
console.assert( !Object.isFrozen( f.prototype ) );
console.assert( !Object.isFrozen( f.a ) );
console.assert( !Object.isFrozen( f.a.b ) );
console.assert( !Object.isFrozen( f.a.b.c ) );
console.assert( !Object.isFrozen( f.a.b.c.d ) );
console.assert( !Object.isFrozen( f.prototype.x ) );
console.assert( !Object.isFrozen( f.prototype.x.y ) );
console.assert( !Object.isFrozen( f.prototype.x.y.z ) );
console.assert( !Object.isFrozen( f.prototype.x.w ) );
console.assert( !Object.isFrozen( InnerClass ) );
console.assert( !Object.isFrozen( InnerClass.prototype ) );
console.assert( !Object.isFrozen( InnerClass.x ) );
console.assert( !Object.isFrozen( InnerClass.x.y ) );
console.assert( !Object.isFrozen( innerFunction ) );
console.assert( !Object.isFrozen( innerFunction.prototype ) );
console.assert( !Object.isFrozen( innerFunction.x ) );
console.assert( !Object.isFrozen( innerFunction.x.y ) );
console.assert( !Object.isFrozen( objectInsideAlreadyFrozenObject ) );
console.assert( !Object.isFrozen( objectInsideAlreadyFrozenFunction ) );
console.assert( !Object.isFrozen( functionInsideAlreadyFrozenObject ) );
console.assert( !Object.isFrozen( functionInsideAlreadyFrozenObject.prototype ) );
console.assert( !Object.isFrozen( functionInsideAlreadyFrozenFunction ) );
console.assert( !Object.isFrozen( functionInsideAlreadyFrozenFunction.prototype ) );
console.assert( !Object.isSealed( buff ) ); // you cannot freeze buffers
console.assert( !Object.isFrozen( buff.x ) );
console.assert( !Object.isFrozen( buff.x.y ) );
console.assert( !Object.isFrozen( buff.x.f ) );
console.assert( !Object.isFrozen( buff.x.f.prototype ) );
 
// Mega Freeze f
const reference = subzero.megaFreeze( f );
 
console.assert( ( reference === f ) );
 
console.assert( Object.isFrozen( f ) );
console.assert( Object.isFrozen( f.prototype ) );
console.assert( Object.isFrozen( f.a ) );
console.assert( Object.isFrozen( f.a.b ) );
console.assert( Object.isFrozen( f.a.b.c ) );
console.assert( Object.isFrozen( f.a.b.c.d ) );
console.assert( Object.isFrozen( f.prototype.x ) );
console.assert( Object.isFrozen( f.prototype.x.y ) );
console.assert( Object.isFrozen( f.prototype.x.y.z ) );
console.assert( Object.isFrozen( f.prototype.x.w ) );
console.assert( Object.isFrozen( InnerClass ) );
console.assert( Object.isFrozen( InnerClass.prototype ) );
console.assert( Object.isFrozen( InnerClass.x ) );
console.assert( Object.isFrozen( InnerClass.x.y ) );
console.assert( Object.isFrozen( innerFunction ) );
console.assert( Object.isFrozen( innerFunction.prototype ) );
console.assert( Object.isFrozen( innerFunction.x ) );
console.assert( Object.isFrozen( innerFunction.x.y ) );
console.assert( Object.isFrozen( objectInsideAlreadyFrozenObject ) );
console.assert( Object.isFrozen( objectInsideAlreadyFrozenFunction ) );
console.assert( Object.isFrozen( functionInsideAlreadyFrozenObject ) );
console.assert( Object.isFrozen( functionInsideAlreadyFrozenObject.prototype ) );
console.assert( Object.isFrozen( functionInsideAlreadyFrozenFunction ) );
console.assert( Object.isFrozen( functionInsideAlreadyFrozenFunction.prototype ) );
console.assert( Object.isSealed( buff ) );
console.assert( Object.isFrozen( buff.x ) );
console.assert( Object.isFrozen( buff.x.y ) );
console.assert( Object.isFrozen( buff.x.f ) );
console.assert( Object.isFrozen( buff.x.f.prototype ) );

letitgo.gif

no-op:

If the input value is not an object, a function, or a class for subzero's megaFreeze function, the return value will be the input value unaltered.

frieza22.gif

Package Sidebar

Install

npm i subzero

Weekly Downloads

92

Version

7.0.2

License

ISC

Last publish

Collaborators

  • npm.m.stecky.efantis