diff options
author | eric thul <thul.eric@gmail.com> | 2017-04-22 10:52:54 -0400 |
---|---|---|
committer | eric <thul.eric@gmail.com> | 2017-04-23 18:20:22 -0400 |
commit | 1c12889c0adf91cf3116a9d5ff44b7466b1dfcc9 (patch) | |
tree | 1f3ac400c629bc040a8c54478363956e37a585b4 /src/Psc.js | |
parent | e1bf1f98de548fb2cbaca1a2b6c1d4cb3e173848 (diff) | |
download | purs-loader-1c12889c0adf91cf3116a9d5ff44b7466b1dfcc9.tar.gz purs-loader-1c12889c0adf91cf3116a9d5ff44b7466b1dfcc9.tar.zst purs-loader-1c12889c0adf91cf3116a9d5ff44b7466b1dfcc9.zip |
Support for PureScript 0.11
Resolves #89
Diffstat (limited to 'src/Psc.js')
-rw-r--r-- | src/Psc.js | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/src/Psc.js b/src/Psc.js deleted file mode 100644 index ffa32b7..0000000 --- a/src/Psc.js +++ /dev/null | |||
@@ -1,108 +0,0 @@ | |||
1 | 'use strict'; | ||
2 | |||
3 | const path = require('path'); | ||
4 | |||
5 | const Promise = require('bluebird') | ||
6 | |||
7 | const fs = Promise.promisifyAll(require('fs')) | ||
8 | |||
9 | const spawn = require('cross-spawn') | ||
10 | |||
11 | const debug = require('debug')('purs-loader'); | ||
12 | |||
13 | const dargs = require('./dargs'); | ||
14 | |||
15 | function compile(psModule) { | ||
16 | const options = psModule.options | ||
17 | const cache = psModule.cache | ||
18 | const stderr = [] | ||
19 | |||
20 | if (cache.compilationStarted) return Promise.resolve(psModule) | ||
21 | |||
22 | cache.compilationStarted = true | ||
23 | |||
24 | const args = dargs(Object.assign({ | ||
25 | _: options.src, | ||
26 | output: options.output, | ||
27 | }, options.pscArgs)) | ||
28 | |||
29 | debug('spawning compiler %s %o', options.psc, args) | ||
30 | |||
31 | return (new Promise((resolve, reject) => { | ||
32 | debug('compiling PureScript...') | ||
33 | |||
34 | const compilation = spawn(options.psc, args) | ||
35 | |||
36 | compilation.stderr.on('data', data => { | ||
37 | stderr.push(data.toString()); | ||
38 | }); | ||
39 | |||
40 | compilation.on('close', code => { | ||
41 | debug('finished compiling PureScript.') | ||
42 | cache.compilationFinished = true | ||
43 | if (code !== 0) { | ||
44 | const errorMessage = stderr.join(''); | ||
45 | if (errorMessage.length) { | ||
46 | psModule.emitError(errorMessage); | ||
47 | } | ||
48 | if (options.watch) { | ||
49 | resolve(psModule); | ||
50 | } | ||
51 | else { | ||
52 | reject(new Error('compilation failed')) | ||
53 | } | ||
54 | } else { | ||
55 | const warningMessage = stderr.join(''); | ||
56 | if (options.warnings && warningMessage.length) { | ||
57 | psModule.emitWarning(warningMessage); | ||
58 | } | ||
59 | resolve(psModule) | ||
60 | } | ||
61 | }) | ||
62 | })) | ||
63 | .then(compilerOutput => { | ||
64 | if (options.bundle) { | ||
65 | return bundle(options, cache).then(() => psModule) | ||
66 | } | ||
67 | return psModule | ||
68 | }) | ||
69 | } | ||
70 | module.exports.compile = compile; | ||
71 | |||
72 | function bundle(options, cache) { | ||
73 | if (cache.bundle) return Promise.resolve(cache.bundle) | ||
74 | |||
75 | const stdout = [] | ||
76 | const stderr = cache.bundle = [] | ||
77 | |||
78 | const args = dargs(Object.assign({ | ||
79 | _: [path.join(options.output, '*', '*.js')], | ||
80 | output: options.bundleOutput, | ||
81 | namespace: options.bundleNamespace, | ||
82 | }, options.pscBundleArgs)) | ||
83 | |||
84 | cache.bundleModules.forEach(name => args.push('--module', name)) | ||
85 | |||
86 | debug('spawning bundler %s %o', options.pscBundle, args.join(' ')) | ||
87 | |||
88 | return (new Promise((resolve, reject) => { | ||
89 | debug('bundling PureScript...') | ||
90 | |||
91 | const compilation = spawn(options.pscBundle, args) | ||
92 | |||
93 | compilation.stdout.on('data', data => stdout.push(data.toString())) | ||
94 | compilation.stderr.on('data', data => stderr.push(data.toString())) | ||
95 | compilation.on('close', code => { | ||
96 | debug('finished bundling PureScript.') | ||
97 | if (code !== 0) { | ||
98 | const errorMessage = stderr.join(''); | ||
99 | if (errorMessage.length) { | ||
100 | psModule.emitError(errorMessage); | ||
101 | } | ||
102 | return reject(new Error('bundling failed')) | ||
103 | } | ||
104 | cache.bundle = stderr | ||
105 | resolve(fs.appendFileAsync(options.bundleOutput, `module.exports = ${options.bundleNamespace}`)) | ||
106 | }) | ||
107 | })) | ||
108 | } | ||