-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathimmutable-transform.js
121 lines (102 loc) · 2.53 KB
/
immutable-transform.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
const { add, complete, cycle, save, suite } = require('benny')
const Immutable = require('immutable')
const { produce } = require('immer')
const { transform, transformAt } = require('transmutable')
const clone = require('clone')
const cloneDeep = require('clone-deep')
const cloneRFDC = require('rfdc')()
const path = require('path')
const _ = require('lodash')
const initializeTestData = () => ({
foo: {
bar: {
baz: 'elo',
bat: [1, 2, 3],
},
},
batman: 'NaNNaNNaNNaN',
})
module.exports = suite(
'Immutable transformations',
add('Pure JS', () => {
const data = initializeTestData()
return () => {
const newData = {
...data,
foo: {
bar: {
baz: 'yo',
bat: data.foo.bar.bat.map((x, i) => (i === 1 ? 7 : x)),
},
},
}
}
}),
add('Immer', () => {
const data = initializeTestData()
return () => {
const newData = produce(data, (draft) => {
draft.foo.bar.baz = 'yo'
draft.foo.bar.bat[1] = 7
})
}
}),
add('Transmutable', () => {
const data = initializeTestData()
return () => {
const newData = transform((draft) => {
draft.foo.bar.baz = 'yo'
draft.foo.bar.bat[1] = 7
}, data)
}
}),
add('Immutable.js', () => {
const data = Immutable.fromJS(initializeTestData())
return () => {
const newData = data
.setIn(['foo', 'bar', 'baz'], 'yo')
.setIn(['foo', 'bar', 'bat', 1], 7)
.toJS()
}
}),
add('Clone - RFDC', () => {
const data = initializeTestData()
return () => {
const newData = cloneRFDC(data)
newData.foo.bar.baz = 'yo'
newData.foo.bar.bat[1] = 7
}
}),
add('Clone - clone', () => {
const data = initializeTestData()
return () => {
const newData = clone(data)
newData.foo.bar.baz = 'yo'
newData.foo.bar.bat[1] = 7
}
}),
add('Clone - clone-deep', () => {
const data = initializeTestData()
return () => {
const newData = cloneDeep(data)
newData.foo.bar.baz = 'yo'
newData.foo.bar.bat[1] = 7
}
}),
add('Clone - lodash', () => {
const data = initializeTestData()
return () => {
const newData = _.cloneDeep(data)
newData.foo.bar.baz = 'yo'
newData.foo.bar.bat[1] = 7
}
}),
cycle(),
complete(),
save({ file: 'immutable-trans', folder: path.join(__dirname, 'results') }),
save({
file: 'immutable-trans',
folder: path.join(__dirname, 'results'),
format: 'chart.html',
}),
)