waygraph 0.7.11 → 0.7.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +2 -0
  2. package/dist/auto-explore-run.js +15 -1
  3. package/dist/cli.d.ts +1 -1
  4. package/dist/cli.js +61 -21
  5. package/dist/step-overlay.js +29 -20
  6. package/examples/saucedemo/README.md +35 -8
  7. package/examples/saucedemo/docs/CONVENTION.md +32 -14
  8. package/examples/saucedemo/package-lock.json +118 -0
  9. package/examples/saucedemo/scripts/capture-wrong-login.mjs +2 -2
  10. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +2 -2
  11. package/examples/saucedemo/src/blocks/SITE-MAP.md +43 -0
  12. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +26 -0
  13. package/examples/saucedemo/src/blocks/saucedemo-web/actions/submit-login-for-flow.ts +13 -0
  14. package/examples/saucedemo/src/blocks/{actions → saucedemo-web/actions}/submit-login.action.block.ts +14 -10
  15. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web}/actions/submit-logout.action.block.ts +8 -3
  16. package/examples/saucedemo/src/blocks/saucedemo-web/cart/NAV.md +22 -0
  17. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/cart}/nav-cart.block.ts +8 -3
  18. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/cart}/nav-checkout-info.block.ts +8 -1
  19. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/NAV.md +21 -0
  20. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one}/actions/submit-checkout-info.action.block.ts +9 -6
  21. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/NAV.md +21 -0
  22. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two}/actions/finish-order.action.block.ts +8 -1
  23. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/NAV.md +26 -0
  24. package/examples/saucedemo/src/blocks/{actions → saucedemo-web/inventory/actions}/add-to-cart.effect.block.ts +10 -4
  25. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/inventory}/actions/inventory-items.ts +8 -0
  26. package/{templates/quickstart/src/blocks → examples/saucedemo/src/blocks/saucedemo-web/inventory}/actions/remove-from-cart.effect.block.ts +10 -4
  27. package/examples/saucedemo/src/blocks/{nav-item-detail.block.ts → saucedemo-web/inventory/nav-item-detail.block.ts} +10 -4
  28. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/NAV.md +25 -0
  29. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +18 -0
  30. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +18 -0
  31. package/examples/saucedemo/src/blocks/{nav-continue-shopping.block.ts → saucedemo-web/inventory-item/nav-continue-shopping.block.ts} +8 -2
  32. package/examples/saucedemo/src/blocks/{nav-login.block.ts → saucedemo-web/nav-login.block.ts} +8 -3
  33. package/examples/saucedemo/src/flows/cart-continue.flow.ts +2 -2
  34. package/examples/saucedemo/src/flows/cart-mem.flow.ts +1 -1
  35. package/examples/saucedemo/src/flows/catalog-logout.flow.ts +3 -3
  36. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +8 -8
  37. package/examples/saucedemo/src/flows/checkout.flow.ts +7 -7
  38. package/examples/saucedemo/src/flows/login.flow.ts +2 -2
  39. package/examples/saucedemo/src/flows/shop.flow.ts +5 -5
  40. package/examples/saucedemo/src/flows/smoke.flow.ts +3 -3
  41. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +2 -2
  42. package/examples/saucedemo/tests/flow-block-verify.spec.ts +1 -1
  43. package/examples/saucedemo/tests/submit-login-branch.spec.ts +2 -2
  44. package/package.json +1 -1
  45. package/templates/quickstart/README.md +10 -0
  46. package/templates/quickstart/docs/CONVENTION.md +48 -26
  47. package/templates/quickstart/package.json +1 -1
  48. package/templates/quickstart/src/blocks/SITE-MAP.md +43 -0
  49. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +26 -0
  50. package/templates/quickstart/src/blocks/saucedemo-web/actions/submit-login-for-flow.ts +13 -0
  51. package/templates/quickstart/src/blocks/{actions → saucedemo-web/actions}/submit-login.action.block.ts +14 -10
  52. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web}/actions/submit-logout.action.block.ts +8 -3
  53. package/templates/quickstart/src/blocks/saucedemo-web/cart/NAV.md +22 -0
  54. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/cart}/nav-cart.block.ts +8 -3
  55. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/cart}/nav-checkout-info.block.ts +8 -1
  56. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/NAV.md +21 -0
  57. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/checkout-step-one}/actions/submit-checkout-info.action.block.ts +9 -6
  58. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/NAV.md +21 -0
  59. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/checkout-step-two}/actions/finish-order.action.block.ts +8 -1
  60. package/templates/quickstart/src/blocks/saucedemo-web/inventory/NAV.md +26 -0
  61. package/templates/quickstart/src/blocks/{actions → saucedemo-web/inventory/actions}/add-to-cart.effect.block.ts +10 -4
  62. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/inventory}/actions/inventory-items.ts +8 -0
  63. package/{examples/saucedemo/src/blocks → templates/quickstart/src/blocks/saucedemo-web/inventory}/actions/remove-from-cart.effect.block.ts +10 -4
  64. package/templates/quickstart/src/blocks/{nav-item-detail.block.ts → saucedemo-web/inventory/nav-item-detail.block.ts} +10 -4
  65. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/NAV.md +25 -0
  66. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +18 -0
  67. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +18 -0
  68. package/templates/quickstart/src/blocks/{nav-continue-shopping.block.ts → saucedemo-web/inventory-item/nav-continue-shopping.block.ts} +8 -2
  69. package/templates/quickstart/src/blocks/{nav-login.block.ts → saucedemo-web/nav-login.block.ts} +8 -3
  70. package/templates/quickstart/src/flows/cart-continue.flow.ts +2 -2
  71. package/templates/quickstart/src/flows/cart-mem.flow.ts +1 -1
  72. package/templates/quickstart/src/flows/catalog-logout.flow.ts +3 -3
  73. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +8 -8
  74. package/templates/quickstart/src/flows/checkout.flow.ts +7 -7
  75. package/templates/quickstart/src/flows/login.flow.ts +2 -2
  76. package/templates/quickstart/src/flows/shop.flow.ts +5 -5
  77. package/templates/quickstart/src/flows/smoke.flow.ts +3 -3
  78. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +2 -2
  79. package/examples/saucedemo/src/blocks/actions/submit-login-for-flow.ts +0 -10
  80. package/examples/saucedemo/src/blocks/nav-back-to-inventory.block.ts +0 -15
  81. package/examples/saucedemo/src/blocks/nav-back-to-products.block.ts +0 -14
  82. package/templates/quickstart/src/blocks/actions/submit-login-for-flow.ts +0 -10
  83. package/templates/quickstart/src/blocks/nav-back-to-inventory.block.ts +0 -15
  84. package/templates/quickstart/src/blocks/nav-back-to-products.block.ts +0 -14
