feat(tsbuild): Improve task logging and update dependencies
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-05-21 - 2.6.0 - feat(tsbuild)
|
||||||
|
Improve task logging and update dependencies
|
||||||
|
|
||||||
|
- Add .npmrc file with npm registry configuration
|
||||||
|
- Update test script to use '--verbose' flag
|
||||||
|
- Bump dependency versions for @push.rocks packages and TypeScript
|
||||||
|
- Enhance TsBuild logging by incorporating task info (e.g. task number, total tasks, output folder, and compile durations)
|
||||||
|
- Propagate task info in compileFileArrayWithErrorTracking for better task tracking
|
||||||
|
|
||||||
## 2025-05-21 - 2.5.2 - fix(tsbuild)
|
## 2025-05-21 - 2.5.2 - fix(tsbuild)
|
||||||
Improve diagnostic error handling and summary reporting for TypeScript compilation by refactoring diagnostic processing and adding pre-emit error checks.
|
Improve diagnostic error handling and summary reporting for TypeScript compilation by refactoring diagnostic processing and adding pre-emit error checks.
|
||||||
|
|
||||||
|
14
package.json
14
package.json
@@ -10,7 +10,7 @@
|
|||||||
"tsbuild": "./cli.js"
|
"tsbuild": "./cli.js"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "tsrun test/test.ts",
|
"test": "tsrun test/test.ts --verbose",
|
||||||
"build": "node cli.ts.js --web",
|
"build": "node cli.ts.js --web",
|
||||||
"buildDocs": "tsdoc"
|
"buildDocs": "tsdoc"
|
||||||
},
|
},
|
||||||
@@ -40,16 +40,16 @@
|
|||||||
"@push.rocks/early": "^4.0.4",
|
"@push.rocks/early": "^4.0.4",
|
||||||
"@push.rocks/smartcli": "^4.0.11",
|
"@push.rocks/smartcli": "^4.0.11",
|
||||||
"@push.rocks/smartdelay": "^3.0.5",
|
"@push.rocks/smartdelay": "^3.0.5",
|
||||||
"@push.rocks/smartfile": "^11.1.5",
|
"@push.rocks/smartfile": "^11.2.3",
|
||||||
"@push.rocks/smartlog": "^3.0.7",
|
"@push.rocks/smartlog": "^3.1.8",
|
||||||
"@push.rocks/smartpath": "^5.0.18",
|
"@push.rocks/smartpath": "^5.0.18",
|
||||||
"@push.rocks/smartpromise": "^4.2.2",
|
"@push.rocks/smartpromise": "^4.2.3",
|
||||||
"typescript": "5.7.3"
|
"typescript": "5.8.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@git.zone/tsrun": "^1.2.47",
|
"@git.zone/tsrun": "^1.2.47",
|
||||||
"@push.rocks/tapbundle": "^5.5.6",
|
"@git.zone/tstest": "^1.9.0",
|
||||||
"@types/node": "^22.12.0"
|
"@types/node": "^22.15.21"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"ts/**/*",
|
"ts/**/*",
|
||||||
|
5464
pnpm-lock.yaml
generated
5464
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
import { tap, expect, expectAsync } from '@push.rocks/tapbundle';
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
||||||
|
|
||||||
import * as tsbuild from '../ts/index.js';
|
import * as tsbuild from '../ts/index.js';
|
||||||
|
|
||||||
|
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@git.zone/tsbuild',
|
name: '@git.zone/tsbuild',
|
||||||
version: '2.5.2',
|
version: '2.6.0',
|
||||||
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.'
|
||||||
}
|
}
|
||||||
|
@@ -41,6 +41,7 @@ export class TsBuild {
|
|||||||
private fileNames: string[] = [];
|
private fileNames: string[] = [];
|
||||||
private options: plugins.typescript.CompilerOptions;
|
private options: plugins.typescript.CompilerOptions;
|
||||||
private argvArg?: any;
|
private argvArg?: any;
|
||||||
|
private taskInfo?: any;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new TsBuild instance
|
* Create a new TsBuild instance
|
||||||
@@ -48,10 +49,12 @@ export class TsBuild {
|
|||||||
constructor(
|
constructor(
|
||||||
fileNames: string[] = [],
|
fileNames: string[] = [],
|
||||||
customOptions: CompilerOptions = {},
|
customOptions: CompilerOptions = {},
|
||||||
argvArg?: any
|
argvArg?: any,
|
||||||
|
taskInfo?: any
|
||||||
) {
|
) {
|
||||||
this.fileNames = fileNames;
|
this.fileNames = fileNames;
|
||||||
this.argvArg = argvArg;
|
this.argvArg = argvArg;
|
||||||
|
this.taskInfo = taskInfo;
|
||||||
this.options = this.mergeCompilerOptions(customOptions, argvArg);
|
this.options = this.mergeCompilerOptions(customOptions, argvArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +323,17 @@ export class TsBuild {
|
|||||||
await plugins.smartdelay.delayFor(5000);
|
await plugins.smartdelay.delayFor(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enhanced logging with task info
|
||||||
|
const startTime = Date.now();
|
||||||
|
if (this.taskInfo) {
|
||||||
|
const { taskNumber, totalTasks, sourcePattern, destDir, fileCount } = this.taskInfo;
|
||||||
|
const relativeDestDir = destDir.replace(process.cwd(), '').replace(/^\//, '');
|
||||||
|
console.log(`\n🔨 [${taskNumber}/${totalTasks}] Compiling ${fileCount} file${fileCount !== 1 ? 's' : ''} from ${sourcePattern}`);
|
||||||
|
console.log(` 📁 Output: ${relativeDestDir}`);
|
||||||
|
} else {
|
||||||
console.log(`🔨 Compiling ${this.fileNames.length} files...`);
|
console.log(`🔨 Compiling ${this.fileNames.length} files...`);
|
||||||
|
}
|
||||||
|
|
||||||
const done = plugins.smartpromise.defer<{ emittedFiles: any[], errorSummary: IErrorSummary }>();
|
const done = plugins.smartpromise.defer<{ emittedFiles: any[], errorSummary: IErrorSummary }>();
|
||||||
const program = this.createProgram();
|
const program = this.createProgram();
|
||||||
|
|
||||||
@@ -352,7 +365,15 @@ export class TsBuild {
|
|||||||
|
|
||||||
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
||||||
if (exitCode === 0) {
|
if (exitCode === 0) {
|
||||||
console.log('\n✅ TypeScript emit succeeded!');
|
const endTime = Date.now();
|
||||||
|
const duration = endTime - startTime;
|
||||||
|
|
||||||
|
if (this.taskInfo) {
|
||||||
|
const { taskNumber, totalTasks } = this.taskInfo;
|
||||||
|
console.log(`✅ [${taskNumber}/${totalTasks}] Task completed in ${duration}ms`);
|
||||||
|
} else {
|
||||||
|
console.log(`✅ TypeScript emit succeeded! (${duration}ms)`);
|
||||||
|
}
|
||||||
|
|
||||||
// Get count of emitted files by type
|
// Get count of emitted files by type
|
||||||
const jsFiles = emitResult.emittedFiles?.filter(f => f.endsWith('.js')).length || 0;
|
const jsFiles = emitResult.emittedFiles?.filter(f => f.endsWith('.js')).length || 0;
|
||||||
@@ -361,7 +382,7 @@ export class TsBuild {
|
|||||||
|
|
||||||
// If we have emitted files, show a summary
|
// If we have emitted files, show a summary
|
||||||
if (emitResult.emittedFiles && emitResult.emittedFiles.length > 0) {
|
if (emitResult.emittedFiles && emitResult.emittedFiles.length > 0) {
|
||||||
console.log(` Generated ${emitResult.emittedFiles.length} files: ${jsFiles} .js, ${dtsFiles} .d.ts, ${mapFiles} source maps`);
|
console.log(` 📄 Generated ${emitResult.emittedFiles.length} files: ${jsFiles} .js, ${dtsFiles} .d.ts, ${mapFiles} source maps`);
|
||||||
}
|
}
|
||||||
|
|
||||||
done.resolve({ emittedFiles: emitResult.emittedFiles || [], errorSummary: combinedErrorSummary });
|
done.resolve({ emittedFiles: emitResult.emittedFiles || [], errorSummary: combinedErrorSummary });
|
||||||
|
@@ -6,16 +6,28 @@ export type { CompilerOptions, ScriptTarget, ModuleKind };
|
|||||||
|
|
||||||
export * from './tsbuild.classes.tsbuild.js';
|
export * from './tsbuild.classes.tsbuild.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface for task information
|
||||||
|
*/
|
||||||
|
export interface ITaskInfo {
|
||||||
|
taskNumber: number;
|
||||||
|
totalTasks: number;
|
||||||
|
sourcePattern: string;
|
||||||
|
destDir: string;
|
||||||
|
fileCount: number;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* compile an array of absolute file paths with error tracking
|
* compile an array of absolute file paths with error tracking
|
||||||
*/
|
*/
|
||||||
export let compileFileArrayWithErrorTracking = async (
|
export let compileFileArrayWithErrorTracking = async (
|
||||||
fileStringArrayArg: string[],
|
fileStringArrayArg: string[],
|
||||||
compilerOptionsArg: CompilerOptions = {},
|
compilerOptionsArg: CompilerOptions = {},
|
||||||
argvArg?: any
|
argvArg?: any,
|
||||||
|
taskInfo?: ITaskInfo
|
||||||
): Promise<{ emittedFiles: any[], errorSummary: import('./tsbuild.classes.tsbuild.js').IErrorSummary }> => {
|
): Promise<{ emittedFiles: any[], errorSummary: import('./tsbuild.classes.tsbuild.js').IErrorSummary }> => {
|
||||||
const { TsBuild } = await import('./tsbuild.classes.tsbuild.js');
|
const { TsBuild } = await import('./tsbuild.classes.tsbuild.js');
|
||||||
const tsBuild = new TsBuild(fileStringArrayArg, compilerOptionsArg, argvArg);
|
const tsBuild = new TsBuild(fileStringArrayArg, compilerOptionsArg, argvArg, taskInfo);
|
||||||
return tsBuild.compileWithErrorTracking();
|
return tsBuild.compileWithErrorTracking();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -115,8 +127,11 @@ export let compileGlobStringObject = async (
|
|||||||
let compiledFiles: any[] = [];
|
let compiledFiles: any[] = [];
|
||||||
const errorSummaries: import('./tsbuild.classes.tsbuild.js').IErrorSummary[] = [];
|
const errorSummaries: import('./tsbuild.classes.tsbuild.js').IErrorSummary[] = [];
|
||||||
|
|
||||||
|
const totalTasks = Object.keys(globStringObjectArg).length;
|
||||||
|
let currentTask = 0;
|
||||||
|
|
||||||
// Log the compilation tasks in a nice format
|
// Log the compilation tasks in a nice format
|
||||||
console.log('\n👷 TypeScript Compilation Tasks:');
|
console.log(`\n👷 TypeScript Compilation Tasks (${totalTasks} task${totalTasks !== 1 ? 's' : ''}):`);
|
||||||
Object.entries(globStringObjectArg).forEach(([source, dest]) => {
|
Object.entries(globStringObjectArg).forEach(([source, dest]) => {
|
||||||
console.log(` 📂 ${source} → ${dest}`);
|
console.log(` 📂 ${source} → ${dest}`);
|
||||||
});
|
});
|
||||||
@@ -153,7 +168,16 @@ export let compileGlobStringObject = async (
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Compile with error tracking
|
// Compile with error tracking
|
||||||
const result = await compileFileArrayWithErrorTracking(absoluteFilePathArray, updatedTsOptions, argvArg);
|
currentTask++;
|
||||||
|
const taskInfo = {
|
||||||
|
taskNumber: currentTask,
|
||||||
|
totalTasks,
|
||||||
|
sourcePattern: keyArg,
|
||||||
|
destDir: globStringObjectArg[keyArg],
|
||||||
|
fileCount: absoluteFilePathArray.length
|
||||||
|
};
|
||||||
|
|
||||||
|
const result = await compileFileArrayWithErrorTracking(absoluteFilePathArray, updatedTsOptions, argvArg, taskInfo);
|
||||||
compiledFiles = compiledFiles.concat(result.emittedFiles);
|
compiledFiles = compiledFiles.concat(result.emittedFiles);
|
||||||
errorSummaries.push(result.errorSummary);
|
errorSummaries.push(result.errorSummary);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user