feat(tsbuild): Add tsconfig.json support and safer compiler option merging; protect critical options; apply path and enum transforms; bump dependencies.

This commit is contained in:
2025-11-02 05:31:55 +00:00
parent 787becc4d3
commit 82ae8a0e4a
6 changed files with 2448 additions and 1527 deletions

View File

@@ -184,6 +184,49 @@ Example:
npx tsbuild --skiplibcheck --disallowimplicitany
```
## Configuration with tsconfig.json
`@git.zone/tsbuild` fully supports `tsconfig.json` for compiler configuration. All compiler options from your `tsconfig.json` will be respected and merged with tsbuild's defaults.
### Option Priority (Merge Order)
When multiple configuration sources are present, they are merged in the following order (later sources override earlier ones):
1. **Default compiler options** - Base defaults for all options
2. **tsconfig.json** - All compiler options from your project's `tsconfig.json` (if present)
3. **Protected defaults** - Critical options for build integrity (see below)
4. **Programmatic options** - Options passed to API functions
5. **CLI flags** - Command-line arguments (highest priority)
### Protected Compiler Options
To ensure build integrity and correct functionality, the following options are protected and cannot be overridden by `tsconfig.json` alone (but can be overridden programmatically or via CLI):
- `outDir: 'dist_ts/'` - Required for path transformation logic
- `noEmitOnError: true` - Prevents broken builds from being emitted
- `declaration: true` - Ensures .d.ts files for library consumers
- `emitDecoratorMetadata: true` - Required for dependency injection frameworks
- `inlineSourceMap: true` - Provides consistent debugging experience
### Working Without tsconfig.json
`@git.zone/tsbuild` works perfectly fine without a `tsconfig.json` file. If no `tsconfig.json` is found, it will gracefully fall back to sensible defaults without errors.
Example `tsconfig.json`:
```json
{
"compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
}
}
```
## Default Compiler Options
By default, `@git.zone/tsbuild` uses the following compiler options:
@@ -200,7 +243,7 @@ By default, `@git.zone/tsbuild` uses the following compiler options:
target: ScriptTarget.ESNext,
moduleResolution: ModuleResolutionKind.NodeNext,
lib: ['lib.dom.d.ts', 'lib.es2022.d.ts'],
noImplicitAny: false, // Now allowing implicit any by default
noImplicitAny: false,
esModuleInterop: true,
useDefineForClassFields: false,
verbatimModuleSyntax: true,
@@ -208,7 +251,7 @@ By default, `@git.zone/tsbuild` uses the following compiler options:
}
```
These options can be overridden by providing a custom `CompilerOptions` object.
These defaults are merged with your `tsconfig.json` options (if present), programmatic options, and CLI flags according to the priority order described above.
## Path Resolution