~chee/mcflurry

16829b2cba4704ab305d1a5de21f6638f4848f38 — chee 5 years ago
introduce mcflurry
3 files changed, 41 insertions(+), 0 deletions(-)

A README.md
A index.js
A package.json
A  => README.md +23 -0
@@ 1,23 @@
# mcflurry

destructuring an object in function arguments is fun and v flexible, but it
means you can't build up the arguments over time using `curry()` and v sad.

so mcflurry lets you do this

```js
const mcflurry = require('mcflurry')
const objectLog = mcflurry(console.log)
objectLog({a: 22})({b: 47})({c: 'dog', a: 1})() //=> {a:22, b:47, c:'dog'}
```

yes unfortunately it can't magically know when the function is fully satisfied,
the only way to do that would be to supply a list of the keys that needed to be
present separately as strings. that seemed more gross.

ruby has `method(:lol).parameters` which would allow you to do it there, but not
in js in any way i could think of

so i've opted for calling it with no arguments when you're done

anyway thanks everybody bye

A  => index.js +9 -0
@@ 1,9 @@
module.exports = mcflurry
mcflurry.default = mcflurry

function mcflurry(fn, object = {}) {
  return function(next) {
    const current = Object.assign({}, object, next)
    return next ? mcflurry(fn, current) : fn(current)
  }
}

A  => package.json +9 -0
@@ 1,9 @@
{
  "name": "mcflurry",
  "version": "0.0.74",
  "description": "build composeable functions using objects for keyword arguments",
  "main": "index.js",
  "repository": "git@gitlab.com:chee/mcflurry",
  "author": "chee <chee@snake.dog>",
  "license": "MIT"
}