]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Don’t unnecessarily invalidate the module map (#124)
authorCyril Sobierajewicz <38043722+cyrilfretlink@users.noreply.github.com>
Fri, 24 May 2019 12:46:35 +0000 (14:46 +0200)
committereric <thul.eric@gmail.com>
Fri, 24 May 2019 12:46:35 +0000 (08:46 -0400)
* Don’t unnecessarily invalidate the module map

Additional imports in PureScript sources (compared to their JavaScript output) shouldn’t always invalidate the module map because imports of types are erased and re-exports are followed.

Also `Prim.*` modules are internal to the compiler and won’t ever be present in the module map.

* Don’t add imports to unused modules

Otherwise the following expression

```purs
hello :: Effect Unit
hello = log "Hello"
```

includes the whole `Prelude` into its chunk whereas only `log` is actually needed at runtime.

src/to-javascript.js

index a7d64a22d8a5841dca03d3069381137eefa46af0..3663c8368b8ae0846757b91f22441e6b63f4bc07 100644 (file)
@@ -109,12 +109,21 @@ function makeJS(psModule, psModuleMap, js) {
     return Promise.resolve(result);
   }
   else {
-    debug('rebuilding module map due to additional imports for %s: %o', name, additionalImports);
-
-    psModule.cache.psModuleMap = null;
+    const missingImports = additionalImports.filter(moduleName =>
+        !psModuleMap[moduleName] && moduleName.split('.')[0] !== 'Prim'
+    );
 
-    return updatePsModuleMap(psModule).then(updatedPsModuleMap => {
-      const additionalImportsResult = additionalImports.map(import_ => {
+    let updatingPsModuleMap;
+    if (missingImports.length > 0) {
+        debug('rebuilding module map due to missing imports for %s: %o', name, missingImports);
+        psModule.cache.psModuleMap = null;
+        updatingPsModuleMap = updatePsModuleMap(psModule);
+    } else {
+        updatingPsModuleMap = Promise.resolve(psModuleMap);
+    }
+
+    return updatingPsModuleMap.then(updatedPsModuleMap => {
+      const missingImportsResult = missingImports.map(import_ => {
         const moduleValue = updatedPsModuleMap[import_];
 
         if (!moduleValue) {
@@ -129,7 +138,7 @@ function makeJS(psModule, psModuleMap, js) {
         }
       }).filter(a => a !== null).join('\n');
 
-      return result + '\n' + additionalImportsResult;
+      return result + '\n' + missingImportsResult;
     });
   }
 }