This repository has been archived by the owner on Jul 19, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathpaths.js
128 lines (117 loc) · 2.94 KB
/
paths.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
const {reduce, keys, pipe} = require('ramda')
const reactScriptsPaths = require('react-scripts/config/paths')
const {join} = require('path')
const {readFileSync} = require('fs')
const rekeyMap = {
dotenv: 'env',
appPath: 'root',
appBuild: 'build',
appPublic: 'public',
appHtml: 'html',
appIndexJs: 'index',
appPackageJson: 'package',
appSrc: 'src',
appTsConfig: 'tsconfig',
yarnLockFile: 'lock',
testsSetup: 'setupTests',
proxySetup: 'setupProxy',
appNodeModules: 'nodeModules',
publicUrl: 'publicUrl',
servedPath: 'served',
ownPath: 'reactScripts',
ownNodeModules: 'reactScriptsNodeModules',
appTypeDeclarations: 'typeDefinitions',
ownTypeDeclarations: 'reactScriptsTypeDefinitions',
moduleFileExtensions: 'extensions',
}
const configs = {
webpackConfig: 'config/webpack.config',
webpackDevServerConfig: 'config/webpackDevServer.config',
createJestConfig: 'scripts/utils/createJestConfig',
}
const scripts = ['start', 'build', 'test']
const paths = {
// improve path key names
...reduce(
(accumulator, key) => ({
...accumulator,
[rekeyMap[key]]: reactScriptsPaths[key],
}),
{},
keys(reactScriptsPaths),
),
// configurations
...reduce(
(accumulator, key) => ({
...accumulator,
[key]: join(reactScriptsPaths.ownPath, configs[key]),
}),
{},
keys(configs),
),
// scripts
...reduce(
(accumulator, key) => ({
...accumulator,
[key]: join(reactScriptsPaths.ownPath, 'scripts', key),
}),
{},
scripts,
),
}
const makeSafe = loader => p => {
try {
return loader(p)
} catch (e) {
return null
}
}
const load = makeSafe(p => require(p))
const loadRaw = makeSafe(p => {
const raw = readFileSync(p)
return JSON.parse(raw)
})
const resolve = makeSafe(p => {
try {
return require.resolve(p)
} catch (error) {
return null
}
})
const createFromLoader = (loader, prefix) =>
pipe(
m => join(prefix, m),
loader,
)
const {root, reactScriptsNodeModules} = paths
const loadFromRoot = createFromLoader(load, root)
const loadRawFromRoot = createFromLoader(loadRaw, root)
const loadFromNodeModulesOrRoot = m => load(m) || loadFromRoot(m)
const loadFromPackageField = field => loadFromRoot('package')[field]
const loadFromReactScriptsNodeModules = createFromLoader(
load,
reactScriptsNodeModules,
)
const resolveFromRoot = createFromLoader(resolve, root)
const resolveFromRootOrNodeModules = m => resolveFromRoot(m) || resolve(m)
const resolveFromReactScriptsNodeModules = createFromLoader(
resolve,
reactScriptsNodeModules,
)
const resolveFromReactScriptsNMOrNM = m =>
resolve(m) || resolveFromReactScriptsNodeModules(m)
module.exports = {
paths,
load,
loadRaw,
resolve,
loadFromRoot,
loadRawFromRoot,
loadFromNodeModulesOrRoot,
loadFromPackageField,
loadFromReactScriptsNodeModules,
resolveFromRoot,
resolveFromRootOrNodeModules,
resolveFromReactScriptsNodeModules,
resolveFromReactScriptsNMOrNM,
}