]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Disable instant psc-ide rebuilds by default.
authorAlex Mingoia <talk@alexmingoia.com>
Thu, 12 May 2016 20:57:55 +0000 (13:57 -0700)
committerAlex Mingoia <talk@alexmingoia.com>
Thu, 12 May 2016 20:57:55 +0000 (13:57 -0700)
Using psc-ide-server is experimental and there may be bugs or edge-cases.

README.md
src/index.js

index ed25296bea7ea348f8ad83b92d6a053fa6b2ba24..e7e0b458e2da7d57a850f1a7e0ceb8af264d6c4f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -37,6 +37,8 @@ const webpackConfig = {
 }
 ```
 
+### Options
+
 Default options:
 
 ```javascript
@@ -45,6 +47,7 @@ Default options:
   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',
@@ -61,3 +64,8 @@ Default options:
   ],
 }
 ```
+
+### Instant rebuilds (experimental)
+
+Experimental support for instant rebuilds using `psc-ide-server` can be enabled
+via the `pscIde: true` option.
index 17951d3b04e82a49e1f3a789b09e8666a41d8a69..9db8a6337a0afe31d0f02e32b6de48bda168e4e3 100644 (file)
@@ -25,6 +25,7 @@ module.exports = function purescriptLoader(source, map) {
     pscArgs: {},
     pscBundle: 'psc-bundle',
     pscBundleArgs: {},
+    pscIde: false,
     pscIdeColors: webpackOptions.psc === 'psa' || query.psc === 'psa',
     pscIdeArgs: {},
     bundleOutput: 'output/bundle.js',
@@ -56,7 +57,7 @@ module.exports = function purescriptLoader(source, map) {
     // 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
       }
@@ -216,13 +217,19 @@ function rebuild(psModule) {
     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) => {
@@ -231,8 +238,15 @@ function rebuild(psModule) {
       })
       .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)
@@ -251,14 +265,6 @@ function rebuild(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)
   })
 }