aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README.md8
-rw-r--r--src/index.js34
2 files changed, 28 insertions, 14 deletions
diff --git a/README.md b/README.md
index ed25296..e7e0b45 100644
--- a/README.md
+++ b/README.md
@@ -37,6 +37,8 @@ const webpackConfig = {
37} 37}
38``` 38```
39 39
40### Options
41
40Default options: 42Default options:
41 43
42```javascript 44```javascript
@@ -45,6 +47,7 @@ Default options:
45 pscArgs: {}, 47 pscArgs: {},
46 pscBundle: 'psc-bundle', 48 pscBundle: 'psc-bundle',
47 pscBundleArgs: {}, 49 pscBundleArgs: {},
50 pscIde: false, // instant rebuilds using psc-ide-server (experimental)
48 pscIdeColors: false, // defaults to true if psc === 'psa' 51 pscIdeColors: false, // defaults to true if psc === 'psa'
49 bundleOutput: 'output/bundle.js', 52 bundleOutput: 'output/bundle.js',
50 bundleNamespace: 'PS', 53 bundleNamespace: 'PS',
@@ -61,3 +64,8 @@ Default options:
61 ], 64 ],
62} 65}
63``` 66```
67
68### Instant rebuilds (experimental)
69
70Experimental support for instant rebuilds using `psc-ide-server` can be enabled
71via the `pscIde: true` option.
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