@unotest/web 0.44.0 → 0.46.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.
@@ -42,10 +42,10 @@ declare const RetryConfigSchema: z.ZodObject<{
42
42
  on: z.ZodArray<z.ZodEnum<["transient", "network", "crash"]>, "many">;
43
43
  }, "strict", z.ZodTypeAny, {
44
44
  count: number;
45
- on: ("network" | "transient" | "crash")[];
45
+ on: ("transient" | "network" | "crash")[];
46
46
  }, {
47
47
  count: number;
48
- on: ("network" | "transient" | "crash")[];
48
+ on: ("transient" | "network" | "crash")[];
49
49
  }>;
50
50
  type RetryConfig = z.infer<typeof RetryConfigSchema>;
51
51
  declare const FailureBundleConfigSchema: z.ZodObject<{
@@ -109,19 +109,19 @@ declare const FailureBundleConfigSchema: z.ZodObject<{
109
109
  type FailureBundleConfig = z.infer<typeof FailureBundleConfigSchema>;
110
110
  declare const DialogPolicySchema: z.ZodEnum<["accept", "dismiss", "manual"]>;
111
111
  type DialogPolicy = z.infer<typeof DialogPolicySchema>;
112
- declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>;
112
+ declare const LinterRuleIdSchema: z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "lint:skip-outside-test", "lint:set-test-timeout-outside-test", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>;
113
113
  type LinterRuleId = z.infer<typeof LinterRuleIdSchema>;
114
114
  declare const LinterSeveritySchema: z.ZodEnum<["off", "warn", "error"]>;
115
115
  type LinterSeverity = z.infer<typeof LinterSeveritySchema>;
116
116
  declare const LinterConfigSchema: z.ZodObject<{
117
117
  enabled: z.ZodBoolean;
118
- rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
118
+ rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "lint:skip-outside-test", "lint:set-test-timeout-outside-test", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
119
119
  }, "strict", z.ZodTypeAny, {
120
120
  enabled: boolean;
121
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
121
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
122
122
  }, {
123
123
  enabled: boolean;
124
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
124
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
125
125
  }>;
126
126
  type LinterConfig = z.infer<typeof LinterConfigSchema>;
127
127
  declare const QueueConfigSchema: z.ZodObject<{
@@ -201,6 +201,11 @@ declare const SandboxConfigSchema: z.ZodObject<{
201
201
  * against it and may not escape it. Defaults to the project root
202
202
  * (the runner's cwd). */
203
203
  uploadDir: z.ZodOptional<z.ZodString>;
204
+ /** More directories a scenario may read files from, beside the project
205
+ * and the run's downloads: `readFile`, `waitForFile` and the other file
206
+ * oracles. For a file a background process writes outside the project.
207
+ * Relative entries resolve against `shellCwd`. */
208
+ readRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
204
209
  }, "strict", z.ZodTypeAny, {
205
210
  shellCwd?: string | undefined;
206
211
  shellTimeoutMs?: number | undefined;
@@ -208,6 +213,7 @@ declare const SandboxConfigSchema: z.ZodObject<{
208
213
  database?: string | undefined;
209
214
  apiBaseUrl?: string | undefined;
210
215
  uploadDir?: string | undefined;
216
+ readRoots?: string[] | undefined;
211
217
  }, {
212
218
  shellCwd?: string | undefined;
213
219
  shellTimeoutMs?: number | undefined;
@@ -215,6 +221,7 @@ declare const SandboxConfigSchema: z.ZodObject<{
215
221
  database?: string | undefined;
216
222
  apiBaseUrl?: string | undefined;
217
223
  uploadDir?: string | undefined;
224
+ readRoots?: string[] | undefined;
218
225
  }>;
219
226
  type SandboxConfig = z.infer<typeof SandboxConfigSchema>;
220
227
  declare const WebServerConfigSchema: z.ZodObject<{
@@ -234,17 +241,104 @@ declare const WebServerConfigSchema: z.ZodObject<{
234
241
  /** How long to wait for the URL to come up after spawning. */
235
242
  timeoutMs: z.ZodDefault<z.ZodNumber>;
236
243
  }, "strict", z.ZodTypeAny, {
244
+ command: string;
245
+ url: string;
246
+ reuseExistingServer: boolean;
247
+ timeoutMs: number;
248
+ }, {
249
+ command: string;
250
+ url: string;
251
+ reuseExistingServer?: boolean | undefined;
252
+ timeoutMs?: number | undefined;
253
+ }>;
254
+ type WebServerConfig = z.infer<typeof WebServerConfigSchema>;
255
+ /** `webServer`: one server, or several (a front and its fake backends),
256
+ * each with its own readiness URL. Always a list once parsed, so no
257
+ * consumer asks which form it got. Two entries on one URL would probe
258
+ * the same server twice and start neither for sure — refused. */
259
+ declare const WebServersConfigSchema: z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodObject<{
260
+ /** Shell command that starts the app under test (`npm run dev`,
261
+ * `python manage.py runserver`, …). Runs in the user's shell from the
262
+ * project root. */
263
+ command: z.ZodString;
264
+ /** URL probed for readiness — any HTTP response counts as up. Usually
265
+ * equals `baseUrl`; declared explicitly because a dev server may
266
+ * answer on a different path/port than the tests navigate to. */
267
+ url: z.ZodString;
268
+ /** When the URL is already up, reuse that server instead of spawning a
269
+ * second one (default true — covers a dev server the user or the
270
+ * viewer already started). `false` makes an occupied URL an error,
271
+ * Playwright-style for CI strictness. */
272
+ reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
273
+ /** How long to wait for the URL to come up after spawning. */
274
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
275
+ }, "strict", z.ZodTypeAny, {
276
+ command: string;
237
277
  url: string;
278
+ reuseExistingServer: boolean;
238
279
  timeoutMs: number;
280
+ }, {
281
+ command: string;
282
+ url: string;
283
+ reuseExistingServer?: boolean | undefined;
284
+ timeoutMs?: number | undefined;
285
+ }>, z.ZodArray<z.ZodObject<{
286
+ /** Shell command that starts the app under test (`npm run dev`,
287
+ * `python manage.py runserver`, …). Runs in the user's shell from the
288
+ * project root. */
289
+ command: z.ZodString;
290
+ /** URL probed for readiness — any HTTP response counts as up. Usually
291
+ * equals `baseUrl`; declared explicitly because a dev server may
292
+ * answer on a different path/port than the tests navigate to. */
293
+ url: z.ZodString;
294
+ /** When the URL is already up, reuse that server instead of spawning a
295
+ * second one (default true — covers a dev server the user or the
296
+ * viewer already started). `false` makes an occupied URL an error,
297
+ * Playwright-style for CI strictness. */
298
+ reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
299
+ /** How long to wait for the URL to come up after spawning. */
300
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
301
+ }, "strict", z.ZodTypeAny, {
239
302
  command: string;
303
+ url: string;
240
304
  reuseExistingServer: boolean;
305
+ timeoutMs: number;
241
306
  }, {
307
+ command: string;
308
+ url: string;
309
+ reuseExistingServer?: boolean | undefined;
310
+ timeoutMs?: number | undefined;
311
+ }>, "many">]>, {
312
+ command: string;
313
+ url: string;
314
+ reuseExistingServer: boolean;
315
+ timeoutMs: number;
316
+ }[], {
317
+ command: string;
318
+ url: string;
319
+ reuseExistingServer?: boolean | undefined;
320
+ timeoutMs?: number | undefined;
321
+ } | {
322
+ command: string;
242
323
  url: string;
324
+ reuseExistingServer?: boolean | undefined;
325
+ timeoutMs?: number | undefined;
326
+ }[]>, {
327
+ command: string;
328
+ url: string;
329
+ reuseExistingServer: boolean;
330
+ timeoutMs: number;
331
+ }[], {
243
332
  command: string;
333
+ url: string;
334
+ reuseExistingServer?: boolean | undefined;
244
335
  timeoutMs?: number | undefined;
336
+ } | {
337
+ command: string;
338
+ url: string;
245
339
  reuseExistingServer?: boolean | undefined;
246
- }>;
247
- type WebServerConfig = z.infer<typeof WebServerConfigSchema>;
340
+ timeoutMs?: number | undefined;
341
+ }[]>;
248
342
  declare const EnvConfigSchema: z.ZodObject<{
249
343
  /** Variable names whose base `.env` value is deliberately shared by
250
344
  * every environment. Only names that become a HOST are checked, so
@@ -256,13 +350,13 @@ declare const EnvConfigSchema: z.ZodObject<{
256
350
  shared?: string[] | undefined;
257
351
  }>;
258
352
  type EnvConfig = z.infer<typeof EnvConfigSchema>;
259
- declare const UnotestConfigSchema: z.ZodObject<{
353
+ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
260
354
  baseUrl: z.ZodOptional<z.ZodString>;
261
355
  /** Dev-server lifecycle for the app under test (M-12). Unset → the app
262
356
  * is expected to be running already (current behaviour). When set, the
263
357
  * CLI ensures it per run; `npx @unotest/web app-server` / the viewer
264
358
  * hold a long-lived instance and runs then reuse it. */
265
- webServer: z.ZodOptional<z.ZodObject<{
359
+ webServer: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodObject<{
266
360
  /** Shell command that starts the app under test (`npm run dev`,
267
361
  * `python manage.py runserver`, …). Runs in the user's shell from the
268
362
  * project root. */
@@ -279,19 +373,75 @@ declare const UnotestConfigSchema: z.ZodObject<{
279
373
  /** How long to wait for the URL to come up after spawning. */
280
374
  timeoutMs: z.ZodDefault<z.ZodNumber>;
281
375
  }, "strict", z.ZodTypeAny, {
376
+ command: string;
282
377
  url: string;
378
+ reuseExistingServer: boolean;
283
379
  timeoutMs: number;
380
+ }, {
381
+ command: string;
382
+ url: string;
383
+ reuseExistingServer?: boolean | undefined;
384
+ timeoutMs?: number | undefined;
385
+ }>, z.ZodArray<z.ZodObject<{
386
+ /** Shell command that starts the app under test (`npm run dev`,
387
+ * `python manage.py runserver`, …). Runs in the user's shell from the
388
+ * project root. */
389
+ command: z.ZodString;
390
+ /** URL probed for readiness — any HTTP response counts as up. Usually
391
+ * equals `baseUrl`; declared explicitly because a dev server may
392
+ * answer on a different path/port than the tests navigate to. */
393
+ url: z.ZodString;
394
+ /** When the URL is already up, reuse that server instead of spawning a
395
+ * second one (default true — covers a dev server the user or the
396
+ * viewer already started). `false` makes an occupied URL an error,
397
+ * Playwright-style for CI strictness. */
398
+ reuseExistingServer: z.ZodDefault<z.ZodBoolean>;
399
+ /** How long to wait for the URL to come up after spawning. */
400
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
401
+ }, "strict", z.ZodTypeAny, {
284
402
  command: string;
403
+ url: string;
285
404
  reuseExistingServer: boolean;
405
+ timeoutMs: number;
286
406
  }, {
407
+ command: string;
408
+ url: string;
409
+ reuseExistingServer?: boolean | undefined;
410
+ timeoutMs?: number | undefined;
411
+ }>, "many">]>, {
412
+ command: string;
287
413
  url: string;
414
+ reuseExistingServer: boolean;
415
+ timeoutMs: number;
416
+ }[], {
288
417
  command: string;
418
+ url: string;
419
+ reuseExistingServer?: boolean | undefined;
289
420
  timeoutMs?: number | undefined;
421
+ } | {
422
+ command: string;
423
+ url: string;
290
424
  reuseExistingServer?: boolean | undefined;
291
- }>>;
425
+ timeoutMs?: number | undefined;
426
+ }[]>, {
427
+ command: string;
428
+ url: string;
429
+ reuseExistingServer: boolean;
430
+ timeoutMs: number;
431
+ }[], {
432
+ command: string;
433
+ url: string;
434
+ reuseExistingServer?: boolean | undefined;
435
+ timeoutMs?: number | undefined;
436
+ } | {
437
+ command: string;
438
+ url: string;
439
+ reuseExistingServer?: boolean | undefined;
440
+ timeoutMs?: number | undefined;
441
+ }[]>>;
292
442
  browsers: z.ZodArray<z.ZodEnum<["chromium", "firefox", "webkit"]>, "many">;
293
443
  channel: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["chrome", "msedge", "chrome-beta", "chromium"]>, z.ZodEffects<z.ZodLiteral<"bundled">, null, "bundled">, z.ZodNull]>>;
294
- viewport: z.ZodOptional<z.ZodObject<{
444
+ viewport: z.ZodOptional<z.ZodNullable<z.ZodObject<{
295
445
  width: z.ZodOptional<z.ZodNumber>;
296
446
  height: z.ZodOptional<z.ZodNumber>;
297
447
  /** CSS pixel → device pixel ratio: 2 makes a 390×844 page a 780×1688
@@ -305,7 +455,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
305
455
  width?: number | undefined;
306
456
  height?: number | undefined;
307
457
  deviceScaleFactor?: number | undefined;
308
- }>>;
458
+ }>>>;
309
459
  /** A device preset by its Playwright name (`"iPhone 14"`, `"Pixel 7"`):
310
460
  * size, scale, touch, mobile mode and user agent at once. `viewport`
311
461
  * next to it overrides the preset's size. The name is checked by the
@@ -329,23 +479,26 @@ declare const UnotestConfigSchema: z.ZodObject<{
329
479
  * context per scenario. */
330
480
  launch: z.ZodOptional<z.ZodObject<{
331
481
  userDataDir: z.ZodOptional<z.ZodString>;
482
+ profile: z.ZodOptional<z.ZodLiteral<"per-test">>;
332
483
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
333
484
  }, "strict", z.ZodTypeAny, {
334
- args?: string[] | undefined;
335
485
  userDataDir?: string | undefined;
336
- }, {
486
+ profile?: "per-test" | undefined;
337
487
  args?: string[] | undefined;
488
+ }, {
338
489
  userDataDir?: string | undefined;
490
+ profile?: "per-test" | undefined;
491
+ args?: string[] | undefined;
339
492
  }>>;
340
493
  retry: z.ZodObject<{
341
494
  count: z.ZodNumber;
342
495
  on: z.ZodArray<z.ZodEnum<["transient", "network", "crash"]>, "many">;
343
496
  }, "strict", z.ZodTypeAny, {
344
497
  count: number;
345
- on: ("network" | "transient" | "crash")[];
498
+ on: ("transient" | "network" | "crash")[];
346
499
  }, {
347
500
  count: number;
348
- on: ("network" | "transient" | "crash")[];
501
+ on: ("transient" | "network" | "crash")[];
349
502
  }>;
350
503
  failureBundle: z.ZodObject<{
351
504
  /** Tier 1 is always on by D-16. Schema lock — not user-toggleable. */
@@ -432,6 +585,11 @@ declare const UnotestConfigSchema: z.ZodObject<{
432
585
  * Unset → 60000. A pass cut by it leaves the rest of the stand as the
433
586
  * test set it, and the run result says which blocks did not finish. */
434
587
  teardownTimeoutMs: z.ZodOptional<z.ZodNumber>;
588
+ /** Wall-clock budget of one test, a deadline: an action still running
589
+ * when it runs out is cut there and the test fails, its teardown blocks
590
+ * still play. Unset → 300000. `UNOTEST_MAX_DURATION_MS` overrides it for
591
+ * a run; `setTestTimeout(ms)` inside a test overrides both for that test. */
592
+ testTimeoutMs: z.ZodOptional<z.ZodNumber>;
435
593
  /** Cross-environment declarations (`.env.<name>` overlays). */
436
594
  env: z.ZodObject<{
437
595
  /** Variable names whose base `.env` value is deliberately shared by
@@ -445,13 +603,13 @@ declare const UnotestConfigSchema: z.ZodObject<{
445
603
  }>;
446
604
  linter: z.ZodObject<{
447
605
  enabled: z.ZodBoolean;
448
- rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
606
+ rules: z.ZodRecord<z.ZodEnum<["lint:deep-css", "lint:xpath", "lint:obfuscated-class", "lint:pause-explicit", "lint:disambig-by-index", "lint:evaluate-discouraged", "lint:scenario-in-root", "lint:mustache-in-dsl", "lint:goto-concat", "lint:regex-invalid", "lint:echo-assert", "lint:api-call-file-body", "lint:lint-ok-missing-reason", "lint:flow-returns-value", "lint:legacy-layout", "lint:external-variable-undeclared", "lint:env-host-from-base", "lint:one-test-per-file", "lint:shadows-dsl-function", "lint:skip-outside-test", "lint:set-test-timeout-outside-test", "validator:unknown-function", "validator:arity", "validator:arg-kind", "validator:step-coverage", "validator:step-shape", "validator:meta-shape", "validator:function-shape", "validator:for-shape", "validator:if-shape", "validator:var-shape", "validator:unsupported-statement", "validator:unsupported-expression", "validator:string-concat", "validator:semantic-loss", "validator:list-arg", "validator:wrapped-format"]>, z.ZodEnum<["off", "warn", "error"]>>;
449
607
  }, "strict", z.ZodTypeAny, {
450
608
  enabled: boolean;
451
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
609
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
452
610
  }, {
453
611
  enabled: boolean;
454
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
612
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
455
613
  }>;
456
614
  mcp: z.ZodObject<{
457
615
  transport: z.ZodLiteral<"stdio">;
@@ -528,6 +686,11 @@ declare const UnotestConfigSchema: z.ZodObject<{
528
686
  * against it and may not escape it. Defaults to the project root
529
687
  * (the runner's cwd). */
530
688
  uploadDir: z.ZodOptional<z.ZodString>;
689
+ /** More directories a scenario may read files from, beside the project
690
+ * and the run's downloads: `readFile`, `waitForFile` and the other file
691
+ * oracles. For a file a background process writes outside the project.
692
+ * Relative entries resolve against `shellCwd`. */
693
+ readRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
531
694
  }, "strict", z.ZodTypeAny, {
532
695
  shellCwd?: string | undefined;
533
696
  shellTimeoutMs?: number | undefined;
@@ -535,6 +698,7 @@ declare const UnotestConfigSchema: z.ZodObject<{
535
698
  database?: string | undefined;
536
699
  apiBaseUrl?: string | undefined;
537
700
  uploadDir?: string | undefined;
701
+ readRoots?: string[] | undefined;
538
702
  }, {
539
703
  shellCwd?: string | undefined;
540
704
  shellTimeoutMs?: number | undefined;
@@ -542,14 +706,16 @@ declare const UnotestConfigSchema: z.ZodObject<{
542
706
  database?: string | undefined;
543
707
  apiBaseUrl?: string | undefined;
544
708
  uploadDir?: string | undefined;
709
+ readRoots?: string[] | undefined;
545
710
  }>;
546
711
  }, "strict", z.ZodTypeAny, {
547
- defaultTimeoutMs: number;
548
- defaultNavigationTimeoutMs: number;
712
+ env: {
713
+ shared: string[];
714
+ };
549
715
  browsers: ("chromium" | "firefox" | "webkit")[];
550
716
  retry: {
551
717
  count: number;
552
- on: ("network" | "transient" | "crash")[];
718
+ on: ("transient" | "network" | "crash")[];
553
719
  };
554
720
  failureBundle: {
555
721
  tier1: true;
@@ -568,12 +734,11 @@ declare const UnotestConfigSchema: z.ZodObject<{
568
734
  dialogPolicy: "accept" | "dismiss" | "manual";
569
735
  testDir: string;
570
736
  helpersDir: string;
571
- env: {
572
- shared: string[];
573
- };
737
+ defaultTimeoutMs: number;
738
+ defaultNavigationTimeoutMs: number;
574
739
  linter: {
575
740
  enabled: boolean;
576
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
741
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
577
742
  };
578
743
  mcp: {
579
744
  transport: "stdio";
@@ -595,39 +760,128 @@ declare const UnotestConfigSchema: z.ZodObject<{
595
760
  database?: string | undefined;
596
761
  apiBaseUrl?: string | undefined;
597
762
  uploadDir?: string | undefined;
763
+ readRoots?: string[] | undefined;
598
764
  };
599
- locale?: string | undefined;
600
- timezone?: string | undefined;
601
765
  baseUrl?: string | undefined;
602
766
  webServer?: {
603
- url: string;
604
- timeoutMs: number;
605
767
  command: string;
768
+ url: string;
606
769
  reuseExistingServer: boolean;
607
- } | undefined;
608
- channel?: "chrome" | "msedge" | "chrome-beta" | "chromium" | null | undefined;
770
+ timeoutMs: number;
771
+ }[] | undefined;
772
+ channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | null | undefined;
609
773
  viewport?: {
610
774
  width?: number | undefined;
611
775
  height?: number | undefined;
612
776
  deviceScaleFactor?: number | undefined;
613
- } | undefined;
777
+ } | null | undefined;
614
778
  device?: string | undefined;
779
+ timezone?: string | undefined;
780
+ locale?: string | undefined;
615
781
  maxContexts?: number | undefined;
616
782
  launch?: {
617
- args?: string[] | undefined;
618
783
  userDataDir?: string | undefined;
784
+ profile?: "per-test" | undefined;
785
+ args?: string[] | undefined;
619
786
  } | undefined;
620
787
  storageState?: string | undefined;
621
788
  teardownTimeoutMs?: number | undefined;
789
+ testTimeoutMs?: number | undefined;
622
790
  }, {
791
+ env: {
792
+ shared?: string[] | undefined;
793
+ };
794
+ browsers: ("chromium" | "firefox" | "webkit")[];
795
+ retry: {
796
+ count: number;
797
+ on: ("transient" | "network" | "crash")[];
798
+ };
799
+ failureBundle: {
800
+ tier2: boolean;
801
+ tier3: {
802
+ network: boolean;
803
+ video: boolean;
804
+ };
805
+ retention: {
806
+ runs: number;
807
+ days: number;
808
+ };
809
+ storageDir: string;
810
+ pageHtml: "redacted" | "full";
811
+ tier1?: true | undefined;
812
+ };
813
+ dialogPolicy: "accept" | "dismiss" | "manual";
814
+ testDir: string;
815
+ helpersDir: string;
623
816
  defaultTimeoutMs: number;
624
817
  defaultNavigationTimeoutMs: number;
818
+ linter: {
819
+ enabled: boolean;
820
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
821
+ };
822
+ mcp: {
823
+ transport: "stdio";
824
+ };
825
+ queue: {
826
+ enabled?: boolean | undefined;
827
+ concurrency?: number | undefined;
828
+ };
829
+ sandbox: {
830
+ shellCwd?: string | undefined;
831
+ shellTimeoutMs?: number | undefined;
832
+ exportSecrets?: string[] | undefined;
833
+ database?: string | undefined;
834
+ apiBaseUrl?: string | undefined;
835
+ uploadDir?: string | undefined;
836
+ readRoots?: string[] | undefined;
837
+ };
838
+ baseUrl?: string | undefined;
839
+ webServer?: {
840
+ command: string;
841
+ url: string;
842
+ reuseExistingServer?: boolean | undefined;
843
+ timeoutMs?: number | undefined;
844
+ } | {
845
+ command: string;
846
+ url: string;
847
+ reuseExistingServer?: boolean | undefined;
848
+ timeoutMs?: number | undefined;
849
+ }[] | undefined;
850
+ channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | "bundled" | null | undefined;
851
+ viewport?: {
852
+ width?: number | undefined;
853
+ height?: number | undefined;
854
+ deviceScaleFactor?: number | undefined;
855
+ } | null | undefined;
856
+ device?: string | undefined;
857
+ timezone?: string | undefined;
858
+ locale?: string | undefined;
859
+ maxContexts?: number | undefined;
860
+ launch?: {
861
+ userDataDir?: string | undefined;
862
+ profile?: "per-test" | undefined;
863
+ args?: string[] | undefined;
864
+ } | undefined;
865
+ storageState?: string | undefined;
866
+ teardownTimeoutMs?: number | undefined;
867
+ testTimeoutMs?: number | undefined;
868
+ schedules?: {
869
+ collection: string;
870
+ cron: string;
871
+ env?: string | undefined;
872
+ prepare?: string | undefined;
873
+ }[] | undefined;
874
+ }>, {
875
+ env: {
876
+ shared: string[];
877
+ };
625
878
  browsers: ("chromium" | "firefox" | "webkit")[];
626
879
  retry: {
627
880
  count: number;
628
- on: ("network" | "transient" | "crash")[];
881
+ on: ("transient" | "network" | "crash")[];
629
882
  };
630
883
  failureBundle: {
884
+ tier1: true;
631
885
  tier2: boolean;
632
886
  tier3: {
633
887
  network: boolean;
@@ -639,17 +893,94 @@ declare const UnotestConfigSchema: z.ZodObject<{
639
893
  };
640
894
  storageDir: string;
641
895
  pageHtml: "redacted" | "full";
642
- tier1?: true | undefined;
643
896
  };
644
897
  dialogPolicy: "accept" | "dismiss" | "manual";
645
898
  testDir: string;
646
899
  helpersDir: string;
900
+ defaultTimeoutMs: number;
901
+ defaultNavigationTimeoutMs: number;
902
+ linter: {
903
+ enabled: boolean;
904
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
905
+ };
906
+ mcp: {
907
+ transport: "stdio";
908
+ };
909
+ queue: {
910
+ enabled: boolean;
911
+ concurrency: number;
912
+ };
913
+ schedules: {
914
+ collection: string;
915
+ cron: string;
916
+ env?: string | undefined;
917
+ prepare?: string | undefined;
918
+ }[];
919
+ sandbox: {
920
+ shellCwd?: string | undefined;
921
+ shellTimeoutMs?: number | undefined;
922
+ exportSecrets?: string[] | undefined;
923
+ database?: string | undefined;
924
+ apiBaseUrl?: string | undefined;
925
+ uploadDir?: string | undefined;
926
+ readRoots?: string[] | undefined;
927
+ };
928
+ baseUrl?: string | undefined;
929
+ webServer?: {
930
+ command: string;
931
+ url: string;
932
+ reuseExistingServer: boolean;
933
+ timeoutMs: number;
934
+ }[] | undefined;
935
+ channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | null | undefined;
936
+ viewport?: {
937
+ width?: number | undefined;
938
+ height?: number | undefined;
939
+ deviceScaleFactor?: number | undefined;
940
+ } | null | undefined;
941
+ device?: string | undefined;
942
+ timezone?: string | undefined;
943
+ locale?: string | undefined;
944
+ maxContexts?: number | undefined;
945
+ launch?: {
946
+ userDataDir?: string | undefined;
947
+ profile?: "per-test" | undefined;
948
+ args?: string[] | undefined;
949
+ } | undefined;
950
+ storageState?: string | undefined;
951
+ teardownTimeoutMs?: number | undefined;
952
+ testTimeoutMs?: number | undefined;
953
+ }, {
647
954
  env: {
648
955
  shared?: string[] | undefined;
649
956
  };
957
+ browsers: ("chromium" | "firefox" | "webkit")[];
958
+ retry: {
959
+ count: number;
960
+ on: ("transient" | "network" | "crash")[];
961
+ };
962
+ failureBundle: {
963
+ tier2: boolean;
964
+ tier3: {
965
+ network: boolean;
966
+ video: boolean;
967
+ };
968
+ retention: {
969
+ runs: number;
970
+ days: number;
971
+ };
972
+ storageDir: string;
973
+ pageHtml: "redacted" | "full";
974
+ tier1?: true | undefined;
975
+ };
976
+ dialogPolicy: "accept" | "dismiss" | "manual";
977
+ testDir: string;
978
+ helpersDir: string;
979
+ defaultTimeoutMs: number;
980
+ defaultNavigationTimeoutMs: number;
650
981
  linter: {
651
982
  enabled: boolean;
652
- rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
983
+ rules: Partial<Record<"lint:deep-css" | "lint:xpath" | "lint:obfuscated-class" | "lint:pause-explicit" | "lint:disambig-by-index" | "lint:evaluate-discouraged" | "lint:scenario-in-root" | "lint:mustache-in-dsl" | "lint:goto-concat" | "lint:regex-invalid" | "lint:echo-assert" | "lint:api-call-file-body" | "lint:lint-ok-missing-reason" | "lint:flow-returns-value" | "lint:legacy-layout" | "lint:external-variable-undeclared" | "lint:env-host-from-base" | "lint:one-test-per-file" | "lint:shadows-dsl-function" | "lint:skip-outside-test" | "lint:set-test-timeout-outside-test" | "validator:unknown-function" | "validator:arity" | "validator:arg-kind" | "validator:step-coverage" | "validator:step-shape" | "validator:meta-shape" | "validator:function-shape" | "validator:for-shape" | "validator:if-shape" | "validator:var-shape" | "validator:unsupported-statement" | "validator:unsupported-expression" | "validator:string-concat" | "validator:semantic-loss" | "validator:list-arg" | "validator:wrapped-format", "off" | "warn" | "error">>;
653
984
  };
654
985
  mcp: {
655
986
  transport: "stdio";
@@ -665,30 +996,38 @@ declare const UnotestConfigSchema: z.ZodObject<{
665
996
  database?: string | undefined;
666
997
  apiBaseUrl?: string | undefined;
667
998
  uploadDir?: string | undefined;
999
+ readRoots?: string[] | undefined;
668
1000
  };
669
- locale?: string | undefined;
670
- timezone?: string | undefined;
671
1001
  baseUrl?: string | undefined;
672
1002
  webServer?: {
673
- url: string;
674
1003
  command: string;
1004
+ url: string;
1005
+ reuseExistingServer?: boolean | undefined;
675
1006
  timeoutMs?: number | undefined;
1007
+ } | {
1008
+ command: string;
1009
+ url: string;
676
1010
  reuseExistingServer?: boolean | undefined;
677
- } | undefined;
678
- channel?: "chrome" | "msedge" | "chrome-beta" | "chromium" | "bundled" | null | undefined;
1011
+ timeoutMs?: number | undefined;
1012
+ }[] | undefined;
1013
+ channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | "bundled" | null | undefined;
679
1014
  viewport?: {
680
1015
  width?: number | undefined;
681
1016
  height?: number | undefined;
682
1017
  deviceScaleFactor?: number | undefined;
683
- } | undefined;
1018
+ } | null | undefined;
684
1019
  device?: string | undefined;
1020
+ timezone?: string | undefined;
1021
+ locale?: string | undefined;
685
1022
  maxContexts?: number | undefined;
686
1023
  launch?: {
687
- args?: string[] | undefined;
688
1024
  userDataDir?: string | undefined;
1025
+ profile?: "per-test" | undefined;
1026
+ args?: string[] | undefined;
689
1027
  } | undefined;
690
1028
  storageState?: string | undefined;
691
1029
  teardownTimeoutMs?: number | undefined;
1030
+ testTimeoutMs?: number | undefined;
692
1031
  schedules?: {
693
1032
  collection: string;
694
1033
  cron: string;
@@ -700,4 +1039,4 @@ type UnotestConfig = z.infer<typeof UnotestConfigSchema>;
700
1039
  type UnotestConfigInput = z.input<typeof UnotestConfigSchema>;
701
1040
  declare const DEFAULT_CONFIG: UnotestConfig;
702
1041
 
703
- export { BROWSER_CHANNEL_WORDS, type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type EnvConfig, EnvConfigSchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type QueueConfig, QueueConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, SYSTEM_BROWSER_CHANNELS, type SandboxConfig, SandboxConfigSchema, type ScheduleConfig, ScheduleSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema, type WebServerConfig, WebServerConfigSchema };
1042
+ export { BROWSER_CHANNEL_WORDS, type Browser, type BrowserChannel, BrowserChannelSchema, BrowserSchema, DEFAULT_CONFIG, type DialogPolicy, DialogPolicySchema, type EnvConfig, EnvConfigSchema, type FailureBundleConfig, FailureBundleConfigSchema, type LinterConfig, LinterConfigSchema, type LinterRuleId, LinterRuleIdSchema, type LinterSeverity, LinterSeveritySchema, type McpConfig, McpConfigSchema, type QueueConfig, QueueConfigSchema, type RetryConfig, RetryConfigSchema, type RetryReason, RetryReasonSchema, SYSTEM_BROWSER_CHANNELS, type SandboxConfig, SandboxConfigSchema, type ScheduleConfig, ScheduleSchema, type UnotestConfig, type UnotestConfigInput, UnotestConfigSchema, type Viewport, ViewportSchema, type WebServerConfig, WebServerConfigSchema, WebServersConfigSchema };