-
Notifications
You must be signed in to change notification settings - Fork 0
/
babel.config.js
75 lines (65 loc) · 1.67 KB
/
babel.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const fs = require('fs');
const path = require('path');
const { resolvePath } = require('babel-plugin-module-resolver');
function isFileSync(filePath) {
try {
const stats = fs.statSync(filePath);
return stats.isFile();
} catch (err) {
return false;
}
}
function isDirectorySync(filePath) {
try {
const stats = fs.statSync(filePath);
return stats.isDirectory();
} catch (err) {
return false;
}
}
function resolveRelativePath(from, relativePath) {
const base = isDirectorySync(from) ? from : path.dirname(from);
return path.resolve(base, relativePath);
}
function resolvePathNode(sourcePath, currentFile, options) {
const resolvedPath = resolvePath(sourcePath, currentFile, options);
if (!resolvedPath || isFileSync(resolveRelativePath(currentFile, resolvedPath))) {
return resolvedPath;
}
const missingExtension = options.extensions.find((ext) => {
return isFileSync(resolveRelativePath(currentFile, `${resolvedPath}${ext}`));
});
if (!missingExtension) {
throw new Error('meh..');
}
return `${resolvedPath}${missingExtension}`;
}
module.exports = function (api) {
api.cache(false);
return {
presets: [
[
'@babel/preset-env',
{
targets: {
node: true,
},
},
],
'@babel/typescript',
],
plugins: [
[
'module-resolver',
{
root: [path.resolve(process.cwd(), './src')],
extensions: ['.ts', '.js'],
stripExtensions: ['.js'],
resolvePath: resolvePathNode,
},
],
'@babel/plugin-proposal-class-properties',
'@babel/proposal-object-rest-spread',
],
};
};