@rettangoli/vt 1.0.3 → 1.0.4
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/README.md +9 -5
- package/package.json +1 -1
- package/src/cli/generate-options.js +8 -1
- package/src/validation.js +1 -1
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ Behavior split:
|
|
|
21
21
|
- `--concurrency <number>`
|
|
22
22
|
- `--timeout <ms>`
|
|
23
23
|
- `--wait-event <name>`
|
|
24
|
+
- `--isolation <fast|strict>`
|
|
24
25
|
- `--folder <path>` (repeatable)
|
|
25
26
|
- `--group <section-key>` (repeatable)
|
|
26
27
|
- `--item <spec-path>` (repeatable)
|
|
@@ -69,7 +70,7 @@ rtgl vt report --group components-basic
|
|
|
69
70
|
rtgl vt report --item components/forms/login
|
|
70
71
|
```
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
Other capture tuning remains internal and intentionally not user-configurable.
|
|
73
74
|
|
|
74
75
|
## Config
|
|
75
76
|
|
|
@@ -85,6 +86,7 @@ vt:
|
|
|
85
86
|
concurrency: 4
|
|
86
87
|
timeout: 30000
|
|
87
88
|
waitEvent: vt:ready
|
|
89
|
+
isolationMode: strict
|
|
88
90
|
viewport:
|
|
89
91
|
id: desktop
|
|
90
92
|
width: 1280
|
|
@@ -99,6 +101,8 @@ Notes:
|
|
|
99
101
|
- `vt.sections` is required.
|
|
100
102
|
- `vt.service` is optional. When set, VT starts the command before capture, waits for `vt.url`, then stops it after capture.
|
|
101
103
|
- when `vt.service` is omitted and `vt.url` is set, VT expects that URL to already be running.
|
|
104
|
+
- `vt.isolationMode` is optional: `fast` or `strict`. Default is `fast`.
|
|
105
|
+
- `strict` uses a fresh browser context per captured spec and is recommended for real app routes or IndexedDB-backed state.
|
|
102
106
|
- Section page keys are derived as `kebab-case(title)` for flat sections and group `items[].title`.
|
|
103
107
|
- Derived section page keys must be unique case-insensitively.
|
|
104
108
|
- `vt.viewport` supports object or array; each viewport requires `id`, `width`, `height`.
|
|
@@ -142,15 +146,15 @@ Screenshot naming:
|
|
|
142
146
|
A pre-built Docker image with `rtgl` and Playwright browsers is available:
|
|
143
147
|
|
|
144
148
|
```bash
|
|
145
|
-
docker pull han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.
|
|
149
|
+
docker pull han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.12
|
|
146
150
|
```
|
|
147
151
|
|
|
148
152
|
Run commands against a local project:
|
|
149
153
|
|
|
150
154
|
```bash
|
|
151
|
-
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.
|
|
152
|
-
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.
|
|
153
|
-
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.
|
|
155
|
+
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.12 rtgl vt screenshot
|
|
156
|
+
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.12 rtgl vt report
|
|
157
|
+
docker run --rm -v "$(pwd):/workspace" han4wluc/rtgl:playwright-v1.57.0-rtgl-v1.0.12 rtgl vt accept
|
|
154
158
|
```
|
|
155
159
|
|
|
156
160
|
Note:
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ export function resolveGenerateOptions(options = {}, configData = {}) {
|
|
|
11
11
|
concurrency: cliConcurrency,
|
|
12
12
|
timeout: cliTimeout,
|
|
13
13
|
waitEvent: cliWaitEvent,
|
|
14
|
+
isolation: cliIsolation,
|
|
14
15
|
folder: cliFolder,
|
|
15
16
|
group: cliGroup,
|
|
16
17
|
item: cliItem,
|
|
@@ -20,6 +21,7 @@ export function resolveGenerateOptions(options = {}, configData = {}) {
|
|
|
20
21
|
|
|
21
22
|
const waitEvent = cliWaitEvent ?? configData.waitEvent;
|
|
22
23
|
const timeout = cliTimeout ?? configData.timeout ?? 30000;
|
|
24
|
+
const isolationMode = cliIsolation ?? configData.isolationMode ?? "fast";
|
|
23
25
|
const selectors = normalizeSelectors({
|
|
24
26
|
folder: cliFolder,
|
|
25
27
|
group: cliGroup,
|
|
@@ -52,7 +54,7 @@ export function resolveGenerateOptions(options = {}, configData = {}) {
|
|
|
52
54
|
screenshotWaitTime: 0,
|
|
53
55
|
waitStrategy: waitEvent ? "event" : "load",
|
|
54
56
|
workerCount: cliConcurrency ?? configData.concurrency ?? undefined, // adaptive worker planning
|
|
55
|
-
isolationMode
|
|
57
|
+
isolationMode,
|
|
56
58
|
navigationTimeout: timeout,
|
|
57
59
|
readyTimeout: timeout,
|
|
58
60
|
screenshotTimeout: timeout,
|
|
@@ -84,6 +86,11 @@ export function resolveGenerateOptions(options = {}, configData = {}) {
|
|
|
84
86
|
throw new Error(`Invalid waitEvent: expected a non-empty string, got ${typeof resolvedOptions.waitEvent}.`);
|
|
85
87
|
}
|
|
86
88
|
}
|
|
89
|
+
if (!["fast", "strict"].includes(resolvedOptions.isolationMode)) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`Invalid isolation: expected "fast" or "strict", got "${resolvedOptions.isolationMode}".`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
87
94
|
if (resolvedOptions.configUrl !== undefined && resolvedOptions.configUrl !== null) {
|
|
88
95
|
if (typeof resolvedOptions.configUrl !== "string" || resolvedOptions.configUrl.trim().length === 0) {
|
|
89
96
|
throw new Error(`Invalid url: expected a non-empty string, got ${typeof resolvedOptions.configUrl}.`);
|
package/src/validation.js
CHANGED
|
@@ -112,7 +112,6 @@ const LEGACY_CAPTURE_FIELDS = {
|
|
|
112
112
|
waitSelector: true,
|
|
113
113
|
waitStrategy: true,
|
|
114
114
|
workerCount: true,
|
|
115
|
-
isolationMode: true,
|
|
116
115
|
navigationTimeout: true,
|
|
117
116
|
readyTimeout: true,
|
|
118
117
|
screenshotTimeout: true,
|
|
@@ -557,6 +556,7 @@ export function validateVtConfig(vtConfig, sourcePath = "rettangoli.config.yaml"
|
|
|
557
556
|
validateOptionalNumber(vtConfig.concurrency, "vt.concurrency", { integer: true, min: 1 });
|
|
558
557
|
validateOptionalNumber(vtConfig.timeout, "vt.timeout", { integer: true, min: 1 });
|
|
559
558
|
validateOptionalString(vtConfig.waitEvent, "vt.waitEvent");
|
|
559
|
+
validateOptionalEnum(vtConfig.isolationMode, "vt.isolationMode", ["fast", "strict"]);
|
|
560
560
|
normalizeViewportField(vtConfig.viewport, "vt.viewport");
|
|
561
561
|
validateOptionalNumber(vtConfig.colorThreshold, "vt.colorThreshold", { min: 0, max: 1 });
|
|
562
562
|
validateOptionalNumber(vtConfig.diffThreshold, "vt.diffThreshold", { min: 0, max: 100 });
|