@plures/praxis 1.0.3 → 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 (534) 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 -97
  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 +7 -8
  133. package/src/cli/index.ts +14 -10
  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/commands/verify.d.ts +0 -10
  294. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  295. package/dist/src/cli/commands/verify.js +0 -39
  296. package/dist/src/cli/commands/verify.js.map +0 -1
  297. package/dist/src/cli/index.d.ts +0 -8
  298. package/dist/src/cli/index.d.ts.map +0 -1
  299. package/dist/src/cli/index.js +0 -226
  300. package/dist/src/cli/index.js.map +0 -1
  301. package/dist/src/cloud/auth.d.ts +0 -51
  302. package/dist/src/cloud/auth.d.ts.map +0 -1
  303. package/dist/src/cloud/auth.js +0 -194
  304. package/dist/src/cloud/auth.js.map +0 -1
  305. package/dist/src/cloud/billing.d.ts +0 -184
  306. package/dist/src/cloud/billing.d.ts.map +0 -1
  307. package/dist/src/cloud/billing.js +0 -179
  308. package/dist/src/cloud/billing.js.map +0 -1
  309. package/dist/src/cloud/client.d.ts +0 -39
  310. package/dist/src/cloud/client.d.ts.map +0 -1
  311. package/dist/src/cloud/client.js +0 -176
  312. package/dist/src/cloud/client.js.map +0 -1
  313. package/dist/src/cloud/index.d.ts +0 -44
  314. package/dist/src/cloud/index.d.ts.map +0 -1
  315. package/dist/src/cloud/index.js +0 -44
  316. package/dist/src/cloud/index.js.map +0 -1
  317. package/dist/src/cloud/marketplace.d.ts +0 -166
  318. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  319. package/dist/src/cloud/marketplace.js +0 -159
  320. package/dist/src/cloud/marketplace.js.map +0 -1
  321. package/dist/src/cloud/provisioning.d.ts +0 -110
  322. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  323. package/dist/src/cloud/provisioning.js +0 -148
  324. package/dist/src/cloud/provisioning.js.map +0 -1
  325. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  326. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/endpoints.js +0 -217
  328. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  329. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/health/index.js +0 -9
  332. package/dist/src/cloud/relay/health/index.js.map +0 -1
  333. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/stats/index.js +0 -9
  336. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  337. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/sync/index.js +0 -9
  340. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  341. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  342. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  343. package/dist/src/cloud/relay/usage/index.js +0 -9
  344. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  345. package/dist/src/cloud/sponsors.d.ts +0 -81
  346. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  347. package/dist/src/cloud/sponsors.js +0 -130
  348. package/dist/src/cloud/sponsors.js.map +0 -1
  349. package/dist/src/cloud/types.d.ts +0 -169
  350. package/dist/src/cloud/types.d.ts.map +0 -1
  351. package/dist/src/cloud/types.js +0 -7
  352. package/dist/src/cloud/types.js.map +0 -1
  353. package/dist/src/components/index.d.ts.map +0 -1
  354. package/dist/src/components/index.js +0 -17
  355. package/dist/src/components/index.js.map +0 -1
  356. package/dist/src/core/actors.d.ts +0 -95
  357. package/dist/src/core/actors.d.ts.map +0 -1
  358. package/dist/src/core/actors.js +0 -158
  359. package/dist/src/core/actors.js.map +0 -1
  360. package/dist/src/core/component/generator.d.ts.map +0 -1
  361. package/dist/src/core/component/generator.js +0 -349
  362. package/dist/src/core/component/generator.js.map +0 -1
  363. package/dist/src/core/engine.d.ts +0 -92
  364. package/dist/src/core/engine.d.ts.map +0 -1
  365. package/dist/src/core/engine.js +0 -199
  366. package/dist/src/core/engine.js.map +0 -1
  367. package/dist/src/core/introspection.d.ts +0 -141
  368. package/dist/src/core/introspection.d.ts.map +0 -1
  369. package/dist/src/core/introspection.js +0 -208
  370. package/dist/src/core/introspection.js.map +0 -1
  371. package/dist/src/core/logic/generator.d.ts +0 -76
  372. package/dist/src/core/logic/generator.d.ts.map +0 -1
  373. package/dist/src/core/logic/generator.js +0 -370
  374. package/dist/src/core/logic/generator.js.map +0 -1
  375. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  376. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/adapter.js +0 -73
  378. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  379. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  380. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/generator.js +0 -191
  382. package/dist/src/core/pluresdb/generator.js.map +0 -1
  383. package/dist/src/core/pluresdb/index.d.ts +0 -15
  384. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/index.js +0 -11
  386. package/dist/src/core/pluresdb/index.js.map +0 -1
  387. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  388. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  390. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  391. package/dist/src/core/pluresdb/store.d.ts +0 -199
  392. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  393. package/dist/src/core/pluresdb/store.js +0 -344
  394. package/dist/src/core/pluresdb/store.js.map +0 -1
  395. package/dist/src/core/protocol.d.ts.map +0 -1
  396. package/dist/src/core/protocol.js +0 -46
  397. package/dist/src/core/protocol.js.map +0 -1
  398. package/dist/src/core/rules.d.ts +0 -120
  399. package/dist/src/core/rules.d.ts.map +0 -1
  400. package/dist/src/core/rules.js +0 -81
  401. package/dist/src/core/rules.js.map +0 -1
  402. package/dist/src/core/schema/loader.d.ts +0 -47
  403. package/dist/src/core/schema/loader.d.ts.map +0 -1
  404. package/dist/src/core/schema/loader.js +0 -189
  405. package/dist/src/core/schema/loader.js.map +0 -1
  406. package/dist/src/core/schema/normalize.d.ts +0 -72
  407. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  408. package/dist/src/core/schema/normalize.js +0 -190
  409. package/dist/src/core/schema/normalize.js.map +0 -1
  410. package/dist/src/core/schema/types.d.ts.map +0 -1
  411. package/dist/src/core/schema/types.js +0 -161
  412. package/dist/src/core/schema/types.js.map +0 -1
  413. package/dist/src/dsl/index.d.ts +0 -152
  414. package/dist/src/dsl/index.d.ts.map +0 -1
  415. package/dist/src/dsl/index.js +0 -132
  416. package/dist/src/dsl/index.js.map +0 -1
  417. package/dist/src/dsl.d.ts +0 -124
  418. package/dist/src/dsl.d.ts.map +0 -1
  419. package/dist/src/dsl.js +0 -130
  420. package/dist/src/dsl.js.map +0 -1
  421. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  422. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  423. package/dist/src/examples/advanced-todo/index.js +0 -222
  424. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  425. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  426. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  427. package/dist/src/examples/auth-basic/index.js +0 -122
  428. package/dist/src/examples/auth-basic/index.js.map +0 -1
  429. package/dist/src/examples/cart/index.d.ts +0 -19
  430. package/dist/src/examples/cart/index.d.ts.map +0 -1
  431. package/dist/src/examples/cart/index.js +0 -202
  432. package/dist/src/examples/cart/index.js.map +0 -1
  433. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  434. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  435. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  436. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  437. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  438. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  439. package/dist/src/examples/svelte-counter/index.js +0 -123
  440. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  441. package/dist/src/flows.d.ts +0 -125
  442. package/dist/src/flows.d.ts.map +0 -1
  443. package/dist/src/flows.js +0 -160
  444. package/dist/src/flows.js.map +0 -1
  445. package/dist/src/index.d.ts +0 -77
  446. package/dist/src/index.d.ts.map +0 -1
  447. package/dist/src/index.js +0 -64
  448. package/dist/src/index.js.map +0 -1
  449. package/dist/src/integrations/code-canvas.d.ts +0 -265
  450. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  451. package/dist/src/integrations/code-canvas.js +0 -451
  452. package/dist/src/integrations/code-canvas.js.map +0 -1
  453. package/dist/src/integrations/pluresdb.d.ts +0 -117
  454. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  455. package/dist/src/integrations/pluresdb.js +0 -117
  456. package/dist/src/integrations/pluresdb.js.map +0 -1
  457. package/dist/src/integrations/state-docs.d.ts +0 -191
  458. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  459. package/dist/src/integrations/state-docs.js +0 -515
  460. package/dist/src/integrations/state-docs.js.map +0 -1
  461. package/dist/src/integrations/svelte.d.ts.map +0 -1
  462. package/dist/src/integrations/svelte.js +0 -447
  463. package/dist/src/integrations/svelte.js.map +0 -1
  464. package/dist/src/integrations/tauri.d.ts +0 -360
  465. package/dist/src/integrations/tauri.d.ts.map +0 -1
  466. package/dist/src/integrations/tauri.js +0 -278
  467. package/dist/src/integrations/tauri.js.map +0 -1
  468. package/dist/src/integrations/unum.d.ts +0 -159
  469. package/dist/src/integrations/unum.d.ts.map +0 -1
  470. package/dist/src/integrations/unum.js +0 -240
  471. package/dist/src/integrations/unum.js.map +0 -1
  472. package/dist/src/registry.d.ts +0 -94
  473. package/dist/src/registry.d.ts.map +0 -1
  474. package/dist/src/registry.js +0 -181
  475. package/dist/src/registry.js.map +0 -1
  476. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  477. package/dist/src/runtime/terminal-adapter.js +0 -239
  478. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  479. package/dist/src/step.d.ts +0 -34
  480. package/dist/src/step.d.ts.map +0 -1
  481. package/dist/src/step.js +0 -111
  482. package/dist/src/step.js.map +0 -1
  483. package/dist/src/types.d.ts +0 -63
  484. package/dist/src/types.d.ts.map +0 -1
  485. package/dist/src/types.js +0 -6
  486. package/dist/src/types.js.map +0 -1
  487. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  488. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  489. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  490. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  491. package/dist/tools/cli/commands/index.d.ts +0 -7
  492. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  493. package/dist/tools/cli/commands/index.js +0 -7
  494. package/dist/tools/cli/commands/index.js.map +0 -1
  495. package/dist/tools/cli/index.d.ts +0 -8
  496. package/dist/tools/cli/index.d.ts.map +0 -1
  497. package/dist/tools/cli/index.js +0 -9
  498. package/dist/tools/cli/index.js.map +0 -1
  499. package/dist/tools/watcher/index.d.ts +0 -105
  500. package/dist/tools/watcher/index.d.ts.map +0 -1
  501. package/dist/tools/watcher/index.js +0 -213
  502. package/dist/tools/watcher/index.js.map +0 -1
  503. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  504. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-projection.js +0 -416
  506. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  507. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  508. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  509. package/dist/ui/canvas/canvas-state.js +0 -464
  510. package/dist/ui/canvas/canvas-state.js.map +0 -1
  511. package/dist/ui/canvas/components/index.d.ts +0 -95
  512. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/components/index.js +0 -19
  514. package/dist/ui/canvas/components/index.js.map +0 -1
  515. package/dist/ui/canvas/index.d.ts +0 -32
  516. package/dist/ui/canvas/index.d.ts.map +0 -1
  517. package/dist/ui/canvas/index.js +0 -32
  518. package/dist/ui/canvas/index.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  520. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/server.js +0 -248
  522. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  523. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  524. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  525. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  526. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  527. package/dist/ui/svelte-generator/index.d.ts +0 -9
  528. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/index.js +0 -11
  530. package/dist/ui/svelte-generator/index.js.map +0 -1
  531. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  532. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  533. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  534. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  * PluresDB Integration Tests
