waygraph 0.15.18 → 0.15.20

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 (45) hide show
  1. package/README.md +68 -18
  2. package/dist/auto-session.d.ts +10 -1
  3. package/dist/auto-session.js +27 -7
  4. package/dist/cli.js +98 -31
  5. package/dist/engine.d.ts +20 -0
  6. package/dist/engine.js +18 -0
  7. package/dist/highlight-shorthand.d.ts +24 -0
  8. package/dist/highlight-shorthand.js +30 -0
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.js +2 -1
  11. package/dist/mem-stub.d.ts +41 -0
  12. package/dist/mem-stub.js +36 -0
  13. package/dist/practices-check.d.ts +1 -1
  14. package/dist/practices-check.js +36 -0
  15. package/examples/saucedemo/.waygraph-auto/11c497cd.log +44 -0
  16. package/examples/saucedemo/.waygraph-auto/29d11a49.log +44 -0
  17. package/examples/saucedemo/.waygraph-auto/2c9a4003.log +44 -0
  18. package/examples/saucedemo/.waygraph-auto/32ef32a8.log +44 -0
  19. package/examples/saucedemo/.waygraph-auto/36ba01f7.log +44 -0
  20. package/examples/saucedemo/.waygraph-auto/4c6b9e15.log +0 -0
  21. package/examples/saucedemo/.waygraph-auto/537af83d.log +44 -0
  22. package/examples/saucedemo/.waygraph-auto/5adfacd5.log +44 -0
  23. package/examples/saucedemo/.waygraph-auto/76c7d418.log +44 -0
  24. package/examples/saucedemo/.waygraph-auto/78197960.log +44 -0
  25. package/examples/saucedemo/.waygraph-auto/7c2acbc2.log +44 -0
  26. package/examples/saucedemo/.waygraph-auto/7eded669.log +0 -0
  27. package/examples/saucedemo/.waygraph-auto/844b63ff.log +44 -0
  28. package/examples/saucedemo/.waygraph-auto/88a4200b.log +0 -0
  29. package/examples/saucedemo/.waygraph-auto/b0eed995.log +44 -0
  30. package/examples/saucedemo/.waygraph-auto/bb69dc1a.log +44 -0
  31. package/examples/saucedemo/.waygraph-auto/bc4ae56f.log +0 -0
  32. package/examples/saucedemo/.waygraph-auto/c17253b0.log +44 -0
  33. package/examples/saucedemo/.waygraph-auto/c31a9465.log +0 -0
  34. package/examples/saucedemo/.waygraph-auto/c5ac2393.log +44 -0
  35. package/examples/saucedemo/.waygraph-auto/c701e3c2.log +0 -0
  36. package/examples/saucedemo/.waygraph-auto/d207a000.log +44 -0
  37. package/examples/saucedemo/.waygraph-auto/fa3c5655.log +44 -0
  38. package/examples/saucedemo/package-lock.json +20 -532
  39. package/examples/saucedemo/package.json +0 -1
  40. package/examples/saucedemo/src/flows/mem-stub-demo.flow.ts +23 -0
  41. package/package.json +1 -1
  42. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +1 -0
  43. package/templates/skills/waygraph-convention.skill.md +18 -4
  44. package/examples/saucedemo/.waygraph-auto/4adfbe91.json +0 -8
  45. /package/examples/saucedemo/.waygraph-auto/{4adfbe91.log → 32e2c26f.log} +0 -0
@@ -11,546 +11,42 @@
11
11
  "waygraph": "file:../.."
12
12
  },
13
13
  "devDependencies": {
14
- "@playwright/test": "^1.55.0",
15
14
  "@types/node": "^26.0.0",
16
15
  "typescript": "^5.6.0"
17
16
  }
18
17
  },
