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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MSG_FLOW_BLOCK_NOT_FOUND_BY_INDEX, MSG_FLOW_BLOCK_NOT_FOUND_BY_NAME, MSG_MODVERIFY_FUNCTION_FORM, MSG_MODVERIFY_NOT_FOUND_BY_INDEX, MSG_MODVERIFY_NOT_FOUND_BY_NAME, WaygraphError, } from "../errors.js";
|
|
2
2
|
export function findBlockIndex(middle, block) {
|
|
3
3
|
if (typeof block === "number") {
|
|
4
4
|
if (block < 0 || block >= middle.length) {
|
|
@@ -13,46 +13,6 @@ export function findBlockIndex(middle, block) {
|
|
|
13
13
|
}
|
|
14
14
|
return index;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Attaches routing to `block` without touching its act/observe/resolve/verify -
|
|
18
|
-
* `routes` must cover every tag of `block`'s output (a missing route is a compile
|
|
19
|
-
* error), and the returned Block runs exactly as `block` always did, just followed
|
|
20
|
-
* by whichever next Block the resolved tag routes to. `null` for a tag means that
|
|
21
|
-
* tag is terminal - the run stops there, same as a Block with no routing at all.
|
|
22
|
-
* A route pointing back at `block` itself is a self-loop; see `runGraph`'s
|
|
23
|
-
* `maxSteps` for its safety net. The return type is deliberately `Block<In, any>` -
|
|
24
|
-
* a route can lead anywhere, including back through itself, so there is no fixed
|
|
25
|
-
* Out type to express; state the expected outcomes to `runGraph` via `terminals`
|
|
26
|
-
* instead.
|
|
27
|
-
*/
|
|
28
|
-
export function branch(block, routes) {
|
|
29
|
-
const base = stripMethods(block);
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
-
let routed;
|
|
32
|
-
const routesAsData = {};
|
|
33
|
-
for (const [tag, target] of Object.entries(routes)) {
|
|
34
|
-
routesAsData[tag] = target === null ? null : target === block ? base.name : target.name;
|
|
35
|
-
}
|
|
36
|
-
routed = defineBlock({
|
|
37
|
-
...base,
|
|
38
|
-
next: (checkpoint) => {
|
|
39
|
-
const target = routes[checkpoint.__state];
|
|
40
|
-
if (target === undefined || target === null)
|
|
41
|
-
return undefined;
|
|
42
|
-
// A route naming `block` itself (the only self-reference in scope when
|
|
43
|
-
// `routes` was written) means "loop back with routing intact" - substitute
|
|
44
|
-
// the routed Block, not the original with no `next` of its own.
|
|
45
|
-
return target === block ? routed : target;
|
|
46
|
-
},
|
|
47
|
-
routes: routesAsData,
|
|
48
|
-
});
|
|
49
|
-
// Without this, branch()'s output carried no __waygraphKind/__waygraphSalt at all (defineBlock
|
|
50
|
-
// never stamps them - factories do, after defineBlock returns), so a branched Block could never
|
|
51
|
-
// pass MapBuilder's assertMapKind/assertMapSalt checks. Real bug: branching was unusable from the
|
|
52
|
-
// Waygraph Map, only from a raw runGraph() call.
|
|
53
|
-
copyWaygraphRuntime(block, routed);
|
|
54
|
-
return routed;
|
|
55
|
-
}
|
|
56
16
|
/**
|
|
57
17
|
* Strips `withVerify`/`modVerify`/`modVerifyAll` off a Block, keeping everything
|
|
58
18
|
* else - `name`, `instruction`, `next`, `requires`. Every function below that
|
|
@@ -62,8 +22,7 @@ export function branch(block, routes) {
|
|
|
62
22
|
* `branch()` added routing to afterward, and without this step the result would
|
|
63
23
|
* silently drop that routing, since the stale closure never knew about it.
|
|
64
24
|
*/
|
|
65
|
-
|
|
66
|
-
function stripMethods(block) {
|
|
25
|
+
export function stripMethods(block) {
|
|
67
26
|
return {
|
|
68
27
|
name: block.name,
|
|
69
28
|
instruction: block.instruction,
|
|
@@ -82,6 +41,8 @@ export function copyWaygraphRuntime(from, to) {
|
|
|
82
41
|
"__waygraphNavUrl",
|
|
83
42
|
"__waygraphNavClick",
|
|
84
43
|
"__waygraphNavFrom",
|
|
44
|
+
"__waygraphFrom",
|
|
45
|
+
"__waygraphTo",
|
|
85
46
|
]) {
|
|
86
47
|
const desc = Object.getOwnPropertyDescriptor(from, key);
|
|
87
48
|
if (!desc)
|
|
@@ -131,9 +92,9 @@ export function defineBlock(base) {
|
|
|
131
92
|
withVerify: (verify) => withVerify(defined, verify),
|
|
132
93
|
modVerify: (nameOrIndex, newCheck) => modVerify(defined, nameOrIndex, newCheck),
|
|
133
94
|
modVerifyAll: (patches) => modVerifyAll(defined, patches),
|
|
134
|
-
stubBefore: (stub) =>
|
|
135
|
-
stubAfter: (stub) =>
|
|
136
|
-
stubOnError: (stub) =>
|
|
95
|
+
stubBefore: (stub) => withStubPhase(defined, "stubBefore", stub),
|
|
96
|
+
stubAfter: (stub) => withStubPhase(defined, "stubAfter", stub),
|
|
97
|
+
stubOnError: (stub) => withStubPhase(defined, "stubOnError", stub),
|
|
137
98
|
};
|
|
138
99
|
return defined;
|
|
139
100
|
}
|
|
@@ -145,13 +106,8 @@ export function defineBlock(base) {
|
|
|
145
106
|
* anticipation. Same move as `branch()`: decorate an existing Block, don't ask
|
|
146
107
|
* every Block to pre-build its own override mechanism.
|
|
147
108
|
*
|
|
148
|
-
* Wrap the one Block you want to change, in place,
|
|
149
|
-
*
|
|
150
|
-
* `defineFlow([start, LoginBlock, withVerify(AddToCartBlock, [...]), end])`.
|
|
151
|
-
* There is no separate positional array to keep in sync and no `null`
|
|
152
|
-
* placeholder for "skip this one" - `defineFlow` has no per-slot verify
|
|
153
|
-
* argument at all, only whatever `verify` each Block's own `instruction` (or
|
|
154
|
-
* a `withVerify(...)` wrapping it) carries with it.
|
|
109
|
+
* Wrap the one Block you want to change, in place, where a flow uses it:
|
|
110
|
+
* `map().gotoPage(NavLoginBlock).method(withVerify(AddToCartBlock, [...]))`.
|
|
155
111
|
*/
|
|
156
112
|
export function withVerify(block, verify) {
|
|
157
113
|
const base = stripMethods(block);
|
|
@@ -159,29 +115,10 @@ export function withVerify(block, verify) {
|
|
|
159
115
|
copyWaygraphRuntime(block, next);
|
|
160
116
|
return next;
|
|
161
117
|
}
|
|
162
|
-
|
|
163
|
-
return !!v && typeof v === "object" && !Array.isArray(v);
|
|
164
|
-
}
|
|
165
|
-
/** Run a prior stub (fn or slot map) into an open ctx so decorate can chain. */
|
|
118
|
+
/** Runs a prior stub into the same ctx, so stubs chained on one Block add up. */
|
|
166
119
|
async function applyStubIntoCtx(raw, ctx) {
|
|
167
|
-
if (raw
|
|
168
|
-
|
|
169
|
-
if (typeof raw === "function") {
|
|
170
|
-
const ret = await raw(ctx);
|
|
171
|
-
if (isHighlightStubPhase(ret)) {
|
|
172
|
-
for (const [id, stub] of Object.entries(ret)) {
|
|
173
|
-
if (stub)
|
|
174
|
-
ctx.ring(id, stub);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
if (isHighlightStubPhase(raw)) {
|
|
180
|
-
for (const [id, stub] of Object.entries(raw)) {
|
|
181
|
-
if (stub)
|
|
182
|
-
ctx.ring(id, stub);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
120
|
+
if (raw !== undefined)
|
|
121
|
+
await raw(ctx);
|
|
185
122
|
}
|
|
186
123
|
function withStubPhase(block, phase, stub) {
|
|
187
124
|
const base = stripMethods(block);
|
|
@@ -198,61 +135,6 @@ function withStubPhase(block, phase, stub) {
|
|
|
198
135
|
copyWaygraphRuntime(block, next);
|
|
199
136
|
return next;
|
|
200
137
|
}
|
|
201
|
-
/**
|
|
202
|
-
* Attach / chain a stubBefore lifecycle on a Block. Prefer
|
|
203
|
-
* `(ctx) => { ctx.ring(...); const x = ctx.mem?.get(Key); }`.
|
|
204
|
-
* @example FillUsernameBlock.stubBefore((ctx) => { ctx.ring("username", { ... }) })
|
|
205
|
-
* @deprecated Use the chained method: `Block.stubBefore((ctx) => …)`.
|
|
206
|
-
*/
|
|
207
|
-
export function withStubBefore(block, stub) {
|
|
208
|
-
return withStubPhase(block, "stubBefore", stub);
|
|
209
|
-
}
|
|
210
|
-
/** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubAfter((ctx) => …)`.
|
|
211
|
-
*/
|
|
212
|
-
export function withStubAfter(block, stub) {
|
|
213
|
-
return withStubPhase(block, "stubAfter", stub);
|
|
214
|
-
}
|
|
215
|
-
/** @see {@link withStubBefore} * @deprecated Use the chained method: `Block.stubOnError((ctx) => …)`.
|
|
216
|
-
*/
|
|
217
|
-
export function withStubOnError(block, stub) {
|
|
218
|
-
return withStubPhase(block, "stubOnError", stub);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Answers the browser's own dialog (`confirm`, `alert`, `prompt`, `beforeunload`) that this Block's action
|
|
222
|
-
* triggers. A dialog freezes the page until it is answered, so the answer has to be armed before the click -
|
|
223
|
-
* this does that without folding it into the Block's own `act`. The dialog's text can be kept in mem.
|
|
224
|
-
* @example withDialog(CancelBlock, { accept: true, into: LeaveWarning })
|
|
225
|
-
*/
|
|
226
|
-
export function withDialog(block, options = {}) {
|
|
227
|
-
const base = stripMethods(block);
|
|
228
|
-
const act = base.instruction.act.bind(base.instruction);
|
|
229
|
-
const next = defineBlock({
|
|
230
|
-
...base,
|
|
231
|
-
instruction: {
|
|
232
|
-
...base.instruction,
|
|
233
|
-
async act(page, input, mem) {
|
|
234
|
-
const answer = async (dialog) => {
|
|
235
|
-
if (options.into)
|
|
236
|
-
mem.set(options.into, dialog.message());
|
|
237
|
-
if (options.accept === false)
|
|
238
|
-
await dialog.dismiss();
|
|
239
|
-
else
|
|
240
|
-
await dialog.accept(options.promptText);
|
|
241
|
-
};
|
|
242
|
-
const raw = page;
|
|
243
|
-
raw.once("dialog", answer);
|
|
244
|
-
try {
|
|
245
|
-
await act(page, input, mem);
|
|
246
|
-
}
|
|
247
|
-
finally {
|
|
248
|
-
raw.off("dialog", answer);
|
|
249
|
-
}
|
|
250
|
-
},
|
|
251
|
-
},
|
|
252
|
-
});
|
|
253
|
-
copyWaygraphRuntime(block, next);
|
|
254
|
-
return next;
|
|
255
|
-
}
|
|
256
138
|
/**
|
|
257
139
|
* Replaces one Trait inside `block`'s verify list, leaving every other check
|
|
258
140
|
* untouched - the v1/v2/legacy-variant case, where one check needs a different
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Checkpoint } from "../checkpoint/checkpoint.js";
|
|
2
|
+
import { Block, DefinedBlock } from "./block.js";
|
|
3
|
+
/**
|
|
4
|
+
* Attaches routing to `block` without touching its act/observe/resolve/verify -
|
|
5
|
+
* `routes` must cover every tag of `block`'s output (a missing route is a compile
|
|
6
|
+
* error), and the returned Block runs exactly as `block` always did, just followed
|
|
7
|
+
* by whichever next Block the resolved tag routes to. `null` for a tag means that
|
|
8
|
+
* tag is terminal - the run stops there, same as a Block with no routing at all.
|
|
9
|
+
* A route pointing back at `block` itself is a self-loop; see `runGraph`'s
|
|
10
|
+
* `maxSteps` for its safety net. The return type is deliberately `Block<In, any>` -
|
|
11
|
+
* a route can lead anywhere, including back through itself, so there is no fixed
|
|
12
|
+
* Out type to express; state the expected outcomes to `runGraph` via `terminals`
|
|
13
|
+
* instead.
|
|
14
|
+
*/
|
|
15
|
+
export declare function branch<In extends Checkpoint<string>, Out extends Checkpoint<string>>(block: Block<In, Out>, routes: {
|
|
16
|
+
[K in Out["__state"]]: Block<Extract<Out, Checkpoint<K>>, any> | null;
|
|
17
|
+
}): DefinedBlock<In, any>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { copyWaygraphRuntime, defineBlock, stripMethods } from "./block.js";
|
|
2
|
+
/**
|
|
3
|
+
* Attaches routing to `block` without touching its act/observe/resolve/verify -
|
|
4
|
+
* `routes` must cover every tag of `block`'s output (a missing route is a compile
|
|
5
|
+
* error), and the returned Block runs exactly as `block` always did, just followed
|
|
6
|
+
* by whichever next Block the resolved tag routes to. `null` for a tag means that
|
|
7
|
+
* tag is terminal - the run stops there, same as a Block with no routing at all.
|
|
8
|
+
* A route pointing back at `block` itself is a self-loop; see `runGraph`'s
|
|
9
|
+
* `maxSteps` for its safety net. The return type is deliberately `Block<In, any>` -
|
|
10
|
+
* a route can lead anywhere, including back through itself, so there is no fixed
|
|
11
|
+
* Out type to express; state the expected outcomes to `runGraph` via `terminals`
|
|
12
|
+
* instead.
|
|
13
|
+
*/
|
|
14
|
+
export function branch(block, routes) {
|
|
15
|
+
const base = stripMethods(block);
|
|
16
|
+
let routed;
|
|
17
|
+
const routesAsData = {};
|
|
18
|
+
for (const [tag, target] of Object.entries(routes)) {
|
|
19
|
+
routesAsData[tag] = target === null ? null : target === block ? base.name : target.name;
|
|
20
|
+
}
|
|
21
|
+
routed = defineBlock({
|
|
22
|
+
...base,
|
|
23
|
+
next: (checkpoint) => {
|
|
24
|
+
const target = routes[checkpoint.__state];
|
|
25
|
+
if (target === undefined || target === null)
|
|
26
|
+
return undefined;
|
|
27
|
+
// A route naming `block` itself (the only self-reference in scope when
|
|
28
|
+
// `routes` was written) means "loop back with routing intact" - substitute
|
|
29
|
+
// the routed Block, not the original with no `next` of its own.
|
|
30
|
+
return target === block ? routed : target;
|
|
31
|
+
},
|
|
32
|
+
routes: routesAsData,
|
|
33
|
+
});
|
|
34
|
+
// Without this, branch()'s output carried no __waygraphKind/__waygraphSalt at all (defineBlock
|
|
35
|
+
// never stamps them - factories do, after defineBlock returns), so a branched Block could never
|
|
36
|
+
// pass MapBuilder's assertMapKind/assertMapSalt checks. Real bug: branching was unusable from the
|
|
37
|
+
// Waygraph Map, only from a raw runGraph() call.
|
|
38
|
+
copyWaygraphRuntime(block, routed);
|
|
39
|
+
return routed;
|
|
40
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type { BlockInfo } from "
|
|
2
|
-
import type { Block
|
|
3
|
-
import type {
|
|
1
|
+
import type { BlockInfo } from "../flow/flow.js";
|
|
2
|
+
import type { Block } from "./block.js";
|
|
3
|
+
import type { Checkpoint } from "../checkpoint/checkpoint.js";
|
|
4
|
+
import type { Trait } from "../trait/trait.js";
|
|
5
|
+
import type { SomeBlock } from "./block.js";
|
|
4
6
|
/**
|
|
5
7
|
* A Block guaranteed to have `withStepVerify`/`modStepVerify` attached - what
|
|
6
8
|
* {@link composeBlock} returns. Extends plain `Block`, so it drops straight into
|
|
7
|
-
*
|
|
9
|
+
* a flow like any other Block; no special
|
|
8
10
|
* casing needed anywhere that only expects a `Block`.
|
|
9
11
|
*/
|
|
10
12
|
export interface ComposedBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>> extends Block<In, Out> {
|
|
@@ -19,14 +21,14 @@ export interface ComposedBlock<In extends Checkpoint<string>, Out extends Checkp
|
|
|
19
21
|
* Block - same rules as {@link withVerify}. Throws if no step matches.
|
|
20
22
|
* @example GovFormBlock.withStepVerify("step-2-address", [])
|
|
21
23
|
*/
|
|
22
|
-
withStepVerify(step:
|
|
24
|
+
withStepVerify(step: SomeBlock | string | number, verify: Trait[] | ((out: any) => Trait[])): ComposedBlock<In, Out>;
|
|
23
25
|
/**
|
|
24
26
|
* Replaces one Trait inside one step's verify list - same rules as
|
|
25
27
|
* {@link modVerify}. Throws if no step matches, or that step has no verify
|
|
26
28
|
* trait at the given name/index.
|
|
27
29
|
* @example GovFormBlock.modStepVerify("step-2-address", "zip-visible", Trait.visible("#zip-confirmed"))
|
|
28
30
|
*/
|
|
29
|
-
modStepVerify(step:
|
|
31
|
+
modStepVerify(step: SomeBlock | string | number, nameOrIndex: string | number, newCheck: Trait["check"] | Trait): ComposedBlock<In, Out>;
|
|
30
32
|
}
|
|
31
33
|
/**
|
|
32
34
|
* Chains several Blocks into one named, exported unit - what a naturally
|
|
@@ -66,7 +68,7 @@ export interface FastForwardComposedBlock<In extends Checkpoint<string>, Out ext
|
|
|
66
68
|
readonly fastForward: true;
|
|
67
69
|
}
|
|
68
70
|
/** True when `block` came from {@link fastForwardComposeBlock}. */
|
|
69
|
-
export declare function isFastForwardBlock(block:
|
|
71
|
+
export declare function isFastForwardBlock(block: SomeBlock): block is FastForwardComposedBlock<any, any>;
|
|
70
72
|
/** Like `composeBlock`, but the steps run as one blitz-paced unit in a demo. */
|
|
71
73
|
export declare function fastForwardComposeBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>>(name: string, steps: readonly [Block<In, Out>]): FastForwardComposedBlock<In, Out>;
|
|
72
74
|
export declare function fastForwardComposeBlock<In extends Checkpoint<string>, B extends Checkpoint<string>, Out extends Checkpoint<string>>(name: string, steps: readonly [Block<In, B>, Block<B, Out>]): FastForwardComposedBlock<In, Out>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { connect } from "../
|
|
1
|
+
import { connect } from "../run/connect.js";
|
|
2
2
|
import { WaygraphError, MSG_COMPOSE_EMPTY, MSG_FASTFORWARD_EMPTY } from "../errors.js";
|
|
3
3
|
import { findBlockIndex, modVerify, withVerify } from "./block.js";
|
|
4
4
|
export function composeBlock(name, steps) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MemKey } from "../mem/mem.js";
|
|
2
|
+
import { SomeBlock } from "./block.js";
|
|
3
|
+
/**
|
|
4
|
+
* Answers the browser's own dialog (`confirm`, `alert`, `prompt`, `beforeunload`) that this Block's action
|
|
5
|
+
* triggers. A dialog freezes the page until it is answered, so the answer has to be armed before the click -
|
|
6
|
+
* this does that without folding it into the Block's own `act`. The dialog's text can be kept in mem.
|
|
7
|
+
* @example withDialog(CancelBlock, { accept: true, into: LeaveWarning })
|
|
8
|
+
*/
|
|
9
|
+
export declare function withDialog<B extends SomeBlock>(block: B, options?: {
|
|
10
|
+
accept?: boolean;
|
|
11
|
+
into?: MemKey<string>;
|
|
12
|
+
promptText?: string;
|
|
13
|
+
}): B;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { copyWaygraphRuntime, defineBlock, stripMethods } from "./block.js";
|
|
2
|
+
/**
|
|
3
|
+
* Answers the browser's own dialog (`confirm`, `alert`, `prompt`, `beforeunload`) that this Block's action
|
|
4
|
+
* triggers. A dialog freezes the page until it is answered, so the answer has to be armed before the click -
|
|
5
|
+
* this does that without folding it into the Block's own `act`. The dialog's text can be kept in mem.
|
|
6
|
+
* @example withDialog(CancelBlock, { accept: true, into: LeaveWarning })
|
|
7
|
+
*/
|
|
8
|
+
export function withDialog(block, options = {}) {
|
|
9
|
+
const base = stripMethods(block);
|
|
10
|
+
const act = base.instruction.act.bind(base.instruction);
|
|
11
|
+
const next = defineBlock({
|
|
12
|
+
...base,
|
|
13
|
+
instruction: {
|
|
14
|
+
...base.instruction,
|
|
15
|
+
async act(page, input, mem) {
|
|
16
|
+
const answer = async (dialog) => {
|
|
17
|
+
if (options.into)
|
|
18
|
+
mem.set(options.into, dialog.message());
|
|
19
|
+
if (options.accept === false)
|
|
20
|
+
await dialog.dismiss();
|
|
21
|
+
else
|
|
22
|
+
await dialog.accept(options.promptText);
|
|
23
|
+
};
|
|
24
|
+
const raw = page;
|
|
25
|
+
raw.once("dialog", answer);
|
|
26
|
+
try {
|
|
27
|
+
await act(page, input, mem);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
raw.off("dialog", answer);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
copyWaygraphRuntime(block, next);
|
|
36
|
+
return next;
|
|
37
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Checkpoint
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import type { Checkpoint } from "../../checkpoint/checkpoint.js";
|
|
2
|
+
import type { DefinedBlock } from "../block.js";
|
|
3
|
+
import type { Trait } from "../../trait/trait.js";
|
|
4
|
+
import { MemPage } from "../../mem/mem.js";
|
|
5
|
+
import type { MemKey } from "../../mem/mem.js";
|
|
5
6
|
import type { APIRequestContext, APIResponse } from "@playwright/test";
|
|
6
7
|
/** What `resolve`/`verify` see: the response's status and parsed body, nothing Playwright-specific. */
|
|
7
8
|
export interface ApiCallResult {
|
|
@@ -31,13 +32,14 @@ export interface ApiBlockOptions<In extends Checkpoint<string>, Out extends Chec
|
|
|
31
32
|
* @example method: "POST"
|
|
32
33
|
*/
|
|
33
34
|
method?: string;
|
|
34
|
-
/**
|
|
35
|
-
|
|
35
|
+
/** Where it runs: one Checkpoint value or a list; leave it out for "from anywhere". */
|
|
36
|
+
from?: In | readonly In[];
|
|
37
|
+
/** Where it lands: one Checkpoint value (then `resolve` may be left out) or a list. */
|
|
38
|
+
to: Out | readonly Out[];
|
|
39
|
+
/** Pure, like every other Block's resolve - picks the Checkpoint from the response. Optional when `to` is one Checkpoint. */
|
|
40
|
+
resolve?: (result: ApiCallResult) => Out;
|
|
36
41
|
verify?: Trait[] | ((out: Out) => Trait[]);
|
|
37
|
-
requires?: readonly MemKey<
|
|
38
|
-
stubBefore?: import("../../highlights.js").HighlightStubPhaseOrFn<Out>;
|
|
39
|
-
stubAfter?: import("../../highlights.js").HighlightStubPhaseOrFn<Out>;
|
|
40
|
-
stubOnError?: import("../../highlights.js").HighlightStubPhaseOrFn<Out>;
|
|
42
|
+
requires?: readonly MemKey<unknown>[];
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
43
45
|
* A Block whose `act()` is a real HTTP request, not a page interaction - lets one Flow narrate a
|
|
@@ -45,10 +47,12 @@ export interface ApiBlockOptions<In extends Checkpoint<string>, Out extends Chec
|
|
|
45
47
|
* machine, checked by the same Trait/verify system. Runs through `page.request`, so it shares the
|
|
46
48
|
* browser context's cookies/origin - no separate auth dance for an already-logged-in session.
|
|
47
49
|
* @example
|
|
48
|
-
* const CheckOrderCreated = defineApiBlock
|
|
50
|
+
* const CheckOrderCreated = defineApiBlock({
|
|
49
51
|
* name: "check-order-created",
|
|
52
|
+
* from: LoggedIn,
|
|
53
|
+
* to: [OrderConfirmed, OrderFailed],
|
|
50
54
|
* call: ({ request }) => request.get("/api/orders/latest"),
|
|
51
|
-
* resolve: (r) => (r.ok ?
|
|
55
|
+
* resolve: (r) => (r.ok ? OrderConfirmed : OrderFailed),
|
|
52
56
|
* verify: [Trait.disabled],
|
|
53
57
|
* });
|
|
54
58
|
*/
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
// New Block kind: a backend/API check, not a page action - proves a Flow can mix a UI step
|
|
2
|
+
// (defineNavBlock/defineMethodBlock) with a real HTTP request in the SAME state machine, verified
|
|
3
|
+
// by the same Trait system everything else uses. Built on Playwright's own `page.request`
|
|
4
|
+
// (APIRequestContext) - no shell-out to curl, no second HTTP client to depend on.
|
|
5
|
+
import { recordApiCall } from "../../run/hooks.js";
|
|
6
|
+
import { checkpoint } from "../../checkpoint/checkpoint.js";
|
|
7
|
+
import { markRouteOf, tagsOf } from "../../checkpoint/route.js";
|
|
1
8
|
import { defineBlock } from "../block.js";
|
|
2
|
-
import { key } from "../../mem
|
|
9
|
+
import { key } from "../../mem/mem.js";
|
|
10
|
+
import { ignorePageGone } from "../../page-gone.js";
|
|
3
11
|
// Internal scratch key threading act()'s result to observe()/resolve() - Instruction has no other
|
|
4
12
|
// channel for this (resolve is pure, given only what observe returns). Identity-keyed, so this can
|
|
5
13
|
// never collide with a real author's own MemKey even if names happened to match; safe to share one
|
|
@@ -11,14 +19,22 @@ const API_RESULT_SCRATCH = key("__wgApiBlockResult");
|
|
|
11
19
|
* machine, checked by the same Trait/verify system. Runs through `page.request`, so it shares the
|
|
12
20
|
* browser context's cookies/origin - no separate auth dance for an already-logged-in session.
|
|
13
21
|
* @example
|
|
14
|
-
* const CheckOrderCreated = defineApiBlock
|
|
22
|
+
* const CheckOrderCreated = defineApiBlock({
|
|
15
23
|
* name: "check-order-created",
|
|
24
|
+
* from: LoggedIn,
|
|
25
|
+
* to: [OrderConfirmed, OrderFailed],
|
|
16
26
|
* call: ({ request }) => request.get("/api/orders/latest"),
|
|
17
|
-
* resolve: (r) => (r.ok ?
|
|
27
|
+
* resolve: (r) => (r.ok ? OrderConfirmed : OrderFailed),
|
|
18
28
|
* verify: [Trait.disabled],
|
|
19
29
|
* });
|
|
20
30
|
*/
|
|
21
31
|
export function defineApiBlock(options) {
|
|
32
|
+
const targets = tagsOf(options.to);
|
|
33
|
+
const pick = options.resolve;
|
|
34
|
+
if (!pick && targets.length !== 1) {
|
|
35
|
+
throw new Error(`waygraph: API Block "${options.name}" lands on several Checkpoints; give it a resolve() that picks one`);
|
|
36
|
+
}
|
|
37
|
+
const resolve = pick ?? (() => checkpoint(targets[0]));
|
|
22
38
|
const built = defineBlock({
|
|
23
39
|
name: options.name,
|
|
24
40
|
...(options.description ? { description: options.description } : {}),
|
|
@@ -33,20 +49,12 @@ export function defineApiBlock(options) {
|
|
|
33
49
|
body = await response.json();
|
|
34
50
|
}
|
|
35
51
|
catch {
|
|
36
|
-
body = await response.text().catch(
|
|
52
|
+
body = await response.text().catch(ignorePageGone);
|
|
37
53
|
}
|
|
38
54
|
mem.set(API_RESULT_SCRATCH, { status: response.status(), ok: response.ok(), body });
|
|
39
|
-
//
|
|
40
|
-
// so without this it's a silent title flash. No-ops outside a demo/pilot/auto run (see
|
|
41
|
-
// addNetworkEntry's own guard) and never fails the Block if painting the panel throws.
|
|
42
|
-
// Same network-tab panel real page traffic feeds too (network-capture.js) - this is the
|
|
43
|
-
// page.request side of it (a separate APIRequestContext, never seen by page.on('request')).
|
|
55
|
+
// Shown in the demo's network panel when a demo layer registered a recorder; never fails the Block.
|
|
44
56
|
try {
|
|
45
|
-
|
|
46
|
-
// to page.__wgNetworkHistory (Node-side, survives navigation), so it isn't lost the
|
|
47
|
-
// moment a later step in the same Flow navigates and wipes the panel's DOM.
|
|
48
|
-
const { recordNetworkEntry } = await import("../../runner/network-capture.js");
|
|
49
|
-
await recordNetworkEntry(page, {
|
|
57
|
+
await recordApiCall(page, {
|
|
50
58
|
method: options.method || "GET",
|
|
51
59
|
url: response.url(),
|
|
52
60
|
status: response.status(),
|
|
@@ -63,13 +71,13 @@ export function defineApiBlock(options) {
|
|
|
63
71
|
async observe(_page, mem) {
|
|
64
72
|
return mem.get(API_RESULT_SCRATCH);
|
|
65
73
|
},
|
|
66
|
-
resolve: (observed) =>
|
|
74
|
+
resolve: (observed) => resolve(observed),
|
|
67
75
|
...(options.verify !== undefined ? { verify: options.verify } : {}),
|
|
68
|
-
...(options.stubBefore !== undefined ? { stubBefore: options.stubBefore } : {}),
|
|
69
|
-
...(options.stubAfter !== undefined ? { stubAfter: options.stubAfter } : {}),
|
|
70
|
-
...(options.stubOnError !== undefined ? { stubOnError: options.stubOnError } : {}),
|
|
71
76
|
},
|
|
72
77
|
});
|
|
78
|
+
markRouteOf(built, options);
|
|
73
79
|
Object.defineProperty(built, "__waygraphKind", { value: "api", enumerable: false, configurable: false });
|
|
80
|
+
// Accepted by map().method(), like a Method: one step that lands on a Checkpoint.
|
|
81
|
+
Object.defineProperty(built, "__waygraphSalt", { value: "api", enumerable: false, configurable: false });
|
|
74
82
|
return built;
|
|
75
83
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Block,
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
1
|
+
import type { Block, DefinedBlock } from "../block.js";
|
|
2
|
+
import type { Checkpoint } from "../../checkpoint/checkpoint.js";
|
|
3
|
+
import type { MemKey } from "../../mem/mem.js";
|
|
4
|
+
import type { Trait } from "../../trait/trait.js";
|
|
5
|
+
import type { RoutedBlockBase } from "../../checkpoint/route.js";
|
|
5
6
|
/**
|
|
6
7
|
* TypeScript salt over {@link defineBlock}: same runtime Block, but the type
|
|
7
8
|
* forces `requires` + `instanceOptions` so `waygraph auto` can list one menu
|
|
@@ -10,29 +11,23 @@ import { defineBlock } from "../block.js";
|
|
|
10
11
|
*/
|
|
11
12
|
export type EffectBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>> = Omit<DefinedBlock<In, Out>, "withVerify" | "modVerify" | "modVerifyAll" | "stubBefore" | "stubAfter" | "stubOnError"> & {
|
|
12
13
|
readonly __wgFactory?: "effect";
|
|
13
|
-
requires: readonly MemKey<
|
|
14
|
+
requires: readonly MemKey<unknown>[];
|
|
14
15
|
instanceOptions: NonNullable<Block<In, Out>["instanceOptions"]>;
|
|
15
16
|
withVerify(verify: Trait[] | ((out: Out) => Trait[])): EffectBlock<In, Out>;
|
|
16
17
|
modVerify(nameOrIndex: string | number, newCheck: Trait["check"] | Trait): EffectBlock<In, Out>;
|
|
17
18
|
modVerifyAll(patches: Record<string, Trait["check"] | Trait>): EffectBlock<In, Out>;
|
|
18
|
-
stubBefore(stub: import("../../
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
stubAfter(stub: import("../../highlights.js").StubLifecycleFn<Out>): EffectBlock<In, Out>;
|
|
22
|
-
stubOnError(stub: import("../../highlights.js").HighlightStubPhase): EffectBlock<In, Out>;
|
|
23
|
-
stubOnError(stub: import("../../highlights.js").StubLifecycleFn<Out>): EffectBlock<In, Out>;
|
|
19
|
+
stubBefore(stub: import("../../stub/stub.js").StubLifecycleFn<Out>): EffectBlock<In, Out>;
|
|
20
|
+
stubAfter(stub: import("../../stub/stub.js").StubLifecycleFn<Out>): EffectBlock<In, Out>;
|
|
21
|
+
stubOnError(stub: import("../../stub/stub.js").StubLifecycleFn<Out>): EffectBlock<In, Out>;
|
|
24
22
|
};
|
|
25
|
-
/** @deprecated Prefer {@link EffectBlock} - same type; Mem* was an early name. */
|
|
26
|
-
export type MemEffectBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>> = EffectBlock<In, Out>;
|
|
27
23
|
/**
|
|
28
24
|
* {@link defineBlock} constrained for effect-style instance menus: `requires` +
|
|
29
25
|
* `instanceOptions` are mandatory. Prefer this when the Block adds / removes /
|
|
30
26
|
* toggles a live instance rather than navigating. Runtime result is an ordinary
|
|
31
27
|
* Block - the helper is TypeScript salt only.
|
|
32
28
|
*/
|
|
33
|
-
export
|
|
34
|
-
requires: readonly MemKey<
|
|
29
|
+
export type EffectExtras<In extends Checkpoint<string>, Out extends Checkpoint<string>> = {
|
|
30
|
+
requires: readonly MemKey<unknown>[];
|
|
35
31
|
instanceOptions: NonNullable<Block<In, Out>["instanceOptions"]>;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export declare const defineMemEffectBlock: typeof defineEffectBlock;
|
|
32
|
+
};
|
|
33
|
+
export declare function defineEffectBlock<In extends Checkpoint<string>, Out extends Checkpoint<string>>(base: RoutedBlockBase<In, Out> & EffectExtras<In, Out>): EffectBlock<In, Out>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { defineBlock } from "../block.js";
|
|
2
|
+
import { markRouteOf, routed } from "../../checkpoint/route.js";
|
|
3
|
+
export function defineEffectBlock(base) {
|
|
4
|
+
const built = defineBlock(routed(base));
|
|
5
|
+
markRouteOf(built, base);
|
|
6
|
+
Object.defineProperty(built, "__waygraphMemKind", {
|
|
7
|
+
value: "effect",
|
|
8
|
+
enumerable: false,
|
|
9
|
+
configurable: false,
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(built, "__waygraphSalt", {
|
|
12
|
+
value: "effect",
|
|
13
|
+
enumerable: false,
|
|
14
|
+
configurable: false,
|
|
15
|
+
});
|
|
16
|
+
return built;
|
|
17
|
+
}
|