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)