waygraph 0.7.16 → 0.10.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.
Files changed (83) hide show
  1. package/README.md +90 -52
  2. package/dist/auto-explore-run.js +13 -7
  3. package/dist/auto-explore.js +47 -36
  4. package/dist/cli.d.ts +8 -12
  5. package/dist/cli.js +229 -249
  6. package/dist/engine.d.ts +53 -11
  7. package/dist/engine.js +81 -8
  8. package/dist/graph.d.ts +2 -1
  9. package/dist/graph.js +51 -11
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.js +1 -1
  12. package/examples/saucedemo/README.md +19 -5
  13. package/examples/saucedemo/docs/CONVENTION.md +22 -18
  14. package/examples/saucedemo/docs/HELPERS.md +152 -8
  15. package/examples/saucedemo/package-lock.json +1 -1
  16. package/examples/saucedemo/package.json +11 -5
  17. package/examples/saucedemo/scripts/capture-wrong-login.mjs +1 -1
  18. package/examples/saucedemo/scripts/drive-auto-cli.mjs +93 -0
  19. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +1 -1
  20. package/examples/saucedemo/scripts/show-auto-menu.mjs +72 -0
  21. package/examples/saucedemo/src/blocks/SITE-MAP.md +11 -8
  22. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +3 -3
  23. package/examples/saucedemo/src/blocks/saucedemo-web/cart/NAV.md +1 -1
  24. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/NAV.md +1 -1
  25. package/{templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/actions/submit-checkout-info.action.block.ts → examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts} +5 -5
  26. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/NAV.md +1 -1
  27. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/{actions/finish-order.action.block.ts → methods/finish-order.method.block.ts} +5 -5
  28. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/NAV.md +17 -5
  29. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +37 -0
  30. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +55 -0
  31. package/{templates/quickstart/src/blocks/saucedemo-web/inventory/actions → examples/saucedemo/src/blocks/saucedemo-web/inventory/methods}/add-to-cart.effect.block.ts +6 -6
  32. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/{actions → methods}/inventory-items.ts +40 -20
  33. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +55 -0
  34. package/{templates/quickstart/src/blocks/saucedemo-web/inventory/actions → examples/saucedemo/src/blocks/saucedemo-web/inventory/methods}/remove-from-cart.effect.block.ts +5 -5
  35. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +4 -4
  36. package/examples/saucedemo/src/blocks/saucedemo-web/{actions → methods}/submit-login-for-flow.ts +2 -2
  37. package/examples/saucedemo/src/blocks/saucedemo-web/{actions/submit-login.action.block.ts → methods/submit-login.method.block.ts} +5 -5
  38. package/{templates/quickstart/src/blocks/saucedemo-web/actions/submit-logout.action.block.ts → examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts} +5 -5
  39. package/examples/saucedemo/src/flows/cart-bulk.flow.ts +19 -0
  40. package/examples/saucedemo/src/flows/cart-mem.flow.ts +1 -1
  41. package/examples/saucedemo/src/flows/catalog-logout.flow.ts +1 -1
  42. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +4 -4
  43. package/examples/saucedemo/src/flows/checkout.flow.ts +4 -4
  44. package/examples/saucedemo/src/flows/login.flow.ts +1 -1
  45. package/examples/saucedemo/src/flows/shop.flow.ts +3 -3
  46. package/examples/saucedemo/src/flows/smoke.flow.ts +2 -2
  47. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +1 -1
  48. package/examples/saucedemo/tests/flow-block-verify.spec.ts +1 -1
  49. package/examples/saucedemo/tests/submit-login-branch.spec.ts +1 -1
  50. package/package.json +1 -1
  51. package/templates/quickstart/README-saucedemo-commands.md +72 -0
  52. package/templates/quickstart/docs/CONVENTION.md +5 -5
  53. package/templates/quickstart/docs/HELPERS.md +152 -8
  54. package/templates/quickstart/package.json +9 -5
  55. package/templates/quickstart/scripts/drive-auto-cli.mjs +93 -0
  56. package/templates/quickstart/src/blocks/SITE-MAP.md +11 -8
  57. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +3 -3
  58. package/templates/quickstart/src/blocks/saucedemo-web/cart/NAV.md +1 -1
  59. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/NAV.md +1 -1
  60. package/{examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/actions/submit-checkout-info.action.block.ts → templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts} +5 -5
  61. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/NAV.md +1 -1
  62. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/{actions/finish-order.action.block.ts → methods/finish-order.method.block.ts} +5 -5
  63. package/templates/quickstart/src/blocks/saucedemo-web/inventory/NAV.md +17 -5
  64. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +37 -0
  65. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +55 -0
  66. package/{examples/saucedemo/src/blocks/saucedemo-web/inventory/actions → templates/quickstart/src/blocks/saucedemo-web/inventory/methods}/add-to-cart.effect.block.ts +6 -6
  67. package/templates/quickstart/src/blocks/saucedemo-web/inventory/{actions → methods}/inventory-items.ts +40 -20
  68. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +55 -0
  69. package/{examples/saucedemo/src/blocks/saucedemo-web/inventory/actions → templates/quickstart/src/blocks/saucedemo-web/inventory/methods}/remove-from-cart.effect.block.ts +5 -5
  70. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +1 -1
  71. package/templates/quickstart/src/blocks/saucedemo-web/{actions → methods}/submit-login-for-flow.ts +2 -2
  72. package/templates/quickstart/src/blocks/saucedemo-web/{actions/submit-login.action.block.ts → methods/submit-login.method.block.ts} +5 -5
  73. package/{examples/saucedemo/src/blocks/saucedemo-web/actions/submit-logout.action.block.ts → templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts} +5 -5
  74. package/templates/quickstart/src/flows/cart-bulk.flow.ts +19 -0
  75. package/templates/quickstart/src/flows/cart-mem.flow.ts +1 -1
  76. package/templates/quickstart/src/flows/catalog-logout.flow.ts +1 -1
  77. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +4 -4
  78. package/templates/quickstart/src/flows/checkout.flow.ts +4 -4
  79. package/templates/quickstart/src/flows/login.flow.ts +1 -1
  80. package/templates/quickstart/src/flows/shop.flow.ts +3 -3
  81. package/templates/quickstart/src/flows/smoke.flow.ts +2 -2
  82. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +1 -1
  83. package/templates/scaffold/package.json +1 -1
