Compare commits

...

6 Commits

8 changed files with 163 additions and 97 deletions

1
.npmrc Normal file
View File

@ -0,0 +1 @@
registry=https://registry.npmjs.org

View File

@ -1,5 +1,31 @@
# Changelog
## 2025-05-23 - 1.9.2 - fix(logging)
Fix log file naming to prevent collisions and update logging system documentation.
- Enhance safe filename generation in tstest logging to preserve directory structure using double underscores.
- Update readme.hints.md to include detailed logging system documentation and behavior.
- Add .claude/settings.local.json with updated permissions for build tools.
## 2025-05-23 - 1.9.1 - fix(dependencies)
Update dependency versions and add local configuration files
- Bump @git.zone/tsbuild from ^2.5.1 to ^2.6.3
- Bump @types/node from ^22.15.18 to ^22.15.21
- Bump @push.rocks/smartexpect from ^2.4.2 to ^2.5.0
- Bump @push.rocks/smartfile from ^11.2.0 to ^11.2.3
- Bump @push.rocks/smartlog from ^3.1.1 to ^3.1.8
- Add .npmrc with npm registry configuration
- Add .claude/settings.local.json for local permissions
## 2025-05-16 - 1.9.0 - feat(docs)
Update documentation to embed tapbundle and clarify module exports for browser compatibility; also add CI permission settings.
- Embed tapbundle directly into tstest to simplify usage and ensure browser support.
- Update import paths in examples from '@push.rocks/tapbundle' to '@git.zone/tstest/tapbundle'.
- Revise the changelog to reflect version 1.8.0 improvements including enhanced test lifecycle hooks and parallel execution fixes.
- Add .claude/settings.local.json to configure CI-related permissions and tool operations.
## 2025-05-16 - 1.8.0 - feat(documentation)
Enhance README with detailed test features and update local settings for build permissions.

View File

