]> git.immae.eu Git - github/fretlink/purs-loader.git/blobdiff - src/index.js
Merge pull request #4 from cyrilfretlink/4.2.0
[github/fretlink/purs-loader.git] / src / index.js
index 01ad5a6a7c4ade477a2cd2811548a002a8db4180..d713737337e985078fab9fef30512ca13e594be9 100644 (file)
@@ -126,7 +126,8 @@ module.exports = function purescriptLoader(source, map) {
     warnings: true,
     watch: false,
     output: 'output',
-    src: []
+    src: [],
+    rewriteRules: {}
   }, loaderOptions, {
     src: srcOption
   });
@@ -195,13 +196,26 @@ module.exports = function purescriptLoader(source, map) {
         const matchErrorsSeparator = /\n(?=Error)/;
         const errors = pscMessage.split(matchErrorsSeparator);
         for (const error of errors) {
-          const matchErrLocation = /at (.+\.purs) line (\d+), column (\d+) - line (\d+), column (\d+)/;
+          const matchErrLocation = /at (.+\.purs):(\d+):(\d+) - (\d+):(\d+) \(line \2, column \3 - line \4, column \5\)/;
           const [, filename] = matchErrLocation.exec(error) || [];
           if (!filename) continue;
 
           const baseModulePath = path.join(this.rootContext, filename);
           this.addDependency(baseModulePath);
 
+          const foreignModulesErrorCodes = [
+            'ErrorParsingFFIModule',
+            'MissingFFIImplementations',
+            'UnusedFFIImplementations',
+            'MissingFFIModule'
+          ];
+          for (const code of foreignModulesErrorCodes) {
+            if (error.includes(code)) {
+              const resolved = utils.resolveForeignModule(baseModulePath);
+              this.addDependency(resolved);
+            }
+          }
+
           const matchErrModuleName = /in module ((?:\w+\.)*\w+)/;
           const [, baseModuleName] = matchErrModuleName.exec(error) || [];
           if (!baseModuleName) continue;
@@ -214,6 +228,7 @@ module.exports = function purescriptLoader(source, map) {
               const resolved = utils.resolvePursModule({
                 baseModulePath,
                 baseModuleName,
+                rewriteRules: options.rewriteRules,
                 targetModuleName
               });
               this.addDependency(resolved);
@@ -238,7 +253,7 @@ module.exports = function purescriptLoader(source, map) {
           modules.push(desc);
         }
 
-        CACHE_VAR.errors.push(Object.assign(new Error(pscMessage), { modules }));
+        CACHE_VAR.errors.push(new utils.PscError(pscMessage, modules));
       }
     }
   }