@@ -4,7 +4,7 @@ import { SelectedItem } from "../../../states/checkout.mem-keys.js";
4
4
  import {
5
5
  collectInventoryItems,
6
6
  inventoryItemTitleSelector,
7
- } from "./actions/inventory-items.js";
7
+ } from "./methods/inventory-items.js";
8
8
 
9
9
  /**
10
10
  * Kind: Nav
@@ -1,11 +1,11 @@
1
1
  import type { DefinedBlock } from "waygraph";
2
2
  import type { LoginPage, LoggedIn } from "../../../states/checkout.states.js";
3
- import { SubmitLoginActionBlock } from "./submit-login.action.block.js";
3
+ import { SubmitLoginActionBlock } from "./submit-login.method.block.js";
4
4
 
5
5
  /**
6
6
  * Kind: helper (not a discoverable Block file)
7
7
  * Helper: typed alias over SubmitLoginActionBlock
8
- * Route: saucedemo-web/actions/ (page URL /)
8
+ * Route: saucedemo-web/methods/ (page URL /)
9
9
  *
10
10
  * DefinedBlock cast so linear Flows can chain .withVerify on Out=LoggedIn;
11
11
  * runtime still branches on bad credentials via SubmitLoginActionBlock.
@@ -1,18 +1,18 @@
1
- import { defineActionBlock, checkpoint, Trait } from "waygraph";
1
+ import { defineMethodBlock, checkpoint, Trait } from "waygraph";
2
2
  import type { LoginPage, LoginSubmitOutcome } from "../../../states/checkout.states.js";
3
3
  import { LoginCreds } from "../../../states/checkout.mem-keys.js";
4
4
 
5
5
  type LoginObserve = "success" | "failure";
6
6
 
7
7
  /**
8
- * Kind: Action
9
- * Helper: defineActionBlock
10
- * Route: saucedemo-web/actions/ (page URL /)
8
+ * Kind: Method
9
+ * Helper: defineMethodBlock
10
+ * Route: saucedemo-web/methods/ (page URL /)
11
11
  *
12
12
  * Fills credentials and submits - never page.goto (nav-login owns that).
13
13
  * Branches: good creds -> LoggedIn; bad/locked -> LoginPage with error banner.
14
14
  */