@ -1,6 +1,6 @@
{
"name": "@git.zone/tstest",
"version": "1.8.0",
"version": "1.9.2",
"private": false,
"description": "a test utility to run tests that match test/**/*.ts",
"exports": {
@ -24,8 +24,8 @@
"buildDocs": "tsdoc"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.5.1",
"@types/node": "^22.15.18"
"@git.zone/tsbuild": "^2.6.3",
"@types/node": "^22.15.21"
},
"dependencies": {
"@api.global/typedserver": "^3.0.74",
@ -37,10 +37,10 @@
"@push.rocks/smartcrypto": "^2.0.4",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartenv": "^5.0.12",
"@push.rocks/smartexpect": "^2.4.2",
"@push.rocks/smartfile": "^11.2.0",
"@push.rocks/smartexpect": "^2.5.0",
"@push.rocks/smartfile": "^11.2.3",
"@push.rocks/smartjson": "^5.0.20",
"@push.rocks/smartlog": "^3.1.1",
"@push.rocks/smartlog": "^3.1.8",
"@push.rocks/smartmongo": "^2.0.12",
"@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartpromise": "^4.2.3",

167
pnpm-lock.yaml generated
View File

@ -36,17 +36,17 @@ importers:
specifier: ^5.0.12
version: 5.0.12
'@push.rocks/smartexpect':
specifier: ^2.4.2
version: 2.4.2
specifier: ^2.5.0
version: 2.5.0
'@push.rocks/smartfile':
specifier: ^11.2.0
version: 11.2.0
specifier: ^11.2.3
version: 11.2.3
'@push.rocks/smartjson':
specifier: ^5.0.20
version: 5.0.20
'@push.rocks/smartlog':
specifier: ^3.1.1
version: 3.1.1
specifier: ^3.1.8
version: 3.1.8
'@push.rocks/smartmongo':
specifier: ^2.0.12
version: 2.0.12(@aws-sdk/credential-providers@3.810.0)(socks@2.8.4)
@ -79,11 +79,11 @@ importers:
version: 8.18.2
devDependencies:
'@git.zone/tsbuild':
specifier: ^2.5.1
version: 2.5.1
specifier: ^2.6.3
version: 2.6.3
'@types/node':
specifier: ^22.15.18
version: 22.15.18
specifier: ^22.15.21
version: 22.15.21
packages:
@ -585,8 +585,8 @@ packages:
cpu: [x64]
os: [win32]
'@git.zone/tsbuild@2.5.1':
resolution: {integrity: sha512-b1TyaNnaPCD3dvdRZ2da0MkZbH9liCrhzg57pwFIB2Gx4g8UMv8ZLN2cA1NRaNE0o8NCybf3gV1L+V0FO0DrMQ==}
'@git.zone/tsbuild@2.6.3':
resolution: {integrity: sha512-KIJYGQf9g5YibQZFWniYhESi7cWDZyRiudrYyipEQdyrv0o4VwXCdFgvsi90EZyoR2gdvz9qIWKeB1VaGx/dcQ==}
hasBin: true
'@git.zone/tsbundle@2.2.5':
@ -732,8 +732,8 @@ packages:
'@push.rocks/smartexit@1.0.23':
resolution: {integrity: sha512-WmwKYcwbHBByoABhHHB+PAjr5475AtD/xBh1mDcqPrFsOOUOZq3BBUdpq25wI3ccu/SZB5IwaimiVzadls6HkA==}
'@push.rocks/smartexpect@2.4.2':
resolution: {integrity: sha512-L+aS1n5rWhf/yOh5R3zPgwycYtDr5FfrDWgasy6ShhN6Zbn/z/AOPbWcF/OpeTmx0XabWB2h5d4xBcCKLl47cQ==}
'@push.rocks/smartexpect@2.5.0':
resolution: {integrity: sha512-yoyuCoQ3tTiAriuvF+/09fNbVfFnacudL2SwHSzPhX/ugaE7VTSWXQ9A34eKOWvil0MPyDcOY36fVZDxvrPd8A==}
'@push.rocks/smartfeed@1.0.11':
resolution: {integrity: sha512-02uhXxQamgfBo3T12FsAdfyElnpoWuDUb08B2AE60DbIaukVx/7Mi17xwobApY1flNSr5StZDt8N8vxPhBhIXw==}
@ -744,8 +744,8 @@ packages:
'@push.rocks/smartfile@10.0.41':
resolution: {integrity: sha512-xOOy0duI34M2qrJZggpk51EHGXmg9+mBL1Q55tNiQKXzfx89P3coY1EAZG8tvmep3qB712QEKe7T+u04t42Kjg==}
'@push.rocks/smartfile@11.2.0':
resolution: {integrity: sha512-0Gw6DvCQ2D/BXNN6airSC7hoSBut0p/uNWf2+rqO+D6VLhIJ/QUBvF6xm/LnpPI/zcF8YlDn/GEriInB5DUtEw==}
'@push.rocks/smartfile@11.2.3':
resolution: {integrity: sha512-gXUCwzHE6TuuzQIRGuZhJhPZJcVyc4G9nll32LHgmnBAU5ynDsGWUUbtFmpgcYLSAYFM9LGZS4b+ZrQPoDrtJw==}
'@push.rocks/smartguard@3.1.0':
resolution: {integrity: sha512-J23q84f1O+TwFGmd4lrO9XLHUh2DaLXo9PN/9VmTWYzTkQDv5JehmifXVI0esophXcCIfbdIu6hbt7/aHlDF4A==}
@ -765,8 +765,8 @@ packages:
'@push.rocks/smartlog-interfaces@3.0.2':
resolution: {integrity: sha512-8hGRTJehbsFSJxLhCQkA018mZtXVPxPTblbg9VaE/EqISRzUw+eosJ2EJV7M4Qu0eiTJZjnWnNLn8CkD77ziWw==}
'@push.rocks/smartlog@3.1.1':
resolution: {integrity: sha512-bANAjbPUty6jncut3FKHcSfrU6lm/gNW27q+BrqKH3I71qYWuh9HR0+tgJz+Ha47/sONzCmLcX/I2VejZ3njJg==}
'@push.rocks/smartlog@3.1.8':
resolution: {integrity: sha512-j4H5x4/hEmiIO7q+/LKyX3N+AhRIOj1jDE4TvZDvujZkbT/9wEWfpO1bqeMe/EQbg1eOQMlAuyrcLXUcDICpQg==}
'@push.rocks/smartmanifest@2.0.2':
resolution: {integrity: sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==}
@ -1353,8 +1353,8 @@ packages:
'@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
'@types/node@22.15.18':
resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==}
'@types/node@22.15.21':
resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==}
'@types/ping@0.4.4':
resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==}
@ -1541,7 +1541,7 @@ packages:
resolution: {integrity: sha512-InJljddsYWbEL8LBnopnCg+qMQp9KcowvYWOt4YWrjD5HmxzDYKdVbDS1w/ji5rFZdRD58V5UxJPtBdpEbEJYw==}
browserify-zlib@0.1.4:
resolution: {integrity: sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=}
resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
bson@4.7.2:
resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==}
@ -2103,7 +2103,7 @@ packages:
engines: {node: '>= 0.6'}
from2@2.3.0:
resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=}
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@ -2309,7 +2309,7 @@ packages:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
is-deflate@1.0.0:
resolution: {integrity: sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=}
resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
@ -2325,7 +2325,7 @@ packages:
engines: {node: '>= 0.4'}
is-gzip@1.0.0:
resolution: {integrity: sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=}
resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
engines: {node: '>=0.10.0'}
is-ip@4.0.0:
@ -2373,7 +2373,7 @@ packages:
engines: {node: '>=8'}
isarray@1.0.0:
resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
isexe@2.0.0:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
@ -2388,8 +2388,8 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
jackspeak@4.1.0:
resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
jackspeak@4.1.1:
resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
engines: {node: 20 || >=22}
js-base64@3.7.7:
@ -2933,7 +2933,7 @@ packages:
engines: {node: '>=14.16'}
pako@0.2.9:
resolution: {integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=}
resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@ -3045,7 +3045,7 @@ packages:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
proto-list@1.2.4:
resolution: {integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=}
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
@ -3350,7 +3350,7 @@ packages:
engines: {node: '>=12'}
strip-json-comments@2.0.1:
resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=}
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
strnum@1.1.2:
@ -3489,6 +3489,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
typescript@5.8.3:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
hasBin: true
uglify-js@3.19.3:
resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
engines: {node: '>=0.8.0'}
@ -3734,9 +3739,9 @@ snapshots:
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartenv': 5.0.12
'@push.rocks/smartfeed': 1.0.11
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartjson': 5.0.20
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartlog-destination-devtools': 1.0.12
'@push.rocks/smartlog-interfaces': 3.0.2
'@push.rocks/smartmanifest': 2.0.2
@ -4536,17 +4541,17 @@ snapshots:
'@esbuild/win32-x64@0.24.2':
optional: true
'@git.zone/tsbuild@2.5.1':
'@git.zone/tsbuild@2.6.3':
dependencies:
'@git.zone/tspublish': 1.9.1
'@push.rocks/early': 4.0.4
'@push.rocks/smartcli': 4.0.11
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.2.3
typescript: 5.7.3
typescript: 5.8.3
transitivePeerDependencies:
- aws-crt
@ -4555,8 +4560,8 @@ snapshots:
'@push.rocks/early': 4.0.4
'@push.rocks/smartcli': 4.0.11
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartlog-destination-local': 9.0.2
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.2.3
@ -4572,8 +4577,8 @@ snapshots:
dependencies:
'@push.rocks/smartcli': 4.0.11
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartnpm': 2.0.4
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartrequest': 2.1.0
@ -4583,7 +4588,7 @@ snapshots:
'@git.zone/tsrun@1.3.3':
dependencies:
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartshell': 3.2.3
tsx: 4.19.2
@ -4687,7 +4692,7 @@ snapshots:
'@push.rocks/smartcache': 1.0.16
'@push.rocks/smartenv': 5.0.12
'@push.rocks/smartexit': 1.0.23
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartjson': 5.0.20
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.2.3
@ -4725,8 +4730,8 @@ snapshots:
dependencies:
'@api.global/typedrequest': 3.1.10
'@configvault.io/interfaces': 1.0.17
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartarchive@3.0.8':
@ -4796,7 +4801,7 @@ snapshots:
'@push.rocks/smartcli@4.0.11':
dependencies:
'@push.rocks/lik': 6.2.2
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartobject': 1.0.12
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrx': 3.0.10
@ -4821,7 +4826,7 @@ snapshots:
dependencies:
'@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.810.0)(socks@2.8.4)
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrx': 3.0.10
@ -4857,7 +4862,7 @@ snapshots:
'@push.rocks/smartpromise': 4.2.3
tree-kill: 1.2.2
'@push.rocks/smartexpect@2.4.2':
'@push.rocks/smartexpect@2.5.0':
dependencies:
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartpromise': 4.2.3
@ -4890,7 +4895,7 @@ snapshots:
glob: 10.4.5
js-yaml: 4.1.0
'@push.rocks/smartfile@11.2.0':
'@push.rocks/smartfile@11.2.3':
dependencies:
'@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5
@ -4943,13 +4948,13 @@ snapshots:
'@api.global/typedrequest-interfaces': 2.0.2
'@tsclass/tsclass': 4.4.4
'@push.rocks/smartlog@3.1.1':
'@push.rocks/smartlog@3.1.8':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
'@push.rocks/consolecolor': 2.0.2
'@push.rocks/isounique': 1.0.5
'@push.rocks/smartclickhouse': 2.0.17
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smarthash': 3.0.4
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smarttime': 4.1.1
@ -5058,7 +5063,7 @@ snapshots:
dependencies:
'@push.rocks/smartbuffer': 3.0.4
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartnetwork': 3.0.2
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.2.3
@ -5111,7 +5116,7 @@ snapshots:
'@push.rocks/smarts3@2.2.5':
dependencies:
'@push.rocks/smartbucket': 3.3.7
'@push.rocks/smartfile': 11.2.0
'@push.rocks/smartfile': 11.2.3
'@push.rocks/smartpath': 5.0.18
'@tsclass/tsclass': 4.4.4
'@types/s3rver': 3.7.4
@ -5148,7 +5153,7 @@ snapshots:
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartenv': 5.0.12
'@push.rocks/smartjson': 5.0.20
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrx': 3.0.10
'@push.rocks/smarttime': 4.1.1
@ -5246,7 +5251,7 @@ snapshots:
dependencies:
'@push.rocks/lik': 6.2.2
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartlog': 3.1.1
'@push.rocks/smartlog': 3.1.8
'@push.rocks/smartpromise': 4.2.3
'@push.rocks/smartrx': 3.0.10
'@push.rocks/smarttime': 4.1.1
@ -5846,22 +5851,22 @@ snapshots:
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/buffer-json@2.0.3': {}
'@types/clean-css@4.2.11':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
source-map: 0.6.1
'@types/connect@3.4.38':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/cors@2.8.18':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/debug@4.1.12':
dependencies:
@ -5871,14 +5876,14 @@ snapshots:
'@types/express-serve-static-core@5.0.5':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/qs': 6.9.18
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
'@types/express-serve-static-core@5.0.6':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/qs': 6.9.18
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@ -5902,30 +5907,30 @@ snapshots:
'@types/from2@2.3.5':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/fs-extra@9.0.13':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/glob@8.1.0':
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/gunzip-maybe@1.4.2':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/hast@3.0.4':
dependencies:
@ -5947,7 +5952,7 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/mdast@4.0.4':
dependencies:
@ -5965,9 +5970,9 @@ snapshots:
'@types/node-forge@1.3.11':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/node@22.15.18':
'@types/node@22.15.21':
dependencies:
undici-types: 6.21.0
@ -5983,30 +5988,30 @@ snapshots:
'@types/s3rver@3.7.4':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/semver@7.7.0': {}
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/send': 0.17.4
'@types/symbol-tree@3.2.5': {}
'@types/tar-stream@2.2.3':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/through2@2.0.41':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/triple-beam@1.3.5': {}
@ -6030,7 +6035,7 @@ snapshots:
'@types/whatwg-url@8.2.2':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/webidl-conversions': 7.0.3
'@types/which@2.0.2': {}
@ -6039,11 +6044,11 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
'@types/yauzl@2.10.3':
dependencies:
'@types/node': 22.15.18
'@types/node': 22.15.21
optional: true
'@ungap/structured-clone@1.3.0': {}
@ -6502,7 +6507,7 @@ snapshots:
engine.io@6.6.4:
dependencies:
'@types/cors': 2.8.18
'@types/node': 22.15.18
'@types/node': 22.15.21
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@ -6852,7 +6857,7 @@ snapshots:
glob@11.0.2:
dependencies:
foreground-child: 3.3.1
jackspeak: 4.1.0
jackspeak: 4.1.1
minimatch: 10.0.1
minipass: 7.1.2
package-json-from-dist: 1.0.1
@ -7104,7 +7109,7 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
jackspeak@4.1.0:
jackspeak@4.1.1:
dependencies:
'@isaacs/cliui': 8.0.2
@ -8494,6 +8499,8 @@ snapshots:
typescript@5.7.3: {}
typescript@5.8.3: {}
uglify-js@3.19.3: {}
uint8array-extras@1.4.0: {}

