From f84a4bb406283ead7ab0d84544586f0e7204b955 Mon Sep 17 00:00:00 2001 From: Luk Date: Wed, 24 Jan 2024 14:06:19 +0800 Subject: [PATCH] added `deepFreeze` --- coretool.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/coretool.js b/coretool.js index 07f0b48..3275456 100644 --- a/coretool.js +++ b/coretool.js @@ -10,6 +10,37 @@ module.exports = { sleep: (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms)), + deepFreeze (obj) { + if (typeof obj !== 'object' || obj === null) { + return obj + } + Object.freeze(obj) + const propNames = Object.getOwnPropertyNames(obj) + propNames.forEach(prop => { + const propValue = obj[prop] + // for nested object + if ( + propValue && typeof propValue === 'object' && + !Object.isFrozen(propValue) + ) { + deepFreeze(propValue) + } + // for nested array + if (Array.isArray(propValue)) { + propValue.forEach(item => { + if ( + item && typeof item === 'object' && + !Object.isFrozen(item) + ) { + deepFreeze(item) + } + }); + Object.freeze(propValue) // Freeze the array itself + } + }) + return obj + }, + parse_json_anyway (value) { try { return JSON.parse(value)