3
3
  */
4
4
 
5
- import { describe, it, expect, beforeEach } from "vitest";
5
+ import { describe, it, expect, beforeEach } from 'vitest';
6
6
  import {
7
7
  createInMemoryDB,
8
8
  InMemoryPraxisDB,
@@ -17,100 +17,100 @@ import {
17
17
  getSchemaPath,
18
18
  createPluresDBAdapter,
19
19
  attachToEngine,
20
- } from "../integrations/pluresdb.js";
21
- import { PraxisRegistry } from "../core/rules.js";
22
- import { createPraxisEngine } from "../core/engine.js";
23
- import { defineRule, defineConstraint, defineFact, defineEvent } from "../dsl/index.js";
24
- import type { PraxisSchema } from "../core/schema/types.js";
20
+ } from '../integrations/pluresdb.js';
21
+ import { PraxisRegistry } from '../core/rules.js';
22
+ import { createPraxisEngine } from '../core/engine.js';
23
+ import { defineRule, defineConstraint, defineFact, defineEvent } from '../dsl/index.js';
24
+ import type { PraxisSchema } from '../core/schema/types.js';
25
25
 
26
- describe("InMemoryPraxisDB", () => {
26
+ describe('InMemoryPraxisDB', () => {
27
27
  let db: InMemoryPraxisDB;
28
28
 
29
29
  beforeEach(() => {
30
30
  db = createInMemoryDB();
31
31
  });
32
32
 
33
- it("should get and set values", async () => {
34
- await db.set("test-key", { value: 42 });
35
- const result = await db.get<{ value: number }>("test-key");
33
+ it('should get and set values', async () => {
34
+ await db.set('test-key', { value: 42 });
35
+ const result = await db.get<{ value: number }>('test-key');
36
36
  expect(result).toEqual({ value: 42 });
37
37
  });
38
38
 
39
- it("should return undefined for missing keys", async () => {
40
- const result = await db.get("nonexistent");
39
+ it('should return undefined for missing keys', async () => {
40
+ const result = await db.get('nonexistent');
41
41
  expect(result).toBeUndefined();
42
42
  });
43
43
 
44
- it("should watch for changes", async () => {
44
+ it('should watch for changes', async () => {
45
45
  const values: number[] = [];
46
-
47
- db.watch<number>("counter", (val) => {
46
+
47
+ db.watch<number>('counter', (val) => {
48
48
  values.push(val);
49
49
  });
50
50
 
51
- await db.set("counter", 1);
52
- await db.set("counter", 2);
53
- await db.set("counter", 3);
51
+ await db.set('counter', 1);
52
+ await db.set('counter', 2);
53
+ await db.set('counter', 3);
54
54
 
55
55
  expect(values).toEqual([1, 2, 3]);
56
56
  });
57
57
 
58
- it("should unsubscribe from watch", async () => {
58
+ it('should unsubscribe from watch', async () => {
59
59
  const values: number[] = [];
60
-
61
- const unsubscribe = db.watch<number>("counter", (val) => {
60
+
61
+ const unsubscribe = db.watch<number>('counter', (val) => {
62
62
  values.push(val);
63
63
  });
64
64
 
65
- await db.set("counter", 1);
65
+ await db.set('counter', 1);
66
66
  unsubscribe();
67
- await db.set("counter", 2);
67
+ await db.set('counter', 2);
68
68
 
69
69
  expect(values).toEqual([1]);
70
70
  });
71
71
 
72
- it("should list keys", async () => {
73
- await db.set("key1", "value1");
74
- await db.set("key2", "value2");
75
-
72
+ it('should list keys', async () => {
73
+ await db.set('key1', 'value1');
74
+ await db.set('key2', 'value2');
75
+
76
76
  const keys = db.keys();
77
- expect(keys).toContain("key1");
78
- expect(keys).toContain("key2");
77
+ expect(keys).toContain('key1');
78
+ expect(keys).toContain('key2');
79
79
  });
80
80
 
81
- it("should clear all data", async () => {
82
- await db.set("key1", "value1");
81
+ it('should clear all data', async () => {
82
+ await db.set('key1', 'value1');
83
83
  db.clear();
84
-
85
- const result = await db.get("key1");
84
+
85
+ const result = await db.get('key1');
86
86
  expect(result).toBeUndefined();
87
87
  expect(db.keys()).toHaveLength(0);
88
88
  });
89
89
  });
90
90
 
91
- describe("Path generators", () => {
92
- it("should generate fact paths", () => {
93
- expect(getFactPath("UserLoggedIn")).toBe("/_praxis/facts/UserLoggedIn");
94
- expect(getFactPath("UserLoggedIn", "user-123")).toBe("/_praxis/facts/UserLoggedIn/user-123");
91
+ describe('Path generators', () => {
92
+ it('should generate fact paths', () => {
93
+ expect(getFactPath('UserLoggedIn')).toBe('/_praxis/facts/UserLoggedIn');
94
+ expect(getFactPath('UserLoggedIn', 'user-123')).toBe('/_praxis/facts/UserLoggedIn/user-123');
95
95
  });
96
96
 
97
- it("should generate event paths", () => {
98
- expect(getEventPath("LOGIN")).toBe("/_praxis/events/LOGIN");
97
+ it('should generate event paths', () => {
98
+ expect(getEventPath('LOGIN')).toBe('/_praxis/events/LOGIN');
99
99
  });
100
100
 
101
- it("should generate schema paths", () => {
102
- expect(getSchemaPath("MyApp")).toBe("/_praxis/schemas/MyApp");
101
+ it('should generate schema paths', () => {
102
+ expect(getSchemaPath('MyApp')).toBe('/_praxis/schemas/MyApp');
103
103
  });
104
104
 
105
- it("should have correct PRAXIS_PATHS", () => {
106
- expect(PRAXIS_PATHS.BASE).toBe("/_praxis");
107
- expect(PRAXIS_PATHS.FACTS).toBe("/_praxis/facts");
108
- expect(PRAXIS_PATHS.EVENTS).toBe("/_praxis/events");
109
- expect(PRAXIS_PATHS.SCHEMAS).toBe("/_praxis/schemas");
105
+ it('should have correct PRAXIS_PATHS', () => {
106
+ expect(PRAXIS_PATHS.BASE).toBe('/_praxis');
107
+ expect(PRAXIS_PATHS.FACTS).toBe('/_praxis/facts');
108
+ expect(PRAXIS_PATHS.EVENTS).toBe('/_praxis/events');
109
+ expect(PRAXIS_PATHS.SCHEMAS).toBe('/_praxis/schemas');
110
110
  });
111
111
  });
112
112
 
113
- describe("PraxisDBStore", () => {
113
+ describe('PraxisDBStore', () => {
114
114
  let db: InMemoryPraxisDB;
115
115
  let registry: PraxisRegistry;
116
116
  let store: PraxisDBStore;
@@ -121,111 +121,111 @@ describe("PraxisDBStore", () => {
121
121
  store = createPraxisDBStore(db, registry);
122
122
  });
123
123
 
124
- describe("Facts", () => {
125
- it("should store a fact", async () => {
126
- const fact = { tag: "UserLoggedIn", payload: { userId: "alice", id: "fact-1" } };
127
-
124
+ describe('Facts', () => {
125
+ it('should store a fact', async () => {
126
+ const fact = { tag: 'UserLoggedIn', payload: { userId: 'alice', id: 'fact-1' } };
127
+
128
128
  await store.storeFact(fact);
129
-
130
- const retrieved = await store.getFact("UserLoggedIn", "fact-1");
129
+
130
+ const retrieved = await store.getFact('UserLoggedIn', 'fact-1');
131
131
  expect(retrieved).toEqual(fact);
132
132
  });
133
133
 
134
- it("should store multiple facts", async () => {
134
+ it('should store multiple facts', async () => {
135
135
  const facts = [
136
- { tag: "UserLoggedIn", payload: { userId: "alice", id: "fact-1" } },
137
- { tag: "UserLoggedIn", payload: { userId: "bob", id: "fact-2" } },
136
+ { tag: 'UserLoggedIn', payload: { userId: 'alice', id: 'fact-1' } },
137
+ { tag: 'UserLoggedIn', payload: { userId: 'bob', id: 'fact-2' } },
138
138
  ];
139
-
139
+
140
140
  await store.storeFacts(facts);
141
-
142
- const fact1 = await store.getFact("UserLoggedIn", "fact-1");
143
- const fact2 = await store.getFact("UserLoggedIn", "fact-2");
144
-
141
+
142
+ const fact1 = await store.getFact('UserLoggedIn', 'fact-1');
143
+ const fact2 = await store.getFact('UserLoggedIn', 'fact-2');
144
+
145
145
  expect(fact1).toEqual(facts[0]);
146
146
  expect(fact2).toEqual(facts[1]);
147
147
  });
148
148
 
149
- it("should generate id if not provided", async () => {
150
- const fact = { tag: "UserLoggedIn", payload: { userId: "alice" } };
151
-
149
+ it('should generate id if not provided', async () => {
150
+ const fact = { tag: 'UserLoggedIn', payload: { userId: 'alice' } };
151
+
152
152
  await store.storeFact(fact);
153
-
153
+
154
154
  // Check that something was stored under the UserLoggedIn path
155
- const keys = db.keys().filter(k => k.startsWith("/_praxis/facts/UserLoggedIn/"));
155
+ const keys = db.keys().filter((k) => k.startsWith('/_praxis/facts/UserLoggedIn/'));
156
156
  expect(keys.length).toBe(1);
157
157
  });
158
158
  });
159
159
 
160
- describe("Events", () => {
161
- it("should append an event", async () => {
162
- const event = { tag: "LOGIN", payload: { username: "alice" } };
163
-
160
+ describe('Events', () => {
161
+ it('should append an event', async () => {
162
+ const event = { tag: 'LOGIN', payload: { username: 'alice' } };
163
+
164
164
  await store.appendEvent(event);
165
-
166
- const entries = await store.getEvents("LOGIN");
165
+
166
+ const entries = await store.getEvents('LOGIN');
167
167
  expect(entries).toHaveLength(1);
168
168
  expect(entries[0]?.event).toEqual(event);
169
169
  expect(entries[0]?.timestamp).toBeDefined();
170
170
  expect(entries[0]?.sequence).toBe(0);
171
171
  });
172
172
 
173
- it("should append multiple events", async () => {
173
+ it('should append multiple events', async () => {
174
174
  const events = [
175
- { tag: "LOGIN", payload: { username: "alice" } },
176
- { tag: "LOGIN", payload: { username: "bob" } },
175
+ { tag: 'LOGIN', payload: { username: 'alice' } },
176
+ { tag: 'LOGIN', payload: { username: 'bob' } },
177
177
  ];
178
-
178
+
179
179
  await store.appendEvents(events);
180
-
181
- const entries = await store.getEvents("LOGIN");
180
+
181
+ const entries = await store.getEvents('LOGIN');
182
182
  expect(entries).toHaveLength(2);
183
- expect(entries[0]?.event.payload).toEqual({ username: "alice" });
184
- expect(entries[1]?.event.payload).toEqual({ username: "bob" });
183
+ expect(entries[0]?.event.payload).toEqual({ username: 'alice' });
184
+ expect(entries[1]?.event.payload).toEqual({ username: 'bob' });
185
185
  });
186
186
 
187
- it("should filter events by timestamp", async () => {
188
- const event1 = { tag: "LOGIN", payload: { username: "alice" } };
187
+ it('should filter events by timestamp', async () => {
188
+ const event1 = { tag: 'LOGIN', payload: { username: 'alice' } };
189
189
  await store.appendEvent(event1);
190
-
190
+
191
191
  const timestamp = Date.now();
192
-
192
+
193
193
  // Small delay to ensure different timestamp
194
- await new Promise(resolve => setTimeout(resolve, 10));
195
-
196
- const event2 = { tag: "LOGIN", payload: { username: "bob" } };
194
+ await new Promise((resolve) => setTimeout(resolve, 10));
195
+
196
+ const event2 = { tag: 'LOGIN', payload: { username: 'bob' } };
197
197
  await store.appendEvent(event2);
198
-
199
- const entries = await store.getEvents("LOGIN", { since: timestamp });
198
+
199
+ const entries = await store.getEvents('LOGIN', { since: timestamp });
200
200
  expect(entries).toHaveLength(1);
201
- expect(entries[0]?.event.payload).toEqual({ username: "bob" });
201
+ expect(entries[0]?.event.payload).toEqual({ username: 'bob' });
202
202
  });
203
203
 
204
- it("should limit events", async () => {
204
+ it('should limit events', async () => {
205
205
  await store.appendEvents([
206
- { tag: "LOGIN", payload: { username: "alice" } },
207
- { tag: "LOGIN", payload: { username: "bob" } },
208
- { tag: "LOGIN", payload: { username: "charlie" } },
206
+ { tag: 'LOGIN', payload: { username: 'alice' } },
207
+ { tag: 'LOGIN', payload: { username: 'bob' } },
208
+ { tag: 'LOGIN', payload: { username: 'charlie' } },
209
209
  ]);
210
-
211
- const entries = await store.getEvents("LOGIN", { limit: 2 });
210
+
211
+ const entries = await store.getEvents('LOGIN', { limit: 2 });
212
212
  expect(entries).toHaveLength(2);
213
- expect(entries[0]?.event.payload).toEqual({ username: "bob" });
214
- expect(entries[1]?.event.payload).toEqual({ username: "charlie" });
213
+ expect(entries[0]?.event.payload).toEqual({ username: 'bob' });
214
+ expect(entries[1]?.event.payload).toEqual({ username: 'charlie' });
215
215
  });
216
216
  });
217
217
 
218
- describe("Constraints", () => {
219
- it("should reject facts that violate constraints", async () => {
218
+ describe('Constraints', () => {
219
+ it('should reject facts that violate constraints', async () => {
220
220
  const noEmptyUserId = defineConstraint({
221
- id: "noEmptyUserId",
222
- description: "User ID cannot be empty",
221
+ id: 'noEmptyUserId',
222
+ description: 'User ID cannot be empty',
223
223
  impl: (state) => {
224
224
  const facts = state.facts;
225
225
  for (const fact of facts) {
226
226
  const payload = fact.payload as { userId?: string };
227
- if (payload?.userId === "") {
228
- return "User ID cannot be empty";
227
+ if (payload?.userId === '') {
228
+ return 'User ID cannot be empty';
229
229
  }
230
230
  }
231
231
  return true;
@@ -234,33 +234,37 @@ describe("PraxisDBStore", () => {
234
234
 
235
235
  registry.registerConstraint(noEmptyUserId);
236
236
 
237
- const invalidFact = { tag: "UserLoggedIn", payload: { userId: "", id: "fact-1" } };
238
-
239
- await expect(store.storeFact(invalidFact)).rejects.toThrow("Constraint violation");
237
+ const invalidFact = { tag: 'UserLoggedIn', payload: { userId: '', id: 'fact-1' } };
238
+
239
+ await expect(store.storeFact(invalidFact)).rejects.toThrow('Constraint violation');
240
240
  });
241
241
  });
242
242
 
243
- describe("Context", () => {
244
- it("should update and get context", () => {
245
- interface Context { count: number }
246
- const typedStore = createPraxisDBStore<Context>(db, registry as PraxisRegistry<Context>, { count: 0 });
247
-
243
+ describe('Context', () => {
244
+ it('should update and get context', () => {
245
+ interface Context {
246
+ count: number;
247
+ }
248
+ const typedStore = createPraxisDBStore<Context>(db, registry as PraxisRegistry<Context>, {
249
+ count: 0,
250
+ });
251
+
248
252
  expect(typedStore.getContext()).toEqual({ count: 0 });
249
-
253
+
250
254
  typedStore.updateContext({ count: 5 });
251
255
  expect(typedStore.getContext()).toEqual({ count: 5 });
252
256
  });
253
257
  });
254
258
 
255
- describe("Dispose", () => {
256
- it("should dispose subscriptions", () => {
259
+ describe('Dispose', () => {
260
+ it('should dispose subscriptions', () => {
257
261
  store.dispose();
258
262
  // Should not throw
259
263
  });
260
264
  });
261
265
  });
262
266
 
263
- describe("PraxisSchemaRegistry", () => {
267
+ describe('PraxisSchemaRegistry', () => {
264
268
  let db: InMemoryPraxisDB;
265
269
  let schemaRegistry: PraxisSchemaRegistry;
266
270
 
@@ -270,75 +274,75 @@ describe("PraxisSchemaRegistry", () => {
270
274
  });
271
275
 
272
276
  const testSchema: PraxisSchema = {
273
- version: "1.0.0",
274
- name: "TestApp",
275
- description: "Test application schema",
277
+ version: '1.0.0',
278
+ name: 'TestApp',
279
+ description: 'Test application schema',
276
280
  models: [],
277
281
  components: [],
278
282
  logic: [],
279
283
  };
280
284
 
281
- it("should register a schema", async () => {
285
+ it('should register a schema', async () => {
282
286
  await schemaRegistry.register(testSchema);
283
-
284
- const stored = await schemaRegistry.get("TestApp");
287
+
288
+ const stored = await schemaRegistry.get('TestApp');
285
289
  expect(stored?.schema).toEqual(testSchema);
286
- expect(stored?.version).toBe("1.0.0");
290
+ expect(stored?.version).toBe('1.0.0');
287
291
  expect(stored?.registeredAt).toBeDefined();
288
292
  });
289
293
 
290
- it("should check if schema exists", async () => {
291
- expect(await schemaRegistry.exists("TestApp")).toBe(false);
292
-
294
+ it('should check if schema exists', async () => {
295
+ expect(await schemaRegistry.exists('TestApp')).toBe(false);
296
+
293
297
  await schemaRegistry.register(testSchema);
294
-
295
- expect(await schemaRegistry.exists("TestApp")).toBe(true);
298
+
299
+ expect(await schemaRegistry.exists('TestApp')).toBe(true);
296
300
  });
297
301
 
298
- it("should update a schema", async () => {
302
+ it('should update a schema', async () => {
299
303
  await schemaRegistry.register(testSchema);
300
-
301
- const updatedSchema = { ...testSchema, version: "2.0.0" };
304
+
305
+ const updatedSchema = { ...testSchema, version: '2.0.0' };
302
306
  await schemaRegistry.update(updatedSchema);
303
-
304
- const stored = await schemaRegistry.get("TestApp");
305
- expect(stored?.version).toBe("2.0.0");
307
+
308
+ const stored = await schemaRegistry.get('TestApp');
309
+ expect(stored?.version).toBe('2.0.0');
306
310
  });
307
311
 
308
- it("should register with index and list schemas", async () => {
312
+ it('should register with index and list schemas', async () => {
309
313
  await schemaRegistry.registerWithIndex(testSchema);
310
- await schemaRegistry.registerWithIndex({ ...testSchema, name: "OtherApp" });
311
-
314
+ await schemaRegistry.registerWithIndex({ ...testSchema, name: 'OtherApp' });
315
+
312
316
  const list = await schemaRegistry.list();
313
- expect(list).toContain("TestApp");
314
- expect(list).toContain("OtherApp");
317
+ expect(list).toContain('TestApp');
318
+ expect(list).toContain('OtherApp');
315
319
  });
316
320
 
317
- it("should not duplicate in index", async () => {
321
+ it('should not duplicate in index', async () => {
318
322
  await schemaRegistry.registerWithIndex(testSchema);
319
323
  await schemaRegistry.registerWithIndex(testSchema);
320
-
324
+
321
325
  const list = await schemaRegistry.list();
322
- expect(list.filter(n => n === "TestApp")).toHaveLength(1);
326
+ expect(list.filter((n) => n === 'TestApp')).toHaveLength(1);
323
327
  });
324
328
  });
325
329
 
326
- describe("registerSchema helper", () => {
327
- it("should register schema with convenience function", async () => {
330
+ describe('registerSchema helper', () => {
331
+ it('should register schema with convenience function', async () => {
328
332
  const db = createInMemoryDB();
329
-
333
+
330
334
  await registerSchema(db, {
331
- version: "1.0.0",
332
- name: "QuickApp",
335
+ version: '1.0.0',
336
+ name: 'QuickApp',
333
337
  });
334
-
338
+
335
339
  const schemaRegistry = createSchemaRegistry(db);
336
- const stored = await schemaRegistry.get("QuickApp");
337
- expect(stored?.schema.name).toBe("QuickApp");
340
+ const stored = await schemaRegistry.get('QuickApp');
341
+ expect(stored?.schema.name).toBe('QuickApp');
338
342
  });
339
343
  });
340
344
 
341
- describe("PluresDBAdapter", () => {
345
+ describe('PluresDBAdapter', () => {
342
346
  let db: InMemoryPraxisDB;
343
347
  let registry: PraxisRegistry;
344
348
 
@@ -347,62 +351,60 @@ describe("PluresDBAdapter", () => {
347
351
  registry = new PraxisRegistry();
348
352
  });
349
353
 
350
- it("should persist facts", async () => {
354
+ it('should persist facts', async () => {
351
355
  const adapter = createPluresDBAdapter({ db, registry });
352
-
356
+
353
357
  await adapter.persistFacts([
354
- { tag: "UserLoggedIn", payload: { userId: "alice", id: "fact-1" } },
358
+ { tag: 'UserLoggedIn', payload: { userId: 'alice', id: 'fact-1' } },
355
359
  ]);
356
-
357
- const keys = db.keys().filter(k => k.includes("UserLoggedIn"));
360
+
361
+ const keys = db.keys().filter((k) => k.includes('UserLoggedIn'));
358
362
  expect(keys.length).toBe(1);
359
-
363
+
360
364
  adapter.dispose();
361
365
  });
362
366
 
363
- it("should persist events", async () => {
367
+ it('should persist events', async () => {
364
368
  const adapter = createPluresDBAdapter({ db, registry });
365
-
366
- await adapter.persistEvents([
367
- { tag: "LOGIN", payload: { username: "alice" } },
368
- ]);
369
-
369
+
370
+ await adapter.persistEvents([{ tag: 'LOGIN', payload: { username: 'alice' } }]);
371
+
370
372
  const entries = await db.get<Array<{ event: unknown }>>(`/_praxis/events/LOGIN`);
371
373
  expect(entries).toHaveLength(1);
372
-
374
+
373
375
  adapter.dispose();
374
376
  });
375
377
 
376
- it("should load events", async () => {
378
+ it('should load events', async () => {
377
379
  const adapter = createPluresDBAdapter({ db, registry });
378
-
380
+
379
381
  await adapter.persistEvents([
380
- { tag: "LOGIN", payload: { username: "alice" } },
381
- { tag: "LOGIN", payload: { username: "bob" } },
382
+ { tag: 'LOGIN', payload: { username: 'alice' } },
383
+ { tag: 'LOGIN', payload: { username: 'bob' } },
382
384
  ]);
383
-
384
- const events = await adapter.loadEvents({ tag: "LOGIN" });
385
+
386
+ const events = await adapter.loadEvents({ tag: 'LOGIN' });
385
387
  expect(events).toHaveLength(2);
386
-
388
+
387
389
  adapter.dispose();
388
390
  });
389
391
 
390
- it("should attach to engine", () => {
392
+ it('should attach to engine', () => {
391
393
  const adapter = createPluresDBAdapter({ db, registry });
392
394
  const engine = createPraxisEngine({
393
395
  initialContext: { count: 0 },
394
396
  registry,
395
397
  });
396
-
398
+
397
399
  // Should not throw
398
400
  adapter.attachEngine(engine);
399
-
401
+
400
402
  adapter.dispose();
401
403
  });
402
404
  });
403
405
 
404
- describe("attachToEngine", () => {
405
- it("should attach store to engine", () => {
406
+ describe('attachToEngine', () => {
407
+ it('should attach store to engine', () => {
406
408
  const db = createInMemoryDB();
407
409
  const registry = new PraxisRegistry<{ count: number }>();
408
410
  const store = createPraxisDBStore(db, registry, { count: 0 });
@@ -410,29 +412,29 @@ describe("attachToEngine", () => {
410
412
  initialContext: { count: 5 },
411
413
  registry,
412
414
  });
413
-
415
+
414
416
  const detach = attachToEngine(store, engine);
415
-
417
+
416
418
  // Context should be synced from engine to store
417
419
  expect(store.getContext()).toEqual({ count: 5 });
418
-
420
+
419
421
  // Should not throw
420
422
  detach();
421
423
  });
422
424
  });
423
425
 
424
- describe("Rules triggering", () => {
425
- it("should trigger rules when events are appended", async () => {
426
+ describe('Rules triggering', () => {
427
+ it('should trigger rules when events are appended', async () => {
426
428
  interface Context {
427
429
  logins: number;
428
430
  }
429
431
 
430
- const UserLoggedIn = defineFact<"UserLoggedIn", { userId: string }>("UserLoggedIn");
431
- const Login = defineEvent<"LOGIN", { username: string }>("LOGIN");
432
+ const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string }>('UserLoggedIn');
433
+ const Login = defineEvent<'LOGIN', { username: string }>('LOGIN');
432
434
 
433
435
  const loginRule = defineRule<Context>({
434
- id: "auth.login",
435
- description: "Process login event",
436
+ id: 'auth.login',
437
+ description: 'Process login event',
436
438
  impl: (state, events) => {
437
439
  const loginEvent = events.find(Login.is);
438
440
  if (loginEvent) {
@@ -448,10 +450,10 @@ describe("Rules triggering", () => {
448
450
 
449
451
  const store = createPraxisDBStore(db, registry, { logins: 0 });
450
452
 
451
- await store.appendEvent(Login.create({ username: "alice" }));
453
+ await store.appendEvent(Login.create({ username: 'alice' }));
452
454
 
453
455
  // Check that derived fact was stored
454
- const keys = db.keys().filter(k => k.includes("UserLoggedIn"));
456
+ const keys = db.keys().filter((k) => k.includes('UserLoggedIn'));
455
457
  expect(keys.length).toBe(1);
456
458
  });
457
459
  });