feeles-ide
Version:
The hackable and serializable IDE to make learning material
73 lines (63 loc) • 1.86 kB
JavaScript
import _extends from 'babel-runtime/helpers/extends';
import _Promise from 'babel-runtime/core-js/promise';
import _Map from 'babel-runtime/core-js/map';
import BabelWorker from '../workers/babel.worker';
// WebWorker instance
var worker = new BabelWorker();
// <string, { file, resolve, reject }> map
var pool = new _Map();
// Receive messages from Babel
worker.addEventListener('message', function (event) {
// Result of transpiling
var _event$data = event.data,
id = _event$data.id,
code = _event$data.code,
error = _event$data.error;
if (!pool.has(id)) {
// Not Found Error
console.warn('Error in Babel: Unknown id=' + id, '_File.js:babelFile');
}
var _pool$get = pool.get(id),
file = _pool$get.file,
resolve = _pool$get.resolve,
reject = _pool$get.reject;
pool.delete(id);
if (error) {
// Got a Babel Error!
var loc = error.loc,
message = error.message;
var babelError = new Error(message, file.name, loc.line);
reject(babelError);
} else {
resolve(file.set({
text: code
}));
}
});
var babelFile = function () {
var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return function (file, babelrc) {
return new _Promise(function (resolve, reject) {
if (file.isScript && file.text.length < 100000) {
var id = 'unique in babelFile.js:babelFile--' + count++;
// Set into the pool
pool.set(id, {
file: file,
resolve: resolve,
reject: reject
});
// Send messages from Babel
worker.postMessage({
id: id,
code: file.text,
options: _extends({}, babelrc, {
filename: file.name
})
});
} else {
resolve(file);
}
});
};
}();
export default babelFile;