View File

@ -12,7 +12,7 @@ This project integrates tstest with tapbundle through a modular architecture:
### Test Execution Flow
1. **CLI Entry Point** (`cli.js` <20> `cli.ts.js` <20> `cli.child.ts`)
1. **CLI Entry Point** (`cli.js` <20> `cli.ts.js` <20> `cli.child.ts`)
- The CLI uses tsx to run TypeScript files directly
- Accepts glob patterns to find test files
- Supports options like `--verbose`, `--quiet`, `--web`
@ -59,4 +59,19 @@ The framework automatically detects the runtime environment:
- Browser tests are compiled and served via a local server
- WebHelpers are only enabled in browser environment
This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns.
This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns.
## Logging System
### Log File Naming (Fixed in v1.9.1)
When using the `--logfile` flag, tstest creates log files in `.nogit/testlogs/`. The log file naming was updated to preserve directory structure and prevent collisions:
- **Old behavior**: `test/tapbundle/test.ts``.nogit/testlogs/test.log`
- **New behavior**: `test/tapbundle/test.ts``.nogit/testlogs/test__tapbundle__test.log`
This fix ensures that test files with the same basename in different directories don't overwrite each other's logs. The implementation:
1. Takes the relative path from the current working directory
2. Replaces path separators (`/`) with double underscores (`__`)
3. Removes the `.ts` extension
4. Creates a flat filename that preserves the directory structure

