]> git.immae.eu Git - github/fretlink/purs-loader.git/blobdiff - src/to-javascript.js
Handle multiple forced compiles on rebuild
[github/fretlink/purs-loader.git] / src / to-javascript.js
index 0acf180f9e1a260f53c12e5324840b70ac4f6c06..d0934d5ed46e19fd6da9be41c1109f7cbcf517da 100644 (file)
@@ -10,7 +10,11 @@ const jsStringEscape = require('js-string-escape');
 
 const difference = require('lodash.difference');
 
-const debug = require('debug')('purs-loader');
+const debug_ = require('debug');
+
+const debug = debug_('purs-loader');
+
+const debugVerbose = debug_('purs-loader:verbose');
 
 const PsModuleMap = require('./PsModuleMap');
 
@@ -99,14 +103,23 @@ function makeJS(psModule, psModuleMap, js) {
   const additionalImports = difference(imports, replacedImports);
 
   if (additionalImports.length) {
-    debug('additional imports for %s: %o', name, additionalImports);
+    debugVerbose('additional imports for %s: %o', name, additionalImports);
   }
 
   const additionalImportsResult = additionalImports.map(import_ => {
-    const escapedPath = jsStringEscape(psModuleMap[import_].src);
+    const moduleValue = psModuleMap[import_];
+
+    if (!moduleValue) {
+      debug('module %s was not found in the map, skipping require', import_);
+
+      return null;
+    }
+    else {
+      const escapedPath = jsStringEscape(moduleValue.src);
 
-    return `var ${import_.replace(/\./g, '_')} = require("${escapedPath}")`;
-  }).join('\n');
+      return `var ${import_.replace(/\./g, '_')} = require("${escapedPath}")`;
+    }
+  }).filter(a => a !== null).join('\n');
 
   const result_ = result + (additionalImports.length ? '\n' + additionalImportsResult : '');
 
@@ -120,13 +133,13 @@ module.exports = function toJavaScript(psModule) {
 
   const bundlePath = path.resolve(options.bundleOutput);
 
-  const jsPath = cache.bundle ? bundlePath : psModule.jsPath;
+  const jsPath = options.bundle ? bundlePath : psModule.jsPath;
 
   const js = fs.readFileAsync(jsPath, 'utf8').catch(() => '');
 
   const psModuleMap = updatePsModuleMap(psModule);
 
-  debug('loading JavaScript for %s', psModule.name);
+  debugVerbose('loading JavaScript for %s', psModule.name);
 
   return Promise.props({js: js, psModuleMap: psModuleMap}).then(result =>
     options.bundle ?