Ninja Pumpkin Mutants

    babel-plugin-async-to-promises

    1.0.5 • Public • Published

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

    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.

    Install

    npm i babel-plugin-async-to-promises

    DownloadsWeekly Downloads

    3,782

    Version

    1.0.5

    License

    ISC

    Last publish

    Collaborators

    • commandoline
    • hzoo