OverviewFilesCommitsIssuesDocsReleasesPeers

mirall-cli / node_modules / bare-subprocess / lib / parent.js

57 lines · javascript ref:
const EventEmitter = require('bare-events')
const Pipe = require('bare-pipe')
const env = require('bare-env')
const SubprocessChannel = require('./channel')
const JSONFramer = require('./framers/json')
const AdvancedFramer = require('./framers/advanced')
const errors = require('./errors')

module.exports = class SubprocessParentChannel extends EventEmitter {
  constructor() {
    super()

    const fd = Number(env.BARE_CHANNEL_FD)

    if (!Number.isFinite(fd)) {
      throw errors.NO_IPC_CHANNEL('BARE_CHANNEL_FD is not set')
    }

    const serialization = env.BARE_CHANNEL_SERIALIZATION_MODE || 'json'

    let framer

    if (serialization === 'json') {
      framer = new JSONFramer()
    } else if (serialization === 'advanced') {
      framer = new AdvancedFramer()
    } else {
      throw errors.UNKNOWN_SERIALIZATION_MODE(`Unknown serialization mode '${serialization}'`)
    }

    this._pipe = new Pipe(fd, { ipc: true })
    this._channel = new SubprocessChannel(this, this._pipe, framer)
  }

  get connected() {
    return this._channel.connected
  }

  send(message, handle = null, cb) {
    return this._channel.send(message, handle, cb)
  }

  disconnect() {
    this._channel.disconnect()
  }

  ref() {
    this._channel.ref()
    return this
  }

  unref() {
    this._channel.unref()
    return this
  }
}