diff options
Diffstat (limited to 'lib/bundle.js')
-rw-r--r-- | lib/bundle.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/bundle.js b/lib/bundle.js new file mode 100644 index 0000000..943e08b --- /dev/null +++ b/lib/bundle.js | |||
@@ -0,0 +1,63 @@ | |||
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 | }; \ No newline at end of file | ||