]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - lib/compile.js
Build v4.2.0
[github/fretlink/purs-loader.git] / lib / compile.js
CommitLineData
d3f40b6f
CS
1'use strict';
2
3var Promise = require('bluebird');
4
5var spawn = require('cross-spawn');
6
7var debug_ = require('debug');
8
9var debug = debug_('purs-loader');
10
11var debugVerbose = debug_('purs-loader:verbose');
12
13var dargs = require('./dargs');
14
15module.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};