UNPKG

2.38 kBtext/coffeescriptView Raw
1fs = require 'fs'
2path = require 'path'
3
4{formatParserError} = require './helpers'
5Nodes = require './nodes'
6{Preprocessor} = require './preprocessor'
7Parser = require './parser'
8{Optimiser} = require './optimiser'
9{Compiler} = require './compiler'
10cscodegen = try require 'cscodegen'
11escodegen = try require 'escodegen'
12
13
14pkg = require './../../package.json'
15
16escodegenFormatDefaults =
17 indent:
18 style: ' '
19 base: 0
20 renumber: yes
21 hexadecimal: yes
22 quotes: 'auto'
23 parentheses: no
24
25escodegenCompactDefaults =
26 indent:
27 style: ''
28 base: 0
29 renumber: yes
30 hexadecimal: yes
31 quotes: 'auto'
32 escapeless: yes
33 compact: yes
34 parentheses: no
35 semicolons: no
36
37
38module.exports =
39
40 Compiler: Compiler
41 Optimiser: Optimiser
42 Parser: Parser
43 Preprocessor: Preprocessor
44 Nodes: Nodes
45
46 VERSION: pkg.version
47
48 parse: (coffee, options = {}) ->
49 try
50 preprocessed = Preprocessor.processSync coffee
51 parsed = Parser.parse preprocessed,
52 raw: options.raw
53 inputSource: options.inputSource
54 if options.optimise then Optimiser.optimise parsed else parsed
55 catch e
56 throw e unless e instanceof Parser.SyntaxError
57 throw new Error formatParserError preprocessed, e
58
59 compile: (csAst, options) ->
60 Compiler.compile csAst, options
61
62 # TODO
63 cs: (csAst, options) ->
64 # TODO: opt: format (default: nice defaults)
65
66 jsWithSourceMap: (jsAst, name = 'unknown', options = {}) ->
67 # TODO: opt: minify (default: no)
68 throw new Error 'escodegen not found: run `npm install escodegen`' unless escodegen?
69 escodegen.generate jsAst.toJSON(),
70 comment: not options.compact
71 sourceMapWithCode: yes
72 sourceMap: name
73 format: if options.compact then escodegenCompactDefaults else options.format ? escodegenFormatDefaults
74
75 js: (jsAst, options) -> (@jsWithSourceMap jsAst, null, options).code
76 sourceMap: (jsAst, name, options) -> (@jsWithSourceMap jsAst, name, options).map
77
78 # Equivalent to original CS compile
79 cs2js: (input, options = {}) ->
80 options.optimise ?= on
81 csAST = CoffeeScript.parse input, options
82 jsAST = CoffeeScript.compile csAST, bare: options.bare
83 CoffeeScript.js jsAST, compact: options.compact or options.minify
84
85
86CoffeeScript = module.exports.CoffeeScript = module.exports
87
88if (process.title == 'node')
89 noBrowserifyRequire = require
90 noBrowserifyRequire './run'