@microsoft/sp-webpart-base
Version:
SharePoint Framework support for building web parts
41 lines • 1.12 kB
JavaScript
;
/**
* Utility code to help manipulate objects.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepFreeze = void 0;
var tslib_1 = require("tslib");
var lodash = tslib_1.__importStar(require("@microsoft/sp-lodash-subset"));
/**
* To make obj fully immutable, freeze each object in obj.
* @remarks
* this works only on pure JSON objects by design.
*
* @param obj - object to freeze
*/
function deepFreeze(obj) {
if (!obj) {
return undefined;
}
if (!Object.isFrozen(obj)) {
Object.freeze(obj);
}
var depth = 0;
var func = function (o) {
// Do not go more than 5 level deep
if (++depth > 5) {
return;
}
var propNames = Object.getOwnPropertyNames(o);
propNames.forEach(function (name) {
var prop = o[name];
if (typeof prop === 'object' && !!prop && !lodash.isElement(prop) && !Object.isFrozen(prop)) {
func(prop);
}
});
};
func(obj);
return obj;
}
exports.deepFreeze = deepFreeze;
//# sourceMappingURL=Object.js.map