Acts like co@3 and also is drop-in replacement for it. Built on top of merz, actually thanks to always-done. But accept everything, not only generators - sync functions, async functions, callbacks and more. Flow-control for now and then.
npm i coone --save
Co-ify everything!
<val>
{Function|GeneratorFunction|Stream|Promise} anything that merz acceptsreturn
{Function} which accepts only callback (thunk)
Example
const coone = require('coone')
Same as in
co@3
, but better.
const fs = require('fs')
/**
* readFile
*/
function read (fp) {
return (done) => {
fs.readFile(fp, 'utf8', done)
}
}
coone(function * () {
const data = yield read('package.json')
return JSON.parse(data)
})((err, json) => {
if (err) return console.error(err)
console.log(json.name) // => 'coone'
})
Specific use-case which shows correct and working handling of optional arguments.
coone(JSON.stringify, {foo: 'bar'})((err, data)=> {
if (err) return console.error(err)
console.log(data) //=> {"foo":"bar"}
})
// result with identation
coone(JSON.stringify, {foo: 'bar'}, null, 2)((err, data) => {
if (err) return console.error(err)
console.log(data)
// =>
// {
// "foo": "bar"
// }
})
Again, showing correct handling of optinal arguments using native
fs
module.
const fs = require('fs')
// callback function
coone(fs.stat, 'package.json')((err, res) => {
if (err) return console.error(err)
console.log(res.isFile()) //=> true
})
// correct handling of optional arguments
coone(fs.readFile, 'package.json')((err, buf) => {
if (err) return console.error(err)
console.log(Buffer.isBuffer(buf)) //=> true
})
// read json file and parse it,
// because it will be utf8 string
coone(fs.readFileSync, 'package.json', 'utf-8')((err, data) => {
if (err) return console.error(err)
console.log(data.name) //=> 'coone'
})
If you pass more than two arguments to the callback, they will be flattened by default.
coone((one, two, cb) => {
cb(null, one, two, 33)
}, 11, 22)((err, res) => {
if (err) return console.error(err)
console.log(Array.isArray(res)) //=> true
console.log(res) //=> [11, 22, 33]
})
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.