19
- "node_modules/@esbuild/aix-ppc64": {
20
- "version": "0.28.2",
21
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
22
- "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
23
- "cpu": [
24
- "ppc64"
25
- ],
18
+ "../..": {
19
+ "version": "0.15.19",
26
20
  "license": "MIT",
27
- "optional": true,
28
- "os": [
29
- "aix"
30
- ],
31
- "engines": {
32
- "node": ">=18"
33
- }
34
- },
35
- "node_modules/@esbuild/android-arm": {
36
- "version": "0.28.2",
37
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
38
- "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
39
- "cpu": [
40
- "arm"
41
- ],
42
- "license": "MIT",
43
- "optional": true,
44
- "os": [
45
- "android"
46
- ],
47
- "engines": {
48
- "node": ">=18"
49
- }
50
- },
51
- "node_modules/@esbuild/android-arm64": {
52
- "version": "0.28.2",
53
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
54
- "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
55
- "cpu": [
56
- "arm64"
57
- ],
58
- "license": "MIT",
59
- "optional": true,
60
- "os": [
61
- "android"
62
- ],
63
- "engines": {
64
- "node": ">=18"
65
- }
66
- },
67
- "node_modules/@esbuild/android-x64": {
68
- "version": "0.28.2",
69
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
70
- "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
71
- "cpu": [
72
- "x64"
73
- ],
74
- "license": "MIT",
75
- "optional": true,
76
- "os": [
77
- "android"
78
- ],
79
- "engines": {
80
- "node": ">=18"
81
- }
82
- },
83
- "node_modules/@esbuild/darwin-arm64": {
84
- "version": "0.28.2",
85
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
86
- "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
87
- "cpu": [
88
- "arm64"
89
- ],
90
- "license": "MIT",
91
- "optional": true,
92
- "os": [
93
- "darwin"
94
- ],
95
- "engines": {
96
- "node": ">=18"
97
- }
98
- },
99
- "node_modules/@esbuild/darwin-x64": {
100
- "version": "0.28.2",
101
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
102
- "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
103
- "cpu": [
104
- "x64"
105
- ],
106
- "license": "MIT",
107
- "optional": true,
108
- "os": [
109
- "darwin"
110
- ],
111
- "engines": {
112
- "node": ">=18"
113
- }
114
- },
115
- "node_modules/@esbuild/freebsd-arm64": {
116
- "version": "0.28.2",
117
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
118
- "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
119
- "cpu": [
120
- "arm64"
121
- ],
122
- "license": "MIT",
123
- "optional": true,
124
- "os": [
125
- "freebsd"
126
- ],
127
- "engines": {
128
- "node": ">=18"
129
- }
130
- },
131
- "node_modules/@esbuild/freebsd-x64": {
132
- "version": "0.28.2",
133
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
134
- "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
135
- "cpu": [
136
- "x64"
137
- ],
138
- "license": "MIT",
139
- "optional": true,
140
- "os": [
141
- "freebsd"
142
- ],
143
- "engines": {
144
- "node": ">=18"
145
- }
146
- },
147
- "node_modules/@esbuild/linux-arm": {
148
- "version": "0.28.2",
149
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
150
- "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
151
- "cpu": [
152
- "arm"
153
- ],
154
- "license": "MIT",
155
- "optional": true,
156
- "os": [
157
- "linux"
158
- ],
159
- "engines": {
160
- "node": ">=18"
161
- }
162
- },
163
- "node_modules/@esbuild/linux-arm64": {
164
- "version": "0.28.2",
165
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
166
- "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
167
- "cpu": [
168
- "arm64"
169
- ],
170
- "license": "MIT",
171
- "optional": true,
172
- "os": [
173
- "linux"
174
- ],
175
- "engines": {
176
- "node": ">=18"
177
- }
178
- },
179
- "node_modules/@esbuild/linux-ia32": {
180
- "version": "0.28.2",
181
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
182
- "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
183
- "cpu": [
184
- "ia32"
185
- ],
186
- "license": "MIT",
187
- "optional": true,
188
- "os": [
189
- "linux"
190
- ],
191
- "engines": {
192
- "node": ">=18"
193
- }
194
- },
195
- "node_modules/@esbuild/linux-loong64": {
196
- "version": "0.28.2",
197
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
198
- "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
199
- "cpu": [
200
- "loong64"
201
- ],
202
- "license": "MIT",
203
- "optional": true,
204
- "os": [
205
- "linux"
206
- ],
207
- "engines": {
208
- "node": ">=18"
209
- }
210
- },
211
- "node_modules/@esbuild/linux-mips64el": {
212
- "version": "0.28.2",
213
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
214
- "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
215
- "cpu": [
216
- "mips64el"
217
- ],
218
- "license": "MIT",
219
- "optional": true,
220
- "os": [
221
- "linux"
222
- ],
223
- "engines": {
224
- "node": ">=18"
225
- }
226
- },
227
- "node_modules/@esbuild/linux-ppc64": {
228
- "version": "0.28.2",
229
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
230
- "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
231
- "cpu": [
232
- "ppc64"
233
- ],
234
- "license": "MIT",
235
- "optional": true,
236
- "os": [
237
- "linux"
238
- ],
239
- "engines": {
240
- "node": ">=18"
241
- }
242
- },
243
- "node_modules/@esbuild/linux-riscv64": {
244
- "version": "0.28.2",
245
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
246
- "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
247
- "cpu": [
248
- "riscv64"
249
- ],
250
- "license": "MIT",
251
- "optional": true,
252
- "os": [
253
- "linux"
254
- ],
255
- "engines": {
256
- "node": ">=18"
257
- }
258
- },
259
- "node_modules/@esbuild/linux-s390x": {
260
- "version": "0.28.2",
261
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
262
- "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
263
- "cpu": [
264
- "s390x"
265
- ],
266
- "license": "MIT",
267
- "optional": true,
268
- "os": [
269
- "linux"
270
- ],
271
- "engines": {
272
- "node": ">=18"
273
- }
274
- },
275
- "node_modules/@esbuild/linux-x64": {
276
- "version": "0.28.2",
277
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
278
- "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
279
- "cpu": [
280
- "x64"
281
- ],
282
- "license": "MIT",
283
- "optional": true,
284
- "os": [
285
- "linux"
286
- ],
287
- "engines": {
288
- "node": ">=18"
289
- }
290
- },
291
- "node_modules/@esbuild/netbsd-arm64": {
292
- "version": "0.28.2",
293
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
294
- "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
295
- "cpu": [
296
- "arm64"
297
- ],
298
- "license": "MIT",
299
- "optional": true,
300
- "os": [
301
- "netbsd"
302
- ],
303
- "engines": {
304
- "node": ">=18"
305
- }
306
- },
307
- "node_modules/@esbuild/netbsd-x64": {
308
- "version": "0.28.2",
309
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
310
- "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
311
- "cpu": [
312
- "x64"
313
- ],
314
- "license": "MIT",
315
- "optional": true,
316
- "os": [
317
- "netbsd"
318
- ],
319
- "engines": {
320
- "node": ">=18"
321
- }
322
- },
323
- "node_modules/@esbuild/openbsd-arm64": {
324
- "version": "0.28.2",
325
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
326
- "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
327
- "cpu": [
328
- "arm64"
329
- ],
330
- "license": "MIT",
331
- "optional": true,
332
- "os": [
333
- "openbsd"
334
- ],
335
- "engines": {
336
- "node": ">=18"
337
- }
338
- },
339
- "node_modules/@esbuild/openbsd-x64": {
340
- "version": "0.28.2",
341
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
342
- "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
343
- "cpu": [
344
- "x64"
345
- ],
346
- "license": "MIT",
347
- "optional": true,
348
- "os": [
349
- "openbsd"
350
- ],
351
- "engines": {
352
- "node": ">=18"
353
- }
354
- },
355
- "node_modules/@esbuild/openharmony-arm64": {
356
- "version": "0.28.2",
357
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
358
- "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
359
- "cpu": [
360
- "arm64"
361
- ],
362
- "license": "MIT",
363
- "optional": true,
364
- "os": [
365
- "openharmony"
366
- ],
367
- "engines": {
368
- "node": ">=18"
369
- }
370
- },
371
- "node_modules/@esbuild/sunos-x64": {
372
- "version": "0.28.2",
373
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
374
- "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
375
- "cpu": [
376
- "x64"
377
- ],
378
- "license": "MIT",
379
- "optional": true,
380
- "os": [
381
- "sunos"
382
- ],
383
- "engines": {
384
- "node": ">=18"
385
- }
386
- },
387
- "node_modules/@esbuild/win32-arm64": {
388
- "version": "0.28.2",
389
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
390
- "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
391
- "cpu": [
392
- "arm64"
393
- ],
394
- "license": "MIT",
395
- "optional": true,
396
- "os": [
397
- "win32"
398
- ],
399
- "engines": {
400
- "node": ">=18"
401
- }
402
- },
403
- "node_modules/@esbuild/win32-ia32": {
404
- "version": "0.28.2",
405
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
406
- "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
407
- "cpu": [
408
- "ia32"
409
- ],
410
- "license": "MIT",
411
- "optional": true,
412
- "os": [
413
- "win32"
414
- ],
415
- "engines": {
416
- "node": ">=18"
417
- }
418
- },
419
- "node_modules/@esbuild/win32-x64": {
420
- "version": "0.28.2",
421
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
422
- "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
423
- "cpu": [
424
- "x64"
425
- ],
426
- "license": "MIT",
427
- "optional": true,
428
- "os": [
429
- "win32"
430
- ],
431
- "engines": {
432
- "node": ">=18"
433
- }
434
- },
435
- "node_modules/@playwright/test": {
436
- "version": "1.63.0",
437
- "license": "Apache-2.0",
438
21
  "dependencies": {
439
- "playwright": "1.63.0"
22
+ "tsx": "^4.0.0"
440
23
  },
441
24
  "bin": {
442
- "playwright": "cli.js"
25
+ "waygraph": "bin/waygraph"
443
26
  },
444
- "engines": {
445
- "node": ">=20"
27
+ "devDependencies": {
28
+ "@playwright/test": "^1.63.0",
29
+ "@types/node": "^26.0.0",
30
+ "typescript": "^5.6.0"
31
+ },
32
+ "peerDependencies": {
33
+ "@playwright/test": "^1.40.0"
446
34
  }
447
35
  },
448
36
  "node_modules/@types/node": {
449
- "version": "26.6.1",
37
+ "version": "26.6.2",
38
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.2.tgz",
39
+ "integrity": "sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==",
450
40
  "dev": true,
451
41
  "license": "MIT",
452
42
  "dependencies": {
453
43
  "undici-types": "~8.9.0"
454
44
  }
455
45
  },
456
- "node_modules/esbuild": {
457
- "version": "0.28.2",
458
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
459
- "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
460
- "hasInstallScript": true,
461
- "license": "MIT",
462
- "bin": {
463
- "esbuild": "bin/esbuild"
464
- },
465
- "engines": {
466
- "node": ">=18"
467
- },
468
- "optionalDependencies": {
469
- "@esbuild/aix-ppc64": "0.28.2",
470
- "@esbuild/android-arm": "0.28.2",
471
- "@esbuild/android-arm64": "0.28.2",
472
- "@esbuild/android-x64": "0.28.2",
473
- "@esbuild/darwin-arm64": "0.28.2",
474
- "@esbuild/darwin-x64": "0.28.2",
475
- "@esbuild/freebsd-arm64": "0.28.2",
476
- "@esbuild/freebsd-x64": "0.28.2",
477
- "@esbuild/linux-arm": "0.28.2",
478
- "@esbuild/linux-arm64": "0.28.2",
479
- "@esbuild/linux-ia32": "0.28.2",
480
- "@esbuild/linux-loong64": "0.28.2",
481
- "@esbuild/linux-mips64el": "0.28.2",
482
- "@esbuild/linux-ppc64": "0.28.2",
483
- "@esbuild/linux-riscv64": "0.28.2",
484
- "@esbuild/linux-s390x": "0.28.2",
485
- "@esbuild/linux-x64": "0.28.2",
486
- "@esbuild/netbsd-arm64": "0.28.2",
487
- "@esbuild/netbsd-x64": "0.28.2",
488
- "@esbuild/openbsd-arm64": "0.28.2",
489
- "@esbuild/openbsd-x64": "0.28.2",
490
- "@esbuild/openharmony-arm64": "0.28.2",
491
- "@esbuild/sunos-x64": "0.28.2",
492
- "@esbuild/win32-arm64": "0.28.2",
493
- "@esbuild/win32-ia32": "0.28.2",
494
- "@esbuild/win32-x64": "0.28.2"
495
- }
496
- },
497
- "node_modules/fsevents": {
498
- "version": "2.3.3",
499
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
500
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
501
- "hasInstallScript": true,
502
- "license": "MIT",
503
- "optional": true,
504
- "os": [
505
- "darwin"
506
- ],
507
- "engines": {
508
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
509
- }
510
- },
511
- "node_modules/playwright": {
512
- "version": "1.63.0",
513
- "license": "Apache-2.0",
514
- "dependencies": {
515
- "playwright-core": "1.63.0"
516
- },
517
- "bin": {
518
- "playwright": "cli.js"
519
- },
520
- "engines": {
521
- "node": ">=20"
522
- }
523
- },
524
- "node_modules/playwright-core": {
525
- "version": "1.63.0",
526
- "license": "Apache-2.0",
527
- "bin": {
528
- "playwright-core": "cli.js"
529
- },
530
- "engines": {
531
- "node": ">=20"
532
- }
533
- },
534
- "node_modules/tsx": {
535
- "version": "4.23.15",
536
- "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz",
537
- "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==",
538
- "license": "MIT",
539
- "dependencies": {
540
- "esbuild": "~0.28.0"
541
- },
542
- "bin": {
543
- "tsx": "dist/cli.mjs"
544
- },
545
- "engines": {
546
- "node": ">=18.0.0"
547
- },
548
- "optionalDependencies": {
549
- "fsevents": "~2.3.3"
550
- }
551
- },
552
46
  "node_modules/typescript": {
553
47
  "version": "5.9.3",
48
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
49
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
554
50
  "dev": true,
555
51
  "license": "Apache-2.0",
556
52
  "bin": {
@@ -563,22 +59,14 @@
563
59
  },
564
60
  "node_modules/undici-types": {
565
61
  "version": "8.9.0",
62
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",
63
+ "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",
566
64
  "dev": true,
567
65
  "license": "MIT"
568
66
  },
569
67
  "node_modules/waygraph": {
570
- "version": "0.15.17",
571
- "resolved": "file:../..",
572
- "license": "MIT",
573
- "dependencies": {
574
- "tsx": "^4.0.0"
575
- },
576
- "bin": {
577
- "waygraph": "bin/waygraph"
578
- },
579
- "peerDependencies": {
580
- "@playwright/test": "^1.40.0"
581
- }
68
+ "resolved": "../..",
69
+ "link": true
582
70
  }
583
71
  }
584
72
  }
@@ -41,7 +41,6 @@
41
41
  "waygraph": "file:../.."
42
42
  },
