Compare commits
64 Commits
Author | SHA1 | Date | |
---|---|---|---|
6d68f35a9a | |||
0378b9feca | |||
5ecf4b7125 | |||
2aa6348cdd | |||
9f42670865 | |||
6cc9f41bd2 | |||
5d32ac85e0 | |||
4f2ac6922a | |||
31834e0b3e | |||
c6c94866bb | |||
09a648b435 | |||
065e0baaf7 | |||
89d32617ce | |||
094702b917 | |||
c2aec98da3 | |||
289421206c | |||
1f9870ffbb | |||
8f7f34d61e | |||
2e23919503 | |||
f601cf8eb8 | |||
15af2e4e2d | |||
59c6e72187 | |||
5369e8d931 | |||
88444e835f | |||
4892c8f7ae | |||
687f01d1a3 | |||
071b3e222f | |||
fa41dbf332 | |||
c45a216379 | |||
00046837a7 | |||
ed22b539f2 | |||
43c7021aea | |||
b21009f815 | |||
deba95dfa6 | |||
50e6fec9b0 | |||
f7c2a67d81 | |||
91e3502965 | |||
0afddbefce | |||
94e879d9fe | |||
43e2a1d777 | |||
9a1f57b92d | |||
0064f63ddb | |||
6e90bdda36 | |||
82cce58d69 | |||
a316cc6725 | |||
05738a5c94 | |||
651a06ff7b | |||
2f04474dab | |||
d88af368a4 | |||
e60816be4c | |||
a9e383ba2d | |||
a3e1cf9e3d | |||
8790886815 | |||
611bd0d542 | |||
b182fa5c0a | |||
03d4996284 | |||
6b2d2c9cc3 | |||
e9dc5ae444 | |||
24574bdb4d | |||
2fe98bec22 | |||
87b6a4efb2 | |||
dc81d99ac3 | |||
5d0c9b0326 | |||
f27c27bd31 |
140
.gitlab-ci.yml
140
.gitlab-ci.yml
@ -1,140 +0,0 @@
|
|||||||
# gitzone ci_default
|
|
||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
|
||||||
|
|
||||||
cache:
|
|
||||||
paths:
|
|
||||||
- .npmci_cache/
|
|
||||||
key: '$CI_BUILD_STAGE'
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- security
|
|
||||||
- test
|
|
||||||
- release
|
|
||||||
- metadata
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- npm install -g @shipzone/npmci
|
|
||||||
|
|
||||||
# ====================
|
|
||||||
# security stage
|
|
||||||
# ====================
|
|
||||||
mirror:
|
|
||||||
stage: security
|
|
||||||
script:
|
|
||||||
- npmci git mirror
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
tags:
|
|
||||||
- lossless
|
|
||||||
- docker
|
|
||||||
- notpriv
|
|
||||||
|
|
||||||
auditProductionDependencies:
|
|
||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
|
||||||
stage: security
|
|
||||||
script:
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci command npm install --production --ignore-scripts
|
|
||||||
- npmci command npm config set registry https://registry.npmjs.org
|
|
||||||
- npmci command npm audit --audit-level=high --only=prod --production
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
auditDevDependencies:
|
|
||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
|
||||||
stage: security
|
|
||||||
script:
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci command npm install --ignore-scripts
|
|
||||||
- npmci command npm config set registry https://registry.npmjs.org
|
|
||||||
- npmci command npm audit --audit-level=high --only=dev
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
allow_failure: true
|
|
||||||
|
|
||||||
# ====================
|
|
||||||
# test stage
|
|
||||||
# ====================
|
|
||||||
|
|
||||||
testStable:
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci node install stable
|
|
||||||
- npmci npm install
|
|
||||||
- npmci npm test
|
|
||||||
coverage: /\d+.?\d+?\%\s*coverage/
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
testBuild:
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci node install stable
|
|
||||||
- npmci npm install
|
|
||||||
- npmci command npm run build
|
|
||||||
coverage: /\d+.?\d+?\%\s*coverage/
|
|
||||||
tags:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
release:
|
|
||||||
stage: release
|
|
||||||
script:
|
|
||||||
- npmci node install stable
|
|
||||||
- npmci npm publish
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
tags:
|
|
||||||
- lossless
|
|
||||||
- docker
|
|
||||||
- notpriv
|
|
||||||
|
|
||||||
# ====================
|
|
||||||
# metadata stage
|
|
||||||
# ====================
|
|
||||||
codequality:
|
|
||||||
stage: metadata
|
|
||||||
allow_failure: true
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
script:
|
|
||||||
- npmci command npm install -g typescript
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci npm install
|
|
||||||
tags:
|
|
||||||
- lossless
|
|
||||||
- docker
|
|
||||||
- priv
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
stage: metadata
|
|
||||||
script:
|
|
||||||
- npmci trigger
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
tags:
|
|
||||||
- lossless
|
|
||||||
- docker
|
|
||||||
- notpriv
|
|
||||||
|
|
||||||
pages:
|
|
||||||
stage: metadata
|
|
||||||
script:
|
|
||||||
- npmci node install lts
|
|
||||||
- npmci command npm install -g @gitzone/tsdoc
|
|
||||||
- npmci npm prepare
|
|
||||||
- npmci npm install
|
|
||||||
- npmci command tsdoc
|
|
||||||
tags:
|
|
||||||
- lossless
|
|
||||||
- docker
|
|
||||||
- notpriv
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
artifacts:
|
|
||||||
expire_in: 1 week
|
|
||||||
paths:
|
|
||||||
- public
|
|
||||||
allow_failure: true
|
|
257
changelog.md
Normal file
257
changelog.md
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-03-20 - 2.3.2 - fix(compileGlobStringObject)
|
||||||
|
Fix duplicate file outputs in glob pattern processing
|
||||||
|
|
||||||
|
- Removed duplicate concatenation of compiled files in compileGlobStringObject
|
||||||
|
- Ensured unique file paths are used during TypeScript compilation
|
||||||
|
|
||||||
|
## 2025-03-20 - 2.3.1 - fix(compiler)
|
||||||
|
Refactor compiler implementation with consolidated TsBuild class and improved diagnostics handling
|
||||||
|
|
||||||
|
- Removed legacy tsbuild.classes.compiler.ts and introduced tsbuild.classes.tsbuild.ts
|
||||||
|
- Unified compiler options merging, reading tsconfig.json, and diagnostics reporting within the TsBuild class
|
||||||
|
- Updated exports to reference the new compiler class implementation for backward compatibility
|
||||||
|
|
||||||
|
## 2025-03-20 - 2.3.0 - feat(cli)
|
||||||
|
Add emitcheck command to validate TS file emission without generating output
|
||||||
|
|
||||||
|
- Implemented the emitcheck CLI command to allow checking if TypeScript files can be emitted without producing files
|
||||||
|
- Updated tsbuild.classes.compiler.ts to include the emitCheck function
|
||||||
|
- Enhanced documentation in readme.md to describe the new emitcheck usage with examples
|
||||||
|
|
||||||
|
## 2025-03-17 - 2.2.7 - fix(compiler)
|
||||||
|
Improve diagnostic checking and error handling in the TypeScript compiler integration
|
||||||
|
|
||||||
|
- Added pre-emit diagnostics check to log errors before emitting
|
||||||
|
- Process exits on encountering pre-emit errors to ensure build correctness
|
||||||
|
- Enhanced logging for emit diagnostics to aid debugging
|
||||||
|
|
||||||
|
## 2025-03-04 - 2.2.6 - fix(package)
|
||||||
|
Fix repository URL in package.json
|
||||||
|
|
||||||
|
- Updated repository URL in package.json to point to the correct Git repository.
|
||||||
|
|
||||||
|
## 2025-03-04 - 2.2.5 - fix(package.json)
|
||||||
|
Update repository URLs in package metadata.
|
||||||
|
|
||||||
|
- Corrected the 'bugs.url' and 'homepage' fields with the accurate URLs.
|
||||||
|
|
||||||
|
## 2025-03-04 - 2.2.4 - fix(core)
|
||||||
|
Fix compiler logic to remove duplicate compiled files and improve glob pattern handling.
|
||||||
|
|
||||||
|
- Resolved an issue causing duplicate file compilations when using compileGlobStringObject.
|
||||||
|
- Improved handling of glob patterns to ensure accurate compilation paths.
|
||||||
|
|
||||||
|
## 2025-03-04 - 2.2.3 - fix(exports)
|
||||||
|
Fixed duplicate file compilation in compileGlobStringObject
|
||||||
|
|
||||||
|
- Enhanced type safety checks for glob pattern compilation keys.
|
||||||
|
- Ensured file list transformations include type checks.
|
||||||
|
- Fixed issue with duplicate compilation results in compileGlobStringObject.
|
||||||
|
|
||||||
|
## 2025-01-28 - 2.2.2 - fix(ci)
|
||||||
|
Remove GitLab CI configuration
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-01-28 - 2.2.1 - fix(core)
|
||||||
|
Update dependencies to improve stability and performance.
|
||||||
|
|
||||||
|
- Updated @git.zone/tspublish from version ^1.7.5 to ^1.9.1.
|
||||||
|
- Updated @push.rocks/smartfile from version ^11.0.21 to ^11.1.5.
|
||||||
|
- Updated @push.rocks/smartpromise from version ^4.0.4 to ^4.2.2.
|
||||||
|
- Updated typescript from version 5.6.3 to 5.7.3.
|
||||||
|
- Updated @push.rocks/tapbundle from version ^5.0.23 to ^5.5.6.
|
||||||
|
- Updated @types/node from version ^22.8.7 to ^22.12.0.
|
||||||
|
|
||||||
|
## 2024-11-05 - 2.2.0 - feat(cli)
|
||||||
|
Enhance CLI for TypeScript folder compilation ordering based on rank and predefined rules.
|
||||||
|
|
||||||
|
- CLI now supports automatic ordering of TypeScript folders for compilation using tspublish.json based ranking.
|
||||||
|
- Ensures 'ts_interfaces' and 'ts_shared' are always transpiled first if certain conditions are met.
|
||||||
|
- Updated TypeScript compilerOptions to support additional path transformations.
|
||||||
|
- Updated dependencies versions and added '@git.zone/tspublish' in ts/plugins.ts.
|
||||||
|
|
||||||
|
## 2024-10-27 - 2.1.85 - fix(compiler)
|
||||||
|
Improve path handling in compiler options
|
||||||
|
|
||||||
|
- Refactored path import in tsbuild.classes.compiler.ts.
|
||||||
|
- Enhanced mergeCompilerOptions to read paths and baseUrl from tsconfig.json if present.
|
||||||
|
|
||||||
|
## 2024-07-22 - 2.1.84 - fix(cli)
|
||||||
|
Fixed transpilation order issue in tsfolders command
|
||||||
|
|
||||||
|
- Corrected the transpilation order so 'ts_shared' is processed before other folders in the 'tsfolders' CLI command.
|
||||||
|
|
||||||
|
## 2024-07-21 - 2.1.83 - fix(cli)
|
||||||
|
Ensure 'ts_shared' folder is compiled first if present
|
||||||
|
|
||||||
|
- Added logic to make sure the 'ts_shared' folder is compiled first when running 'tsfolders' command.
|
||||||
|
|
||||||
|
## 2024-06-24 - 2.1.82 - fix(core)
|
||||||
|
Minor improvements and optimizations in core TypeScript compiler integration.
|
||||||
|
|
||||||
|
- Updated TypeScript dependency to latest version 5.5.2.
|
||||||
|
- Enhanced logging in compiler process.
|
||||||
|
- Improved handling of CLI commands for better flexibility.
|
||||||
|
- Compiled output directories are now more structured.
|
||||||
|
- Refactored internal compiler options merge function.
|
||||||
|
|
||||||
|
## 2024-06-24 - 2.1.81 - fix(dependencies)
|
||||||
|
Update dependencies to latest versions
|
||||||
|
|
||||||
|
- Upgraded @push.rocks/smartcli from ^4.0.10 to ^4.0.11
|
||||||
|
- Upgraded @push.rocks/smartfile from ^11.0.14 to ^11.0.21
|
||||||
|
- Upgraded @push.rocks/smartlog from ^3.0.3 to ^3.0.7
|
||||||
|
- Upgraded @push.rocks/smartpromise from ^4.0.3 to ^4.0.4
|
||||||
|
- Upgraded typescript from 5.4.5 to 5.5.2
|
||||||
|
- Upgraded @git.zone/tsrun from ^1.2.46 to ^1.2.47
|
||||||
|
- Upgraded @types/node from ^20.12.11 to ^20.14.8
|
||||||
|
|
||||||
|
## 2024-05-17 - 2.1.80 - core
|
||||||
|
Fix multiple core issues.
|
||||||
|
|
||||||
|
- Various small fixes and updates to the core functionality.
|
||||||
|
|
||||||
|
## 2024-05-17 - 2.1.76 to 2.1.79 - core
|
||||||
|
Routine core updates and fixes.
|
||||||
|
|
||||||
|
- Several minor enhancements and bug fixes.
|
||||||
|
|
||||||
|
## 2024-05-14 - 2.1.74 to 2.1.75 - core
|
||||||
|
General core maintenance updates.
|
||||||
|
|
||||||
|
- Core updated to fix minor bugs.
|
||||||
|
|
||||||
|
## 2024-05-10 - 2.1.72 to 2.1.73 - core
|
||||||
|
Minor core updates.
|
||||||
|
|
||||||
|
- Improvements and fixes to core components.
|
||||||
|
|
||||||
|
## 2024-01-08 - 2.1.70 to 2.1.71 - core
|
||||||
|
Core functionality enhancements.
|
||||||
|
|
||||||
|
- Small fixes and updates in the core.
|
||||||
|
|
||||||
|
## 2023-08-26 - 2.1.66 to 2.1.69 - core
|
||||||
|
Regular core updates and fixes.
|
||||||
|
|
||||||
|
- Various updates to improve core functionality.
|
||||||
|
|
||||||
|
## 2023-06-03 - 2.1.65 - core
|
||||||
|
Core maintenance update.
|
||||||
|
|
||||||
|
- Fixed issues in core functionality.
|
||||||
|
|
||||||
|
## 2022-08-03 - 2.1.63 to 2.1.64 - core
|
||||||
|
Minor core updates and fixes.
|
||||||
|
|
||||||
|
- Updated core functionality with minor fixes.
|
||||||
|
|
||||||
|
## 2022-05-25 - 2.1.61 to 2.1.62 - core
|
||||||
|
Routine core updates.
|
||||||
|
|
||||||
|
- Fixed minor bugs in the core.
|
||||||
|
|
||||||
|
## 2022-03-24 - 2.1.60 - core
|
||||||
|
Core functionality update.
|
||||||
|
|
||||||
|
- Fixed various minor issues in core.
|
||||||
|
|
||||||
|
## 2022-03-18 - 2.1.57 to 2.1.59 - core
|
||||||
|
Minor core updates and enhancements.
|
||||||
|
|
||||||
|
- Updated core components with small fixes.
|
||||||
|
|
||||||
|
## 2022-03-15 - 2.1.50 to 2.1.56 - core
|
||||||
|
Several core bug fixes.
|
||||||
|
|
||||||
|
- Fixed various minor issues in the core functionality.
|
||||||
|
|
||||||
|
## 2022-03-14 - 2.1.49 - core
|
||||||
|
Core update.
|
||||||
|
|
||||||
|
- Fixed minor bugs in the core.
|
||||||
|
|
||||||
|
## 2022-03-12 - 2.1.43 to 2.1.48 - core
|
||||||
|
General core maintenance updates.
|
||||||
|
|
||||||
|
- Core updated to fix minor bugs and improve functionality.
|
||||||
|
|
||||||
|
## 2022-03-11 - 2.1.33 to 2.1.42 - core
|
||||||
|
Core functionality enhancements and fixes.
|
||||||
|
|
||||||
|
- Multiple updates to improve core functionality and fix bugs.
|
||||||
|
|
||||||
|
## 2022-03-11 - 2.1.29 to 2.1.32 - core
|
||||||
|
Routine core updates.
|
||||||
|
|
||||||
|
- Minor bug fixes and improvements in core functionality.
|
||||||
|
|
||||||
|
## 2022-01-19 - 2.1.28 to 2.1.29 - core
|
||||||
|
Core bug fixes.
|
||||||
|
|
||||||
|
- Updated core to address minor issues.
|
||||||
|
|
||||||
|
## 2021-10-06 - 2.1.27 - core
|
||||||
|
Minor core update.
|
||||||
|
|
||||||
|
- Fixed core bugs.
|
||||||
|
|
||||||
|
## 2021-09-08 - 2.1.26 - core
|
||||||
|
Core update.
|
||||||
|
|
||||||
|
- Fixed minor bugs in the core.
|
||||||
|
|
||||||
|
## 2021-08-17 - 2.1.25 - core
|
||||||
|
Core bug fixes.
|
||||||
|
|
||||||
|
- Small updates to improve core functionality.
|
||||||
|
|
||||||
|
## 2020-08-11 - 2.1.24 - core
|
||||||
|
Routine core update.
|
||||||
|
|
||||||
|
- Fixed minor bugs in the core.
|
||||||
|
|
||||||
|
## 2020-05-14 - 2.1.23 - core
|
||||||
|
General core updates.
|
||||||
|
|
||||||
|
- Fixes to improve core stability.
|
||||||
|
|
||||||
|
## 2020-03-13 - 2.1.20 to 2.1.22 - core
|
||||||
|
Minor core updates.
|
||||||
|
|
||||||
|
- Enhancements and fixes for core functionality.
|
||||||
|
|
||||||
|
## 2020-03-09 - 2.1.19 - core
|
||||||
|
Maintenance core update.
|
||||||
|
|
||||||
|
- Fixes addressing minor issues in core functionality.
|
||||||
|
|
||||||
|
## 2019-08-26 - 2.1.16 to 2.1.17 - core
|
||||||
|
Routine minor core updates.
|
||||||
|
|
||||||
|
- Improvement and fixes within the core functionality.
|
||||||
|
|
||||||
|
## 2019-01-27 - 2.1.6 - custom directory compilation
|
||||||
|
Now picking up TypeScript files correctly.
|
||||||
|
|
||||||
|
- Resolved compilation issues with custom directories.
|
||||||
|
|
||||||
|
## 2018-12-05 - 2.1.0 to 2.1.1 - core
|
||||||
|
Minor core updates.
|
||||||
|
|
||||||
|
- Small enhancements and fixes applied to core functionality.
|
||||||
|
|
||||||
|
## 2018-12-05 - 2.0.22 - cli options
|
||||||
|
Now support --web for web compilations targeting Google Chrome.
|
||||||
|
|
||||||
|
- Added new CLI option for web compilation.
|
||||||
|
|
||||||
|
## 2018-07-25 - 2.0.15 to 2.0.19 - various
|
||||||
|
Multiple fixes across core, dependency, and compiler modules.
|
||||||
|
|
||||||
|
- Packagename fix in core.
|
||||||
|
- Dependency updates.
|
||||||
|
- Compiler options fixed.
|
||||||
|
- Initial core updates.
|
@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
process.env.CLI_CALL = 'true';
|
process.env.CLI_CALL = 'true';
|
||||||
import * as tsrun from '@gitzone/tsrun';
|
import * as tsrun from '@git.zone/tsrun';
|
||||||
tsrun.runPath('./cli.child.js');
|
tsrun.runPath('./cli.child.js');
|
@ -9,9 +9,23 @@
|
|||||||
"githost": "gitlab.com",
|
"githost": "gitlab.com",
|
||||||
"gitscope": "gitzone",
|
"gitscope": "gitzone",
|
||||||
"gitrepo": "tsbuild",
|
"gitrepo": "tsbuild",
|
||||||
"description": "TypeScript nightly to easily make use of latest features",
|
"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": "@gitzone/tsbuild",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
}
|
"keywords": [
|
||||||
|
"TypeScript",
|
||||||
|
"compilation",
|
||||||
|
"nightly features",
|
||||||
|
"CLI tool",
|
||||||
|
"file compilation",
|
||||||
|
"glob patterns",
|
||||||
|
"compiler options",
|
||||||
|
"development",
|
||||||
|
"API"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tsdoc": {
|
||||||
|
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
6522
package-lock.json
generated
6522
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
49
package.json
49
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@gitzone/tsbuild",
|
"name": "@git.zone/tsbuild",
|
||||||
"version": "2.1.64",
|
"version": "2.3.2",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "TypeScript nightly to easily make use of latest features",
|
"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",
|
||||||
"typings": "dist_ts/index.d.ts",
|
"typings": "dist_ts/index.d.ts",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@ -11,36 +11,45 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "tsrun test/test.ts",
|
"test": "tsrun test/test.ts",
|
||||||
"testCustom": "node cli.ts.js custom ts_web",
|
"build": "node cli.ts.js --web --allowimplicitany",
|
||||||
"build": "node cli.ts.js --web --allowimplicitany"
|
"buildDocs": "tsdoc"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+ssh://git@gitlab.com/pushrocks/tsn.git"
|
"url": "https://code.foss.global/git.zone/tsbuild.git"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"TypeScript"
|
"TypeScript",
|
||||||
|
"compilation",
|
||||||
|
"nightly features",
|
||||||
|
"CLI tool",
|
||||||
|
"file compilation",
|
||||||
|
"glob patterns",
|
||||||
|
"compiler options",
|
||||||
|
"development",
|
||||||
|
"API"
|
||||||
],
|
],
|
||||||
"author": "Lossless GmbH",
|
"author": "Lossless GmbH",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitlab.com/pushrocks/tsn/issues"
|
"url": "https://code.foss.global/git.zone/tsbuild/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/tsn#README",
|
"homepage": "https://code.foss.global/git.zone/tsbuild#README",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@pushrocks/early": "^4.0.3",
|
"@git.zone/tspublish": "^1.9.1",
|
||||||
"@pushrocks/smartcli": "^4.0.3",
|
"@push.rocks/early": "^4.0.4",
|
||||||
"@pushrocks/smartdelay": "^2.0.13",
|
"@push.rocks/smartcli": "^4.0.11",
|
||||||
"@pushrocks/smartfile": "^10.0.4",
|
"@push.rocks/smartdelay": "^3.0.5",
|
||||||
"@pushrocks/smartlog": "^3.0.1",
|
"@push.rocks/smartfile": "^11.1.5",
|
||||||
"@pushrocks/smartpath": "^5.0.5",
|
"@push.rocks/smartlog": "^3.0.7",
|
||||||
"@pushrocks/smartpromise": "^3.1.7",
|
"@push.rocks/smartpath": "^5.0.18",
|
||||||
"typescript": "^4.7.4"
|
"@push.rocks/smartpromise": "^4.2.2",
|
||||||
|
"typescript": "5.7.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsrun": "^1.2.37",
|
"@git.zone/tsrun": "^1.2.47",
|
||||||
"@pushrocks/tapbundle": "^5.0.4",
|
"@push.rocks/tapbundle": "^5.5.6",
|
||||||
"@types/node": "^18.6.3"
|
"@types/node": "^22.12.0"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"ts/**/*",
|
"ts/**/*",
|
||||||
|
6866
pnpm-lock.yaml
generated
Normal file
6866
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
0
readme.hints.md
Normal file
0
readme.hints.md
Normal file
280
readme.md
280
readme.md
@ -1,86 +1,216 @@
|
|||||||
# @gitzone/tsbuild
|
# @git.zone/tsbuild
|
||||||
TypeScript nightly to easily make use of latest features
|
|
||||||
|
|
||||||
## Availabililty and Links
|
A flexible TypeScript compiler that leverages the latest TypeScript features to streamline your build process.
|
||||||
* [npmjs.org (npm package)](https://www.npmjs.com/package/@gitzone/tsbuild)
|
|
||||||
* [gitlab.com (source)](https://gitlab.com/gitzone/tsbuild)
|
|
||||||
* [github.com (source mirror)](https://github.com/gitzone/tsbuild)
|
|
||||||
* [docs (typedoc)](https://gitzone.gitlab.io/tsbuild/)
|
|
||||||
|
|
||||||
## Status for master
|
## Install
|
||||||
|
|
||||||
Status Category | Status Badge
|
Add `@git.zone/tsbuild` to your project using npm or yarn:
|
||||||
-- | --
|
|
||||||
GitLab Pipelines | [](https://lossless.cloud)
|
|
||||||
GitLab Pipline Test Coverage | [](https://lossless.cloud)
|
|
||||||
npm | [](https://lossless.cloud)
|
|
||||||
Snyk | [](https://lossless.cloud)
|
|
||||||
TypeScript Support | [](https://lossless.cloud)
|
|
||||||
node Support | [](https://nodejs.org/dist/latest-v10.x/docs/api/)
|
|
||||||
Code Style | [](https://lossless.cloud)
|
|
||||||
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
|
||||||
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
|
||||||
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
|
||||||
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
|
||||||
|
|
||||||
## Usage
|
```bash
|
||||||
|
npm install @git.zone/tsbuild
|
||||||
Tsn uses the **next** tagged npm version of typescript
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import * as tsn from 'tsn';
|
|
||||||
|
|
||||||
let myGlobStringObject = {
|
|
||||||
'./myTsFolder/**/*.ts': './myDestinationFolder/',
|
|
||||||
'./someOtherTsFolder/**/*.ts': './myOtherDestinationFolder/',
|
|
||||||
};
|
|
||||||
|
|
||||||
let tsOptions = {
|
|
||||||
target: tsn.ScriptTarget.ES2015,
|
|
||||||
module: tsn.ModuleKind.CommonJS,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
note: since this only works in code, here are the target numbers
|
|
||||||
enum ScriptTarget {
|
|
||||||
ES3 = 0,
|
|
||||||
ES5 = 1,
|
|
||||||
ES2015 = 2,
|
|
||||||
ES2016 = 3,
|
|
||||||
ES2017 = 4,
|
|
||||||
ESNext = 5,
|
|
||||||
Latest = 5,
|
|
||||||
}
|
|
||||||
|
|
||||||
and here are the module kinds
|
|
||||||
enum ModuleKind {
|
|
||||||
None = 0,
|
|
||||||
CommonJS = 1,
|
|
||||||
AMD = 2,
|
|
||||||
UMD = 3,
|
|
||||||
System = 4,
|
|
||||||
ES2015 = 5,
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
let myCwd = process.cwd();
|
|
||||||
|
|
||||||
tsn.compileGlobStringObject(
|
|
||||||
myGlobStringObject, // the glob string object describing from where to compile what to where
|
|
||||||
tsOptions, // the options for TypeScript
|
|
||||||
myCwd // a custom cwd, optional, defaults to process.cwd()
|
|
||||||
);
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[](https://push.rocks)
|
or
|
||||||
|
|
||||||
## Contribution
|
```bash
|
||||||
|
yarn add @git.zone/tsbuild
|
||||||
|
```
|
||||||
|
|
||||||
We are always happy for code contributions. If you are not the code contributing type that is ok. Still, maintaining Open Source repositories takes considerable time and thought. If you like the quality of what we do and our modules are useful to you we would appreciate a little monthly contribution: You can [contribute one time](https://lossless.link/contribute-onetime) or [contribute monthly](https://lossless.link/contribute). :)
|
## Key Features
|
||||||
|
|
||||||
For further information read the linked docs at the top of this readme.
|
- Utilize the latest TypeScript features
|
||||||
|
- Flexible API for customized compilation processes
|
||||||
|
- Intuitive CLI for common build tasks
|
||||||
|
- Support for glob patterns to easily target files
|
||||||
|
- Ordered compilation to respect module dependencies
|
||||||
|
|
||||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
## API Reference
|
||||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
|
||||||
|
|
||||||
[](https://maintainedby.lossless.com)
|
### Core Compilation Functions
|
||||||
|
|
||||||
|
#### `compileFileArray(fileStringArrayArg: string[], compilerOptionsArg?: CompilerOptions, argvArg?: any): Promise<any[]>`
|
||||||
|
|
||||||
|
Compiles an array of TypeScript files with customizable compiler options.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { compileFileArray } from '@git.zone/tsbuild';
|
||||||
|
|
||||||
|
const files = [
|
||||||
|
'./src/file1.ts',
|
||||||
|
'./src/file2.ts',
|
||||||
|
];
|
||||||
|
const options = {
|
||||||
|
target: "ES2020",
|
||||||
|
module: "CommonJS"
|
||||||
|
};
|
||||||
|
|
||||||
|
compileFileArray(files, options)
|
||||||
|
.then(compiledFiles => {
|
||||||
|
console.log('Compiled Files:', compiledFiles);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Compilation Error:', error);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `compileGlobStringObject(globStringObjectArg: Record<string, string>, tsOptionsArg?: CompilerOptions, cwdArg?: string, argvArg?: any): Promise<any[]>`
|
||||||
|
|
||||||
|
Compiles files matching glob patterns to specified output directories.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { compileGlobStringObject } from '@git.zone/tsbuild';
|
||||||
|
|
||||||
|
const globPattern = {
|
||||||
|
'./src/**/*.ts': './dist',
|
||||||
|
};
|
||||||
|
const compilerOptions = {
|
||||||
|
target: "ESNext",
|
||||||
|
module: "ESNext",
|
||||||
|
};
|
||||||
|
|
||||||
|
compileGlobStringObject(globPattern, compilerOptions)
|
||||||
|
.then(compiledFiles => {
|
||||||
|
console.log('Compilation complete:', compiledFiles);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error during compilation:', error);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Command Line Interface
|
||||||
|
|
||||||
|
The CLI provides convenient commands for common compilation tasks.
|
||||||
|
|
||||||
|
### Standard Command
|
||||||
|
|
||||||
|
Compiles all TypeScript files in the `ts/` directory to the `dist_ts` directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx tsbuild
|
||||||
|
```
|
||||||
|
|
||||||
|
### Custom Command
|
||||||
|
|
||||||
|
Compile specific directories to corresponding `dist_` directories:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx tsbuild custom <Dir1> <Dir2> ...
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: `npx tsbuild custom src utils` compiles:
|
||||||
|
- `./src/**/*.ts` → `./dist_src`
|
||||||
|
- `./utils/**/*.ts` → `./dist_utils`
|
||||||
|
|
||||||
|
### TSFolders Command
|
||||||
|
|
||||||
|
Compiles TypeScript folders in a specific order based on dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx tsbuild tsfolders
|
||||||
|
```
|
||||||
|
|
||||||
|
This command:
|
||||||
|
1. Identifies all folders starting with `ts` in the current directory
|
||||||
|
2. Prioritizes `ts_interfaces` and `ts_shared` to be compiled first
|
||||||
|
3. Orders other folders based on the `order` property in their `tspublish.json` files (if available)
|
||||||
|
4. Compiles each folder to its corresponding `dist_` folder
|
||||||
|
|
||||||
|
Example compilation order output:
|
||||||
|
```
|
||||||
|
compiling in this order:
|
||||||
|
[ 'ts_interfaces', 'ts_shared', 'ts_core', 'ts_utils', 'ts_modules' ]
|
||||||
|
```
|
||||||
|
|
||||||
|
### EmitCheck Command
|
||||||
|
|
||||||
|
Checks if TypeScript files can be emitted without actually emitting them:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx tsbuild emitcheck <file_or_glob_pattern> [additional_patterns ...]
|
||||||
|
```
|
||||||
|
|
||||||
|
This command:
|
||||||
|
1. Performs type checking on the specified TypeScript file(s)
|
||||||
|
2. Supports both direct file paths and glob patterns
|
||||||
|
3. Reports any errors that would prevent successful compilation
|
||||||
|
4. Exits with code 0 if all files can be emitted, or 1 if any cannot
|
||||||
|
5. Doesn't produce any output files
|
||||||
|
|
||||||
|
Example usage with specific files:
|
||||||
|
```bash
|
||||||
|
npx tsbuild emitcheck src/main.ts src/utils.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
Example usage with glob patterns:
|
||||||
|
```bash
|
||||||
|
npx tsbuild emitcheck "src/**/*.ts" "test/**/*.ts"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compiler Options
|
||||||
|
|
||||||
|
Additional flags can be passed to any command to modify the compilation behavior:
|
||||||
|
|
||||||
|
- `--skiplibcheck`: Skip type checking of declaration files (shows warning)
|
||||||
|
- `--allowimplicitany`: Allow variables to be implicitly typed as `any`
|
||||||
|
- `--commonjs`: Use CommonJS module format instead of ESNext
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```bash
|
||||||
|
npx tsbuild --skiplibcheck --allowimplicitany
|
||||||
|
```
|
||||||
|
|
||||||
|
## Default Compiler Options
|
||||||
|
|
||||||
|
By default, `@git.zone/tsbuild` uses the following compiler options:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
{
|
||||||
|
declaration: true,
|
||||||
|
emitDecoratorMetadata: true,
|
||||||
|
experimentalDecorators: true,
|
||||||
|
inlineSourceMap: true,
|
||||||
|
noEmitOnError: true,
|
||||||
|
outDir: 'dist_ts/',
|
||||||
|
module: ModuleKind.NodeNext,
|
||||||
|
target: ScriptTarget.ESNext,
|
||||||
|
moduleResolution: ModuleResolutionKind.NodeNext,
|
||||||
|
lib: ['lib.dom.d.ts', 'lib.es2022.d.ts'],
|
||||||
|
noImplicitAny: true,
|
||||||
|
esModuleInterop: true,
|
||||||
|
useDefineForClassFields: false,
|
||||||
|
verbatimModuleSyntax: true,
|
||||||
|
baseUrl: './',
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
These options can be overridden by providing a custom `CompilerOptions` object.
|
||||||
|
|
||||||
|
## Path Resolution
|
||||||
|
|
||||||
|
The package automatically detects and applies path mappings from your `tsconfig.json`. When it finds path mappings, it adjusts them to work with the compiled output by replacing `./ts_` with `./dist_ts_` in path aliases.
|
||||||
|
|
||||||
|
## Notes and Best Practices
|
||||||
|
|
||||||
|
- Each glob pattern compilation runs in its own pass, which may cause duplicate error messages if shared files are included in multiple patterns
|
||||||
|
- Use the `--skiplibcheck` option cautiously as it will pause for 5 seconds with a warning before continuing
|
||||||
|
- If you need different output configurations for different file sets, use multiple calls to `compileGlobStringObject`
|
||||||
|
|
||||||
|
|
||||||
|
## License and Legal Information
|
||||||
|
|
||||||
|
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
|
||||||
|
|
||||||
|
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
### Trademarks
|
||||||
|
|
||||||
|
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.
|
||||||
|
|
||||||
|
### Company Information
|
||||||
|
|
||||||
|
Task Venture Capital GmbH
|
||||||
|
Registered at District court Bremen HRB 35230 HB, Germany
|
||||||
|
|
||||||
|
For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
|
||||||
|
|
||||||
|
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
|
@ -1,6 +1,6 @@
|
|||||||
console.log('test');
|
console.log('test');
|
||||||
console.log('test2');
|
console.log('test2');
|
||||||
import * as early from '@pushrocks/early';
|
import * as early from '@push.rocks/early';
|
||||||
early.start();
|
early.start();
|
||||||
early.stop();
|
early.stop();
|
||||||
import { anExportedString } from './tocompile2.js';
|
import { anExportedString } from './tocompile2.js';
|
||||||
@ -14,4 +14,4 @@ class test2 {
|
|||||||
const run = async () => {
|
const run = async () => {
|
||||||
return 'hi';
|
return 'hi';
|
||||||
};
|
};
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdG9jb21waWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVyQixPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUViLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU5QixNQUFNLEtBQUs7SUFFVDtRQURBLFNBQUksR0FBYSxFQUFFLENBQUM7UUFFbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQXFCLEVBQUU7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMifQ==
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdG9jb21waWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVyQixPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNkLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUViLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU5QixNQUFNLEtBQUs7SUFFVDtRQURBLFNBQUksR0FBYSxFQUFFLENBQUM7UUFFbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLElBQXFCLEVBQUU7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMifQ==
|
@ -1,7 +1,7 @@
|
|||||||
console.log('test');
|
console.log('test');
|
||||||
console.log('test2');
|
console.log('test2');
|
||||||
|
|
||||||
import * as early from '@pushrocks/early';
|
import * as early from '@push.rocks/early';
|
||||||
|
|
||||||
early.start();
|
early.start();
|
||||||
early.stop();
|
early.stop();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { tap, expect, expectAsync } from '@pushrocks/tapbundle';
|
import { tap, expect, expectAsync } from '@push.rocks/tapbundle';
|
||||||
|
|
||||||
import * as tsbuild from '../ts/index.js';
|
import * as tsbuild from '../ts/index.js';
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
* autocreated commitinfo by @pushrocks/commitinfo
|
* autocreated commitinfo by @push.rocks/commitinfo
|
||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@gitzone/tsbuild',
|
name: '@git.zone/tsbuild',
|
||||||
version: '2.1.64',
|
version: '2.3.2',
|
||||||
description: 'TypeScript nightly to easily make use of latest features'
|
description: 'A tool for compiling TypeScript files using the latest nightly features, offering flexible APIs and a CLI for streamlined development.'
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import * as early from '@pushrocks/early';
|
import * as early from '@push.rocks/early';
|
||||||
early.start('tsbuild');
|
early.start('tsbuild');
|
||||||
export * from './tsbuild.exports.js';
|
export * from './tsbuild.exports.js';
|
||||||
export * from './tsbuild.cli.js';
|
export * from './tsbuild.cli.js';
|
||||||
|
4
ts/paths.ts
Normal file
4
ts/paths.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import * as plugins from './plugins.js';
|
||||||
|
|
||||||
|
export const cwd = process.cwd();
|
||||||
|
export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
|
29
ts/plugins.ts
Normal file
29
ts/plugins.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// node native
|
||||||
|
import * as path from 'path';
|
||||||
|
|
||||||
|
export {
|
||||||
|
path
|
||||||
|
}
|
||||||
|
|
||||||
|
// @git.zone scope
|
||||||
|
import * as tspublish from '@git.zone/tspublish';
|
||||||
|
|
||||||
|
export {
|
||||||
|
tspublish
|
||||||
|
}
|
||||||
|
|
||||||
|
// @push.rocks scope
|
||||||
|
import * as smartcli from '@push.rocks/smartcli';
|
||||||
|
import * as smartdelay from '@push.rocks/smartdelay';
|
||||||
|
import * as smartfile from '@push.rocks/smartfile';
|
||||||
|
import * as smartpath from '@push.rocks/smartpath';
|
||||||
|
import * as smartpromise from '@push.rocks/smartpromise';
|
||||||
|
|
||||||
|
export { smartcli, smartdelay, smartfile, smartpath, smartpromise };
|
||||||
|
|
||||||
|
// third party scope
|
||||||
|
import typescript from 'typescript';
|
||||||
|
|
||||||
|
export {
|
||||||
|
typescript
|
||||||
|
}
|
@ -1,109 +0,0 @@
|
|||||||
// import all the stuff we need
|
|
||||||
import * as plugins from './tsbuild.plugins.js';
|
|
||||||
import { CompilerOptions, ScriptTarget, ModuleKind } from './tsbuild.exports.js';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the default typescript compilerOptions
|
|
||||||
*/
|
|
||||||
export const compilerOptionsDefault: CompilerOptions = {
|
|
||||||
declaration: true,
|
|
||||||
emitDecoratorMetadata: true,
|
|
||||||
experimentalDecorators: true,
|
|
||||||
inlineSourceMap: true,
|
|
||||||
noEmitOnError: true,
|
|
||||||
outDir: 'dist_ts/',
|
|
||||||
module: plugins.typescript.ModuleKind.ES2022,
|
|
||||||
target: plugins.typescript.ScriptTarget.ES2022,
|
|
||||||
moduleResolution: plugins.typescript.ModuleResolutionKind.NodeNext,
|
|
||||||
lib: ['lib.dom.d.ts'],
|
|
||||||
noImplicitAny: true,
|
|
||||||
esModuleInterop: true,
|
|
||||||
useDefineForClassFields: false,
|
|
||||||
importsNotUsedAsValues: plugins.typescript.ImportsNotUsedAsValues.Preserve,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* merges compilerOptions with the default compiler options
|
|
||||||
*/
|
|
||||||
export const mergeCompilerOptions = (
|
|
||||||
customTsOptions: CompilerOptions,
|
|
||||||
argvArg?: any
|
|
||||||
): CompilerOptions => {
|
|
||||||
// create merged options
|
|
||||||
const mergedOptions: CompilerOptions = {
|
|
||||||
...compilerOptionsDefault,
|
|
||||||
...customTsOptions,
|
|
||||||
...(argvArg && argvArg.skiplibcheck
|
|
||||||
? {
|
|
||||||
skipLibCheck: true,
|
|
||||||
}
|
|
||||||
: {}),
|
|
||||||
...(argvArg && argvArg.allowimplicitany
|
|
||||||
? {
|
|
||||||
noImplicitAny: false,
|
|
||||||
}
|
|
||||||
: {}),
|
|
||||||
...(argvArg && argvArg.commonjs
|
|
||||||
? {
|
|
||||||
module: plugins.typescript.ModuleKind.CommonJS,
|
|
||||||
moduleResolution: plugins.typescript.ModuleResolutionKind.NodeJs,
|
|
||||||
}
|
|
||||||
: {}),
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log(mergedOptions);
|
|
||||||
|
|
||||||
return mergedOptions;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the internal main compiler function that compiles the files
|
|
||||||
*/
|
|
||||||
export const compiler = async (
|
|
||||||
fileNames: string[],
|
|
||||||
options: plugins.typescript.CompilerOptions,
|
|
||||||
argvArg?: any
|
|
||||||
): Promise<any[]> => {
|
|
||||||
if (options.skipLibCheck) {
|
|
||||||
console.log('? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?');
|
|
||||||
console.log('You are skipping libcheck... Is that really wanted?');
|
|
||||||
console.log('continuing in 5 seconds...')
|
|
||||||
console.log('? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?');
|
|
||||||
await plugins.smartdelay.delayFor(5000);
|
|
||||||
}
|
|
||||||
console.log(`Compiling ${fileNames.length} files...`);
|
|
||||||
const done = plugins.smartpromise.defer<any[]>();
|
|
||||||
const program = plugins.typescript.createProgram(fileNames, options);
|
|
||||||
const emitResult = program.emit();
|
|
||||||
|
|
||||||
// implement check only
|
|
||||||
/*let emitResult = program.emit(undefined,(args) => {
|
|
||||||
console.log(args)
|
|
||||||
});*/
|
|
||||||
|
|
||||||
const allDiagnostics = plugins.typescript
|
|
||||||
.getPreEmitDiagnostics(program)
|
|
||||||
.concat(emitResult.diagnostics);
|
|
||||||
allDiagnostics.forEach((diagnostic) => {
|
|
||||||
if (diagnostic.file) {
|
|
||||||
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start!);
|
|
||||||
const message = plugins.typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
|
||||||
console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
|
|
||||||
} else {
|
|
||||||
console.log(
|
|
||||||
`${plugins.typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n')}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
|
||||||
if (exitCode === 0) {
|
|
||||||
console.log('TypeScript emit succeeded!');
|
|
||||||
done.resolve(emitResult.emittedFiles);
|
|
||||||
} else {
|
|
||||||
console.error('TypeScript emit failed. Please investigate!');
|
|
||||||
process.exit(exitCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return done.promise;
|
|
||||||
};
|
|
271
ts/tsbuild.classes.tsbuild.ts
Normal file
271
ts/tsbuild.classes.tsbuild.ts
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
// import all the stuff we need
|
||||||
|
import * as plugins from './plugins.js';
|
||||||
|
import * as paths from './paths.js';
|
||||||
|
import type { CompilerOptions, ScriptTarget, ModuleKind } from './tsbuild.exports.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default compiler options for TypeScript compilation
|
||||||
|
*/
|
||||||
|
export const compilerOptionsDefault: CompilerOptions = {
|
||||||
|
declaration: true,
|
||||||
|
emitDecoratorMetadata: true,
|
||||||
|
experimentalDecorators: true,
|
||||||
|
inlineSourceMap: true,
|
||||||
|
noEmitOnError: true,
|
||||||
|
outDir: 'dist_ts/',
|
||||||
|
module: plugins.typescript.ModuleKind.NodeNext,
|
||||||
|
target: plugins.typescript.ScriptTarget.ESNext,
|
||||||
|
moduleResolution: plugins.typescript.ModuleResolutionKind.NodeNext,
|
||||||
|
lib: ['lib.dom.d.ts', 'lib.es2022.d.ts'],
|
||||||
|
noImplicitAny: true,
|
||||||
|
esModuleInterop: true,
|
||||||
|
useDefineForClassFields: false,
|
||||||
|
verbatimModuleSyntax: true,
|
||||||
|
baseUrl: './',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TsBuild class for handling TypeScript compilation
|
||||||
|
*/
|
||||||
|
export class TsBuild {
|
||||||
|
private fileNames: string[] = [];
|
||||||
|
private options: plugins.typescript.CompilerOptions;
|
||||||
|
private argvArg?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new TsBuild instance
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
fileNames: string[] = [],
|
||||||
|
customOptions: CompilerOptions = {},
|
||||||
|
argvArg?: any
|
||||||
|
) {
|
||||||
|
this.fileNames = fileNames;
|
||||||
|
this.argvArg = argvArg;
|
||||||
|
this.options = this.mergeCompilerOptions(customOptions, argvArg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to read and process tsconfig.json
|
||||||
|
*/
|
||||||
|
private getTsConfigOptions(): CompilerOptions {
|
||||||
|
console.log(`looking at tsconfig.json at ${paths.cwd}`);
|
||||||
|
const tsconfig = plugins.smartfile.fs.toObjectSync(plugins.path.join(paths.cwd, 'tsconfig.json'));
|
||||||
|
const returnObject: CompilerOptions = {};
|
||||||
|
|
||||||
|
if (!tsconfig || !tsconfig.compilerOptions) {
|
||||||
|
return returnObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tsconfig.compilerOptions.baseUrl) {
|
||||||
|
console.log('baseUrl found in tsconfig.json');
|
||||||
|
returnObject.baseUrl = tsconfig.compilerOptions.baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tsconfig.compilerOptions.paths) {
|
||||||
|
console.log('paths found in tsconfig.json');
|
||||||
|
returnObject.paths = tsconfig.compilerOptions.paths;
|
||||||
|
for (const path of Object.keys(tsconfig.compilerOptions.paths)) {
|
||||||
|
returnObject.paths[path][0] = returnObject.paths[path][0].replace('./ts_', './dist_ts_');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process command line arguments and return applicable compiler options
|
||||||
|
*/
|
||||||
|
private getCommandLineOptions(argvArg?: any): CompilerOptions {
|
||||||
|
if (!argvArg) return {};
|
||||||
|
|
||||||
|
const options: CompilerOptions = {};
|
||||||
|
|
||||||
|
if (argvArg.skiplibcheck) {
|
||||||
|
options.skipLibCheck = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argvArg.allowimplicitany) {
|
||||||
|
options.noImplicitAny = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argvArg.commonjs) {
|
||||||
|
options.module = plugins.typescript.ModuleKind.CommonJS;
|
||||||
|
options.moduleResolution = plugins.typescript.ModuleResolutionKind.NodeJs;
|
||||||
|
}
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges compilerOptions with the default compiler options
|
||||||
|
*/
|
||||||
|
public mergeCompilerOptions(
|
||||||
|
customTsOptions: CompilerOptions = {},
|
||||||
|
argvArg?: any
|
||||||
|
): CompilerOptions {
|
||||||
|
// create merged options
|
||||||
|
const mergedOptions: CompilerOptions = {
|
||||||
|
...compilerOptionsDefault,
|
||||||
|
...customTsOptions,
|
||||||
|
...this.getCommandLineOptions(argvArg),
|
||||||
|
...this.getTsConfigOptions(),
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(mergedOptions);
|
||||||
|
return mergedOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to handle and log TypeScript diagnostics
|
||||||
|
*/
|
||||||
|
private handleDiagnostics(diagnostics: readonly plugins.typescript.Diagnostic[]): boolean {
|
||||||
|
let hasErrors = false;
|
||||||
|
|
||||||
|
diagnostics.forEach((diagnostic) => {
|
||||||
|
hasErrors = true;
|
||||||
|
if (diagnostic.file) {
|
||||||
|
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start!);
|
||||||
|
const message = plugins.typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
|
||||||
|
console.log(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`);
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
`${plugins.typescript.flattenDiagnosticMessageText(diagnostic.messageText, '\n')}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return hasErrors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a TypeScript program from file names and options
|
||||||
|
*/
|
||||||
|
private createProgram(
|
||||||
|
options: plugins.typescript.CompilerOptions = this.options
|
||||||
|
): plugins.typescript.Program {
|
||||||
|
return plugins.typescript.createProgram(this.fileNames, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set file names to be compiled
|
||||||
|
*/
|
||||||
|
public setFileNames(fileNames: string[]): void {
|
||||||
|
this.fileNames = fileNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set compiler options
|
||||||
|
*/
|
||||||
|
public setOptions(options: CompilerOptions): void {
|
||||||
|
this.options = { ...this.options, ...options };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main compiler function that compiles the files
|
||||||
|
*/
|
||||||
|
public async compile(): Promise<any[]> {
|
||||||
|
if (this.options.skipLibCheck) {
|
||||||
|
console.log('? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?');
|
||||||
|
console.log('You are skipping libcheck... Is that really wanted?');
|
||||||
|
console.log('continuing in 5 seconds...');
|
||||||
|
console.log('? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?');
|
||||||
|
await plugins.smartdelay.delayFor(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Compiling ${this.fileNames.length} files...`);
|
||||||
|
const done = plugins.smartpromise.defer<any[]>();
|
||||||
|
const program = this.createProgram();
|
||||||
|
|
||||||
|
// Check for pre-emit diagnostics first
|
||||||
|
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
||||||
|
const hasPreEmitErrors = this.handleDiagnostics(preEmitDiagnostics);
|
||||||
|
|
||||||
|
// Only continue to emit phase if no pre-emit errors
|
||||||
|
if (hasPreEmitErrors) {
|
||||||
|
console.error('TypeScript pre-emit checks failed. Please fix the issues above.');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no pre-emit errors, proceed with emit
|
||||||
|
const emitResult = program.emit();
|
||||||
|
const hasEmitErrors = this.handleDiagnostics(emitResult.diagnostics);
|
||||||
|
|
||||||
|
const exitCode = emitResult.emitSkipped ? 1 : 0;
|
||||||
|
if (exitCode === 0) {
|
||||||
|
console.log('TypeScript emit succeeded!');
|
||||||
|
done.resolve(emitResult.emittedFiles);
|
||||||
|
} else {
|
||||||
|
console.error('TypeScript emit failed. Please investigate!');
|
||||||
|
process.exit(exitCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return done.promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to check if files can be emitted without actually emitting them
|
||||||
|
*/
|
||||||
|
public async checkEmit(): Promise<boolean> {
|
||||||
|
console.log(`Checking if ${this.fileNames.length} files can be emitted...`);
|
||||||
|
|
||||||
|
// Create a program with noEmit option
|
||||||
|
const program = this.createProgram({
|
||||||
|
...this.options,
|
||||||
|
noEmit: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check for pre-emit diagnostics
|
||||||
|
const preEmitDiagnostics = plugins.typescript.getPreEmitDiagnostics(program);
|
||||||
|
const hasPreEmitErrors = this.handleDiagnostics(preEmitDiagnostics);
|
||||||
|
|
||||||
|
// Run the emit phase but with noEmit: true to check for emit errors without producing files
|
||||||
|
const emitResult = program.emit(undefined, undefined, undefined, true);
|
||||||
|
const hasEmitErrors = this.handleDiagnostics(emitResult.diagnostics);
|
||||||
|
|
||||||
|
const success = !hasPreEmitErrors && !hasEmitErrors && !emitResult.emitSkipped;
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
console.log('TypeScript emit check passed! File can be emitted successfully.');
|
||||||
|
} else {
|
||||||
|
console.error('TypeScript emit check failed. Please fix the issues above.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges compilerOptions with the default compiler options (backward compatibility)
|
||||||
|
*/
|
||||||
|
export const mergeCompilerOptions = (
|
||||||
|
customTsOptions: CompilerOptions,
|
||||||
|
argvArg?: any
|
||||||
|
): CompilerOptions => {
|
||||||
|
const tsBuild = new TsBuild();
|
||||||
|
return tsBuild.mergeCompilerOptions(customTsOptions, argvArg);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The internal main compiler function that compiles the files (backward compatibility)
|
||||||
|
*/
|
||||||
|
export const compiler = async (
|
||||||
|
fileNames: string[],
|
||||||
|
options: plugins.typescript.CompilerOptions,
|
||||||
|
argvArg?: any
|
||||||
|
): Promise<any[]> => {
|
||||||
|
const tsBuild = new TsBuild(fileNames, options, argvArg);
|
||||||
|
return tsBuild.compile();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to check if a TypeScript file can be emitted without actually emitting it (backward compatibility)
|
||||||
|
*/
|
||||||
|
export const emitCheck = async (
|
||||||
|
fileNames: string[],
|
||||||
|
options: plugins.typescript.CompilerOptions = {},
|
||||||
|
argvArg?: any
|
||||||
|
): Promise<boolean> => {
|
||||||
|
const tsBuild = new TsBuild(fileNames, options, argvArg);
|
||||||
|
return tsBuild.checkEmit();
|
||||||
|
};
|
@ -1,4 +1,5 @@
|
|||||||
import * as plugins from './tsbuild.plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
|
import * as paths from './paths.js';
|
||||||
import * as tsbuild from './tsbuild.exports.js';
|
import * as tsbuild from './tsbuild.exports.js';
|
||||||
|
|
||||||
export const runCli = async () => {
|
export const runCli = async () => {
|
||||||
@ -7,7 +8,7 @@ export const runCli = async () => {
|
|||||||
/**
|
/**
|
||||||
* the standard task compiles anything in ts/ directory to dist directory
|
* the standard task compiles anything in ts/ directory to dist directory
|
||||||
*/
|
*/
|
||||||
tsbuildCli.standardTask().subscribe(async (argvArg) => {
|
tsbuildCli.standardCommand().subscribe(async (argvArg) => {
|
||||||
tsbuild.compileGlobStringObject(
|
tsbuild.compileGlobStringObject(
|
||||||
{
|
{
|
||||||
'./ts/**/*.ts': './dist_ts',
|
'./ts/**/*.ts': './dist_ts',
|
||||||
@ -23,7 +24,7 @@ export const runCli = async () => {
|
|||||||
*/
|
*/
|
||||||
tsbuildCli.addCommand('custom').subscribe(async (argvArg) => {
|
tsbuildCli.addCommand('custom').subscribe(async (argvArg) => {
|
||||||
const listedDirectories = argvArg._;
|
const listedDirectories = argvArg._;
|
||||||
listedDirectories.shift();
|
listedDirectories.shift(); // removes the first element that is "custom"
|
||||||
const compilationCommandObject: { [key: string]: string } = {};
|
const compilationCommandObject: { [key: string]: string } = {};
|
||||||
for (const directory of listedDirectories) {
|
for (const directory of listedDirectories) {
|
||||||
compilationCommandObject[`./${directory}/**/*.ts`] = `./dist_${directory}`;
|
compilationCommandObject[`./${directory}/**/*.ts`] = `./dist_${directory}`;
|
||||||
@ -31,15 +32,141 @@ export const runCli = async () => {
|
|||||||
await tsbuild.compileGlobStringObject(compilationCommandObject, {}, process.cwd(), argvArg);
|
await tsbuild.compileGlobStringObject(compilationCommandObject, {}, process.cwd(), argvArg);
|
||||||
});
|
});
|
||||||
|
|
||||||
tsbuildCli.addCommand('element').subscribe(async (argvArg) => {
|
/**
|
||||||
await tsbuild.compileGlobStringObject(
|
* the emitcheck command checks if a TypeScript file can be emitted without actually emitting it
|
||||||
{
|
*/
|
||||||
'./ts_web/**/*.ts': 'dist_ts_web',
|
tsbuildCli.addCommand('emitcheck').subscribe(async (argvArg) => {
|
||||||
},
|
const patterns = argvArg._.slice(1); // Remove the first element which is 'emitcheck'
|
||||||
{},
|
|
||||||
process.cwd(),
|
if (patterns.length === 0) {
|
||||||
{ web: true, ...argvArg }
|
console.error('Error: Please provide at least one TypeScript file path or glob pattern');
|
||||||
);
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const cwd = process.cwd();
|
||||||
|
let allFiles: string[] = [];
|
||||||
|
|
||||||
|
// Process each pattern - could be a direct file path or a glob pattern
|
||||||
|
for (const pattern of patterns) {
|
||||||
|
// Check if the pattern looks like a glob pattern
|
||||||
|
if (pattern.includes('*') || pattern.includes('{') || pattern.includes('?')) {
|
||||||
|
// Handle as glob pattern
|
||||||
|
console.log(`Processing glob pattern: ${pattern}`);
|
||||||
|
try {
|
||||||
|
const matchedFiles = await plugins.smartfile.fs.listFileTree(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) {
|
||||||
|
console.warn(`Warning: No files matched the pattern '${pattern}'`);
|
||||||
|
} else {
|
||||||
|
console.log(`Found ${stringMatchedFiles.length} files matching pattern '${pattern}'`);
|
||||||
|
|
||||||
|
// Transform to absolute paths
|
||||||
|
const absoluteMatchedFiles = plugins.smartpath.transform.toAbsolute(
|
||||||
|
stringMatchedFiles,
|
||||||
|
cwd
|
||||||
|
) as string[];
|
||||||
|
|
||||||
|
// Add to the list of all files to check
|
||||||
|
allFiles = allFiles.concat(absoluteMatchedFiles);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Error processing glob pattern '${pattern}': ${err}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Handle as direct file path
|
||||||
|
const filePath = plugins.path.isAbsolute(pattern)
|
||||||
|
? pattern
|
||||||
|
: plugins.path.join(cwd, pattern);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await plugins.smartfile.fs.fileExists(filePath);
|
||||||
|
allFiles.push(filePath);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Error: File not found: ${filePath}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter to only TypeScript files
|
||||||
|
allFiles = allFiles.filter(file => file.endsWith('.ts') || file.endsWith('.tsx'));
|
||||||
|
|
||||||
|
if (allFiles.length === 0) {
|
||||||
|
console.error('Error: No TypeScript files found to check');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Found ${allFiles.length} TypeScript files to check`);
|
||||||
|
|
||||||
|
// Process compiler options
|
||||||
|
const compilerOptions = tsbuild.mergeCompilerOptions({}, argvArg);
|
||||||
|
|
||||||
|
// Run emit check
|
||||||
|
const success = await tsbuild.emitCheck(allFiles, compilerOptions, argvArg);
|
||||||
|
|
||||||
|
// Exit with appropriate code
|
||||||
|
process.exit(success ? 0 : 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the custom command compiles any customDir to dist_customDir
|
||||||
|
*/
|
||||||
|
tsbuildCli.addCommand('tsfolders').subscribe(async (argvArg) => {
|
||||||
|
const tsFolders = await plugins.smartfile.fs.listFolders(paths.cwd, /^ts/);
|
||||||
|
|
||||||
|
// Now tsFolders contains all other folders except 'ts_shared' and 'ts_interfaces'
|
||||||
|
|
||||||
|
// We've established a base order. Now let's look at tspublish.json based ranking.
|
||||||
|
const tsPublishInstance = new plugins.tspublish.TsPublish();
|
||||||
|
const tsPublishModules = await tsPublishInstance.getModuleSubDirs(paths.cwd);
|
||||||
|
// tsPublishModules is an object: { [folderName]: tspublishJsonData }
|
||||||
|
|
||||||
|
// Create an array with folder names and their ranks
|
||||||
|
const foldersWithOrder = [];
|
||||||
|
|
||||||
|
for (const folder of tsFolders) {
|
||||||
|
let rank = Infinity; // Default rank if not specified
|
||||||
|
if (tsPublishModules[folder] && tsPublishModules[folder].order !== undefined) {
|
||||||
|
rank = tsPublishModules[folder].order;
|
||||||
|
}
|
||||||
|
foldersWithOrder.push({ folder, rank });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort the folders based on rank
|
||||||
|
foldersWithOrder.sort((a, b) => a.rank - b.rank);
|
||||||
|
|
||||||
|
// Construct the sorted list of folders
|
||||||
|
const sortedTsFolders = [];
|
||||||
|
|
||||||
|
// Add the rest of the folders in sorted order
|
||||||
|
for (const item of foldersWithOrder) {
|
||||||
|
sortedTsFolders.push(item.folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let's make sure 'ts_shared' is always transpiled first
|
||||||
|
const ensurePosition = (folderNameArg: string, ensuredPosition: number) => {
|
||||||
|
if (tsFolders.indexOf(folderNameArg) > -1 && Object.keys(tsPublishModules).indexOf(folderNameArg) === -1) {
|
||||||
|
sortedTsFolders.splice(tsFolders.indexOf(folderNameArg), 1);
|
||||||
|
sortedTsFolders.splice(ensuredPosition, 0, folderNameArg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ensurePosition('ts_interfaces', 0);
|
||||||
|
ensurePosition('ts_shared', 1);
|
||||||
|
|
||||||
|
|
||||||
|
const compilationCommandObject: { [key: string]: string } = {};
|
||||||
|
console.log(`compiling in this order:`);
|
||||||
|
console.log(sortedTsFolders);
|
||||||
|
for (const tsFolder of sortedTsFolders) {
|
||||||
|
compilationCommandObject[`./${tsFolder}/**/*.ts`] = `./dist_${tsFolder}`;
|
||||||
|
}
|
||||||
|
await tsbuild.compileGlobStringObject(compilationCommandObject, {}, process.cwd(), argvArg);
|
||||||
});
|
});
|
||||||
|
|
||||||
tsbuildCli.startParse();
|
tsbuildCli.startParse();
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import * as plugins from './tsbuild.plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
import type { CompilerOptions, ScriptTarget, ModuleKind } from 'typescript';
|
import type { CompilerOptions, ScriptTarget, ModuleKind } from 'typescript';
|
||||||
import { compiler, mergeCompilerOptions } from './tsbuild.classes.compiler.js';
|
import { compiler, mergeCompilerOptions, emitCheck } from './tsbuild.classes.tsbuild.js';
|
||||||
|
|
||||||
export type { CompilerOptions, ScriptTarget, ModuleKind };
|
export type { CompilerOptions, ScriptTarget, ModuleKind };
|
||||||
|
|
||||||
export * from './tsbuild.classes.compiler.js';
|
export * from './tsbuild.classes.tsbuild.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* compile am array of absolute file paths
|
* compile am array of absolute file paths
|
||||||
@ -25,35 +25,52 @@ export let compileFileArray = (
|
|||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
export let compileGlobStringObject = async (
|
export let compileGlobStringObject = async (
|
||||||
globStringObjectArg: any,
|
globStringObjectArg: Record<string, string>,
|
||||||
tsOptionsArg: CompilerOptions = {},
|
tsOptionsArg: CompilerOptions = {},
|
||||||
cwdArg: string = process.cwd(),
|
cwdArg: string = process.cwd(),
|
||||||
argvArg?: any
|
argvArg?: any
|
||||||
) => {
|
) => {
|
||||||
let compiledFiles: plugins.smartfile.Smartfile[] = [];
|
let compiledFiles: any[] = [];
|
||||||
|
|
||||||
for (const keyArg in globStringObjectArg) {
|
for (const keyArg in globStringObjectArg) {
|
||||||
if (globStringObjectArg[keyArg]) {
|
// Type safety check for key
|
||||||
|
if (keyArg && typeof keyArg === 'string' && globStringObjectArg[keyArg]) {
|
||||||
console.log(
|
console.log(
|
||||||
`TypeScript assignment: transpile from ${keyArg} to ${globStringObjectArg[keyArg]}`
|
`TypeScript assignment: transpile from ${keyArg} to ${globStringObjectArg[keyArg]}`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Get files matching the glob pattern
|
||||||
const fileTreeArray = await plugins.smartfile.fs.listFileTree(cwdArg, keyArg);
|
const fileTreeArray = await plugins.smartfile.fs.listFileTree(cwdArg, keyArg);
|
||||||
const absoluteFilePathArray: string[] = plugins.smartpath.transform.toAbsolute(
|
|
||||||
fileTreeArray,
|
// 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
|
||||||
|
const absoluteFilePathArray = plugins.smartpath.transform.toAbsolute(
|
||||||
|
stringFileTreeArray,
|
||||||
cwdArg
|
cwdArg
|
||||||
) as string[];
|
) as string[];
|
||||||
|
|
||||||
|
// Get destination directory as absolute path
|
||||||
const destDir: string = plugins.smartpath.transform.toAbsolute(
|
const destDir: string = plugins.smartpath.transform.toAbsolute(
|
||||||
globStringObjectArg[keyArg],
|
globStringObjectArg[keyArg],
|
||||||
cwdArg
|
cwdArg
|
||||||
) as string;
|
) as string;
|
||||||
tsOptionsArg = {
|
|
||||||
|
// Update compiler options with the output directory
|
||||||
|
const updatedTsOptions: CompilerOptions = {
|
||||||
...tsOptionsArg,
|
...tsOptionsArg,
|
||||||
outDir: destDir,
|
outDir: destDir,
|
||||||
};
|
};
|
||||||
compiledFiles = compiledFiles.concat(
|
|
||||||
compiledFiles,
|
// Compile the files and correctly concat the results
|
||||||
await compileFileArray(absoluteFilePathArray, tsOptionsArg, argvArg)
|
// Fixed: removed duplicating compiledFiles in the concat operation
|
||||||
);
|
const newlyCompiledFiles = await compileFileArray(absoluteFilePathArray, updatedTsOptions, argvArg);
|
||||||
|
compiledFiles = compiledFiles.concat(newlyCompiledFiles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return compiledFiles;
|
return compiledFiles;
|
||||||
};
|
};
|
@ -1,8 +0,0 @@
|
|||||||
import * as smartcli from '@pushrocks/smartcli';
|
|
||||||
import * as smartdelay from '@pushrocks/smartdelay';
|
|
||||||
import * as smartfile from '@pushrocks/smartfile';
|
|
||||||
import * as smartpath from '@pushrocks/smartpath';
|
|
||||||
import * as smartpromise from '@pushrocks/smartpromise';
|
|
||||||
import typescript from 'typescript';
|
|
||||||
|
|
||||||
export { smartcli, smartdelay, smartfile, smartpath, smartpromise, typescript };
|
|
11
tsconfig.json
Normal file
11
tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"useDefineForClassFields": false,
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"verbatimModuleSyntax": true
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user