]> git.immae.eu Git - github/fretlink/purs-loader.git/blame - src/utils.js
Merge pull request #1 from cyrilfretlink/3.3.0
[github/fretlink/purs-loader.git] / src / utils.js
CommitLineData
f9d5f2fa
CS
1const path = require('path');
2
e3de0f71
CS
3exports.PscError = class PscError extends Error {
4 constructor(message, modules) {
5 super(message);
6 this.modules = modules;
7 }
8
9 static get name() {
10 return 'PscError';
11 }
12};
13
f9d5f2fa
CS
14const repeat = (value, times) =>
15 times <= 0 ? [] : [value, ...repeat(value, times - 1)];
16const diffPursModuleNames = (from, target, parts) => {
17 if (!from.length) return parts.concat(target);
18 if (!target.length) return parts.concat(repeat('..', from.length));
19 const [head_from, ...tail_from] = from;
20 const [head_target, ...tail_target] = target;
21 return head_from === head_target
22 ? diffPursModuleNames(tail_from, tail_target, parts)
23 : parts.concat(repeat('..', from.length), target);
24};
25exports.resolvePursModule = ({ baseModulePath, baseModuleName, targetModuleName }) => {
26 const parts = diffPursModuleNames(
27 baseModuleName.split('.'),
28 targetModuleName.split('.'),
29 []);
30 return parts.length
31 ? path.resolve(baseModulePath,
32 `${path.join(...parts)}.purs`)
33 : baseModulePath;
34};