Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/babel/kneden
Transpile ES2017 async/await to vanilla ES6 Promise chains: a Babel plugin
https://github.com/babel/kneden
async babel-plugin promise
Last synced: about 18 hours ago
JSON representation
Transpile ES2017 async/await to vanilla ES6 Promise chains: a Babel plugin
- Host: GitHub
- URL: https://github.com/babel/kneden
- Owner: babel
- License: isc
- Archived: true
- Created: 2016-01-23T16:22:11.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-11-14T16:45:04.000Z (about 6 years ago)
- Last Synced: 2025-01-20T16:24:13.580Z (2 days ago)
- Topics: async, babel-plugin, promise
- Language: JavaScript
- Homepage:
- Size: 137 KB
- Stars: 515
- Watchers: 24
- Forks: 41
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
Kneden (babel-plugin-async-to-promises)
=======================================**This project is currently unmaintained. If you want to take over, feel free to fork the repo. If such a fork gets maintained or contains useful improvements, I'd be willing to merge back and give repo+npm access.**
[![Build Status](https://travis-ci.org/marten-de-vries/kneden.svg?branch=master)](https://travis-ci.org/marten-de-vries/kneden)
[![Dependency Status](https://david-dm.org/marten-de-vries/kneden.svg)](https://david-dm.org/marten-de-vries/kneden)
[![devDependency Status](https://david-dm.org/marten-de-vries/kneden/dev-status.svg)](https://david-dm.org/marten-de-vries/kneden#info=devDependencies)> Transpile ES7 async/await to vanilla ES6 Promise chains
**WARNING: Kneden
[is usable](https://github.com/pouchdb/pouchdb-plugin-helper/pull/9), but it's
also [not complete yet](https://github.com/marten-de-vries/kneden/issues/13).**Do you want an ES7 async/await transpiling [Babel](https://babeljs.io/) 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**
```js
async function test() {
await db.destroy();
}
```**Out**
```js
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](https://github.com/marten-de-vries/kneden/tree/master/test/fixtures)
for both the input and output **Kneden** takes/produces.## Installation
```sh
$ 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](https://www.npmjs.com/package/babel-preset-es2015). See
[#19](https://github.com/marten-de-vries/kneden/issues/19) for more information.### Via `.babelrc` (Recommended)
**.babelrc**
```json
{
"plugins": ["async-to-promises"]
}
```### Via CLI
```sh
$ babel --plugins async-to-promises script.js
```### Via Node API
```javascript
require("babel-core").transform("code", {
plugins: ["async-to-promises"]
});
```You can also use the plug-in in [Browserify](http://browserify.org/) using
[babelify](https://github.com/babel/babelify), in [Rollup](http://rollupjs.org/)
by using it in conjunction with
[rollup-plugin-babel](https://github.com/rollup/rollup-plugin-babel), and in
[Webpack](https://webpack.github.io/) using
[babel-loader](https://github.com/babel/babel-loader).Unsupported
------------ Return statements aren't properly supported in switch and try/catch/finally
statements yet ([#13](https://github.com/marten-de-vries/kneden/issues/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](https://github.com/marten-de-vries/kneden/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+bug%22)'.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](https://upload.wikimedia.org/wikipedia/commons/0/0e/Nl-kneden.ogg).The npm package name is a more descriptive one as explained in
[issue #22](https://github.com/marten-de-vries/kneden/issues/22).License
-------ISC
---
**Kneden** is a project by [Marten de Vries](https://ma.rtendevri.es/).