Jump To …

ephemeris.coffee

_      = require('underscore')
nice   = require('./convenient')
Stream = require('stream').Stream
spawn  = require('child_process').spawn
json   = require('jsonify')
errs   = require('./errs')

A node implementation may be added straight here in this module.

module.exports = (input = {}, opts = {}) ->

When convenient is true, the input is made nice - if it isn't already just fine. If the caller would rather put less effort, the convenient is nice to help. This is not about validation, but less input requirements. Empty input defaults to convenient as well.

  if _.isEmpty(input) or opts?.convenient is true
    input = nice input

The implementation method isn't checked yet. Python is the only one, so far. opts.method ?= "py"

  stream = new Stream
  stream.writable = true

  source = spawn "python"
    , ["../bin/ephemeris.py", "#{json.stringify input}"]
    , { cwd: __dirname }

  source.stdout.on 'data', (stdout) ->
    stream.emit 'data', stdout

  source.stderr.on 'data', (stderr) ->
    stream.emit 'error', errs.create 'ephemeris', message: stderr.toString()

  source.on 'exit', (code) ->
    if code isnt 0
      stream.emit 'error', errs.create 'ephemeris',
        message: "Spawned child_process exited with code #{code}!"
    stream.emit 'end'

  stream