43
43
  "devDependencies": {
44
- "@playwright/test": "^1.55.0",
45
44
  "@types/node": "^26.0.0",
46
45
  "typescript": "^5.6.0"
47
46
  }
@@ -0,0 +1,23 @@
1
+ import { Engine, withMemStub, registerMemStub } from "waygraph";
2
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
3
+ import { FillUsernameBlock } from "../blocks/saucedemo-web/methods/fill-username.method.block.js";
4
+ import { LoginCreds } from "../states/checkout.mem-keys.js";
5
+
6
+ /**
7
+ * Test-only fixture for waygraph's own `--mem-stub` CLI flag
8
+ * (tests/cli/mem-stub.spec.ts) - not part of the saucedemo showcase's own
9
+ * demo/story. Registers a fake LoginCreds so `waygraph run
10
+ * mem-stub-demo.flow.ts --mem-stub` succeeds with zero --data, proving the
11
+ * registry + preflight fallback work against the real CLI, not just the
12
+ * in-process engine tests in tests/core/mem-stub.spec.ts.
13
+ */
14
+ registerMemStub(LoginCreds.key, () => ({
15
+ username: "standard_user",
16
+ password: "secret_sauce",
17
+ }));
18
+
19
+ const engine = new Engine();
20
+
21
+ export const memStubDemoFlow = withMemStub(
22
+ engine.map().start().gotoPage(NavLoginBlock).method(FillUsernameBlock).end(),
23
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waygraph",
3
- "version": "0.15.18",
3
+ "version": "0.15.20",
4
4
  "type": "module",
5
5
  "description": "A typed graph of reusable Blocks for driving a browser through E2E flows.",
6
6
  "license": "MIT",
@@ -1,3 +1,4 @@
1
+ // waygraph-ignore: empty-verify (confirmed by AssertEmailContentBlock right after it in mail-verify.flow.ts)
1
2
  import { defineMethodBlock, checkpoint } from "waygraph";
2
3
  import type { MailpitInbox, MailpitMessageOpen } from "../../../../states/demo.states.js";
3
4
  import { ExpectedRecipient } from "../../../../states/demo.mem-keys.js";
@@ -24,11 +24,15 @@ against a live site, use `--skill-pilot-blind`.
24
24
  an explicit type argument when it sits between two specifically-typed Blocks in a Flow.
25
25
  Not just static content or an action's result - it also names a *feature state* worth a
26
26
  Checkpoint of its own (a submit button greyed out until required fields are filled, a
27
- field error under one input, a stale "Save" re-enabling). No built-in `Trait.disabled` -
28
- write the state condition as a custom Trait (`isDisabled()`, a class, `aria-disabled`),
29
- same as any other Trait: real DOM check, no inline selector.
27
+ field error under one input, a stale "Save" re-enabling). `Trait.disabled(selector)` /
28
+ `Trait.enabled(selector)` cover that directly; write a custom Trait only for a state
29
+ condition neither one expresses.
30
30
  5. **`requires` = externally supplied.** A key an earlier Block in the same chain produces
