rpetrich / Babel Plugin Transform Async To Promises
Licence: mit
Transform async/await to somewhat idiomatic JavaScript promise chains
Stars: ✭ 216
Programming Languages
typescript
32286 projects
babel-plugin-transform-async-to-promises
Babel plugin to transform async
functions containing await
expressions to the equivalent chain of Promise
calls with use of minimal helper functions.
Input:
async function fetchAsObjectURL(url) {
const response = await fetch(url);
const blob = await response.blob();
return URL.createObjectURL(blob);
}
Output:
const fetchAsObjectURL = _async(function(url) {
return _await(fetch(url), function(response) {
return _await(response.blob(), URL.createObjectURL);
});
});
hoist
enabled:
Output with function _response$blob(response) {
return _await(response.blob(), URL.createObjectURL);
}
const fetchAsObjectURL = _async(function(url) {
return _await(fetch(url), _response$blob);
});
inlineHelpers
enabled:
Output with const fetchAsObjectURL = function(url) {
try {
return Promise.resolve(fetch(url)).then(function(response) {
return Promise.resolve(response.blob()).then(URL.createObjectURL);
});
} catch(e) {
return Promise.reject(e);
}
}
JavaScript Language Features
Full Support
-
async
/await
-
for
/while
/do
loops (including loops that would exhaust stack if dispatched recursively) -
switch
statements (including fallthrough anddefault
cases) - conditional expressions
- logical expressions
-
try
/catch
-
break
/continue
statements (on both loops and labeled statements) -
throw
expressions - Function hoisting
- Variable hoisting
- Arrow functions
- Methods
arguments
this
- Proper member dereference order of operations
- Standards-compliant event loop scheduling
Partial Support
-
Function.length
:async
functions will often return a length of 0 (when the_async
wrapper is used)
No support
-
eval
: impossible to support without deep hooks into the runtime - Async generator functions: not implemented or planned
-
Function.name
: rewrite pass removes function name instrumentation -
new AsyncFunction(...)
: impossible to support without shipping babel and the plugin in the output
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].