diff options
author | Cyril Sobierajewicz <cyril.sobierajewicz@fretlink.com> | 2019-03-22 16:25:43 +0100 |
---|---|---|
committer | Cyril Sobierajewicz <cyril.sobierajewicz@fretlink.com> | 2019-03-22 16:28:18 +0100 |
commit | ab51e7511f61e432c19f805c0f566fb674476ac2 (patch) | |
tree | b083e7a0e50470cc8df620cb10c30fe64d1718f6 /src/utils.js | |
parent | d2dedd26a0ff0133904956198ce694c241214dfa (diff) | |
download | purs-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.js | 20 |
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 | }; |
26 | exports.resolvePursModule = ({ baseModulePath, baseModuleName, targetModuleName }) => { | 26 | |
27 | const normalizeRewriteRuleDest = ({ dest, moduleName }) => | ||
28 | typeof dest === 'function' ? dest(moduleName) : dest; | ||
29 | const 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 | |||
42 | exports.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('.'), |