- Notifications
You must be signed in to change notification settings - Fork8
🌱 Immutability in under one kilobyte
License
sdgluck/mewt
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Immutability in under one kilobyte
Made with ❤ at@outlandish
🌱 Under 1kb, tiny API, zero dependencies.
👍 Makes all native array methods immutable operations.
✌️ Two simple methods$set
and$unset
for objects and arrays.
👉 Built for Node ES2015 environments. Use a bundler, transpiler, and Proxy polyfill as required.
npm install --save mewt
yarn add mewt
// ES2015importimmutablefrom'mewt'
// CommonJSvarimmutable=require('mewt')
Create an immutable instance from a JavaScript array or object.
Both objects and arrays have the$set
and$unset
methods.
constimmutableArray=immutable([])constimmutableObject=immutable({})immutableArray[0]='Van Morrison'//=> Error "array is immutable"immutableObject.name='Van Morrison'//=> Error "object is immutable"
Use$set
and$unset
to create new array with applied change.
Use all array instance methods as usual, however those that would normally return a singlenon-array value (pop, push, shift, unshift) will return an array containing the value and a new array(see part 2 in example below).
constarr=immutable([])// 1. all array instance methods are availableconstarr1=arr.concat('bubble')console.log(arr1)//=> ['bubble']console.log(arr1===arr)//=> false// 2. methods with non-array return value (push, pop, shift, unshift)// also return new array, accessible via destructuringconst[val,arr2]=arr1.pop()console.log(val)//=> 'bubble'console.log(arr2)//=> []console.log(arr2===arr1)//=> false// 3. use $set and $unset to get new array with changesconstarr3=arr2.$set(0,'Iggy Pop')console.log(arr3)//=> ['Iggy Pop']console.log(arr3===arr2)//=> false
Use$set
and$unset
to create new object with applied change.
constobj=immutable({})// 1. properties are added/updated using `$set`constobj1=obj.$set('album','Hunky Dory')console.log(obj1)//=> {album: 'Hunky Dory'}console.log(obj1===obj)//=> false// 2. properties are deleted using `$unset`constobj2=obj1.$unset('album')console.log(obj2)//=> {}console.log(obj2===obj1)//=> false
mewt
has received contributions from these wonderful people:
Balázs Édes,Scott Humphries,Michael J. Ryan,Jamie Curtis
All pull requests and issues welcome!
If you're not sure how, check out thegreat video tutorials on egghead.io!