@storybook/addon-vitest 0.0.0-pr-32795-sha-f0ac445c → 0.0.0-pr-32717-sha-b8c5e103
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/dist/_browser-chunks/chunk-JK72E6FR.js +6 -0
- package/dist/_browser-chunks/chunk-RPDOPHZX.js +77 -0
- package/dist/_node-chunks/{chunk-PI4OHO3O.js → chunk-7I3XZAZ7.js} +24 -15
- package/dist/_node-chunks/chunk-AKC4U5HL.js +40 -0
- package/dist/_node-chunks/chunk-KSSAW7TR.js +247 -0
- package/dist/_node-chunks/chunk-NGGAGIMA.js +69 -0
- package/dist/_node-chunks/chunk-UJUXFQ2W.js +260 -0
- package/dist/_node-chunks/chunk-WR6HRATV.js +60 -0
- package/dist/_node-chunks/chunk-X4AEIMZO.js +92 -0
- package/dist/_node-chunks/chunk-Y2XQIAV5.js +502 -0
- package/dist/_node-chunks/chunk-ZMWJWQPS.js +50 -0
- package/dist/index.js +5 -1
- package/dist/manager.js +354 -163
- package/dist/node/coverage-reporter.js +864 -319
- package/dist/node/vitest.js +466 -190
- package/dist/postinstall.js +1276 -633
- package/dist/preset.js +354 -160
- package/dist/vitest-plugin/global-setup.js +105 -51
- package/dist/vitest-plugin/index.js +2381 -1161
- package/dist/vitest-plugin/setup-file.js +12 -6
- package/dist/vitest-plugin/test-utils.js +71 -31
- package/package.json +3 -7
- package/dist/_browser-chunks/chunk-ULSHVN74.js +0 -60
- package/dist/_node-chunks/chunk-3JME42XS.js +0 -1697
- package/dist/_node-chunks/chunk-3MTE45JW.js +0 -339
- package/dist/_node-chunks/chunk-CKQN7IR2.js +0 -69
- package/dist/_node-chunks/chunk-HCCHV65D.js +0 -45
- package/dist/_node-chunks/chunk-MQUBKGKA.js +0 -35
- package/dist/_node-chunks/chunk-RIAV333R.js +0 -83
- package/dist/_node-chunks/chunk-SNWBLFHL.js +0 -138
package/dist/preset.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import CJS_COMPAT_NODE_URL_cw5mnzbfh6n from 'node:url';
|
|
2
|
+
import CJS_COMPAT_NODE_PATH_cw5mnzbfh6n from 'node:path';
|
|
3
|
+
import CJS_COMPAT_NODE_MODULE_cw5mnzbfh6n from "node:module";
|
|
4
4
|
|
|
5
|
-
var __filename =
|
|
6
|
-
var __dirname =
|
|
7
|
-
var require =
|
|
5
|
+
var __filename = CJS_COMPAT_NODE_URL_cw5mnzbfh6n.fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = CJS_COMPAT_NODE_PATH_cw5mnzbfh6n.dirname(__filename);
|
|
7
|
+
var require = CJS_COMPAT_NODE_MODULE_cw5mnzbfh6n.createRequire(import.meta.url);
|
|
8
8
|
|
|
9
9
|
// ------------------------------------------------------------
|
|
10
10
|
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
|
|
@@ -12,11 +12,10 @@ var require = CJS_COMPAT_NODE_MODULE_oycy7mg2pm.createRequire(import.meta.url);
|
|
|
12
12
|
import {
|
|
13
13
|
log,
|
|
14
14
|
noop
|
|
15
|
-
} from "./_node-chunks/chunk-
|
|
15
|
+
} from "./_node-chunks/chunk-AKC4U5HL.js";
|
|
16
16
|
import {
|
|
17
|
-
execaNode,
|
|
18
17
|
importMetaResolve
|
|
19
|
-
} from "./_node-chunks/chunk-
|
|
18
|
+
} from "./_node-chunks/chunk-UJUXFQ2W.js";
|
|
20
19
|
import {
|
|
21
20
|
ADDON_ID,
|
|
22
21
|
COVERAGE_DIRECTORY,
|
|
@@ -25,16 +24,20 @@ import {
|
|
|
25
24
|
STORYBOOK_ADDON_TEST_CHANNEL,
|
|
26
25
|
TEST_PROVIDER_STORE_CHANNEL_EVENT_NAME,
|
|
27
26
|
storeOptions
|
|
28
|
-
} from "./_node-chunks/chunk-
|
|
27
|
+
} from "./_node-chunks/chunk-X4AEIMZO.js";
|
|
29
28
|
import {
|
|
30
29
|
require_picocolors
|
|
31
|
-
} from "./_node-chunks/chunk-
|
|
30
|
+
} from "./_node-chunks/chunk-7I3XZAZ7.js";
|
|
31
|
+
import {
|
|
32
|
+
require_dist
|
|
33
|
+
} from "./_node-chunks/chunk-NGGAGIMA.js";
|
|
32
34
|
import {
|
|
33
35
|
normalize
|
|
34
|
-
} from "./_node-chunks/chunk-
|
|
36
|
+
} from "./_node-chunks/chunk-KSSAW7TR.js";
|
|
35
37
|
import {
|
|
38
|
+
__name,
|
|
36
39
|
__toESM
|
|
37
|
-
} from "./_node-chunks/chunk-
|
|
40
|
+
} from "./_node-chunks/chunk-ZMWJWQPS.js";
|
|
38
41
|
|
|
39
42
|
// src/preset.ts
|
|
40
43
|
import { mkdir } from "node:fs/promises";
|
|
@@ -52,103 +55,172 @@ import { cleanPaths, oneWayHash, sanitizeError, telemetry } from "storybook/inte
|
|
|
52
55
|
|
|
53
56
|
// ../../node_modules/es-toolkit/dist/predicate/isPlainObject.mjs
|
|
54
57
|
function isPlainObject(value) {
|
|
55
|
-
if (!value || typeof value
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
if (!value || typeof value !== "object") {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const proto = Object.getPrototypeOf(value);
|
|
62
|
+
const hasObjectPrototype = proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null;
|
|
63
|
+
if (!hasObjectPrototype) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return Object.prototype.toString.call(value) === "[object Object]";
|
|
59
67
|
}
|
|
68
|
+
__name(isPlainObject, "isPlainObject");
|
|
60
69
|
|
|
61
70
|
// ../../node_modules/es-toolkit/dist/compat/_internal/getSymbols.mjs
|
|
62
71
|
function getSymbols(object) {
|
|
63
72
|
return Object.getOwnPropertySymbols(object).filter((symbol) => Object.prototype.propertyIsEnumerable.call(object, symbol));
|
|
64
73
|
}
|
|
74
|
+
__name(getSymbols, "getSymbols");
|
|
65
75
|
|
|
66
76
|
// ../../node_modules/es-toolkit/dist/compat/_internal/getTag.mjs
|
|
67
77
|
function getTag(value) {
|
|
68
|
-
|
|
78
|
+
if (value == null) {
|
|
79
|
+
return value === void 0 ? "[object Undefined]" : "[object Null]";
|
|
80
|
+
}
|
|
81
|
+
return Object.prototype.toString.call(value);
|
|
69
82
|
}
|
|
83
|
+
__name(getTag, "getTag");
|
|
70
84
|
|
|
71
85
|
// ../../node_modules/es-toolkit/dist/compat/_internal/tags.mjs
|
|
72
|
-
var regexpTag = "[object RegExp]"
|
|
86
|
+
var regexpTag = "[object RegExp]";
|
|
87
|
+
var stringTag = "[object String]";
|
|
88
|
+
var numberTag = "[object Number]";
|
|
89
|
+
var booleanTag = "[object Boolean]";
|
|
90
|
+
var argumentsTag = "[object Arguments]";
|
|
91
|
+
var symbolTag = "[object Symbol]";
|
|
92
|
+
var dateTag = "[object Date]";
|
|
93
|
+
var mapTag = "[object Map]";
|
|
94
|
+
var setTag = "[object Set]";
|
|
95
|
+
var arrayTag = "[object Array]";
|
|
96
|
+
var functionTag = "[object Function]";
|
|
97
|
+
var arrayBufferTag = "[object ArrayBuffer]";
|
|
98
|
+
var objectTag = "[object Object]";
|
|
99
|
+
var errorTag = "[object Error]";
|
|
100
|
+
var dataViewTag = "[object DataView]";
|
|
101
|
+
var uint8ArrayTag = "[object Uint8Array]";
|
|
102
|
+
var uint8ClampedArrayTag = "[object Uint8ClampedArray]";
|
|
103
|
+
var uint16ArrayTag = "[object Uint16Array]";
|
|
104
|
+
var uint32ArrayTag = "[object Uint32Array]";
|
|
105
|
+
var bigUint64ArrayTag = "[object BigUint64Array]";
|
|
106
|
+
var int8ArrayTag = "[object Int8Array]";
|
|
107
|
+
var int16ArrayTag = "[object Int16Array]";
|
|
108
|
+
var int32ArrayTag = "[object Int32Array]";
|
|
109
|
+
var bigInt64ArrayTag = "[object BigInt64Array]";
|
|
110
|
+
var float32ArrayTag = "[object Float32Array]";
|
|
111
|
+
var float64ArrayTag = "[object Float64Array]";
|
|
73
112
|
|
|
74
113
|
// ../../node_modules/es-toolkit/dist/compat/util/eq.mjs
|
|
75
114
|
function eq(value, other) {
|
|
76
115
|
return value === other || Number.isNaN(value) && Number.isNaN(other);
|
|
77
116
|
}
|
|
117
|
+
__name(eq, "eq");
|
|
78
118
|
|
|
79
119
|
// ../../node_modules/es-toolkit/dist/predicate/isEqualWith.mjs
|
|
80
120
|
function isEqualWith(a, b, areValuesEqual) {
|
|
81
121
|
return isEqualWithImpl(a, b, void 0, void 0, void 0, void 0, areValuesEqual);
|
|
82
122
|
}
|
|
123
|
+
__name(isEqualWith, "isEqualWith");
|
|
83
124
|
function isEqualWithImpl(a, b, property, aParent, bParent, stack, areValuesEqual) {
|
|
84
|
-
|
|
85
|
-
if (result !== void 0)
|
|
125
|
+
const result = areValuesEqual(a, b, property, aParent, bParent, stack);
|
|
126
|
+
if (result !== void 0) {
|
|
86
127
|
return result;
|
|
87
|
-
|
|
128
|
+
}
|
|
129
|
+
if (typeof a === typeof b) {
|
|
88
130
|
switch (typeof a) {
|
|
89
131
|
case "bigint":
|
|
90
132
|
case "string":
|
|
91
133
|
case "boolean":
|
|
92
134
|
case "symbol":
|
|
93
|
-
case "undefined":
|
|
135
|
+
case "undefined": {
|
|
94
136
|
return a === b;
|
|
95
|
-
|
|
137
|
+
}
|
|
138
|
+
case "number": {
|
|
96
139
|
return a === b || Object.is(a, b);
|
|
97
|
-
|
|
140
|
+
}
|
|
141
|
+
case "function": {
|
|
98
142
|
return a === b;
|
|
99
|
-
|
|
143
|
+
}
|
|
144
|
+
case "object": {
|
|
100
145
|
return areObjectsEqual(a, b, stack, areValuesEqual);
|
|
146
|
+
}
|
|
101
147
|
}
|
|
148
|
+
}
|
|
102
149
|
return areObjectsEqual(a, b, stack, areValuesEqual);
|
|
103
150
|
}
|
|
151
|
+
__name(isEqualWithImpl, "isEqualWithImpl");
|
|
104
152
|
function areObjectsEqual(a, b, stack, areValuesEqual) {
|
|
105
|
-
if (Object.is(a, b))
|
|
106
|
-
return
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
153
|
+
if (Object.is(a, b)) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
let aTag = getTag(a);
|
|
157
|
+
let bTag = getTag(b);
|
|
158
|
+
if (aTag === argumentsTag) {
|
|
159
|
+
aTag = objectTag;
|
|
160
|
+
}
|
|
161
|
+
if (bTag === argumentsTag) {
|
|
162
|
+
bTag = objectTag;
|
|
163
|
+
}
|
|
164
|
+
if (aTag !== bTag) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
110
167
|
switch (aTag) {
|
|
111
168
|
case stringTag:
|
|
112
169
|
return a.toString() === b.toString();
|
|
113
170
|
case numberTag: {
|
|
114
|
-
|
|
171
|
+
const x = a.valueOf();
|
|
172
|
+
const y = b.valueOf();
|
|
115
173
|
return eq(x, y);
|
|
116
174
|
}
|
|
117
175
|
case booleanTag:
|
|
118
176
|
case dateTag:
|
|
119
177
|
case symbolTag:
|
|
120
178
|
return Object.is(a.valueOf(), b.valueOf());
|
|
121
|
-
case regexpTag:
|
|
179
|
+
case regexpTag: {
|
|
122
180
|
return a.source === b.source && a.flags === b.flags;
|
|
123
|
-
|
|
181
|
+
}
|
|
182
|
+
case functionTag: {
|
|
124
183
|
return a === b;
|
|
184
|
+
}
|
|
125
185
|
}
|
|
126
186
|
stack = stack ?? /* @__PURE__ */ new Map();
|
|
127
|
-
|
|
128
|
-
|
|
187
|
+
const aStack = stack.get(a);
|
|
188
|
+
const bStack = stack.get(b);
|
|
189
|
+
if (aStack != null && bStack != null) {
|
|
129
190
|
return aStack === b;
|
|
130
|
-
|
|
191
|
+
}
|
|
192
|
+
stack.set(a, b);
|
|
193
|
+
stack.set(b, a);
|
|
131
194
|
try {
|
|
132
195
|
switch (aTag) {
|
|
133
196
|
case mapTag: {
|
|
134
|
-
if (a.size !== b.size)
|
|
135
|
-
return
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
197
|
+
if (a.size !== b.size) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
for (const [key, value] of a.entries()) {
|
|
201
|
+
if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual)) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
140
206
|
}
|
|
141
207
|
case setTag: {
|
|
142
|
-
if (a.size !== b.size)
|
|
143
|
-
return
|
|
144
|
-
|
|
208
|
+
if (a.size !== b.size) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
const aValues = Array.from(a.values());
|
|
212
|
+
const bValues = Array.from(b.values());
|
|
145
213
|
for (let i = 0; i < aValues.length; i++) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return
|
|
214
|
+
const aValue = aValues[i];
|
|
215
|
+
const index = bValues.findIndex((bValue) => {
|
|
216
|
+
return isEqualWithImpl(aValue, bValue, void 0, a, b, stack, areValuesEqual);
|
|
217
|
+
});
|
|
218
|
+
if (index === -1) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
149
221
|
bValues.splice(index, 1);
|
|
150
222
|
}
|
|
151
|
-
return
|
|
223
|
+
return true;
|
|
152
224
|
}
|
|
153
225
|
case arrayTag:
|
|
154
226
|
case uint8ArrayTag:
|
|
@@ -162,106 +234,170 @@ function areObjectsEqual(a, b, stack, areValuesEqual) {
|
|
|
162
234
|
case bigInt64ArrayTag:
|
|
163
235
|
case float32ArrayTag:
|
|
164
236
|
case float64ArrayTag: {
|
|
165
|
-
if (typeof Buffer
|
|
166
|
-
return
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
237
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(a) !== Buffer.isBuffer(b)) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
if (a.length !== b.length) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
for (let i = 0; i < a.length; i++) {
|
|
244
|
+
if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual)) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
case arrayBufferTag: {
|
|
251
|
+
if (a.byteLength !== b.byteLength) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
|
|
255
|
+
}
|
|
256
|
+
case dataViewTag: {
|
|
257
|
+
if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
return areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
|
|
171
261
|
}
|
|
172
|
-
case
|
|
173
|
-
return a.byteLength !== b.byteLength ? !1 : areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
|
|
174
|
-
case dataViewTag:
|
|
175
|
-
return a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset ? !1 : areObjectsEqual(new Uint8Array(a), new Uint8Array(b), stack, areValuesEqual);
|
|
176
|
-
case errorTag:
|
|
262
|
+
case errorTag: {
|
|
177
263
|
return a.name === b.name && a.message === b.message;
|
|
264
|
+
}
|
|
178
265
|
case objectTag: {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
266
|
+
const areEqualInstances = areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) || isPlainObject(a) && isPlainObject(b);
|
|
267
|
+
if (!areEqualInstances) {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
const aKeys = [...Object.keys(a), ...getSymbols(a)];
|
|
271
|
+
const bKeys = [...Object.keys(b), ...getSymbols(b)];
|
|
272
|
+
if (aKeys.length !== bKeys.length) {
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
184
275
|
for (let i = 0; i < aKeys.length; i++) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
276
|
+
const propKey = aKeys[i];
|
|
277
|
+
const aProp = a[propKey];
|
|
278
|
+
if (!Object.hasOwn(b, propKey)) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
const bProp = b[propKey];
|
|
282
|
+
if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual)) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
191
285
|
}
|
|
192
|
-
return
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
default: {
|
|
289
|
+
return false;
|
|
193
290
|
}
|
|
194
|
-
default:
|
|
195
|
-
return !1;
|
|
196
291
|
}
|
|
197
292
|
} finally {
|
|
198
|
-
stack.delete(a)
|
|
293
|
+
stack.delete(a);
|
|
294
|
+
stack.delete(b);
|
|
199
295
|
}
|
|
200
296
|
}
|
|
297
|
+
__name(areObjectsEqual, "areObjectsEqual");
|
|
201
298
|
|
|
202
299
|
// ../../node_modules/es-toolkit/dist/predicate/isEqual.mjs
|
|
203
300
|
function isEqual(a, b) {
|
|
204
301
|
return isEqualWith(a, b, noop);
|
|
205
302
|
}
|
|
303
|
+
__name(isEqual, "isEqual");
|
|
206
304
|
|
|
207
305
|
// src/preset.ts
|
|
208
306
|
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
209
|
-
|
|
307
|
+
var import_ts_dedent = __toESM(require_dist(), 1);
|
|
210
308
|
|
|
211
309
|
// src/node/boot-test-runner.ts
|
|
212
310
|
import { fileURLToPath } from "node:url";
|
|
311
|
+
import { executeNodeCommand } from "storybook/internal/common";
|
|
213
312
|
import {
|
|
214
313
|
internal_universalStatusStore,
|
|
215
314
|
internal_universalTestProviderStore
|
|
216
315
|
} from "storybook/internal/core-server";
|
|
217
|
-
var MAX_START_TIME = 3e4
|
|
316
|
+
var MAX_START_TIME = 3e4;
|
|
317
|
+
var vitestModulePath = fileURLToPath(importMetaResolve("@storybook/addon-vitest/vitest"));
|
|
318
|
+
var eventQueue = [];
|
|
319
|
+
var child;
|
|
320
|
+
var ready = false;
|
|
321
|
+
var unsubscribeStore;
|
|
322
|
+
var unsubscribeStatusStore;
|
|
323
|
+
var unsubscribeTestProviderStore;
|
|
324
|
+
var forwardUniversalStoreEvent = /* @__PURE__ */ __name((storeEventName) => (event, eventInfo) => {
|
|
218
325
|
child?.send({
|
|
219
326
|
type: storeEventName,
|
|
220
327
|
args: [{ event, eventInfo }],
|
|
221
328
|
from: "server"
|
|
222
329
|
});
|
|
223
|
-
},
|
|
330
|
+
}, "forwardUniversalStoreEvent");
|
|
331
|
+
var bootTestRunner = /* @__PURE__ */ __name(async ({
|
|
224
332
|
channel,
|
|
225
333
|
store,
|
|
226
334
|
options
|
|
227
335
|
}) => {
|
|
228
|
-
let stderr = []
|
|
229
|
-
|
|
230
|
-
|
|
336
|
+
let stderr = [];
|
|
337
|
+
const killChild = /* @__PURE__ */ __name(() => {
|
|
338
|
+
unsubscribeStore?.();
|
|
339
|
+
unsubscribeStatusStore?.();
|
|
340
|
+
unsubscribeTestProviderStore?.();
|
|
341
|
+
child?.kill();
|
|
342
|
+
child = null;
|
|
343
|
+
}, "killChild");
|
|
231
344
|
store.subscribe("FATAL_ERROR", killChild);
|
|
232
|
-
|
|
233
|
-
killChild()
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
345
|
+
const exit = /* @__PURE__ */ __name((code = 0) => {
|
|
346
|
+
killChild();
|
|
347
|
+
eventQueue.length = 0;
|
|
348
|
+
process.exit(code);
|
|
349
|
+
}, "exit");
|
|
350
|
+
process.on("exit", exit);
|
|
351
|
+
process.on("SIGINT", () => exit(0));
|
|
352
|
+
process.on("SIGTERM", () => exit(0));
|
|
353
|
+
const startChildProcess = /* @__PURE__ */ __name(() => new Promise((resolve, reject) => {
|
|
354
|
+
child = executeNodeCommand({
|
|
355
|
+
scriptPath: vitestModulePath,
|
|
356
|
+
options: {
|
|
357
|
+
env: {
|
|
358
|
+
VITEST: "true",
|
|
359
|
+
TEST: "true",
|
|
360
|
+
VITEST_CHILD_PROCESS: "true",
|
|
361
|
+
NODE_ENV: process.env.NODE_ENV ?? "test",
|
|
362
|
+
STORYBOOK_CONFIG_DIR: normalize(options.configDir)
|
|
363
|
+
},
|
|
364
|
+
extendEnv: true
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
stderr = [];
|
|
368
|
+
child.stdout?.on("data", log);
|
|
369
|
+
child.stderr?.on("data", (data) => {
|
|
370
|
+
if (!data.toString().match(/^\u001B\[33m/)) {
|
|
371
|
+
log(data);
|
|
372
|
+
stderr.push(data.toString());
|
|
373
|
+
}
|
|
374
|
+
});
|
|
375
|
+
unsubscribeStore = store.subscribe(forwardUniversalStoreEvent(STORE_CHANNEL_EVENT_NAME));
|
|
376
|
+
unsubscribeStatusStore = internal_universalStatusStore.subscribe(
|
|
249
377
|
forwardUniversalStoreEvent(STATUS_STORE_CHANNEL_EVENT_NAME)
|
|
250
|
-
)
|
|
378
|
+
);
|
|
379
|
+
unsubscribeTestProviderStore = internal_universalTestProviderStore.subscribe(
|
|
251
380
|
forwardUniversalStoreEvent(TEST_PROVIDER_STORE_CHANNEL_EVENT_NAME)
|
|
252
|
-
)
|
|
381
|
+
);
|
|
382
|
+
child.on("message", (event) => {
|
|
253
383
|
if (event.type === "ready") {
|
|
254
|
-
|
|
255
|
-
|
|
384
|
+
while (eventQueue.length) {
|
|
385
|
+
const { type, args } = eventQueue.shift();
|
|
256
386
|
child?.send({ type, args, from: "server" });
|
|
257
387
|
}
|
|
258
388
|
resolve();
|
|
259
|
-
} else event.type === "uncaught-error"
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
389
|
+
} else if (event.type === "uncaught-error") {
|
|
390
|
+
store.send({
|
|
391
|
+
type: "FATAL_ERROR",
|
|
392
|
+
payload: event.payload
|
|
393
|
+
});
|
|
394
|
+
reject();
|
|
395
|
+
} else {
|
|
396
|
+
channel.emit(event.type, ...event.args);
|
|
397
|
+
}
|
|
263
398
|
});
|
|
264
|
-
}),
|
|
399
|
+
}), "startChildProcess");
|
|
400
|
+
const timeout = new Promise(
|
|
265
401
|
(_, reject) => setTimeout(
|
|
266
402
|
reject,
|
|
267
403
|
MAX_START_TIME,
|
|
@@ -272,7 +408,7 @@ var MAX_START_TIME = 3e4, vitestModulePath = fileURLToPath(importMetaResolve("@s
|
|
|
272
408
|
)
|
|
273
409
|
);
|
|
274
410
|
await Promise.race([startChildProcess(), timeout]).catch((error) => {
|
|
275
|
-
|
|
411
|
+
store.send({
|
|
276
412
|
type: "FATAL_ERROR",
|
|
277
413
|
payload: {
|
|
278
414
|
message: "Failed to start test runner process",
|
|
@@ -283,65 +419,91 @@ var MAX_START_TIME = 3e4, vitestModulePath = fileURLToPath(importMetaResolve("@s
|
|
|
283
419
|
cause: error.cause
|
|
284
420
|
}
|
|
285
421
|
}
|
|
286
|
-
})
|
|
422
|
+
});
|
|
423
|
+
eventQueue.length = 0;
|
|
424
|
+
throw error;
|
|
287
425
|
});
|
|
288
|
-
},
|
|
426
|
+
}, "bootTestRunner");
|
|
427
|
+
var runTestRunner = /* @__PURE__ */ __name(async ({
|
|
289
428
|
channel,
|
|
290
429
|
store,
|
|
291
430
|
initEvent,
|
|
292
431
|
initArgs,
|
|
293
432
|
options
|
|
294
433
|
}) => {
|
|
295
|
-
!ready && initEvent
|
|
296
|
-
};
|
|
434
|
+
if (!ready && initEvent) {
|
|
435
|
+
eventQueue.push({ type: initEvent, args: initArgs });
|
|
436
|
+
}
|
|
437
|
+
if (!child) {
|
|
438
|
+
ready = false;
|
|
439
|
+
await bootTestRunner({ channel, store, options });
|
|
440
|
+
ready = true;
|
|
441
|
+
}
|
|
442
|
+
}, "runTestRunner");
|
|
297
443
|
|
|
298
444
|
// src/preset.ts
|
|
299
|
-
var experimental_serverChannel = async (channel, options) => {
|
|
300
|
-
|
|
445
|
+
var experimental_serverChannel = /* @__PURE__ */ __name(async (channel, options) => {
|
|
446
|
+
const core = await options.presets.apply("core");
|
|
447
|
+
const previewPath = loadPreviewOrConfigFile({ configDir: options.configDir });
|
|
448
|
+
const previewAnnotations = await options.presets.apply(
|
|
301
449
|
"previewAnnotations",
|
|
302
450
|
[],
|
|
303
451
|
options
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
|
|
452
|
+
);
|
|
453
|
+
const resolvedPreviewBuilder = typeof core?.builder === "string" ? core.builder : core?.builder?.name;
|
|
454
|
+
const framework = await getFrameworkName(options);
|
|
455
|
+
if (!resolvedPreviewBuilder?.includes("vite")) {
|
|
456
|
+
if (framework.includes("nextjs")) {
|
|
457
|
+
log(import_ts_dedent.dedent`
|
|
307
458
|
You're using ${framework}, which is a Webpack-based builder. In order to use Storybook Test, with your project, you need to use '@storybook/nextjs-vite', a high performance Vite-based equivalent.
|
|
308
459
|
|
|
309
460
|
Information on how to upgrade here: ${import_picocolors.default.yellow("https://storybook.js.org/docs/get-started/frameworks/nextjs?ref=upgrade#with-vite")}\n
|
|
310
|
-
`)
|
|
311
|
-
|
|
461
|
+
`);
|
|
462
|
+
}
|
|
463
|
+
return channel;
|
|
464
|
+
}
|
|
465
|
+
const fsCache = createFileSystemCache({
|
|
312
466
|
basePath: resolvePathInStorybookCache(ADDON_ID.replace("/", "-")),
|
|
313
467
|
ns: "storybook",
|
|
314
|
-
ttl:
|
|
468
|
+
ttl: 14 * 24 * 60 * 60 * 1e3
|
|
315
469
|
// 14 days
|
|
316
|
-
})
|
|
470
|
+
});
|
|
471
|
+
const cachedState = await fsCache.get("state", {
|
|
317
472
|
config: storeOptions.initialState.config
|
|
318
|
-
})
|
|
473
|
+
});
|
|
474
|
+
const selectCachedState = /* @__PURE__ */ __name((s) => ({
|
|
319
475
|
config: s.config
|
|
320
|
-
}),
|
|
476
|
+
}), "selectCachedState");
|
|
477
|
+
const store = experimental_UniversalStore.create({
|
|
321
478
|
...storeOptions,
|
|
322
479
|
initialState: {
|
|
323
480
|
...storeOptions.initialState,
|
|
324
481
|
previewAnnotations: (previewAnnotations ?? []).concat(previewPath ?? []),
|
|
325
482
|
...selectCachedState(cachedState)
|
|
326
483
|
},
|
|
327
|
-
leader:
|
|
484
|
+
leader: true
|
|
328
485
|
});
|
|
329
486
|
store.onStateChange((state, previousState) => {
|
|
330
|
-
isEqual(selectCachedState(state), selectCachedState(previousState))
|
|
487
|
+
if (!isEqual(selectCachedState(state), selectCachedState(previousState))) {
|
|
488
|
+
fsCache.set("state", selectCachedState(state));
|
|
489
|
+
}
|
|
331
490
|
});
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
testProviderStore.setState("test-provider-state:running")
|
|
491
|
+
const testProviderStore = experimental_getTestProviderStore(ADDON_ID);
|
|
492
|
+
store.subscribe("TRIGGER_RUN", (event, eventInfo) => {
|
|
493
|
+
testProviderStore.setState("test-provider-state:running");
|
|
494
|
+
store.setState((s) => ({
|
|
335
495
|
...s,
|
|
336
496
|
fatalError: void 0
|
|
337
|
-
}))
|
|
497
|
+
}));
|
|
498
|
+
runTestRunner({
|
|
338
499
|
channel,
|
|
339
500
|
store,
|
|
340
501
|
initEvent: STORE_CHANNEL_EVENT_NAME,
|
|
341
502
|
initArgs: [{ event, eventInfo }],
|
|
342
503
|
options
|
|
343
504
|
});
|
|
344
|
-
})
|
|
505
|
+
});
|
|
506
|
+
store.subscribe("TOGGLE_WATCHING", (event, eventInfo) => {
|
|
345
507
|
store.setState((s) => ({
|
|
346
508
|
...s,
|
|
347
509
|
watching: event.payload.to,
|
|
@@ -352,33 +514,57 @@ var experimental_serverChannel = async (channel, options) => {
|
|
|
352
514
|
coverageSummary: void 0
|
|
353
515
|
}
|
|
354
516
|
}
|
|
355
|
-
}))
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
517
|
+
}));
|
|
518
|
+
if (event.payload.to) {
|
|
519
|
+
runTestRunner({
|
|
520
|
+
channel,
|
|
521
|
+
store,
|
|
522
|
+
initEvent: STORE_CHANNEL_EVENT_NAME,
|
|
523
|
+
initArgs: [{ event, eventInfo }],
|
|
524
|
+
options
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
});
|
|
528
|
+
store.subscribe("FATAL_ERROR", (event) => {
|
|
529
|
+
const { message, error } = event.payload;
|
|
530
|
+
const name = error.name || "Error";
|
|
531
|
+
log(`${name}: ${message}`);
|
|
532
|
+
if (error.stack) {
|
|
533
|
+
log(error.stack);
|
|
534
|
+
}
|
|
365
535
|
function logErrorWithCauses(err) {
|
|
366
|
-
|
|
536
|
+
if (!err) {
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
539
|
+
log(`Caused by: ${err.name ?? "Error"}: ${err.message}`);
|
|
540
|
+
if (err.stack) {
|
|
541
|
+
log(err.stack);
|
|
542
|
+
}
|
|
543
|
+
if (err.cause) {
|
|
544
|
+
logErrorWithCauses(err.cause);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
__name(logErrorWithCauses, "logErrorWithCauses");
|
|
548
|
+
if (error.cause) {
|
|
549
|
+
logErrorWithCauses(error.cause);
|
|
367
550
|
}
|
|
368
|
-
|
|
551
|
+
store.setState((s) => ({
|
|
369
552
|
...s,
|
|
370
553
|
fatalError: {
|
|
371
554
|
message,
|
|
372
555
|
error
|
|
373
556
|
}
|
|
374
|
-
}))
|
|
375
|
-
|
|
557
|
+
}));
|
|
558
|
+
testProviderStore.setState("test-provider-state:crashed");
|
|
559
|
+
});
|
|
560
|
+
testProviderStore.onClearAll(() => {
|
|
376
561
|
store.setState((s) => ({
|
|
377
562
|
...s,
|
|
378
563
|
currentRun: { ...s.currentRun, coverageSummary: void 0, unhandledErrors: [] }
|
|
379
564
|
}));
|
|
380
|
-
})
|
|
381
|
-
|
|
565
|
+
});
|
|
566
|
+
if (!core.disableTelemetry) {
|
|
567
|
+
const enableCrashReports = core.enableCrashReports || options.enableCrashReports;
|
|
382
568
|
channel.on(STORYBOOK_ADDON_TEST_CHANNEL, (event) => {
|
|
383
569
|
telemetry("addon-test", {
|
|
384
570
|
...event,
|
|
@@ -387,42 +573,50 @@ var experimental_serverChannel = async (channel, options) => {
|
|
|
387
573
|
storyId: oneWayHash(event.payload.storyId)
|
|
388
574
|
}
|
|
389
575
|
});
|
|
390
|
-
})
|
|
576
|
+
});
|
|
577
|
+
store.subscribe("TOGGLE_WATCHING", async (event) => {
|
|
391
578
|
await telemetry("addon-test", {
|
|
392
579
|
watchMode: event.payload.to
|
|
393
580
|
});
|
|
394
|
-
})
|
|
395
|
-
|
|
581
|
+
});
|
|
582
|
+
store.subscribe("TEST_RUN_COMPLETED", async (event) => {
|
|
583
|
+
const { unhandledErrors, startedAt, finishedAt, ...currentRun } = event.payload;
|
|
396
584
|
await telemetry("addon-test", {
|
|
397
585
|
...currentRun,
|
|
398
586
|
duration: (finishedAt ?? 0) - (startedAt ?? 0),
|
|
399
587
|
unhandledErrorCount: unhandledErrors.length,
|
|
400
588
|
...enableCrashReports && unhandledErrors.length > 0 && {
|
|
401
589
|
unhandledErrors: unhandledErrors.map((error) => {
|
|
402
|
-
|
|
590
|
+
const { stacks, ...errorWithoutStacks } = error;
|
|
403
591
|
return sanitizeError(errorWithoutStacks);
|
|
404
592
|
})
|
|
405
593
|
}
|
|
406
594
|
});
|
|
407
|
-
}), enableCrashReports && store.subscribe("FATAL_ERROR", async (event) => {
|
|
408
|
-
await telemetry("addon-test", {
|
|
409
|
-
fatalError: cleanPaths(event.payload.error.message)
|
|
410
|
-
});
|
|
411
595
|
});
|
|
596
|
+
if (enableCrashReports) {
|
|
597
|
+
store.subscribe("FATAL_ERROR", async (event) => {
|
|
598
|
+
await telemetry("addon-test", {
|
|
599
|
+
fatalError: cleanPaths(event.payload.error.message)
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
}
|
|
412
603
|
}
|
|
413
604
|
return channel;
|
|
414
|
-
},
|
|
415
|
-
|
|
605
|
+
}, "experimental_serverChannel");
|
|
606
|
+
var staticDirs = /* @__PURE__ */ __name(async (values = [], options) => {
|
|
607
|
+
if (options.configType === "PRODUCTION") {
|
|
416
608
|
return values;
|
|
417
|
-
|
|
418
|
-
|
|
609
|
+
}
|
|
610
|
+
const coverageDirectory = resolvePathInStorybookCache(COVERAGE_DIRECTORY);
|
|
611
|
+
await mkdir(coverageDirectory, { recursive: true });
|
|
612
|
+
return [
|
|
419
613
|
{
|
|
420
614
|
from: coverageDirectory,
|
|
421
615
|
to: "/coverage"
|
|
422
616
|
},
|
|
423
617
|
...values
|
|
424
618
|
];
|
|
425
|
-
};
|
|
619
|
+
}, "staticDirs");
|
|
426
620
|
export {
|
|
427
621
|
experimental_serverChannel,
|
|
428
622
|
staticDirs
|