@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/preset.js CHANGED
@@ -1,10 +1,10 @@
1
- import CJS_COMPAT_NODE_URL_oycy7mg2pm from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_oycy7mg2pm from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_oycy7mg2pm from "node:module";
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 = CJS_COMPAT_NODE_URL_oycy7mg2pm.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_oycy7mg2pm.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_oycy7mg2pm.createRequire(import.meta.url);
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-MQUBKGKA.js";
15
+ } from "./_node-chunks/chunk-AKC4U5HL.js";
16
16
  import {
17
- execaNode,
18
17
  importMetaResolve
19
- } from "./_node-chunks/chunk-3JME42XS.js";
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-RIAV333R.js";
27
+ } from "./_node-chunks/chunk-X4AEIMZO.js";
29
28
  import {
30
29
  require_picocolors
31
- } from "./_node-chunks/chunk-PI4OHO3O.js";
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-SNWBLFHL.js";
36
+ } from "./_node-chunks/chunk-KSSAW7TR.js";
35
37
  import {
38
+ __name,
36
39
  __toESM
37
- } from "./_node-chunks/chunk-HCCHV65D.js";
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 != "object")
56
- return !1;
57
- let proto = Object.getPrototypeOf(value);
58
- return proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null ? Object.prototype.toString.call(value) === "[object Object]" : !1;
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
- return value == null ? value === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(value);
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]", stringTag = "[object String]", numberTag = "[object Number]", booleanTag = "[object Boolean]", argumentsTag = "[object Arguments]", symbolTag = "[object Symbol]", dateTag = "[object Date]", mapTag = "[object Map]", setTag = "[object Set]", arrayTag = "[object Array]", functionTag = "[object Function]", arrayBufferTag = "[object ArrayBuffer]", objectTag = "[object Object]", errorTag = "[object Error]", dataViewTag = "[object DataView]", uint8ArrayTag = "[object Uint8Array]", uint8ClampedArrayTag = "[object Uint8ClampedArray]", uint16ArrayTag = "[object Uint16Array]", uint32ArrayTag = "[object Uint32Array]", bigUint64ArrayTag = "[object BigUint64Array]", int8ArrayTag = "[object Int8Array]", int16ArrayTag = "[object Int16Array]", int32ArrayTag = "[object Int32Array]", bigInt64ArrayTag = "[object BigInt64Array]", float32ArrayTag = "[object Float32Array]", float64ArrayTag = "[object Float64Array]";
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
- let result = areValuesEqual(a, b, property, aParent, bParent, stack);
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
- if (typeof a == typeof b)
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
- case "number":
137
+ }
138
+ case "number": {
96
139
  return a === b || Object.is(a, b);
97
- case "function":
140
+ }
141
+ case "function": {
98
142
  return a === b;
99
- case "object":
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 !0;
107
- let aTag = getTag(a), bTag = getTag(b);
108
- if (aTag === argumentsTag && (aTag = objectTag), bTag === argumentsTag && (bTag = objectTag), aTag !== bTag)
109
- return !1;
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
- let x = a.valueOf(), y = b.valueOf();
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
- case functionTag:
181
+ }
182
+ case functionTag: {
124
183
  return a === b;
184
+ }
125
185
  }
126
186
  stack = stack ?? /* @__PURE__ */ new Map();
