Skip to content
This repository has been archived by the owner on Jun 10, 2019. It is now read-only.
/ kneden Public archive

Transpile ES2017 async/await to vanilla ES6 Promise chains: a Babel plugin

License

Notifications You must be signed in to change notification settings

babel/kneden

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b6f0668 · Oct 14, 2016

History

65 Commits
Mar 25, 2016
Apr 24, 2016
Apr 24, 2016
Jan 30, 2016
Feb 3, 2016
Jan 30, 2016
Feb 12, 2016
Feb 1, 2016
Jun 30, 2016
Oct 14, 2016
Apr 24, 2016

Repository files navigation

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 Dependency Status devDependency Status

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.

About

Transpile ES2017 async/await to vanilla ES6 Promise chains: a Babel plugin

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published