All Projects → babel → Kneden

babel / Kneden

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

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Kneden

Tickedoff
Tiny library (<200B gzip) for deferring something by a "tick"
Stars: ✭ 213 (-58.8%)
Mutual labels:  async, promise
Babel Plugin Mobx Deep Action
Reduces `action` and `runInAction` boilerplates
Stars: ✭ 110 (-78.72%)
Mutual labels:  babel-plugin, async
React Organism
Dead simple React state management to bring pure components alive
Stars: ✭ 219 (-57.64%)
Mutual labels:  async, promise
React Hooks Async
React custom hooks for async functions with abortability and composability
Stars: ✭ 459 (-11.22%)
Mutual labels:  async, promise
Aigle
🦅 Aigle is an ideal promise library which is faster and more efficient than other libraries. It is a production-ready library that implements the Promise A+ standard.
Stars: ✭ 318 (-38.49%)
Mutual labels:  async, promise
Ppipe
pipes values through functions, an alternative to using the proposed pipe operator ( |> ) for ES
Stars: ✭ 192 (-62.86%)
Mutual labels:  async, promise
Task Easy
A simple, customizable, and lightweight priority queue for promises.
Stars: ✭ 244 (-52.8%)
Mutual labels:  async, promise
Async Busboy
Promise based multipart form parser for KoaJS
Stars: ✭ 159 (-69.25%)
Mutual labels:  async, promise
Future
Streamlined Future<Value, Error> implementation
Stars: ✭ 291 (-43.71%)
Mutual labels:  async, promise
React Loadable
⏳ A higher order component for loading components with promises.
Stars: ✭ 16,238 (+3040.81%)
Mutual labels:  babel-plugin, async
Fluture
🦋 Fantasy Land compliant (monadic) alternative to Promises
Stars: ✭ 2,249 (+335.01%)
Mutual labels:  async, promise
P Iteration
Utilities that make array iteration easy when using async/await or Promises
Stars: ✭ 337 (-34.82%)
Mutual labels:  async, promise
Kitsu
🦊 A simple, lightweight & framework agnostic JSON:API client
Stars: ✭ 166 (-67.89%)
Mutual labels:  async, promise
Trilogy
TypeScript SQLite layer with support for both native C++ & pure JavaScript drivers.
Stars: ✭ 195 (-62.28%)
Mutual labels:  async, promise
Metasync
Asynchronous Programming Library for JavaScript & Node.js
Stars: ✭ 164 (-68.28%)
Mutual labels:  async, promise
Await Of
await wrapper for easier errors handling without try-catch
Stars: ✭ 240 (-53.58%)
Mutual labels:  async, promise
Unityfx.async
Asynchronous operations (promises) for Unity3d.
Stars: ✭ 143 (-72.34%)
Mutual labels:  async, promise
Tascalate Concurrent
Implementation of blocking (IO-Bound) cancellable java.util.concurrent.CompletionStage and related extensions to java.util.concurrent.ExecutorService-s
Stars: ✭ 144 (-72.15%)
Mutual labels:  async, promise
Creed
Sophisticated and functionally-minded async with advanced features: coroutines, promises, ES2015 iterables, fantasy-land
Stars: ✭ 265 (-48.74%)
Mutual labels:  async, promise
Promise Fun
Promise packages, patterns, chat, and tutorials
Stars: ✭ 3,779 (+630.95%)
Mutual labels:  async, promise

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].