waygraph 0.15.53 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +13 -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/{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/{commands → cli/commands}/run.d.ts +0 -1
- package/dist/cli/commands/run.js +64 -0
- package/dist/{commands → cli/commands}/session.js +61 -88
- 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 +7 -11
- package/dist/{highlights → demo/narration}/demo-pace.js +9 -11
- package/dist/{highlights → demo/narration}/device.d.ts +4 -2
- package/dist/{highlights → demo/narration}/device.js +3 -1
- package/dist/demo/narration/merge.d.ts +8 -0
- package/dist/demo/narration/merge.js +71 -0
- package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
- 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 +3 -3
- 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/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +7 -0
- package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +5 -0
- package/dist/demo/overlay/cursor.d.ts +12 -0
- package/dist/demo/overlay/cursor.js +142 -0
- package/dist/demo/overlay/device-stage.d.ts +13 -0
- package/dist/demo/overlay/device-stage.js +396 -0
- package/dist/demo/overlay/inpage/banner.d.ts +1 -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 +1 -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 +9 -0
- package/dist/demo/overlay/inpage/network.js +200 -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 +1 -0
- package/dist/demo/overlay/inpage/todos.js +294 -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 +23 -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 +33 -0
- package/dist/demo/overlay/rings.js +448 -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 +113 -0
- package/dist/demo/stepper/banner-log.d.ts +37 -0
- package/dist/demo/stepper/banner-log.js +63 -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 +31 -0
- package/dist/demo/stepper/demo-log.js +309 -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 +3 -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/slides.d.ts +11 -0
- package/dist/demo/stepper/slides.js +233 -0
- package/dist/demo/stepper/step-panels.d.ts +21 -0
- package/dist/demo/stepper/step-panels.js +589 -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 +48 -0
- package/dist/demo/stepper/teardown.js +179 -0
- package/dist/demo/stepper/todo-advance.d.ts +14 -0
- package/dist/demo/stepper/todo-advance.js +110 -0
- package/dist/demo/stepper/view.d.ts +68 -0
- package/dist/demo/stepper/view.js +31 -0
- package/dist/demo/types.d.ts +17 -0
- package/dist/demo/verbose-log.js +15 -0
- package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
- package/dist/{core → engine/block}/block.js +10 -53
- package/dist/{core → engine/block}/compose.d.ts +10 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- package/dist/{core/blocks → engine/block/kinds}/api.d.ts +17 -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 +19 -29
- package/dist/{core/blocks → engine/block/kinds}/method.js +7 -21
- package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +22 -31
- package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
- package/dist/{core/blocks → engine/block/kinds}/page.d.ts +15 -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} +23 -22
- package/dist/{errors.js → engine/errors.js} +22 -22
- package/dist/{core → engine/flow}/branch-regression.d.ts +8 -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/{core → engine/flow}/map-builder.d.ts +42 -40
- package/dist/{core → engine/flow}/map-builder.js +46 -48
- 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} +9 -11
- package/dist/{core/run-graph.js → engine/run/run.js} +22 -11
- 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/index.d.ts +84 -36
- package/dist/index.js +44 -19
- package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
- package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -248
- 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/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
- package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
- package/dist/{auto-session → live/auto-session}/helpers.d.ts +16 -5
- package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
- package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
- package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
- 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 +4 -3
- package/dist/{session → live/pilot}/pilot.js +4 -4
- package/dist/{traverse → live/traverse}/coverage.d.ts +4 -0
- package/dist/{traverse → live/traverse}/coverage.js +3 -0
- package/dist/{traverse → live/traverse}/lease.d.ts +1 -0
- package/dist/{traverse → live/traverse}/lease.js +1 -0
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +4 -1
- package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
- 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/{blocks-select.d.ts → manifest/select.d.ts} +3 -0
- package/dist/{blocks-select.js → manifest/select.js} +2 -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} +2 -5
- package/dist/{extensions.js → runtime/extensions.js} +3 -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} +8 -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 +2 -3
- 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/README.md +11 -12
- package/examples/saucedemo/config/waygraph.config.ts +17 -0
- package/examples/saucedemo/docs/CONVENTION.md +5 -7
- package/examples/saucedemo/docs/HELPERS.md +12 -12
- package/examples/saucedemo/package-lock.json +10 -3
- package/examples/saucedemo/package.json +12 -29
- 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 -52
- 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 +21 -27
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
- 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 +10 -76
- 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 -29
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
- 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 +26 -18
- package/examples/saucedemo/src/flows/cart-bulk.flow.ts +19 -14
- package/examples/saucedemo/src/flows/cart-continue.flow.ts +10 -8
- package/examples/saucedemo/src/flows/cart-mem.flow.ts +7 -7
- package/examples/saucedemo/src/flows/catalog-logout.flow.ts +13 -8
- package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +26 -48
- package/examples/saucedemo/src/flows/checkout.flow.ts +70 -86
- package/examples/saucedemo/src/flows/device-showcase.flow.ts +24 -25
- package/examples/saucedemo/src/flows/login.flow.ts +11 -18
- package/examples/saucedemo/src/flows/mem-stub-demo.flow.ts +9 -20
- package/examples/saucedemo/src/flows/shop.flow.ts +15 -20
- package/examples/saucedemo/src/flows/smoke.flow.ts +12 -27
- package/examples/saucedemo/src/flows/stub-on-error.flow.ts +24 -43
- package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +26 -34
- package/examples/saucedemo/src/states/checkout.mem-stubs.ts +11 -0
- package/examples/saucedemo/src/states/checkout.states.ts +21 -11
- package/examples/saucedemo/src/stubs/device-showcase.ts +191 -0
- package/examples/saucedemo/src/stubs/login.ts +37 -0
- package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
- package/examples/saucedemo/tests/chain-flow-episodes.spec.ts +7 -9
- package/examples/saucedemo/tests/submit-login-branch.spec.ts +18 -5
- package/package.json +12 -7
- package/templates/agents/waygraph-planner.agent.md +2 -2
- package/templates/quickstart/README.md +4 -7
- package/templates/quickstart/config/waygraph.config.ts +17 -0
- package/templates/quickstart/docs/CONVENTION.md +5 -6
- package/templates/quickstart/docs/HELPERS.md +11 -9
- package/templates/quickstart/package.json +14 -17
- package/templates/quickstart/src/blocks/SITE-MAP.md +13 -3
- package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
- 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 +21 -27
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
- 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 +10 -76
- 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 -29
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
- 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 +45 -0
- package/templates/quickstart/src/flows/cart-bulk.flow.ts +19 -14
- package/templates/quickstart/src/flows/cart-continue.flow.ts +10 -8
- package/templates/quickstart/src/flows/cart-mem.flow.ts +7 -7
- package/templates/quickstart/src/flows/catalog-logout.flow.ts +13 -8
- package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +26 -48
- package/templates/quickstart/src/flows/checkout.flow.ts +70 -63
- package/templates/quickstart/src/flows/device-showcase.flow.ts +24 -25
- package/templates/quickstart/src/flows/login.flow.ts +11 -18
- package/templates/quickstart/src/flows/mem-stub-demo.flow.ts +12 -0
- package/templates/quickstart/src/flows/shop.flow.ts +15 -20
- package/templates/quickstart/src/flows/smoke.flow.ts +12 -27
- package/templates/quickstart/src/flows/stub-on-error.flow.ts +31 -0
- package/templates/quickstart/src/flows/viewer-blocked.flow.ts +26 -34
- package/templates/quickstart/src/states/checkout.mem-stubs.ts +11 -0
- package/templates/quickstart/src/states/checkout.states.ts +21 -11
- package/templates/quickstart/src/stubs/device-showcase.ts +191 -0
- package/templates/quickstart/src/stubs/login.ts +37 -0
- package/templates/quickstart/tests/chain-flow.spec.ts +7 -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/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/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 -293
- package/dist/core/flow.js +0 -432
- 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/stub-ctx.d.ts +0 -10
- package/dist/highlights/stub-ctx.js +0 -331
- package/dist/highlights/types.d.ts +0 -607
- 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/step-overlay.d.ts +0 -37
- package/dist/session/step-overlay.js +0 -244
- package/examples/routed-demo/playwright.config.ts +0 -21
- package/examples/saucedemo/playwright.config.ts +0 -19
- package/examples/saucedemo/scripts/drive-auto-cli.mjs +0 -93
- package/examples/saucedemo/scripts/prove-add-to-cart-menu.mjs +0 -126
- package/examples/saucedemo/scripts/prove-auto-graph.mjs +0 -92
- package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +0 -63
- package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- package/templates/quickstart/playwright.config.ts +0 -14
- package/templates/quickstart/scripts/drive-auto-cli.mjs +0 -93
- 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/{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/{trait.js → engine/trait/trait.js} +0 -0
- /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +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,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock,
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock, Trait } from "waygraph";
|
|
2
|
+
import { Dashboard } from "../../../../states/routed-demo.states.js";
|
|
3
3
|
import { DashboardSel } from "../_sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -10,14 +10,15 @@ import { DashboardSel } from "../_sel.js";
|
|
|
10
10
|
* folder's own actions live under methods/, same as today's freeform
|
|
11
11
|
* convention's own methods/ subfolder.
|
|
12
12
|
*/
|
|
13
|
-
export const ClickWidgetBlock = defineMethodBlock
|
|
13
|
+
export const ClickWidgetBlock = defineMethodBlock({
|
|
14
14
|
name: "click-widget",
|
|
15
15
|
description: "Clicks the dashboard's demo widget button.",
|
|
16
|
+
from: Dashboard,
|
|
17
|
+
to: Dashboard,
|
|
16
18
|
instruction: {
|
|
17
19
|
async act(page) {
|
|
18
20
|
await page.locator(DashboardSel.widgetBtn).click();
|
|
19
21
|
},
|
|
20
|
-
resolve: () => checkpoint("Dashboard"),
|
|
21
22
|
verify: [Trait.text(DashboardSel.widgetOut, "clicked")],
|
|
22
23
|
},
|
|
23
24
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { Dashboard } from "../../../states/routed-demo.states.js";
|
|
3
3
|
import { DashboardSel, DASHBOARD_URL } from "./_sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,10 +9,10 @@ import { DashboardSel, DASHBOARD_URL } from "./_sel.js";
|
|
|
9
9
|
* Fixed file name under the Waygraph Map convention - every page-slug
|
|
10
10
|
* folder's own navigation Block is always nav.block.ts.
|
|
11
11
|
*/
|
|
12
|
-
export const NavDashboardBlock = defineNavBlock
|
|
12
|
+
export const NavDashboardBlock = defineNavBlock({
|
|
13
13
|
name: "nav-dashboard",
|
|
14
14
|
description: "Opens the dashboard page.",
|
|
15
|
-
checkpoint:
|
|
15
|
+
checkpoint: Dashboard,
|
|
16
16
|
url: DASHBOARD_URL,
|
|
17
17
|
verify: [Trait.visible(DashboardSel.heading)],
|
|
18
18
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePageBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { Dashboard } from "../../../states/routed-demo.states.js";
|
|
3
3
|
import { DashboardSel } from "./_sel.js";
|
|
4
4
|
import { ClickWidgetBlock } from "./_methods/click-widget.block.js";
|
|
5
5
|
|
|
@@ -11,10 +11,10 @@ import { ClickWidgetBlock } from "./_methods/click-widget.block.js";
|
|
|
11
11
|
* folder's own arrival hub is always page.block.ts. Arrival-only
|
|
12
12
|
* (nav.block.ts already landed on Dashboard).
|
|
13
13
|
*/
|
|
14
|
-
export const DashboardPageBlock = definePageBlock
|
|
14
|
+
export const DashboardPageBlock = definePageBlock({
|
|
15
15
|
name: "page-dashboard",
|
|
16
16
|
description: "Dashboard hub - the routed-demo example's (app_base) group.",
|
|
17
|
-
checkpoint:
|
|
17
|
+
checkpoint: Dashboard,
|
|
18
18
|
verify: [Trait.visible(DashboardSel.heading)],
|
|
19
19
|
methods: {
|
|
20
20
|
clickWidget: () => ClickWidgetBlock,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { Docs } from "../../../states/routed-demo.states.js";
|
|
3
3
|
import { DocsSel, DOCS_URL } from "./_sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -12,10 +12,10 @@ import { DocsSel, DOCS_URL } from "./_sel.js";
|
|
|
12
12
|
* already-established `*-external/` namespacing precedent from
|
|
13
13
|
* waygraph-mail-adapters.
|
|
14
14
|
*/
|
|
15
|
-
export const NavDocsBlock = defineNavBlock
|
|
15
|
+
export const NavDocsBlock = defineNavBlock({
|
|
16
16
|
name: "nav-docs",
|
|
17
17
|
description: "Opens the docs page.",
|
|
18
|
-
checkpoint:
|
|
18
|
+
checkpoint: Docs,
|
|
19
19
|
url: DOCS_URL,
|
|
20
20
|
verify: [Trait.visible(DocsSel.heading)],
|
|
21
21
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePageBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { Docs } from "../../../states/routed-demo.states.js";
|
|
3
3
|
import { DocsSel } from "./_sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -7,9 +7,9 @@ import { DocsSel } from "./_sel.js";
|
|
|
7
7
|
* Route: (external)/docs/
|
|
8
8
|
* Arrival-only (nav.block.ts already landed on Docs).
|
|
9
9
|
*/
|
|
10
|
-
export const DocsPageBlock = definePageBlock
|
|
10
|
+
export const DocsPageBlock = definePageBlock({
|
|
11
11
|
name: "page-docs",
|
|
12
12
|
description: "Docs hub - the routed-demo example's (external) group.",
|
|
13
|
-
checkpoint:
|
|
13
|
+
checkpoint: Docs,
|
|
14
14
|
verify: [Trait.visible(DocsSel.heading)],
|
|
15
15
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { checkpoint } from "waygraph";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Checkpoint names match their own folder's page-slug (PascalCase) under the
|
|
@@ -6,5 +6,7 @@ import type { Checkpoint } from "waygraph";
|
|
|
6
6
|
* See openspec/changes/waygraph-map for why this is a naming convention, not
|
|
7
7
|
* something any tool enforces.
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
10
|
-
export type
|
|
9
|
+
export const Dashboard = checkpoint("Dashboard");
|
|
10
|
+
export type Dashboard = typeof Dashboard;
|
|
11
|
+
export const Docs = checkpoint("Docs");
|
|
12
|
+
export type Docs = typeof Docs;
|
|
@@ -41,10 +41,10 @@ test("a real detached session navigates the convention-organized site for real,
|
|
|
41
41
|
test.setTimeout(30_000);
|
|
42
42
|
const { stdout } = await exec(node, [
|
|
43
43
|
CLI,
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"--
|
|
47
|
-
"--
|
|
44
|
+
"browser",
|
|
45
|
+
"start",
|
|
46
|
+
"--headless",
|
|
47
|
+
"--goto",
|
|
48
48
|
process.env.WAYGRAPH_BASE_URL || "http://127.0.0.1:4277",
|
|
49
49
|
root,
|
|
50
50
|
]).then((r) => r);
|
|
@@ -7,7 +7,6 @@ the **reference** for waygraph consumer conventions:
|
|
|
7
7
|
- **Nav** / **Effect** / **Action** file kinds (helpers are TypeScript salt;
|
|
8
8
|
runtime is still `Block`)
|
|
9
9
|
- `instanceOptions` menus for `waygraph auto` (Add/Remove + Open details)
|
|
10
|
-
- Detailed Kind / Helper / Route comments on every Block file
|
|
11
10
|
- Per-route `NAV.md` + root `src/blocks/SITE-MAP.md`
|
|
12
11
|
- Inline `{ ff: true }` fast-forward, no `.ffStart()/.ffEnd()` bracket - see
|
|
13
12
|
`checkoutFlow` (`src/flows/checkout.flow.ts`)
|
|
@@ -44,30 +43,30 @@ npx playwright install chromium
|
|
|
44
43
|
| Graph crawl (Phase B-E) | `npm run traverse` |
|
|
45
44
|
| Parallel crawl + leases | `npm run traverse:parallel` |
|
|
46
45
|
| Coverage JSON + min gate (10%) | `npm run traverse:coverage` |
|
|
47
|
-
| Shop demo
|
|
46
|
+
| Shop demo (login, then shop) | `npm run demo` |
|
|
48
47
|
| Shop demo autoplay | `npm run demo:auto-next` |
|
|
49
|
-
| **Device showcase** (mobile/tablet + portrait/landscape) | `npm run demo:device` |
|
|
50
|
-
| Device showcase + `.webm` | `npm run demo:
|
|
48
|
+
| **Device showcase** (mobile/tablet + portrait/landscape; narration in `src/stubs/device-showcase.ts`) | `npm run demo:device` |
|
|
49
|
+
| Device showcase + `.webm` | `npm run demo:video` |
|
|
51
50
|
| **Cart bulk** demo (add-all → remove-all) | `npm run demo:bulk` |
|
|
52
|
-
| Cart bulk autoplay | `npm run demo:bulk:auto-next` |
|
|
53
51
|
| **Owner checkout** (inline `{ ff: true }`, `ctx.caption()`, banner position) | `npm run demo:checkout` |
|
|
54
|
-
| Owner checkout + `.webm` | `npm run demo:checkout:video` |
|
|
55
52
|
| **FE + BE in one Flow** (`defineApiBlock`, live network panel) | `npm run demo:api` |
|
|
56
|
-
|
|
|
53
|
+
| Record (headless `.webm`) | `npm run record` |
|
|
57
54
|
| List flows | `npm run flows` |
|
|
58
55
|
|
|
56
|
+
Credentials and the selected item come from `registerMemStub` in `src/states/checkout.mem-stubs.ts` (`memStub: true` on the
|
|
57
|
+
flows), so no command needs `--data`. Settings, the base URL and the shared `engine` are in `config/waygraph.config.ts`.
|
|
58
|
+
Narration is chained on Blocks in the flows (`src/flows/`) or shared from `src/stubs/`; the Block files carry none.
|
|
59
|
+
|
|
59
60
|
**Demo vs auto vs run for cart bulk**
|
|
60
61
|
|
|
61
62
|
| | CLI | Needs `.flow.ts`? |
|
|
62
63
|
|--|-----|-------------------|
|
|
63
|
-
| **`run --blocks`** | `
|
|
64
|
-
| **`demo --blocks`** | `npm run demo:bulk` — named flow
|
|
64
|
+
| **`run --blocks`** | `waygraph run --blocks "loginFlow then add-all-to-cart"` | No |
|
|
65
|
+
| **`demo --blocks`** | `npm run demo:bulk` — named flow | Optional (`cartBulkFlow`) |
|
|
65
66
|
| **`auto`** | `npm run auto` / `auto:cli` | No — live menu |
|
|
66
|
-
| **`traverse`** | `npm run traverse`
|
|
67
|
+
| **`traverse`** | `npm run traverse` | No — graph crawl + `.waygraph-traverse/coverage.json` |
|
|
67
68
|
| **`auto --blocks From To`** | path-find on graph | No — checkpoints only |
|
|
68
69
|
|
|
69
|
-
QA watch+record: `npm run demo:bulk:video` (`--auto-play-video`).
|
|
70
|
-
|
|
71
70
|
## Layout (short)
|
|
72
71
|
|
|
73
72
|
```text
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Engine, defineConfig } from "waygraph";
|
|
2
|
+
|
|
3
|
+
const config = defineConfig({
|
|
4
|
+
baseUrl: "https://www.saucedemo.com",
|
|
5
|
+
playwright: {
|
|
6
|
+
workers: 1,
|
|
7
|
+
fullyParallel: false,
|
|
8
|
+
timeout: 30_000,
|
|
9
|
+
use: {
|
|
10
|
+
headless: true,
|
|
11
|
+
launchOptions: { args: ["--no-sandbox", "--disable-dev-shm-usage"] },
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export default config;
|
|
17
|
+
export const engine = new Engine(config);
|
|
@@ -48,7 +48,6 @@ src/blocks/
|
|
|
48
48
|
saucedemo-web/ # THIS FOLDER IS URL "/"
|
|
49
49
|
NAV.md
|
|
50
50
|
nav-login.block.ts # Page hub
|
|
51
|
-
ff-owner-auth.block.ts # FFCompose wrapping the 4 Blocks below
|
|
52
51
|
methods/
|
|
53
52
|
fill-username.method.block.ts # self-loop, fills only
|
|
54
53
|
fill-password.method.block.ts # self-loop, fills only
|
|
@@ -98,13 +97,12 @@ edges (including cycles via logout / continue-shopping / back-to-products).
|
|
|
98
97
|
Prefer flags (or npm scripts) over a pile of `WAYGRAPH_*` env vars:
|
|
99
98
|
|
|
100
99
|
```bash
|
|
101
|
-
npm run demo # waygraph demo shopFlow
|
|
102
|
-
npm run demo:
|
|
100
|
+
npm run demo # waygraph demo --blocks "loginFlow then shopFlow" (headed; baseUrl from config/waygraph.config.ts)
|
|
101
|
+
npm run demo:auto-next # the same, advancing on its own
|
|
103
102
|
waygraph demo shopFlow --base-url https://www.saucedemo.com --title "Shop"
|
|
104
|
-
waygraph
|
|
103
|
+
waygraph demo loginFlow --no-auto-next
|
|
105
104
|
```
|
|
106
105
|
|
|
107
|
-
Flags beat env: `--
|
|
106
|
+
Flags beat env: `--auto-next` / `--no-auto-next`,
|
|
108
107
|
`--base-url <url>`, `--title <text>`. Default BASE_URL resolution order for
|
|
109
|
-
`demo`: `--base-url` > `WAYGRAPH_BASE_URL` > `
|
|
110
|
-
> `playwright.config` `baseURL`.
|
|
108
|
+
`demo`: `--base-url` > `WAYGRAPH_BASE_URL` > `baseUrl` in `config/waygraph.config.ts`.
|
|
@@ -12,19 +12,16 @@ Runtime is always a `Block`. Helpers are TypeScript salt + clear intent.
|
|
|
12
12
|
| `defineAssertBlock` | Self-loop assertion, no state change - `verify` only | `*.method.block.ts` under `methods/` |
|
|
13
13
|
| `defineEffectBlock` | Instance mutate + auto menu rows | `*.effect.block.ts` under `methods/` |
|
|
14
14
|
| `defineBlock` | Escape hatch: tests, unsure, probes | any |
|
|
15
|
-
| `defineActionBlock` | **Deprecated** alias of `defineMethodBlock` | - |
|
|
16
15
|
|
|
17
|
-
`defineNavBlock({ click })`
|
|
16
|
+
`defineNavBlock({ click })` and `defineNavClickBlock` build the same Block; app code reads better with `defineNavClickBlock`.
|
|
18
17
|
|
|
19
18
|
**One distinct action per Block.** A Method that fills fields *and* submits is wrong even if
|
|
20
19
|
it "works" - split it (`fill-username` + `fill-password` + `submit-login`, not one Block).
|
|
21
20
|
`defineAssertBlock({ name, checkpoint, verify, waitForHeading?, requires? })` is the
|
|
22
21
|
self-loop-only shape for "assert something on the current page, no state change" - no
|
|
23
22
|
hand-written `act`/`resolve` to accidentally make do two things. `waygraph check` warns when
|
|
24
|
-
a `verify` array inlines a literal selector string instead of a `*Sel` reference.
|
|
25
|
-
|
|
26
|
-
Block before `end` - otherwise `Out` defaults to wildcard `Checkpoint<string>`, which breaks
|
|
27
|
-
`defineFlow`'s tuple typing mid-chain.
|
|
23
|
+
a `verify` array inlines a literal selector string instead of a `*Sel` reference. Its `checkpoint` is a Checkpoint
|
|
24
|
+
value, which types it on both sides, so it sits anywhere in a `map()` chain.
|
|
28
25
|
|
|
29
26
|
---
|
|
30
27
|
|
|
@@ -41,7 +38,7 @@ export const InventorySel = {
|
|
|
41
38
|
|
|
42
39
|
export const InventoryPageBlock = definePageBlock({
|
|
43
40
|
name: "page-inventory",
|
|
44
|
-
checkpoint:
|
|
41
|
+
checkpoint: LoggedIn,
|
|
45
42
|
verify: [Trait.url({ pathname: "/inventory.html" }), Trait.visible(InventorySel.list)],
|
|
46
43
|
methods: {
|
|
47
44
|
addToCart: () => AddToCartBlock,
|
|
@@ -84,8 +81,10 @@ Checkpoint = place on the map. `branch()` = which road to take from that place.
|
|
|
84
81
|
Conditional Out (no `branch()` needed for auto/graph):
|
|
85
82
|
|
|
86
83
|
```ts
|
|
87
|
-
defineMethodBlock
|
|
84
|
+
defineMethodBlock({
|
|
88
85
|
name: "submit-login",
|
|
86
|
+
from: LoginPage,
|
|
87
|
+
to: [LoggedIn, LoginPage],
|
|
89
88
|
instruction: {
|
|
90
89
|
async act(page) { /* click only - fields were filled by earlier Blocks */ },
|
|
91
90
|
async observe(page) {
|
|
@@ -110,7 +109,7 @@ branch(SubmitLoginBlock, {
|
|
|
110
109
|
});
|
|
111
110
|
```
|
|
112
111
|
|
|
113
|
-
|
|
112
|
+
A linear `map()` chain usually skips `branch()` (one happy path).
|
|
114
113
|
|
|
115
114
|
---
|
|
116
115
|
|
|
@@ -123,8 +122,9 @@ then run the Block (act reads mem as usual).
|
|
|
123
122
|
### Effect - spawn Method-like rows (Add / Remove)
|
|
124
123
|
|
|
125
124
|
```ts
|
|
126
|
-
defineEffectBlock
|
|
125
|
+
defineEffectBlock({
|
|
127
126
|
name: "add-to-cart",
|
|
127
|
+
to: ItemInCart, // no `from`: runs from anywhere
|
|
128
128
|
requires: [SelectedItem.key],
|
|
129
129
|
instruction: {
|
|
130
130
|
async act(page, _in, mem) {
|
|
@@ -151,9 +151,9 @@ Auto shows: `Add "Sauce Labs Backpack" to cart`, `Add "Bike Light"…`, …
|
|
|
151
151
|
### MemNav - spawn Nav rows (Open details)
|
|
152
152
|
|
|
153
153
|
```ts
|
|
154
|
-
defineMemNavBlock
|
|
154
|
+
defineMemNavBlock({
|
|
155
155
|
name: "nav-item-detail",
|
|
156
|
-
checkpoint:
|
|
156
|
+
checkpoint: ItemDetailPage,
|
|
157
157
|
requires: [SelectedItem.key],
|
|
158
158
|
click: (mem) => InventorySel.title(mem.get(SelectedItem.key).id),
|
|
159
159
|
verify: [Trait.url({ pathname: "/inventory-item.html" })],
|
|
@@ -16,10 +16,12 @@
|
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"../..": {
|
|
19
|
-
"version": "0.15.
|
|
19
|
+
"version": "0.15.53",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"
|
|
22
|
+
"open-props": "^1.7.23",
|
|
23
|
+
"tsx": "^4.0.0",
|
|
24
|
+
"urlpattern-polyfill": "^10.1.0"
|
|
23
25
|
},
|
|
24
26
|
"bin": {
|
|
25
27
|
"waygraph": "bin/waygraph"
|
|
@@ -27,7 +29,12 @@
|
|
|
27
29
|
"devDependencies": {
|
|
28
30
|
"@playwright/test": "^1.63.0",
|
|
29
31
|
"@types/node": "^26.0.0",
|
|
30
|
-
"
|
|
32
|
+
"knip": "^6.42.1",
|
|
33
|
+
"typedoc": "^0.28.20",
|
|
34
|
+
"typedoc-plugin-markdown": "^4.14.1",
|
|
35
|
+
"typedoc-vitepress-theme": "^1.1.4",
|
|
36
|
+
"typescript": "^5.6.0",
|
|
37
|
+
"vitepress": "^1.6.4"
|
|
31
38
|
},
|
|
32
39
|
"peerDependencies": {
|
|
33
40
|
"@playwright/test": "^1.40.0"
|
|
@@ -9,37 +9,20 @@
|
|
|
9
9
|
"test": "waygraph test",
|
|
10
10
|
"test:ui": "waygraph test ui",
|
|
11
11
|
"flows": "waygraph list",
|
|
12
|
-
"
|
|
13
|
-
"demo:step": "waygraph demo --blocks \"loginFlow then shopFlow\" --title \"Shop demo\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"},\\\"saucedemo.selectedItem\\\":{\\\"id\\\":\\\"sauce-labs-backpack\\\",\\\"name\\\":\\\"Sauce Labs Backpack\\\"}}\"",
|
|
14
|
-
"demo:auto-next": "waygraph demo --blocks \"loginFlow then shopFlow\" --auto-next --title \"Product then cart\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"},\\\"saucedemo.selectedItem\\\":{\\\"id\\\":\\\"sauce-labs-backpack\\\",\\\"name\\\":\\\"Sauce Labs Backpack\\\"}}\"",
|
|
15
|
-
"auto": "waygraph auto",
|
|
16
|
-
"auto:cli": "waygraph auto --cli --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\"",
|
|
17
|
-
"prove:auto-cli": "node scripts/drive-auto-cli.mjs",
|
|
18
|
-
"traverse": "waygraph traverse --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\" --max-steps 40",
|
|
19
|
-
"traverse:parallel": "waygraph traverse --parallel 2 --session clone --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\" --max-steps 30",
|
|
20
|
-
"traverse:coverage": "waygraph traverse --min-edge-coverage 10% --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\" --max-steps 40",
|
|
12
|
+
"check": "waygraph check",
|
|
21
13
|
"graph": "waygraph graph",
|
|
22
14
|
"graph:mermaid": "waygraph graph --mermaid",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"demo:
|
|
30
|
-
"demo:
|
|
31
|
-
"demo:
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"demo:checkout": "waygraph demo --blocks checkoutFlow --auto-next --title \"Owner: Full Checkout\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"},\\\"saucedemo.selectedItem\\\":{\\\"id\\\":\\\"sauce-labs-backpack\\\",\\\"name\\\":\\\"Sauce Labs Backpack\\\"}}\"",
|
|
35
|
-
"demo:checkout:video": "waygraph demo --blocks checkoutFlow --auto-play-video --title \"Owner: Full Checkout\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"},\\\"saucedemo.selectedItem\\\":{\\\"id\\\":\\\"sauce-labs-backpack\\\",\\\"name\\\":\\\"Sauce Labs Backpack\\\"}}\"",
|
|
36
|
-
"demo:api": "waygraph demo --blocks apiDemoFlow --auto-next --title \"FE + BE in one Flow\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\"",
|
|
37
|
-
"demo:api:video": "waygraph demo --blocks apiDemoFlow --auto-play-video --title \"FE + BE in one Flow\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\"",
|
|
38
|
-
"run:bulk": "waygraph run --blocks \"loginFlow then add-all-to-cart then remove-all-from-cart\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\"",
|
|
39
|
-
"chain:bulk": "waygraph run --blocks \"loginFlow then add-all-to-cart then remove-all-from-cart\" --data \"{\\\"saucedemo.credentials\\\":{\\\"username\\\":\\\"standard_user\\\",\\\"password\\\":\\\"secret_sauce\\\"}}\" --non-headless"
|
|
40
|
-
},
|
|
41
|
-
"waygraph": {
|
|
42
|
-
"baseUrl": "https://www.saucedemo.com"
|
|
15
|
+
"auto": "waygraph auto",
|
|
16
|
+
"auto:cli": "waygraph auto --cli",
|
|
17
|
+
"demo": "waygraph demo --blocks \"loginFlow then shopFlow\"",
|
|
18
|
+
"demo:auto-next": "waygraph demo --blocks \"loginFlow then shopFlow\" --auto-next",
|
|
19
|
+
"demo:checkout": "waygraph demo --blocks checkoutFlow --auto-next",
|
|
20
|
+
"demo:device": "waygraph demo --blocks deviceShowcaseFlow --auto-next",
|
|
21
|
+
"demo:bulk": "waygraph demo --blocks cartBulkFlow --auto-next",
|
|
22
|
+
"demo:api": "waygraph demo --blocks apiDemoFlow --auto-next",
|
|
23
|
+
"demo:video": "waygraph demo --blocks deviceShowcaseFlow --auto-play-video",
|
|
24
|
+
"record": "waygraph run --blocks \"loginFlow then shopFlow\" --video --no-step",
|
|
25
|
+
"traverse": "waygraph traverse --max-steps 40"
|
|
43
26
|
},
|
|
44
27
|
"dependencies": {
|
|
45
28
|
"waygraph": "file:../.."
|
|
@@ -9,7 +9,6 @@ src/blocks/
|
|
|
9
9
|
saucedemo-web/ # URL /
|
|
10
10
|
NAV.md
|
|
11
11
|
nav-login.block.ts # Page definePageBlock url:/
|
|
12
|
-
ff-owner-auth.block.ts # FFCompose (nav-login + fill-username + fill-password + submit-login)
|
|
13
12
|
methods/
|
|
14
13
|
fill-username.method.block.ts # Method defineMethodBlock (self-loop on LoginPage)
|
|
15
14
|
fill-password.method.block.ts # Method defineMethodBlock (self-loop on LoginPage)
|
|
@@ -27,11 +27,7 @@ Fill and submit are three separate Blocks (not one that fills both fields and
|
|
|
27
27
|
clicks Login) so the graph/demo show each as its own step - no Block does
|
|
28
28
|
more than one distinct action.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
| File | Kind | Notes |
|
|
33
|
-
|------|------|-------|
|
|
34
|
-
| `ff-owner-auth.block.ts` | FFCompose | Collapses nav-login + fill-username + fill-password + submit-login into one opaque demo/run step (`--ff-expand` shows all 4 again) |
|
|
30
|
+
A flow that wants to skip watching auth marks those steps `{ ff: true }` (see `src/flows/checkout.flow.ts`).
|
|
35
31
|
|
|
36
32
|
## Related mem keys / checkpoints
|
|
37
33
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { defineNavClickBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
3
|
-
import type { CartPage } from "../../../states/checkout.states.js";
|
|
4
|
-
import { InventorySel } from "../inventory/methods/inventory-items.js";
|
|
2
|
+
import { CartPage } from "../../../states/checkout.states.js";
|
|
5
3
|
import { CartSel } from "./cart.sel.js";
|
|
6
4
|
|
|
7
5
|
/**
|
|
@@ -11,57 +9,10 @@ import { CartSel } from "./cart.sel.js";
|
|
|
11
9
|
*
|
|
12
10
|
* click, not url - header cart link from inventory-adjacent pages.
|
|
13
11
|
*/
|
|
14
|
-
export const NavCartBlock = defineNavClickBlock
|
|
12
|
+
export const NavCartBlock = defineNavClickBlock({
|
|
15
13
|
name: "nav-cart",
|
|
16
14
|
description: "Clicks the cart link in the header.",
|
|
17
|
-
checkpoint:
|
|
15
|
+
checkpoint: CartPage,
|
|
18
16
|
click: CartSel.cartLink,
|
|
19
17
|
verify: [Trait.url({ pathname: "/cart.html" })],
|
|
20
|
-
stubBefore: (ctx: StubCtx) => {
|
|
21
|
-
ctx.title("Open cart · landscape");
|
|
22
|
-
ctx.landscape();
|
|
23
|
-
ctx.todos(
|
|
24
|
-
"saucedemo",
|
|
25
|
-
[
|
|
26
|
-
{ id: "login-user", text: "Enter username", done: true },
|
|
27
|
-
{ id: "login-pass", text: "Enter password", done: true },
|
|
28
|
-
{ id: "login-submit", text: "Tap Login", done: true },
|
|
29
|
-
{ id: "cart-find", text: "Find the product", done: true },
|
|
30
|
-
{ id: "cart-add", text: "Add to cart", done: true },
|
|
31
|
-
{ id: "cart-open", text: "Open cart" },
|
|
32
|
-
],
|
|
33
|
-
{ title: "Device showcase", index: 5 },
|
|
34
|
-
);
|
|
35
|
-
ctx.zoom(1.4);
|
|
36
|
-
ctx.zoomOut(false);
|
|
37
|
-
ctx.highlights({
|
|
38
|
-
cart: {
|
|
39
|
-
selector: CartSel.cartLink,
|
|
40
|
-
label: "Cart",
|
|
41
|
-
detail: "tone: planned (purple) - open cart",
|
|
42
|
-
tone: "planned",
|
|
43
|
-
focus: true,
|
|
44
|
-
zoomOut: false,
|
|
45
|
-
followMouse: false,
|
|
46
|
-
weight: "bold",
|
|
47
|
-
gesture: "tap",
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
stubAfter: (ctx: StubCtx) => {
|
|
52
|
-
ctx.banner("Your cart · desktop");
|
|
53
|
-
ctx.clearDevice();
|
|
54
|
-
ctx.hideTodos();
|
|
55
|
-
ctx.zoomOut(true);
|
|
56
|
-
ctx.ring("items", {
|
|
57
|
-
selector: InventorySel.cartItem,
|
|
58
|
-
label: "Cart items",
|
|
59
|
-
detail: "tone: success (green) - product in cart",
|
|
60
|
-
tone: "success",
|
|
61
|
-
focus: true,
|
|
62
|
-
zoomOut: true,
|
|
63
|
-
followMouse: false,
|
|
64
|
-
duration: true,
|
|
65
|
-
});
|
|
66
|
-
},
|
|
67
18
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavClickBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { CheckoutInfoPage } from "../../../states/checkout.states.js";
|
|
3
3
|
import { CartSel } from "./cart.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,10 +9,10 @@ import { CartSel } from "./cart.sel.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Cart page "Checkout" button - owns the nav into step one.
|
|
11
11
|
*/
|
|
12
|
-
export const NavCheckoutInfoBlock = defineNavClickBlock
|
|
12
|
+
export const NavCheckoutInfoBlock = defineNavClickBlock({
|
|
13
13
|
name: "nav-checkout-info",
|
|
14
14
|
description: "Clicks 'Checkout' on the cart page.",
|
|
15
|
-
checkpoint:
|
|
15
|
+
checkpoint: CheckoutInfoPage,
|
|
16
16
|
click: CartSel.checkoutBtn,
|
|
17
17
|
verify: [Trait.url({ pathname: "/checkout-step-one.html" })],
|
|
18
18
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -10,13 +10,14 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
10
10
|
* Fills the first name field only - self-loop on CheckoutInfoPage. Continue
|
|
11
11
|
* is its own Block (submit-checkout-info.method.block.ts).
|
|
12
12
|
*/
|
|
13
|
-
export const FillFirstNameBlock = defineMethodBlock
|
|
13
|
+
export const FillFirstNameBlock = defineMethodBlock({
|
|
14
14
|
name: "fill-first-name",
|
|
15
15
|
description: "Fills the first name field on the shipping info form.",
|
|
16
|
+
from: CheckoutInfoPage,
|
|
17
|
+
to: CheckoutInfoPage,
|
|
16
18
|
instruction: {
|
|
17
19
|
async act(page) {
|
|
18
20
|
await page.locator(CheckoutInfoSel.firstName).fill("Ada");
|
|
19
21
|
},
|
|
20
|
-
resolve: () => checkpoint("CheckoutInfoPage"),
|
|
21
22
|
},
|
|
22
23
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,13 +9,14 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Fills the last name field only - self-loop on CheckoutInfoPage.
|
|
11
11
|
*/
|
|
12
|
-
export const FillLastNameBlock = defineMethodBlock
|
|
12
|
+
export const FillLastNameBlock = defineMethodBlock({
|
|
13
13
|
name: "fill-last-name",
|
|
14
14
|
description: "Fills the last name field on the shipping info form.",
|
|
15
|
+
from: CheckoutInfoPage,
|
|
16
|
+
to: CheckoutInfoPage,
|
|
15
17
|
instruction: {
|
|
16
18
|
async act(page) {
|
|
17
19
|
await page.locator(CheckoutInfoSel.lastName).fill("Lovelace");
|
|
18
20
|
},
|
|
19
|
-
resolve: () => checkpoint("CheckoutInfoPage"),
|
|
20
21
|
},
|
|
21
22
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,13 +9,14 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Fills the postal code field only - self-loop on CheckoutInfoPage.
|
|
11
11
|
*/
|
|
12
|
-
export const FillPostalCodeBlock = defineMethodBlock
|
|
12
|
+
export const FillPostalCodeBlock = defineMethodBlock({
|
|
13
13
|
name: "fill-postal-code",
|
|
14
14
|
description: "Fills the postal code field on the shipping info form.",
|
|
15
|
+
from: CheckoutInfoPage,
|
|
16
|
+
to: CheckoutInfoPage,
|
|
15
17
|
instruction: {
|
|
16
18
|
async act(page) {
|
|
17
19
|
await page.locator(CheckoutInfoSel.postalCode).fill("1000");
|
|
18
20
|
},
|
|
19
|
-
resolve: () => checkpoint("CheckoutInfoPage"),
|
|
20
21
|
},
|
|
21
22
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock,
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock, Trait } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage, CheckoutOverviewPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -11,14 +11,15 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
11
11
|
* fill-last-name / fill-postal-code (each its own Block). One Block, one
|
|
12
12
|
* action: submit.
|
|
13
13
|
*/
|
|
14
|
-
export const SubmitCheckoutInfoBlock = defineMethodBlock
|
|
14
|
+
export const SubmitCheckoutInfoBlock = defineMethodBlock({
|
|
15
15
|
name: "submit-checkout-info",
|
|
16
16
|
description: "Continues from the shipping info form to the order overview.",
|
|
17
|
+
from: CheckoutInfoPage,
|
|
18
|
+
to: CheckoutOverviewPage,
|
|
17
19
|
instruction: {
|
|
18
20
|
async act(page) {
|
|
19
21
|
await page.locator(CheckoutInfoSel.continueBtn).click();
|
|
20
22
|
},
|
|
21
|
-
resolve: () => checkpoint("CheckoutOverviewPage"),
|
|
22
23
|
verify: [Trait.url({ pathname: "/checkout-step-two.html" })],
|
|
23
24
|
},
|
|
24
25
|
});
|