}
```
+### Options
+
Default options:
```javascript
pscArgs: {},
pscBundle: 'psc-bundle',
pscBundleArgs: {},
+ pscIde: false, // instant rebuilds using psc-ide-server (experimental)
pscIdeColors: false, // defaults to true if psc === 'psa'
bundleOutput: 'output/bundle.js',
bundleNamespace: 'PS',
],
}
```
+
+### Instant rebuilds (experimental)
+
+Experimental support for instant rebuilds using `psc-ide-server` can be enabled
+via the `pscIde: true` option.
pscArgs: {},
pscBundle: 'psc-bundle',
pscBundleArgs: {},
+ pscIde: false,
pscIdeColors: webpackOptions.psc === 'psa' || query.psc === 'psa',
pscIdeArgs: {},
bundleOutput: 'output/bundle.js',
// invalidate loader cache when bundle is marked as invalid (in watch mode)
this._compiler.plugin('invalid', () => {
cache = config.purescriptLoaderCache = {
- rebuild: true,
+ rebuild: options.pscIde,
deferred: [],
ideServer: cache.ideServer
}
const ideClient = spawn('psc-ide-client', args)
ideClient.stdout.once('data', data => {
- const res = JSON.parse(data.toString())
- debug(res)
+ let res = null
- if (!Array.isArray(res.result)) {
+ try {
+ res = JSON.parse(data.toString())
+ debug(res)
+ } catch (err) {
+ return reject(err)
+ }
+
+ if (res && !Array.isArray(res.result)) {
return res.resultType === 'success'
? resolve(psModule)
- : reject(res)
+ : reject('psc-ide rebuild failed')
}
Promise.map(res.result, (item, i) => {
})
.then(compileMessages => {
if (res.resultType === 'error') {
+ if (res.result.some(item => item.errorCode === 'UnknownModule')) {
+ console.log('Unknown module, attempting full recompile')
+ return compile(psModule)
+ .then(() => request({ command: 'load' }))
+ .then(resolve)
+ .catch(() => reject('psc-ide rebuild failed'))
+ }
cache.errors = compileMessages
- reject(res)
+ reject('psc-ide rebuild failed')
} else {
cache.warnings = compileMessages
resolve(psModule)
params: {
file: psModule.srcPath,
}
- }).catch(res => {
- if (res.resultType === 'error') {
- if (res.result.some(item => item.errorCode === 'UnknownModule')) {
- console.log('Unknown module, attempting full recompile')
- return compile(psModule).then(() => request({ command: 'load' }))
- }
- }
- return Promise.resolve(psModule)
})
}