From c8a1582ec4bc9037437275cf135bea66b26db220 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Mon, 12 Jan 2026 17:53:06 +0000 Subject: [PATCH] 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. --- ts/mod_compiler/classes.tscompiler.ts | 3 +- ts/mod_pathrewrite/classes.tspathrewriter.ts | 33 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ts/mod_compiler/classes.tscompiler.ts b/ts/mod_compiler/classes.tscompiler.ts index 3a308bb..46e4437 100644 --- a/ts/mod_compiler/classes.tscompiler.ts +++ b/ts/mod_compiler/classes.tscompiler.ts @@ -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); diff --git a/ts/mod_pathrewrite/classes.tspathrewriter.ts b/ts/mod_pathrewrite/classes.tspathrewriter.ts index e4ba726..b3355e8 100644 --- a/ts/mod_pathrewrite/classes.tspathrewriter.ts +++ b/ts/mod_pathrewrite/classes.tspathrewriter.ts @@ -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 { + 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 */