@plures/praxis 1.0.3 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/README.md +162 -375
  3. package/core/codegen/docs-generator.ts +5 -2
  4. package/core/codegen/index.ts +1 -1
  5. package/core/db-adapter/index.ts +2 -2
  6. package/core/db-adapter/sync-engine.ts +17 -6
  7. package/core/logic-engine/engine.ts +1 -1
  8. package/core/logic-engine/index.ts +2 -2
  9. package/core/logic-engine/protocol.ts +1 -1
  10. package/core/logic-engine/psf-adapter.ts +8 -4
  11. package/core/logic-engine/rules.ts +1 -1
  12. package/core/schema-engine/compiler.ts +53 -11
  13. package/core/schema-engine/generator.ts +17 -7
  14. package/core/schema-engine/index.ts +2 -2
  15. package/core/schema-engine/psf.ts +12 -3
  16. package/core/schema-engine/types.ts +3 -11
  17. package/core/schema-engine/validator.ts +112 -22
  18. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  19. package/dist/browser/index.d.ts +3004 -0
  20. package/dist/browser/index.js +2892 -0
  21. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  22. package/dist/browser/integrations/svelte.js +298 -0
  23. package/dist/node/auth-STARLY7I.js +207 -0
  24. package/dist/node/build-Y7OT5VBF.js +144 -0
  25. package/dist/node/canvas-UERZHJYW.js +362 -0
  26. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  27. package/dist/node/chunk-FXQZXAWF.js +175 -0
  28. package/dist/node/chunk-N5Y37EUV.js +202 -0
  29. package/dist/node/chunk-QGM4M3NI.js +37 -0
  30. package/dist/node/chunk-RJMWCNHR.js +175 -0
  31. package/dist/node/chunk-SRM3OPPM.js +404 -0
  32. package/dist/node/chunk-UATVJBNV.js +175 -0
  33. package/dist/node/chunk-UY7YEBE2.js +159 -0
  34. package/dist/node/chunk-XCY2VIFX.js +143 -0
  35. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  36. package/dist/node/cli/index.cjs +215139 -0
  37. package/dist/node/cli/index.d.cts +1 -0
  38. package/dist/node/cli/index.d.ts +1 -0
  39. package/dist/node/cli/index.js +690 -0
  40. package/dist/node/cloud/index.cjs +1043 -0
  41. package/dist/node/cloud/index.d.cts +864 -0
  42. package/dist/node/cloud/index.d.ts +864 -0
  43. package/dist/node/cloud/index.js +456 -0
  44. package/dist/node/cloud-AXOK4PSN.js +212 -0
  45. package/dist/node/component.cjs +374 -0
  46. package/dist/node/component.d.cts +125 -0
  47. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  48. package/dist/node/component.js +9 -0
  49. package/dist/node/components/index.cjs +216 -0
  50. package/dist/node/components/index.d.cts +43 -0
  51. package/dist/{src → node}/components/index.d.ts +8 -8
  52. package/dist/node/components/index.js +7 -0
  53. package/dist/node/create-TRLSVCNQ.js +584 -0
  54. package/dist/node/dev-PMJZUYGE.js +65 -0
  55. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  56. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  57. package/dist/node/index.cjs +3247 -0
  58. package/dist/node/index.d.cts +2579 -0
  59. package/dist/node/index.d.ts +2579 -0
  60. package/dist/node/index.js +2098 -0
  61. package/dist/node/integrations/svelte.cjs +330 -0
  62. package/dist/node/integrations/svelte.d.cts +309 -0
  63. package/dist/node/integrations/svelte.d.ts +309 -0
  64. package/dist/node/integrations/svelte.js +300 -0
  65. package/dist/node/orchestrate-737TCL5H.js +127 -0
  66. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  67. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  68. package/dist/node/schema.cjs +200 -0
  69. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  70. package/dist/node/schema.d.ts +371 -0
  71. package/dist/node/schema.js +9 -0
  72. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  73. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  74. package/dist/node/verify-QRYKRIDU.js +210960 -0
  75. package/docs/MONETIZATION.md +21 -16
  76. package/docs/REACTIVE_REDESIGN.md +132 -0
  77. package/docs/README.md +47 -36
  78. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  79. package/docs/TERMINAL_NODE.md +27 -24
  80. package/docs/core/building-extensions.md +58 -61
  81. package/docs/core/cli-usage.md +59 -59
  82. package/docs/core/code-canvas-sync.md +28 -16
  83. package/docs/core/logic-engine.md +77 -82
  84. package/docs/core/pluresdb-integration.md +29 -39
  85. package/docs/core/schema-model.md +66 -52
  86. package/docs/core/ui-generation.md +57 -49
  87. package/docs/core/what-is-praxis.md +32 -15
  88. package/docs/guides/canvas.md +21 -5
  89. package/docs/guides/getting-started.md +13 -7
  90. package/docs/guides/history-state-pattern.md +65 -51
  91. package/docs/guides/orchestration.md +46 -32
  92. package/docs/guides/parallel-state-pattern.md +56 -72
  93. package/docs/guides/svelte-integration.md +45 -53
  94. package/docs/tutorials/README.md +16 -0
  95. package/docs/tutorials/ecommerce-cart.md +177 -95
  96. package/docs/tutorials/first-app.md +26 -41
  97. package/docs/tutorials/form-builder.md +191 -138
  98. package/docs/tutorials/todo-pluresdb.md +71 -69
  99. package/package.json +58 -23
  100. package/src/__tests__/actors.test.ts +68 -68
  101. package/src/__tests__/billing.test.ts +32 -32
  102. package/src/__tests__/canvas-components.test.ts +94 -73
  103. package/src/__tests__/cli-create.test.ts +28 -28
  104. package/src/__tests__/cloud.test.ts +36 -36
  105. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  106. package/src/__tests__/docs-generator.test.ts +3 -9
  107. package/src/__tests__/dsl.test.ts +58 -64
  108. package/src/__tests__/edge-cases.test.ts +106 -108
  109. package/src/__tests__/engine.test.ts +51 -25
  110. package/src/__tests__/generators.test.ts +42 -44
  111. package/src/__tests__/introspection.test.ts +104 -114
  112. package/src/__tests__/pluresdb.test.ts +189 -187
  113. package/src/__tests__/protocol.test.ts +15 -15
  114. package/src/__tests__/provisioning.test.ts +61 -61
  115. package/src/__tests__/schema.test.ts +7 -11
  116. package/src/__tests__/state-docs-integration.test.ts +162 -145
  117. package/src/__tests__/svelte-integration.test.ts +16 -19
  118. package/src/__tests__/tauri-integration.test.ts +149 -147
  119. package/src/__tests__/terminal-node.test.ts +12 -7
  120. package/src/__tests__/unum-integration.test.ts +68 -68
  121. package/src/adapters/cli.ts +21 -15
  122. package/src/cli/commands/auth.ts +82 -78
  123. package/src/cli/commands/build.ts +29 -27
  124. package/src/cli/commands/canvas.ts +338 -127
  125. package/src/cli/commands/cloud.ts +47 -47
  126. package/src/cli/commands/create.ts +59 -47
  127. package/src/cli/commands/dev.ts +12 -12
  128. package/src/cli/commands/generate.ts +29 -40
  129. package/src/cli/commands/orchestrate.ts +24 -24
  130. package/src/cli/commands/verify.ts +7 -8
  131. package/src/cli/index.ts +14 -10
  132. package/src/cloud/README.md +28 -15
  133. package/src/cloud/auth.ts +55 -70
  134. package/src/cloud/billing.ts +59 -58
  135. package/src/cloud/client.ts +29 -35
  136. package/src/cloud/index.ts +19 -40
  137. package/src/cloud/marketplace.ts +69 -78
  138. package/src/cloud/provisioning.ts +42 -51
  139. package/src/cloud/relay/endpoints.ts +30 -34
  140. package/src/cloud/relay/health/index.ts +1 -1
  141. package/src/cloud/relay/stats/index.ts +1 -1
  142. package/src/cloud/relay/sync/index.ts +1 -1
  143. package/src/cloud/relay/usage/index.ts +1 -1
  144. package/src/cloud/sponsors.ts +31 -34
  145. package/src/cloud/types.ts +4 -4
  146. package/src/components/README.md +1 -0
  147. package/src/components/index.ts +3 -4
  148. package/src/core/actors.ts +7 -7
  149. package/src/core/component/generator.ts +10 -28
  150. package/src/core/engine.ts +51 -24
  151. package/src/core/introspection.ts +37 -35
  152. package/src/core/logic/generator.ts +62 -62
  153. package/src/core/pluresdb/adapter.ts +8 -8
  154. package/src/core/pluresdb/generator.ts +39 -35
  155. package/src/core/pluresdb/index.ts +9 -12
  156. package/src/core/pluresdb/schema-registry.ts +22 -25
  157. package/src/core/pluresdb/store.ts +57 -57
  158. package/src/core/protocol.ts +14 -14
  159. package/src/core/reactive-engine.svelte.ts +65 -0
  160. package/src/core/reactive-engine.ts +67 -0
  161. package/src/core/rules.ts +4 -4
  162. package/src/core/schema/loader.common.ts +150 -0
  163. package/src/core/schema/loader.ts +19 -149
  164. package/src/core/schema/normalize.ts +34 -51
  165. package/src/core/schema/types.ts +47 -11
  166. package/src/dsl/index.ts +8 -8
  167. package/src/dsl.ts +11 -17
  168. package/src/examples/advanced-todo/README.md +58 -40
  169. package/src/examples/advanced-todo/index.ts +3 -3
  170. package/src/examples/auth-basic/index.ts +30 -30
  171. package/src/examples/cart/index.ts +50 -50
  172. package/src/examples/hero-ecommerce/index.ts +130 -157
  173. package/src/examples/svelte-counter/index.ts +22 -26
  174. package/src/flows.ts +6 -17
  175. package/src/index.browser.ts +204 -0
  176. package/src/index.ts +37 -42
  177. package/src/integrations/code-canvas.ts +237 -193
  178. package/src/integrations/pluresdb.ts +55 -35
  179. package/src/integrations/state-docs.ts +104 -104
  180. package/src/integrations/svelte.ts +35 -35
  181. package/src/integrations/tauri.ts +75 -73
  182. package/src/integrations/unum.ts +68 -61
  183. package/src/registry.ts +7 -14
  184. package/src/runtime/terminal-adapter.ts +31 -26
  185. package/src/step.ts +10 -16
  186. package/src/types.ts +1 -1
  187. package/templates/basic-app/README.md +6 -9
  188. package/templates/fullstack-app/README.md +10 -0
  189. package/dist/core/codegen/docs-generator.d.ts +0 -123
  190. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  191. package/dist/core/codegen/docs-generator.js +0 -674
  192. package/dist/core/codegen/docs-generator.js.map +0 -1
  193. package/dist/core/codegen/index.d.ts +0 -11
  194. package/dist/core/codegen/index.d.ts.map +0 -1
  195. package/dist/core/codegen/index.js +0 -13
  196. package/dist/core/codegen/index.js.map +0 -1
  197. package/dist/core/codegen/ts-generator.d.ts +0 -8
  198. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  199. package/dist/core/codegen/ts-generator.js +0 -8
  200. package/dist/core/codegen/ts-generator.js.map +0 -1
  201. package/dist/core/db-adapter/index.d.ts +0 -18
  202. package/dist/core/db-adapter/index.d.ts.map +0 -1
  203. package/dist/core/db-adapter/index.js +0 -23
  204. package/dist/core/db-adapter/index.js.map +0 -1
  205. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  206. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  207. package/dist/core/db-adapter/sync-engine.js +0 -342
  208. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  209. package/dist/core/logic-engine/engine.d.ts +0 -8
  210. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  211. package/dist/core/logic-engine/engine.js +0 -8
  212. package/dist/core/logic-engine/engine.js.map +0 -1
  213. package/dist/core/logic-engine/index.d.ts +0 -16
  214. package/dist/core/logic-engine/index.d.ts.map +0 -1
  215. package/dist/core/logic-engine/index.js +0 -16
  216. package/dist/core/logic-engine/index.js.map +0 -1
  217. package/dist/core/logic-engine/protocol.d.ts +0 -7
  218. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  219. package/dist/core/logic-engine/protocol.js +0 -7
  220. package/dist/core/logic-engine/protocol.js.map +0 -1
  221. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  222. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  223. package/dist/core/logic-engine/psf-adapter.js +0 -207
  224. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  225. package/dist/core/logic-engine/rules.d.ts +0 -7
  226. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  227. package/dist/core/logic-engine/rules.js +0 -7
  228. package/dist/core/logic-engine/rules.js.map +0 -1
  229. package/dist/core/schema-engine/compiler.d.ts +0 -198
  230. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  231. package/dist/core/schema-engine/compiler.js +0 -262
  232. package/dist/core/schema-engine/compiler.js.map +0 -1
  233. package/dist/core/schema-engine/generator.d.ts +0 -115
  234. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  235. package/dist/core/schema-engine/generator.js +0 -506
  236. package/dist/core/schema-engine/generator.js.map +0 -1
  237. package/dist/core/schema-engine/index.d.ts +0 -18
  238. package/dist/core/schema-engine/index.d.ts.map +0 -1
  239. package/dist/core/schema-engine/index.js +0 -18
  240. package/dist/core/schema-engine/index.js.map +0 -1
  241. package/dist/core/schema-engine/psf.d.ts +0 -612
  242. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  243. package/dist/core/schema-engine/psf.js +0 -45
  244. package/dist/core/schema-engine/psf.js.map +0 -1
  245. package/dist/core/schema-engine/types.d.ts +0 -10
  246. package/dist/core/schema-engine/types.d.ts.map +0 -1
  247. package/dist/core/schema-engine/types.js +0 -7
  248. package/dist/core/schema-engine/types.js.map +0 -1
  249. package/dist/core/schema-engine/validator.d.ts +0 -140
  250. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  251. package/dist/core/schema-engine/validator.js +0 -407
  252. package/dist/core/schema-engine/validator.js.map +0 -1
  253. package/dist/src/adapters/cli.d.ts +0 -43
  254. package/dist/src/adapters/cli.d.ts.map +0 -1
  255. package/dist/src/adapters/cli.js +0 -126
  256. package/dist/src/adapters/cli.js.map +0 -1
  257. package/dist/src/cli/commands/auth.d.ts +0 -26
  258. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  259. package/dist/src/cli/commands/auth.js +0 -233
  260. package/dist/src/cli/commands/auth.js.map +0 -1
  261. package/dist/src/cli/commands/build.d.ts +0 -23
  262. package/dist/src/cli/commands/build.d.ts.map +0 -1
  263. package/dist/src/cli/commands/build.js +0 -162
  264. package/dist/src/cli/commands/build.js.map +0 -1
  265. package/dist/src/cli/commands/canvas.d.ts +0 -23
  266. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  267. package/dist/src/cli/commands/canvas.js +0 -215
  268. package/dist/src/cli/commands/canvas.js.map +0 -1
  269. package/dist/src/cli/commands/cloud.d.ts +0 -27
  270. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  271. package/dist/src/cli/commands/cloud.js +0 -232
  272. package/dist/src/cli/commands/cloud.js.map +0 -1
  273. package/dist/src/cli/commands/create.d.ts +0 -21
  274. package/dist/src/cli/commands/create.d.ts.map +0 -1
  275. package/dist/src/cli/commands/create.js +0 -621
  276. package/dist/src/cli/commands/create.js.map +0 -1
  277. package/dist/src/cli/commands/dev.d.ts +0 -21
  278. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  279. package/dist/src/cli/commands/dev.js +0 -71
  280. package/dist/src/cli/commands/dev.js.map +0 -1
  281. package/dist/src/cli/commands/generate.d.ts +0 -25
  282. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  283. package/dist/src/cli/commands/generate.js +0 -168
  284. package/dist/src/cli/commands/generate.js.map +0 -1
  285. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  286. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/orchestrate.js +0 -150
  288. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  289. package/dist/src/cli/commands/verify.d.ts +0 -10
  290. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  291. package/dist/src/cli/commands/verify.js +0 -39
  292. package/dist/src/cli/commands/verify.js.map +0 -1
  293. package/dist/src/cli/index.d.ts +0 -8
  294. package/dist/src/cli/index.d.ts.map +0 -1
  295. package/dist/src/cli/index.js +0 -226
  296. package/dist/src/cli/index.js.map +0 -1
  297. package/dist/src/cloud/auth.d.ts +0 -51
  298. package/dist/src/cloud/auth.d.ts.map +0 -1
  299. package/dist/src/cloud/auth.js +0 -194
  300. package/dist/src/cloud/auth.js.map +0 -1
  301. package/dist/src/cloud/billing.d.ts +0 -184
  302. package/dist/src/cloud/billing.d.ts.map +0 -1
  303. package/dist/src/cloud/billing.js +0 -179
  304. package/dist/src/cloud/billing.js.map +0 -1
  305. package/dist/src/cloud/client.d.ts +0 -39
  306. package/dist/src/cloud/client.d.ts.map +0 -1
  307. package/dist/src/cloud/client.js +0 -176
  308. package/dist/src/cloud/client.js.map +0 -1
  309. package/dist/src/cloud/index.d.ts +0 -44
  310. package/dist/src/cloud/index.d.ts.map +0 -1
  311. package/dist/src/cloud/index.js +0 -44
  312. package/dist/src/cloud/index.js.map +0 -1
  313. package/dist/src/cloud/marketplace.d.ts +0 -166
  314. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  315. package/dist/src/cloud/marketplace.js +0 -159
  316. package/dist/src/cloud/marketplace.js.map +0 -1
  317. package/dist/src/cloud/provisioning.d.ts +0 -110
  318. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  319. package/dist/src/cloud/provisioning.js +0 -148
  320. package/dist/src/cloud/provisioning.js.map +0 -1
  321. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  322. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  323. package/dist/src/cloud/relay/endpoints.js +0 -217
  324. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  325. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  326. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/health/index.js +0 -9
  328. package/dist/src/cloud/relay/health/index.js.map +0 -1
  329. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/stats/index.js +0 -9
  332. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  333. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/sync/index.js +0 -9
  336. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  337. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/usage/index.js +0 -9
  340. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  341. package/dist/src/cloud/sponsors.d.ts +0 -81
  342. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  343. package/dist/src/cloud/sponsors.js +0 -130
  344. package/dist/src/cloud/sponsors.js.map +0 -1
  345. package/dist/src/cloud/types.d.ts +0 -169
  346. package/dist/src/cloud/types.d.ts.map +0 -1
  347. package/dist/src/cloud/types.js +0 -7
  348. package/dist/src/cloud/types.js.map +0 -1
  349. package/dist/src/components/index.d.ts.map +0 -1
  350. package/dist/src/components/index.js +0 -17
  351. package/dist/src/components/index.js.map +0 -1
  352. package/dist/src/core/actors.d.ts +0 -95
  353. package/dist/src/core/actors.d.ts.map +0 -1
  354. package/dist/src/core/actors.js +0 -158
  355. package/dist/src/core/actors.js.map +0 -1
  356. package/dist/src/core/component/generator.d.ts.map +0 -1
  357. package/dist/src/core/component/generator.js +0 -349
  358. package/dist/src/core/component/generator.js.map +0 -1
  359. package/dist/src/core/engine.d.ts +0 -92
  360. package/dist/src/core/engine.d.ts.map +0 -1
  361. package/dist/src/core/engine.js +0 -199
  362. package/dist/src/core/engine.js.map +0 -1
  363. package/dist/src/core/introspection.d.ts +0 -141
  364. package/dist/src/core/introspection.d.ts.map +0 -1
  365. package/dist/src/core/introspection.js +0 -208
  366. package/dist/src/core/introspection.js.map +0 -1
  367. package/dist/src/core/logic/generator.d.ts +0 -76
  368. package/dist/src/core/logic/generator.d.ts.map +0 -1
  369. package/dist/src/core/logic/generator.js +0 -370
  370. package/dist/src/core/logic/generator.js.map +0 -1
  371. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  372. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  373. package/dist/src/core/pluresdb/adapter.js +0 -73
  374. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  375. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  376. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/generator.js +0 -191
  378. package/dist/src/core/pluresdb/generator.js.map +0 -1
  379. package/dist/src/core/pluresdb/index.d.ts +0 -15
  380. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/index.js +0 -11
  382. package/dist/src/core/pluresdb/index.js.map +0 -1
  383. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  384. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  386. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  387. package/dist/src/core/pluresdb/store.d.ts +0 -199
  388. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/store.js +0 -344
  390. package/dist/src/core/pluresdb/store.js.map +0 -1
  391. package/dist/src/core/protocol.d.ts.map +0 -1
  392. package/dist/src/core/protocol.js +0 -46
  393. package/dist/src/core/protocol.js.map +0 -1
  394. package/dist/src/core/rules.d.ts +0 -120
  395. package/dist/src/core/rules.d.ts.map +0 -1
  396. package/dist/src/core/rules.js +0 -81
  397. package/dist/src/core/rules.js.map +0 -1
  398. package/dist/src/core/schema/loader.d.ts +0 -47
  399. package/dist/src/core/schema/loader.d.ts.map +0 -1
  400. package/dist/src/core/schema/loader.js +0 -189
  401. package/dist/src/core/schema/loader.js.map +0 -1
  402. package/dist/src/core/schema/normalize.d.ts +0 -72
  403. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  404. package/dist/src/core/schema/normalize.js +0 -190
  405. package/dist/src/core/schema/normalize.js.map +0 -1
  406. package/dist/src/core/schema/types.d.ts.map +0 -1
  407. package/dist/src/core/schema/types.js +0 -161
  408. package/dist/src/core/schema/types.js.map +0 -1
  409. package/dist/src/dsl/index.d.ts +0 -152
  410. package/dist/src/dsl/index.d.ts.map +0 -1
  411. package/dist/src/dsl/index.js +0 -132
  412. package/dist/src/dsl/index.js.map +0 -1
  413. package/dist/src/dsl.d.ts +0 -124
  414. package/dist/src/dsl.d.ts.map +0 -1
  415. package/dist/src/dsl.js +0 -130
  416. package/dist/src/dsl.js.map +0 -1
  417. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  418. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  419. package/dist/src/examples/advanced-todo/index.js +0 -222
  420. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  421. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  422. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  423. package/dist/src/examples/auth-basic/index.js +0 -122
  424. package/dist/src/examples/auth-basic/index.js.map +0 -1
  425. package/dist/src/examples/cart/index.d.ts +0 -19
  426. package/dist/src/examples/cart/index.d.ts.map +0 -1
  427. package/dist/src/examples/cart/index.js +0 -202
  428. package/dist/src/examples/cart/index.js.map +0 -1
  429. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  430. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  431. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  432. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  433. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  434. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  435. package/dist/src/examples/svelte-counter/index.js +0 -123
  436. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  437. package/dist/src/flows.d.ts +0 -125
  438. package/dist/src/flows.d.ts.map +0 -1
  439. package/dist/src/flows.js +0 -160
  440. package/dist/src/flows.js.map +0 -1
  441. package/dist/src/index.d.ts +0 -77
  442. package/dist/src/index.d.ts.map +0 -1
  443. package/dist/src/index.js +0 -64
  444. package/dist/src/index.js.map +0 -1
  445. package/dist/src/integrations/code-canvas.d.ts +0 -265
  446. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  447. package/dist/src/integrations/code-canvas.js +0 -451
  448. package/dist/src/integrations/code-canvas.js.map +0 -1
  449. package/dist/src/integrations/pluresdb.d.ts +0 -117
  450. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  451. package/dist/src/integrations/pluresdb.js +0 -117
  452. package/dist/src/integrations/pluresdb.js.map +0 -1
  453. package/dist/src/integrations/state-docs.d.ts +0 -191
  454. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  455. package/dist/src/integrations/state-docs.js +0 -515
  456. package/dist/src/integrations/state-docs.js.map +0 -1
  457. package/dist/src/integrations/svelte.d.ts.map +0 -1
  458. package/dist/src/integrations/svelte.js +0 -447
  459. package/dist/src/integrations/svelte.js.map +0 -1
  460. package/dist/src/integrations/tauri.d.ts +0 -360
  461. package/dist/src/integrations/tauri.d.ts.map +0 -1
  462. package/dist/src/integrations/tauri.js +0 -278
  463. package/dist/src/integrations/tauri.js.map +0 -1
  464. package/dist/src/integrations/unum.d.ts +0 -159
  465. package/dist/src/integrations/unum.d.ts.map +0 -1
  466. package/dist/src/integrations/unum.js +0 -240
  467. package/dist/src/integrations/unum.js.map +0 -1
  468. package/dist/src/registry.d.ts +0 -94
  469. package/dist/src/registry.d.ts.map +0 -1
  470. package/dist/src/registry.js +0 -181
  471. package/dist/src/registry.js.map +0 -1
  472. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  473. package/dist/src/runtime/terminal-adapter.js +0 -239
  474. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  475. package/dist/src/step.d.ts +0 -34
  476. package/dist/src/step.d.ts.map +0 -1
  477. package/dist/src/step.js +0 -111
  478. package/dist/src/step.js.map +0 -1
  479. package/dist/src/types.d.ts +0 -63
  480. package/dist/src/types.d.ts.map +0 -1
  481. package/dist/src/types.js +0 -6
  482. package/dist/src/types.js.map +0 -1
  483. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  484. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  485. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  486. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  487. package/dist/tools/cli/commands/index.d.ts +0 -7
  488. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  489. package/dist/tools/cli/commands/index.js +0 -7
  490. package/dist/tools/cli/commands/index.js.map +0 -1
  491. package/dist/tools/cli/index.d.ts +0 -8
  492. package/dist/tools/cli/index.d.ts.map +0 -1
  493. package/dist/tools/cli/index.js +0 -9
  494. package/dist/tools/cli/index.js.map +0 -1
  495. package/dist/tools/watcher/index.d.ts +0 -105
  496. package/dist/tools/watcher/index.d.ts.map +0 -1
  497. package/dist/tools/watcher/index.js +0 -213
  498. package/dist/tools/watcher/index.js.map +0 -1
  499. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  500. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-projection.js +0 -416
  502. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  503. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  504. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-state.js +0 -464
  506. package/dist/ui/canvas/canvas-state.js.map +0 -1
  507. package/dist/ui/canvas/components/index.d.ts +0 -95
  508. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/components/index.js +0 -19
  510. package/dist/ui/canvas/components/index.js.map +0 -1
  511. package/dist/ui/canvas/index.d.ts +0 -32
  512. package/dist/ui/canvas/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/index.js +0 -32
  514. package/dist/ui/canvas/index.js.map +0 -1
  515. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  516. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  517. package/dist/ui/canvas-inspector/src/server.js +0 -248
  518. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  520. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  522. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  523. package/dist/ui/svelte-generator/index.d.ts +0 -9
  524. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  525. package/dist/ui/svelte-generator/index.js +0 -11
  526. package/dist/ui/svelte-generator/index.js.map +0 -1
  527. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  528. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  530. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -9,6 +9,7 @@ This tutorial walks you through building a shopping cart with a multi-step check
