{"ScriptPreparationCode":"// var { compose, over, set, lensPath, append } = R\r\n\r\nvar INITIAL_DATA = { items: {}, count: 0, keys: [] }\r\n\r\nfor (var index = 0; index \u003C 100; index\u002B\u002B) {\r\n INITIAL_DATA[index] = { id: index, name: \u0060ITEM-${index}\u0060, value: Math.random() }\r\n INITIAL_DATA.count\u002B\u002B\r\n INITIAL_DATA.keys.push(index)\r\n}\r\n\r\nvar mutable = INITIAL_DATA\r\n\r\nvar NEW_ITEM_ID = INITIAL_DATA.count \u002B1\r\n\r\nfunction deepFreeze (o) {\r\n Object.freeze(o);\r\n\r\n Object.getOwnPropertyNames(o).forEach(function (prop) {\r\n if (o.hasOwnProperty(prop)\r\n \u0026\u0026 o[prop] !== null\r\n \u0026\u0026 (typeof o[prop] === \u0022object\u0022 || typeof o[prop] === \u0022function\u0022)\r\n \u0026\u0026 !Object.isFrozen(o[prop])) {\r\n deepFreeze(o[prop]);\r\n }\r\n });\r\n \r\n return o;\r\n};","TestCases":[{"Name":"immer produce","Code":"data = immer.produce(INITIAL_DATA, draft =\u003E {})","IsDeferred":false},{"Name":"immer freeze","Code":"data = immer.freeze(INITIAL_DATA, draft =\u003E {})","IsDeferred":false},{"Name":"immutable copy","Code":"data = Immutable.fromJS(INITIAL_DATA)","IsDeferred":false},{"Name":"deep freeze","Code":"data = deepFreeze(INITIAL_DATA)","IsDeferred":false},{"Name":"baseline copy / freeze","Code":"data = Object.freeze({\r\n items: Object.freeze({\r\n \t...INITIAL_DATA.items\r\n }),\r\n count: INITIAL_DATA.count,\r\n keys: Object.freeze([ ...INITIAL_DATA.keys ])\r\n})","IsDeferred":false}]}