]>
Commit | Line | Data |
---|---|---|
d3f40b6f CS |
1 | 'use strict'; |
2 | ||
3 | var path = require('path'); | |
4 | ||
5 | var Promise = require('bluebird'); | |
6 | ||
7 | var fs = Promise.promisifyAll(require('fs')); | |
8 | ||
9 | var spawn = require('cross-spawn'); | |
10 | ||
11 | var debug = require('debug')('purs-loader'); | |
12 | ||
13 | var dargs = require('./dargs'); | |
14 | ||
15 | module.exports = function bundle(options, bundleModules) { | |
16 | var stdout = []; | |
17 | ||
18 | var stderr = []; | |
19 | ||
20 | var bundleCommand = options.pscBundle || 'purs'; | |
21 | ||
22 | var bundleArgs = (options.pscBundle ? [] : ['bundle']).concat(dargs(Object.assign({ | |
23 | _: [path.join(options.output, '*', '*.js')], | |
24 | output: options.bundleOutput, | |
25 | namespace: options.bundleNamespace | |
26 | }, options.pscBundleArgs))); | |
27 | ||
28 | bundleModules.forEach(function (name) { | |
29 | return bundleArgs.push('--module', name); | |
30 | }); | |
31 | ||
32 | debug('bundle: %s %O', bundleCommand, bundleArgs); | |
33 | ||
34 | return new Promise(function (resolve, reject) { | |
35 | debug('bundling PureScript...'); | |
36 | ||
37 | var compilation = spawn(bundleCommand, bundleArgs); | |
38 | ||
39 | compilation.stdout.on('data', function (data) { | |
40 | return stdout.push(data.toString()); | |
41 | }); | |
42 | ||
43 | compilation.stderr.on('data', function (data) { | |
44 | return stderr.push(data.toString()); | |
45 | }); | |
46 | ||
47 | compilation.on('close', function (code) { | |
48 | debug('finished bundling PureScript.'); | |
49 | ||
50 | if (code !== 0) { | |
51 | var errorMessage = stderr.join(''); | |
52 | ||
53 | if (errorMessage.length) { | |
54 | psModule.emitError(errorMessage); | |
55 | } | |
56 | ||
57 | reject(new Error('bundling failed')); | |
58 | } else { | |
59 | resolve(fs.appendFileAsync(options.bundleOutput, 'module.exports = ' + options.bundleNamespace)); | |
60 | } | |
61 | }); | |
62 | }); | |
63 | }; |