]>
Commit | Line | Data |
---|---|---|
d3f40b6f CS |
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 | }; |