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
|
// Rewrite import paths in all output directories to handle cross-module references
|
||||||
// This must happen after ALL compilations so all destination folders exist
|
// 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) {
|
if (successfulOutputDirs.length > 0) {
|
||||||
const rewriter = TsPathRewriter.fromGlobPatterns(globPatterns);
|
const rewriter = await TsPathRewriter.fromProjectDirectory(this.cwd);
|
||||||
let totalRewritten = 0;
|
let totalRewritten = 0;
|
||||||
for (const outputDir of successfulOutputDirs) {
|
for (const outputDir of successfulOutputDirs) {
|
||||||
totalRewritten += await rewriter.rewriteDirectory(outputDir);
|
totalRewritten += await rewriter.rewriteDirectory(outputDir);
|
||||||
|
|||||||
@@ -51,6 +51,39 @@ export class TsPathRewriter {
|
|||||||
return new TsPathRewriter(mappings);
|
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
|
* Get the current folder mappings
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user