waygraph 0.15.54 → 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 +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/{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 +3 -11
- package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
- package/dist/{highlights → demo/narration}/device.d.ts +2 -2
- package/dist/{highlights → demo/narration}/device.js +1 -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/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 +9 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- 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/{core → engine/flow}/map-builder.d.ts +34 -39
- package/dist/{core → engine/flow}/map-builder.js +45 -47
- 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/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 -254
- 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 +6 -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 +3 -3
- package/dist/{session → live/pilot}/pilot.js +4 -4
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -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/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 +10 -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/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 -294
- 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 -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/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/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/{trait.js → engine/trait/trait.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
package/README.md
CHANGED
|
@@ -6,11 +6,12 @@ worked - so a whole app becomes something you (or an AI agent) can walk, check,
|
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
8
|
// One Block = one action. It says: start on LoginPage, end on LoggedIn, and prove it.
|
|
9
|
-
export const SubmitLoginBlock = defineMethodBlock
|
|
9
|
+
export const SubmitLoginBlock = defineMethodBlock({
|
|
10
10
|
name: "submit-login",
|
|
11
|
+
from: LoginPage,
|
|
12
|
+
to: LoggedIn,
|
|
11
13
|
instruction: {
|
|
12
14
|
async act(page) { await page.locator(LoginSel.button).click(); },
|
|
13
|
-
resolve: () => checkpoint("LoggedIn"),
|
|
14
15
|
verify: [Trait.url({ pathname: "/inventory.html" })],
|
|
15
16
|
},
|
|
16
17
|
});
|
|
@@ -107,7 +108,8 @@ names) still works and is fine for small projects, but the Map is where the tool
|
|
|
107
108
|
## Learn more
|
|
108
109
|
|
|
109
110
|
- **[Docs site](https://deviate-dv8.github.io/waygraph/)** - guides and walkthroughs
|
|
110
|
-
- **[
|
|
111
|
+
- **[Reference](./docs/reference/index.md)** - every feature in detail, one topic per page
|
|
112
|
+
- **[Environment variables](./docs/env.md)** - every `WAYGRAPH_*` variable · **[Removed in 0.16.0](./docs/deprecated.md)** - each old form and what replaces it (`waygraph upgrade --codemod flows|checkpoints` converts a project)
|
|
111
113
|
- **[Sauce Demo walkthrough](https://deviate-dv8.github.io/waygraph/saucedemo/)** - a worked example
|
|
112
114
|
- Agent skills: `waygraph --skill` prints them (pilot, blind-pilot, convention)
|
|
113
115
|
|
|
@@ -119,4 +121,7 @@ npm install && npm run build
|
|
|
119
121
|
npm run typecheck && npm test # unit + Playwright suites
|
|
120
122
|
```
|
|
121
123
|
|
|
124
|
+
Working on waygraph: [`AGENTS.md`](./AGENTS.md) (the rules, how to verify) and
|
|
125
|
+
[`src/ARCHITECTURE.md`](./src/ARCHITECTURE.md) (where the code starts).
|
|
126
|
+
|
|
122
127
|
MIT
|
package/bin/waygraph
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - macOS BSD `readlink` has no `-f` (GNU) -> "illegal option -- f" / broken bin
|
|
7
7
|
* - Windows npm expects a Node shebang for `.cmd` shims
|
|
8
8
|
*
|
|
9
|
-
* Still registers `tsx/esm` before `dist/cli.js` so consumer `.block.ts` /
|
|
9
|
+
* Still registers `tsx/esm` before `dist/cli/cli.js` so consumer `.block.ts` /
|
|
10
10
|
* `.flow.ts` dynamic imports resolve the same as the old shell wrapper.
|
|
11
11
|
*/
|
|
12
12
|
import { spawn } from "node:child_process";
|
|
@@ -28,7 +28,7 @@ try {
|
|
|
28
28
|
process.exit(1);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
const cli = join(pkgRoot, "dist", "cli.js");
|
|
31
|
+
const cli = join(pkgRoot, "dist", "cli", "cli.js");
|
|
32
32
|
const child = spawn(
|
|
33
33
|
process.execPath,
|
|
34
34
|
["--import", tsxEsm, cli, ...process.argv.slice(2)],
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PracticeWarning } from "./practices-check.js";
|
|
2
|
+
import type { MapImportProblem } from "../manifest/map-imports.js";
|
|
3
|
+
export interface FlowInfo {
|
|
4
|
+
file: string;
|
|
5
|
+
name: string;
|
|
6
|
+
valid: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function validateFlows(projectDir: string): Promise<FlowInfo[]>;
|
|
10
|
+
export interface CheckWarning {
|
|
11
|
+
file: string;
|
|
12
|
+
blockName: string;
|
|
13
|
+
exportName: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SelWarning {
|
|
16
|
+
file: string;
|
|
17
|
+
blockName: string;
|
|
18
|
+
exportName: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Walks every `*.block.ts` file under `projectDir`, imports each to find its
|
|
22
|
+
* exported Blocks, and for any Block NOT built via `defineNavBlock`, scans
|
|
23
|
+
* that file's own source text for a navigation call. Warning only - never
|
|
24
|
+
* throws, never changes the caller's exit code on its own account (a Block
|
|
25
|
+
* file that fails to import for unrelated reasons is silently skipped here;
|
|
26
|
+
* `validate` is the command that reports import failures).
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkProject(projectDir: string, opts?: {
|
|
29
|
+
noPractices?: boolean;
|
|
30
|
+
}): Promise<{
|
|
31
|
+
navWarnings: CheckWarning[];
|
|
32
|
+
selWarnings: SelWarning[];
|
|
33
|
+
practiceWarnings: PracticeWarning[];
|
|
34
|
+
}>;
|
|
35
|
+
/** Imports in each packable map group that reach outside it (see `manifest/maps.ts`). */
|
|
36
|
+
export declare function checkMapGroups(projectDir: string): (MapImportProblem & {
|
|
37
|
+
group: string;
|
|
38
|
+
})[];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// `waygraph validate` and `waygraph check`: does every Flow file load, and do Blocks keep navigation and selectors where
|
|
2
|
+
// they belong. Warnings only.
|
|
3
|
+
import { basename, relative } from "node:path";
|
|
4
|
+
import { importFresh, isBlockLike, walkDir } from "../manifest/scan.js";
|
|
5
|
+
import { calls, parseSource } from "../manifest/source.js";
|
|
6
|
+
import { collectPracticeWarnings } from "./practices-check.js";
|
|
7
|
+
import { mapGroups } from "../manifest/maps.js";
|
|
8
|
+
import { reportImportError } from "../manifest/project.js";
|
|
9
|
+
import { mapGroupImportProblems } from "../manifest/map-imports.js";
|
|
10
|
+
/** Anything runnable counts for `validate` (looser than the manifest, which also wants `.blocks()`). */
|
|
11
|
+
function isFlowLike(val) {
|
|
12
|
+
return val !== null && typeof val === "object" && typeof val.run === "function";
|
|
13
|
+
}
|
|
14
|
+
/** Set by `defineNavBlock` (non-enumerable) - see engine/block/kinds/nav.ts. */
|
|
15
|
+
function isNavBlockMarked(val) {
|
|
16
|
+
return val.__waygraphKind === "nav";
|
|
17
|
+
}
|
|
18
|
+
const NAV_METHODS = new Set(["page.goto", "page.reload", "page.goBack", "page.goForward"]);
|
|
19
|
+
/**
|
|
20
|
+
* Selector-taking Trait factories. Called with a string literal (`Trait.visible("#some-id")`) instead of a Sel
|
|
21
|
+
* (`Trait.visible(SomeSel.thing)`) is an inline selector. `Trait.url(...)` takes a URLPatternInit, never a selector.
|
|
22
|
+
*/
|
|
23
|
+
const SELECTOR_TRAITS = new Set(["Trait.visible", "Trait.text", "textEquals", "visible"]);
|
|
24
|
+
export async function validateFlows(projectDir) {
|
|
25
|
+
const files = walkDir(projectDir, /\.flow\.ts$/);
|
|
26
|
+
const results = [];
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
try {
|
|
29
|
+
const mod = await importFresh(file);
|
|
30
|
+
for (const [exportName, exported] of Object.entries(mod)) {
|
|
31
|
+
if (isFlowLike(exported)) {
|
|
32
|
+
results.push({ file, name: exportName, valid: true });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
38
|
+
results.push({ file, name: basename(file, ".ts"), valid: false, error: msg });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Walks every `*.block.ts` file under `projectDir`, imports each to find its
|
|
45
|
+
* exported Blocks, and for any Block NOT built via `defineNavBlock`, scans
|
|
46
|
+
* that file's own source text for a navigation call. Warning only - never
|
|
47
|
+
* throws, never changes the caller's exit code on its own account (a Block
|
|
48
|
+
* file that fails to import for unrelated reasons is silently skipped here;
|
|
49
|
+
* `validate` is the command that reports import failures).
|
|
50
|
+
*/
|
|
51
|
+
export async function checkProject(projectDir, opts) {
|
|
52
|
+
const files = walkDir(projectDir, /\.block\.ts$/);
|
|
53
|
+
const navWarnings = [];
|
|
54
|
+
const selWarnings = [];
|
|
55
|
+
for (const file of files) {
|
|
56
|
+
let mod;
|
|
57
|
+
try {
|
|
58
|
+
mod = await importFresh(file);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
reportImportError(relative(projectDir, file), err);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// The calls in the Block's own file, read from the AST: a comment or a string that mentions page.goto doesn't count.
|
|
65
|
+
const fileCalls = calls(parseSource(file));
|
|
66
|
+
for (const [exportName, exported] of Object.entries(mod)) {
|
|
67
|
+
if (!isBlockLike(exported))
|
|
68
|
+
continue;
|
|
69
|
+
// Nav-escape: NavBlocks are exempt (their generated act() is the one legitimate goto/click call site).
|
|
70
|
+
if (!isNavBlockMarked(exported) && fileCalls.some((c) => NAV_METHODS.has(c.callee))) {
|
|
71
|
+
navWarnings.push({ file, blockName: exported.name, exportName });
|
|
72
|
+
}
|
|
73
|
+
// Inline selector: every Block kind, NavBlocks too - a Nav's own `verify` array can inline a selector.
|
|
74
|
+
if (fileCalls.some((c) => c.literalFirstArg && SELECTOR_TRAITS.has(c.callee))) {
|
|
75
|
+
selWarnings.push({ file, blockName: exported.name, exportName });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const practiceWarnings = collectPracticeWarnings(projectDir, walkDir, {
|
|
80
|
+
disabled: opts?.noPractices === true,
|
|
81
|
+
});
|
|
82
|
+
return { navWarnings, selWarnings, practiceWarnings };
|
|
83
|
+
}
|
|
84
|
+
/** Imports in each packable map group that reach outside it (see `manifest/maps.ts`). */
|
|
85
|
+
export function checkMapGroups(projectDir) {
|
|
86
|
+
return mapGroups(projectDir).flatMap((g) => mapGroupImportProblems(g).map((p) => ({ ...p, group: g.group })));
|
|
87
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BlockEntry } from "../
|
|
1
|
+
import type { BlockEntry } from "../manifest/project.js";
|
|
2
2
|
/** Collect selector strings from NavClick blocks and Block/*Sel source files. */
|
|
3
3
|
export declare function collectKnownInteractionSelectors(projectDir: string, library: {
|
|
4
4
|
navBlocks: BlockEntry[];
|
|
@@ -3,31 +3,16 @@
|
|
|
3
3
|
* selector or NavBlock URL in the loaded library (surfaced via console.warn →
|
|
4
4
|
* `auto console`, same channel as unmapped href detection).
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const st = statSync(p);
|
|
17
|
-
if (st.isDirectory()) {
|
|
18
|
-
if (name === "node_modules" || name === "dist" || name.startsWith("."))
|
|
19
|
-
continue;
|
|
20
|
-
walkBlockAndSelFiles(p, acc);
|
|
21
|
-
}
|
|
22
|
-
else if (/\.(block|sel)\.ts$/.test(name)) {
|
|
23
|
-
acc.push(p);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
/* ignore */
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return acc;
|
|
6
|
+
import { exploreRoots } from "../manifest/roots.js";
|
|
7
|
+
import { walkDir } from "../manifest/scan.js";
|
|
8
|
+
import { parseSource, stringLiterals } from "../manifest/source.js";
|
|
9
|
+
/** A colour like `{ color: "#fde68a" }` is not a selector. */
|
|
10
|
+
const STYLE_PROPERTY = /colou?r|background|fill|stroke|border|shadow/i;
|
|
11
|
+
/** A string that reads as a CSS selector for an element waygraph can find: an id, an attribute, or a data-test hook. */
|
|
12
|
+
function isSelectorLiteral(value, property) {
|
|
13
|
+
if (property && STYLE_PROPERTY.test(property))
|
|
14
|
+
return false;
|
|
15
|
+
return value.includes("#") || value.startsWith("[") || value.includes("data-test");
|
|
31
16
|
}
|
|
32
17
|
/** Collect selector strings from NavClick blocks and Block/*Sel source files. */
|
|
33
18
|
export function collectKnownInteractionSelectors(projectDir, library, inject) {
|
|
@@ -39,18 +24,10 @@ export function collectKnownInteractionSelectors(projectDir, library, inject) {
|
|
|
39
24
|
out.add(click);
|
|
40
25
|
}
|
|
41
26
|
for (const root of exploreRoots(projectDir, inject)) {
|
|
42
|
-
for (const file of
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
let m;
|
|
47
|
-
while ((m = re.exec(src))) {
|
|
48
|
-
const sel = m[0].startsWith("#") || m[0].startsWith("[") ? m[0] : (m[1] ?? m[0]);
|
|
49
|
-
if (sel.startsWith("#") || sel.includes("data-test") || sel.includes("[")) {
|
|
50
|
-
out.add(sel.startsWith("#") || sel.startsWith("[") ? sel : `#${sel}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
27
|
+
for (const file of walkDir(root, /\.(block|sel)\.ts$/)) {
|
|
28
|
+
for (const { value, property } of stringLiterals(parseSource(file)))
|
|
29
|
+
if (isSelectorLiteral(value, property))
|
|
30
|
+
out.add(value);
|
|
54
31
|
}
|
|
55
32
|
}
|
|
56
33
|
return Array.from(out);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function extractFlowNames(filePath: string): string[];
|
|
2
|
+
/** `LoginBlock` -> `"login"`; `OverviewMetricsBlock` -> `"overview-metrics"`. */
|
|
3
|
+
export declare function blockExportToLabel(exportId: string): string;
|
|
4
|
+
/** Every `...Block` identifier a `.flow.ts` file imports, in source order. */
|
|
5
|
+
export declare function parseBlockImports(filePath: string): string[];
|
|
6
|
+
/** Every `page.goto("...")` URL in a file, in source order. */
|
|
7
|
+
export declare function extractGotos(filePath: string): string[];
|
|
8
|
+
/** Every `Trait.url({ pathname: "..." })` target in a file, in source order. */
|
|
9
|
+
export declare function extractUrlTraits(filePath: string): string[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// What `waygraph list` / `nav` print, read from each file's AST without importing it.
|
|
2
|
+
import { exportedNames, namedImportsFrom, objectArgProperty, parseSource, stringArgs } from "../manifest/source.js";
|
|
3
|
+
export function extractFlowNames(filePath) {
|
|
4
|
+
return exportedNames(parseSource(filePath));
|
|
5
|
+
}
|
|
6
|
+
/** `LoginBlock` -> `"login"`; `OverviewMetricsBlock` -> `"overview-metrics"`. */
|
|
7
|
+
export function blockExportToLabel(exportId) {
|
|
8
|
+
const base = exportId.replace(/Block$/, "");
|
|
9
|
+
return base
|
|
10
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
11
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
|
|
12
|
+
.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
/** Every `...Block` identifier a `.flow.ts` file imports, in source order. */
|
|
15
|
+
export function parseBlockImports(filePath) {
|
|
16
|
+
return namedImportsFrom(parseSource(filePath), (spec) => /\.block(\.js)?$/.test(spec));
|
|
17
|
+
}
|
|
18
|
+
/** Every `page.goto("...")` URL in a file, in source order. */
|
|
19
|
+
export function extractGotos(filePath) {
|
|
20
|
+
return stringArgs(parseSource(filePath), (callee) => callee.endsWith(".goto"));
|
|
21
|
+
}
|
|
22
|
+
/** Every `Trait.url({ pathname: "..." })` target in a file, in source order. */
|
|
23
|
+
export function extractUrlTraits(filePath) {
|
|
24
|
+
return objectArgProperty(parseSource(filePath), (callee) => callee === "Trait.url", "pathname");
|
|
25
|
+
}
|
package/dist/analysis/graph.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BlocksSelect } from "../manifest/select.js";
|
|
2
|
+
import type { ProjectScan } from "../manifest/project.js";
|
|
2
3
|
/**
|
|
3
4
|
* The state-machine shape `waygraph auto` discovers from a project's own
|
|
4
5
|
* Blocks - Checkpoints are nodes, Blocks are edges. Kept as plain data (not
|
|
@@ -32,7 +33,7 @@ export interface WaygraphGraph {
|
|
|
32
33
|
/** Blocks whose Out tag couldn't be statically resolved - not a crash, just excluded. */
|
|
33
34
|
skipped: SkippedBlock[];
|
|
34
35
|
}
|
|
35
|
-
/** A Block export that no `.flow.ts`
|
|
36
|
+
/** A Block export that no `.flow.ts` uses yet. */
|
|
36
37
|
export interface OrphanBlock {
|
|
37
38
|
/** Export identifier in the `.block.ts` file. */
|
|
38
39
|
exportName: string;
|
|
@@ -50,10 +51,9 @@ export interface OrphanBlock {
|
|
|
50
51
|
*/
|
|
51
52
|
export declare function toMermaid(graph: WaygraphGraph): string;
|
|
52
53
|
/**
|
|
53
|
-
* Blocks
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* Page hubs and Blocks listed on a Page's `methods` are not orphans.
|
|
54
|
+
* Blocks the project exports but no flow plays. Read at runtime: every flow's `blocks()` (nested flows flattened, plus
|
|
55
|
+
* the Blocks a `branch()` routes to) against every scanned Block. Page hubs and the Blocks a Page lists as its
|
|
56
|
+
* `methods` are not orphans.
|
|
57
57
|
*/
|
|
58
58
|
export declare function findOrphanBlocks(projectDir: string): Promise<OrphanBlock[]>;
|
|
59
59
|
/**
|
|
@@ -80,16 +80,12 @@ export interface BlockPathStep {
|
|
|
80
80
|
*/
|
|
81
81
|
export declare function findBlockPathDetailed(graph: WaygraphGraph, fromTag: string, toTag: string): BlockPathStep[] | null;
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* check` already has: a target project whose own `waygraph`/`playwright`
|
|
86
|
-
* are genuinely separate installs (not symlinked into this same
|
|
87
|
-
* node_modules resolution) can crash Playwright's own "second copy" guard
|
|
88
|
-
* on import - acceptable for an introspection command the same way it
|
|
89
|
-
* already is for `check`, unlike `chain`, which spawns a child process
|
|
90
|
-
* specifically because it also EXECUTES Blocks, not just imports them.
|
|
83
|
+
* The project's state graph: Checkpoints are nodes, Blocks are edges. Built from the manifest scan, which reads each Block's
|
|
84
|
+
* route at runtime.
|
|
91
85
|
*/
|
|
92
86
|
export declare function discoverGraph(projectDir: string, opts?: {
|
|
93
87
|
blocksSelect?: BlocksSelect;
|
|
94
88
|
inject?: string[];
|
|
95
89
|
}): Promise<WaygraphGraph>;
|
|
90
|
+
/** The graph of an existing scan. */
|
|
91
|
+
export declare function graphFromScan(scan: ProjectScan): WaygraphGraph;
|