]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Add option to include Spago sources (#126)
authorDaniel Harvey <danieljamesharvey@gmail.com>
Sun, 2 Jun 2019 12:31:30 +0000 (13:31 +0100)
committereric <thul.eric@gmail.com>
Sun, 2 Jun 2019 12:31:30 +0000 (08:31 -0400)
README.md
src/index.js

index cc4373eee5be923e4d73505e4941a7160b38d5ce..28c2783e884963f175e4acd64e73da431955b046 100644 (file)
--- a/README.md
+++ b/README.md
@@ -62,7 +62,8 @@ const loaderConfig = {
   pscIdeServerArgs: {}, // for example, to change the port {port: 4088}
   pscIdeRebuildArgs: {} // for example, for sourcemaps {codegen: ['js', 'sourcemaps']}
   pscIdeColors: false, // defaults to true if psc === 'psa'
-  pscPackage: false,
+  pscPackage: false, // include dependencies from psc-package
+  spago: false, // include dependencies from spago
   bundleOutput: 'output/bundle.js',
   bundleNamespace: 'PS',
   bundle: false,
@@ -71,10 +72,12 @@ const loaderConfig = {
   output: 'output',
   src: [
     path.join('src', '**', '*.purs'),
-    // if pscPackage = false
-    path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
     // if pscPackage = true
     // source paths reported by `psc-package sources`
+    // if spago = true
+    // source paths reported by `spago sources`
+    // if pscPackage = false and spago = false
+    path.join('bower_components', 'purescript-*', 'src', '**', '*.purs')
   ]
 }
 ```
@@ -91,6 +94,11 @@ if there is no server running this loader will start one for you.
 Set `pscPackage` query parameter to `true` to enable `psc-package` support. The `psc-package`-supplied source paths
 will be appended to `src` parameter.
 
+### `spago` support (experimental)
+
+Set `spago` query parameter to `true` to enable `spago` support. The `spago`-supplied source paths
+will be appended to `src` parameter.
+
 ### Troubleshooting
 
 #### Slower webpack startup after enabling psc-ide support?
index 0c620bf83761c0812594953c4e6feef0ea1472d0..a6ddc3518fb3e63c9006cf7d54f6d29fdc9674af 100644 (file)
@@ -42,6 +42,37 @@ var CACHE_VAR = {
   srcOption: []
 };
 
+// include src files provided by psc-package or Spago
+function requestDependencySources(packagerCommand, srcPath, loaderOptions) {
+  const packagerArgs = ['sources'];
+
+  const loaderSrc = loaderOptions.src || [
+    srcPath
+  ];
+
+  debug('%s %o', packagerCommand, packagerArgs);
+
+  const cmd = spawn(packagerCommand, packagerArgs);
+
+  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).filter(v => v != '').concat(loaderSrc);
+
+    debug('%s result: %o', packagerCommand, result);
+
+    CACHE_VAR.srcOption = result;
+
+    return result;
+  }
+}
+
 module.exports = function purescriptLoader(source, map) {
   this.cacheable && this.cacheable();
 
@@ -51,7 +82,7 @@ module.exports = function purescriptLoader(source, map) {
 
   const loaderOptions = loaderUtils.getOptions(this) || {};
 
-  const srcOption = (pscPackage => {
+  const srcOption = ((pscPackage, spago) => {
     const srcPath = path.join('src', '**', '*.purs');
 
     const bowerPath = path.join('bower_components', 'purescript-*', 'src', '**', '*.purs');
@@ -60,36 +91,11 @@ module.exports = function purescriptLoader(source, map) {
       return CACHE_VAR.srcOption;
     }
     else if (pscPackage) {
-      const pscPackageCommand = 'psc-package';
-
-      const pscPackageArgs = ['sources'];
-
-      const loaderSrc = loaderOptions.src || [
-        srcPath
-      ];
-
-      debug('psc-package %s %o', pscPackageCommand, pscPackageArgs);
-
-      const cmd = spawn(pscPackageCommand, pscPackageArgs);
-
-      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).filter(v => v != '').concat(loaderSrc);
-
-        debug('psc-package result: %o', result);
-
-        CACHE_VAR.srcOption = result;
-
-        return result;
-      }
+      return requestDependencySources('psc-package', srcPath, loaderOptions)
     }
+    else if (spago) {
+      return requestDependencySources('spago', srcPath, loaderOptions)
+    } 
     else {
       const result = loaderOptions.src || [
         bowerPath,
@@ -100,7 +106,7 @@ module.exports = function purescriptLoader(source, map) {
 
       return result;
     }
-  })(loaderOptions.pscPackage);
+  })(loaderOptions.pscPackage, loaderOptions.spago);
 
   const options = Object.assign({
     context: webpackContext,
@@ -116,6 +122,7 @@ module.exports = function purescriptLoader(source, map) {
     pscIde: false,
     pscIdeColors: loaderOptions.psc === 'psa',
     pscPackage: false,
+    spago: false,
     bundleOutput: 'output/bundle.js',
     bundleNamespace: 'PS',
     bundle: false,