]> git.immae.eu Git - github/fretlink/purs-loader.git/blobdiff - src/Psc.js
Handle missing module and adding debugging
[github/fretlink/purs-loader.git] / src / Psc.js
index 0aa9fe2f90c5e2929d060fdce739c8c315259008..ffa32b714a69c43bcf8954c8b8f9bb2e35d71c78 100644 (file)
@@ -29,21 +29,33 @@ function compile(psModule) {
   debug('spawning compiler %s %o', options.psc, args)
 
   return (new Promise((resolve, reject) => {
-    debug('\nCompiling PureScript...')
+    debug('compiling PureScript...')
 
     const compilation = spawn(options.psc, args)
 
-    compilation.stdout.on('data', data => stderr.push(data.toString()))
-    compilation.stderr.on('data', data => stderr.push(data.toString()))
+    compilation.stderr.on('data', data => {
+      stderr.push(data.toString());
+    });
 
     compilation.on('close', code => {
-      debug('Finished compiling PureScript.')
+      debug('finished compiling PureScript.')
       cache.compilationFinished = true
       if (code !== 0) {
-        cache.errors = stderr.join('')
-        reject(new Error('compilation failed'))
+        const errorMessage = stderr.join('');
+        if (errorMessage.length) {
+          psModule.emitError(errorMessage);
+        }
+        if (options.watch) {
+          resolve(psModule);
+        }
+        else {
+          reject(new Error('compilation failed'))
+        }
       } else {
-        cache.warnings = stderr.join('')
+        const warningMessage = stderr.join('');
+        if (options.warnings && warningMessage.length) {
+          psModule.emitWarning(warningMessage);
+        }
         resolve(psModule)
       }
     })
@@ -74,15 +86,19 @@ function bundle(options, cache) {
   debug('spawning bundler %s %o', options.pscBundle, args.join(' '))
 
   return (new Promise((resolve, reject) => {
-    debug('Bundling PureScript...')
+    debug('bundling PureScript...')
 
     const compilation = spawn(options.pscBundle, args)
 
     compilation.stdout.on('data', data => stdout.push(data.toString()))
     compilation.stderr.on('data', data => stderr.push(data.toString()))
     compilation.on('close', code => {
+      debug('finished bundling PureScript.')
       if (code !== 0) {
-        cache.errors = (cache.errors || '') + stderr.join('')
+        const errorMessage = stderr.join('');
+        if (errorMessage.length) {
+          psModule.emitError(errorMessage);
+        }
         return reject(new Error('bundling failed'))
       }
       cache.bundle = stderr