@@ -8,14 +8,14 @@ import type {
8
8
  CheckoutOverviewPage,
9
9
  OrderComplete,
10
10
  } from "../states/checkout.states.js";
11
- import { NavLoginBlock } from "../blocks/nav-login.block.js";
12
- import { SubmitLoginForFlow } from "../blocks/actions/submit-login-for-flow.js";
13
- import { AddToCartBlock } from "../blocks/actions/add-to-cart.effect.block.js";
14
- import { NavCartBlock } from "../blocks/nav-cart.block.js";
15
- import { NavCheckoutInfoBlock } from "../blocks/nav-checkout-info.block.js";
16
- import { SubmitCheckoutInfoBlock } from "../blocks/actions/submit-checkout-info.action.block.js";
17
- import { FinishOrderBlock } from "../blocks/actions/finish-order.action.block.js";
18
- import { NavBackToProductsBlock } from "../blocks/nav-back-to-products.block.js";
11
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
12
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/actions/submit-login-for-flow.js";
13
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/actions/add-to-cart.effect.block.js";
14
+ import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
15
+ import { NavCheckoutInfoBlock } from "../blocks/saucedemo-web/cart/nav-checkout-info.block.js";
16
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/actions/submit-checkout-info.action.block.js";
17
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/actions/finish-order.action.block.js";
18
+ import { NavBackToProductsBlock } from "../blocks/saucedemo-web/inventory-item/nav-back-to-products.block.js";
19
19
 
20
20
  const engine = new Engine({ headless: false, slowMo: 250 });
21
21
 
@@ -8,13 +8,13 @@ import type {
8
8
  CheckoutOverviewPage,
9
9
  OrderComplete,
10
10
  } from "../states/checkout.states.js";
