]> git.immae.eu Git - github/fretlink/purs-loader.git/commitdiff
Merge pull request #4 from cyrilfretlink/4.2.0 purs-css-modules-webpack-plugin
authorCyril Sobierajewicz <38043722+cyrilfretlink@users.noreply.github.com>
Fri, 22 Mar 2019 16:38:38 +0000 (17:38 +0100)
committerGitHub <noreply@github.com>
Fri, 22 Mar 2019 16:38:38 +0000 (17:38 +0100)
Version 4.2.0

package.json
src/index.js
src/utils.js

index 1faef7b797ab5c4291f83d698a02963167b8e779..d9235c87ea349f729f9c18f43e199164ed00aff8 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "purs-loader",
-  "version": "4.1.0",
+  "version": "4.2.0",
   "description": "A webpack loader for PureScript.",
   "main": "lib/index.js",
   "files": [
index be809c685ac5959cc011388259cea1026578102c..d713737337e985078fab9fef30512ca13e594be9 100644 (file)
@@ -126,7 +126,8 @@ module.exports = function purescriptLoader(source, map) {
     warnings: true,
     watch: false,
     output: 'output',
-    src: []
+    src: [],
+    rewriteRules: {}
   }, loaderOptions, {
     src: srcOption
   });
@@ -227,6 +228,7 @@ module.exports = function purescriptLoader(source, map) {
               const resolved = utils.resolvePursModule({
                 baseModulePath,
                 baseModuleName,
+                rewriteRules: options.rewriteRules,
                 targetModuleName
               });
               this.addDependency(resolved);
index 829ba72902d652f01f7632cf9bb1b2081de87e02..446402ccf98d6f457294229d1db60d573e63b1ac 100644 (file)
@@ -23,7 +23,25 @@ const diffPursModuleNames = (from, target, parts) => {
     ? diffPursModuleNames(tail_from, tail_target, parts)
     : parts.concat(repeat('..', from.length), target);
 };
-exports.resolvePursModule = ({ baseModulePath, baseModuleName, targetModuleName }) => {
+
+const normalizeRewriteRuleDest = ({ dest, moduleName }) =>
+  typeof dest === 'function' ? dest(moduleName) : dest;
+const rewrite = ({ rules, moduleName }) => {
+  const moduleNameParts = moduleName.split('.')
+  for (const [rule, dest] of Object.entries(rules)) {
+    const ruleParts = rule.split('.');
+    const matched = ruleParts.every((part, i) =>
+      part === '*' || part === moduleNameParts[i]);
+    if (!matched) continue;
+    const rest = moduleNameParts.slice(ruleParts.length);
+    const base = normalizeRewriteRuleDest({ dest, moduleName });
+    return `${path.join(base, ...rest)}.purs`;
+  }
+};
+
+exports.resolvePursModule = ({ baseModulePath, baseModuleName, rewriteRules, targetModuleName }) => {
+  const rewrittenModulePath = rewrite({ rules: rewriteRules, moduleName: targetModuleName });
+  if (rewrittenModulePath) return rewrittenModulePath;
   const parts = diffPursModuleNames(
     baseModuleName.split('.'),
     targetModuleName.split('.'),