@plures/praxis 1.0.2 → 1.1.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 (518) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/LICENSE +21 -21
  3. package/README.md +162 -375
  4. package/core/codegen/docs-generator.ts +5 -2
  5. package/core/codegen/index.ts +1 -1
  6. package/core/codegen/ts-generator.ts +15 -15
  7. package/core/db-adapter/index.ts +2 -2
  8. package/core/db-adapter/sync-engine.ts +17 -6
  9. package/core/logic-engine/engine.ts +1 -1
  10. package/core/logic-engine/index.ts +2 -2
  11. package/core/logic-engine/protocol.ts +1 -1
  12. package/core/logic-engine/psf-adapter.ts +8 -4
  13. package/core/logic-engine/rules.ts +1 -1
  14. package/core/schema-engine/compiler.ts +53 -11
  15. package/core/schema-engine/generator.ts +17 -7
  16. package/core/schema-engine/index.ts +2 -2
  17. package/core/schema-engine/psf.ts +12 -3
  18. package/core/schema-engine/types.ts +3 -11
  19. package/core/schema-engine/validator.ts +112 -22
  20. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  21. package/dist/browser/index.d.ts +3004 -0
  22. package/dist/browser/index.js +2892 -0
  23. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  24. package/dist/browser/integrations/svelte.js +298 -0
  25. package/dist/node/auth-STARLY7I.js +207 -0
  26. package/dist/node/build-Y7OT5VBF.js +144 -0
  27. package/dist/node/canvas-UERZHJYW.js +362 -0
  28. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  29. package/dist/node/chunk-FXQZXAWF.js +175 -0
  30. package/dist/node/chunk-N5Y37EUV.js +202 -0
  31. package/dist/node/chunk-QGM4M3NI.js +37 -0
  32. package/dist/node/chunk-RJMWCNHR.js +175 -0
  33. package/dist/node/chunk-SRM3OPPM.js +404 -0
  34. package/dist/node/chunk-UATVJBNV.js +175 -0
  35. package/dist/node/chunk-UY7YEBE2.js +159 -0
  36. package/dist/node/chunk-XCY2VIFX.js +143 -0
  37. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  38. package/dist/node/cli/index.cjs +217418 -0
  39. package/dist/node/cli/index.d.cts +1 -0
  40. package/dist/node/cli/index.d.ts +1 -0
  41. package/dist/node/cli/index.js +690 -0
  42. package/dist/node/cloud/index.cjs +1043 -0
  43. package/dist/node/cloud/index.d.cts +864 -0
  44. package/dist/node/cloud/index.d.ts +864 -0
  45. package/dist/node/cloud/index.js +456 -0
  46. package/dist/node/cloud-AXOK4PSN.js +212 -0
  47. package/dist/node/component.cjs +374 -0
  48. package/dist/node/component.d.cts +125 -0
  49. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  50. package/dist/node/component.js +9 -0
  51. package/dist/node/components/index.cjs +216 -0
  52. package/dist/node/components/index.d.cts +43 -0
  53. package/dist/{src → node}/components/index.d.ts +8 -8
  54. package/dist/node/components/index.js +7 -0
  55. package/dist/node/create-TRLSVCNQ.js +584 -0
  56. package/dist/node/dev-PMJZUYGE.js +65 -0
  57. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  58. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  59. package/dist/node/index.cjs +3247 -0
  60. package/dist/node/index.d.cts +2579 -0
  61. package/dist/node/index.d.ts +2579 -0
  62. package/dist/node/index.js +2098 -0
  63. package/dist/node/integrations/svelte.cjs +330 -0
  64. package/dist/node/integrations/svelte.d.cts +309 -0
  65. package/dist/node/integrations/svelte.d.ts +309 -0
  66. package/dist/node/integrations/svelte.js +300 -0
  67. package/dist/node/orchestrate-737TCL5H.js +127 -0
  68. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  69. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  70. package/dist/node/schema.cjs +200 -0
  71. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  72. package/dist/node/schema.d.ts +371 -0
  73. package/dist/node/schema.js +9 -0
  74. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  75. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  76. package/dist/node/verify-YBZ7W24H.js +213239 -0
  77. package/docs/MONETIZATION.md +21 -16
  78. package/docs/REACTIVE_REDESIGN.md +132 -0
  79. package/docs/README.md +47 -36
  80. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  81. package/docs/TERMINAL_NODE.md +27 -24
  82. package/docs/core/building-extensions.md +58 -61
  83. package/docs/core/cli-usage.md +59 -59
  84. package/docs/core/code-canvas-sync.md +28 -16
  85. package/docs/core/logic-engine.md +77 -82
  86. package/docs/core/pluresdb-integration.md +29 -39
  87. package/docs/core/schema-model.md +66 -52
  88. package/docs/core/ui-generation.md +57 -49
  89. package/docs/core/what-is-praxis.md +32 -15
  90. package/docs/guides/canvas.md +21 -5
  91. package/docs/guides/getting-started.md +13 -7
  92. package/docs/guides/history-state-pattern.md +65 -51
  93. package/docs/guides/orchestration.md +46 -32
  94. package/docs/guides/parallel-state-pattern.md +56 -72
  95. package/docs/guides/svelte-integration.md +45 -53
  96. package/docs/tutorials/README.md +16 -0
  97. package/docs/tutorials/ecommerce-cart.md +177 -95
  98. package/docs/tutorials/first-app.md +26 -41
  99. package/docs/tutorials/form-builder.md +191 -138
  100. package/docs/tutorials/todo-pluresdb.md +71 -69
  101. package/package.json +132 -96
  102. package/src/__tests__/actors.test.ts +68 -68
  103. package/src/__tests__/billing.test.ts +32 -32
  104. package/src/__tests__/canvas-components.test.ts +94 -73
  105. package/src/__tests__/cli-create.test.ts +28 -28
  106. package/src/__tests__/cloud.test.ts +36 -36
  107. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  108. package/src/__tests__/docs-generator.test.ts +3 -9
  109. package/src/__tests__/dsl.test.ts +58 -64
  110. package/src/__tests__/edge-cases.test.ts +106 -108
  111. package/src/__tests__/engine.test.ts +51 -25
  112. package/src/__tests__/generators.test.ts +42 -44
  113. package/src/__tests__/introspection.test.ts +104 -114
  114. package/src/__tests__/pluresdb.test.ts +189 -187
  115. package/src/__tests__/protocol.test.ts +15 -15
  116. package/src/__tests__/provisioning.test.ts +61 -61
  117. package/src/__tests__/schema.test.ts +7 -11
  118. package/src/__tests__/state-docs-integration.test.ts +162 -145
  119. package/src/__tests__/svelte-integration.test.ts +16 -19
  120. package/src/__tests__/tauri-integration.test.ts +149 -147
  121. package/src/__tests__/terminal-node.test.ts +12 -7
  122. package/src/__tests__/unum-integration.test.ts +68 -68
  123. package/src/adapters/cli.ts +21 -15
  124. package/src/cli/commands/auth.ts +82 -78
  125. package/src/cli/commands/build.ts +29 -27
  126. package/src/cli/commands/canvas.ts +338 -127
  127. package/src/cli/commands/cloud.ts +47 -47
  128. package/src/cli/commands/create.ts +59 -47
  129. package/src/cli/commands/dev.ts +12 -12
  130. package/src/cli/commands/generate.ts +29 -40
  131. package/src/cli/commands/orchestrate.ts +24 -24
  132. package/src/cli/commands/verify.ts +49 -0
  133. package/src/cli/index.ts +21 -2
  134. package/src/cloud/README.md +28 -15
  135. package/src/cloud/auth.ts +55 -70
  136. package/src/cloud/billing.ts +59 -58
  137. package/src/cloud/client.ts +29 -35
  138. package/src/cloud/index.ts +19 -40
  139. package/src/cloud/marketplace.ts +69 -78
  140. package/src/cloud/provisioning.ts +42 -51
  141. package/src/cloud/relay/endpoints.ts +30 -34
  142. package/src/cloud/relay/health/index.ts +1 -1
  143. package/src/cloud/relay/stats/index.ts +1 -1
  144. package/src/cloud/relay/sync/index.ts +1 -1
  145. package/src/cloud/relay/usage/index.ts +1 -1
  146. package/src/cloud/sponsors.ts +31 -34
  147. package/src/cloud/types.ts +4 -4
  148. package/src/components/README.md +1 -0
  149. package/src/components/TerminalNode.svelte +457 -457
  150. package/src/components/index.ts +3 -4
  151. package/src/core/actors.ts +7 -7
  152. package/src/core/component/generator.ts +10 -28
  153. package/src/core/engine.ts +51 -24
  154. package/src/core/introspection.ts +37 -35
  155. package/src/core/logic/generator.ts +62 -62
  156. package/src/core/pluresdb/adapter.ts +8 -8
  157. package/src/core/pluresdb/generator.ts +39 -35
  158. package/src/core/pluresdb/index.ts +9 -12
  159. package/src/core/pluresdb/schema-registry.ts +22 -25
  160. package/src/core/pluresdb/store.ts +57 -57
  161. package/src/core/protocol.ts +14 -14
  162. package/src/core/reactive-engine.svelte.ts +65 -0
  163. package/src/core/reactive-engine.ts +67 -0
  164. package/src/core/rules.ts +4 -4
  165. package/src/core/schema/loader.common.ts +150 -0
  166. package/src/core/schema/loader.ts +19 -149
  167. package/src/core/schema/normalize.ts +34 -51
  168. package/src/core/schema/types.ts +47 -11
  169. package/src/dsl/index.ts +8 -8
  170. package/src/dsl.ts +11 -17
  171. package/src/examples/advanced-todo/App.svelte +506 -506
  172. package/src/examples/advanced-todo/README.md +58 -40
  173. package/src/examples/advanced-todo/index.ts +3 -3
  174. package/src/examples/auth-basic/index.ts +30 -30
  175. package/src/examples/cart/index.ts +50 -50
  176. package/src/examples/hero-ecommerce/index.ts +130 -157
  177. package/src/examples/svelte-counter/index.ts +22 -26
  178. package/src/flows.ts +6 -17
  179. package/src/index.browser.ts +204 -0
  180. package/src/index.ts +37 -42
  181. package/src/integrations/code-canvas.ts +237 -193
  182. package/src/integrations/pluresdb.ts +55 -35
  183. package/src/integrations/state-docs.ts +104 -104
  184. package/src/integrations/svelte.ts +35 -35
  185. package/src/integrations/tauri.ts +75 -73
  186. package/src/integrations/unum.ts +68 -61
  187. package/src/registry.ts +7 -14
  188. package/src/runtime/terminal-adapter.ts +31 -26
  189. package/src/step.ts +10 -16
  190. package/src/types.ts +1 -1
  191. package/templates/basic-app/README.md +6 -9
  192. package/templates/fullstack-app/README.md +10 -0
  193. package/dist/core/codegen/docs-generator.d.ts +0 -123
  194. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  195. package/dist/core/codegen/docs-generator.js +0 -674
  196. package/dist/core/codegen/docs-generator.js.map +0 -1
  197. package/dist/core/codegen/index.d.ts +0 -11
  198. package/dist/core/codegen/index.d.ts.map +0 -1
  199. package/dist/core/codegen/index.js +0 -13
  200. package/dist/core/codegen/index.js.map +0 -1
  201. package/dist/core/codegen/ts-generator.d.ts +0 -8
  202. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  203. package/dist/core/codegen/ts-generator.js +0 -8
  204. package/dist/core/codegen/ts-generator.js.map +0 -1
  205. package/dist/core/db-adapter/index.d.ts +0 -18
  206. package/dist/core/db-adapter/index.d.ts.map +0 -1
  207. package/dist/core/db-adapter/index.js +0 -23
  208. package/dist/core/db-adapter/index.js.map +0 -1
  209. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  210. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  211. package/dist/core/db-adapter/sync-engine.js +0 -342
  212. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  213. package/dist/core/logic-engine/engine.d.ts +0 -8
  214. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  215. package/dist/core/logic-engine/engine.js +0 -8
  216. package/dist/core/logic-engine/engine.js.map +0 -1
  217. package/dist/core/logic-engine/index.d.ts +0 -16
  218. package/dist/core/logic-engine/index.d.ts.map +0 -1
  219. package/dist/core/logic-engine/index.js +0 -16
  220. package/dist/core/logic-engine/index.js.map +0 -1
  221. package/dist/core/logic-engine/protocol.d.ts +0 -7
  222. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  223. package/dist/core/logic-engine/protocol.js +0 -7
  224. package/dist/core/logic-engine/protocol.js.map +0 -1
  225. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  226. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  227. package/dist/core/logic-engine/psf-adapter.js +0 -207
  228. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  229. package/dist/core/logic-engine/rules.d.ts +0 -7
  230. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  231. package/dist/core/logic-engine/rules.js +0 -7
  232. package/dist/core/logic-engine/rules.js.map +0 -1
  233. package/dist/core/schema-engine/compiler.d.ts +0 -198
  234. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  235. package/dist/core/schema-engine/compiler.js +0 -262
  236. package/dist/core/schema-engine/compiler.js.map +0 -1
  237. package/dist/core/schema-engine/generator.d.ts +0 -115
  238. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  239. package/dist/core/schema-engine/generator.js +0 -506
  240. package/dist/core/schema-engine/generator.js.map +0 -1
  241. package/dist/core/schema-engine/index.d.ts +0 -18
  242. package/dist/core/schema-engine/index.d.ts.map +0 -1
  243. package/dist/core/schema-engine/index.js +0 -18
  244. package/dist/core/schema-engine/index.js.map +0 -1
  245. package/dist/core/schema-engine/psf.d.ts +0 -612
  246. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  247. package/dist/core/schema-engine/psf.js +0 -45
  248. package/dist/core/schema-engine/psf.js.map +0 -1
  249. package/dist/core/schema-engine/types.d.ts +0 -10
  250. package/dist/core/schema-engine/types.d.ts.map +0 -1
  251. package/dist/core/schema-engine/types.js +0 -7
  252. package/dist/core/schema-engine/types.js.map +0 -1
  253. package/dist/core/schema-engine/validator.d.ts +0 -140
  254. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  255. package/dist/core/schema-engine/validator.js +0 -407
  256. package/dist/core/schema-engine/validator.js.map +0 -1
  257. package/dist/src/adapters/cli.d.ts +0 -43
  258. package/dist/src/adapters/cli.d.ts.map +0 -1
  259. package/dist/src/adapters/cli.js +0 -126
  260. package/dist/src/adapters/cli.js.map +0 -1
  261. package/dist/src/cli/commands/auth.d.ts +0 -26
  262. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  263. package/dist/src/cli/commands/auth.js +0 -233
  264. package/dist/src/cli/commands/auth.js.map +0 -1
  265. package/dist/src/cli/commands/build.d.ts +0 -23
  266. package/dist/src/cli/commands/build.d.ts.map +0 -1
  267. package/dist/src/cli/commands/build.js +0 -162
  268. package/dist/src/cli/commands/build.js.map +0 -1
  269. package/dist/src/cli/commands/canvas.d.ts +0 -23
  270. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  271. package/dist/src/cli/commands/canvas.js +0 -215
  272. package/dist/src/cli/commands/canvas.js.map +0 -1
  273. package/dist/src/cli/commands/cloud.d.ts +0 -27
  274. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  275. package/dist/src/cli/commands/cloud.js +0 -232
  276. package/dist/src/cli/commands/cloud.js.map +0 -1
  277. package/dist/src/cli/commands/create.d.ts +0 -21
  278. package/dist/src/cli/commands/create.d.ts.map +0 -1
  279. package/dist/src/cli/commands/create.js +0 -621
  280. package/dist/src/cli/commands/create.js.map +0 -1
  281. package/dist/src/cli/commands/dev.d.ts +0 -21
  282. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  283. package/dist/src/cli/commands/dev.js +0 -71
  284. package/dist/src/cli/commands/dev.js.map +0 -1
  285. package/dist/src/cli/commands/generate.d.ts +0 -25
  286. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/generate.js +0 -168
  288. package/dist/src/cli/commands/generate.js.map +0 -1
  289. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  290. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  291. package/dist/src/cli/commands/orchestrate.js +0 -150
  292. package/dist/src/cli/commands/orchestrate.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 -211
  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/cli/commands/index.d.ts +0 -7
  484. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  485. package/dist/tools/cli/commands/index.js +0 -7
  486. package/dist/tools/cli/commands/index.js.map +0 -1
  487. package/dist/tools/cli/index.d.ts +0 -8
  488. package/dist/tools/cli/index.d.ts.map +0 -1
  489. package/dist/tools/cli/index.js +0 -9
  490. package/dist/tools/cli/index.js.map +0 -1
  491. package/dist/tools/watcher/index.d.ts +0 -105
  492. package/dist/tools/watcher/index.d.ts.map +0 -1
  493. package/dist/tools/watcher/index.js +0 -213
  494. package/dist/tools/watcher/index.js.map +0 -1
  495. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  496. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  497. package/dist/ui/canvas/canvas-projection.js +0 -416
  498. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  499. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  500. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-state.js +0 -464
  502. package/dist/ui/canvas/canvas-state.js.map +0 -1
  503. package/dist/ui/canvas/components/index.d.ts +0 -95
  504. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  505. package/dist/ui/canvas/components/index.js +0 -19
  506. package/dist/ui/canvas/components/index.js.map +0 -1
  507. package/dist/ui/canvas/index.d.ts +0 -32
  508. package/dist/ui/canvas/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/index.js +0 -32
  510. package/dist/ui/canvas/index.js.map +0 -1
  511. package/dist/ui/svelte-generator/index.d.ts +0 -9
  512. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  513. package/dist/ui/svelte-generator/index.js +0 -11
  514. package/dist/ui/svelte-generator/index.js.map +0 -1
  515. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  516. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  517. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  518. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -5,6 +5,7 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
