@unotest/web 0.48.0 → 0.49.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.
@@ -313,6 +313,10 @@ Then verify:
313
313
  run_test { name: "<scenario-name>" }
314
314
  ```
315
315
 
316
+ In a file with several `test_*`, add the one to run:
317
+ `run_test { name: "<scenario-name>", test: "test_<name>" }` — without it
318
+ the reply is `status: "test_required"` and its `next` is that call.
319
+
316
320
  `run_test` BLOCKS until the run settles — do NOT poll
317
321
  `inspect_runtime` to wait for completion (it stays a diagnostic tool
318
322
  for paused runs). The response carries `next.outcome`. **The scenario
@@ -444,6 +444,10 @@ Then verify:
444
444
  run_test { name: "<scenario-name>" }
445
445
  ```
446
446
 
447
+ In a file with several `test_*`, add the one to run:
448
+ `run_test { name: "<scenario-name>", test: "test_<name>" }` — without it
449
+ the reply is `status: "test_required"` and its `next` is that call.
450
+
447
451
  `run_test` BLOCKS until the run settles — do NOT poll
448
452
  `inspect_runtime` to wait for completion (it stays a diagnostic tool
449
453
  for paused runs). The response carries `next.outcome`. **The scenario
package/CHANGELOG.md CHANGED
@@ -1,5 +1,97 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.49.0] - 2026-10-09
4
+
5
+ ### Minor Changes
6
+
7
+ - 3531ce6: A collection can set the browser window of its scenarios.
8
+
9
+ - `viewport:` in a collection's YAML: `null` for the real browser window, `{width, height}` for an emulated size. It replaces the project's `viewport` for every scenario the collection runs; the same scenario run on its own keeps the project's window. It works with a browser profile, where `setViewport(null)` is refused.
10
+ - A wrong value is refused with what to write instead. `viewport: null` over a project `device` is refused before the first scenario starts, as in the config.
11
+ - The `setViewport(null)` refusal on a browser profile now points at the collection field.
12
+ - The viewer's collection editor keeps a hand-written `viewport:` and `prepare:` when it saves a collection.
13
+
14
+ - 78e783a: A `generate` command keeps the scenarios' copy of application values in step with the source.
15
+
16
+ - `generate` in the config: a shell command that writes `unotest/generated/` from your application's source (constants, label tables, schemas). The scenarios read the files with `readJson()`. It runs from the project root before every local `e2e` and `collection` (once for the suite) before `bundle push`, and in `box create` before the box is rented, so an edit of the source reaches the next run and the bundle carries a fresh snapshot.
17
+ - A box never runs it: it has your suite, not your application, and the snapshot arrived in the bundle. `lint` does not run it.
18
+ - A failure refuses the run with exit 95 and names the command. A failure in `box create` creates no box. `--no-generate` on `e2e`, `collection`, `bundle push` and `box create` skips it for one run.
19
+ - `init` adds `unotest/generated/` to the project's `.gitignore`, and `bundle push` packs the folder although git ignores it.
20
+
21
+ - bf95375: A box keeps the names it sets on every run to itself.
22
+
23
+ - `env set` and the values page refuse a value named `UNOTEST_RUN_ID`, `UNOTEST_ENV`, `UNOTEST_BUNDLE_ID`, `UNOTEST_EDITOR_TYPES`, `UNOTEST_BOX_SECRET_NAMES`, `UNOTEST_QUEUE_LEASE`, `UNOTEST_RUN_TRIGGER` or `UNOTEST_RUN_ACTOR`, naming it. Before, such a value was taken and won over the box's own: `UNOTEST_BUNDLE_ID=""` made a box run look like a local one and let it run `generate`.
24
+ - A value already stored under one of these names stays listed on the box, and no run receives it. Remove it with `env rm`.
25
+ - Other `UNOTEST_*` names are set as before, `UNOTEST_BROWSER_CHANNEL` included.
26
+
27
+ - a262cb0: A box runs and reports each test of a file of several `test_*` on its own.
28
+
29
+ - Run again on one test in a box's viewer runs that test only. A box older than this runs the whole file.
30
+ - Run notifications (Slack, Telegram, webhook) and GitHub checks count tests, not files: `smoke failed — 1 of 42 tests`, and a failed test of a file of several is named `file › test`. The webhook fields keep their names: `scenariosTotal`, `scenariosFailed` and `failedScenarios` now count and name tests.
31
+ - `bundle push --run --follow` prints each test of such a file between the file's start and end, with its own failed steps, `log` and `note` lines, under `file › test`.
32
+ - A test that skipped itself prints in `--follow` as it does in a local run, `○ file › test — skipped: <reason>`, not as passed. A client older than this still prints it as passed.
33
+
34
+ - 970813c: A scenario file can hold several `test_*` functions, and each one is a test of its own: its own run, browser context, retry and verdict, with its own failure bundle, screenshots and console. Functions of the file are shared between its tests; state is not. `npx @unotest/web e2e <file>` plays them in order and exits 1 when any of them failed. A file with one test runs exactly as before. `e2e <file> --test <name>` plays one test, named as the function is or without its `test_` prefix. A name the file does not have is refused with exit 2 and the list of its tests.
35
+
36
+ `// @expect-fail` can mark one test: put it in the `//` comments directly above that test's `function` line, with no blank line between. A marker in the file's leading comments, set apart from the first function by a blank line, still marks every test of the file.
37
+
38
+ The MCP tool `run_test` takes `test` too. A debug session follows one test, so for a file that holds several, `run_test` without `test` starts nothing and answers with the tests and the call to make:
39
+
40
+ ```json
41
+ {
42
+ "status": "test_required",
43
+ "reason": "auth/login holds 3 tests; run_test plays one — name it in `test`.",
44
+ "tests": ["test_login_ok", "test_login_locked", "test_logout"],
45
+ "next": "run_test {name: \"auth/login\", test: \"test_login_ok\"}"
46
+ }
47
+ ```
48
+
49
+ An unknown `test` answers `status: "test_not_found"` with the same list.
50
+
51
+ A collection counts tests, not files. A file of three tests is three verdicts: its line in the `collection` output says `✗ <file> — 1 of 3 failed` and lists each test under it, and the summary counts passed, failed and skipped tests. A file that never started (bailed or busy) is still counted as one file.
52
+
53
+ The viewer shows each test on its own. A file of several tests is a node in the scenarios tree with one row per test, and the chevron opens it from the keyboard too (ArrowRight / ArrowLeft). The file's tab shows the steps of every test under its name. The file's dot and status sum its tests up: failed when one failed, skipped only when all of them skipped, failed on purpose only when every test that ran was expected to fail, otherwise passed. History shows each test's run under the file's run, and can be filtered to one test. A test's run tab shows its own steps, screenshots, console and failure, titled `file › test`, and Run again runs that test only. Home and a collection run's summary count tests, and the Home card says "tests". A link to a test's run opens that test, with its name and status in the tab.
54
+
55
+ `lint:one-test-per-file` no longer reports anything: several `test_*` in one file is now the way to write a suite of related tests.
56
+
57
+ A test that skips itself (`skip(reason)`) now shows as **skipped**, not as passed. The run tree, the history strip, the run tab (its progress bar included) and the overview draw it grey with its reason, the overview gets a "skipped" card when any test's last run skipped and no longer calls such a field "Everything is green", and a collection row counts skipped tests apart from passed ones. A run still in progress that ends in a skip turns skipped at once, without a reload. `box run` prints `(skipped)` with the reason, and its `--json` answer carries `skipReason`. Like a local `e2e`, it exits 0 on a skip.
58
+
59
+ **Migration:** `RunStatus` has a new value, `"skipped"`, and `RunMeta` and the scenario index entry carry the reason (`skipReason`, `lastSkipReason`). Code that switches over `RunStatus` exhaustively must handle the new value. Code that treated `"passed"` as "finished without failing" should accept `"skipped"` as well. The run index schema version moves to 3: the viewer discards an older index on start and rebuilds it from the runs on disk. Past skipped runs then show as skipped too.
60
+
61
+ **Migration:** the run journal has two new event kinds, `file-run:test-started` and `file-run:test-finished`, written by the run of a file with several tests. Code that switches over journal events exhaustively must handle them. Runs, manifests and `run:started` carry `test` (the function name). Its tests point at the file's run through `parentRunId`, as a collection's scenarios point at the collection's.
62
+
63
+ **Migration:** `lint:one-test-per-file` is deprecated and does nothing. A config that sets it (`"lint:one-test-per-file": "error"`) still loads; remove the entry when convenient. The rule id goes away in the next major version.
64
+
65
+ ### Patch Changes
66
+
67
+ - aac77aa: A failed step now brings its notes and the whole diff along.
68
+
69
+ - A failed statement carries the `note(label, value)` calls of its `step(...)` block: printed under the error in the `e2e` output as `note label: value`, and returned as `lastFailure.notes` (the `error` of a `run_test` reply). Secrets are masked as in the run journal. A nested step reports its own notes; a step that noted nothing reports an empty list.
70
+ - `assertEqual` shows every line of its diff. The `… N unchanged …` folding is gone from its failure message.
71
+
72
+ - 269cc10: `filter({...})` refuses a key it does not read.
73
+
74
+ - It reads `hasText`, `hasNotText`, `has` and `hasNot`. Any other key (`hasClass`, `visible`, a typo of `hasText`) used to be dropped without a word, so `count(getByRole('row').filter({visible: true}))` counted every row and the check passed.
75
+ - `lint` reports it as `lint:filter-unknown-option` (an error), and the run fails the step with the same message: the key, and the keys `filter` takes. `visible` is not supported yet.
76
+ - The MCP structured locator refuses such a `filter` step too, instead of stripping the key.
77
+
78
+ **Migration:** a scenario with an unknown or misspelled key in `filter` that used to pass now fails, at lint and at run time — on purpose: it was checking less than it said. Use one of the four keys, or a CSS `locator('tr.done')` for a class or an attribute of the element itself.
79
+
80
+ - e54db1a: Quieter linter on two rules.
81
+
82
+ - `lint:echo-assert` no longer fires when the text you fill is only part of the text you wait for. `fill(box, 'helper')` followed by `waitForText('ann/helper')` is not an echo: the page must show more than was typed. It still warns when the waited text is part of the filled value, equality included.
83
+ - `lint:evaluate-discouraged` gives one warning per file instead of one per call. The warning sits on the first call and says how many calls the file has. A call under `// lint-ok: <reason>` is left out of the count; with every call silenced, there is no warning. The argument hints (one value vs one array) name the lines they apply to.
84
+
85
+ - Updated dependencies [3531ce6]
86
+ - Updated dependencies [aac77aa]
87
+ - Updated dependencies [78e783a]
88
+ - Updated dependencies [970813c]
89
+ - @unotest/protocol@0.49.0
90
+ - @unotest/viewer@0.49.0
91
+ - @unotest/core@0.49.0
92
+ - @unotest/dsl@0.49.0
93
+ - @unotest/grounder-client@0.49.0
94
+
3
95
  ## [0.48.0] - 2026-10-08