11
- import { NavLoginBlock } from "../blocks/nav-login.block.js";
12
- import { SubmitLoginForFlow } from "../blocks/actions/submit-login-for-flow.js";
13
- import { AddToCartBlock } from "../blocks/actions/add-to-cart.effect.block.js";
14
- import { NavCartBlock } from "../blocks/nav-cart.block.js";
15
- import { NavCheckoutInfoBlock } from "../blocks/nav-checkout-info.block.js";
16
- import { SubmitCheckoutInfoBlock } from "../blocks/actions/submit-checkout-info.action.block.js";
17
- import { FinishOrderBlock } from "../blocks/actions/finish-order.action.block.js";
11
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
12
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/actions/submit-login-for-flow.js";
13
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/actions/add-to-cart.effect.block.js";
14
+ import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
15
+ import { NavCheckoutInfoBlock } from "../blocks/saucedemo-web/cart/nav-checkout-info.block.js";
16
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/actions/submit-checkout-info.action.block.js";
17
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/actions/finish-order.action.block.js";
18
18
 
19
19
  const engine = new Engine({ headless: false, slowMo: 250 });
20
20
 
@@ -1,6 +1,6 @@
1
1
  import { Engine, start, end, withTitle } from "waygraph";
2
- import { NavLoginBlock } from "../blocks/nav-login.block.js";
3
- import { SubmitLoginForFlow } from "../blocks/actions/submit-login-for-flow.js";
2
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
3
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/actions/submit-login-for-flow.js";
4
4
 
5
5
  const engine = new Engine();
6
6
 
@@ -1,9 +1,9 @@
1
1
  import { Engine, start, end, withTitle } from "waygraph";
2
- import { AddToCartBlock } from "../blocks/actions/add-to-cart.effect.block.js";
3
- import { NavCartBlock } from "../blocks/nav-cart.block.js";
4
- import { NavCheckoutInfoBlock } from "../blocks/nav-checkout-info.block.js";
5
- import { SubmitCheckoutInfoBlock } from "../blocks/actions/submit-checkout-info.action.block.js";
6
- import { FinishOrderBlock } from "../blocks/actions/finish-order.action.block.js";
2
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/actions/add-to-cart.effect.block.js";
3
+ import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
4
+ import { NavCheckoutInfoBlock } from "../blocks/saucedemo-web/cart/nav-checkout-info.block.js";
5
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/actions/submit-checkout-info.action.block.js";
6
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/actions/finish-order.action.block.js";
7
7
 
8
8
  const engine = new Engine();
9
9
 
@@ -1,8 +1,8 @@
1
1
  import { Engine, start, end } from "waygraph";
2
2
  import type { LoginPage, LoggedIn, ItemInCart } from "../states/checkout.states.js";
3
- import { NavLoginBlock } from "../blocks/nav-login.block.js";
4
- import { SubmitLoginForFlow } from "../blocks/actions/submit-login-for-flow.js";
5
- import { AddToCartBlock } from "../blocks/actions/add-to-cart.effect.block.js";
3
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
4
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/actions/submit-login-for-flow.js";
5
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/actions/add-to-cart.effect.block.js";
6
6
 
7
7
  const engine = new Engine();
8
8
 
@@ -1,6 +1,6 @@
1
1
  import { Engine, start, end, withTitle, withSessionReset } from "waygraph";
2
- import { NavLoginBlock } from "../blocks/nav-login.block.js";
3
- import { SubmitLoginActionBlock } from "../blocks/actions/submit-login.action.block.js";
2
+ import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
3
+ import { SubmitLoginActionBlock } from "../blocks/saucedemo-web/actions/submit-login.action.block.js";
4
4
 
5
5
  const engine = new Engine();
6
6
 
