diff options
Diffstat (limited to 'lib/compile.js')
-rw-r--r-- | lib/compile.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/compile.js b/lib/compile.js new file mode 100644 index 0000000..a1bf211 --- /dev/null +++ b/lib/compile.js | |||
@@ -0,0 +1,64 @@ | |||
1 | 'use strict'; | ||
2 | |||
3 | var Promise = require('bluebird'); | ||
4 | |||
5 | var spawn = require('cross-spawn'); | ||
6 | |||
7 | var debug_ = require('debug'); | ||
8 | |||
9 | var debug = debug_('purs-loader'); | ||
10 | |||
11 | var debugVerbose = debug_('purs-loader:verbose'); | ||
12 | |||
13 | var dargs = require('./dargs'); | ||
14 | |||
15 | module.exports = function compile(psModule) { | ||
16 | var options = psModule.options; | ||
17 | |||
18 | var compileCommand = options.psc || 'purs'; | ||
19 | |||
20 | var compileArgs = (options.psc ? [] : ['compile']).concat(dargs(Object.assign({ | ||
21 | _: options.src, | ||
22 | output: options.output | ||
23 | }, options.pscArgs))); | ||
24 | |||
25 | var stderr = []; | ||
26 | |||
27 | debug('compile %s %O', compileCommand, compileArgs); | ||
28 | |||
29 | return new Promise(function (resolve, reject) { | ||
30 | debug('compiling PureScript...'); | ||
31 | |||
32 | var compilation = spawn(compileCommand, compileArgs); | ||
33 | |||
34 | compilation.stderr.on('data', function (data) { | ||
35 | stderr.push(data.toString()); | ||
36 | }); | ||
37 | |||
38 | compilation.stdout.on('data', function (data) { | ||
39 | debugVerbose(data.toString()); | ||
40 | }); | ||
41 | |||
42 | compilation.on('close', function (code) { | ||
43 | debug('finished compiling PureScript.'); | ||
44 | |||
45 | if (code !== 0) { | ||
46 | var errorMessage = stderr.join(''); | ||
47 | if (errorMessage.length) { | ||
48 | psModule.emitError(errorMessage); | ||
49 | } | ||
50 | if (options.watch) { | ||
51 | resolve(psModule); | ||
52 | } else { | ||
53 | reject(new Error('compilation failed')); | ||
54 | } | ||
55 | } else { | ||
56 | var warningMessage = stderr.join(''); | ||
57 | if (options.warnings && warningMessage.length) { | ||
58 | psModule.emitWarning(warningMessage); | ||
59 | } | ||
60 | resolve(psModule); | ||
61 | } | ||
62 | }); | ||
63 | }); | ||
64 | }; \ No newline at end of file | ||