4
96
 
5
97
  ### Minor Changes
@@ -1632,7 +1724,7 @@ picker on` fetches this project's own access and writes the three grounder
1632
1724
 
1633
1725
  That screen named one command:
1634
1726
 
1635
- npx @unotest/web bundle push --run --env ENVIRONMENT
1727
+ npx @unotest/web bundle push --run --env ENVIRONMENT
1636
1728
 
1637
1729
  In a project that has just been created, the command refuses with `no box
1638
1730
  address` before it does anything: the project holds neither the box's address
@@ -1641,8 +1733,8 @@ address` before it does anything: the project holds neither the box's address
1641
1733
 
1642
1734
  The screen now names both steps, in the order they have to happen:
1643
1735
 
1644
- npx @unotest/web box access larch
1645
- npx @unotest/web bundle push --run --env ENVIRONMENT
1736
+ npx @unotest/web box access larch
1737
+ npx @unotest/web bundle push --run --env ENVIRONMENT
1646
1738
 
1647
1739
  The box's own name is filled in when its licence carries one. `box access`
1648
1740
  with no name refuses, and its refusal offers to create a box — to somebody who
package/README.md CHANGED
@@ -352,7 +352,8 @@ npx @unotest/web box run checkout-mqf3pwr1 --env acme/test
352
352
  ```
353
353
 
354
354
  `box run` prints the failure, the results of soft steps and the judge's
355
- verdicts. When you want the artifacts too:
355
+ verdicts. A run whose test skipped itself reads `skipped`, with the reason,
356
+ and exits 0 like a local skip. When you want the artifacts too:
356
357
 
357
358
  ```sh
358
359
  npx @unotest/web box run checkout-mqf3pwr1 --env acme/test --download
@@ -35,6 +35,13 @@ declare const ViewportSchema: z.ZodObject<{
35
35
  deviceScaleFactor?: number | undefined;
36
36
  }>;
37
37
  type Viewport = z.infer<typeof ViewportSchema>;
38
+ /** Why `viewport` cannot stand next to `device`, or undefined when it can.
39
+ * A preset IS a size and a scale: next to the real window it would
40
+ * either be ignored or break it. One wording for the config and for a
41
+ * collection's `viewport: null` over a project that names a device. */
42
+ declare function viewportDeviceConflict(viewport: Viewport | null | undefined, device: string | undefined,
43
+ /** Whose `viewport: null` it is, as the message names it. */
44
+ subject?: string): string | undefined;
38
45
  declare const RetryReasonSchema: z.ZodEnum<["transient", "network", "crash"]>;
39
46
  type RetryReason = z.infer<typeof RetryReasonSchema>;
