Compare commits

...

4 Commits

14 changed files with 1655 additions and 3563 deletions

View File

@@ -1,5 +1,11 @@
# Changelog # Changelog
## 2025-12-13 - 3.1.3 - fix(npmextra)
Align npmextra.json package name with package.json (@git.zone/tsbuild)
- Corrected npmPackagename in npmextra.json from "@gitzone/tsbuild" to "@git.zone/tsbuild" to match package.json and README
- Metadata-only change: no code or API behavior affected
## 2025-11-28 - 3.1.2 - fix(TsBuild) ## 2025-11-28 - 3.1.2 - fix(TsBuild)
Set default TypeScript target to ESNext Set default TypeScript target to ESNext

View File

@@ -10,7 +10,7 @@
"gitscope": "gitzone", "gitscope": "gitzone",
"gitrepo": "tsbuild", "gitrepo": "tsbuild",
"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.",
"npmPackagename": "@gitzone/tsbuild", "npmPackagename": "@git.zone/tsbuild",
"license": "MIT", "license": "MIT",
"keywords": [ "keywords": [
"TypeScript", "TypeScript",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@git.zone/tsbuild", "name": "@git.zone/tsbuild",
"version": "3.1.2", "version": "3.1.4",
"private": false, "private": false,
"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.",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
@@ -29,7 +29,7 @@
"development", "development",
"API" "API"
], ],
"author": "Lossless GmbH", "author": "Task Venture Capital GmbH",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://code.foss.global/git.zone/tsbuild/issues" "url": "https://code.foss.global/git.zone/tsbuild/issues"
@@ -40,16 +40,17 @@
"@push.rocks/early": "^4.0.4", "@push.rocks/early": "^4.0.4",
"@push.rocks/smartcli": "^4.0.19", "@push.rocks/smartcli": "^4.0.19",
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile": "^11.2.7", "@push.rocks/smartfile": "^13.1.2",
"@push.rocks/smartfs": "^1.2.0",
"@push.rocks/smartlog": "^3.1.10", "@push.rocks/smartlog": "^3.1.10",
"@push.rocks/smartpath": "^6.0.0", "@push.rocks/smartpath": "^6.0.0",
"@push.rocks/smartpromise": "^4.2.3", "@push.rocks/smartpromise": "^4.2.3",
"typescript": "5.9.3" "typescript": "5.9.3"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsrun": "^1.6.2", "@git.zone/tsrun": "^2.0.1",
"@git.zone/tstest": "^2.7.0", "@git.zone/tstest": "^3.1.3",
"@types/node": "^22.15.21" "@types/node": "^25.0.1"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",

4987
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +0,0 @@
onlyBuiltDependencies:
- esbuild
- mongodb-memory-server
- puppeteer

View File

