diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/index.js | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/index.js b/src/index.js index 17951d3..9db8a63 100644 --- a/src/index.js +++ b/src/index.js | |||
@@ -25,6 +25,7 @@ module.exports = function purescriptLoader(source, map) { | |||
25 | pscArgs: {}, | 25 | pscArgs: {}, |
26 | pscBundle: 'psc-bundle', | 26 | pscBundle: 'psc-bundle', |
27 | pscBundleArgs: {}, | 27 | pscBundleArgs: {}, |
28 | pscIde: false, | ||
28 | pscIdeColors: webpackOptions.psc === 'psa' || query.psc === 'psa', | 29 | pscIdeColors: webpackOptions.psc === 'psa' || query.psc === 'psa', |
29 | pscIdeArgs: {}, | 30 | pscIdeArgs: {}, |
30 | bundleOutput: 'output/bundle.js', | 31 | bundleOutput: 'output/bundle.js', |
@@ -56,7 +57,7 @@ module.exports = function purescriptLoader(source, map) { | |||
56 | // invalidate loader cache when bundle is marked as invalid (in watch mode) | 57 | // invalidate loader cache when bundle is marked as invalid (in watch mode) |
57 | this._compiler.plugin('invalid', () => { | 58 | this._compiler.plugin('invalid', () => { |
58 | cache = config.purescriptLoaderCache = { | 59 | cache = config.purescriptLoaderCache = { |
59 | rebuild: true, | 60 | rebuild: options.pscIde, |
60 | deferred: [], | 61 | deferred: [], |
61 | ideServer: cache.ideServer | 62 | ideServer: cache.ideServer |
62 | } | 63 | } |
@@ -216,13 +217,19 @@ function rebuild(psModule) { | |||
216 | const ideClient = spawn('psc-ide-client', args) | 217 | const ideClient = spawn('psc-ide-client', args) |
217 | 218 | ||
218 | ideClient.stdout.once('data', data => { | 219 | ideClient.stdout.once('data', data => { |
219 | const res = JSON.parse(data.toString()) | 220 | let res = null |
220 | debug(res) | ||
221 | 221 | ||
222 | if (!Array.isArray(res.result)) { | 222 | try { |
223 | res = JSON.parse(data.toString()) | ||
224 | debug(res) | ||
225 | } catch (err) { | ||
226 | return reject(err) | ||
227 | } | ||
228 | |||
229 | if (res && !Array.isArray(res.result)) { | ||
223 | return res.resultType === 'success' | 230 | return res.resultType === 'success' |
224 | ? resolve(psModule) | 231 | ? resolve(psModule) |
225 | : reject(res) | 232 | : reject('psc-ide rebuild failed') |
226 | } | 233 | } |
227 | 234 | ||
228 | Promise.map(res.result, (item, i) => { | 235 | Promise.map(res.result, (item, i) => { |
@@ -231,8 +238,15 @@ function rebuild(psModule) { | |||
231 | }) | 238 | }) |
232 | .then(compileMessages => { | 239 | .then(compileMessages => { |
233 | if (res.resultType === 'error') { | 240 | if (res.resultType === 'error') { |
241 | if (res.result.some(item => item.errorCode === 'UnknownModule')) { | ||
242 | console.log('Unknown module, attempting full recompile') | ||
243 | return compile(psModule) | ||
244 | .then(() => request({ command: 'load' })) | ||
245 | .then(resolve) | ||
246 | .catch(() => reject('psc-ide rebuild failed')) | ||
247 | } | ||
234 | cache.errors = compileMessages | 248 | cache.errors = compileMessages |
235 | reject(res) | 249 | reject('psc-ide rebuild failed') |
236 | } else { | 250 | } else { |
237 | cache.warnings = compileMessages | 251 | cache.warnings = compileMessages |
238 | resolve(psModule) | 252 | resolve(psModule) |
@@ -251,14 +265,6 @@ function rebuild(psModule) { | |||
251 | params: { | 265 | params: { |
252 | file: psModule.srcPath, | 266 | file: psModule.srcPath, |
253 | } | 267 | } |
254 | }).catch(res => { | ||
255 | if (res.resultType === 'error') { | ||
256 | if (res.result.some(item => item.errorCode === 'UnknownModule')) { | ||
257 | console.log('Unknown module, attempting full recompile') | ||
258 | return compile(psModule).then(() => request({ command: 'load' })) | ||
259 | } | ||
260 | } | ||
261 | return Promise.resolve(psModule) | ||
262 | }) | 268 | }) |
263 | } | 269 | } |
264 | 270 | ||