]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - lib/bundle.js
Merge remote-tracking branch 'fretlink/master' into latest
[github/fretlink/purs-loader.git] / lib / bundle.js
CommitLineData
d3f40b6f
CS
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};