31
- is never listed under `requires` - preflight checks the whole chain up front.
31
+ is never listed under `requires` - preflight checks the whole chain up front. For a
32
+ genuinely arbitrary key (a username, an email) that a demo/dev run shouldn't need
33
+ hand-supplied every time, `registerMemStub(key, fake)` + `withMemStub(flow)` (or
34
+ `--mem-stub`) fills it from a registry instead - a key with no registration still fails
35
+ preflight exactly as before, so this narrows what needs real input, never removes the guard.
32
36
  6. **Keep Checkpoints typed — never `Checkpoint<string>`.** Block helpers take concrete
33
37
  Checkpoint types from `src/states/` (e.g. `defineMethodBlock<LoginPage, LoginPage>`).
34
38
  Wildcard `Checkpoint<string>` compiles but kills graph honesty; `waygraph check` / `waygraph typecheck` warn.
@@ -37,6 +41,16 @@ against a live site, use `--skill-pilot-blind`.
37
41
  7. **One input/action per Method Block.** No block that `.fill()`s two fields or `.fill()` + `.click()` in one
38
42
  `act()` — split like saucedemo login (`fill-username`, `fill-password`, `submit-login`). Opt out per file:
39
43
  `// waygraph-ignore: multi-input` or `// waygraph-ignore-practices`.