5
5
  ## Features
6
6
 
7
7
  ### Core Functionality
8
+
8
9
  - ✅ Add, complete, and remove todos
9
10
  - ✅ Filter by all, active, or completed
10
11
  - ✅ Complete all todos at once
@@ -12,6 +13,7 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
12
13
  - ✅ Real-time statistics
13
14
 
14
15
  ### Advanced Features
16
+
15
17
  - 🔄 **Undo/Redo**: Full history tracking with keyboard shortcuts
16
18
  - 🕰️ **Time-Travel Debugging**: Navigate through state snapshots
17
19
  - ⚡ **Svelte 5 Runes**: Modern reactive API
@@ -21,12 +23,14 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
21
23
  ## Architecture
22
24
 
23
25
  ### State Management
26
+
24
27
  - **Engine**: Praxis logic engine managing todo state
25
28
  - **Rules**: Pure functions handling events
26
29
  - **Facts**: Immutable history of what happened
27
30
  - **Context**: Current application state
28
31
 
29
32
  ### Svelte Integration
33
+
30
34
  - **usePraxisEngine**: Main composable with history support
31
35
  - **Reactive Derivations**: Computed values with `$:` syntax
32
36
  - **Event Dispatching**: Type-safe event handling
@@ -71,7 +75,7 @@ export function createTodoEngine() {
71
75
  const registry = new PraxisRegistry<TodoContext>();
72
76
  registry.registerRule(addTodoRule);
73
77
  // ... register more rules
74
-
78
+
75
79
  return createPraxisEngine({
76
80
  initialContext: { todos: [], filter: 'all', nextId: 1 },
77
81
  registry,
@@ -127,6 +131,7 @@ node dist/examples/advanced-todo/index.js
127
131
  ```
128
132
 
129
133
  Output:
134
+
130
135
  ```
131
136
  === Advanced Todo Example ===
132
137
 
@@ -157,11 +162,13 @@ Output:
157
162
  To use the Svelte component in your app:
158
163
 
159
164
  1. Install dependencies:
165
+
160
166
  ```bash
161
167
  npm install @plures/praxis svelte@^5.0.0
162
168
  ```
163
169
 
164
170
  2. Import and use the component:
171
+
165
172
  ```svelte
166
173
  <script>
167
174
  import TodoApp from '@plures/praxis/examples/advanced-todo/App.svelte';
@@ -179,7 +186,7 @@ Or create your own component using the engine:
179
186
 
180
187
  const engine = createTodoEngine();
181
188
  const { context, dispatch } = usePraxisEngine(engine);
182
-
189
+
183
190
  let text = '';
184
191
  </script>
185
192
 
@@ -226,9 +233,15 @@ const addTodoRule = defineRule({
226
233
  // - Testable
227
234
  const event = findEvent(events, AddTodo);
228
235
  if (!event) return [];
229
-
230
- state.context.todos.push({ /* ... */ });
231
- return [TodoAdded.create({ /* ... */ })];
236
+
237
+ state.context.todos.push({
238
+ /* ... */
239
+ });
240
+ return [
241
+ TodoAdded.create({
242
+ /* ... */
243
+ }),
244
+ ];
232
245
  },
233
246
  });
234
247
  ```
@@ -240,8 +253,8 @@ const addTodoRule = defineRule({
240
253
  const facts = engine.getFacts();
241
254
 
242
255
  // Find specific facts
243
- const added = facts.filter(f => f.tag === 'TodoAdded');
244
- const toggled = facts.filter(f => f.tag === 'TodoToggled');
256
+ const added = facts.filter((f) => f.tag === 'TodoAdded');
257
+ const toggled = facts.filter((f) => f.tag === 'TodoToggled');
245
258
 
246
259
  // Facts enable:
247
260
  // - Audit trails
@@ -270,10 +283,10 @@ const { undo, redo, snapshots, goToSnapshot } = usePraxisEngine(engine, {
270
283
  });
271
284
 
272
285
  // Navigate history
273
- undo(); // Go back
274
- redo(); // Go forward
275
- goToSnapshot(5); // Jump to specific snapshot
276
- console.log(snapshots); // View all snapshots
286
+ undo(); // Go back
287
+ redo(); // Go forward
288
+ goToSnapshot(5); // Jump to specific snapshot
289
+ console.log(snapshots); // View all snapshots
277
290
  ```
278
291
 
279
292
  ## Testing
@@ -287,7 +300,7 @@ describe('Todo Engine', () => {
287
300
  it('should add todos', () => {
288
301
  const engine = createTodoEngine();
289
302
  engine.step([AddTodo.create({ text: 'Test todo' })]);
290
-
303
+
291
304
  const context = engine.getContext();
292
305
  expect(context.todos.length).toBe(1);
293
306
  expect(context.todos[0].text).toBe('Test todo');
@@ -296,10 +309,10 @@ describe('Todo Engine', () => {
296
309
  it('should toggle todos', () => {
297
310
  const engine = createTodoEngine();
298
311
  engine.step([AddTodo.create({ text: 'Test' })]);
299
-
312
+
300
313
  const context = engine.getContext();
301
314
  const todoId = context.todos[0].id;
302
-
315
+
303
316
  engine.step([ToggleTodo.create({ id: todoId })]);
304
317
  expect(engine.getContext().todos[0].completed).toBe(true);
305
318
  });
@@ -309,55 +322,60 @@ describe('Todo Engine', () => {
309
322
  ## Performance Tips
310
323
 
311
324
  1. **Batch Events**: Dispatch multiple events at once
325
+
312
326
  ```typescript
313
- dispatch([
314
- AddTodo.create({ text: 'Todo 1' }),
315
- AddTodo.create({ text: 'Todo 2' }),
316
- AddTodo.create({ text: 'Todo 3' }),
317
- ], 'Batch Add');
327
+ dispatch(
328
+ [
329
+ AddTodo.create({ text: 'Todo 1' }),
330
+ AddTodo.create({ text: 'Todo 2' }),
331
+ AddTodo.create({ text: 'Todo 3' }),
332
+ ],
333
+ 'Batch Add'
334
+ );
318
335
  ```
319
336
 
320
337
  2. **Limit History**: Adjust history size based on needs
338
+
321
339
  ```typescript
322
340
  usePraxisEngine(engine, { maxHistorySize: 20 });
323
341
  ```
324
342
 
325
343
  3. **Selective Subscriptions**: Use derived stores for specific values
326
344
  ```typescript
327
- const count = createDerivedStore(engine, ctx => ctx.todos.length);
345
+ const count = createDerivedStore(engine, (ctx) => ctx.todos.length);
328
346
  ```
329
347
 
330
348
  ## Comparison with Other Libraries
331
349
 
332
350
  ### vs. Redux + Redux Toolkit
333
351
 
334
- | Feature | Redux + RTK | Praxis |
335
- |---------|-------------|--------|
336
- | State Updates | Reducers | Rules |
337
- | Side Effects | Thunks/Sagas | Actors |
338
- | Time-Travel | DevTools | Built-in |
339
- | TypeScript | Good | Excellent |
340
- | Learning Curve | Medium | Low |
352
+ | Feature | Redux + RTK | Praxis |
353
+ | -------------- | ------------ | --------- |
354
+ | State Updates | Reducers | Rules |
355
+ | Side Effects | Thunks/Sagas | Actors |
356
+ | Time-Travel | DevTools | Built-in |
357
+ | TypeScript | Good | Excellent |
358
+ | Learning Curve | Medium | Low |
341
359
 
342
360
  ### vs. XState
343
361
 
344
- | Feature | XState | Praxis |
345
- |---------|--------|--------|
346
- | State Machines | Native | Engine-based |
362
+ | Feature | XState | Praxis |
363
+ | ------------------ | -------------- | --------------------- |
364
+ | State Machines | Native | Engine-based |
347
365
  | Svelte Integration | @xstate/svelte | @plures/praxis/svelte |
348
- | History States | Built-in | Pattern-based |
349
- | Visual Tools | Stately | State-Docs (planned) |
350
- | Learning Curve | High | Medium |
366
+ | History States | Built-in | Pattern-based |
367
+ | Visual Tools | Stately | State-Docs (planned) |
368
+ | Learning Curve | High | Medium |
351
369
 
352
370
  ### vs. Svelte Stores
353
371
 
354
- | Feature | Svelte Stores | Praxis |
355
- |---------|---------------|--------|
356
- | Simplicity | Very High | High |
357
- | Structure | Manual | Built-in |
358
- | Time-Travel | Manual | Built-in |
359
- | Rules/Logic | Manual | Built-in |
360
- | TypeScript | Good | Excellent |
372
+ | Feature | Svelte Stores | Praxis |
373
+ | ----------- | ------------- | --------- |
374
+ | Simplicity | Very High | High |
375
+ | Structure | Manual | Built-in |
376
+ | Time-Travel | Manual | Built-in |
377
+ | Rules/Logic | Manual | Built-in |
378
+ | TypeScript | Good | Excellent |
361
379
 
362
380
  ## Next Steps
363
381
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Advanced Svelte 5 Integration Example
3
- *
3
+ *
4
4
  * Demonstrates the new Svelte 5 runes support with history state pattern.
5
5
  * This example shows a todo app with undo/redo and time-travel debugging.
6
6
  */
@@ -254,8 +254,8 @@ function runExample() {
254
254
 
255
255
  // Change filter
256
256
  console.log('3. Filtering to active todos:');
257
- engine.step([SetFilter.create({ filter: 'active' })])
258
-
257
+ engine.step([SetFilter.create({ filter: 'active' })]);
258
+
259
259
  const context3 = engine.getContext();
260
260
  const filtered = getFilteredTodos(context3.todos, context3.filter);
261
261
  console.log(` Filter: ${context3.filter}`);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Auth Basic Example
3
- *
3
+ *
4
4
  * Demonstrates basic authentication logic with login/logout using Praxis.
5
5
  * Shows how to define facts, events, rules, and constraints.
6
6
  */
@@ -14,7 +14,7 @@ import {
14
14
  defineConstraint,
15
15
  findEvent,
16
16
  filterFacts,
17
- } from "../../index.js";
17
+ } from '../../index.js';
18
18
 
19
19
  // Define the context type
20
20
  interface AuthContext {
@@ -23,21 +23,21 @@ interface AuthContext {
23
23
  }
24
24
 
25
25
  // Define facts
26
- const UserLoggedIn = defineFact<"UserLoggedIn", { userId: string; timestamp: number }>(
27
- "UserLoggedIn"
26
+ const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string; timestamp: number }>(
27
+ 'UserLoggedIn'
28
28
  );
29
- const UserLoggedOut = defineFact<"UserLoggedOut", { userId: string; timestamp: number }>(
30
- "UserLoggedOut"
29
+ const UserLoggedOut = defineFact<'UserLoggedOut', { userId: string; timestamp: number }>(
30
+ 'UserLoggedOut'
31
31
  );
32
32
 
33
33
  // Define events
34
- const Login = defineEvent<"LOGIN", { username: string; password: string }>("LOGIN");
35
- const Logout = defineEvent<"LOGOUT", {}>("LOGOUT");
34
+ const Login = defineEvent<'LOGIN', { username: string; password: string }>('LOGIN');
35
+ const Logout = defineEvent<'LOGOUT', {}>('LOGOUT');
36
36
 
37
37
  // Define rules
38
38
  const loginRule = defineRule<AuthContext>({
39
- id: "auth.login",
40
- description: "Process login event and create UserLoggedIn fact",
39
+ id: 'auth.login',
40
+ description: 'Process login event and create UserLoggedIn fact',
41
41
  impl: (_state, events) => {
42
42
  const loginEvent = findEvent(events, Login);
43
43
  if (!loginEvent) {
@@ -51,8 +51,8 @@ const loginRule = defineRule<AuthContext>({
51
51
  });
52
52
 
53
53
  const logoutRule = defineRule<AuthContext>({
54
- id: "auth.logout",
55
- description: "Process logout event and create UserLoggedOut fact",
54
+ id: 'auth.logout',
55
+ description: 'Process logout event and create UserLoggedOut fact',
56
56
  impl: (state, events) => {
57
57
  const logoutEvent = findEvent(events, Logout);
58
58
  if (!logoutEvent || !state.context.currentUser) {
@@ -69,8 +69,8 @@ const logoutRule = defineRule<AuthContext>({
69
69
  });
70
70
 
71
71
  const updateContextRule = defineRule<AuthContext>({
72
- id: "auth.updateContext",
73
- description: "Update context based on login/logout facts",
72
+ id: 'auth.updateContext',
73
+ description: 'Update context based on login/logout facts',
74
74
  impl: (state, _events) => {
75
75
  // This rule updates context based on facts (side effect on context)
76
76
  const loginFacts = filterFacts(state.facts, UserLoggedIn);
@@ -95,8 +95,8 @@ const updateContextRule = defineRule<AuthContext>({
95
95
 
96
96
  // Define constraints
97
97
  const singleSessionConstraint = defineConstraint<AuthContext>({
98
- id: "auth.singleSession",
99
- description: "Only one user can be logged in at a time",
98
+ id: 'auth.singleSession',
99
+ description: 'Only one user can be logged in at a time',
100
100
  impl: (state) => {
101
101
  const loginFacts = filterFacts(state.facts, UserLoggedIn);
102
102
  const logoutFacts = filterFacts(state.facts, UserLoggedOut);
@@ -127,31 +127,31 @@ function createAuthEngine() {
127
127
 
128
128
  // Example usage
129
129
  function runExample() {
130
- console.log("=== Auth Basic Example ===\n");
130
+ console.log('=== Auth Basic Example ===\n');
131
131
 
132
132
  const engine = createAuthEngine();
133
133
 
134
134
  // Login
135
- console.log("1. User logs in:");
136
- let result = engine.step([Login.create({ username: "alice", password: "secret123" })]);
137
- console.log(" Context:", engine.getContext());
138
- console.log(" Facts:", result.state.facts);
139
- console.log(" Diagnostics:", result.diagnostics);
135
+ console.log('1. User logs in:');
136
+ let result = engine.step([Login.create({ username: 'alice', password: 'secret123' })]);
137
+ console.log(' Context:', engine.getContext());
138
+ console.log(' Facts:', result.state.facts);
139
+ console.log(' Diagnostics:', result.diagnostics);
140
140
  console.log();
141
141
 
142
142
  // Try to login again (should violate constraint)
143
- console.log("2. Another user tries to log in:");
144
- result = engine.step([Login.create({ username: "bob", password: "secret456" })]);
145
- console.log(" Context:", engine.getContext());
146
- console.log(" Diagnostics:", result.diagnostics);
143
+ console.log('2. Another user tries to log in:');
144
+ result = engine.step([Login.create({ username: 'bob', password: 'secret456' })]);
145
+ console.log(' Context:', engine.getContext());
146
+ console.log(' Diagnostics:', result.diagnostics);
147
147
  console.log();
148
148
 
149
149
  // Logout
150
- console.log("3. User logs out:");
150
+ console.log('3. User logs out:');
151
151
  result = engine.step([Logout.create({})]);
152
- console.log(" Context:", engine.getContext());
153
- console.log(" Facts (last 3):", result.state.facts.slice(-3));
154
- console.log(" Diagnostics:", result.diagnostics);
152
+ console.log(' Context:', engine.getContext());
153
+ console.log(' Facts (last 3):', result.state.facts.slice(-3));
154
+ console.log(' Diagnostics:', result.diagnostics);
155
155
  console.log();
156
156
  }
157
157
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Cart Example
3
- *
3
+ *
4
4
  * Demonstrates shopping cart logic with flows and derived state.
5
5
  * Shows how to manage complex state with multiple rules and constraints.
6
6
  */
@@ -15,7 +15,7 @@ import {
15
15
  defineModule,
16
16
  findEvent,
17
17
  filterFacts,
18
- } from "../../index.js";
18
+ } from '../../index.js';
19
19
 
20
20
  // Define the context type
21
21
  interface CartContext {
@@ -25,25 +25,26 @@ interface CartContext {
25
25
  }
26
26
 
27
27
  // Define facts
28
- const ItemAdded = defineFact<"ItemAdded", { productId: string; quantity: number; price: number }>(
29
- "ItemAdded"
28
+ const ItemAdded = defineFact<'ItemAdded', { productId: string; quantity: number; price: number }>(
29
+ 'ItemAdded'
30
30
  );
31
- const ItemRemoved = defineFact<"ItemRemoved", { productId: string }>("ItemRemoved");
32
- const DiscountApplied = defineFact<"DiscountApplied", { percentage: number }>("DiscountApplied");
33
- const CartCleared = defineFact<"CartCleared", {}>("CartCleared");
31
+ const ItemRemoved = defineFact<'ItemRemoved', { productId: string }>('ItemRemoved');
32
+ const DiscountApplied = defineFact<'DiscountApplied', { percentage: number }>('DiscountApplied');
33
+ const CartCleared = defineFact<'CartCleared', {}>('CartCleared');
34
34
 
35
35
  // Define events
36
- const AddToCart = defineEvent<"ADD_TO_CART", { productId: string; quantity: number; price: number }>(
37
- "ADD_TO_CART"
38
- );
39
- const RemoveFromCart = defineEvent<"REMOVE_FROM_CART", { productId: string }>("REMOVE_FROM_CART");
40
- const ApplyDiscount = defineEvent<"APPLY_DISCOUNT", { code: string }>("APPLY_DISCOUNT");
41
- const ClearCart = defineEvent<"CLEAR_CART", {}>("CLEAR_CART");
36
+ const AddToCart = defineEvent<
37
+ 'ADD_TO_CART',
38
+ { productId: string; quantity: number; price: number }
39
+ >('ADD_TO_CART');
40
+ const RemoveFromCart = defineEvent<'REMOVE_FROM_CART', { productId: string }>('REMOVE_FROM_CART');
41
+ const ApplyDiscount = defineEvent<'APPLY_DISCOUNT', { code: string }>('APPLY_DISCOUNT');
42
+ const ClearCart = defineEvent<'CLEAR_CART', {}>('CLEAR_CART');
42
43
 
43
44
  // Define rules
44
45
  const addToCartRule = defineRule<CartContext>({
45
- id: "cart.addItem",
46
- description: "Add item to cart",
46
+ id: 'cart.addItem',
47
+ description: 'Add item to cart',
47
48
  impl: (_state, events) => {
48
49
  const addEvents = events.filter(AddToCart.is);
49
50
  return addEvents.map((event) =>
@@ -57,8 +58,8 @@ const addToCartRule = defineRule<CartContext>({
57
58
  });
58
59
 
59
60
  const removeFromCartRule = defineRule<CartContext>({
60
- id: "cart.removeItem",
61
- description: "Remove item from cart",
61
+ id: 'cart.removeItem',
62
+ description: 'Remove item from cart',
62
63
  impl: (_state, events) => {
63
64
  const removeEvent = findEvent(events, RemoveFromCart);
64
65
  if (!removeEvent) {
@@ -69,8 +70,8 @@ const removeFromCartRule = defineRule<CartContext>({
69
70
  });
70
71
 
71
72
  const applyDiscountRule = defineRule<CartContext>({
72
- id: "cart.applyDiscount",
73
- description: "Apply discount code",
73
+ id: 'cart.applyDiscount',
74
+ description: 'Apply discount code',
74
75
  impl: (state, events) => {
75
76
  const discountEvent = findEvent(events, ApplyDiscount);
76
77
  if (!discountEvent || state.context.discountApplied) {
@@ -78,7 +79,7 @@ const applyDiscountRule = defineRule<CartContext>({
78
79
  }
79
80
 
80
81
  // Simple discount logic: "SAVE10" = 10% off
81
- const percentage = discountEvent.payload.code === "SAVE10" ? 10 : 0;
82
+ const percentage = discountEvent.payload.code === 'SAVE10' ? 10 : 0;
82
83
  if (percentage > 0) {
83
84
  return [DiscountApplied.create({ percentage })];
84
85
  }
@@ -87,8 +88,8 @@ const applyDiscountRule = defineRule<CartContext>({
87
88
  });
88
89
 
89
90
  const clearCartRule = defineRule<CartContext>({
90
- id: "cart.clear",
91
- description: "Clear cart",
91
+ id: 'cart.clear',
92
+ description: 'Clear cart',
92
93
  impl: (_state, events) => {
93
94
  const clearEvent = findEvent(events, ClearCart);
94
95
  if (!clearEvent) {
@@ -99,8 +100,8 @@ const clearCartRule = defineRule<CartContext>({
99
100
  });
100
101
 
101
102
  const updateCartContextRule = defineRule<CartContext>({
102
- id: "cart.updateContext",
103
- description: "Update cart context based on facts",
103
+ id: 'cart.updateContext',
104
+ description: 'Update cart context based on facts',
104
105
  impl: (state, _events) => {
105
106
  const addedItems = filterFacts(state.facts, ItemAdded);
106
107
  const removedItems = filterFacts(state.facts, ItemRemoved);
@@ -145,10 +146,7 @@ const updateCartContextRule = defineRule<CartContext>({
145
146
  }));
146
147
 
147
148
  // Calculate total
148
- let total = state.context.items.reduce(
149
- (sum, item) => sum + item.quantity * item.price,
150
- 0
151
- );
149
+ let total = state.context.items.reduce((sum, item) => sum + item.quantity * item.price, 0);
152
150
 
153
151
  // Apply discount if any
154
152
  if (discountFacts.length > 0) {
@@ -165,8 +163,8 @@ const updateCartContextRule = defineRule<CartContext>({
165
163
 
166
164
  // Define constraints
167
165
  const maxItemsConstraint = defineConstraint<CartContext>({
168
- id: "cart.maxItems",
169
- description: "Cart cannot exceed 100 items",
166
+ id: 'cart.maxItems',
167
+ description: 'Cart cannot exceed 100 items',
170
168
  impl: (state) => {
171
169
  const totalQuantity = state.context.items.reduce((sum, item) => sum + item.quantity, 0);
172
170
  return totalQuantity <= 100 || `Cart has ${totalQuantity} items, maximum is 100`;
@@ -174,10 +172,12 @@ const maxItemsConstraint = defineConstraint<CartContext>({
174
172
  });
175
173
 
176
174
  const maxTotalConstraint = defineConstraint<CartContext>({
177
- id: "cart.maxTotal",
178
- description: "Cart total cannot exceed $10,000",
175
+ id: 'cart.maxTotal',
176
+ description: 'Cart total cannot exceed $10,000',
179
177
  impl: (state) => {
180
- return state.context.total <= 10000 || `Cart total $${state.context.total} exceeds maximum $10,000`;
178
+ return (
179
+ state.context.total <= 10000 || `Cart total $${state.context.total} exceeds maximum $10,000`
180
+ );
181
181
  },
182
182
  });
183
183
 
@@ -191,7 +191,7 @@ const cartModule = defineModule<CartContext>({
191
191
  updateCartContextRule,
192
192
  ],
193
193
  constraints: [maxItemsConstraint, maxTotalConstraint],
194
- meta: { version: "1.0.0" },
194
+ meta: { version: '1.0.0' },
195
195
  });
196
196
 
197
197
  // Create and configure the engine
@@ -213,41 +213,41 @@ function createCartEngine() {
213
213
 
214
214
  // Example usage
215
215
  function runExample() {
216
- console.log("=== Cart Example ===\n");
216
+ console.log('=== Cart Example ===\n');
217
217
 
218
218
  const engine = createCartEngine();
219
219
 
220
220
  // Add items
221
- console.log("1. Add items to cart:");
221
+ console.log('1. Add items to cart:');
222
222
  engine.step([
223
- AddToCart.create({ productId: "prod-1", quantity: 2, price: 29.99 }),
224
- AddToCart.create({ productId: "prod-2", quantity: 1, price: 49.99 }),
223
+ AddToCart.create({ productId: 'prod-1', quantity: 2, price: 29.99 }),
224
+ AddToCart.create({ productId: 'prod-2', quantity: 1, price: 49.99 }),
225
225
  ]);
226
- console.log(" Cart:", engine.getContext());
226
+ console.log(' Cart:', engine.getContext());
227
227
  console.log();
228
228
 
229
229
  // Apply discount
230
- console.log("2. Apply discount code:");
231
- engine.step([ApplyDiscount.create({ code: "SAVE10" })]);
232
- console.log(" Cart:", engine.getContext());
230
+ console.log('2. Apply discount code:');
231
+ engine.step([ApplyDiscount.create({ code: 'SAVE10' })]);
232
+ console.log(' Cart:', engine.getContext());
233
233
  console.log();
234
234
 
235
235
  // Remove item
236
- console.log("3. Remove an item:");
237
- engine.step([RemoveFromCart.create({ productId: "prod-1" })]);
238
- console.log(" Cart:", engine.getContext());
236
+ console.log('3. Remove an item:');
237
+ engine.step([RemoveFromCart.create({ productId: 'prod-1' })]);
238
+ console.log(' Cart:', engine.getContext());
239
239
  console.log();
240
240
 
241
241
  // Add more items
242
- console.log("4. Add more items:");
243
- engine.step([AddToCart.create({ productId: "prod-3", quantity: 3, price: 15.99 })]);
244
- console.log(" Cart:", engine.getContext());
242
+ console.log('4. Add more items:');
243
+ engine.step([AddToCart.create({ productId: 'prod-3', quantity: 3, price: 15.99 })]);
244
+ console.log(' Cart:', engine.getContext());
245
245
  console.log();
246
246
 
247
247
  // Clear cart
248
- console.log("5. Clear cart:");
248
+ console.log('5. Clear cart:');
249
249
  engine.step([ClearCart.create({})]);
250
- console.log(" Cart:", engine.getContext());
250
+ console.log(' Cart:', engine.getContext());
251
251
  console.log();
252
252
  }
253
253