127
- let aStack = stack.get(a), bStack = stack.get(b);
128
- if (aStack != null && bStack != null)
187
+ const aStack = stack.get(a);
188
+ const bStack = stack.get(b);
189
+ if (aStack != null && bStack != null) {
129
190
  return aStack === b;
130
- stack.set(a, b), stack.set(b, a);
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 !1;
136
- for (let [key, value] of a.entries())
137
- if (!b.has(key) || !isEqualWithImpl(value, b.get(key), key, a, b, stack, areValuesEqual))
138
- return !1;
139
- return !0;
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 !1;
144
- let aValues = Array.from(a.values()), bValues = Array.from(b.values());
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
- let aValue = aValues[i], index = bValues.findIndex((bValue) => isEqualWithImpl(aValue, bValue, void 0, a, b, stack, areValuesEqual));
147
- if (index === -1)
148
- return !1;
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 !0;
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 < "u" && Buffer.isBuffer(a) !== Buffer.isBuffer(b) || a.length !== b.length)
166
- return !1;
167
- for (let i = 0; i < a.length; i++)
168
- if (!isEqualWithImpl(a[i], b[i], i, a, b, stack, areValuesEqual))
169
- return !1;
170
- return !0;
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 arrayBufferTag:
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
- if (!(areObjectsEqual(a.constructor, b.constructor, stack, areValuesEqual) || isPlainObject(a) && isPlainObject(b)))
180
- return !1;
181
- let aKeys = [...Object.keys(a), ...getSymbols(a)], bKeys = [...Object.keys(b), ...getSymbols(b)];
182
- if (aKeys.length !== bKeys.length)
183
- return !1;
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
- let propKey = aKeys[i], aProp = a[propKey];
186
- if (!Object.hasOwn(b, propKey))
187
- return !1;
188
- let bProp = b[propKey];
189
- if (!isEqualWithImpl(aProp, bProp, propKey, a, b, stack, areValuesEqual))
190
- return !1;
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 !0;
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), stack.delete(b);
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
- import { dedent } from "ts-dedent";
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, vitestModulePath = fileURLToPath(importMetaResolve("@storybook/addon-vitest/vitest")), eventQueue = [], child, ready = !1, unsubscribeStore, unsubscribeStatusStore, unsubscribeTestProviderStore, forwardUniversalStoreEvent = (storeEventName) => (event, eventInfo) => {
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
- }, bootTestRunner = async ({
330
+ }, "forwardUniversalStoreEvent");
331
+ var bootTestRunner = /* @__PURE__ */ __name(async ({
224
332
  channel,
225
333
  store,
226
334
  options
227
335
  }) => {
228
- let stderr = [], killChild = () => {
229
- unsubscribeStore?.(), unsubscribeStatusStore?.(), unsubscribeTestProviderStore?.(), child?.kill(), child = null;
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
- let exit = (code = 0) => {
233
- killChild(), eventQueue.length = 0, process.exit(code);
234
- };
235
- process.on("exit", exit), process.on("SIGINT", () => exit(0)), process.on("SIGTERM", () => exit(0));
236
- let startChildProcess = () => new Promise((resolve, reject) => {
237
- child = execaNode(vitestModulePath, {
238
- env: {
239
- VITEST: "true",
240
- TEST: "true",
241
- VITEST_CHILD_PROCESS: "true",
242
- NODE_ENV: process.env.NODE_ENV ?? "test",
243
- STORYBOOK_CONFIG_DIR: normalize(options.configDir)
244
- },
245
- extendEnv: !0
246
- }), stderr = [], child.stdout?.on("data", log), child.stderr?.on("data", (data) => {
247
- data.toString().match(/^\u001B\[33m/) || (log(data), stderr.push(data.toString()));
248
- }), unsubscribeStore = store.subscribe(forwardUniversalStoreEvent(STORE_CHANNEL_EVENT_NAME)), unsubscribeStatusStore = internal_universalStatusStore.subscribe(
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
- ), unsubscribeTestProviderStore = internal_universalTestProviderStore.subscribe(
378
+ );
379
+ unsubscribeTestProviderStore = internal_universalTestProviderStore.subscribe(
251
380
  forwardUniversalStoreEvent(TEST_PROVIDER_STORE_CHANNEL_EVENT_NAME)
252
- ), child.on("message", (event) => {
381
+ );
382
+ child.on("message", (event) => {
253
383
  if (event.type === "ready") {
254
- for (; eventQueue.length; ) {
255
- let { type, args } = eventQueue.shift();
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" ? (store.send({
260
- type: "FATAL_ERROR",
261
- payload: event.payload
262
- }), reject()) : channel.emit(event.type, ...event.args);
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
- }), timeout = new Promise(
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
- throw store.send({
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
- }), eventQueue.length = 0, error;
422
+ });
423
+ eventQueue.length = 0;
424
+ throw error;
287
425
  });
288
- }, runTestRunner = async ({
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 && eventQueue.push({ type: initEvent, args: initArgs }), child || (ready = !1, await bootTestRunner({ channel, store, options }), ready = !0);
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
- let core = await options.presets.apply("core"), previewPath = loadPreviewOrConfigFile({ configDir: options.configDir }), previewAnnotations = await options.presets.apply(
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
- ), resolvedPreviewBuilder = typeof core?.builder == "string" ? core.builder : core?.builder?.name, framework = await getFrameworkName(options);
305
- if (!resolvedPreviewBuilder?.includes("vite"))
306
- return framework.includes("nextjs") && log(dedent`
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
- `), channel;
311
- let fsCache = createFileSystemCache({
461
+ `);
462
+ }
463
+ return channel;
464
+ }
465
+ const fsCache = createFileSystemCache({
312
466
  basePath: resolvePathInStorybookCache(ADDON_ID.replace("/", "-")),
313
467
  ns: "storybook",
314
- ttl: 336 * 60 * 60 * 1e3
468
+ ttl: 14 * 24 * 60 * 60 * 1e3
315
469
  // 14 days
316
- }), cachedState = await fsCache.get("state", {
470
+ });
471
+ const cachedState = await fsCache.get("state", {
317
472
  config: storeOptions.initialState.config
318
- }), selectCachedState = (s) => ({
473
+ });
474
+ const selectCachedState = /* @__PURE__ */ __name((s) => ({
319
475
  config: s.config
320
- }), store = experimental_UniversalStore.create({
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: !0
484
+ leader: true
328
485
  });
329
486
  store.onStateChange((state, previousState) => {
330
- isEqual(selectCachedState(state), selectCachedState(previousState)) || fsCache.set("state", selectCachedState(state));
487
+ if (!isEqual(selectCachedState(state), selectCachedState(previousState))) {
488
+ fsCache.set("state", selectCachedState(state));
489
+ }
331
490
  });
332
- let testProviderStore = experimental_getTestProviderStore(ADDON_ID);
333
- if (store.subscribe("TRIGGER_RUN", (event, eventInfo) => {
334
- testProviderStore.setState("test-provider-state:running"), store.setState((s) => ({
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
- })), runTestRunner({
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
- }), store.subscribe("TOGGLE_WATCHING", (event, eventInfo) => {
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
- })), event.payload.to && runTestRunner({
356
- channel,
357
- store,
358
- initEvent: STORE_CHANNEL_EVENT_NAME,
359
- initArgs: [{ event, eventInfo }],
360
- options
361
- });
362
- }), store.subscribe("FATAL_ERROR", (event) => {
363
- let { message, error } = event.payload, name = error.name || "Error";
364
- log(`${name}: ${message}`), error.stack && log(error.stack);
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
- err && (log(`Caused by: ${err.name ?? "Error"}: ${err.message}`), err.stack && log(err.stack), err.cause && logErrorWithCauses(err.cause));
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
- error.cause && logErrorWithCauses(error.cause), store.setState((s) => ({
551
+ store.setState((s) => ({
369
552
  ...s,
370
553
  fatalError: {
371
554
  message,
372
555
  error
373
556
  }
374
- })), testProviderStore.setState("test-provider-state:crashed");
375
- }), testProviderStore.onClearAll(() => {
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
- }), !core.disableTelemetry) {
381
- let enableCrashReports = core.enableCrashReports || options.enableCrashReports;
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
- }), store.subscribe("TOGGLE_WATCHING", async (event) => {
576
+ });
577
+ store.subscribe("TOGGLE_WATCHING", async (event) => {
391
578
  await telemetry("addon-test", {
392
579
  watchMode: event.payload.to
393
580
  });
394
- }), store.subscribe("TEST_RUN_COMPLETED", async (event) => {
395
- let { unhandledErrors, startedAt, finishedAt, ...currentRun } = event.payload;
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
- let { stacks, ...errorWithoutStacks } = error;
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
- }, staticDirs = async (values = [], options) => {
415
- if (options.configType === "PRODUCTION")
605
+ }, "experimental_serverChannel");
606
+ var staticDirs = /* @__PURE__ */ __name(async (values = [], options) => {
607
+ if (options.configType === "PRODUCTION") {
416
608
  return values;
417
- let coverageDirectory = resolvePathInStorybookCache(COVERAGE_DIRECTORY);
418
- return await mkdir(coverageDirectory, { recursive: !0 }), [
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