leela
Simple tool to provide you with a nice way to abstract away object mutation and object structures.
Installation
leela is distributed via npm
npm i leela -S
Then you can just import
it in your files
;
Usage
The library exports a single function
leela([data = undefined[, immutable = true]])
It accepts an object to mutate and a flag to decide wheter apply directly the mutations to the object or make a shallow copy of the object and mutate that.
Once "initialized", you can mutate your object in two ways:
- Providing a key and a value
'key' value'key2' value2;
- Providing an object describing the mutations you want to apply
key: value key2: value2;
You state your mutations by simply call the returning value of leela()
how many times you need to. When you are done, just make an empty call to get your mutated object.
const default_options = url: 'http://mattecapu.github.io' mime: 'text/html' async: false; // apply a mutation with easeconst async_options = async: true; // simply call your mutations one after the otherconst auth_options = 'user' 'password' getPassword; // nested objects are decomposed into atomic mutations// hence thisconst post_options = method: 'POST' body: a: 1 b: 2;// is equivalent toconst post_options = 'method' 'POST''body.a' 1'body.b' 2; // uh, didn't I mention it? leela supports key "paths"const nested = 'a.b.c' 4; // if you have dot-separated keys, just tell me (in the third argument)const dot_separated = 'a.b.c' 4 false;
You can also create per-se mutations, independent from any object. Just state what the mutation does.
In this way you have easily reusable pure functions (if you leave immutable
set to true
) and you can abstract away the mutation logic in a one-liner. Fuck yeah.
// just call leela without arguments, and then instead of returning// an object, the empty call will return a mutating functionconst tmnt = 'ninja' true; // now tmnt() contains the logic of a "ninja mutation",// so you can use it with the canonical turtlesconst ninja_turtles = 'leonardo' 'raffaello' 'donatello' 'michelangelo' ; // or with any other turtle you likeninja_turtles; // if you want a really mutating mutator (lolz),// just pass undefined as the first argumentconst radioactiveSpider = 'nerd' false'mary-jane' true; let PeterParker = nerd: true; // Peter is modified in-place, no cloning is made; ;
Pretty cool, nah?
Star this if you like it. You can tweet it too. Anyway, let me know!
License
ISC