feeles-ide
Version:
The hackable and serializable IDE to make learning material
83 lines (66 loc) • 2.21 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _babel = _interopRequireDefault(require("../workers/babel.worker"));
var Rollbar = _interopRequireWildcard(require("../utils/rollbar"));
// WebWorker instance
var worker = new _babel.default(); // <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=".concat(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 && loc.line);
reject(babelError);
Rollbar.error(babelError);
} else {
resolve(file.set({
text: code || file.text // Babel option の ignore に入っている場合は code が null で返される
}));
}
});
var babelFile = function () {
var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return function (file) {
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: {
filename: file.name
}
});
} else {
resolve(file);
}
});
};
}();
var _default = babelFile;
exports.default = _default;