@noego/wood 0.4.0 → 0.4.2

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.
Files changed (85) hide show
  1. package/README.md +100 -2
  2. package/dist/client/global_polyfill.d.cts +1 -2
  3. package/dist/client/global_polyfill.d.ts +1 -2
  4. package/dist/client/index.cjs.map +1 -1
  5. package/dist/client/index.d.cts +1 -1
  6. package/dist/client/index.d.ts +1 -1
  7. package/dist/client/index.js.map +1 -1
  8. package/dist/index.cjs +0 -4
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +0 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/main/index.cjs +16 -2
  15. package/dist/main/index.cjs.map +1 -1
  16. package/dist/main/index.js +16 -2
  17. package/dist/main/index.js.map +1 -1
  18. package/dist/runtime/runtime.cjs +4 -4
  19. package/dist/runtime/runtime.cjs.map +1 -1
  20. package/dist/runtime/runtime.d.cts +2 -1
  21. package/dist/runtime/runtime.d.ts +2 -1
  22. package/dist/runtime/runtime.js +8 -5
  23. package/dist/runtime/runtime.js.map +1 -1
  24. package/dist/testing/browser.cjs +224 -32
  25. package/dist/testing/browser.cjs.map +1 -1
  26. package/dist/testing/browser.d.cts +18 -1
  27. package/dist/testing/browser.d.ts +18 -1
  28. package/dist/testing/browser.js +226 -32
  29. package/dist/testing/browser.js.map +1 -1
  30. package/dist/testing/create_controller_harness.cjs +3 -1
  31. package/dist/testing/create_controller_harness.cjs.map +1 -1
  32. package/dist/testing/create_controller_harness.d.cts +4 -2
  33. package/dist/testing/create_controller_harness.d.ts +4 -2
  34. package/dist/testing/create_controller_harness.js +3 -1
  35. package/dist/testing/create_controller_harness.js.map +1 -1
  36. package/dist/testing/index.cjs +3 -3
  37. package/dist/testing/index.cjs.map +1 -1
  38. package/dist/testing/index.d.cts +6 -4
  39. package/dist/testing/index.d.ts +6 -4
  40. package/dist/testing/index.js +2 -2
  41. package/dist/testing/index.js.map +1 -1
  42. package/dist/trace-testing/index.cjs +39 -0
  43. package/dist/trace-testing/index.cjs.map +1 -0
  44. package/dist/trace-testing/index.d.cts +6 -0
  45. package/dist/trace-testing/index.d.ts +6 -0
  46. package/dist/trace-testing/index.js +19 -0
  47. package/dist/trace-testing/index.js.map +1 -0
  48. package/dist/trace-testing/trace_assertions.cjs +29 -0
  49. package/dist/trace-testing/trace_assertions.cjs.map +1 -0
  50. package/dist/trace-testing/trace_assertions.d.cts +1 -0
  51. package/dist/trace-testing/trace_assertions.d.ts +1 -0
  52. package/dist/trace-testing/trace_assertions.js +7 -0
  53. package/dist/trace-testing/trace_assertions.js.map +1 -0
  54. package/dist/trace-testing/trace_query.cjs +33 -0
  55. package/dist/trace-testing/trace_query.cjs.map +1 -0
  56. package/dist/trace-testing/trace_query.d.cts +1 -0
  57. package/dist/trace-testing/trace_query.d.ts +1 -0
  58. package/dist/trace-testing/trace_query.js +11 -0
  59. package/dist/trace-testing/trace_query.js.map +1 -0
  60. package/dist/trace-testing/trace_recorder.cjs +50 -0
  61. package/dist/trace-testing/trace_recorder.cjs.map +1 -0
  62. package/dist/trace-testing/trace_recorder.d.cts +12 -0
  63. package/dist/trace-testing/trace_recorder.d.ts +12 -0
  64. package/dist/trace-testing/trace_recorder.js +32 -0
  65. package/dist/trace-testing/trace_recorder.js.map +1 -0
  66. package/dist/tracing/index.cjs +0 -4
  67. package/dist/tracing/index.cjs.map +1 -1
  68. package/dist/tracing/index.d.cts +1 -1
  69. package/dist/tracing/index.d.ts +1 -1
  70. package/dist/tracing/index.js +1 -5
  71. package/dist/tracing/index.js.map +1 -1
  72. package/dist/tracing/trace_hub.cjs +19 -86
  73. package/dist/tracing/trace_hub.cjs.map +1 -1
  74. package/dist/tracing/trace_hub.d.cts +11 -16
  75. package/dist/tracing/trace_hub.d.ts +11 -16
  76. package/dist/tracing/trace_hub.js +19 -74
  77. package/dist/tracing/trace_hub.js.map +1 -1
  78. package/dist/tracing/trace_provider.cjs +0 -6
  79. package/dist/tracing/trace_provider.cjs.map +1 -1
  80. package/dist/tracing/trace_provider.d.cts +1 -3
  81. package/dist/tracing/trace_provider.d.ts +1 -3
  82. package/dist/tracing/trace_provider.js +0 -7
  83. package/dist/tracing/trace_provider.js.map +1 -1
  84. package/docs/browser-testing.md +84 -0
  85. package/package.json +8 -1
