Immutable Deep Update
Immutably update deeply nested data structures with ease.
example
const { over, set, view } = require('./src')
const user = {
firstname: 'Han',
location: { city: 'Paris' }
friends: [
{ fisrtname: 'Luke', location: { city: 'New York' } }
{ fisrtname: 'Darth Vador', location: { city: 'Dark star' } }
]
}
console.log(
over('friends[0].location.city', city => city + ' City', user)
)
console.log(
over('friends', friends => friends.concat({
firstname: 'Chewi',
location: { city: '?' }
}), user)
)
Map over array values
console.log(
view('friends[..].location.city', user)
)
console.log(
set('friends[..].location.city', 'Tokyo', user)
)
Map over object values
const state = {
usersById: {
'a': { firstname: 'Rick', id: 'a' },
'b': { firstname: 'Morty', id: 'b' }
}
}
console.log(
view('usersById{..}.firstname', state)
)
console.log(
over('usersById{..}', user => `${user.firstname} - ${user.id}`, state)
)
Supported path
'azerty'
=> prop 'azerty''aze.rty'
=> compose (prop 'aze') (prop 'rty')'aze["rty"]'
=> compose (prop 'aze') (prop 'rty')'0'
=> index 0'[0]'
=> index 0'aze[0].rty'
=> compose (prop 'aze') (index 0) (prop 'rty')'aze.0.rty'
=> compose (prop 'aze') (index 0) (prop 'rty')'[..]'
=> map over all the items of an array'{..}'
=> map over all values of an object
Roadmap