@@ -129,9 +129,20 @@ Plus: File counts, duration, and file type breakdown
## Dependencies Used ## Dependencies Used
- @git.zone/tspublish@^1.10.3 - Module ordering - @git.zone/tspublish@^1.10.3 - Module ordering
- @push.rocks/* - smartcli, smartfile, smartpath, smartpromise, smartdelay - @push.rocks/smartcli@^4.0.19 - CLI framework
- @push.rocks/smartfile@^13.1.2 - File content handling (SmartFile, StreamFile, VirtualDirectory)
- @push.rocks/smartfs@^1.2.0 - Filesystem operations (file listing, directory listing, etc.)
- @push.rocks/smartpath@^6.0.0 - Path transformation utilities
- @push.rocks/smartpromise@^4.2.3 - Promise utilities
- @push.rocks/smartdelay@^3.0.5 - Delay utilities
- typescript@5.9.3 - TypeScript compiler - typescript@5.9.3 - TypeScript compiler
### smartfs Migration Notes
- smartfile v13+ split filesystem operations to a separate @push.rocks/smartfs package
- File listing uses smartfs fluent API: `smartfs.directory(path).recursive().filter(pattern).list()`
- File existence checks use: `smartfs.file(path).exists()`
- The `listFilesWithGlob()` helper in plugins.ts handles glob pattern parsing for smartfs
## Edge Cases ## Edge Cases
1. **Empty file list** - Returns [], no error 1. **Empty file list** - Returns [], no error
@@ -151,12 +162,13 @@ Plus: File counts, duration, and file type breakdown
- CLI exit code handling (0=success, 1=error) - CLI exit code handling (0=success, 1=error)
## Recent Changes (from git log) ## Recent Changes (from git log)
- 2.6.8 - Current version - 3.1.3 - Current version
- 2.6.7 - Previous version - Migrated filesystem operations from smartfile to smartfs
- Added confirmskiplibcheck flag - Updated @git.zone/tsrun to ^2.0.1
- Improved CLI exit handling - Updated @git.zone/tstest to ^3.1.3
- JSON/quiet modes enhanced - Updated @push.rocks/smartfile to ^13.1.2
- Test script updates - Added @push.rocks/smartfs@^1.2.0 for filesystem operations
- Updated @types/node to ^25.0.1
## Configuration Example (tsconfig.json) ## Configuration Example (tsconfig.json)
Paths get automatically transformed: Paths get automatically transformed:

View File

@@ -16,6 +16,10 @@ A production-ready TypeScript compiler that combines flexibility with safety. Bu
-**Library Safe** - Never calls `process.exit()` in library code -**Library Safe** - Never calls `process.exit()` in library code
-**Modern Defaults** - ESNext, NodeNext modules, decorators out of the box -**Modern Defaults** - ESNext, NodeNext modules, decorators out of the box
## Issue Reporting and Security
For reporting issues or vulnerabilities, please visit our repository at [GitLab](https://code.foss.global/git.zone/tsbuild/issues).
## Install ## Install
```bash ```bash

View File

@@ -6,12 +6,12 @@ early.stop();
import { anExportedString } from './tocompile2.js'; import { anExportedString } from './tocompile2.js';
console.log(anExportedString); console.log(anExportedString);
class test2 { class test2 {
test = [];
constructor() { constructor() {
this.test = [];
console.log('hi'); console.log('hi');
} }
} }
const run = async () => { const run = async () => {
return 'hi'; return 'hi';
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdG9jb21waWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVyQixPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUViLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU5QixNQUFNLEtBQUs7SUFFVDtRQURBLFNBQUksR0FBYSxFQUFFLENBQUM7UUFFbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQXFCLEVBQUU7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMifQ== //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdG9jb21waWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVyQixPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUViLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU5QixNQUFNLEtBQUs7SUFDVCxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3BCO1FBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQXFCLEVBQUU7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMifQ==

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@git.zone/tsbuild', name: '@git.zone/tsbuild',
version: '3.1.2', version: '3.1.3',
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,7 +1,9 @@
// node native // node native
import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
export { export {
fs,
path path
} }
@@ -16,9 +18,66 @@ export {
import * as smartcli from '@push.rocks/smartcli'; import * as smartcli from '@push.rocks/smartcli';
import * as smartdelay from '@push.rocks/smartdelay'; import * as smartdelay from '@push.rocks/smartdelay';
import * as smartfile from '@push.rocks/smartfile'; import * as smartfile from '@push.rocks/smartfile';
import * as smartfsModule from '@push.rocks/smartfs';
import * as smartpath from '@push.rocks/smartpath'; import * as smartpath from '@push.rocks/smartpath';
import * as smartpromise from '@push.rocks/smartpromise'; import * as smartpromise from '@push.rocks/smartpromise';
// Create a smartfs instance with Node.js provider
export const smartfs = new smartfsModule.SmartFs(new smartfsModule.SmartFsProviderNode());
/**
* Helper to list files matching a glob pattern like './ts/**\/*.ts'
* Parses the pattern to extract base directory and filter pattern
*/
export async function listFilesWithGlob(basePath: string, globPattern: string): Promise<string[]> {
// Remove leading ./ if present
let pattern = globPattern.replace(/^\.\//, '');
// Find the first directory part before any glob characters
const globChars = ['*', '?', '{', '['];
let baseDir = basePath;
// Find where the glob pattern starts
const parts = pattern.split('/');
const staticParts: string[] = [];
let filterParts: string[] = [];
let foundGlob = false;
for (const part of parts) {
if (!foundGlob && !globChars.some(c => part.includes(c))) {
staticParts.push(part);
} else {
foundGlob = true;
filterParts.push(part);
}
}
// Build the base directory
if (staticParts.length > 0) {
baseDir = path.join(basePath, ...staticParts);
}
// Build the filter pattern (just the filename part, ignoring ** for directories)
// The recursive() handles the ** part
const fileFilter = filterParts[filterParts.length - 1] || '*';
// Check if we need recursive search
const needsRecursive = filterParts.some(p => p === '**' || p.includes('**'));
let dirBuilder = smartfs.directory(baseDir);
if (needsRecursive) {
dirBuilder = dirBuilder.recursive();
}
try {
const entries = await dirBuilder.filter(fileFilter).list();
return entries.filter(e => e.isFile).map(e => e.path);
} catch {
// Directory doesn't exist or other error
return [];
}
}
export { smartcli, smartdelay, smartfile, smartpath, smartpromise }; export { smartcli, smartdelay, smartfile, smartpath, smartpromise };
// third party scope // third party scope

View File

@@ -63,7 +63,9 @@ export class TsBuild {
// Try to read tsconfig.json, but don't fail if it doesn't exist // Try to read tsconfig.json, but don't fail if it doesn't exist
try { try {
tsconfig = plugins.smartfile.fs.toObjectSync(plugins.path.join(paths.cwd, 'tsconfig.json')); const tsconfigPath = plugins.path.join(paths.cwd, 'tsconfig.json');
const tsconfigContent = plugins.fs.readFileSync(tsconfigPath, 'utf8');
tsconfig = JSON.parse(tsconfigContent);
} catch (error) { } catch (error) {
// tsconfig.json doesn't exist or is invalid - use defaults // tsconfig.json doesn't exist or is invalid - use defaults
return {}; return {};

View File

@@ -63,24 +63,19 @@ export const runCli = async () => {
// Handle as glob pattern // Handle as glob pattern
console.log(`Processing glob pattern: ${pattern}`); console.log(`Processing glob pattern: ${pattern}`);
try { try {
const matchedFiles = await plugins.smartfile.fs.listFileTree(cwd, pattern); const stringMatchedFiles = await plugins.listFilesWithGlob(cwd, pattern);
// Ensure matchedFiles contains only strings
const stringMatchedFiles = Array.isArray(matchedFiles)
? matchedFiles.filter((item): item is string => typeof item === 'string')
: [];
if (stringMatchedFiles.length === 0) { if (stringMatchedFiles.length === 0) {
console.warn(`⚠️ Warning: No files matched the pattern '${pattern}'`); console.warn(`⚠️ Warning: No files matched the pattern '${pattern}'`);
} else { } else {
console.log(`📂 Found ${stringMatchedFiles.length} files matching pattern '${pattern}'`); console.log(`📂 Found ${stringMatchedFiles.length} files matching pattern '${pattern}'`);
// Transform to absolute paths // Transform to absolute paths
const absoluteMatchedFiles = plugins.smartpath.transform.toAbsolute( const absoluteMatchedFiles = plugins.smartpath.transform.toAbsolute(
stringMatchedFiles, stringMatchedFiles,
cwd cwd
) as string[]; ) as string[];
// Add to the list of all files to check // Add to the list of all files to check
allFiles = allFiles.concat(absoluteMatchedFiles); allFiles = allFiles.concat(absoluteMatchedFiles);
} }
@@ -89,14 +84,14 @@ export const runCli = async () => {
} }
} else { } else {
// Handle as direct file path // Handle as direct file path
const filePath = plugins.path.isAbsolute(pattern) const filePath = plugins.path.isAbsolute(pattern)
? pattern ? pattern
: plugins.path.join(cwd, pattern); : plugins.path.join(cwd, pattern);
try { const fileExists = await plugins.smartfs.file(filePath).exists();
await plugins.smartfile.fs.fileExists(filePath); if (fileExists) {
allFiles.push(filePath); allFiles.push(filePath);
} catch (err) { } else {
console.error(`❌ Error: File not found: ${filePath}`); console.error(`❌ Error: File not found: ${filePath}`);
process.exit(1); process.exit(1);
} }
@@ -105,21 +100,21 @@ export const runCli = async () => {
// Filter to only TypeScript files // Filter to only TypeScript files
allFiles = allFiles.filter(file => file.endsWith('.ts') || file.endsWith('.tsx')); allFiles = allFiles.filter(file => file.endsWith('.ts') || file.endsWith('.tsx'));
if (allFiles.length === 0) { if (allFiles.length === 0) {
console.error('\n❌ Error: No TypeScript files found to check'); console.error('\n❌ Error: No TypeScript files found to check');
console.error(' Please verify your file paths or glob patterns.\n'); console.error(' Please verify your file paths or glob patterns.\n');
process.exit(1); process.exit(1);
} }
console.log(`\n🔎 Found ${allFiles.length} TypeScript file${allFiles.length !== 1 ? 's' : ''} to check`); console.log(`\n🔎 Found ${allFiles.length} TypeScript file${allFiles.length !== 1 ? 's' : ''} to check`);
// Process compiler options // Process compiler options
const compilerOptions = tsbuild.mergeCompilerOptions({}, argvArg); const compilerOptions = tsbuild.mergeCompilerOptions({}, argvArg);
// Run emit check // Run emit check
const success = await tsbuild.emitCheck(allFiles, compilerOptions, argvArg); const success = await tsbuild.emitCheck(allFiles, compilerOptions, argvArg);
// Exit with appropriate code // Exit with appropriate code
process.exit(success ? 0 : 1); process.exit(success ? 0 : 1);
}); });
@@ -128,7 +123,11 @@ export const runCli = async () => {
* the custom command compiles any customDir to dist_customDir * the custom command compiles any customDir to dist_customDir
*/ */
tsbuildCli.addCommand('tsfolders').subscribe(async (argvArg) => { tsbuildCli.addCommand('tsfolders').subscribe(async (argvArg) => {
const tsFolders = await plugins.smartfile.fs.listFolders(paths.cwd, /^ts/); // List folders matching /^ts/ regex
const allEntries = await plugins.smartfs.directory(paths.cwd).list();
const tsFolders = allEntries
.filter(e => e.isDirectory && /^ts/.test(e.name))
.map(e => e.name);
// Now tsFolders contains all other folders except 'ts_shared' and 'ts_interfaces' // Now tsFolders contains all other folders except 'ts_shared' and 'ts_interfaces'
@@ -208,21 +207,18 @@ export const runCli = async () => {
// First check ts/**/* without skiplibcheck // First check ts/**/* without skiplibcheck
console.log('📂 Checking ts/**/* files...'); console.log('📂 Checking ts/**/* files...');
const tsFiles = await plugins.smartfile.fs.listFileTree(process.cwd(), 'ts/**/*.ts'); const tsTsFiles = await plugins.listFilesWithGlob(process.cwd(), 'ts/**/*.ts');
const tsTsFiles = Array.isArray(tsFiles)
? tsFiles.filter((item): item is string => typeof item === 'string')
: [];
if (tsTsFiles.length > 0) { if (tsTsFiles.length > 0) {
console.log(` Found ${tsTsFiles.length} TypeScript files in ts/`); console.log(` Found ${tsTsFiles.length} TypeScript files in ts/`);
const tsAbsoluteFiles = plugins.smartpath.transform.toAbsolute( const tsAbsoluteFiles = plugins.smartpath.transform.toAbsolute(
tsTsFiles, tsTsFiles,
process.cwd() process.cwd()
) as string[]; ) as string[];
const tsCompilerOptions = tsbuild.mergeCompilerOptions({}, argvArg); const tsCompilerOptions = tsbuild.mergeCompilerOptions({}, argvArg);
const tsSuccess = await tsbuild.checkTypes(tsAbsoluteFiles, tsCompilerOptions, argvArg); const tsSuccess = await tsbuild.checkTypes(tsAbsoluteFiles, tsCompilerOptions, argvArg);
if (!tsSuccess) { if (!tsSuccess) {
console.error('❌ Type checking failed for ts/**/*'); console.error('❌ Type checking failed for ts/**/*');
process.exit(1); process.exit(1);
@@ -231,26 +227,23 @@ export const runCli = async () => {
} else { } else {
console.log(' No TypeScript files found in ts/\n'); console.log(' No TypeScript files found in ts/\n');
} }
// Then check test/**/* with skiplibcheck // Then check test/**/* with skiplibcheck
console.log('📂 Checking test/**/* files with --skiplibcheck...'); console.log('📂 Checking test/**/* files with --skiplibcheck...');
const testFiles = await plugins.smartfile.fs.listFileTree(process.cwd(), 'test/**/*.ts'); const testTsFiles = await plugins.listFilesWithGlob(process.cwd(), 'test/**/*.ts');
const testTsFiles = Array.isArray(testFiles)
? testFiles.filter((item): item is string => typeof item === 'string')
: [];
if (testTsFiles.length > 0) { if (testTsFiles.length > 0) {
console.log(` Found ${testTsFiles.length} TypeScript files in test/`); console.log(` Found ${testTsFiles.length} TypeScript files in test/`);
const testAbsoluteFiles = plugins.smartpath.transform.toAbsolute( const testAbsoluteFiles = plugins.smartpath.transform.toAbsolute(
testTsFiles, testTsFiles,
process.cwd() process.cwd()
) as string[]; ) as string[];
// Create new argvArg with skiplibcheck for test files // Create new argvArg with skiplibcheck for test files
const testArgvArg = { ...argvArg, skiplibcheck: true }; const testArgvArg = { ...argvArg, skiplibcheck: true };
const testCompilerOptions = tsbuild.mergeCompilerOptions({}, testArgvArg); const testCompilerOptions = tsbuild.mergeCompilerOptions({}, testArgvArg);
const testSuccess = await tsbuild.checkTypes(testAbsoluteFiles, testCompilerOptions, testArgvArg); const testSuccess = await tsbuild.checkTypes(testAbsoluteFiles, testCompilerOptions, testArgvArg);
if (!testSuccess) { if (!testSuccess) {
console.error('❌ Type checking failed for test/**/*'); console.error('❌ Type checking failed for test/**/*');
process.exit(1); process.exit(1);
@@ -274,24 +267,19 @@ export const runCli = async () => {
// Handle as glob pattern // Handle as glob pattern
console.log(`Processing glob pattern: ${pattern}`); console.log(`Processing glob pattern: ${pattern}`);
try { try {
const matchedFiles = await plugins.smartfile.fs.listFileTree(cwd, pattern); const stringMatchedFiles = await plugins.listFilesWithGlob(cwd, pattern);
// Ensure matchedFiles contains only strings
const stringMatchedFiles = Array.isArray(matchedFiles)
? matchedFiles.filter((item): item is string => typeof item === 'string')
: [];
if (stringMatchedFiles.length === 0) { if (stringMatchedFiles.length === 0) {
console.warn(`⚠️ Warning: No files matched the pattern '${pattern}'`); console.warn(`⚠️ Warning: No files matched the pattern '${pattern}'`);
} else { } else {
console.log(`📂 Found ${stringMatchedFiles.length} files matching pattern '${pattern}'`); console.log(`📂 Found ${stringMatchedFiles.length} files matching pattern '${pattern}'`);
// Transform to absolute paths // Transform to absolute paths
const absoluteMatchedFiles = plugins.smartpath.transform.toAbsolute( const absoluteMatchedFiles = plugins.smartpath.transform.toAbsolute(
stringMatchedFiles, stringMatchedFiles,
cwd cwd
) as string[]; ) as string[];
// Add to the list of all files to check // Add to the list of all files to check
allFiles = allFiles.concat(absoluteMatchedFiles); allFiles = allFiles.concat(absoluteMatchedFiles);
} }
@@ -300,14 +288,14 @@ export const runCli = async () => {
} }
} else { } else {
// Handle as direct file path // Handle as direct file path
const filePath = plugins.path.isAbsolute(pattern) const filePath = plugins.path.isAbsolute(pattern)
? pattern ? pattern
: plugins.path.join(cwd, pattern); : plugins.path.join(cwd, pattern);
try { const fileExists = await plugins.smartfs.file(filePath).exists();
await plugins.smartfile.fs.fileExists(filePath); if (fileExists) {
allFiles.push(filePath); allFiles.push(filePath);
} catch (err) { } else {
console.error(`❌ Error: File not found: ${filePath}`); console.error(`❌ Error: File not found: ${filePath}`);
process.exit(1); process.exit(1);
} }
@@ -316,21 +304,21 @@ export const runCli = async () => {
// Filter to only TypeScript files // Filter to only TypeScript files
allFiles = allFiles.filter(file => file.endsWith('.ts') || file.endsWith('.tsx')); allFiles = allFiles.filter(file => file.endsWith('.ts') || file.endsWith('.tsx'));
if (allFiles.length === 0) { if (allFiles.length === 0) {
console.error('\n❌ Error: No TypeScript files found to check'); console.error('\n❌ Error: No TypeScript files found to check');
console.error(' Please verify your file paths or glob patterns.\n'); console.error(' Please verify your file paths or glob patterns.\n');
process.exit(1); process.exit(1);
} }
console.log(`\n🔎 Found ${allFiles.length} TypeScript file${allFiles.length !== 1 ? 's' : ''} to check`); console.log(`\n🔎 Found ${allFiles.length} TypeScript file${allFiles.length !== 1 ? 's' : ''} to check`);
// Process compiler options // Process compiler options
const compilerOptions = tsbuild.mergeCompilerOptions({}, argvArg); const compilerOptions = tsbuild.mergeCompilerOptions({}, argvArg);
// Run type check without emitting // Run type check without emitting
const success = await tsbuild.checkTypes(allFiles, compilerOptions, argvArg); const success = await tsbuild.checkTypes(allFiles, compilerOptions, argvArg);
// Exit with appropriate code // Exit with appropriate code
process.exit(success ? 0 : 1); process.exit(success ? 0 : 1);
}); });

View File

@@ -145,13 +145,8 @@ export let compileGlobStringObject = async (
// Type safety check for key // Type safety check for key
if (keyArg && typeof keyArg === 'string' && globStringObjectArg[keyArg]) { if (keyArg && typeof keyArg === 'string' && globStringObjectArg[keyArg]) {
// Get files matching the glob pattern // Get files matching the glob pattern using helper function
const fileTreeArray = await plugins.smartfile.fs.listFileTree(cwdArg, keyArg); const stringFileTreeArray = await plugins.listFilesWithGlob(cwdArg, keyArg);
// Ensure fileTreeArray contains only strings before transforming
const stringFileTreeArray = Array.isArray(fileTreeArray)
? fileTreeArray.filter((item): item is string => typeof item === 'string')
: [];
// Transform to absolute paths // Transform to absolute paths
const absoluteFilePathArray = plugins.smartpath.transform.toAbsolute( const absoluteFilePathArray = plugins.smartpath.transform.toAbsolute(

View File

@@ -1,7 +1,5 @@
{ {
"compilerOptions": { "compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022", "target": "ES2022",
"module": "NodeNext", "module": "NodeNext",
"moduleResolution": "NodeNext", "moduleResolution": "NodeNext",