@@ -162,6 +162,90 @@ bridge, for example `settings.get` or `messages.send`. Static values are
162
162
  returned directly. Functions receive the operation input and a small context
163
163
  with the channel and recorded calls.
164
164
 
165
+ ## Tracing Browser Scenarios
166
+
167
+ Use browser-harness tracing when the behavior under test is a renderer pipeline:
168
+ route/controller selection, repeated work, resize or animation timing,
169
+ stream/reconcile order, bridge calls, or any case where the final DOM is not
170
+ enough to prove what happened.
171
+
172
+ Enable tracing on the harness with `trace.enabled`. The harness creates a
173
+ `TraceRecorder`, installs the renderer trace bridge, and exposes the recorder as
174
+ `harness.traceRecorder`.
175
+
176
+ ```ts
177
+ import { browser } from '@noego/wood/testing';
178
+
179
+ const harness = await browser.createHarness({
180
+ rootDir: process.cwd(),
181
+ componentDir: 'ui',
182
+ css: ['ui/app.css'],
183
+ trace: {
184
+ enabled: true,
185
+ harnessId: 'settings-panel-test',
186
+ windowId: 'settings-window',
187
+ maxEvents: 500,
188
+ },
189
+ });
190
+
191
+ try {
192
+ const mounted = await harness.mountComponent('ui/SettingsPanel.svelte');
193
+
194
+ await mounted.page.evaluate(() => {
195
+ window.wood.__trace({
196
+ source: 'settings.panel',
197
+ type: 'settings.panel.rendered',
198
+ payload: { tab: 'appearance' },
199
+ });
200
+ });
201
+
202
+ await expect(harness.traceRecorder?.waitForTrace({
203
+ type: 'settings.panel.rendered',
204
+ harnessId: 'settings-panel-test',
205
+ })).resolves.toMatchObject({
206
+ process: 'renderer',
207
+ payload: { tab: 'appearance' },
208
+ });
209
+
210
+ const trace = harness.traceRecorder?.query();
211
+ trace?.expectOnce({ type: 'settings.panel.rendered' });
212
+ } finally {
213
+ await harness.destroy();
214
+ }
215
+ ```
216
+
217
+ Renderer trace events are forwarded through the Wood bridge into the same trace
218
+ stream used by main-process and test-process events. The resulting events keep
219
+ their `process` field, so tests can assert whether an event came from
220
+ `renderer`, `main`, or `test`.
221
+
222
+ Useful options:
223
+
224
+ - `enabled`: turns on renderer forwarding and creates `harness.traceRecorder`.
225
+ - `harnessId`: tags events from this test so assertions can filter them.
226
+ - `windowId`: tags events with a stable window identity.
227
+ - `maxEvents`: caps the in-memory recorder buffer.
228
+ - `minLevel`: filters lower-level trace events before they reach the recorder.
229
+
230
+ Use `harness.traceRecorder?.query()` for counts, ordered sequences, payload
231
+ checks, and negative assertions:
232
+
233
+ ```ts
234
+ const trace = harness.traceRecorder?.query();
235
+
236
+ trace?.expectSequence([
237
+ { type: 'transcript.projection.started' },
238
+ { type: 'transcript.projection.completed', 'payload.changedRows': 2 },
239
+ ]);
240
+ trace?.expectNone({ type: 'transcript.projection.failed' });
241
+ expect(trace?.count({ type: 'transcript.scroll-plan' })).toBeLessThanOrEqual(1);
242
+ ```
243
+
244
+ For Node-only controller tests, use the controller harness' `traceRecorder` or
245
+ resolve `TraceRecorder` from the test container, call `enable()`, run the
246
+ subject, then assert against `traceRecorder.query()`. For browser harness tests,
247
+ prefer the `trace` harness config because it also wires renderer forwarding.
248
+
165
249
  ## Assertions
166
250
 
167
251
  Every mounted surface exposes Playwright's `page` and `locator`, plus
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noego/wood",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -43,6 +43,12 @@
43
43
  "import": "./dist/testing/index.js",
44
44
  "default": "./dist/testing/index.js"
45
45
  },
46
+ "./trace-testing": {
47
+ "types": "./dist/trace-testing/index.d.ts",
48
+ "require": "./dist/trace-testing/index.cjs",
49
+ "import": "./dist/trace-testing/index.js",
50
+ "default": "./dist/trace-testing/index.js"
51
+ },
46
52
  "./client": {
47
53
  "types": "./dist/client/index.d.ts",
48
54
  "require": "./dist/client/index.cjs",
@@ -96,6 +102,7 @@
96
102
  "@noego/ioc": "^0.3.1",
97
103
  "@noego/logger": "^0.0.2",
98
104
  "@noego/stitch": "^1.0.3",
105
+ "@noego/trace": "^0.0.2",
99
106
  "ajv": "^8.x",
100
107
  "ajv-formats": "^3.x",
101
108
  "chokidar": "^4.x",