]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Use 'spago path output' to choose default output path (#132)
authorDaniel Harvey <daniel.harvey@habito.com>
Tue, 17 Dec 2019 01:11:06 +0000 (01:11 +0000)
committereric <thul.eric@gmail.com>
Tue, 17 Dec 2019 01:11:06 +0000 (20:11 -0500)
* Use 'spago path output'

* Remove eol from path

src/index.js

index a6ddc3518fb3e63c9006cf7d54f6d29fdc9674af..ff1330232ec0b6d764f2828e85535357a55d75a4 100644 (file)
@@ -39,7 +39,8 @@ var CACHE_VAR = {
   compilationStarted: false,
   compilationFinished: false,
   installed: false,
-  srcOption: []
+  srcOption: [],
+  spagoOutputPath: null
 };
 
 // include src files provided by psc-package or Spago
@@ -73,6 +74,36 @@ function requestDependencySources(packagerCommand, srcPath, loaderOptions) {
   }
 }
 
+// 'spago output path' will return the output folder in a monorepo
+function getSpagoSources() {
+  const cachedVal = CACHE_VAR.spagoOutputPath;
+  if (cachedVal) {
+    return cachedVal
+  }
+  const command = "spago"
+  const args = ["path", "output"]
+
+  const cmd = spawn(command, args);
+
+  if (cmd.error) {
+    throw new Error(cmd.error);
+  }
+  else if (cmd.status !== 0) {
+    const error = cmd.stdout.toString();
+
+    throw new Error(error);
+  }
+  else {
+    const result = cmd.stdout.toString().split(eol)[0]
+
+    debug('"spago path output" result: %o', result);
+
+    CACHE_VAR.spagoOutputPath = result;
+
+    return result;
+  }
+}
+
 module.exports = function purescriptLoader(source, map) {
   this.cacheable && this.cacheable();
 
@@ -107,6 +138,8 @@ module.exports = function purescriptLoader(source, map) {
       return result;
     }
   })(loaderOptions.pscPackage, loaderOptions.spago);
+  
+  const outputPath = loaderOptions.spago ? getSpagoSources() : 'output'
 
   const options = Object.assign({
     context: webpackContext,
@@ -128,7 +161,7 @@ module.exports = function purescriptLoader(source, map) {
     bundle: false,
     warnings: true,
     watch: false,
-    output: 'output',
+    output: outputPath,
     src: []
   }, loaderOptions, {
     src: srcOption