Browse Source

rollup plugin async

master
Lee Byron 8 years ago
commit
148819612e
  1. 3
      .gitignore
  2. 6
      .travis.yml
  3. 23
      README.md
  4. 43
      index.js
  5. 33
      package.json
  6. 14
      test/expected.js
  7. 6
      test/rollup.config.js
  8. 8
      test/source.js
  9. 3
      test/source2.js

3
.gitignore

@ -0,0 +1,3 @@
.DS_Store
npm-debug.log
node_modules

6
.travis.yml

@ -0,0 +1,6 @@
language: node_js
node_js:
- "6"
- "4"
- "iojs"
- "0.12"

23
README.md

@ -0,0 +1,23 @@
Rollup Async functions plugin
=============================
[![Build Status](https://travis-ci.org/leebyron/rollup-plugin-async.svg?branch=master)](https://travis-ci.org/leebyron/rollup-plugin-async)
This [Rollup](http://rollupjs.org/) plugin will replace [async functions](https://tc39.github.io/ecmascript-asyncawait/) with generator functions that can run in
modern browsers or in most versions of node.js during bundling using [`async-to-gen`](https://github.com/leebyron/async-to-gen).
## Install
```
npm install --save rollup-plugin-async
```
```js
var rollup = require('rollup').rollup;
var async = require('rollup-plugin-async');
rollup({
entry: 'main.js',
plugins: [ async() ]
}).then(...);
```

43
index.js

@ -0,0 +1,43 @@
var asyncToGen = require('async-to-gen');
var fs = require('fs');
var os = require('os');
var path = require('path');
var createFilter = require('rollup-pluginutils').createFilter;
module.exports = function(options) {
options = options || {};
var filter = createFilter(options.include, options.exclude);
const sourceMap = options.sourceMap !== false;
return {
name: 'async-to-gen',
transform: function(code, id) {
if (filter(id)) {
var result = asyncToGen(code, {
sourceMap: sourceMap,
includeHelper: false
});
if (result.isEdited) {
result.prepend('import { __async } from "' + getAsyncHelperFile() + '"\n');
}
return {
code: result.toString(),
map: sourceMap ? result.generateMap() : { mappings: '' }
};
}
}
};
}
var _asyncHelperFile;
function getAsyncHelperFile() {
if (!_asyncHelperFile) {
_asyncHelperFile = path.join(os.tmpdir(), 'asyncHelper.' + Date.now() + '.js');
fs.writeFileSync(_asyncHelperFile, 'export ' + asyncToGen.asyncHelper);
process.on('exit', function () {
fs.unlinkSync(_asyncHelperFile)
})
}
return _asyncHelperFile;
}

33
package.json

@ -0,0 +1,33 @@
{
"name": "rollup-plugin-async",
"version": "1.0.1",
"description": "Transforms Async functions to generator functions before bundling.",
"author": "Lee Byron <lee@leebyron.com> (http://leebyron.com/)",
"license": "BSD-3-Clause",
"main": "index.js",
"homepage": "https://github.com/leebyron/rollup-plugin-async",
"bugs": {
"url": "https://github.com/leebyron/rollup-plugin-async/issues"
},
"repository": {
"type": "git",
"url": "http://github.com/leebyron/rollup-plugin-async.git"
},
"scripts": {
"test": "DIFF=$(rollup -c test/rollup.config.js test/source.js | diff test/expected.js -); if [ -n \"$DIFF\" ]; then echo \"$DIFF\"; exit 1; fi;",
"test-update": "rollup -c test/rollup.config.js test/source.js > test/expected.js"
},
"keywords": [
"rollup-plugin",
"async",
"await",
"async-to-gen"
],
"dependencies": {
"async-to-gen": "^1.0.1",
"rollup-pluginutils": "^1.5.1"
},
"devDependencies": {
"rollup": "^0.34.1"
}
}

14
test/expected.js

@ -0,0 +1,14 @@
'use strict';
function __async(f){var g=f();return new Promise(function(s,j){function c(a,x){try{var r=g[x?"throw":"next"](a)}catch(e){return j(e)}return r.done?s(r.value):Promise.resolve(r.value).then(c,d)}function d(e){return c(e,1)}c()})}
function mystery() {return __async(function*(){
return yield 'oOOoooOOOooo'
})}
// async function statement
function foo() {return __async(function*(){
return yield mystery()
})}
foo().then(console.log)

6
test/rollup.config.js

@ -0,0 +1,6 @@
var async = require('../');
module.exports = {
plugins: [ async() ],
format: 'cjs'
};

8
test/source.js

@ -0,0 +1,8 @@
import { mystery } from './source2'
// async function statement
async function foo() {
return await mystery()
}
foo().then(console.log)

3
test/source2.js

@ -0,0 +1,3 @@
export async function mystery() {
return await 'oOOoooOOOooo'
}
Loading…
Cancel
Save