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);