@git.zone/tstest 2.4.3 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tstest',
|
|
6
|
-
version: '2.
|
|
6
|
+
version: '2.5.0',
|
|
7
7
|
description: 'a test utility to run tests that match test/**/*.ts'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFEQUFxRDtDQUNuRSxDQUFBIn0=
|
|
@@ -6,11 +6,13 @@
|
|
|
6
6
|
* - test.chromium.ts
|
|
7
7
|
* - test.node+chromium.ts
|
|
8
8
|
* - test.deno+bun.ts
|
|
9
|
+
* - test.all.ts (runs on all runtimes)
|
|
9
10
|
* - test.chromium.nonci.ts
|
|
10
11
|
*/
|
|
11
12
|
const KNOWN_RUNTIMES = new Set(['node', 'chromium', 'deno', 'bun']);
|
|
12
13
|
const KNOWN_MODIFIERS = new Set(['nonci']);
|
|
13
14
|
const VALID_EXTENSIONS = new Set(['ts', 'tsx', 'mts', 'cts']);
|
|
15
|
+
const ALL_RUNTIMES = ['node', 'chromium', 'deno', 'bun'];
|
|
14
16
|
// Legacy mappings for backwards compatibility
|
|
15
17
|
const LEGACY_RUNTIME_MAP = {
|
|
16
18
|
browser: ['chromium'],
|
|
@@ -67,8 +69,12 @@ export function parseTestFilename(filePath, config = {}) {
|
|
|
67
69
|
const runtimeCandidates = token.split('+').map(r => r.trim()).filter(Boolean);
|
|
68
70
|
const validRuntimes = [];
|
|
69
71
|
const invalidRuntimes = [];
|
|
72
|
+
let hasAllKeyword = false;
|
|
70
73
|
for (const candidate of runtimeCandidates) {
|
|
71
|
-
if (
|
|
74
|
+
if (candidate === 'all') {
|
|
75
|
+
hasAllKeyword = true;
|
|
76
|
+
}
|
|
77
|
+
else if (KNOWN_RUNTIMES.has(candidate)) {
|
|
72
78
|
// Dedupe: only add if not already in list
|
|
73
79
|
if (!validRuntimes.includes(candidate)) {
|
|
74
80
|
validRuntimes.push(candidate);
|
|
@@ -78,10 +84,16 @@ export function parseTestFilename(filePath, config = {}) {
|
|
|
78
84
|
invalidRuntimes.push(candidate);
|
|
79
85
|
}
|
|
80
86
|
}
|
|
87
|
+
// If 'all' keyword is present, expand to all runtimes
|
|
88
|
+
if (hasAllKeyword) {
|
|
89
|
+
runtimes = [...ALL_RUNTIMES];
|
|
90
|
+
runtimeTokenIndex = i;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
81
93
|
if (invalidRuntimes.length > 0) {
|
|
82
94
|
if (strictUnknownRuntime) {
|
|
83
95
|
throw new Error(`Unknown runtime(s) in "${fileName}": ${invalidRuntimes.join(', ')}. ` +
|
|
84
|
-
`Valid runtimes: ${Array.from(KNOWN_RUNTIMES).join(', ')}`);
|
|
96
|
+
`Valid runtimes: ${Array.from(KNOWN_RUNTIMES).join(', ')}, all`);
|
|
85
97
|
}
|
|
86
98
|
else {
|
|
87
99
|
console.warn(`⚠️ Warning: Unknown runtime(s) in "${fileName}": ${invalidRuntimes.join(', ')}. ` +
|
|
@@ -97,6 +109,12 @@ export function parseTestFilename(filePath, config = {}) {
|
|
|
97
109
|
break;
|
|
98
110
|
}
|
|
99
111
|
}
|
|
112
|
+
// Check if this is the 'all' keyword (expands to all runtimes)
|
|
113
|
+
if (token === 'all') {
|
|
114
|
+
runtimes = [...ALL_RUNTIMES];
|
|
115
|
+
runtimeTokenIndex = i;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
100
118
|
// Check if this is a single runtime token
|
|
101
119
|
if (KNOWN_RUNTIMES.has(token)) {
|
|
102
120
|
runtimes = [token];
|
|
@@ -156,4 +174,4 @@ export function getLegacyMigrationTarget(fileName) {
|
|
|
156
174
|
parts.push(parsed.extension);
|
|
157
175
|
return parts.join('.');
|
|
158
176
|
}
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMucnVudGltZS5wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c3Rlc3QuY2xhc3Nlcy5ydW50aW1lLnBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBbUJILE1BQU0sY0FBYyxHQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakYsTUFBTSxlQUFlLEdBQWdCLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RCxNQUFNLGdCQUFnQixHQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0UsTUFBTSxZQUFZLEdBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVwRSw4Q0FBOEM7QUFDOUMsTUFBTSxrQkFBa0IsR0FBOEI7SUFDcEQsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQ3JCLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7Q0FDM0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsUUFBZ0IsRUFDaEIsU0FBdUIsRUFBRTtJQUV6QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUM7SUFDakUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNELDBDQUEwQztJQUMxQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQztJQUN2RCxNQUFNLFFBQVEsR0FBRyxR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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -61,15 +61,29 @@ Name your test files with runtime specifiers to control where they run:
|
|
|
61
61
|
| `*.chromium.ts` | Chromium browser | `test.dom.chromium.ts` |
|
|
62
62
|
| `*.deno.ts` | Deno runtime | `test.http.deno.ts` |
|
|
63
63
|
| `*.bun.ts` | Bun runtime | `test.fast.bun.ts` |
|
|
64
|
+
| `*.all.ts` | All runtimes (Node, Chromium, Deno, Bun) | `test.universal.all.ts` |
|
|
64
65
|
| `*.node+chromium.ts` | Both Node.js and Chromium | `test.isomorphic.node+chromium.ts` |
|
|
65
66
|
| `*.node+deno.ts` | Both Node.js and Deno | `test.cross.node+deno.ts` |
|
|
66
67
|
| `*.deno+bun.ts` | Both Deno and Bun | `test.modern.deno+bun.ts` |
|
|
67
68
|
| `*.chromium.nonci.ts` | Chromium, skip in CI | `test.visual.chromium.nonci.ts` |
|
|
69
|
+
| `*.all.nonci.ts` | All runtimes, skip in CI | `test.comprehensive.all.nonci.ts` |
|
|
68
70
|
|
|
69
71
|
**Multi-Runtime Examples:**
|
|
70
72
|
|
|
71
73
|
```typescript
|
|
72
|
-
// test.api.
|
|
74
|
+
// test.api.all.ts - runs in all runtimes (Node, Chromium, Deno, Bun)
|
|
75
|
+
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
|
76
|
+
|
|
77
|
+
tap.test('universal HTTP test', async () => {
|
|
78
|
+
const response = await fetch('https://api.example.com/test');
|
|
79
|
+
expect(response.status).toEqual(200);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
export default tap.start();
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// test.api.node+deno+bun.ts - runs in specific runtimes
|
|
73
87
|
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
|
74
88
|
|
|
75
89
|
tap.test('cross-runtime HTTP test', async () => {
|
|
@@ -915,6 +929,7 @@ tstest test/api/endpoints.test.ts --verbose --timeout 60
|
|
|
915
929
|
### Version 2.4.0
|
|
916
930
|
- 🚀 **Multi-Runtime Architecture** - Support for Deno, Bun, Node.js, and Chromium
|
|
917
931
|
- 🔀 **New Naming Convention** - Flexible `.runtime1+runtime2.ts` pattern
|
|
932
|
+
- 🌐 **Universal Testing** - `.all.ts` pattern runs tests on all supported runtimes
|
|
918
933
|
- 🔄 **Migration Tool** - Easy migration from legacy naming (`.browser.ts`, `.both.ts`)
|
|
919
934
|
- 🦕 **Deno Support** - Full Deno runtime with Node.js compatibility
|
|
920
935
|
- 🐰 **Bun Support** - Ultra-fast Bun runtime integration
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - test.chromium.ts
|
|
7
7
|
* - test.node+chromium.ts
|
|
8
8
|
* - test.deno+bun.ts
|
|
9
|
+
* - test.all.ts (runs on all runtimes)
|
|
9
10
|
* - test.chromium.nonci.ts
|
|
10
11
|
*/
|
|
11
12
|
|
|
@@ -29,6 +30,7 @@ export interface ParserConfig {
|
|
|
29
30
|
const KNOWN_RUNTIMES: Set<string> = new Set(['node', 'chromium', 'deno', 'bun']);
|
|
30
31
|
const KNOWN_MODIFIERS: Set<string> = new Set(['nonci']);
|
|
31
32
|
const VALID_EXTENSIONS: Set<string> = new Set(['ts', 'tsx', 'mts', 'cts']);
|
|
33
|
+
const ALL_RUNTIMES: Runtime[] = ['node', 'chromium', 'deno', 'bun'];
|
|
32
34
|
|
|
33
35
|
// Legacy mappings for backwards compatibility
|
|
34
36
|
const LEGACY_RUNTIME_MAP: Record<string, Runtime[]> = {
|
|
@@ -102,9 +104,12 @@ export function parseTestFilename(
|
|
|
102
104
|
const runtimeCandidates = token.split('+').map(r => r.trim()).filter(Boolean);
|
|
103
105
|
const validRuntimes: Runtime[] = [];
|
|
104
106
|
const invalidRuntimes: string[] = [];
|
|
107
|
+
let hasAllKeyword = false;
|
|
105
108
|
|
|
106
109
|
for (const candidate of runtimeCandidates) {
|
|
107
|
-
if (
|
|
110
|
+
if (candidate === 'all') {
|
|
111
|
+
hasAllKeyword = true;
|
|
112
|
+
} else if (KNOWN_RUNTIMES.has(candidate)) {
|
|
108
113
|
// Dedupe: only add if not already in list
|
|
109
114
|
if (!validRuntimes.includes(candidate as Runtime)) {
|
|
110
115
|
validRuntimes.push(candidate as Runtime);
|
|
@@ -114,11 +119,18 @@ export function parseTestFilename(
|
|
|
114
119
|
}
|
|
115
120
|
}
|
|
116
121
|
|
|
122
|
+
// If 'all' keyword is present, expand to all runtimes
|
|
123
|
+
if (hasAllKeyword) {
|
|
124
|
+
runtimes = [...ALL_RUNTIMES];
|
|
125
|
+
runtimeTokenIndex = i;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
|
|
117
129
|
if (invalidRuntimes.length > 0) {
|
|
118
130
|
if (strictUnknownRuntime) {
|
|
119
131
|
throw new Error(
|
|
120
132
|
`Unknown runtime(s) in "${fileName}": ${invalidRuntimes.join(', ')}. ` +
|
|
121
|
-
`Valid runtimes: ${Array.from(KNOWN_RUNTIMES).join(', ')}`
|
|
133
|
+
`Valid runtimes: ${Array.from(KNOWN_RUNTIMES).join(', ')}, all`
|
|
122
134
|
);
|
|
123
135
|
} else {
|
|
124
136
|
console.warn(
|
|
@@ -138,6 +150,13 @@ export function parseTestFilename(
|
|
|
138
150
|
}
|
|
139
151
|
}
|
|
140
152
|
|
|
153
|
+
// Check if this is the 'all' keyword (expands to all runtimes)
|
|
154
|
+
if (token === 'all') {
|
|
155
|
+
runtimes = [...ALL_RUNTIMES];
|
|
156
|
+
runtimeTokenIndex = i;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
|
|
141
160
|
// Check if this is a single runtime token
|
|
142
161
|
if (KNOWN_RUNTIMES.has(token)) {
|
|
143
162
|
runtimes = [token as Runtime];
|