Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ebc37fa5a | |||
| 5bfe60927e | |||
| 9e6b91b891 | |||
| e40e8f6a77 |
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
13
package.json
13
package.json
@@ -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
4987
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,4 +0,0 @@
|
|||||||
onlyBuiltDependencies:
|
|
||||||
- esbuild
|
|
||||||
- mongodb-memory-server
|
|
||||||
- puppeteer
|
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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==
|
||||||
@@ -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.'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 {};
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"experimentalDecorators": true,
|
|
||||||
"useDefineForClassFields": false,
|
|
||||||
"target": "ES2022",
|
"target": "ES2022",
|
||||||
"module": "NodeNext",
|
"module": "NodeNext",
|
||||||
"moduleResolution": "NodeNext",
|
"moduleResolution": "NodeNext",
|
||||||
|
|||||||
Reference in New Issue
Block a user