{"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 NEW_ITEM_ID = INITIAL_DATA.count \u002B1\r\n\r\nvar produce = immer.default\r\nimmer.setAutoFreeze(false)\r\n\r\nvar immutable = Immutable.fromJS(INITIAL_DATA)","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.counter\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 lens","Code":"data = compose(\r\n over(lensPath([\u0022keys\u0022]), append(NEW_ITEM_ID)),\r\n over(lensPath([\u0022count\u0022]), x =\u003E x \u002B 1),\r\n set(lensPath([\u0022items\u0022, NEW_ITEM_ID]), {\r\n id: NEW_ITEM_ID,\r\n name: \u0022ITEM-NEW\u0022,\r\n value: 0\r\n })\r\n )(INITIAL_DATA);","IsDeferred":false},{"Name":"Immutable js test","Code":"data = immutable.withMutations((state) =\u003E {\r\n state.update(\u0027items\u0027, items =\u003E items.set(NEW_ITEM_ID, {\r\n id: NEW_ITEM_ID,\r\n name: \u0022ITEM-NEW\u0022,\r\n value: 0\r\n }));\r\n state.set(\u0027count\u0027, INITIAL_DATA \u002B 1);\r\n state.update(\u0027keys\u0027, keys =\u003E keys.push(NEW_ITEM_ID));\r\n})","IsDeferred":false}]}