fix(TsPathRewriter): auto-detect all ts_* folders in project for cross-module import rewriting
Previously only mapped folders from the current compilation glob patterns. Now scans project directory for all ts_* folders to ensure imports like '../ts_shared/' are rewritten to '../dist_ts_shared/' even when compiling only the main ts/ folder.
This commit is contained in:
@@ -373,8 +373,9 @@ export class TsCompiler {
|
||||
|
||||
// Rewrite import paths in all output directories to handle cross-module references
|
||||
// This must happen after ALL compilations so all destination folders exist
|
||||
// Use fromProjectDirectory to detect ALL ts_* folders, not just the ones being compiled
|
||||
if (successfulOutputDirs.length > 0) {
|
||||
const rewriter = TsPathRewriter.fromGlobPatterns(globPatterns);
|
||||
const rewriter = await TsPathRewriter.fromProjectDirectory(this.cwd);
|
||||
let totalRewritten = 0;
|
||||
for (const outputDir of successfulOutputDirs) {
|
||||
totalRewritten += await rewriter.rewriteDirectory(outputDir);
|
||||
|
||||
@@ -51,6 +51,39 @@ export class TsPathRewriter {
|
||||
return new TsPathRewriter(mappings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a TsPathRewriter by auto-detecting all ts_* folders in the project directory.
|
||||
* This ensures that cross-module imports are rewritten even when compiling a single module.
|
||||
*
|
||||
* For example, if the project has ts/, ts_shared/, ts_web/ folders:
|
||||
* - ts → dist_ts
|
||||
* - ts_shared → dist_ts_shared
|
||||
* - ts_web → dist_ts_web
|
||||
*
|
||||
* @param cwd - The project root directory
|
||||
* @returns TsPathRewriter instance with all detected folder mappings
|
||||
*/
|
||||
public static async fromProjectDirectory(cwd: string): Promise<TsPathRewriter> {
|
||||
const mappings: IFolderMapping[] = [];
|
||||
|
||||
try {
|
||||
const entries = await FsHelpers.listDirectory(cwd);
|
||||
|
||||
for (const entry of entries) {
|
||||
// Match folders starting with 'ts' (ts, ts_shared, ts_web, ts_core, etc.)
|
||||
if (entry.isDirectory && /^ts(_|$)/.test(entry.name)) {
|
||||
const sourceFolder = entry.name;
|
||||
const destFolder = `dist_${sourceFolder}`;
|
||||
mappings.push({ sourceFolder, destFolder });
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Directory listing failed, return empty mappings
|
||||
}
|
||||
|
||||
return new TsPathRewriter(mappings);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current folder mappings
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user