UNPKG

1.64 kBJavaScriptView Raw
1// Registers an alias for this module
2const {resolve} = require('path');
3const fs = require('fs');
4
5function getModuleInfo(path) {
6 if (fs.lstatSync(path).isDirectory()) {
7 try {
8 const packageInfo = require(resolve(path, 'package.json'));
9 return {
10 name: packageInfo.name,
11 path,
12 packageInfo
13 };
14 } catch (err) {
15 // ignore if sub directory does not contain package.json
16 }
17 }
18 return null;
19}
20
21// Get information of all submodules
22function getSubmodules(packageRoot) {
23 const submodules = {};
24 const parentPath = resolve(packageRoot, './modules');
25
26 if (fs.existsSync(parentPath)) {
27 //monorepo
28 fs.readdirSync(parentPath)
29 .forEach(item => {
30 const itemPath = resolve(parentPath, item);
31 const moduleInfo = getModuleInfo(itemPath);
32 if (moduleInfo) {
33 submodules[moduleInfo.name] = moduleInfo;
34 }
35 });
36 } else {
37 const moduleInfo = getModuleInfo(packageRoot);
38 submodules[moduleInfo.name] = moduleInfo;
39 }
40
41 return submodules;
42}
43
44function getAliases(mode = 'src', packageRoot = process.env.PWD) {
45 const aliases = {};
46 const submodules = getSubmodules(packageRoot);
47
48 for (const moduleName in submodules) {
49 const {path, packageInfo} = submodules[moduleName];
50 aliases[`${moduleName}/test`] = resolve(path, 'test');
51 if (mode === 'src') {
52 aliases[moduleName] = resolve(path, 'src');
53 } else {
54 const subPath = packageInfo.main && packageInfo.main.replace('/index.js', '');
55 aliases[moduleName] = subPath ? resolve(path, subPath) : path;
56 }
57 }
58
59 return aliases;
60}
61
62module.exports = getAliases;
63