15
- export const SubmitLoginActionBlock = defineActionBlock<LoginPage, LoginSubmitOutcome>({
15
+ export const SubmitLoginActionBlock = defineMethodBlock<LoginPage, LoginSubmitOutcome>({
16
16
  name: "submit-login",
17
17
  description: "Logs a user in when credentials are valid; stays on LoginPage when auth fails.",
18
18
  requires: [LoginCreds.key],
@@ -1,14 +1,14 @@
1
- import { defineActionBlock, checkpoint, Trait } from "waygraph";
1
+ import { defineMethodBlock, checkpoint, Trait } from "waygraph";
2
2
  import type { LoggedIn, LoginPage } from "../../../states/checkout.states.js";
3
3
 
4
4
  /**
5
- * Kind: Action
6
- * Helper: defineActionBlock
7
- * Route: saucedemo-web/actions/ (page URL / after logout)
5
+ * Kind: Method
6
+ * Helper: defineMethodBlock
7
+ * Route: saucedemo-web/methods/ (page URL / after logout)
8
8
  *
9
9
  * Burger menu Logout - real cycle back to LoginPage (same Checkpoint nav-login lands on).
10
10
  */
11
- export const SubmitLogoutBlock = defineActionBlock<LoggedIn, LoginPage>({
11
+ export const SubmitLogoutBlock = defineMethodBlock<LoggedIn, LoginPage>({
12
12
  name: "submit-logout",
13
13
  description: "Opens the burger menu and logs out.",
14
14
  instruction: {
@@ -0,0 +1,19 @@
1
+ import { Engine, start, end, withTitle, chainFlow } from "waygraph";
2
+ import { loginFlow } from "./login.flow.js";
3
+ import { AddAllToCartBlock } from "../blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.js";
4
+ import { RemoveAllFromCartBlock } from "../blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.js";
5
+
6
+ const engine = new Engine();
7
+
8
+ /**
9
+ * Episode after login: drain every Add button, then every Remove button.
10
+ * Proves bulk Methods + round-trip (LoggedIn <-> ItemInCart) without
11
+ * instanceOptions. Pair with loginFlow via chainFlow for `waygraph demo`.
12
+ */
13
+ export const cartBulkEpisode = withTitle(
14
+ engine.defineFlow([start, AddAllToCartBlock, RemoveAllFromCartBlock, end]),
15
+ "Cart bulk add/remove all",
16
+ );
17
+
18
+ /** Full demo: Sign In -> Add all -> Remove all. */
19
+ export const cartBulkFlow = chainFlow(loginFlow, cartBulkEpisode);
@@ -1,5 +1,5 @@
1
1
  import { Engine, start, end } from "waygraph";
2
- import { RemoveFromCartBlock } from "../blocks/saucedemo-web/inventory/actions/remove-from-cart.effect.block.js";
2
+ import { RemoveFromCartBlock } from "../blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.js";
3
3
 
4
4
  const engine = new Engine();
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { Engine, start, end, withTitle } from "waygraph";
2
2
  import { NavItemDetailBlock } from "../blocks/saucedemo-web/inventory/nav-item-detail.block.js";
3
3
  import { NavBackToInventoryBlock } from "../blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.js";
4
- import { SubmitLogoutBlock } from "../blocks/saucedemo-web/actions/submit-logout.action.block.js";
4
+ import { SubmitLogoutBlock } from "../blocks/saucedemo-web/methods/submit-logout.method.block.js";
5
5
 
6
6
  const engine = new Engine();
7
7
 
@@ -9,12 +9,12 @@ import type {
9
9
  OrderComplete,
10
10
  } from "../states/checkout.states.js";
11
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";
12
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/methods/submit-login-for-flow.js";
13
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.js";
14
14
  import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
15
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";
16
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.js";
17
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.js";
18
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 });
@@ -9,12 +9,12 @@ import type {
9
9
  OrderComplete,
10
10
  } from "../states/checkout.states.js";
11
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";
12
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/methods/submit-login-for-flow.js";
13
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.js";
14
14
  import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
15
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";
16
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.js";
17
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.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
2
  import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
3
- import { SubmitLoginForFlow } from "../blocks/saucedemo-web/actions/submit-login-for-flow.js";
3
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/methods/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/saucedemo-web/inventory/actions/add-to-cart.effect.block.js";
2
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.js";
3
3
  import { NavCartBlock } from "../blocks/saucedemo-web/cart/nav-cart.block.js";
4
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";
5
+ import { SubmitCheckoutInfoBlock } from "../blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.js";
6
+ import { FinishOrderBlock } from "../blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.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
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";
4
+ import { SubmitLoginForFlow } from "../blocks/saucedemo-web/methods/submit-login-for-flow.js";
5
+ import { AddToCartBlock } from "../blocks/saucedemo-web/inventory/methods/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
2
  import { NavLoginBlock } from "../blocks/saucedemo-web/nav-login.block.js";
3
- import { SubmitLoginActionBlock } from "../blocks/saucedemo-web/actions/submit-login.action.block.js";
3
+ import { SubmitLoginActionBlock } from "../blocks/saucedemo-web/methods/submit-login.method.block.js";
4
4
 
5
5
  const engine = new Engine();
6
6
 
@@ -16,7 +16,7 @@
16
16
  "baseUrl": "https://example.com"
17
17
  },
18
18
  "dependencies": {
19
- "waygraph": "^0.7.9"
19
+ "waygraph": "^0.9.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@playwright/test": "^1.55.0",