40
47
  declare const RetryConfigSchema: z.ZodObject<{
@@ -109,19 +116,19 @@ declare const FailureBundleConfigSchema: z.ZodObject<{
109
116
  type FailureBundleConfig = z.infer<typeof FailureBundleConfigSchema>;
110
117
  declare const DialogPolicySchema: z.ZodEnum<["accept", "dismiss", "manual"]>;
111
118
  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", "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"]>;
119
+ 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", "lint:filter-unknown-option", "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
120
  type LinterRuleId = z.infer<typeof LinterRuleIdSchema>;
114
121
  declare const LinterSeveritySchema: z.ZodEnum<["off", "warn", "error"]>;
115
122
  type LinterSeverity = z.infer<typeof LinterSeveritySchema>;
116
123
  declare const LinterConfigSchema: z.ZodObject<{
117
124
  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", "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"]>>;
125
+ 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", "lint:filter-unknown-option", "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
126
  }, "strict", z.ZodTypeAny, {
120
127
  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" | "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">>;
128
+ 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" | "lint:filter-unknown-option" | "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
129
  }, {
123
130
  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" | "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">>;
131
+ 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" | "lint:filter-unknown-option" | "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
132
  }>;
126
133
  type LinterConfig = z.infer<typeof LinterConfigSchema>;
127
134
  declare const QueueConfigSchema: z.ZodObject<{
@@ -439,6 +446,16 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
439
446
  reuseExistingServer?: boolean | undefined;
440
447
  timeoutMs?: number | undefined;
441
448
  }[]>>;
449
+ /** A shell command that writes `unotest/generated/` from the
450
+ * application's own source (constants, label tables, schemas), so the
451
+ * scenarios read them with `readJson()` instead of a hand-made copy.
452
+ * Runs in the project root — the same base as `prepare` and
453
+ * `webServer.command` — before every local `e2e` / `collection` and
454
+ * before `bundle push`, which then carries the folder although it is
455
+ * git-ignored. Not on a box (the snapshot arrived in the bundle) and
456
+ * not in `lint` (linting runs no project commands). A failure refuses
457
+ * the run; `--no-generate` skips it for one run. */
458
+ generate: z.ZodOptional<z.ZodString>;
442
459
  browsers: z.ZodArray<z.ZodEnum<["chromium", "firefox", "webkit"]>, "many">;
443
460
  channel: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["chrome", "msedge", "chrome-beta", "chromium"]>, z.ZodEffects<z.ZodLiteral<"bundled">, null, "bundled">, z.ZodNull]>>;
444
461
  viewport: z.ZodOptional<z.ZodNullable<z.ZodObject<{
@@ -603,13 +620,13 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
603
620
  }>;
604
621
  linter: z.ZodObject<{
605
622
  enabled: z.ZodBoolean;
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"]>>;
623
+ 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", "lint:filter-unknown-option", "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"]>>;
607
624
  }, "strict", z.ZodTypeAny, {
608
625
  enabled: boolean;
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">>;
626
+ 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" | "lint:filter-unknown-option" | "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">>;
610
627
  }, {
611
628
  enabled: boolean;
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">>;
629
+ 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" | "lint:filter-unknown-option" | "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">>;
613
630
  }>;
614
631
  mcp: z.ZodObject<{
615
632
  transport: z.ZodLiteral<"stdio">;
@@ -738,7 +755,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
738
755
  defaultNavigationTimeoutMs: number;
739
756
  linter: {
740
757
  enabled: boolean;
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">>;
758
+ 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" | "lint:filter-unknown-option" | "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">>;
742
759
  };
743
760
  mcp: {
744
761
  transport: "stdio";
@@ -769,6 +786,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
769
786
  reuseExistingServer: boolean;
770
787
  timeoutMs: number;
771
788
  }[] | undefined;
789
+ generate?: string | undefined;
772
790
  channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | null | undefined;
773
791
  viewport?: {
774
792
  width?: number | undefined;
@@ -817,7 +835,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
817
835
  defaultNavigationTimeoutMs: number;
818
836
  linter: {
819
837
  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">>;
838
+ 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" | "lint:filter-unknown-option" | "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
839
  };
822
840
  mcp: {
823
841
  transport: "stdio";
@@ -847,6 +865,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
847
865
  reuseExistingServer?: boolean | undefined;
848
866
  timeoutMs?: number | undefined;
849
867
  }[] | undefined;
868
+ generate?: string | undefined;
850
869
  channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | "bundled" | null | undefined;
851
870
  viewport?: {
852
871
  width?: number | undefined;
@@ -901,7 +920,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
901
920
  defaultNavigationTimeoutMs: number;
902
921
  linter: {
903
922
  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">>;
923
+ 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" | "lint:filter-unknown-option" | "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
924
  };
906
925
  mcp: {
907
926
  transport: "stdio";
@@ -932,6 +951,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
932
951
  reuseExistingServer: boolean;
933
952
  timeoutMs: number;
934
953
  }[] | undefined;
954
+ generate?: string | undefined;
935
955
  channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | null | undefined;
936
956
  viewport?: {
937
957
  width?: number | undefined;
@@ -980,7 +1000,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
980
1000
  defaultNavigationTimeoutMs: number;
981
1001
  linter: {
982
1002
  enabled: boolean;
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">>;
1003
+ 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" | "lint:filter-unknown-option" | "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">>;
984
1004
  };
985
1005
  mcp: {
986
1006
  transport: "stdio";
@@ -1010,6 +1030,7 @@ declare const UnotestConfigSchema: z.ZodEffects<z.ZodObject<{
1010
1030
  reuseExistingServer?: boolean | undefined;
1011
1031
  timeoutMs?: number | undefined;
1012
1032
  }[] | undefined;
1033
+ generate?: string | undefined;
1013
1034
  channel?: "chromium" | "chrome" | "msedge" | "chrome-beta" | "bundled" | null | undefined;
1014
1035
  viewport?: {
1015
1036
  width?: number | undefined;
@@ -1039,4 +1060,4 @@ type UnotestConfig = z.infer<typeof UnotestConfigSchema>;
1039
1060
  type UnotestConfigInput = z.input<typeof UnotestConfigSchema>;
1040
1061
  declare const DEFAULT_CONFIG: UnotestConfig;
1041
1062
 
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 };
1063
+ 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, viewportDeviceConflict };
@@ -1 +1 @@
1
- var _0x284e94=_0xc922;(function(_0x986268,_0x498814){var _0x14091a={_0x493284:0xd1,_0x3b5fd6:0xf0,_0x164806:0xfd,_0x1c3454:0xcb,_0x58333f:0xe7},_0x565915=_0xc922,_0x1e06ab=_0x986268();while(!![]){try{var _0xb903f9=-parseInt(_0x565915(_0x14091a._0x493284))/0x1+-parseInt(_0x565915(_0x14091a._0x3b5fd6))/0x2+-parseInt(_0x565915(_0x14091a._0x164806))/0x3+parseInt(_0x565915(0xac))/0x4*(parseInt(_0x565915(0xe4))/0x5)+parseInt(_0x565915(_0x14091a._0x1c3454))/0x6*(-parseInt(_0x565915(_0x14091a._0x58333f))/0x7)+parseInt(_0x565915(0xfc))/0x8+parseInt(_0x565915(0xb6))/0x9;if(_0xb903f9===_0x498814)break;else _0x1e06ab['push'](_0x1e06ab['shift']());}catch(_0x5b0213){_0x1e06ab['push'](_0x1e06ab['shift']());}}}(_0x3e24,0x7294d));var __defProp=Object[_0x284e94(0x9f)],__name=(_0x1d0bbf,_0x1546d2)=>__defProp(_0x1d0bbf,_0x284e94(0xf7),{'value':_0x1546d2,'configurable':!![]});import{z as _0x1a03f7}from'zod';import{z}from'zod';import{levenshteinDistance}from'@unotest/core';var MAX_EDITS=0x2;function closestKey(_0x1050a2,_0x1fcced){var _0x2c9086={_0x4630d5:0xc2},_0x31e07=_0x284e94;let _0x38c020;for(const _0x3de81d of _0x1fcced){const _0x2cfb2f=levenshteinDistance(_0x1050a2[_0x31e07(_0x2c9086._0x4630d5)](),_0x3de81d['toLowerCase']());if(_0x2cfb2f>MAX_EDITS)continue;if(_0x38c020===void 0x0||_0x2cfb2f<_0x38c020['distance'])_0x38c020={'key':_0x3de81d,'distance':_0x2cfb2f};}return _0x38c020?.['key'];}__name(closestKey,_0x284e94(0xc3));function unknownKeyMessage(_0x470716,_0x2a7ad1){var _0x248f5d={_0x1921f9:0xe5},_0x3a228f={_0xb4612e:0xb4,_0x165fc7:0xc9},_0x403e0d=_0x284e94;return _0x470716[_0x403e0d(_0x248f5d._0x1921f9)](_0x38799d=>{var _0x4ec41e=_0x403e0d;const _0x51de11=closestKey(_0x38799d,_0x2a7ad1);return _0x51de11===void 0x0?_0x4ec41e(_0x3a228f._0xb4612e)+_0x38799d+_0x4ec41e(_0x3a228f._0x165fc7):_0x4ec41e(_0x3a228f._0xb4612e)+_0x38799d+'\x22\x20—\x20did\x20you\x20mean\x20\x22'+_0x51de11+'\x22?';})[_0x403e0d(0xf9)](';\x20');}function _0xc922(_0x11bfae,_0x107e05){_0x11bfae=_0x11bfae-0x99;var _0x3e24cf=_0x3e24();var _0xc922d3=_0x3e24cf[_0x11bfae];if(_0xc922['aMqSys']===undefined){var _0x45a93b=function(_0x2959de){var _0x13385c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1a03f7='',_0x3868fd='';for(var _0x1d0bbf=0x0,_0x1546d2,_0x1050a2,_0x1fcced=0x0;_0x1050a2=_0x2959de['charAt'](_0x1fcced++);~_0x1050a2&&(_0x1546d2=_0x1d0bbf%0x4?_0x1546d2*0x40+_0x1050a2:_0x1050a2,_0x1d0bbf++%0x4)?_0x1a03f7+=String['fromCharCode'](0xff&_0x1546d2>>(-0x2*_0x1d0bbf&0x6)):0x0){_0x1050a2=_0x13385c['indexOf'](_0x1050a2);}for(var _0x38c020=0x0,_0x3de81d=_0x1a03f7['length'];_0x38c020<_0x3de81d;_0x38c020++){_0x3868fd+='%'+('00'+_0x1a03f7['charCodeAt'](_0x38c020)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3868fd);};_0xc922['YLEJAN']=_0x45a93b,_0xc922['xgqSKO']={},_0xc922['aMqSys']=!![];}var _0x354e3b=_0x3e24cf[0x0],_0x3f53d9=_0x11bfae+_0x354e3b,_0x4c68ed=_0xc922['xgqSKO'][_0x3f53d9];return!_0x4c68ed?(_0xc922d3=_0xc922['YLEJAN'](_0xc922d3),_0xc922['xgqSKO'][_0x3f53d9]=_0xc922d3):_0xc922d3=_0x4c68ed,_0xc922d3;}__name(unknownKeyMessage,'unknownKeyMessage');function strictObject(_0x458f65){var _0x567af4={_0x284bdb:0xa5},_0x1a9cbb=_0x284e94;const _0x3c5f2f=Object[_0x1a9cbb(_0x567af4._0x284bdb)](_0x458f65);return z['object'](_0x458f65,{'errorMap':__name((_0x406172,_0x423858)=>_0x406172[_0x1a9cbb(0xc4)]===z[_0x1a9cbb(0xbe)][_0x1a9cbb(0x99)]?{'message':unknownKeyMessage(_0x406172['keys'],_0x3c5f2f)}:{'message':_0x423858[_0x1a9cbb(0xb5)]},_0x1a9cbb(0x104))})[_0x1a9cbb(0xbc)]();}__name(strictObject,_0x284e94(0xba));import{BUNDLED_BROWSER_CHANNEL}from'@unotest/protocol';import{z as _0x3868fd}from'zod';import{UnotestError}from'@unotest/core';var LaunchConfigSchema=_0x3868fd[_0x284e94(0xde)]({'userDataDir':_0x3868fd[_0x284e94(0xec)]()['min'](0x1)[_0x284e94(0x9a)](),'profile':_0x3868fd['literal']('per-test')[_0x284e94(0x9a)](),'args':_0x3868fd['array'](_0x3868fd[_0x284e94(0xec)]()['min'](0x1))[_0x284e94(0x9a)]()})[_0x284e94(0xbc)](),BrowserSchema=_0x1a03f7[_0x284e94(0xd3)]([_0x284e94(0x9b),_0x284e94(0xbb),_0x284e94(0xca)]),SYSTEM_BROWSER_CHANNELS=['chrome',_0x284e94(0xa6),_0x284e94(0xad),'chromium'],BROWSER_CHANNEL_WORDS=[...SYSTEM_BROWSER_CHANNELS,BUNDLED_BROWSER_CHANNEL],BrowserChannelSchema=_0x1a03f7['union']([_0x1a03f7[_0x284e94(0xd3)](SYSTEM_BROWSER_CHANNELS),_0x1a03f7[_0x284e94(0xce)](BUNDLED_BROWSER_CHANNEL)[_0x284e94(0xbd)](()=>null),_0x1a03f7[_0x284e94(0xb9)]()])['optional'](),ViewportSchema=strictObject({'width':_0x1a03f7['number']()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()[_0x284e94(0x9a)](),'height':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()[_0x284e94(0x9a)](),'deviceScaleFactor':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0xf8)]()['optional']()}),ConfigViewportSchema=ViewportSchema[_0x284e94(0xd0)](),RetryReasonSchema=_0x1a03f7[_0x284e94(0xd3)]([_0x284e94(0xe0),_0x284e94(0xfe),_0x284e94(0xea)]),RetryConfigSchema=strictObject({'count':_0x1a03f7['number']()[_0x284e94(0x101)]()[_0x284e94(0xc0)](0x0)[_0x284e94(0xc5)](0xa),'on':_0x1a03f7['array'](RetryReasonSchema)}),FailureBundleConfigSchema=strictObject({'tier1':_0x1a03f7[_0x284e94(0xce)](!![])[_0x284e94(0xb0)](!![]),'tier2':_0x1a03f7['boolean'](),'tier3':strictObject({'network':_0x1a03f7[_0x284e94(0xdd)](),'video':_0x1a03f7['boolean']()}),'retention':strictObject({'runs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)](),'days':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()['positive']()}),'storageDir':_0x1a03f7['string']()[_0x284e94(0xc0)](0x1),'pageHtml':_0x1a03f7[_0x284e94(0xd3)](['redacted',_0x284e94(0x9e)])}),DialogPolicySchema=_0x1a03f7[_0x284e94(0xd3)](['accept','dismiss',_0x284e94(0xae)]),LinterRuleIdSchema=_0x1a03f7[_0x284e94(0xd3)]([_0x284e94(0xcf),_0x284e94(0xdf),_0x284e94(0xb3),_0x284e94(0xe1),_0x284e94(0xef),_0x284e94(0xd7),_0x284e94(0xd4),_0x284e94(0xd8),_0x284e94(0xed),'lint:regex-invalid','lint:echo-assert',_0x284e94(0xa0),_0x284e94(0xfa),'lint:flow-returns-value',_0x284e94(0xc6),_0x284e94(0xcd),_0x284e94(0xb2),_0x284e94(0xa4),_0x284e94(0xb8),'lint:skip-outside-test','lint:set-test-timeout-outside-test',_0x284e94(0xe6),'validator:arity',_0x284e94(0x102),_0x284e94(0xf3),_0x284e94(0xf5),_0x284e94(0xf1),_0x284e94(0xe3),_0x284e94(0xeb),_0x284e94(0xa8),_0x284e94(0x100),_0x284e94(0xdb),'validator:unsupported-expression',_0x284e94(0xe8),_0x284e94(0xd9),_0x284e94(0xd2),_0x284e94(0xe2)]),LinterSeveritySchema=_0x1a03f7[_0x284e94(0xd3)]([_0x284e94(0xa1),'warn',_0x284e94(0xfb)]),LinterConfigSchema=strictObject({'enabled':_0x1a03f7[_0x284e94(0xdd)](),'rules':_0x1a03f7[_0x284e94(0xc1)](LinterRuleIdSchema,LinterSeveritySchema)}),QueueConfigSchema=strictObject({'enabled':_0x1a03f7[_0x284e94(0xdd)]()[_0x284e94(0xb0)](!![]),'concurrency':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()[_0x284e94(0xb0)](0x1)}),ScheduleSchema=strictObject({'collection':_0x1a03f7['string']()[_0x284e94(0xc0)](0x1),'cron':_0x1a03f7['string']()[_0x284e94(0xc0)](0x1),'env':_0x1a03f7['string']()['min'](0x1)[_0x284e94(0x9a)](),'prepare':_0x1a03f7['string']()[_0x284e94(0xc0)](0x1)['optional']()}),McpConfigSchema=strictObject({'transport':_0x1a03f7['literal'](_0x284e94(0xc7))}),SandboxConfigSchema=strictObject({'shellCwd':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0x9a)](),'shellTimeoutMs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()['optional'](),'exportSecrets':_0x1a03f7['array'](_0x1a03f7[_0x284e94(0xec)]())[_0x284e94(0x9a)](),'database':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0x9a)](),'apiBaseUrl':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xa2)]()[_0x284e94(0x9a)](),'uploadDir':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0x9a)](),'readRoots':_0x1a03f7['array'](_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xc0)](0x1))[_0x284e94(0x9a)]()}),WebServerConfigSchema=strictObject({'command':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xc0)](0x1),'url':_0x1a03f7['string']()[_0x284e94(0xa2)](),'reuseExistingServer':_0x1a03f7['boolean']()[_0x284e94(0xb0)](!![]),'timeoutMs':_0x1a03f7['number']()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()['default'](0xea60)}),WebServersConfigSchema=_0x1a03f7['union']([WebServerConfigSchema,_0x1a03f7[_0x284e94(0xbf)](WebServerConfigSchema)[_0x284e94(0xc0)](0x1)])[_0x284e94(0xbd)](_0x3332c3=>Array['isArray'](_0x3332c3)?_0x3332c3:[_0x3332c3])[_0x284e94(0xd5)]((_0x243e60,_0x18cddc)=>{var _0x44f4f3={_0x23be9c:0xf2},_0x50aa35={_0x385eb6:0xa2,_0x5a9611:0xee,_0x493a79:0xbe,_0x1253ce:0xff,_0x43f163:0xaf,_0x216d8b:0xa2,_0x4cf873:0xdc},_0x13c772=_0x284e94;const _0x48fd22=new Set();_0x243e60[_0x13c772(_0x44f4f3._0x23be9c)]((_0x46017c,_0x4aef55)=>{var _0x5abdf1=_0x13c772;_0x48fd22['has'](_0x46017c[_0x5abdf1(_0x50aa35._0x385eb6)])&&_0x18cddc[_0x5abdf1(_0x50aa35._0x5a9611)]({'code':_0x1a03f7[_0x5abdf1(_0x50aa35._0x493a79)][_0x5abdf1(0x103)],'path':[_0x4aef55,_0x5abdf1(0xa2)],'message':_0x5abdf1(_0x50aa35._0x1253ce)+_0x4aef55+_0x5abdf1(_0x50aa35._0x43f163)+_0x46017c[_0x5abdf1(_0x50aa35._0x216d8b)]+_0x5abdf1(_0x50aa35._0x4cf873)}),_0x48fd22['add'](_0x46017c['url']);});}),EnvConfigSchema=strictObject({'shared':_0x1a03f7[_0x284e94(0xbf)](_0x1a03f7[_0x284e94(0xec)]())['default']([])}),UnotestConfigSchema=strictObject({'baseUrl':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xa2)]()[_0x284e94(0x9a)](),'webServer':WebServersConfigSchema['optional'](),'browsers':_0x1a03f7[_0x284e94(0xbf)](BrowserSchema)['min'](0x1),'channel':BrowserChannelSchema,'viewport':ConfigViewportSchema['optional'](),'device':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xc0)](0x1)[_0x284e94(0x9a)](),'timezone':_0x1a03f7[_0x284e94(0xec)]()['refine'](isTimeZone,_0x14c84a=>({'message':_0x284e94(0xaa)+_0x14c84a+_0x284e94(0xc8)}))[_0x284e94(0x9a)](),'locale':_0x1a03f7[_0x284e94(0xec)]()['refine'](isLocale,_0x5cca55=>({'message':_0x284e94(0xa3)+_0x5cca55+_0x284e94(0xa7)}))[_0x284e94(0x9a)](),'maxContexts':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()[_0x284e94(0x9a)](),'launch':LaunchConfigSchema[_0x284e94(0x9a)](),'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0x9a)](),'testDir':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xc0)](0x1),'helpersDir':_0x1a03f7[_0x284e94(0xec)]()[_0x284e94(0xc0)](0x1),'defaultTimeoutMs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)](),'defaultNavigationTimeoutMs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)](),'teardownTimeoutMs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()['optional'](),'testTimeoutMs':_0x1a03f7[_0x284e94(0xf4)]()[_0x284e94(0x101)]()[_0x284e94(0xf8)]()[_0x284e94(0x9a)](),'env':EnvConfigSchema,'linter':LinterConfigSchema,'mcp':McpConfigSchema,'queue':QueueConfigSchema,'schedules':_0x1a03f7[_0x284e94(0xbf)](ScheduleSchema)[_0x284e94(0xb0)]([]),'sandbox':SandboxConfigSchema})[_0x284e94(0xd5)]((_0x271d11,_0x3e463b)=>{var _0x385c87={_0x41835d:0xb1,_0x64d7c0:0x103,_0x3f64b2:0xcc,_0x115bfd:0xd6},_0x241c68=_0x284e94;_0x271d11[_0x241c68(_0x385c87._0x41835d)]===null&&_0x271d11[_0x241c68(0xf6)]!==void 0x0&&_0x3e463b[_0x241c68(0xee)]({'code':_0x1a03f7[_0x241c68(0xbe)][_0x241c68(_0x385c87._0x64d7c0)],'path':[_0x241c68(0xb1)],'message':_0x241c68(_0x385c87._0x3f64b2)+_0x271d11['device']+_0x241c68(_0x385c87._0x115bfd)});});function isTimeZone(_0x1e8667){var _0x345a88=_0x284e94;try{return new Intl['DateTimeFormat'](_0x345a88(0xab),{'timeZone':_0x1e8667}),_0x1e8667[_0x345a88(0x9c)]>0x0;}catch{return![];}}__name(isTimeZone,'isTimeZone');function _0x3e24(){var _0x4df6da=['BNvSBgfIBgu','mZiXmZi2Cvz2s3jg','DMfSAwrHDg9YoMXPC3qTyxjN','zw51Bq','BgLUDdPZy2vUyxjPBY1PBI1YB290','C3vWzxjszwzPBMu','iIbZzxrZigL0CYbVD24GC2L6zsbHBMqGC2nHBguG4OcuigrYB3aGB25Lig9MihrOzw0U','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','BgLUDdPTDxn0ywnOzs1PBI1KC2W','DMfSAwrHDg9YoNnLBwfUDgLJlwXVC3m','CMvKywn0zwq','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlxn0yxrLBwvUDa','igLZigfSCMvHzhKGyw5VDgHLCIbZzxj2zxiNCYdIGjqGzwfJAcbZzxj2zxiGBMvLzhmGAxrZig93BIbYzwfKAw5LC3mGvvjmlG','yM9VBgvHBG','B2jQzwn0','BgLUDdP4Cgf0Aa','DhjHBNnPzw50','BgLUDdPWyxvZzs1LEhbSAwnPDa','DMfSAwrHDg9YoNDYyxbWzwqTzM9YBwf0','DMfSAwrHDg9YoMz1BMn0Aw9UlxnOyxbL','otqXmfLfs0XSyW','BwfW','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','nZC2m3nyvgrpsa','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','z2v0q2fUB25Py2fStg9JywXLCW','y3jHC2G','DMfSAwrHDg9YoMzVCI1ZAgfWzq','C3rYAw5N','BgLUDdPNB3rVlwnVBMnHDa','ywrKsxnZDwu','BgLUDdPKAxnHBwjPzY1IEs1PBMrLEa','mteXotmXnLHACeHgCG','DMfSAwrHDg9YoM1LDgeTC2HHCgu','zM9YrwfJAa','DMfSAwrHDg9YoNn0zxaTy292zxjHz2u','BNvTyMvY','DMfSAwrHDg9YoNn0zxaTC2HHCgu','zgv2AwnL','BMfTzq','Cg9ZAxrPDMu','AM9PBG','BgLUDdPSAw50lw9Rlw1PC3nPBMCTCMvHC29U','zxjYB3i','mZe2mtG4mgTNyLDJsq','ntqZmdy2v1boBgrS','BMv0D29YAW','D2vIu2vYDMvYwW','DMfSAwrHDg9YoNzHCI1ZAgfWzq','Aw50','DMfSAwrHDg9YoMfYzY1RAw5K','y3vZDg9T','zxjYB3jnyxa','Dw5YzwnVz25PEMvKx2TLExm','B3b0Aw9UywW','y2HYB21PDw0','BgvUz3rO','D2fYBG','zNvSBa','zgvMAw5LuhjVCgvYDhK','BgLUDdPHCgKTy2fSBc1MAwXLlwjVzhK','B2zM','DxjS','Aw52ywXPzcbSB2nHBguGiG','BgLUDdPVBMuTDgvZDc1WzxiTzMLSzq','A2v5CW','BxnLzgDL','iIdIGjqGzxHWzwn0zwqGysbcq1aGndCGDgfNihn1y2GGyxmGiMvZluvtiG','DMfSAwrHDg9YoMLMlxnOyxbL','lNvUB3rLC3qVzMfPBhvYzxm','Dw5RBM93BIb0Aw1LihPVBMuGiG','zw4Tvvm','nZaWvMvkrxnY','y2HYB21LlwjLDge','BwfUDwfS','xs51CMWG','zgvMyxvSDa','DMLLD3bVCNq','BgLUDdPLBNyTAg9ZDc1MCM9TlwjHC2u','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','Dw5RBM93BIbRzxKGiG','zgvMyxvSDevYCM9Y','mtmXnZK0ndDoA2LJqwC','ywnJzxb0','BgLUDdPZAgfKB3DZlwrZBc1MDw5JDgLVBG','BNvSBa','C3rYAwn0t2jQzwn0','zMLYzwzVEa','C3rYAwn0','DhjHBNnMB3jT','wM9KsxnZDwvdB2rL','yxjYyxK','BwLU','CMvJB3jK','Dg9mB3DLCKnHC2u','y2XVC2vZDeTLEq','y29Kzq','Bwf4','BgLUDdPSzwDHy3KTBgf5B3v0','C3rKAw8','iIdIGjqGzxHWzwn0zwqGyw4GsufoqsbUyw1Lihn1y2GGyxmGiKv1CM9Wzs9nywrYAwqI','iIdIGjqGBM90igeGy29UzMLNigTLEtSGy2HLy2SGEw91CIbaDw5VDgvZDc93zwiGDMvYC2LVBIbPzIbPDcbJB21LCYbMCM9TigeGBMv3zxiGCMvSzwfZzq','D2vIA2L0','mZu1ogzWwLfWEa','DMLLD3bVCNq6ig51BgWGA2vLChmGDgHLihjLywWGyNjVD3nLCIb3Aw5KB3CSigfUzcbKzxzPy2uGiG','BgLUDdPLEhrLCM5HBc12yxjPywjSzs11BMrLy2XHCMvK','BgL0zxjHBa','BgLUDdPKzwvWlwnZCW'];_0x3e24=function(){return _0x4df6da;};return _0x3e24();}function isLocale(_0x161691){var _0x2ada93={_0x5764f1:0xe9,_0x463899:0x9c},_0x194d7d=_0x284e94;try{return Intl[_0x194d7d(_0x2ada93._0x5764f1)](_0x161691)[_0x194d7d(_0x2ada93._0x463899)]===0x1;}catch{return![];}}__name(isLocale,'isLocale');var DEFAULT_CONFIG={'browsers':[_0x284e94(0x9b)],'retry':{'count':0x0,'on':[_0x284e94(0xe0)]},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':_0x284e94(0xa9),'pageHtml':_0x284e94(0xda)},'dialogPolicy':_0x284e94(0xb7),'testDir':'unotest/e2e','helpersDir':'unotest/e2e/_helpers','defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x7530,'linter':{'enabled':!![],'rules':{'lint:deep-css':_0x284e94(0x9d),'lint:xpath':'warn','lint:obfuscated-class':'warn','lint:pause-explicit':_0x284e94(0x9d),'lint:disambig-by-index':_0x284e94(0xa1),'lint:evaluate-discouraged':'warn','lint:scenario-in-root':_0x284e94(0xfb),'lint:mustache-in-dsl':_0x284e94(0xfb),'lint:goto-concat':_0x284e94(0x9d),'lint:regex-invalid':_0x284e94(0xfb),'lint:echo-assert':'warn','lint:lint-ok-missing-reason':'warn','lint:flow-returns-value':_0x284e94(0x9d),'lint:legacy-layout':'warn','lint:external-variable-undeclared':'error','lint:env-host-from-base':_0x284e94(0xfb),'lint:one-test-per-file':_0x284e94(0x9d),'lint:shadows-dsl-function':_0x284e94(0x9d),'lint:skip-outside-test':_0x284e94(0xfb),'lint:set-test-timeout-outside-test':_0x284e94(0xfb),'validator:unknown-function':_0x284e94(0xfb)}},'env':{'shared':[]},'mcp':{'transport':_0x284e94(0xc7)},'queue':{'enabled':!![],'concurrency':0x1},'schedules':[],'sandbox':{}};export{BROWSER_CHANNEL_WORDS,BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,EnvConfigSchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,QueueConfigSchema,RetryConfigSchema,RetryReasonSchema,SYSTEM_BROWSER_CHANNELS,SandboxConfigSchema,ScheduleSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema,WebServersConfigSchema};
1
+ var _0x19cd0a=_0x65ae;(function(_0xdbced1,_0x23f9d8){var _0x171c5b={_0x429bff:0x190,_0x31effb:0x191,_0x13ccee:0x189,_0x5c0a71:0x184,_0x429d0d:0x174,_0x1d763c:0x169,_0x4705d4:0x135},_0x3715db=_0x65ae,_0x1f5c29=_0xdbced1();while(!![]){try{var _0x4d5665=parseInt(_0x3715db(_0x171c5b._0x429bff))/0x1+parseInt(_0x3715db(_0x171c5b._0x31effb))/0x2*(-parseInt(_0x3715db(0x166))/0x3)+parseInt(_0x3715db(0x17c))/0x4+-parseInt(_0x3715db(_0x171c5b._0x13ccee))/0x5*(-parseInt(_0x3715db(_0x171c5b._0x5c0a71))/0x6)+-parseInt(_0x3715db(0x197))/0x7+-parseInt(_0x3715db(_0x171c5b._0x429d0d))/0x8*(parseInt(_0x3715db(_0x171c5b._0x1d763c))/0x9)+parseInt(_0x3715db(_0x171c5b._0x4705d4))/0xa;if(_0x4d5665===_0x23f9d8)break;else _0x1f5c29['push'](_0x1f5c29['shift']());}catch(_0x361008){_0x1f5c29['push'](_0x1f5c29['shift']());}}}(_0x2333,0xea7f8));var __defProp=Object[_0x19cd0a(0x15f)],__name=(_0x13e14e,_0x57db14)=>__defProp(_0x13e14e,_0x19cd0a(0x187),{'value':_0x57db14,'configurable':!![]});import{z as _0xe0606c}from'zod';import{z}from'zod';import{levenshteinDistance}from'@unotest/core';function _0x65ae(_0x80fc18,_0x237347){_0x80fc18=_0x80fc18-0x135;var _0x2333dc=_0x2333();var _0x65ae8c=_0x2333dc[_0x80fc18];if(_0x65ae['YcneSr']===undefined){var _0x53c653=function(_0x4b3652){var _0x145cdd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0xe0606c='',_0x492223='';for(var _0x13e14e=0x0,_0x57db14,_0x64d817,_0x3b8242=0x0;_0x64d817=_0x4b3652['charAt'](_0x3b8242++);~_0x64d817&&(_0x57db14=_0x13e14e%0x4?_0x57db14*0x40+_0x64d817:_0x64d817,_0x13e14e++%0x4)?_0xe0606c+=String['fromCharCode'](0xff&_0x57db14>>(-0x2*_0x13e14e&0x6)):0x0){_0x64d817=_0x145cdd['indexOf'](_0x64d817);}for(var _0x5a6973=0x0,_0x450775=_0xe0606c['length'];_0x5a6973<_0x450775;_0x5a6973++){_0x492223+='%'+('00'+_0xe0606c['charCodeAt'](_0x5a6973)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x492223);};_0x65ae['tIvdFm']=_0x53c653,_0x65ae['ohnIWg']={},_0x65ae['YcneSr']=!![];}var _0x3367cc=_0x2333dc[0x0],_0x151d05=_0x80fc18+_0x3367cc,_0x51d820=_0x65ae['ohnIWg'][_0x151d05];return!_0x51d820?(_0x65ae8c=_0x65ae['tIvdFm'](_0x65ae8c),_0x65ae['ohnIWg'][_0x151d05]=_0x65ae8c):_0x65ae8c=_0x51d820,_0x65ae8c;}var MAX_EDITS=0x2;function closestKey(_0x64d817,_0x3b8242){var _0x165bb9={_0x5c62f2:0x16b,_0x957827:0x15e},_0x2a1dfb=_0x19cd0a;let _0x5a6973;for(const _0x450775 of _0x3b8242){const _0x55c3c7=levenshteinDistance(_0x64d817[_0x2a1dfb(_0x165bb9._0x5c62f2)](),_0x450775['toLowerCase']());if(_0x55c3c7>MAX_EDITS)continue;if(_0x5a6973===void 0x0||_0x55c3c7<_0x5a6973['distance'])_0x5a6973={'key':_0x450775,'distance':_0x55c3c7};}return _0x5a6973?.[_0x2a1dfb(_0x165bb9._0x957827)];}__name(closestKey,_0x19cd0a(0x164));function unknownKeyMessage(_0x1b850b,_0x40610c){var _0x211669={_0x33aa79:0x19a},_0x7db88e=_0x19cd0a;return _0x1b850b[_0x7db88e(_0x211669._0x33aa79)](_0x4914f7=>{var _0x33a10f=_0x7db88e;const _0x503d53=closestKey(_0x4914f7,_0x40610c);return _0x503d53===void 0x0?'unknown\x20key\x20\x22'+_0x4914f7+'\x22\x20—\x20not\x20a\x20config\x20key;\x20check\x20your\x20@unotest/web\x20version\x20if\x20it\x20comes\x20from\x20a\x20newer\x20release':_0x33a10f(0x185)+_0x4914f7+_0x33a10f(0x148)+_0x503d53+'\x22?';})[_0x7db88e(0x18e)](';\x20');}__name(unknownKeyMessage,'unknownKeyMessage');function strictObject(_0x3387d5){var _0x4225d8={_0x14de1e:0x138,_0x227bdd:0x1a1},_0x1e4120=_0x19cd0a;const _0x1623d0=Object[_0x1e4120(_0x4225d8._0x14de1e)](_0x3387d5);return z['object'](_0x3387d5,{'errorMap':__name((_0x11206d,_0xe298f1)=>_0x11206d['code']===z[_0x1e4120(0x177)][_0x1e4120(0x162)]?{'message':unknownKeyMessage(_0x11206d[_0x1e4120(0x138)],_0x1623d0)}:{'message':_0xe298f1['defaultError']},_0x1e4120(_0x4225d8._0x227bdd))})[_0x1e4120(0x186)]();}__name(strictObject,_0x19cd0a(0x149));import{BUNDLED_BROWSER_CHANNEL}from'@unotest/protocol';import{z as _0x492223}from'zod';import{UnotestError}from'@unotest/core';var LaunchConfigSchema=_0x492223[_0x19cd0a(0x158)]({'userDataDir':_0x492223[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1)[_0x19cd0a(0x1a0)](),'profile':_0x492223[_0x19cd0a(0x1a2)](_0x19cd0a(0x15d))[_0x19cd0a(0x1a0)](),'args':_0x492223[_0x19cd0a(0x199)](_0x492223[_0x19cd0a(0x15c)]()['min'](0x1))[_0x19cd0a(0x1a0)]()})[_0x19cd0a(0x186)](),BrowserSchema=_0xe0606c[_0x19cd0a(0x18f)]([_0x19cd0a(0x136),_0x19cd0a(0x165),_0x19cd0a(0x157)]),SYSTEM_BROWSER_CHANNELS=[_0x19cd0a(0x144),_0x19cd0a(0x17a),_0x19cd0a(0x16a),_0x19cd0a(0x136)],BROWSER_CHANNEL_WORDS=[...SYSTEM_BROWSER_CHANNELS,BUNDLED_BROWSER_CHANNEL],BrowserChannelSchema=_0xe0606c['union']([_0xe0606c[_0x19cd0a(0x18f)](SYSTEM_BROWSER_CHANNELS),_0xe0606c[_0x19cd0a(0x1a2)](BUNDLED_BROWSER_CHANNEL)[_0x19cd0a(0x188)](()=>null),_0xe0606c[_0x19cd0a(0x19f)]()])[_0x19cd0a(0x1a0)](),ViewportSchema=strictObject({'width':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()['positive']()[_0x19cd0a(0x1a0)](),'height':_0xe0606c[_0x19cd0a(0x142)]()['int']()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x1a0)](),'deviceScaleFactor':_0xe0606c['number']()[_0x19cd0a(0x14f)]()['optional']()}),ConfigViewportSchema=ViewportSchema['nullable']();function viewportDeviceConflict(_0x1792d7,_0x2b10d4,_0x5a134f=_0x19cd0a(0x180)){var _0x54a83f={_0x3c5356:0x1a3,_0x5a60df:0x139},_0x130145=_0x19cd0a;if(_0x1792d7!==null||_0x2b10d4===void 0x0)return void 0x0;return _0x5a134f+_0x130145(_0x54a83f._0x3c5356)+_0x2b10d4+_0x130145(_0x54a83f._0x5a60df);}function _0x2333(){var _0x41b60b=['BMfTzq','DhjHBNnMB3jT','nJK5mZi2meLPv1PHuq','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','BgLUDdP4Cgf0Aa','BgLUDdPVBMuTDgvZDc1WzxiTzMLSzq','BgLUDdPZzxqTDgvZDc10Aw1LB3v0lw91DhnPzguTDgvZDa','AM9PBG','zw51Bq','odKZmdC2rwHSrxv2','mtu4mdzIELH6qwi','zM9YrwfJAa','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlxn0yxrLBwvUDa','BgLUDdPNB3rVlwnVBMnHDa','iIdIGjqGzxHWzwn0zwqGysbcq1aGndCGDgfNihn1y2GGyxmGiMvZluvtiG','AxnbCNjHEq','mtmXmdyWndrtq0zAzNu','BwfUDwfS','yxjYyxK','BwfW','z2v0q2fUB25Py2fStg9JywXLCW','xs51CMWG','Dw5VDgvZDc9LmMuVx2HLBhbLCNm','BgLUDdPZAgfKB3DZlwrZBc1MDw5JDgLVBG','BNvSBa','B3b0Aw9UywW','zxjYB3jnyxa','BgL0zxjHBa','igTLzxbZihrOzsbYzwfSigjYB3DZzxiGD2LUzg93lcbHBMqGzgv2AwnLici','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','CMvMAw5L','mteYnde3mdbUv0DguvO','y2HYB21PDw0','BgLUDdPMAwX0zxiTDw5RBM93BI1VChrPB24','A2v5CW','iIbZzxrZigL0CYbVD24GC2L6zsbHBMqGC2nHBguG4OcuigrYB3aGB25Lig9MihrOzw0U','rgf0zvrPBwvgB3jTyxq','C3rKAw8','DMfSAwrHDg9YoNn0CMLUzY1JB25Jyxq','DMfSAwrHDg9YoMzVCI1ZAgfWzq','y3jHC2G','DMfSAwrHDg9YoMfYAxr5','BgLUDdPWyxvZzs1LEhbSAwnPDa','DMfSAwrHDg9YoNnLBwfUDgLJlwXVC3m','BNvTyMvY','zgvMyxvSDa','y2HYB21L','BgvUz3rO','DMfSAwrHDg9YoNvUC3vWCg9YDgvKlwv4ChjLC3nPB24','AxnuAw1LwM9Uzq','iIdIGjqGzgLKihLVDsbTzwfUici','C3rYAwn0t2jQzwn0','Dw5PB24','AgfZ','DMfSAwrHDg9YoNn0zxaTC2HHCgu','BgLUDdPKAxnHBwjPzY1IEs1PBMrLEa','BgLUDdPKzwvWlwnZCW','Cg9ZAxrPDMu','BgLUDdPLEhrLCM5HBc12yxjPywjSzs11BMrLy2XHCMvK','D2fYBG','DMfSAwrHDg9YoNDYyxbWzwqTzM9YBwf0','y3vZDg9T','BgLUDdPLy2HVlwfZC2vYDa','DxjS','ywnJzxb0','D2vIA2L0','B2jQzwn0','DMLLD3bVCNq','zw4Tvvm','zgLZBwLZCW','C3rYAw5N','CgvYlxrLC3q','A2v5','zgvMAw5LuhjVCgvYDhK','BgLUDdPSAw50lw9Rlw1PC3nPBMCTCMvHC29U','zxjYB3i','Dw5YzwnVz25PEMvKx2TLExm','DMfSAwrHDg9YoMz1BMn0Aw9UlxnOyxbL','y2XVC2vZDeTLEq','zMLYzwzVEa','mJm3CvLevwDX','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','DMfSAwrHDg9YoNn0zxaTy292zxjHz2u','mZq4ndq0uLrjy1zT','y2HYB21LlwjLDge','Dg9mB3DLCKnHC2u','AxnmB2nHBgu','BgLUDdPMBg93lxjLDhvYBNmTDMfSDwu','BgLUDdPLBNyTAg9ZDc1MCM9TlwjHC2u','zNvSBa','DMfSAwrHDg9YoMLMlxnOyxbL','BMv0D29YAW','B2zM','yM9VBgvHBG','mJqWruvgyNfb','ywrKsxnZDwu','BwLU','wM9KsxnZDwvdB2rL','Dw5RBM93BIb0Aw1LihPVBMuGiG','BgLUDdPZA2LWlw91DhnPzguTDgvZDa','BxnLzgDL','CMvKywn0zwq','ndGXmdG2meTgCxHxsW','igLZigfSCMvHzhKGyw5VDgHLCIbZzxj2zxiNCYdIGjqGzwfJAcbZzxj2zxiGBMvLzhmGAxrZig93BIbYzwfKAw5LC3mGvvjmlG','iIdIGjqGzxHWzwn0zwqGyw4GsufoqsbUyw1Lihn1y2GGyxmGiKv1CM9Wzs9nywrYAwqI','C3vWzxjszwzPBMu','DMLLD3bVCNq6ig51BgW','BgLUDdPSzwDHy3KTBgf5B3v0','Aw50','BgLUDdPTDxn0ywnOzs1PBI1KC2W','nKDhCePota','Dw5RBM93BIbRzxKGiG','C3rYAwn0'];_0x2333=function(){return _0x41b60b;};return _0x2333();}__name(viewportDeviceConflict,'viewportDeviceConflict');var RetryReasonSchema=_0xe0606c['enum'](['transient',_0x19cd0a(0x171),_0x19cd0a(0x13e)]),RetryConfigSchema=strictObject({'count':_0xe0606c[_0x19cd0a(0x142)]()['int']()[_0x19cd0a(0x176)](0x0)['max'](0xa),'on':_0xe0606c[_0x19cd0a(0x199)](RetryReasonSchema)}),FailureBundleConfigSchema=strictObject({'tier1':_0xe0606c[_0x19cd0a(0x1a2)](!![])[_0x19cd0a(0x143)](!![]),'tier2':_0xe0606c['boolean'](),'tier3':strictObject({'network':_0xe0606c[_0x19cd0a(0x173)](),'video':_0xe0606c['boolean']()}),'retention':strictObject({'runs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)](),'days':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)]()}),'storageDir':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1),'pageHtml':_0xe0606c['enum'](['redacted',_0x19cd0a(0x16f)])}),DialogPolicySchema=_0xe0606c[_0x19cd0a(0x18f)]([_0x19cd0a(0x156),_0x19cd0a(0x15b),_0x19cd0a(0x198)]),LinterRuleIdSchema=_0xe0606c[_0x19cd0a(0x18f)]([_0x19cd0a(0x14e),_0x19cd0a(0x18b),_0x19cd0a(0x167),_0x19cd0a(0x140),_0x19cd0a(0x14d),_0x19cd0a(0x1a4),'lint:scenario-in-root',_0x19cd0a(0x183),_0x19cd0a(0x194),'lint:regex-invalid',_0x19cd0a(0x154),'lint:api-call-file-body',_0x19cd0a(0x160),_0x19cd0a(0x16d),_0x19cd0a(0x181),_0x19cd0a(0x150),_0x19cd0a(0x16e),_0x19cd0a(0x18c),_0x19cd0a(0x19e),_0x19cd0a(0x179),_0x19cd0a(0x18d),_0x19cd0a(0x137),_0x19cd0a(0x18a),_0x19cd0a(0x13f),'validator:arg-kind',_0x19cd0a(0x168),_0x19cd0a(0x14c),'validator:meta-shape',_0x19cd0a(0x163),_0x19cd0a(0x13d),_0x19cd0a(0x170),'validator:var-shape',_0x19cd0a(0x193),_0x19cd0a(0x146),_0x19cd0a(0x13c),_0x19cd0a(0x141),'validator:list-arg',_0x19cd0a(0x152)]),LinterSeveritySchema=_0xe0606c[_0x19cd0a(0x18f)](['off','warn',_0x19cd0a(0x161)]),LinterConfigSchema=strictObject({'enabled':_0xe0606c[_0x19cd0a(0x173)](),'rules':_0xe0606c['record'](LinterRuleIdSchema,LinterSeveritySchema)}),QueueConfigSchema=strictObject({'enabled':_0xe0606c[_0x19cd0a(0x173)]()[_0x19cd0a(0x143)](!![]),'concurrency':_0xe0606c['number']()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x143)](0x1)}),ScheduleSchema=strictObject({'collection':_0xe0606c[_0x19cd0a(0x15c)]()['min'](0x1),'cron':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1),'env':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1)['optional'](),'prepare':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1)[_0x19cd0a(0x1a0)]()}),McpConfigSchema=strictObject({'transport':_0xe0606c['literal'](_0x19cd0a(0x13b))}),SandboxConfigSchema=strictObject({'shellCwd':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x1a0)](),'shellTimeoutMs':_0xe0606c[_0x19cd0a(0x142)]()['int']()['positive']()[_0x19cd0a(0x1a0)](),'exportSecrets':_0xe0606c[_0x19cd0a(0x199)](_0xe0606c['string']())[_0x19cd0a(0x1a0)](),'database':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x1a0)](),'apiBaseUrl':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x155)]()[_0x19cd0a(0x1a0)](),'uploadDir':_0xe0606c[_0x19cd0a(0x15c)]()['optional'](),'readRoots':_0xe0606c[_0x19cd0a(0x199)](_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1))[_0x19cd0a(0x1a0)]()}),WebServerConfigSchema=strictObject({'command':_0xe0606c['string']()[_0x19cd0a(0x176)](0x1),'url':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x155)](),'reuseExistingServer':_0xe0606c[_0x19cd0a(0x173)]()[_0x19cd0a(0x143)](!![]),'timeoutMs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x143)](0xea60)}),WebServersConfigSchema=_0xe0606c[_0x19cd0a(0x14a)]([WebServerConfigSchema,_0xe0606c[_0x19cd0a(0x199)](WebServerConfigSchema)[_0x19cd0a(0x176)](0x1)])[_0x19cd0a(0x188)](_0x45d9df=>Array[_0x19cd0a(0x196)](_0x45d9df)?_0x45d9df:[_0x45d9df])[_0x19cd0a(0x17f)]((_0x27043e,_0x42bb04)=>{var _0x3bbb79={_0x2d6454:0x14b,_0x331e9a:0x175,_0x16ab51:0x177,_0x468a6f:0x155},_0x49c68a=_0x19cd0a;const _0x3f70b6=new Set();_0x27043e[_0x49c68a(0x192)]((_0x2a7caf,_0xe4ea15)=>{var _0x473d35=_0x49c68a;_0x3f70b6[_0x473d35(_0x3bbb79._0x2d6454)](_0x2a7caf[_0x473d35(0x155)])&&_0x42bb04[_0x473d35(_0x3bbb79._0x331e9a)]({'code':_0xe0606c[_0x473d35(_0x3bbb79._0x16ab51)][_0x473d35(0x153)],'path':[_0xe4ea15,_0x473d35(0x155)],'message':'webServer['+_0xe4ea15+_0x473d35(0x19c)+_0x2a7caf[_0x473d35(_0x3bbb79._0x468a6f)]+_0x473d35(0x17d)}),_0x3f70b6['add'](_0x2a7caf['url']);});}),EnvConfigSchema=strictObject({'shared':_0xe0606c[_0x19cd0a(0x199)](_0xe0606c[_0x19cd0a(0x15c)]())[_0x19cd0a(0x143)]([])}),UnotestConfigSchema=strictObject({'baseUrl':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x155)]()['optional'](),'webServer':WebServersConfigSchema[_0x19cd0a(0x1a0)](),'generate':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1)[_0x19cd0a(0x1a0)](),'browsers':_0xe0606c[_0x19cd0a(0x199)](BrowserSchema)[_0x19cd0a(0x176)](0x1),'channel':BrowserChannelSchema,'viewport':ConfigViewportSchema['optional'](),'device':_0xe0606c['string']()[_0x19cd0a(0x176)](0x1)[_0x19cd0a(0x1a0)](),'timezone':_0xe0606c['string']()[_0x19cd0a(0x1a5)](isTimeZone,_0x926a62=>({'message':_0x19cd0a(0x178)+_0x926a62+_0x19cd0a(0x17e)}))[_0x19cd0a(0x1a0)](),'locale':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x1a5)](isLocale,_0xc9f061=>({'message':'invalid\x20locale\x20\x22'+_0xc9f061+_0x19cd0a(0x195)}))[_0x19cd0a(0x1a0)](),'maxContexts':_0xe0606c[_0x19cd0a(0x142)]()['int']()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x1a0)](),'launch':LaunchConfigSchema[_0x19cd0a(0x1a0)](),'retry':RetryConfigSchema,'failureBundle':FailureBundleConfigSchema,'dialogPolicy':DialogPolicySchema,'storageState':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x1a0)](),'testDir':_0xe0606c[_0x19cd0a(0x15c)]()[_0x19cd0a(0x176)](0x1),'helpersDir':_0xe0606c['string']()[_0x19cd0a(0x176)](0x1),'defaultTimeoutMs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)](),'defaultNavigationTimeoutMs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)](),'teardownTimeoutMs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x1a0)](),'testTimeoutMs':_0xe0606c[_0x19cd0a(0x142)]()[_0x19cd0a(0x182)]()[_0x19cd0a(0x14f)]()[_0x19cd0a(0x1a0)](),'env':EnvConfigSchema,'linter':LinterConfigSchema,'mcp':McpConfigSchema,'queue':QueueConfigSchema,'schedules':_0xe0606c[_0x19cd0a(0x199)](ScheduleSchema)[_0x19cd0a(0x143)]([]),'sandbox':SandboxConfigSchema})['superRefine']((_0x15d6ea,_0x42adf8)=>{var _0x10bb67={_0xef2c33:0x177},_0x381d3d=_0x19cd0a;const _0x22164e=viewportDeviceConflict(_0x15d6ea[_0x381d3d(0x159)],_0x15d6ea['device']);_0x22164e!==void 0x0&&_0x42adf8[_0x381d3d(0x175)]({'code':_0xe0606c[_0x381d3d(_0x10bb67._0xef2c33)][_0x381d3d(0x153)],'path':[_0x381d3d(0x159)],'message':_0x22164e});});function isTimeZone(_0x40063c){var _0xe0d05d={_0x30d144:0x13a,_0x4b6c43:0x15a,_0x219c10:0x145},_0x2823b0=_0x19cd0a;try{return new Intl[(_0x2823b0(_0xe0d05d._0x30d144))](_0x2823b0(_0xe0d05d._0x4b6c43),{'timeZone':_0x40063c}),_0x40063c[_0x2823b0(_0xe0d05d._0x219c10)]>0x0;}catch{return![];}}__name(isTimeZone,_0x19cd0a(0x147));function isLocale(_0x39bc67){var _0x121591={_0x14cd11:0x19b},_0x1bd91e=_0x19cd0a;try{return Intl[_0x1bd91e(_0x121591._0x14cd11)](_0x39bc67)[_0x1bd91e(0x145)]===0x1;}catch{return![];}}__name(isLocale,_0x19cd0a(0x16c));var DEFAULT_CONFIG={'browsers':[_0x19cd0a(0x136)],'retry':{'count':0x0,'on':['transient']},'failureBundle':{'tier1':!![],'tier2':!![],'tier3':{'network':![],'video':![]},'retention':{'runs':0x14,'days':0x7},'storageDir':'.unotest/failures','pageHtml':_0x19cd0a(0x17b)},'dialogPolicy':'accept','testDir':'unotest/e2e','helpersDir':_0x19cd0a(0x19d),'defaultTimeoutMs':0xbb8,'defaultNavigationTimeoutMs':0x7530,'linter':{'enabled':!![],'rules':{'lint:deep-css':'warn','lint:xpath':_0x19cd0a(0x151),'lint:obfuscated-class':'warn','lint:pause-explicit':'warn','lint:disambig-by-index':_0x19cd0a(0x172),'lint:evaluate-discouraged':_0x19cd0a(0x151),'lint:scenario-in-root':_0x19cd0a(0x161),'lint:mustache-in-dsl':'error','lint:goto-concat':'warn','lint:regex-invalid':_0x19cd0a(0x161),'lint:echo-assert':_0x19cd0a(0x151),'lint:lint-ok-missing-reason':_0x19cd0a(0x151),'lint:flow-returns-value':'warn','lint:legacy-layout':'warn','lint:external-variable-undeclared':_0x19cd0a(0x161),'lint:env-host-from-base':'error','lint:one-test-per-file':_0x19cd0a(0x151),'lint:shadows-dsl-function':_0x19cd0a(0x151),'lint:skip-outside-test':_0x19cd0a(0x161),'lint:set-test-timeout-outside-test':_0x19cd0a(0x161),'lint:filter-unknown-option':_0x19cd0a(0x161),'validator:unknown-function':'error'}},'env':{'shared':[]},'mcp':{'transport':_0x19cd0a(0x13b)},'queue':{'enabled':!![],'concurrency':0x1},'schedules':[],'sandbox':{}};export{BROWSER_CHANNEL_WORDS,BrowserChannelSchema,BrowserSchema,DEFAULT_CONFIG,DialogPolicySchema,EnvConfigSchema,FailureBundleConfigSchema,LinterConfigSchema,LinterRuleIdSchema,LinterSeveritySchema,McpConfigSchema,QueueConfigSchema,RetryConfigSchema,RetryReasonSchema,SYSTEM_BROWSER_CHANNELS,SandboxConfigSchema,ScheduleSchema,UnotestConfigSchema,ViewportSchema,WebServerConfigSchema,WebServersConfigSchema,viewportDeviceConflict};