9
9
  ## What You'll Build
10
10
 
11
11
  An e-commerce cart that:
12
+
12
13
  - Manages a product catalog
13
14
  - Handles cart operations (add, remove, update quantity)
14
15
  - Implements a multi-step checkout flow
@@ -24,7 +25,7 @@ Create the PSF schema for the e-commerce domain:
24
25
  "$version": "1.0.0",
25
26
  "id": "ecommerce-cart",
26
27
  "name": "E-commerce Cart",
27
-
28
+
28
29
  "models": [
29
30
  {
30
31
  "name": "Product",
@@ -121,21 +122,44 @@ interface CartContext {
121
122
  }
122
123
 
123
124
  // Facts
124
- export const ItemAddedToCart = defineFact<'ItemAddedToCart', { productId: string; quantity: number }>('ItemAddedToCart');
125
- export const ItemRemovedFromCart = defineFact<'ItemRemovedFromCart', { productId: string }>('ItemRemovedFromCart');
126
- export const QuantityUpdated = defineFact<'QuantityUpdated', { productId: string; newQuantity: number }>('QuantityUpdated');
125
+ export const ItemAddedToCart = defineFact<
126
+ 'ItemAddedToCart',
127
+ { productId: string; quantity: number }
128
+ >('ItemAddedToCart');
129
+ export const ItemRemovedFromCart = defineFact<'ItemRemovedFromCart', { productId: string }>(
130
+ 'ItemRemovedFromCart'
131
+ );
132
+ export const QuantityUpdated = defineFact<
133
+ 'QuantityUpdated',
134
+ { productId: string; newQuantity: number }
135
+ >('QuantityUpdated');
127
136
  export const CheckoutStarted = defineFact<'CheckoutStarted', {}>('CheckoutStarted');
128
- export const ShippingEntered = defineFact<'ShippingEntered', { address: ShippingAddress }>('ShippingEntered');
129
- export const PaymentProcessed = defineFact<'PaymentProcessed', { success: boolean }>('PaymentProcessed');
130
- export const OrderPlaced = defineFact<'OrderPlaced', { orderId: string; total: number }>('OrderPlaced');
137
+ export const ShippingEntered = defineFact<'ShippingEntered', { address: ShippingAddress }>(
138
+ 'ShippingEntered'
139
+ );
140
+ export const PaymentProcessed = defineFact<'PaymentProcessed', { success: boolean }>(
141
+ 'PaymentProcessed'
142
+ );
143
+ export const OrderPlaced = defineFact<'OrderPlaced', { orderId: string; total: number }>(
144
+ 'OrderPlaced'
145
+ );
131
146
  export const CartCleared = defineFact<'CartCleared', {}>('CartCleared');
132
147
 
133
148
  // Events
134
- export const ADD_TO_CART = defineEvent<'ADD_TO_CART', { productId: string; quantity: number }>('ADD_TO_CART');
135
- export const REMOVE_FROM_CART = defineEvent<'REMOVE_FROM_CART', { productId: string }>('REMOVE_FROM_CART');
136
- export const UPDATE_QUANTITY = defineEvent<'UPDATE_QUANTITY', { productId: string; quantity: number }>('UPDATE_QUANTITY');
149
+ export const ADD_TO_CART = defineEvent<'ADD_TO_CART', { productId: string; quantity: number }>(
150
+ 'ADD_TO_CART'
151
+ );
152
+ export const REMOVE_FROM_CART = defineEvent<'REMOVE_FROM_CART', { productId: string }>(
153
+ 'REMOVE_FROM_CART'
154
+ );
155
+ export const UPDATE_QUANTITY = defineEvent<
156
+ 'UPDATE_QUANTITY',
157
+ { productId: string; quantity: number }
158
+ >('UPDATE_QUANTITY');
137
159
  export const START_CHECKOUT = defineEvent<'START_CHECKOUT', {}>('START_CHECKOUT');
138
- export const ENTER_SHIPPING = defineEvent<'ENTER_SHIPPING', { address: ShippingAddress }>('ENTER_SHIPPING');
160
+ export const ENTER_SHIPPING = defineEvent<'ENTER_SHIPPING', { address: ShippingAddress }>(
161
+ 'ENTER_SHIPPING'
162
+ );
139
163
  export const ENTER_PAYMENT = defineEvent<'ENTER_PAYMENT', { method: string }>('ENTER_PAYMENT');
140
164
  export const CONFIRM_ORDER = defineEvent<'CONFIRM_ORDER', {}>('CONFIRM_ORDER');
141
165
  export const GO_BACK = defineEvent<'GO_BACK', {}>('GO_BACK');
@@ -148,20 +172,20 @@ const addToCartRule = defineRule<CartContext>({
148
172
  impl: (state, events) => {
149
173
  const event = events.find(ADD_TO_CART.is);
150
174
  if (!event) return [];
151
-
152
- const product = state.context.products.find(p => p.id === event.payload.productId);
175
+
176
+ const product = state.context.products.find((p) => p.id === event.payload.productId);
153
177
  if (!product) {
154
178
  state.context.lastError = 'Product not found';
155
179
  return [];
156
180
  }
157
-
181
+
158
182
  if (product.stock < event.payload.quantity) {
159
183
  state.context.lastError = 'Not enough stock';
160
184
  return [];
161
185
  }
162
-
186
+
163
187
  // Check if already in cart
164
- const existingItem = state.context.cart.find(i => i.productId === event.payload.productId);
188
+ const existingItem = state.context.cart.find((i) => i.productId === event.payload.productId);
165
189
  if (existingItem) {
166
190
  existingItem.quantity += event.payload.quantity;
167
191
  } else {
@@ -171,9 +195,14 @@ const addToCartRule = defineRule<CartContext>({
171
195
  priceAtAdd: product.price,
172
196
  });
173
197
  }
174
-
198
+
175
199
  state.context.lastError = null;
176
- return [ItemAddedToCart.create({ productId: event.payload.productId, quantity: event.payload.quantity })];
200
+ return [
201
+ ItemAddedToCart.create({
202
+ productId: event.payload.productId,
203
+ quantity: event.payload.quantity,
204
+ }),
205
+ ];
177
206
  },
178
207
  });
179
208
 
@@ -183,10 +212,10 @@ const removeFromCartRule = defineRule<CartContext>({
183
212
  impl: (state, events) => {
184
213
  const event = events.find(REMOVE_FROM_CART.is);
185
214
  if (!event) return [];
186
-
187
- state.context.cart = state.context.cart.filter(i => i.productId !== event.payload.productId);
215
+
216
+ state.context.cart = state.context.cart.filter((i) => i.productId !== event.payload.productId);
188
217
  state.context.lastError = null;
189
-
218
+
190
219
  return [ItemRemovedFromCart.create({ productId: event.payload.productId })];
191
220
  },
192
221
  });
@@ -197,24 +226,31 @@ const updateQuantityRule = defineRule<CartContext>({
197
226
  impl: (state, events) => {
198
227
  const event = events.find(UPDATE_QUANTITY.is);
199
228
  if (!event) return [];
200
-
201
- const item = state.context.cart.find(i => i.productId === event.payload.productId);
229
+
230
+ const item = state.context.cart.find((i) => i.productId === event.payload.productId);
202
231
  if (!item) return [];
203
-
204
- const product = state.context.products.find(p => p.id === event.payload.productId);
232
+
233
+ const product = state.context.products.find((p) => p.id === event.payload.productId);
205
234
  if (product && event.payload.quantity > product.stock) {
206
235
  state.context.lastError = 'Not enough stock';
207
236
  return [];
208
237
  }
209
-
238
+
210
239
  if (event.payload.quantity <= 0) {
211
- state.context.cart = state.context.cart.filter(i => i.productId !== event.payload.productId);
240
+ state.context.cart = state.context.cart.filter(
241
+ (i) => i.productId !== event.payload.productId
242
+ );
212
243
  } else {
213
244
  item.quantity = event.payload.quantity;
214
245
  }
215
-
246
+
216
247
  state.context.lastError = null;
217
- return [QuantityUpdated.create({ productId: event.payload.productId, newQuantity: event.payload.quantity })];
248
+ return [
249
+ QuantityUpdated.create({
250
+ productId: event.payload.productId,
251
+ newQuantity: event.payload.quantity,
252
+ }),
253
+ ];
218
254
  },
219
255
  });
220
256
 
@@ -224,15 +260,15 @@ const startCheckoutRule = defineRule<CartContext>({
224
260
  impl: (state, events) => {
225
261
  const event = events.find(START_CHECKOUT.is);
226
262
  if (!event) return [];
227
-
263
+
228
264
  if (state.context.cart.length === 0) {
229
265
  state.context.lastError = 'Cart is empty';
230
266
  return [];
231
267
  }
232
-
268
+
233
269
  state.context.checkoutStep = 'shipping';
234
270
  state.context.lastError = null;
235
-
271
+
236
272
  return [CheckoutStarted.create({})];
237
273
  },
238
274
  });
@@ -243,11 +279,11 @@ const enterShippingRule = defineRule<CartContext>({
243
279
  impl: (state, events) => {
244
280
  const event = events.find(ENTER_SHIPPING.is);
245
281
  if (!event) return [];
246
-
282
+
247
283
  state.context.shippingAddress = event.payload.address;
248
284
  state.context.checkoutStep = 'payment';
249
285
  state.context.lastError = null;
250
-
286
+
251
287
  return [ShippingEntered.create({ address: event.payload.address })];
252
288
  },
253
289
  });
@@ -258,11 +294,11 @@ const enterPaymentRule = defineRule<CartContext>({
258
294
  impl: (state, events) => {
259
295
  const event = events.find(ENTER_PAYMENT.is);
260
296
  if (!event) return [];
261
-
297
+
262
298
  state.context.paymentMethod = event.payload.method;
263
299
  state.context.checkoutStep = 'confirmation';
264
300
  state.context.lastError = null;
265
-
301
+
266
302
  return [];
267
303
  },
268
304
  });
@@ -273,17 +309,17 @@ const confirmOrderRule = defineRule<CartContext>({
273
309
  impl: (state, events) => {
274
310
  const event = events.find(CONFIRM_ORDER.is);
275
311
  if (!event) return [];
276
-
312
+
277
313
  if (!state.context.shippingAddress || !state.context.paymentMethod) {
278
314
  state.context.lastError = 'Missing checkout information';
279
315
  return [];
280
316
  }
281
-
317
+
282
318
  // Calculate total
283
319
  const total = state.context.cart.reduce((sum, item) => {
284
- return sum + (item.priceAtAdd * item.quantity);
320
+ return sum + item.priceAtAdd * item.quantity;
285
321
  }, 0);
286
-
322
+
287
323
  // Create order
288
324
  const orderId = `order_${Date.now().toString(36)}`;
289
325
  const order: Order = {
@@ -294,24 +330,24 @@ const confirmOrderRule = defineRule<CartContext>({
294
330
  shippingAddress: state.context.shippingAddress,
295
331
  createdAt: new Date(),
296
332
  };
297
-
333
+
298
334
  state.context.orders.push(order);
299
-
335
+
300
336
  // Update stock
301
337
  for (const item of state.context.cart) {
302
- const product = state.context.products.find(p => p.id === item.productId);
338
+ const product = state.context.products.find((p) => p.id === item.productId);
303
339
  if (product) {
304
340
  product.stock -= item.quantity;
305
341
  }
306
342
  }
307
-
343
+
308
344
  // Clear cart and reset checkout
309
345
  state.context.cart = [];
310
346
  state.context.checkoutStep = 'cart';
311
347
  state.context.shippingAddress = null;
312
348
  state.context.paymentMethod = null;
313
349
  state.context.lastError = null;
314
-
350
+
315
351
  return [
316
352
  PaymentProcessed.create({ success: true }),
317
353
  OrderPlaced.create({ orderId, total }),
@@ -326,14 +362,14 @@ const goBackRule = defineRule<CartContext>({
326
362
  impl: (state, events) => {
327
363
  const event = events.find(GO_BACK.is);
328
364
  if (!event) return [];
329
-
365
+
330
366
  const stepOrder: CheckoutStep[] = ['cart', 'shipping', 'payment', 'confirmation'];
331
367
  const currentIndex = stepOrder.indexOf(state.context.checkoutStep);
332
-
368
+
333
369
  if (currentIndex > 0) {
334
370
  state.context.checkoutStep = stepOrder[currentIndex - 1];
335
371
  }
336
-
372
+
337
373
  return [];
338
374
  },
339
375
  });
@@ -344,12 +380,12 @@ const clearCartRule = defineRule<CartContext>({
344
380
  impl: (state, events) => {
345
381
  const event = events.find(CLEAR_CART.is);
346
382
  if (!event) return [];
347
-
383
+
348
384
  state.context.cart = [];
349
385
  state.context.checkoutStep = 'cart';
350
386
  state.context.shippingAddress = null;
351
387
  state.context.paymentMethod = null;
352
-
388
+
353
389
  return [CartCleared.create({})];
354
390
  },
355
391
  });
@@ -366,7 +402,7 @@ const maxCartItemsConstraint = defineConstraint<CartContext>({
366
402
  const maxQuantityConstraint = defineConstraint<CartContext>({
367
403
  id: 'cart.maxQuantity',
368
404
  description: 'Cannot order more than 10 of each item',
369
- check: (state) => state.context.cart.every(item => item.quantity <= 10),
405
+ check: (state) => state.context.cart.every((item) => item.quantity <= 10),
370
406
  errorMessage: 'Cannot order more than 10 of each item',
371
407
  severity: 'error',
372
408
  });
@@ -376,7 +412,7 @@ const stockConstraint = defineConstraint<CartContext>({
376
412
  description: 'Cart items must be in stock',
377
413
  check: (state) => {
378
414
  for (const item of state.context.cart) {
379
- const product = state.context.products.find(p => p.id === item.productId);
415
+ const product = state.context.products.find((p) => p.id === item.productId);
380
416
  if (!product || product.stock < item.quantity) {
381
417
  return false;
382
418
  }
@@ -404,11 +440,46 @@ registry.registerConstraint(stockConstraint);
404
440
 
405
441
  // Sample products
406
442
  const sampleProducts: Product[] = [
407
- { id: 'p1', name: 'Laptop', description: 'High-performance laptop', price: 999.99, stock: 10, imageUrl: '' },
408
- { id: 'p2', name: 'Headphones', description: 'Wireless headphones', price: 149.99, stock: 25, imageUrl: '' },
409
- { id: 'p3', name: 'Keyboard', description: 'Mechanical keyboard', price: 79.99, stock: 50, imageUrl: '' },
410
- { id: 'p4', name: 'Mouse', description: 'Wireless mouse', price: 49.99, stock: 100, imageUrl: '' },
411
- { id: 'p5', name: 'Monitor', description: '27" 4K monitor', price: 399.99, stock: 5, imageUrl: '' },
443
+ {
444
+ id: 'p1',
445
+ name: 'Laptop',
446
+ description: 'High-performance laptop',
447
+ price: 999.99,
448
+ stock: 10,
449
+ imageUrl: '',
450
+ },
451
+ {
452
+ id: 'p2',
453
+ name: 'Headphones',
454
+ description: 'Wireless headphones',
455
+ price: 149.99,
456
+ stock: 25,
457
+ imageUrl: '',
458
+ },
459
+ {
460
+ id: 'p3',
461
+ name: 'Keyboard',
462
+ description: 'Mechanical keyboard',
463
+ price: 79.99,
464
+ stock: 50,
465
+ imageUrl: '',
466
+ },
467
+ {
468
+ id: 'p4',
469
+ name: 'Mouse',
470
+ description: 'Wireless mouse',
471
+ price: 49.99,
472
+ stock: 100,
473
+ imageUrl: '',
474
+ },
475
+ {
476
+ id: 'p5',
477
+ name: 'Monitor',
478
+ description: '27" 4K monitor',
479
+ price: 399.99,
480
+ stock: 5,
481
+ imageUrl: '',
482
+ },
412
483
  ];
413
484
 
414
485
  // Engine factory
@@ -430,7 +501,7 @@ export function createCartEngine() {
430
501
 
431
502
  // Helper functions
432
503
  export function getCartTotal(context: CartContext): number {
433
- return context.cart.reduce((sum, item) => sum + (item.priceAtAdd * item.quantity), 0);
504
+ return context.cart.reduce((sum, item) => sum + item.priceAtAdd * item.quantity, 0);
434
505
  }
435
506
 
436
507
  export function getCartItemCount(context: CartContext): number {
@@ -463,22 +534,24 @@ import {
463
534
 
464
535
  async function main() {
465
536
  console.log('🛒 E-commerce Cart Demo\n');
466
-
537
+
467
538
  const engine = createCartEngine();
468
-
539
+
469
540
  // Helper to display cart
470
541
  function displayCart() {
471
542
  const ctx = engine.getContext();
472
543
  console.log('\n📦 Cart:');
473
544
  console.log('─'.repeat(50));
474
-
545
+
475
546
  if (ctx.cart.length === 0) {
476
547
  console.log(' (empty)');
477
548
  } else {
478
549
  ctx.cart.forEach((item, i) => {
479
- const product = ctx.products.find(p => p.id === item.productId)!;
550
+ const product = ctx.products.find((p) => p.id === item.productId)!;
480
551
  const subtotal = item.quantity * item.priceAtAdd;
481
- console.log(` ${i + 1}. ${product.name} x${item.quantity} @ $${item.priceAtAdd.toFixed(2)} = $${subtotal.toFixed(2)}`);
552
+ console.log(
553
+ ` ${i + 1}. ${product.name} x${item.quantity} @ $${item.priceAtAdd.toFixed(2)} = $${subtotal.toFixed(2)}`
554
+ );
482
555
  });
483
556
  console.log('─'.repeat(50));
484
557
  console.log(` Items: ${getCartItemCount(ctx)}`);
@@ -486,65 +559,73 @@ async function main() {
486
559
  }
487
560
  console.log('');
488
561
  }
489
-
562
+
490
563
  // Display products
491
564
  console.log('📋 Available Products:');
492
565
  engine.getContext().products.forEach((p, i) => {
493
566
  console.log(` ${i + 1}. ${p.name} - $${p.price.toFixed(2)} (${p.stock} in stock)`);
494
567
  });
495
-
568
+
496
569
  displayCart();
497
-
570
+
498
571
  // Add items to cart
499
572
  console.log('Adding items to cart...');
500
573
  engine.dispatch([ADD_TO_CART.create({ productId: 'p1', quantity: 1 })]); // Laptop
501
574
  engine.dispatch([ADD_TO_CART.create({ productId: 'p2', quantity: 2 })]); // Headphones x2
502
575
  engine.dispatch([ADD_TO_CART.create({ productId: 'p4', quantity: 1 })]); // Mouse
503
-
576
+
504
577
  displayCart();
505
-
578
+
506
579
  // Update quantity
507
580
  console.log('Updating headphones quantity to 3...');
508
581
  engine.dispatch([UPDATE_QUANTITY.create({ productId: 'p2', quantity: 3 })]);
509
-
582
+
510
583
  displayCart();
511
-
584
+
512
585
  // Start checkout
513
586
  console.log('Starting checkout...');
514
587
  engine.dispatch([START_CHECKOUT.create({})]);
515
- console.log(`Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`);
516
-
588
+ console.log(
589
+ `Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`
590
+ );
591
+
517
592
  // Enter shipping
518
593
  console.log('\nEntering shipping information...');
519
- engine.dispatch([ENTER_SHIPPING.create({
520
- address: {
521
- name: 'John Doe',
522
- street: '123 Main St',
523
- city: 'San Francisco',
524
- state: 'CA',
525
- zip: '94105',
526
- country: 'USA',
527
- },
528
- })]);
529
- console.log(`Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`);
530
-
594
+ engine.dispatch([
595
+ ENTER_SHIPPING.create({
596
+ address: {
597
+ name: 'John Doe',
598
+ street: '123 Main St',
599
+ city: 'San Francisco',
600
+ state: 'CA',
601
+ zip: '94105',
602
+ country: 'USA',
603
+ },
604
+ }),
605
+ ]);
606
+ console.log(
607
+ `Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`
608
+ );
609
+
531
610
  // Enter payment
532
611
  console.log('\nEntering payment method...');
533
612
  engine.dispatch([ENTER_PAYMENT.create({ method: 'credit_card' })]);
534
- console.log(`Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`);
535
-
613
+ console.log(
614
+ `Checkout step: ${engine.getContext().checkoutStep} (${getCheckoutStepNumber(engine.getContext().checkoutStep)}/4)`
615
+ );
616
+
536
617
  // Confirm order
537
618
  console.log('\nConfirming order...');
538
619
  const result = engine.step([CONFIRM_ORDER.create({})]);
539
-
620
+
540
621
  // Check for order confirmation
541
- const orderPlaced = result.state.facts.find(f => f.tag === 'OrderPlaced');
622
+ const orderPlaced = result.state.facts.find((f) => f.tag === 'OrderPlaced');
542
623
  if (orderPlaced) {
543
624
  console.log('✅ Order placed successfully!');
544
625
  console.log(` Order ID: ${(orderPlaced.payload as any).orderId}`);
545
626
  console.log(` Total: $${(orderPlaced.payload as any).total.toFixed(2)}`);
546
627
  }
547
-
628
+
548
629
  // Display orders
549
630
  console.log('\n📋 Orders:');
550
631
  console.log('─'.repeat(50));
@@ -555,15 +636,15 @@ async function main() {
555
636
  console.log(` Items: ${order.items.length}`);
556
637
  console.log(` Created: ${order.createdAt.toLocaleString()}`);
557
638
  });
558
-
639
+
559
640
  // Show updated stock
560
641
  console.log('\n📦 Updated Stock:');
561
642
  engine.getContext().products.forEach((p, i) => {
562
643
  console.log(` ${i + 1}. ${p.name} - ${p.stock} in stock`);
563
644
  });
564
-
645
+
565
646
  displayCart();
566
-
647
+
567
648
  console.log('🎉 Done!');
568
649
  }
569
650
 
@@ -601,9 +682,10 @@ Enforcing business rules:
601
682
 
602
683
  ```typescript
603
684
  const stockConstraint = defineConstraint({
604
- check: (state) => state.context.cart.every(item =>
605
- products.find(p => p.id === item.productId)?.stock >= item.quantity
606
- ),
685
+ check: (state) =>
686
+ state.context.cart.every(
687
+ (item) => products.find((p) => p.id === item.productId)?.stock >= item.quantity
688
+ ),
607
689
  });
608
690
  ```
609
691