UNPKG

1.52 kBtext/coffeescriptView Raw
1compiler = require './compiler'
2path = require 'path'
3mkdirp = require 'mkdirp'
4fs = require 'fs'
5
6opt = 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...')
16argv = opt.argv
17if argv.help
18 opt.showHelp()
19 process.exit 1
20
21outputResult = (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
36compileStdIn = (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
48compileFile = (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
56module.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