@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
@@ -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
  });