supertape 13.5.2 → 13.6.1

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.
package/ChangeLog CHANGED
@@ -1,3 +1,19 @@
1
+ 2026.09.26, v13.6.1
2
+
3
+ fix:
4
+ - b70eb4d supertape: a pattern that matched nothing is not a green run
5
+
6
+ feature:
7
+ - eca459b @supertape/formatter-time: chalk v6.0.0
8
+ - 143d101 @supertape/loader-jsx: oxc-transform v0.151.0
9
+ - 84bae3b @supertape/formatter-progress-bar: chalk v6.0.0
10
+
11
+ 2026.09.02, v13.6.0
12
+
13
+ feature:
14
+ - 6b68b91 supertape: env: types: jsx
15
+ - 292e4f3 @supertape/loader-ts: tsx
16
+
1
17
  2026.08.30, v13.5.2
2
18
 
3
19
  fix:
package/lib/cli.js CHANGED
@@ -52,6 +52,7 @@ export default async (overrides = {}) => {
52
52
  argv,
53
53
  cwd,
54
54
  stdout,
55
+ stderr,
55
56
  exit,
56
57
  isStop,
57
58
  workerFormatter,
@@ -79,6 +80,9 @@ export default async (overrides = {}) => {
79
80
  if (Number(SUPERTAPE_CHECK_SKIPPED) && skipped)
80
81
  return exit(SKIPPED);
81
82
 
83
+ if (code === FAIL)
84
+ return exit(FAIL);
85
+
82
86
  if (code === INVALID_OPTION) {
83
87
  stderr.write(`${message}\n`);
84
88
  return exit(code);
@@ -92,6 +96,7 @@ async function _cli(overrides) {
92
96
  argv,
93
97
  cwd,
94
98
  stdout,
99
+ stderr,
95
100
  isStop,
96
101
  workerFormatter,
97
102
  supertape,
@@ -131,13 +136,23 @@ async function _cli(overrides) {
131
136
  await import(module);
132
137
 
133
138
  const allFiles = [];
139
+ const notFound = [];
134
140
 
135
141
  for (const arg of args._) {
136
- const files = globSync(arg).filter(isExclude);
142
+ const found = globSync(arg);
137
143
 
138
- allFiles.push(...files);
144
+ // A pattern that matched nothing at all, as opposed to one whose matches
145
+ // were all filtered out - excluding node_modules is the second, and that
146
+ // is the exclusion working, not a miss.
147
+ if (!found.length)
148
+ notFound.push(arg);
149
+
150
+ allFiles.push(...found.filter(isExclude));
139
151
  }
140
152
 
153
+ if (notFound.length)
154
+ stderr.write(`No files matched: ${notFound.join(', ')}\n`);
155
+
141
156
  const {
142
157
  format,
143
158
  checkDuplicates,
@@ -160,8 +175,17 @@ async function _cli(overrides) {
160
175
 
161
176
  filesCount(files.length);
162
177
 
163
- if (!files.length)
178
+ if (!files.length) {
179
+ // every pattern matched nothing, so there is no test run to report on and
180
+ // exiting 0 would pass a gate that checked nothing. No pattern at all is a
181
+ // different thing: nothing was asked for, so there is nothing to fail.
182
+ if (args._.length && notFound.length === args._.length)
183
+ return {
184
+ code: FAIL,
185
+ };
186
+
164
187
  return OK;
188
+ }
165
189
 
166
190
  const stream = await supertape.createStream();
167
191
  stream.pipe(stdout);
@@ -3,6 +3,7 @@ type Env = {
3
3
  };
4
4
  type Config = {
5
5
  ts?: boolean;
6
+ jsx?: boolean;
6
7
  css?: boolean;
7
8
  dom?: boolean;
8
9
  nestjs?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "supertape",
3
- "version": "13.5.2",
3
+ "version": "13.6.1",
4
4
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
5
5
  "description": "📼 Supertape simplest high speed test runner with superpowers",
6
6
  "homepage": "http://github.com/coderaiser/supertape",