action-store
Version:
Action store a la redux
73 lines (61 loc) • 1.67 kB
JavaScript
;
/**
* Are we running in a production build?
*/
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var production = process && process.env && process.env.NODE_ENV === 'production';
var isArray = Array.isArray;
var freeze = Object.freeze;
var keys = Object.keys;
/**
* Deeply freeze a plain javascript object.
*
* If `process.env.NODE_ENV === 'production'`, this returns the original object
* witout freezing.
*
* @function
* @sig a -> a
* @param {object} object Object to freeze.
* @return {object} Frozen object, unless in production, then the same object.
*/
exports.default = function (object) {
if (production) return object;
if (needsFreezing(object)) recur(object);
return object;
};
/**
* Is Freezable?
*
* @param {Object} object
* @return {Boolean}
*/
function isFreezable(object) {
if (object === null) return false;
return isArray(object) || 'object' === (typeof object === 'undefined' ? 'undefined' : _typeof(object));
}
/**
* Check if we need to freeze this value
*
* @param {Object} object
* @return {Boolean}
*/
function needsFreezing(object) {
return isFreezable(object) && !Object.isFrozen(object);
}
/**
* Recurse
*
* @param {Object}
* @return {Object}
*/
function recur(object) {
freeze(object);
keys(object).forEach(function (key) {
var value = object[key];
if (needsFreezing(value)) recur(value);
});
return object;
}