Files
atom/src/task-bootstrap.js
2019-05-31 18:33:56 +02:00

91 lines
2.1 KiB
JavaScript

const { userAgent } = process.env;
const [compileCachePath, taskPath] = process.argv.slice(2);
const CompileCache = require('./compile-cache');
CompileCache.setCacheDirectory(compileCachePath);
CompileCache.install(`${process.resourcesPath}`, require);
const setupGlobals = function() {
global.attachEvent = function() {};
const console = {
warn() {
return global.emit('task:warn', ...arguments);
},
log() {
return global.emit('task:log', ...arguments);
},
error() {
return global.emit('task:error', ...arguments);
},
trace() {}
};
global.__defineGetter__('console', () => console);
global.document = {
createElement() {
return {
setAttribute() {},
getElementsByTagName() {
return [];
},
appendChild() {}
};
},
documentElement: {
insertBefore() {},
removeChild() {}
},
getElementById() {
return {};
},
createComment() {
return {};
},
createDocumentFragment() {
return {};
}
};
global.emit = (event, ...args) => process.send({ event, args });
global.navigator = { userAgent };
return (global.window = global);
};
const handleEvents = function() {
process.on('uncaughtException', error =>
console.error(error.message, error.stack)
);
return process.on('message', function({ event, args } = {}) {
if (event !== 'start') {
return;
}
let isAsync = false;
const async = function() {
isAsync = true;
return result => global.emit('task:completed', result);
};
const result = handler.bind({ async })(...args);
if (!isAsync) {
return global.emit('task:completed', result);
}
});
};
const setupDeprecations = function() {
const Grim = require('grim');
return Grim.on('updated', function() {
const deprecations = Grim.getDeprecations().map(deprecation =>
deprecation.serialize()
);
Grim.clearDeprecations();
return global.emit('task:deprecations', deprecations);
});
};
setupGlobals();
handleEvents();
setupDeprecations();
const handler = require(taskPath);