aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/bundle.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundle.js')
-rw-r--r--lib/bundle.js63
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
3var path = require('path');
4
5var Promise = require('bluebird');
6
7var fs = Promise.promisifyAll(require('fs'));
8
9var spawn = require('cross-spawn');
10
11var debug = require('debug')('purs-loader');
12
13var dargs = require('./dargs');
14
15module.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