Skip to content

Commit cdc6e82

Browse files

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

src/helpers/config.ts

+44-8
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,21 @@ export async function prepareConfig(
103103
return config;
104104
}
105105

106+
function replaceConfigDirPlaceholder(path: string, configDir: string) {
107+
return path.replace(/\$\{configDir\}/g, configDir);
108+
}
109+
106110
/**
107111
* loadConfig loads a config file from fs.
108112
* @param {string} file file path to the config file that will be loaded.
109113
* @param {IOutput} output the output instance to log error to.
110114
* @returns {ITSConfig} a ITSConfig object
111115
*/
112-
export const loadConfig = (file: string, output: IOutput): ITSConfig => {
116+
export const loadConfig = (
117+
file: string,
118+
output: IOutput,
119+
baseConfigDir: string | null = null
120+
): ITSConfig => {
113121
if (!existsSync(file)) {
114122
output.error(`File ${file} not found`, true);
115123
}
@@ -129,15 +137,43 @@ export const loadConfig = (file: string, output: IOutput): ITSConfig => {
129137
output.debug('configDir', configDir);
130138
const config: ITSConfig = {};
131139

132-
if (baseUrl) config.baseUrl = baseUrl;
140+
if (baseUrl) {
141+
if (baseConfigDir !== null) {
142+
config.baseUrl = replaceConfigDirPlaceholder(baseUrl, baseConfigDir);
143+
} else {
144+
config.baseUrl = baseUrl;
145+
}
146+
}
133147
if (outDir) {
134-
config.outDir = isAbsolute(outDir) ? outDir : join(configDir, outDir);
148+
let replacedOutDir = outDir;
149+
if (baseConfigDir !== null) {
150+
replacedOutDir = replaceConfigDirPlaceholder(outDir, baseConfigDir);
151+
}
152+
config.outDir = isAbsolute(replacedOutDir)
153+
? replacedOutDir
154+
: join(configDir, replacedOutDir);
155+
}
156+
if (paths) {
157+
if (baseConfigDir !== null) {
158+
for (const key in paths) {
159+
paths[key] = paths[key].map((path) =>
160+
replaceConfigDirPlaceholder(path, baseConfigDir)
161+
);
162+
}
163+
}
164+
config.paths = paths;
135165
}
136-
if (paths) config.paths = paths;
137166
if (declarationDir) {
138-
config.declarationDir = isAbsolute(declarationDir)
139-
? declarationDir
140-
: join(configDir, declarationDir);
167+
let replacedDeclarationDir = declarationDir;
168+
if (baseConfigDir !== null) {
169+
replacedDeclarationDir = replaceConfigDirPlaceholder(
170+
declarationDir,
171+
baseConfigDir
172+
);
173+
}
174+
config.declarationDir = isAbsolute(replacedDeclarationDir)
175+
? replacedDeclarationDir
176+
: join(configDir, replacedDeclarationDir);
141177
}
142178
if (TSCAliasConfig?.replacers) {
143179
config.replacers = TSCAliasConfig.replacers;
@@ -162,7 +198,7 @@ export const loadConfig = (file: string, output: IOutput): ITSConfig => {
162198
...normalizeTsConfigExtendsOption(ext, file).reduce<ITSConfig>(
163199
(pre, ext) => ({
164200
...pre,
165-
...loadConfig(ext, output)
201+
...loadConfig(ext, output, baseConfigDir ?? configDir)
166202
}),
167203
{}
168204
),

0 commit comments

Comments
 (0)