View File

@ -26,7 +26,7 @@
-**Timeout Control** - Set custom timeouts for tests
- 🔁 **Retry Logic** - Automatically retry failing tests
- 🛠️ **Test Fixtures** - Create reusable test data
- 📦 **Browser-Compatible** - Full browser support for tapbundle
- 📦 **Browser-Compatible** - Full browser support with embedded tapbundle
## Installation
@ -143,10 +143,10 @@ tstest supports different test environments through file naming:
### Writing Tests
tstest uses TAP (Test Anything Protocol) for test output. Use `@pushrocks/tapbundle` for the best experience:
tstest includes a built-in TAP (Test Anything Protocol) test framework. Import it from the embedded tapbundle:
```typescript
import { expect, tap } from '@push.rocks/tapbundle';
import { expect, tap } from '@git.zone/tstest/tapbundle';
tap.test('my awesome test', async () => {
const result = await myFunction();
@ -156,6 +156,14 @@ tap.test('my awesome test', async () => {
tap.start();
```
**Module Exports**
tstest provides multiple exports for different use cases:
- `@git.zone/tstest` - Main CLI and test runner functionality
- `@git.zone/tstest/tapbundle` - Browser-compatible test framework
- `@git.zone/tstest/tapbundle_node` - Node.js-specific test utilities
#### Test Features
**Tag-based Test Filtering**
@ -243,7 +251,7 @@ tap.todo('implement user deletion', async () => {
**Browser Testing**
```typescript
// test.browser.ts
import { tap, webhelpers } from '@push.rocks/tapbundle';
import { tap, webhelpers } from '@git.zone/tstest/tapbundle';
tap.test('DOM manipulation', async () => {
const element = await webhelpers.fixture(webhelpers.html`
@ -322,8 +330,9 @@ tstest test/ --quiet
## Changelog
### Version 1.7.0
- 🎉 Made `@push.rocks/tapbundle` fully browser-compatible
### Version 1.8.0
- 📦 Embedded tapbundle directly into tstest project
- 🌐 Made tapbundle fully browser-compatible
- 📸 Added snapshot testing with base64-encoded communication protocol
- 🏷️ Introduced tag-based test filtering
- 🔧 Enhanced test lifecycle hooks (beforeEach/afterEach)

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@git.zone/tstest',
version: '1.8.0',
version: '1.9.2',
description: 'a test utility to run tests that match test/**/*.ts'
}

View File

@ -153,8 +153,16 @@ export class TsTestLogger {
// Only set up test log file if --logfile option is specified
if (this.options.logFile) {
const baseFilename = path.basename(filename, '.ts');
this.currentTestLogFile = path.join('.nogit', 'testlogs', `${baseFilename}.log`);
// Create a safe filename that preserves directory structure
// Convert relative path to a flat filename by replacing separators with __
const relativeFilename = path.relative(process.cwd(), filename);
const safeFilename = relativeFilename
.replace(/\\/g, '/') // Normalize Windows paths
.replace(/\//g, '__') // Replace path separators with double underscores
.replace(/\.ts$/, '') // Remove .ts extension
.replace(/^\.\.__|^\.__|^__/, ''); // Clean up leading separators from relative paths
this.currentTestLogFile = path.join('.nogit', 'testlogs', `${safeFilename}.log`);
// Ensure the directory exists
const logDir = path.dirname(this.currentTestLogFile);