{"ScriptPreparationCode":"var { evolve, assoc, 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.items[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 NEW_ITEM_ID = INITIAL_DATA.count;\r\n\r\nvar produce = immer.default\r\nimmer.setAutoFreeze(false)\r\nimmer.setUseProxies(true)","TestCases":[{"Name":"immer","Code":"data = produce(INITIAL_DATA, draft =\u003E {\r\n draft.items[NEW_ITEM_ID] = { id: NEW_ITEM_ID, name: \u0027ITEM-NEW\u0027, value: 0 }\r\n draft.count\u002B\u002B\r\n draft.keys.push(NEW_ITEM_ID)\r\n})","IsDeferred":false},{"Name":"shallow copy","Code":"data = {\r\n ...INITIAL_DATA,\r\n items: {\r\n \t...INITIAL_DATA.items,\r\n \t[NEW_ITEM_ID]: { id: NEW_ITEM_ID, name: \u0027ITEM-NEW\u0027, value: 0 }\r\n },\r\n count: INITIAL_DATA.count \u002B1,\r\n keys: [ ...INITIAL_DATA.keys, NEW_ITEM_ID]\r\n}","IsDeferred":false},{"Name":"ramda evolve","Code":"data = evolve({\r\n items: assoc(NEW_ITEM_ID, {id: NEW_ITEM_ID, name: \u0022ITEM-NEW\u0022, value: 0}),\r\n count: x =\u003E x \u002B 1,\r\n\tkeys: append(NEW_ITEM_ID) \r\n}, INITIAL_DATA);","IsDeferred":false}]}