fix(mod_compiler): add diagnostic logging of output directory states after compilation and after import-path rewriting to aid debugging

This commit is contained in:
2026-03-05 14:40:05 +00:00
parent 96bafec720
commit d6fb6e527e
3 changed files with 40 additions and 1 deletions

View File

@@ -1,5 +1,13 @@
# Changelog # Changelog
## 2026-03-05 - 4.1.18 - fix(mod_compiler)
add diagnostic logging of output directory states after compilation and after import-path rewriting to aid debugging
- Imported fs to allow reading output directories for diagnostics
- Logs entries and directory counts for each successful output directory both pre- and post-import-path-rewrite
- Diagnostics are gated by !isQuiet && !isJson and are read-only (no behavior change)
- Tags used: 'diag' (post-compilation) and 'diag-post-rewrite' (after rewriting) to help identify missing or unexpected output folders
## 2026-03-05 - 4.1.17 - fix(tsunpacker) ## 2026-03-05 - 4.1.17 - fix(tsunpacker)
use synchronous fs operations in tsunpacker to avoid readdir race conditions use synchronous fs operations in tsunpacker to avoid readdir race conditions

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@git.zone/tsbuild', name: '@git.zone/tsbuild',
version: '4.1.17', version: '4.1.18',
description: 'A tool for compiling TypeScript files using the latest nightly features, offering flexible APIs and a CLI for streamlined development.' description: 'A tool for compiling TypeScript files using the latest nightly features, offering flexible APIs and a CLI for streamlined development.'
} }

View File

@@ -1,5 +1,6 @@
import type { CompilerOptions, Diagnostic, Program } from 'typescript'; import type { CompilerOptions, Diagnostic, Program } from 'typescript';
import typescript from 'typescript'; import typescript from 'typescript';
import * as fs from 'fs';
import * as smartdelay from '@push.rocks/smartdelay'; import * as smartdelay from '@push.rocks/smartdelay';
import * as smartpromise from '@push.rocks/smartpromise'; import * as smartpromise from '@push.rocks/smartpromise';
import * as smartpath from '@push.rocks/smartpath'; import * as smartpath from '@push.rocks/smartpath';
@@ -371,6 +372,21 @@ export class TsCompiler {
successfulOutputDirs.push(destDir); successfulOutputDirs.push(destDir);
} }
// Diagnostic: log all output directory states after each compilation
if (!isQuiet && !isJson) {
for (const prevDir of successfulOutputDirs) {
try {
const entries = fs.readdirSync(prevDir);
const dirs = entries.filter(e => {
try { return fs.statSync(prevDir + '/' + e).isDirectory(); } catch { return false; }
});
console.log(` 📋 [diag] ${prevDir.replace(this.cwd + '/', '')}: ${entries.length} entries, ${dirs.length} dirs`);
} catch {
console.log(` 📋 [diag] ${prevDir.replace(this.cwd + '/', '')}: MISSING!`);
}
}
}
} }
// Rewrite import paths in all output directories to handle cross-module references // Rewrite import paths in all output directories to handle cross-module references
@@ -385,6 +401,21 @@ export class TsCompiler {
if (totalRewritten > 0 && !isQuiet && !isJson) { if (totalRewritten > 0 && !isQuiet && !isJson) {
console.log(` 🔄 Rewrote import paths in ${totalRewritten} file${totalRewritten !== 1 ? 's' : ''}`); console.log(` 🔄 Rewrote import paths in ${totalRewritten} file${totalRewritten !== 1 ? 's' : ''}`);
} }
// Diagnostic: log output directory states after path rewriting
if (!isQuiet && !isJson) {
for (const dir of successfulOutputDirs) {
try {
const entries = fs.readdirSync(dir);
const dirs = entries.filter(e => {
try { return fs.statSync(dir + '/' + e).isDirectory(); } catch { return false; }
});
console.log(` 📋 [diag-post-rewrite] ${dir.replace(this.cwd + '/', '')}: ${entries.length} entries, ${dirs.length} dirs`);
} catch {
console.log(` 📋 [diag-post-rewrite] ${dir.replace(this.cwd + '/', '')}: MISSING!`);
}
}
}
} }
// Merge all error summaries // Merge all error summaries