What is babel-plugin-transform-async-generator-functions?
The babel-plugin-transform-async-generator-functions package is a Babel plugin that transforms async generator functions to ES5. This allows developers to use async generator functions in environments that do not natively support them.
What are babel-plugin-transform-async-generator-functions's main functionalities?
Transforming Async Generator Functions
This feature allows you to transform async generator functions into a format that is compatible with ES5. The code sample demonstrates how to use Babel to transform an async generator function using the plugin.
const babel = require('@babel/core');
const code = `
async function* asyncGenerator() {
yield 'Hello';
yield 'World';
}
`;
const output = babel.transformSync(code, {
plugins: ['babel-plugin-transform-async-generator-functions']
});
console.log(output.code);
Other packages similar to babel-plugin-transform-async-generator-functions
@babel/plugin-transform-async-to-generator
This package transforms async functions to generator functions. While it does not handle async generator functions specifically, it is useful for transforming async functions to a format that is compatible with older JavaScript environments.
regenerator
Regenerator is a tool to transform async functions and generators to ES5. It provides broader support for both async functions and generator functions, making it a more comprehensive solution compared to babel-plugin-transform-async-generator-functions.
babel-plugin-transform-async-generator-functions
Turn async generator functions and for-await statements to ES2015 generators
Example
In
async function* agf() {
await 1;
yield 2;
}
Out
var _asyncGenerator = ...
let agf = (() => {
var _ref = _asyncGenerator.wrap(function* () {
yield _asyncGenerator.await(1);
yield 2;
});
return function agf() {
return _ref.apply(this, arguments);
};
})();
For await example
async function f() {
for await (let x of y) {
g(x);
}
}
Example Usage
async function* genAnswers() {
var stream = [ Promise.resolve(4), Promise.resolve(9), Promise.resolve(12) ];
var total = 0;
for await (let val of stream) {
total += await val;
yield total;
}
}
function forEach(ai, fn) {
return ai.next().then(function (r) {
if (!r.done) {
fn(r);
return forEach(ai, fn);
}
});
}
var output = 0;
forEach(genAnswers(), function(val) { output += val.value })
.then(function () {
console.log(output);
});
Try it Out in the REPL
Installation
npm install --save-dev babel-plugin-transform-async-generator-functions
Usage
Via .babelrc
(Recommended)
.babelrc
{
"plugins": ["transform-async-generator-functions"]
}
Via CLI
babel --plugins transform-async-generator-functions script.js
Via Node API
require("babel-core").transform("code", {
plugins: ["transform-async-generator-functions"]
});
References