UNPKG

action-store

Version:

Action store a la redux

73 lines (61 loc) 1.67 kB
'use strict'; /** * 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; }