44
+ 8. **A transition never ships with an empty `verify`.** A framework can enforce that a check
45
+ *exists*; it can't author the semantic content of one - only whoever knows what "success"
46
+ means for this app can write it. That's the right line to draw, but it means an unfilled
47
+ `verify: []` placeholder (codegen's honest way of not guessing) is indistinguishable from
48
+ a Block that was never given real verification at all, and it passes `check`/`typecheck`/
49
+ the orphan scan/`tsc` silently unless something is actually looking for it. Something is:
50
+ `defineMethodBlock`/`defineEffectBlock` where `In`/`Out` genuinely differ (a transition,
51
+ not a self-loop) needs a non-empty `verify`, same for `defineAssertBlock`. Opt out only
52
+ when a *different* Block right after it in the `.flow.ts` is what actually confirms the
53
+ transition (e.g. an `AssertXBlock`) - `// waygraph-ignore: empty-verify`.
40
54
 
41
55
  ## Block kinds (file convention)
42
56
 
@@ -1,8 +0,0 @@
1
- {
2
- "sessionId": "4adfbe91",
3
- "socketPath": "/tmp/waygraph-auto/4adfbe91.sock",
4
- "pid": 1479053,
5
- "projectDir": "/home/dan/Desktop/Projects/waygraph/examples/saucedemo",
6
- "startedAt": "2026-09-22T02:04:35.751Z",
7
- "headless": false
8
- }