1 | compiler = require './compiler'
|
2 | path = require 'path'
|
3 | mkdirp = require 'mkdirp'
|
4 | fs = require 'fs'
|
5 |
|
6 | opt = require('optimist')
|
7 | .boolean('help')
|
8 | .alias('h','help').describe('h','show this usage')
|
9 | .describe('output','output folder')
|
10 | .string('output')
|
11 | .alias('o','output')
|
12 | .describe('dest','output file name')
|
13 | .string('filename')
|
14 | .describe('filename','filename when reading from stdin')
|
15 | .usage('Usage: $0 [options] files...')
|
16 | argv = opt.argv
|
17 | if argv.help
|
18 | opt.showHelp()
|
19 | process.exit 1
|
20 |
|
21 | outputResult = (res,inpfn) ->
|
22 | if not argv.output and not argv.dest
|
23 | console.log(res)
|
24 | return
|
25 | p = if argv.output?
|
26 | path.resolve(argv.output)
|
27 | else
|
28 | process.cwd()
|
29 | fn = argv.dest or inpfn? and path.basename(inpfn)
|
30 | fn = path.resolve(p, fn)
|
31 | if fn is inpfn
|
32 | console.error("output to same file #{fn}")
|
33 | process.exit 1
|
34 | fs.writeFileSync(fn,res)
|
35 |
|
36 | compileStdIn = (opts) ->
|
37 | inp = ''
|
38 | process.stdin.setEncoding("utf8")
|
39 | process.stdin.on 'readable', ->
|
40 | chunk = process.stdin.read()
|
41 | if chunk?
|
42 | inp += chunk
|
43 | process.stdin.on 'end', ->
|
44 | outputResult(
|
45 | compiler.compile(inp, argv, argv.filename ? 'console')
|
46 | argv.filename)
|
47 |
|
48 | compileFile = (c) ->
|
49 | try
|
50 | res = compiler.compileFile(c, argv)
|
51 | catch e
|
52 | console.error("#{e} while parsing file #{path.resolve c}")
|
53 | process.exit 1
|
54 | outputResult(res,c)
|
55 |
|
56 | module.exports = ->
|
57 | if argv.output
|
58 | mkdirp.sync(argv.output)
|
59 | if argv._.length
|
60 | compileFile(path.resolve(i)) for i in argv._
|
61 | else
|
62 | compileStdIn()
|
63 | return
|