@unotest/viewer 0.26.0 → 0.27.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/CHANGELOG.md +130 -0
- package/dist/server/main.d.ts +9 -1
- package/dist/server/main.js +1 -1
- package/dist/server/session.js +1 -1
- package/dist/web/assets/{DslEditor-wifnRBrr.js → DslEditor-CV43IwH6.js} +2 -2
- package/dist/web/assets/index-LOIsj_xr.js +55 -0
- package/dist/web/assets/index-RCE6y6j4.css +32 -0
- package/dist/web/index.html +2 -2
- package/package.json +6 -6
- package/dist/web/assets/index-BLJmmyy1.css +0 -32
- package/dist/web/assets/index-NnxVWV8z.js +0 -55
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,135 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.27.0] - 2026-08-31
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- The server boots quietly: Nest's per-module / per-route boot log is
|
|
8
|
+
gone from normal runs — the launcher's one useful line is the URL.
|
|
9
|
+
`UNOTEST_DEBUG` brings the full boot map back.
|
|
10
|
+
|
|
11
|
+
- The LOCAL schedule registry now shows the EFFECTIVE merged set too:
|
|
12
|
+
both store flavours read through one `EffectiveSchedulesReader`
|
|
13
|
+
(`schedules --json` across a process boundary), so config-declared
|
|
14
|
+
entries appear locally, stamped `source: "config"` and opened as a
|
|
15
|
+
read-only card ("declared in `unotest.config` — edit it there");
|
|
16
|
+
yaml entries stay editable. A PUT carries only the file half and
|
|
17
|
+
answers with the re-merged whole (`SchedulesView` for both verbs);
|
|
18
|
+
the envelope gains `driftedFromPush` — on a box, true when the set
|
|
19
|
+
read there hashes differently from the fingerprint recorded at push,
|
|
20
|
+
shown as a warning line in Home schedule mode. The local schedule
|
|
21
|
+
mode gets its own caption: "declared here — a box runs what you
|
|
22
|
+
push". Runners without a schedules command fall back to the yaml
|
|
23
|
+
half, unchanged.
|
|
24
|
+
|
|
25
|
+
- The schedule registry on a deployed tree (a box environment) is now
|
|
26
|
+
the EFFECTIVE merged set, read-only. `GET /api/schedules` returns
|
|
27
|
+
`{ schedules, readOnly }`; on a box the entries come from the
|
|
28
|
+
project's own CLI (`schedules --json` via the runner adapter's new
|
|
29
|
+
`schedulesArgs()`), so config-declared schedules are no longer
|
|
30
|
+
invisible in the UI. The Schedule popup becomes a read-only card with
|
|
31
|
+
a provenance note ("declared in the repo — edit there and push"), the
|
|
32
|
+
Home schedule mode shows a matching badge, and `PUT /api/schedules`
|
|
33
|
+
is refused with 403: on a box that write used to land in a disposable
|
|
34
|
+
bundle copy nothing ever re-read. Local viewers are unchanged —
|
|
35
|
+
editing the file is still the workflow there.
|
|
36
|
+
|
|
37
|
+
- c843d21: Schedules from the viewer — for collections and single tests.
|
|
38
|
+
|
|
39
|
+
Right-click a test or a collection in the viewer → **Schedule…**: a
|
|
40
|
+
human schedule builder (frequency select — every 5/15 min, hourly,
|
|
41
|
+
every 2/4/6/12 h, daily, weekly — plus toggle badges for minutes,
|
|
42
|
+
hours and weekdays; multi-select, so `04` + `16` × `00` + `30` runs
|
|
43
|
+
four times a day). Saved to `unotest/schedules.yaml`, versioned next
|
|
44
|
+
to the tests; a box applies it after commit & sync. The Home screen
|
|
45
|
+
gains a `last run | schedule` toggle: in schedule mode tiles are
|
|
46
|
+
tinted by how often a test runs (grey = not scheduled), with an
|
|
47
|
+
upcoming list and per-tile next-run times in your browser's clock.
|
|
48
|
+
|
|
49
|
+
Under the hood:
|
|
50
|
+
|
|
51
|
+
- `unotest/schedules.yaml` is a new schedule registry; `unotest-web
|
|
52
|
+
schedules [--json]` prints it merged with the config's `schedules`
|
|
53
|
+
(the file wins on a duplicate target), so boxes pick both up
|
|
54
|
+
unchanged.
|
|
55
|
+
- A schedule entry may now target a single test: `scenario:
|
|
56
|
+
<ref>` instead of `collection: <name>`.
|
|
57
|
+
- `unotest-web e2e <name> --scheduled[=index]` runs a test the way its
|
|
58
|
+
entry says (env + prepare, exit 94 when prepare fails) — the
|
|
59
|
+
per-test mirror of `collection --scheduled`.
|
|
60
|
+
- Viewer server: `GET/PUT /api/schedules` (validated by the same
|
|
61
|
+
parser the CLI reads the file with).
|
|
62
|
+
|
|
63
|
+
### Patch Changes
|
|
64
|
+
|
|
65
|
+
- Updated dependencies [c843d21]
|
|
66
|
+
- @unotest/protocol@0.27.0
|
|
67
|
+
- @unotest/core@0.27.0
|
|
68
|
+
- @unotest/dsl@0.27.0
|
|
69
|
+
|
|
70
|
+
## [0.26.1] - 2026-08-30
|
|
71
|
+
|
|
72
|
+
### Patch Changes
|
|
73
|
+
|
|
74
|
+
- Fix: a run started from a box's viewer stayed pending and never reached
|
|
75
|
+
the history
|
|
76
|
+
|
|
77
|
+
The viewer watched the run directories of environments it could see on
|
|
78
|
+
disk — overlay files `unotest/.env.<name>` and existing `.runs.<name>`
|
|
79
|
+
directories. A box has neither at start: environment values come from the
|
|
80
|
+
daemon, not from a file, and the runs directory appears with the first
|
|
81
|
+
run. So the viewer watched only the base root while every run was filed
|
|
82
|
+
under `.runs.<environment>`: the tab stayed PENDING, the history stayed
|
|
83
|
+
empty and the run 404-ed by its own id, until a restart happened to find
|
|
84
|
+
the directory already there. The environment a viewer was started for is
|
|
85
|
+
now known to it by definition, whatever the disk says.
|
|
86
|
+
|
|
87
|
+
- Fix: a run's captured output landed outside the run's directory
|
|
88
|
+
|
|
89
|
+
`stdout.log` / `stderr.log` were written to `<runs-root>/<runId>/` while
|
|
90
|
+
the run itself lives under its date shard — two orphan directories next to
|
|
91
|
+
the shard, holding the only copy of what the child said.
|
|
92
|
+
|
|
93
|
+
- Fix: a viewer started for an environment listed no runs at all
|
|
94
|
+
|
|
95
|
+
The standalone launcher read the project root, the port, the host and the
|
|
96
|
+
target from its environment — but not `UNOTEST_ENV`. A box starts one
|
|
97
|
+
viewer per environment and names it exactly that way, so every one of them
|
|
98
|
+
came up on the BASE runs directory while its runs were being filed under
|
|
99
|
+
`.runs.<environment>`: an empty history on a box that had just finished a
|
|
100
|
+
suite. Found on the first end-to-end run of the local box stand.
|
|
101
|
+
|
|
102
|
+
- 9424f6b: Fix: screenshots stayed blank in the viewer when runs write to a separate
|
|
103
|
+
artifact root
|
|
104
|
+
|
|
105
|
+
A run whose artifacts do not live under the working directory — every run on
|
|
106
|
+
a box, where the sources are a disposable copy of a test bundle — emitted
|
|
107
|
+
`screenshot` events whose path was relativised against the working directory.
|
|
108
|
+
That came out as `../../../…`, which the viewer's asset route refuses to
|
|
109
|
+
serve, so every step preview rendered as a broken image. Artifact paths are
|
|
110
|
+
now relative to the artifact root, which is still the project root on every
|
|
111
|
+
local run.
|
|
112
|
+
|
|
113
|
+
The failure bundle had the mirror-image problem: it was written to
|
|
114
|
+
`.unotest/failures/` under the working directory, so on a box it landed
|
|
115
|
+
inside the bundle copy — outside the tree the viewer serves, and discarded on
|
|
116
|
+
the next bundle push. It now hangs off the artifact root too, which leaves
|
|
117
|
+
local runs byte-for-byte unchanged.
|
|
118
|
+
|
|
119
|
+
The inspector's Semantic DOM, Console, Network and Snapshot panes were dark
|
|
120
|
+
for a third reason, and this one bit local runs as well: they composed the
|
|
121
|
+
run's directory in the browser and left out the date shard runs have been
|
|
122
|
+
filed under since M-10, plus the environment suffix on a box. The viewer's
|
|
123
|
+
asset route now takes `?file=<name-relative-to-the-run-dir>` and resolves the
|
|
124
|
+
directory itself — runs root, target suffix, environment suffix and shard are
|
|
125
|
+
all things only the server knows. `?path=` stays for the whole paths the
|
|
126
|
+
server ships on run events.
|
|
127
|
+
|
|
128
|
+
- Updated dependencies [9424f6b]
|
|
129
|
+
- @unotest/protocol@0.26.1
|
|
130
|
+
- @unotest/core@0.26.1
|
|
131
|
+
- @unotest/dsl@0.26.1
|
|
132
|
+
|
|
3
133
|
## [0.26.0] - 2026-08-30
|
|
4
134
|
|
|
5
135
|
### Minor Changes
|
package/dist/server/main.d.ts
CHANGED
|
@@ -73,6 +73,14 @@ declare function startViewerServer(opts: StartViewerOptions): Promise<ViewerHand
|
|
|
73
73
|
* the installed `@unotest/*` runner packages (by name — DIP boundary
|
|
74
74
|
* intact). `UNOTEST_RUNNER_PKG` (legacy single-runner var) and
|
|
75
75
|
* `UNOTEST_TARGET` just pick which detected target is active at boot. */
|
|
76
|
+
/** Everything the standalone launcher reads from its environment, in one
|
|
77
|
+
* pure place so the plumbing is testable without starting a server.
|
|
78
|
+
*
|
|
79
|
+
* `activeEnv` is the one that has bitten: a box starts one viewer per
|
|
80
|
+
* environment and says which through `UNOTEST_ENV`. Dropping it left every
|
|
81
|
+
* viewer reading the BASE runs directory while its runs were filed under
|
|
82
|
+
* `.runs.<env>` — an empty history on a box that had just run a suite. */
|
|
83
|
+
declare function viewerCliOptions(env: NodeJS.ProcessEnv, cwd: string): Omit<StartViewerOptions, "runners">;
|
|
76
84
|
declare function runViewerCli(): Promise<void>;
|
|
77
85
|
|
|
78
|
-
export { type RunnerEntry, type StartViewerOptions, type ViewerHandle, runViewerCli, startViewerServer };
|
|
86
|
+
export { type RunnerEntry, type StartViewerOptions, type ViewerHandle, runViewerCli, startViewerServer, viewerCliOptions };
|