1 | fs = require 'fs'
|
2 | path = require 'path'
|
3 |
|
4 | {formatParserError} = require './helpers'
|
5 | Nodes = require './nodes'
|
6 | {Preprocessor} = require './preprocessor'
|
7 | Parser = require './parser'
|
8 | {Optimiser} = require './optimiser'
|
9 | {Compiler} = require './compiler'
|
10 | cscodegen = try require 'cscodegen'
|
11 | escodegen = try require 'escodegen'
|
12 |
|
13 |
|
14 | pkg = require './../../package.json'
|
15 |
|
16 | escodegenFormatDefaults =
|
17 | indent:
|
18 | style: ' '
|
19 | base: 0
|
20 | renumber: yes
|
21 | hexadecimal: yes
|
22 | quotes: 'auto'
|
23 | parentheses: no
|
24 |
|
25 | escodegenCompactDefaults =
|
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 |
|
38 | module.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 |
|
63 | cs: (csAst, options) ->
|
64 |
|
65 |
|
66 | jsWithSourceMap: (jsAst, name = 'unknown', options = {}) ->
|
67 |
|
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 |
|
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 |
|
86 | CoffeeScript = module.exports.CoffeeScript = module.exports
|
87 |
|
88 | if (process.title == 'node')
|
89 | noBrowserifyRequire = require
|
90 | noBrowserifyRequire './run'
|