aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils.js
diff options
context:
space:
mode:
authorCyril Sobierajewicz <cyril.sobierajewicz@fretlink.com>2019-03-22 16:25:43 +0100
committerCyril Sobierajewicz <cyril.sobierajewicz@fretlink.com>2019-03-22 16:28:18 +0100
commitab51e7511f61e432c19f805c0f566fb674476ac2 (patch)
treeb083e7a0e50470cc8df620cb10c30fe64d1718f6 /src/utils.js
parentd2dedd26a0ff0133904956198ce694c241214dfa (diff)
downloadpurs-loader-ab51e7511f61e432c19f805c0f566fb674476ac2.tar.gz
purs-loader-ab51e7511f61e432c19f805c0f566fb674476ac2.tar.zst
purs-loader-ab51e7511f61e432c19f805c0f566fb674476ac2.zip
Support multiple sources directories when resolving module names
Diffstat (limited to 'src/utils.js')
-rw-r--r--src/utils.js20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/utils.js b/src/utils.js
index 829ba72..446402c 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -23,7 +23,25 @@ const diffPursModuleNames = (from, target, parts) => {
23 ? diffPursModuleNames(tail_from, tail_target, parts) 23 ? diffPursModuleNames(tail_from, tail_target, parts)
24 : parts.concat(repeat('..', from.length), target); 24 : parts.concat(repeat('..', from.length), target);
25}; 25};
26exports.resolvePursModule = ({ baseModulePath, baseModuleName, targetModuleName }) => { 26
27const normalizeRewriteRuleDest = ({ dest, moduleName }) =>
28 typeof dest === 'function' ? dest(moduleName) : dest;
29const rewrite = ({ rules, moduleName }) => {
30 const moduleNameParts = moduleName.split('.')
31 for (const [rule, dest] of Object.entries(rules)) {
32 const ruleParts = rule.split('.');
33 const matched = ruleParts.every((part, i) =>
34 part === '*' || part === moduleNameParts[i]);
35 if (!matched) continue;
36 const rest = moduleNameParts.slice(ruleParts.length);
37 const base = normalizeRewriteRuleDest({ dest, moduleName });
38 return `${path.join(base, ...rest)}.purs`;
39 }
40};
41
42exports.resolvePursModule = ({ baseModulePath, baseModuleName, rewriteRules, targetModuleName }) => {
43 const rewrittenModulePath = rewrite({ rules: rewriteRules, moduleName: targetModuleName });
44 if (rewrittenModulePath) return rewrittenModulePath;
27 const parts = diffPursModuleNames( 45 const parts = diffPursModuleNames(
28 baseModuleName.split('.'), 46 baseModuleName.split('.'),
29 targetModuleName.split('.'), 47 targetModuleName.split('.'),