waygraph 0.15.54 → 0.16.1
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 +8 -3
- package/bin/waygraph +2 -2
- package/dist/analysis/check.d.ts +38 -0
- package/dist/analysis/check.js +87 -0
- package/dist/analysis/coverage-gap.d.ts +1 -1
- package/dist/analysis/coverage-gap.js +14 -37
- package/dist/analysis/flow-source.d.ts +9 -0
- package/dist/analysis/flow-source.js +25 -0
- package/dist/analysis/graph.d.ts +10 -14
- package/dist/analysis/graph.js +48 -371
- package/dist/analysis/map-check.js +4 -39
- package/dist/analysis/practices-check.d.ts +1 -1
- package/dist/analysis/practices-check.js +24 -45
- package/dist/cli/args.d.ts +23 -0
- package/dist/cli/args.js +20 -0
- package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
- package/dist/{cli.js → cli/cli.js} +10 -9
- package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
- package/dist/cli/commands/agent-dive.js +42 -0
- package/dist/cli/commands/browser.d.ts +2 -0
- package/dist/cli/commands/browser.js +109 -0
- package/dist/{commands → cli/commands}/check.d.ts +0 -1
- package/dist/cli/commands/check.js +104 -0
- package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
- package/dist/cli/commands/codemod-checkpoints.js +186 -0
- package/dist/cli/commands/codemod-flows.d.ts +18 -0
- package/dist/cli/commands/codemod-flows.js +284 -0
- package/dist/cli/commands/codemod-stubs.d.ts +10 -0
- package/dist/cli/commands/codemod-stubs.js +187 -0
- package/dist/{commands → cli/commands}/extensions.js +5 -4
- package/dist/{commands → cli/commands}/init.js +1 -2
- package/dist/{commands → cli/commands}/list.js +9 -7
- package/dist/cli/commands/manifest.d.ts +2 -0
- package/dist/cli/commands/manifest.js +20 -0
- package/dist/cli/commands/map.js +57 -0
- package/dist/cli/commands/pilot.d.ts +2 -0
- package/dist/cli/commands/pilot.js +102 -0
- package/dist/{commands → cli/commands}/run.d.ts +0 -1
- package/dist/cli/commands/run.js +64 -0
- package/dist/cli/commands/session-ops.d.ts +3 -0
- package/dist/cli/commands/session-ops.js +257 -0
- package/dist/cli/commands/session.js +132 -0
- package/dist/{commands → cli/commands}/test.js +11 -14
- package/dist/cli/commands/traverse.js +105 -0
- package/dist/{commands → cli/commands}/try.js +29 -25
- package/dist/{commands → cli/commands}/upgrade.js +40 -4
- package/dist/cli/flags.d.ts +193 -16
- package/dist/cli/flags.js +179 -234
- package/dist/cli/run-chain.d.ts +1 -0
- package/dist/cli/run-chain.js +42 -7
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +21 -53
- package/dist/cli/util.d.ts +2 -2
- package/dist/cli/util.js +2 -3
- package/dist/{highlights → demo/narration}/css.d.ts +1 -1
- package/dist/{highlights → demo/narration}/css.js +2 -3
- package/dist/{highlights → demo/narration}/demo-pace.d.ts +4 -12
- package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
- package/dist/{highlights → demo/narration}/device.d.ts +4 -4
- package/dist/{highlights → demo/narration}/device.js +1 -1
- package/dist/demo/narration/merge.d.ts +10 -0
- package/dist/demo/narration/merge.js +67 -0
- package/dist/demo/narration/narration.d.ts +39 -0
- package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
- package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
- package/dist/demo/narration/stub-ctx.d.ts +8 -0
- package/dist/demo/narration/stub-ctx.js +164 -0
- package/dist/{highlights → demo/narration}/style.d.ts +1 -7
- package/dist/{highlights → demo/narration}/style.js +1 -41
- package/dist/{highlights → demo/narration}/todo-dock.d.ts +8 -8
- package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
- package/dist/demo/overlay/auto-chrome.d.ts +7 -0
- package/dist/demo/overlay/auto-chrome.js +97 -0
- package/dist/demo/overlay/cursor.d.ts +19 -0
- package/dist/demo/overlay/cursor.js +142 -0
- package/dist/demo/overlay/device-stage.d.ts +26 -0
- package/dist/demo/overlay/device-stage.js +396 -0
- package/dist/demo/overlay/inpage/banner.d.ts +2 -0
- package/dist/demo/overlay/inpage/banner.js +160 -0
- package/dist/demo/overlay/inpage/caption.d.ts +2 -0
- package/dist/demo/overlay/inpage/caption.js +24 -0
- package/dist/demo/overlay/inpage/core.d.ts +2 -0
- package/dist/demo/overlay/inpage/core.js +345 -0
- package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
- package/dist/demo/overlay/inpage/device-chip.js +191 -0
- package/dist/demo/overlay/inpage/network.d.ts +10 -0
- package/dist/demo/overlay/inpage/network.js +189 -0
- package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
- package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
- package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
- package/dist/demo/overlay/inpage/stamp.js +46 -0
- package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
- package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
- package/dist/demo/overlay/inpage/todos.d.ts +2 -0
- package/dist/demo/overlay/inpage/todos.js +293 -0
- package/dist/demo/overlay/locator-theater.d.ts +25 -0
- package/dist/demo/overlay/locator-theater.js +76 -0
- package/dist/demo/overlay/network-capture.d.ts +22 -0
- package/dist/demo/overlay/network-capture.js +127 -0
- package/dist/demo/overlay/overlay-css.d.ts +3 -0
- package/dist/demo/overlay/overlay-css.js +369 -0
- package/dist/demo/overlay/overlay-stage.d.ts +31 -0
- package/dist/demo/overlay/overlay-stage.js +106 -0
- package/dist/demo/overlay/overlay.d.ts +10 -0
- package/dist/demo/overlay/overlay.js +89 -0
- package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
- package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
- package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
- package/dist/demo/overlay/reattach.d.ts +7 -0
- package/dist/demo/overlay/reattach.js +23 -0
- package/dist/demo/overlay/rings.d.ts +61 -0
- package/dist/demo/overlay/rings.js +422 -0
- package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
- package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
- package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
- package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
- package/dist/demo/stepper/after.d.ts +3 -0
- package/dist/demo/stepper/after.js +103 -0
- package/dist/demo/stepper/banner-log.d.ts +35 -0
- package/dist/demo/stepper/banner-log.js +65 -0
- package/dist/demo/stepper/before.d.ts +4 -0
- package/dist/demo/stepper/before.js +110 -0
- package/dist/demo/stepper/demo-log.d.ts +48 -0
- package/dist/demo/stepper/demo-log.js +292 -0
- package/dist/demo/stepper/gate.d.ts +11 -0
- package/dist/demo/stepper/gate.js +78 -0
- package/dist/demo/stepper/interaction-patch.d.ts +4 -0
- package/dist/demo/stepper/interaction-patch.js +323 -0
- package/dist/demo/stepper/pacing.d.ts +21 -0
- package/dist/demo/stepper/pacing.js +23 -0
- package/dist/demo/stepper/panel-after.d.ts +17 -0
- package/dist/demo/stepper/panel-after.js +166 -0
- package/dist/demo/stepper/panel-before.d.ts +12 -0
- package/dist/demo/stepper/panel-before.js +241 -0
- package/dist/demo/stepper/slides.d.ts +23 -0
- package/dist/demo/stepper/slides.js +233 -0
- package/dist/demo/stepper/step-panels.d.ts +69 -0
- package/dist/demo/stepper/step-panels.js +172 -0
- package/dist/demo/stepper/stepper.d.ts +24 -0
- package/dist/demo/stepper/stepper.js +122 -0
- package/dist/demo/stepper/teardown.d.ts +47 -0
- package/dist/demo/stepper/teardown.js +178 -0
- package/dist/demo/stepper/todo-advance.d.ts +15 -0
- package/dist/demo/stepper/todo-advance.js +110 -0
- package/dist/demo/stepper/view.d.ts +58 -0
- package/dist/demo/stepper/view.js +31 -0
- package/dist/demo/types.d.ts +85 -0
- package/dist/demo/verbose-log.js +15 -0
- package/dist/engine/block/action-page.d.ts +53 -0
- package/dist/engine/block/action-page.js +1 -0
- package/dist/{types.d.ts → engine/block/block.d.ts} +102 -142
- package/dist/{core → engine/block}/block.js +12 -130
- package/dist/engine/block/branch.d.ts +17 -0
- package/dist/engine/block/branch.js +40 -0
- package/dist/{core → engine/block}/compose.d.ts +9 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- package/dist/engine/block/dialog.d.ts +13 -0
- package/dist/engine/block/dialog.js +37 -0
- package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
- package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
- package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
- package/dist/engine/block/kinds/effect.js +17 -0
- package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
- package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
- package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
- package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
- package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
- package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
- package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint.js +8 -0
- package/dist/engine/checkpoint/route.d.ts +28 -0
- package/dist/engine/checkpoint/route.js +28 -0
- package/dist/{core → engine}/config.d.ts +7 -2
- package/dist/engine/config.js +6 -0
- package/dist/engine/engine.d.ts +45 -0
- package/dist/{core → engine}/engine.js +6 -10
- package/dist/engine/env.d.ts +59 -0
- package/dist/engine/env.js +83 -0
- package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
- package/dist/{errors.js → engine/errors.js} +22 -22
- package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
- package/dist/{core → engine/flow}/branch-regression.js +4 -3
- package/dist/engine/flow/flow.d.ts +162 -0
- package/dist/engine/flow/flow.js +244 -0
- package/dist/engine/flow/map-branch.d.ts +9 -0
- package/dist/engine/flow/map-branch.js +57 -0
- package/dist/{core → engine/flow}/map-builder.d.ts +34 -54
- package/dist/engine/flow/map-builder.js +242 -0
- package/dist/engine/flow/map-steps.d.ts +30 -0
- package/dist/engine/flow/map-steps.js +87 -0
- package/dist/{core → engine}/locate.d.ts +1 -1
- package/dist/{core → engine}/locate.js +1 -2
- package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
- package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
- package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
- package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
- package/dist/engine/page-gone.d.ts +5 -0
- package/dist/engine/page-gone.js +20 -0
- package/dist/engine/run/connect.d.ts +28 -0
- package/dist/{types.js → engine/run/connect.js} +11 -10
- package/dist/engine/run/events.d.ts +67 -0
- package/dist/engine/run/events.js +90 -0
- package/dist/engine/run/hooks.d.ts +16 -0
- package/dist/engine/run/hooks.js +8 -0
- package/dist/engine/run/launch.d.ts +13 -0
- package/dist/engine/run/launch.js +27 -0
- package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
- package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
- package/dist/engine/stub/pace.d.ts +12 -0
- package/dist/engine/stub/pace.js +2 -0
- package/dist/engine/stub/ring.d.ts +130 -0
- package/dist/engine/stub/ring.js +41 -0
- package/dist/engine/stub/stub.d.ts +268 -0
- package/dist/engine/stub/stub.js +1 -0
- package/dist/engine/stub/todos.d.ts +104 -0
- package/dist/engine/stub/todos.js +2 -0
- package/dist/engine/stub/viewport.d.ts +26 -0
- package/dist/engine/stub/viewport.js +2 -0
- package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
- package/dist/{trait.js → engine/trait/trait.js} +1 -1
- package/dist/index.d.ts +88 -36
- package/dist/index.js +46 -19
- package/dist/live/auto/auto.d.ts +22 -0
- package/dist/live/auto/auto.js +207 -0
- package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
- package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
- package/dist/live/auto/mem.d.ts +11 -0
- package/dist/live/auto/mem.js +85 -0
- package/dist/live/auto/menu.d.ts +30 -0
- package/dist/live/auto/menu.js +335 -0
- package/dist/live/auto-session/auto-session.d.ts +113 -0
- package/dist/live/auto-session/auto-session.js +452 -0
- package/dist/live/auto-session/console.d.ts +4 -0
- package/dist/live/auto-session/console.js +41 -0
- package/dist/live/auto-session/files.d.ts +44 -0
- package/dist/live/auto-session/files.js +145 -0
- package/dist/{auto-session → live/auto-session}/helpers.d.ts +9 -5
- package/dist/{auto-session → live/auto-session}/helpers.js +18 -1
- package/dist/live/auto-session/inspect.d.ts +4 -0
- package/dist/live/auto-session/inspect.js +75 -0
- package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +8 -25
- package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +36 -161
- package/dist/live/auto-session/open-browser.d.ts +6 -0
- package/dist/live/auto-session/open-browser.js +47 -0
- package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
- package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
- package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
- package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
- package/dist/{session → live/pilot}/pilot.d.ts +3 -3
- package/dist/{session → live/pilot}/pilot.js +5 -4
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
- package/dist/live/traverse/traverse.js +212 -0
- package/dist/live/traverse/worker.d.ts +37 -0
- package/dist/live/traverse/worker.js +200 -0
- package/dist/manifest/manifest.d.ts +52 -0
- package/dist/manifest/manifest.js +93 -0
- package/dist/manifest/map-imports.d.ts +7 -0
- package/dist/manifest/map-imports.js +22 -0
- package/dist/manifest/maps.d.ts +33 -0
- package/dist/manifest/maps.js +62 -0
- package/dist/manifest/pack.d.ts +21 -0
- package/dist/manifest/pack.js +109 -0
- package/dist/manifest/project.d.ts +60 -0
- package/dist/manifest/project.js +101 -0
- package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
- package/dist/manifest/scan.d.ts +19 -0
- package/dist/manifest/scan.js +57 -0
- package/dist/manifest/source.d.ts +23 -0
- package/dist/manifest/source.js +86 -0
- package/dist/runner/mode.d.ts +71 -0
- package/dist/runner/mode.js +1 -0
- package/dist/runner/modes/branches.d.ts +5 -0
- package/dist/runner/modes/branches.js +37 -0
- package/dist/runner/modes/demo.d.ts +3 -0
- package/dist/runner/modes/demo.js +13 -0
- package/dist/runner/modes/report.d.ts +2 -0
- package/dist/runner/modes/report.js +54 -0
- package/dist/runner/modes/run.d.ts +2 -0
- package/dist/runner/modes/run.js +3 -0
- package/dist/runner/options.d.ts +31 -0
- package/dist/runner/options.js +42 -0
- package/dist/runner/plan/find.d.ts +18 -0
- package/dist/runner/plan/find.js +65 -0
- package/dist/runner/plan/plan.d.ts +11 -0
- package/dist/runner/plan/plan.js +97 -0
- package/dist/runner/plan/seed-mem.d.ts +12 -0
- package/dist/runner/plan/seed-mem.js +98 -0
- package/dist/runner/plan/spec.d.ts +5 -0
- package/dist/runner/plan/spec.js +17 -0
- package/dist/runner/play-steps.d.ts +2 -0
- package/dist/runner/play-steps.js +59 -0
- package/dist/runner/runner.d.ts +4 -0
- package/dist/runner/runner.js +64 -0
- package/dist/runner/session.d.ts +9 -0
- package/dist/runner/session.js +87 -0
- package/dist/{browser.js → runtime/browser.js} +4 -2
- package/dist/{env-file.js → runtime/env-file.js} +7 -12
- package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
- package/dist/{extensions.js → runtime/extensions.js} +2 -1
- package/dist/runtime/full-launch.d.ts +1 -0
- package/dist/runtime/full-launch.js +34 -0
- package/dist/runtime/global-flag.d.ts +5 -0
- package/dist/runtime/global-flag.js +18 -0
- package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
- package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
- package/dist/runtime/run-log.d.ts +2 -0
- package/dist/runtime/run-log.js +17 -0
- package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
- package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
- package/dist/{config.js → runtime/waygraph-config.js} +21 -51
- package/dist/{webserver.js → runtime/webserver.js} +5 -30
- package/examples/routed-demo/config/waygraph.config.ts +20 -0
- package/examples/routed-demo/package.json +1 -4
- package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
- package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
- package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
- package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
- package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
- package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
- package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
- package/examples/routed-demo/tsconfig.json +1 -1
- package/examples/saucedemo/docs/CONVENTION.md +4 -5
- package/examples/saucedemo/docs/HELPERS.md +11 -11
- package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
- package/examples/saucedemo/src/states/checkout.states.ts +21 -11
- package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
- package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
- package/package.json +14 -6
- package/templates/agents/waygraph-planner.agent.md +2 -2
- package/templates/quickstart/docs/CONVENTION.md +4 -4
- package/templates/quickstart/docs/HELPERS.md +10 -8
- package/templates/quickstart/package.json +0 -3
- package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
- package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
- package/templates/quickstart/src/states/checkout.states.ts +21 -11
- package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
- package/templates/scaffold/README.md +2 -1
- package/templates/scaffold/STRUCTURE.md +5 -4
- package/templates/scaffold/config/waygraph.config.ts +1 -0
- package/templates/scaffold/gitignore +1 -0
- package/templates/scaffold/src/flows/README.md +2 -2
- package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
- package/templates/scaffold/src/map/README.md +7 -0
- package/templates/scaffold/src/states/README.md +4 -1
- package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
- package/templates/scaffold/src/states/demo.states.ts +14 -20
- package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
- package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
- package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
- package/templates/skills/waygraph-convention.skill.md +23 -14
- package/templates/skills/waygraph-pilot.skill.md +7 -4
- package/dist/auto-session/session.d.ts +0 -193
- package/dist/auto-session/session.js +0 -719
- package/dist/auto-session/verbose-log.js +0 -16
- package/dist/auto-session.d.ts +0 -2
- package/dist/auto-session.js +0 -3
- package/dist/cli/discover.d.ts +0 -40
- package/dist/cli/discover.js +0 -148
- package/dist/commands/agent-dive.js +0 -52
- package/dist/commands/check.js +0 -192
- package/dist/commands/map.js +0 -29
- package/dist/commands/run.js +0 -104
- package/dist/commands/session.js +0 -600
- package/dist/commands/traverse.js +0 -177
- package/dist/core/block.d.ts +0 -109
- package/dist/core/blocks/effect.js +0 -23
- package/dist/core/config.js +0 -17
- package/dist/core/engine.d.ts +0 -198
- package/dist/core/flow.d.ts +0 -294
- package/dist/core/flow.js +0 -432
- package/dist/core/map-builder.js +0 -383
- package/dist/core.d.ts +0 -14
- package/dist/core.js +0 -15
- package/dist/highlights/merge.d.ts +0 -8
- package/dist/highlights/merge.js +0 -173
- package/dist/highlights/run-phase.d.ts +0 -43
- package/dist/highlights/stub-ctx.d.ts +0 -10
- package/dist/highlights/stub-ctx.js +0 -331
- package/dist/highlights/types.d.ts +0 -613
- package/dist/highlights.d.ts +0 -9
- package/dist/highlights.js +0 -10
- package/dist/pilot-overlay.d.ts +0 -5
- package/dist/pilot-overlay.js +0 -6
- package/dist/runner/banner-log.js +0 -63
- package/dist/runner/chain-run.js +0 -102
- package/dist/runner/cursor.js +0 -140
- package/dist/runner/demo-log.js +0 -316
- package/dist/runner/device-stage.d.ts +0 -9
- package/dist/runner/device-stage.js +0 -420
- package/dist/runner/discovery.js +0 -105
- package/dist/runner/index.js +0 -2
- package/dist/runner/inpage/banner.d.ts +0 -21
- package/dist/runner/inpage/banner.js +0 -156
- package/dist/runner/inpage/caption.d.ts +0 -3
- package/dist/runner/inpage/caption.js +0 -23
- package/dist/runner/inpage/core.d.ts +0 -4
- package/dist/runner/inpage/core.js +0 -316
- package/dist/runner/inpage/device.d.ts +0 -3
- package/dist/runner/inpage/device.js +0 -211
- package/dist/runner/inpage/network.d.ts +0 -15
- package/dist/runner/inpage/network.js +0 -217
- package/dist/runner/inpage/panel-chrome.js +0 -192
- package/dist/runner/inpage/stamp.js +0 -46
- package/dist/runner/inpage/swipe-zoom.js +0 -220
- package/dist/runner/inpage/todos.js +0 -337
- package/dist/runner/interaction-patch.js +0 -384
- package/dist/runner/main.js +0 -469
- package/dist/runner/network-capture.d.ts +0 -9
- package/dist/runner/network-capture.js +0 -126
- package/dist/runner/overlay-css.d.ts +0 -3
- package/dist/runner/overlay-css.js +0 -377
- package/dist/runner/overlay-install.js +0 -90
- package/dist/runner/overlay-stage.js +0 -110
- package/dist/runner/rings.js +0 -514
- package/dist/runner/seed-mem.js +0 -110
- package/dist/runner/slides.js +0 -278
- package/dist/runner/step-mode.js +0 -703
- package/dist/runner/step-panels.js +0 -729
- package/dist/runner/teardown.js +0 -202
- package/dist/runner/todo-dock.js +0 -142
- package/dist/session/auto-explore-run.d.ts +0 -40
- package/dist/session/auto-explore-run.js +0 -707
- package/dist/session/step-overlay.d.ts +0 -37
- package/dist/session/step-overlay.js +0 -244
- package/dist/traverse/run.js +0 -423
- package/examples/routed-demo/playwright.config.ts +0 -21
- package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
- /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
- /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
- /package/dist/{commands → cli/commands}/init.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/map.d.ts +0 -0
- /package/dist/{commands → cli/commands}/session.d.ts +0 -0
- /package/dist/{commands → cli/commands}/test.d.ts +0 -0
- /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
- /package/dist/{commands → cli/commands}/try.d.ts +0 -0
- /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
- /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
- /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
- /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
- /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
- /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
- /package/dist/{highlights → demo}/types.js +0 -0
- /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
- /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
- /package/dist/{selector.js → engine/trait/selector.js} +0 -0
- /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/coverage.js +0 -0
- /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/lease.js +0 -0
- /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
- /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
- /package/dist/{blocks-select.js → manifest/select.js} +0 -0
- /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
- /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
- /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
- /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
- /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
- /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { MemPage } from "../../engine/mem/mem.js";
|
|
2
|
+
import type { SomeBlock } from "../../engine/block/block.js";
|
|
3
|
+
import type { DemoPace } from "../../engine/stub/pace.js";
|
|
4
|
+
import type { HighlightStyleDefaults } from "../../engine/stub/ring.js";
|
|
5
|
+
import type { StepperRefs, WgPage } from "../types.js";
|
|
6
|
+
import type { createOverlayStage } from "../overlay/overlay-stage.js";
|
|
7
|
+
import type { Gate } from "./gate.js";
|
|
8
|
+
import type { Pacing } from "./pacing.js";
|
|
9
|
+
/** A step as the stepper sees it (the runner's PlayStep). */
|
|
10
|
+
export interface StepperStep {
|
|
11
|
+
block: SomeBlock & {
|
|
12
|
+
description?: string;
|
|
13
|
+
fastForward?: boolean;
|
|
14
|
+
demoPace?: DemoPace;
|
|
15
|
+
__waygraphKind?: string;
|
|
16
|
+
__waygraphNavClick?: unknown;
|
|
17
|
+
};
|
|
18
|
+
episodeNumber?: number | undefined;
|
|
19
|
+
episodeTitle?: string | undefined;
|
|
20
|
+
expectedFailureReason?: string | undefined;
|
|
21
|
+
demoPace?: DemoPace | undefined;
|
|
22
|
+
highlightStyle?: HighlightStyleDefaults | undefined;
|
|
23
|
+
wasFastForward?: boolean | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** The stepper's state for the whole run. */
|
|
26
|
+
export interface StepperContext {
|
|
27
|
+
page: WgPage;
|
|
28
|
+
mem: MemPage;
|
|
29
|
+
steps: readonly StepperStep[];
|
|
30
|
+
stage: ReturnType<typeof createOverlayStage>;
|
|
31
|
+
gate: Gate;
|
|
32
|
+
pacing: Pacing;
|
|
33
|
+
refs: StepperRefs;
|
|
34
|
+
title: string | undefined;
|
|
35
|
+
stepperMode: "full" | "carousel";
|
|
36
|
+
/** A title set by a stub (`ctx.title`) names the flow from that step on, until another stub sets a new one. */
|
|
37
|
+
stickyTitle: string | undefined;
|
|
38
|
+
allEpisodes: {
|
|
39
|
+
episodeNumber: number;
|
|
40
|
+
episodeTitle: string;
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
/** The current step: where it sits in its episode, and what its before panel showed. */
|
|
44
|
+
export interface StepView {
|
|
45
|
+
index: number;
|
|
46
|
+
step: StepperStep;
|
|
47
|
+
/** The breadcrumb is this step's episode ("1st of 2"), or the whole chain when there are no episodes. */
|
|
48
|
+
moduleNames: string[];
|
|
49
|
+
moduleDescriptions: string[];
|
|
50
|
+
moduleIndex: number;
|
|
51
|
+
justEnteredEpisode: boolean;
|
|
52
|
+
overlayTitle: string;
|
|
53
|
+
overlayTodoPos: string | undefined;
|
|
54
|
+
}
|
|
55
|
+
export declare function episodesOf(steps: readonly StepperStep[]): StepperContext["allEpisodes"];
|
|
56
|
+
export declare function viewOf(ctx: StepperContext, index: number): StepView;
|
|
57
|
+
/** Video and --mini get the compact pill; never false, so the person's Hide/Show choice wins otherwise. */
|
|
58
|
+
export declare function forceCollapsed(): true | undefined;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { envFlag, envString } from "../../engine/env.js";
|
|
2
|
+
export function episodesOf(steps) {
|
|
3
|
+
const episodes = [];
|
|
4
|
+
for (const s of steps) {
|
|
5
|
+
if (s.episodeNumber && !episodes.some((e) => e.episodeNumber === s.episodeNumber)) {
|
|
6
|
+
episodes.push({ episodeNumber: s.episodeNumber, episodeTitle: s.episodeTitle ?? "" });
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return episodes;
|
|
10
|
+
}
|
|
11
|
+
export function viewOf(ctx, index) {
|
|
12
|
+
const step = ctx.steps[index];
|
|
13
|
+
const indices = step.episodeNumber
|
|
14
|
+
? ctx.steps.flatMap((s, i) => (s.episodeNumber === step.episodeNumber ? [i] : []))
|
|
15
|
+
: ctx.steps.map((_s, i) => i);
|
|
16
|
+
const moduleIndex = indices.indexOf(index);
|
|
17
|
+
return {
|
|
18
|
+
index,
|
|
19
|
+
step,
|
|
20
|
+
moduleNames: indices.map((i) => ctx.steps[i].block.name),
|
|
21
|
+
moduleDescriptions: indices.map((i) => ctx.steps[i].block.description || ""),
|
|
22
|
+
moduleIndex,
|
|
23
|
+
justEnteredEpisode: moduleIndex === 0 && step.episodeNumber !== undefined,
|
|
24
|
+
overlayTitle: ctx.title || "waygraph demo",
|
|
25
|
+
overlayTodoPos: undefined,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Video and --mini get the compact pill; never false, so the person's Hide/Show choice wins otherwise. */
|
|
29
|
+
export function forceCollapsed() {
|
|
30
|
+
return envString("WAYGRAPH_VIDEO") || envFlag("WAYGRAPH_MINI") ? true : undefined;
|
|
31
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
2
|
+
import type { ResolvedHighlight } from "../engine/stub/ring.js";
|
|
3
|
+
import type { BannerPos } from "../engine/stub/stub.js";
|
|
4
|
+
import type { TodoDockState, TodoDockUiResolved } from "../engine/stub/todos.js";
|
|
5
|
+
import type { DeviceState } from "../engine/stub/viewport.js";
|
|
6
|
+
export type WgPage = Page;
|
|
7
|
+
declare module "playwright-core" {
|
|
8
|
+
interface Page {
|
|
9
|
+
/** The recordVideo canvas size, when recording: the stage a device shell is centered in. */
|
|
10
|
+
__wgVideoViewport?: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
} | undefined;
|
|
14
|
+
/** Without a video, the window size at the first device switch (the stage from then on). */
|
|
15
|
+
__wgHeadedStage?: {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
} | undefined;
|
|
19
|
+
/** The device shell's size, rebuilt after a navigation wipes it. */
|
|
20
|
+
__wgDeviceShell?: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
} | undefined;
|
|
24
|
+
__wgDesktopFlat?: boolean | undefined;
|
|
25
|
+
__wgDevicePreset?: string | undefined;
|
|
26
|
+
__wgDeviceOrient?: string | undefined;
|
|
27
|
+
/** The real setViewportSize, kept while the demo makes the page's own one do nothing. */
|
|
28
|
+
__wgRealSetViewportSize?: Page["setViewportSize"] | undefined;
|
|
29
|
+
/** The network panel's rows; the panel's DOM does not survive a navigation, this does. */
|
|
30
|
+
__wgNetworkHistory?: NetworkEntry[] | undefined;
|
|
31
|
+
__wgNetworkNeedsRestore?: boolean | undefined;
|
|
32
|
+
__wgNetworkCaptureInstalled?: boolean | undefined;
|
|
33
|
+
__wgNetworkTabVisible?: boolean | undefined;
|
|
34
|
+
}
|
|
35
|
+
interface Keyboard {
|
|
36
|
+
__wgBeatPatched?: boolean;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** A value the stepper's parts share and update (the todo dock as it advances, the device, the step's rings). */
|
|
40
|
+
export interface Ref<T> {
|
|
41
|
+
current: T;
|
|
42
|
+
}
|
|
43
|
+
/** What the demo carries between a step's panels, its fill / click theater and a re-paint after navigation. */
|
|
44
|
+
export interface StepperRefs {
|
|
45
|
+
stubBefore: Ref<ResolvedHighlight[]>;
|
|
46
|
+
todoDock: Ref<TodoDockState | undefined>;
|
|
47
|
+
device: Ref<DeviceState | undefined>;
|
|
48
|
+
}
|
|
49
|
+
/** A box on the page, in CSS pixels. */
|
|
50
|
+
export interface WgBox {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
}
|
|
56
|
+
/** The banner UX installOverlay takes: where it sits and how it behaves. */
|
|
57
|
+
export interface BannerUiState {
|
|
58
|
+
pos?: BannerPos;
|
|
59
|
+
collision?: boolean;
|
|
60
|
+
hidden?: boolean;
|
|
61
|
+
captionFadeMs?: number;
|
|
62
|
+
}
|
|
63
|
+
/** What installOverlay hands every in-page installer (inpage/*.ts) through page.evaluate; auto and pilot pass only what they use. */
|
|
64
|
+
export interface OverlayInstallArgs {
|
|
65
|
+
title?: string | undefined;
|
|
66
|
+
favicon?: string;
|
|
67
|
+
bannerPos?: BannerPos;
|
|
68
|
+
todoPos?: "left" | "right";
|
|
69
|
+
envAutoplay?: boolean;
|
|
70
|
+
todoDockUi?: TodoDockUiResolved;
|
|
71
|
+
bannerUi?: BannerUiState | null;
|
|
72
|
+
tag?: string;
|
|
73
|
+
}
|
|
74
|
+
/** One row of the network panel (inpage/network.ts): a page request or an API Block's call. */
|
|
75
|
+
export interface NetworkEntry {
|
|
76
|
+
method?: string | undefined;
|
|
77
|
+
url?: string | undefined;
|
|
78
|
+
status?: number | undefined;
|
|
79
|
+
ok?: boolean | undefined;
|
|
80
|
+
ms?: number | undefined;
|
|
81
|
+
reqHeaders?: Record<string, string> | undefined;
|
|
82
|
+
resHeaders?: Record<string, string> | undefined;
|
|
83
|
+
reqBody?: string | undefined;
|
|
84
|
+
resBody?: string | undefined;
|
|
85
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { envFlag } from "../engine/env.js";
|
|
2
|
+
/**
|
|
3
|
+
* One log format for the live overlay surfaces (auto / browser / pilot): `[HH:MM:SS.mmm] waygraph <surface>: ...`, the
|
|
4
|
+
* same shape as the demo runner's `step-mode/demo-log.ts`. Silenced by WAYGRAPH_JSON=1.
|
|
5
|
+
*/
|
|
6
|
+
function ts() {
|
|
7
|
+
const d = new Date();
|
|
8
|
+
const p = (n) => String(n).padStart(2, "0");
|
|
9
|
+
return `${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}.${String(d.getMilliseconds()).padStart(3, "0")}`;
|
|
10
|
+
}
|
|
11
|
+
export function verboseLog(surface, msg) {
|
|
12
|
+
if (envFlag("WAYGRAPH_JSON"))
|
|
13
|
+
return;
|
|
14
|
+
console.log(`[${ts()}] waygraph ${surface}: ${msg}`);
|
|
15
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
2
|
+
/**
|
|
3
|
+
* The `page` a regular Block's `act()` is typed against via `defineBlock` -
|
|
4
|
+
* structurally identical to Playwright's own `Page` (the same real object is
|
|
5
|
+
* passed at runtime; this is a type-only narrowing), except `goto`, `reload`,
|
|
6
|
+
* `goBack`, and `goForward` are re-declared under `@deprecated`. Nothing is
|
|
7
|
+
* blocked - every method is still fully present and callable, and this never
|
|
8
|
+
* causes a build to fail - but a TypeScript-aware editor shows the call
|
|
9
|
+
* struck through with a hover warning the instant it's typed, pointing at
|
|
10
|
+
* `defineNavBlock` instead. `NavBlock`'s own generated `act()` (the one place
|
|
11
|
+
* navigation actually belongs) uses the real `Page`, not this type - that
|
|
12
|
+
* distinction lives entirely inside `defineNavBlock` and never reaches a
|
|
13
|
+
* NavBlock's own author, who never writes its `act()` by hand.
|
|
14
|
+
*/
|
|
15
|
+
import type { MemKey } from "../mem/mem.js";
|
|
16
|
+
export type ActionPage = Omit<Page, "goto" | "reload" | "goBack" | "goForward"> & {
|
|
17
|
+
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
18
|
+
goto: Page["goto"];
|
|
19
|
+
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
20
|
+
reload: Page["reload"];
|
|
21
|
+
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
22
|
+
goBack: Page["goBack"];
|
|
23
|
+
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
24
|
+
goForward: Page["goForward"];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* One selectable option for a Block whose real choices depend on the live
|
|
28
|
+
* page - "which of these items to add to cart" is only knowable by looking
|
|
29
|
+
* at the DOM, not from static analysis. `waygraph auto` calls
|
|
30
|
+
* {@link Block.instanceOptions} while building its menu and lists one row
|
|
31
|
+
* per option (via `label`) instead of a single generic "block -> checkpoint"
|
|
32
|
+
* row; picking a row does `mem.set(key, value)` before that Block's own
|
|
33
|
+
* `act()` runs, so `act()` just reads mem exactly like any other required
|
|
34
|
+
* key - it never needs to know whether it was driven by a human-authored
|
|
35
|
+
* Flow or a dynamic auto-explore menu.
|
|
36
|
+
* @example { id: "sauce-labs-backpack", label: 'Add "Sauce Labs Backpack" to cart', key: SelectedItem.key, value: { id: "sauce-labs-backpack", name: "Sauce Labs Backpack" } }
|
|
37
|
+
*/
|
|
38
|
+
export interface WaygraphInstanceOption<T = unknown> {
|
|
39
|
+
/** Stable id for this option - used to dedupe menu rows across rebuilds. */
|
|
40
|
+
id: string;
|
|
41
|
+
/** Shown in the menu instead of a generic "block -> checkpoint" line. */
|
|
42
|
+
label: string;
|
|
43
|
+
/** Must be one of this Block's own `requires` keys. */
|
|
44
|
+
key: MemKey<T>;
|
|
45
|
+
/** `mem.set(key, value)` right before this Block's `act()` runs. */
|
|
46
|
+
value: T;
|
|
47
|
+
/**
|
|
48
|
+
* Optional CSS selector for the element this option will act on.
|
|
49
|
+
* `waygraph auto` (headful) rings that element while the menu row is hovered
|
|
50
|
+
* so you can see what a pick would click before committing.
|
|
51
|
+
*/
|
|
52
|
+
highlight?: string;
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,53 +1,11 @@
|
|
|
1
1
|
import type { Page } from "@playwright/test";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
export type Checkpoint<Tag extends string> = {
|
|
11
|
-
readonly __state: Tag;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Builds a Checkpoint - spells `__state` for you so no call site does it by hand.
|
|
15
|
-
* @example resolve: () => checkpoint("LoggedIn")
|
|
16
|
-
*/
|
|
17
|
-
export declare function checkpoint<Tag extends string>(tag: Tag): Checkpoint<Tag>;
|
|
18
|
-
/**
|
|
19
|
-
* The type every entry Block's `In` must be - `runGraph` always seeds a fresh
|
|
20
|
-
* run with `checkpoint("__start__")` as the fake initial input, so a Block
|
|
21
|
-
* meant to lead off a Flow needs exactly this type. Exported so no project
|
|
22
|
-
* has to know or hand-type the `"__start__"` literal itself - the same reason
|
|
23
|
-
* `checkpoint()` exists instead of every call site spelling `{ __state: tag }`
|
|
24
|
-
* by hand.
|
|
25
|
-
* @example export const LoginBlock: Block<Start, LoggedIn> = { ... }
|
|
26
|
-
*/
|
|
27
|
-
export type Start = Checkpoint<"__start__">;
|
|
28
|
-
/**
|
|
29
|
-
* The `page` a regular Block's `act()` is typed against via `defineBlock` -
|
|
30
|
-
* structurally identical to Playwright's own `Page` (the same real object is
|
|
31
|
-
* passed at runtime; this is a type-only narrowing), except `goto`, `reload`,
|
|
32
|
-
* `goBack`, and `goForward` are re-declared under `@deprecated`. Nothing is
|
|
33
|
-
* blocked - every method is still fully present and callable, and this never
|
|
34
|
-
* causes a build to fail - but a TypeScript-aware editor shows the call
|
|
35
|
-
* struck through with a hover warning the instant it's typed, pointing at
|
|
36
|
-
* `defineNavBlock` instead. `NavBlock`'s own generated `act()` (the one place
|
|
37
|
-
* navigation actually belongs) uses the real `Page`, not this type - that
|
|
38
|
-
* distinction lives entirely inside `defineNavBlock` and never reaches a
|
|
39
|
-
* NavBlock's own author, who never writes its `act()` by hand.
|
|
40
|
-
*/
|
|
41
|
-
export type ActionPage = Omit<Page, "goto" | "reload" | "goBack" | "goForward"> & {
|
|
42
|
-
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
43
|
-
goto: Page["goto"];
|
|
44
|
-
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
45
|
-
reload: Page["reload"];
|
|
46
|
-
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
47
|
-
goBack: Page["goBack"];
|
|
48
|
-
/** @deprecated Navigation doesn't belong in a regular Block's act() - use defineNavBlock instead. */
|
|
49
|
-
goForward: Page["goForward"];
|
|
50
|
-
};
|
|
2
|
+
import type { Checkpoint } from "../checkpoint/checkpoint.js";
|
|
3
|
+
import type { MemKey } from "../mem/mem.js";
|
|
4
|
+
import { MemPage } from "../mem/mem.js";
|
|
5
|
+
import type { WaygraphSlidesOrFn } from "../stub/ring.js";
|
|
6
|
+
import type { StubLifecycleFn } from "../stub/stub.js";
|
|
7
|
+
import type { Trait } from "../trait/trait.js";
|
|
8
|
+
import type { ActionPage, WaygraphInstanceOption } from "./action-page.js";
|
|
51
9
|
/**
|
|
52
10
|
* The four-phase pipeline every Block runs. Most Blocks only need `act` + a
|
|
53
11
|
* one-line `resolve` - add `observe` only once a Block genuinely branches, add
|
|
@@ -90,36 +48,14 @@ export interface Instruction<In extends Checkpoint<string>, Out extends Checkpoi
|
|
|
90
48
|
*/
|
|
91
49
|
verify?: Trait[] | ((out: Out) => Trait[]);
|
|
92
50
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* slot object. Object map `{ email: { selector, label } }` remains a shorthand.
|
|
96
|
-
* Flow {@link HighlightFixtureMap} still overrides ring labels.
|
|
97
|
-
* @example stubBefore: (ctx) => {
|
|
98
|
-
* ctx.todos(["Email", "Password", "Submit"]);
|
|
99
|
-
* ctx.todoIndex(0);
|
|
100
|
-
* ctx.highlights({ email: { selector: "#email", label: "Email" } });
|
|
101
|
-
* }
|
|
102
|
-
*/
|
|
103
|
-
stubBefore?: HighlightStubPhaseOrFn<Out>;
|
|
104
|
-
/**
|
|
105
|
-
* Open block lifecycle **after** resolve (step panel rings + fixtures).
|
|
106
|
-
* Prefer `stubAfter(ctx) { ... }`. Object map shorthand still works.
|
|
107
|
-
* Prefer this over legacy {@link Instruction.highlights}.
|
|
108
|
-
* @example stubAfter: (ctx) => {
|
|
109
|
-
* ctx.todoIndex(2);
|
|
110
|
-
* ctx.ring("badge", { selector: ".cart", label: "Cart updated" });
|
|
111
|
-
* }
|
|
51
|
+
* The demo's narration before the step, written by `Block.stubBefore((ctx) => ...)` where a flow uses the Block (stubs
|
|
52
|
+
* chained there add up). Not something to set in a Block's definition: Blocks carry no narration.
|
|
112
53
|
*/
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
* @example stubOnError: (ctx) => {
|
|
119
|
-
* ctx.ring("card", { selector: ".alt-1", label: "Card at failure", tag: "BUG" });
|
|
120
|
-
* }
|
|
121
|
-
*/
|
|
122
|
-
stubOnError?: HighlightStubPhaseOrFn<Out>;
|
|
54
|
+
stubBefore?: StubLifecycleFn<Out>;
|
|
55
|
+
/** After the step lands; written by `Block.stubAfter((ctx) => ...)`. */
|
|
56
|
+
stubAfter?: StubLifecycleFn<Out>;
|
|
57
|
+
/** When the step fails, before the failure panel; written by `Block.stubOnError((ctx) => ...)`. */
|
|
58
|
+
stubOnError?: StubLifecycleFn<Out>;
|
|
123
59
|
/**
|
|
124
60
|
* Multi-step demo captions ("yap" slides) with Next between each -
|
|
125
61
|
* not block lifecycle. Explains a long process; optional `selector` rings
|
|
@@ -130,39 +66,6 @@ export interface Instruction<In extends Checkpoint<string>, Out extends Checkpoi
|
|
|
130
66
|
* ]
|
|
131
67
|
*/
|
|
132
68
|
slides?: WaygraphSlidesOrFn<Out>;
|
|
133
|
-
/**
|
|
134
|
-
* @deprecated Prefer {@link Instruction.stubAfter}. Shimmed to stubAfter keys
|
|
135
|
-
* `"0"`, `"1"`, … when stubAfter is empty.
|
|
136
|
-
*/
|
|
137
|
-
highlights?: readonly WaygraphHighlight[] | ((out: Out) => readonly WaygraphHighlight[]);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* One selectable option for a Block whose real choices depend on the live
|
|
141
|
-
* page - "which of these items to add to cart" is only knowable by looking
|
|
142
|
-
* at the DOM, not from static analysis. `waygraph auto` calls
|
|
143
|
-
* {@link Block.instanceOptions} while building its menu and lists one row
|
|
144
|
-
* per option (via `label`) instead of a single generic "block -> checkpoint"
|
|
145
|
-
* row; picking a row does `mem.set(key, value)` before that Block's own
|
|
146
|
-
* `act()` runs, so `act()` just reads mem exactly like any other required
|
|
147
|
-
* key - it never needs to know whether it was driven by a human-authored
|
|
148
|
-
* Flow or a dynamic auto-explore menu.
|
|
149
|
-
* @example { id: "sauce-labs-backpack", label: 'Add "Sauce Labs Backpack" to cart', key: SelectedItem.key, value: { id: "sauce-labs-backpack", name: "Sauce Labs Backpack" } }
|
|
150
|
-
*/
|
|
151
|
-
export interface WaygraphInstanceOption<T = unknown> {
|
|
152
|
-
/** Stable id for this option - used to dedupe menu rows across rebuilds. */
|
|
153
|
-
id: string;
|
|
154
|
-
/** Shown in the menu instead of a generic "block -> checkpoint" line. */
|
|
155
|
-
label: string;
|
|
156
|
-
/** Must be one of this Block's own `requires` keys. */
|
|
157
|
-
key: MemKey<T>;
|
|
158
|
-
/** `mem.set(key, value)` right before this Block's `act()` runs. */
|
|
159
|
-
value: T;
|
|
160
|
-
/**
|
|
161
|
-
* Optional CSS selector for the element this option will act on.
|
|
162
|
-
* `waygraph auto` (headful) rings that element while the menu row is hovered
|
|
163
|
-
* so you can see what a pick would click before committing.
|
|
164
|
-
*/
|
|
165
|
-
highlight?: string;
|
|
166
69
|
}
|
|
167
70
|
/**
|
|
168
71
|
* A Block wraps one instruction. Its Observed type is an internal detail, erased here.
|
|
@@ -200,7 +103,7 @@ export interface Block<In extends Checkpoint<string>, Out extends Checkpoint<str
|
|
|
200
103
|
* Block, meaning "terminal after one step". Returning the Block itself is a
|
|
201
104
|
* self-loop - see `runGraph`'s `maxSteps` for the safety net that needs.
|
|
202
105
|
*/
|
|
203
|
-
next?(checkpoint: Out):
|
|
106
|
+
next?(checkpoint: Out): SomeBlock | null | undefined;
|
|
204
107
|
/**
|
|
205
108
|
* `branch()`'s routing table as plain, readable data - Checkpoint tag ->
|
|
206
109
|
* target Block's `.name` (`null` for a terminal tag) - alongside {@link next}
|
|
@@ -220,12 +123,12 @@ export interface Block<In extends Checkpoint<string>, Out extends Checkpoint<str
|
|
|
220
123
|
* `act`.
|
|
221
124
|
* @example requires: [LoginCreds.key]
|
|
222
125
|
*/
|
|
223
|
-
requires?: readonly MemKey<
|
|
126
|
+
requires?: readonly MemKey<unknown>[];
|
|
224
127
|
/**
|
|
225
|
-
* Demo pacing for this Block
|
|
128
|
+
* Demo pacing for this Block (the `{ pace }` step option).
|
|
226
129
|
* Demo/step only - `runGraph` ignores. Prefer `fastForwardComposeBlock` for blitz.
|
|
227
130
|
*/
|
|
228
|
-
demoPace?: import("
|
|
131
|
+
demoPace?: import("../stub/pace.js").DemoPace;
|
|
229
132
|
/**
|
|
230
133
|
* Optional. When this Block's real choices depend on the live page
|
|
231
134
|
* (which of several items to add to cart, which of several rows to
|
|
@@ -282,39 +185,96 @@ export type DefinedBlock<In extends Checkpoint<string>, Out extends Checkpoint<s
|
|
|
282
185
|
* Overloads keep `ctx` typed when the author passes a lifecycle function
|
|
283
186
|
* (a single union parameter would make the callback param `any`).
|
|
284
187
|
*/
|
|
285
|
-
stubBefore(stub: import("
|
|
286
|
-
stubBefore(stub: import("./highlights.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
188
|
+
stubBefore(stub: import("../stub/stub.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
287
189
|
/** Demo narration after resolve. Prefer ctx callbacks over slot-map objects. */
|
|
288
|
-
stubAfter(stub: import("
|
|
289
|
-
stubAfter(stub: import("./highlights.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
190
|
+
stubAfter(stub: import("../stub/stub.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
290
191
|
/** Demo narration when the step fails / expected-failure path. */
|
|
291
|
-
stubOnError(stub: import("
|
|
292
|
-
stubOnError(stub: import("./highlights.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
192
|
+
stubOnError(stub: import("../stub/stub.js").StubLifecycleFn<Out>): DefinedBlock<In, Out>;
|
|
293
193
|
};
|
|
294
194
|
/**
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
|
|
298
|
-
|
|
195
|
+
* Any Block, whatever its route. A Block takes its `In` Checkpoint as a callback argument, so it is contravariant in `In`
|
|
196
|
+
* and no one Checkpoint type covers every Block: `any` is that "some Block", written once here.
|
|
197
|
+
*/
|
|
198
|
+
export type SomeBlock = Block<any, any>;
|
|
199
|
+
/** The Checkpoint a Block resolves to. */
|
|
200
|
+
type BlockOut<B> = B extends Block<infer _In, infer Out> ? Out : never;
|
|
201
|
+
/** Any {@link DefinedBlock} (see {@link SomeBlock}). */
|
|
202
|
+
export type SomeDefinedBlock = DefinedBlock<any, any>;
|
|
203
|
+
export declare function findBlockIndex(middle: readonly SomeBlock[], block: SomeBlock | string | number): number;
|
|
204
|
+
/**
|
|
205
|
+
* Strips `withVerify`/`modVerify`/`modVerifyAll` off a Block, keeping everything
|
|
206
|
+
* else - `name`, `instruction`, `next`, `requires`. Every function below that
|
|
207
|
+
* returns a new Block calls this on its input first, then rebuilds through
|
|
208
|
+
* `defineBlock`. Without it, a Block's attached methods close over the shape it
|
|
209
|
+
* had *when they were attached* - call `.withVerify()` on a Block that
|
|
210
|
+
* `branch()` added routing to afterward, and without this step the result would
|
|
211
|
+
* silently drop that routing, since the stale closure never knew about it.
|
|
299
212
|
*/
|
|
300
|
-
export
|
|
213
|
+
export declare function stripMethods<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>): {
|
|
301
214
|
name: string;
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
215
|
+
description?: Block<In, Out>["description"];
|
|
216
|
+
instruction: Block<In, Out>["instruction"];
|
|
217
|
+
next?: Block<In, Out>["next"];
|
|
218
|
+
requires?: Block<In, Out>["requires"];
|
|
219
|
+
routes?: Block<In, Out>["routes"];
|
|
220
|
+
instanceOptions?: Block<In, Out>["instanceOptions"];
|
|
221
|
+
};
|
|
222
|
+
/** Copy non-enumerable waygraph markers so decorate/withVerify keep map() kind checks. */
|
|
223
|
+
export declare function copyWaygraphRuntime(from: object, to: object): void;
|
|
224
|
+
/**
|
|
225
|
+
* Builds a Block with `withVerify`/`modVerify`/`modVerifyAll` attached as
|
|
226
|
+
* methods - `LoginBlock.withVerify([...])`, discoverable by typing
|
|
227
|
+
* `LoginBlock.` in an editor, not just callable as `withVerify(LoginBlock, ...)`
|
|
228
|
+
* if you already know it exists. A raw object literal is still a perfectly
|
|
229
|
+
* valid Block (every test fixture in this codebase is one) - it just won't have
|
|
230
|
+
* these attached. The methods are thin: they delegate to the identically-named
|
|
231
|
+
* free functions, which remain the one place this logic actually lives.
|
|
232
|
+
*/
|
|
233
|
+
export declare function defineBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>>(base: {
|
|
234
|
+
name: string;
|
|
235
|
+
description?: Block<In, Out>["description"];
|
|
236
|
+
instruction: Omit<Instruction<In, Out, any>, "act"> & {
|
|
237
|
+
act(page: ActionPage, input: In, mem: MemPage): Promise<void>;
|
|
238
|
+
};
|
|
239
|
+
next?: Block<In, Out>["next"];
|
|
240
|
+
requires?: Block<In, Out>["requires"];
|
|
241
|
+
routes?: Block<In, Out>["routes"];
|
|
242
|
+
instanceOptions?: Block<In, Out>["instanceOptions"];
|
|
243
|
+
}): DefinedBlock<In, Out>;
|
|
305
244
|
/**
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
245
|
+
* Returns a new Block that runs exactly like `block` - same act/observe/resolve,
|
|
246
|
+
* same routing - but with `verify` replaced. For giving one flow stricter (or
|
|
247
|
+
* looser, or just different) confirmation on a Block it didn't author, without
|
|
248
|
+
* that Block needing to have been written as a parameterized factory in
|
|
249
|
+
* anticipation. Same move as `branch()`: decorate an existing Block, don't ask
|
|
250
|
+
* every Block to pre-build its own override mechanism.
|
|
310
251
|
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
252
|
+
* Wrap the one Block you want to change, in place, where a flow uses it:
|
|
253
|
+
* `map().gotoPage(NavLoginBlock).method(withVerify(AddToCartBlock, [...]))`.
|
|
254
|
+
*/
|
|
255
|
+
export declare function withVerify<B extends SomeBlock>(block: B, verify: Trait[] | ((out: BlockOut<B>) => Trait[])): B;
|
|
256
|
+
/**
|
|
257
|
+
* Replaces one Trait inside `block`'s verify list, leaving every other check
|
|
258
|
+
* untouched - the v1/v2/legacy-variant case, where one check needs a different
|
|
259
|
+
* selector or URL pattern but the rest of the Block is identical. Addressed by
|
|
260
|
+
* the Trait's own `name` (recommended - inserting or reordering other checks
|
|
261
|
+
* can't silently retarget it) or, if you genuinely know the position and don't
|
|
262
|
+
* need that safety, a numeric index. Either way a bad address fails loud
|
|
263
|
+
* immediately instead of quietly doing nothing. `newCheck` can be a bare
|
|
264
|
+
* `check` function (keeps the existing name) or a full `Trait` (to rename too).
|
|
265
|
+
* Only works on a flat `verify` array - a function-form `verify` (from
|
|
266
|
+
* `verify: (out) => Trait[]`) has no fixed list to address into, so this
|
|
267
|
+
* throws rather than guess; use `withVerify` to replace it wholesale instead.
|
|
268
|
+
*/
|
|
269
|
+
export declare function modVerify<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, nameOrIndex: string | number, newCheck: Trait["check"] | Trait): DefinedBlock<In, Out>;
|
|
270
|
+
/**
|
|
271
|
+
* `modVerify`, but for several named checks in one call - a v2 variant that
|
|
272
|
+
* differs in five ways from v1 shouldn't need five nested `modVerify(modVerify(
|
|
273
|
+
* modVerify(...)))` calls to track by eye. `patches` keys are plain strings (a
|
|
274
|
+
* Trait's `name`, not a `MemKey` instance), so an ordinary object literal is
|
|
275
|
+
* fine here - unlike `MemPage`, there's no identity-collision reason to need
|
|
276
|
+
* `[name, check]` pairs. Applies each patch in turn via `modVerify`, so the
|
|
277
|
+
* same fail-loud-on-unknown-name behavior holds for every entry.
|
|
319
278
|
*/
|
|
320
|
-
export declare function
|
|
279
|
+
export declare function modVerifyAll<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, patches: Record<string, Trait["check"] | Trait>): DefinedBlock<In, Out>;
|
|
280
|
+
export {};
|