]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Watch foreign modules on compilation error
authorCyril Sobierajewicz <cyril.sobierajewicz@fretlink.com>
Mon, 18 Mar 2019 11:02:35 +0000 (12:02 +0100)
committerCyril Sobierajewicz <cyril.sobierajewicz@fretlink.com>
Mon, 18 Mar 2019 12:46:27 +0000 (13:46 +0100)
src/index.js
src/utils.js

index 28246e39d949d0eeb5b9d2e6a6aca3fd7a4bd7a2..be809c685ac5959cc011388259cea1026578102c 100644 (file)
@@ -202,6 +202,19 @@ module.exports = function purescriptLoader(source, map) {
           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;
index b6ccf8193749d2e2e263994c3b0b6649aeb8e065..829ba72902d652f01f7632cf9bb1b2081de87e02 100644 (file)
@@ -33,3 +33,7 @@ exports.resolvePursModule = ({ baseModulePath, baseModuleName, targetModuleName
       `${path.join(...parts)}.purs`)
     : baseModulePath;
 };
+
+exports.resolveForeignModule = pursModulePath =>
+  path.join(path.dirname(pursModulePath),
+    path.basename(pursModulePath, path.extname(pursModulePath)) + '.js');