Kneden (babel-plugin-async-to-promises)

Transpile ES7 async/await to vanilla ES6 Promise chains
WARNING: Kneden
is usable, but it's
also not complete yet.
Do you want an ES7 async/await transpiling Babel plugin,
that:
- produces readable code - even when generator functions are not available?
- doesn't come with a runtime your users have to download?
Then look no further! Kneden (babel-plugin-async-to-promises) can help you.
Example
In
async function test() {
await db.destroy();
}
Out
function test() {
return Promise.resolve().then(function () {
return db.destroy();
}).then(function () {});
}
(The last .then() might seem superfluous at first, but the first function
doesn't actually resolve to anything so it's necessary to make a valid
translation.)
Kneden tries to translate ES7 async/await to promises in a manner similar to
how a human would do so. Loops are converted to recursive functions, and your
code is modified in such a way that a return won't just drop you in the next
part of the promise chain, but actually does what you expect it to do.
For more examples, see the
test/fixtures directory
for both the input and output Kneden takes/produces.
Installation
$ npm install babel-plugin-async-to-promises
Usage
Note: Kneden only supports transpiling ES5 with the addition of async/await. If
you're using other ES6 features (like arrow functions, let/const, classes,
etc.), make sure you transpile them down to valid ES5 code first using the
babel es2015 preset. See
#19 for more information.
Via .babelrc (Recommended)
.babelrc
{
"plugins": ["async-to-promises"]
}
Via CLI
$ babel --plugins async-to-promises script.js
Via Node API
require("babel-core").transform("code", {
plugins: ["async-to-promises"]
});
You can also use the plug-in in Browserify using
babelify, in Rollup
by using it in conjunction with
rollup-plugin-babel, and in
Webpack using
babel-loader.
Unsupported
- Return statements aren't properly supported in switch and try/catch/finally
statements yet (#13)
- No
eval(); but that's true for other Babel plugins/presets as well.
Contributing
There are a couple of ways to contribute, for example by:
- Reporting test results with your code base
- Fixing bugs, for a nice starting task see the ones labeled 'good first bug'.
Contributions are very welcome! Just open an issue or PR.
What's up with the name?
It's Dutch for 'to knead'/'to mold' - the program molds ES7 async/await
constructs into promises. It seemed applicable. Pronounciation.
The npm package name is a more descriptive one as explained in
issue #22.
License
ISC
Kneden is a project by Marten de Vries.