@@ -1,10 +0,0 @@
1
- import type { DefinedBlock } from "waygraph";
2
- import type { LoginPage, LoggedIn } from "../../states/checkout.states.js";
3
- import { SubmitLoginActionBlock } from "./submit-login.action.block.js";
4
-
5
- // DefinedBlock, not the plain Block interface - SubmitLoginActionBlock really
6
- // does have withVerify/modVerify/modVerifyAll attached (built via
7
- // defineBlock()); widening to plain Block here made those optional again and
8
- // broke chained `.withVerify([])` calls in linear Flows (smoke.flow.ts).
9
- /** Linear defineFlow chains: Out typed as LoggedIn; runtime still branches on bad creds. */
10
- export const SubmitLoginForFlow = SubmitLoginActionBlock as unknown as DefinedBlock<LoginPage, LoggedIn>;
@@ -1,15 +0,0 @@
1
- import { defineNavBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../states/checkout.states.js";
3
-
4
- // click, not url - the item detail page's own real "Back to products"
5
- // button. Same selector nav-back-to-products.block.ts uses from
6
- // OrderComplete - a different From state, so a separate Block, per the
7
- // atomic convention (each Block declares its own In/Out contract even when
8
- // the click target happens to coincide).
9
- export const NavBackToInventoryBlock = defineNavBlock<LoggedIn>({
10
- name: "nav-back-to-inventory",
11
- description: "Clicks 'Back to products' on the item detail page.",
12
- checkpoint: "LoggedIn",
13
- click: "#back-to-products",
14
- verify: [Trait.url({ pathname: "/inventory.html" })],
15
- });
@@ -1,14 +0,0 @@
1
- import { defineNavBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../states/checkout.states.js";
3
-
4
- // click, not url - the order-complete page's own "Back Home" button
5
- // genuinely takes you back to /inventory.html. A url-based NavBlock here
6
- // would teleport straight to that URL without ever proving this button
7
- // actually works; click proves the app's own navigation path does.
8
- export const NavBackToProductsBlock = defineNavBlock<LoggedIn>({
9
- name: "nav-back-to-products",
10
- description: "Clicks 'Back Home' on the order confirmation page.",
11
- checkpoint: "LoggedIn",
12
- click: "#back-to-products",
13
- verify: [Trait.url({ pathname: "/inventory.html" })],
14
- });
@@ -1,10 +0,0 @@
1
- import type { DefinedBlock } from "waygraph";
2
- import type { LoginPage, LoggedIn } from "../../states/checkout.states.js";
3
- import { SubmitLoginActionBlock } from "./submit-login.action.block.js";
4
-
5
- // DefinedBlock, not the plain Block interface - SubmitLoginActionBlock really
6
- // does have withVerify/modVerify/modVerifyAll attached (built via
7
- // defineBlock()); widening to plain Block here made those optional again and
8
- // broke chained `.withVerify([])` calls in linear Flows (smoke.flow.ts).
9
- /** Linear defineFlow chains: Out typed as LoggedIn; runtime still branches on bad creds. */
10
- export const SubmitLoginForFlow = SubmitLoginActionBlock as unknown as DefinedBlock<LoginPage, LoggedIn>;
@@ -1,15 +0,0 @@
1
- import { defineNavBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../states/checkout.states.js";
3
-
4
- // click, not url - the item detail page's own real "Back to products"
5
- // button. Same selector nav-back-to-products.block.ts uses from
6
- // OrderComplete - a different From state, so a separate Block, per the
7
- // atomic convention (each Block declares its own In/Out contract even when
8
- // the click target happens to coincide).
9
- export const NavBackToInventoryBlock = defineNavBlock<LoggedIn>({
10
- name: "nav-back-to-inventory",
11
- description: "Clicks 'Back to products' on the item detail page.",
12
- checkpoint: "LoggedIn",
13
- click: "#back-to-products",
14
- verify: [Trait.url({ pathname: "/inventory.html" })],
15
- });
@@ -1,14 +0,0 @@
1
- import { defineNavBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../states/checkout.states.js";
3
-
4
- // click, not url - the order-complete page's own "Back Home" button
5
- // genuinely takes you back to /inventory.html. A url-based NavBlock here
6
- // would teleport straight to that URL without ever proving this button
7
- // actually works; click proves the app's own navigation path does.
8
- export const NavBackToProductsBlock = defineNavBlock<LoggedIn>({
9
- name: "nav-back-to-products",
10
- description: "Clicks 'Back Home' on the order confirmation page.",
11
- checkpoint: "LoggedIn",
12
- click: "#back-to-products",
13
- verify: [Trait.url({ pathname: "/inventory.html" })],
14
- });