Source: containers/ScriptContainer.js

'use strict'
/**
 * Script container
 * @module containers/ScriptContainer
 */

if (!process.relieve || process.relieve.ipc === undefined) {
  require('./IPCContainer')
}

const {argv, containerArgs, ipc} = process.relieve

ipc.once('$RELIEVE_REQUIRE', function() {
  let script = require(argv[0])

  if(typeof script == 'function') {
    script = new script
  }

  process.relieve.script = script

  if(typeof script == 'object' && typeof script.setChannel == 'function') {
    console.error('setChannel: deprecated method call, use start instead or access the channel through process.relieve.ipc')
    script.setChannel(ipc)
  }

  if(typeof script == 'object' && typeof script.start == 'function') {
    script.start()
  }

  /**
  * @listens module:process#uncaughtException
  */
  function errorCaught(err) {
    console.error(err.stack)

    /**
    * @fires error
    */
    ipc.send('error', err.toString(), err.stack)

    process.nextTick(() => process.exit(1))
  }

  ;['uncaughtException', 'unhandledRejection'].map(e => process.on(e, errorCaught))

  containerArgs.containers.map(e => require(e))

  const startedAt = Date.now()
  ipc.send('start', startedAt)
})