@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.
- package/.claude/skills/write-e2e-test/SKILL.md +4 -0
- package/.claude/skills/write-e2e-test-ground/SKILL.md +4 -0
- package/CHANGELOG.md +95 -3
- package/README.md +2 -1
- package/dist/config/schema.d.ts +33 -12
- package/dist/config/schema.js +1 -1
- package/dist/driver/index.js +1 -1
- package/dist/dsl/index.d.ts +18 -1
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/web-dsl-language-service.d.ts +1 -1
- package/dist/dsl/web-dsl-language-service.js +1 -1
- package/dist/{linter-BWSAYBQy.d.ts → linter-RrjB1n9R.d.ts} +5 -0
- package/dist/mcp/server.js +1 -1
- package/dist/runner/cli.d.ts +1 -1
- package/dist/runner/cli.js +1 -1
- package/dist/runner/init/chrome-probe.js +1 -1
- package/dist/runner/init.d.ts +6 -1
- package/dist/runner/init.js +1 -1
- package/dist/runner/install-chromium.js +1 -1
- package/dist/runner/prepare-fix.js +1 -1
- package/dist/runner/scaffold-workspace.js +1 -1
- package/dist/runner/serve-fixture.js +1 -1
- package/dist/runner/web-runner-adapter.js +1 -1
- package/guides/dsl-reference.md +55 -17
- package/package.json +8 -8
- package/src/mcp/prompts/agent-test-author.md +10 -7
|
@@ -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
|
-
|
|
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
|
-
|
|
1645
|
-
|
|
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.
|
|
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
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -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 };
|
package/dist/config/schema.js
CHANGED
|
@@ -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};
|