You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

52 lines
1.5 KiB

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);
var 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, __asyncGen, __asyncIterator } 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 + '\n' +
'export ' + asyncToGen.asyncGenHelper + '\n' +
'export ' + asyncToGen.asyncIteratorHelper
);
process.on('exit', function () {
fs.unlinkSync(_asyncHelperFile)
})
}
// Note that while win32 uses \ as path separator, Node require() may rely on /.
return os.platform() === 'win32' ?
_asyncHelperFile.replace(/\\/g, '/') :
_asyncHelperFile;
}