@plures/praxis 1.0.3 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/FRAMEWORK.md +55 -5
  2. package/README.md +162 -375
  3. package/core/codegen/docs-generator.ts +5 -2
  4. package/core/codegen/index.ts +1 -1
  5. package/core/db-adapter/index.ts +2 -2
  6. package/core/db-adapter/sync-engine.ts +17 -6
  7. package/core/logic-engine/engine.ts +1 -1
  8. package/core/logic-engine/index.ts +2 -2
  9. package/core/logic-engine/protocol.ts +1 -1
  10. package/core/logic-engine/psf-adapter.ts +8 -4
  11. package/core/logic-engine/rules.ts +1 -1
  12. package/core/schema-engine/compiler.ts +53 -11
  13. package/core/schema-engine/generator.ts +17 -7
  14. package/core/schema-engine/index.ts +2 -2
  15. package/core/schema-engine/psf.ts +12 -3
  16. package/core/schema-engine/types.ts +3 -11
  17. package/core/schema-engine/validator.ts +112 -22
  18. package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
  19. package/dist/browser/index.d.ts +3004 -0
  20. package/dist/browser/index.js +2892 -0
  21. package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
  22. package/dist/browser/integrations/svelte.js +298 -0
  23. package/dist/node/auth-STARLY7I.js +207 -0
  24. package/dist/node/build-Y7OT5VBF.js +144 -0
  25. package/dist/node/canvas-UERZHJYW.js +362 -0
  26. package/dist/node/chunk-DSDC2JWZ.js +256 -0
  27. package/dist/node/chunk-FXQZXAWF.js +175 -0
  28. package/dist/node/chunk-N5Y37EUV.js +202 -0
  29. package/dist/node/chunk-QGM4M3NI.js +37 -0
  30. package/dist/node/chunk-RJMWCNHR.js +175 -0
  31. package/dist/node/chunk-SRM3OPPM.js +404 -0
  32. package/dist/node/chunk-UATVJBNV.js +175 -0
  33. package/dist/node/chunk-UY7YEBE2.js +159 -0
  34. package/dist/node/chunk-XCY2VIFX.js +143 -0
  35. package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
  36. package/dist/node/cli/index.cjs +215139 -0
  37. package/dist/node/cli/index.d.cts +1 -0
  38. package/dist/node/cli/index.d.ts +1 -0
  39. package/dist/node/cli/index.js +690 -0
  40. package/dist/node/cloud/index.cjs +1043 -0
  41. package/dist/node/cloud/index.d.cts +864 -0
  42. package/dist/node/cloud/index.d.ts +864 -0
  43. package/dist/node/cloud/index.js +456 -0
  44. package/dist/node/cloud-AXOK4PSN.js +212 -0
  45. package/dist/node/component.cjs +374 -0
  46. package/dist/node/component.d.cts +125 -0
  47. package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
  48. package/dist/node/component.js +9 -0
  49. package/dist/node/components/index.cjs +216 -0
  50. package/dist/node/components/index.d.cts +43 -0
  51. package/dist/{src → node}/components/index.d.ts +8 -8
  52. package/dist/node/components/index.js +7 -0
  53. package/dist/node/create-TRLSVCNQ.js +584 -0
  54. package/dist/node/dev-PMJZUYGE.js +65 -0
  55. package/dist/node/engine-1iqLe6_P.d.ts +214 -0
  56. package/dist/node/engine-CVJobhHm.d.cts +214 -0
  57. package/dist/node/index.cjs +3247 -0
  58. package/dist/node/index.d.cts +2579 -0
  59. package/dist/node/index.d.ts +2579 -0
  60. package/dist/node/index.js +2098 -0
  61. package/dist/node/integrations/svelte.cjs +330 -0
  62. package/dist/node/integrations/svelte.d.cts +309 -0
  63. package/dist/node/integrations/svelte.d.ts +309 -0
  64. package/dist/node/integrations/svelte.js +300 -0
  65. package/dist/node/orchestrate-737TCL5H.js +127 -0
  66. package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
  67. package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
  68. package/dist/node/schema.cjs +200 -0
  69. package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
  70. package/dist/node/schema.d.ts +371 -0
  71. package/dist/node/schema.js +9 -0
  72. package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
  73. package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
  74. package/dist/node/verify-QRYKRIDU.js +210960 -0
  75. package/docs/MONETIZATION.md +21 -16
  76. package/docs/REACTIVE_REDESIGN.md +132 -0
  77. package/docs/README.md +47 -36
  78. package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
  79. package/docs/TERMINAL_NODE.md +27 -24
  80. package/docs/core/building-extensions.md +58 -61
  81. package/docs/core/cli-usage.md +59 -59
  82. package/docs/core/code-canvas-sync.md +28 -16
  83. package/docs/core/logic-engine.md +77 -82
  84. package/docs/core/pluresdb-integration.md +29 -39
  85. package/docs/core/schema-model.md +66 -52
  86. package/docs/core/ui-generation.md +57 -49
  87. package/docs/core/what-is-praxis.md +32 -15
  88. package/docs/guides/canvas.md +21 -5
  89. package/docs/guides/getting-started.md +13 -7
  90. package/docs/guides/history-state-pattern.md +65 -51
  91. package/docs/guides/orchestration.md +46 -32
  92. package/docs/guides/parallel-state-pattern.md +56 -72
  93. package/docs/guides/svelte-integration.md +45 -53
  94. package/docs/tutorials/README.md +16 -0
  95. package/docs/tutorials/ecommerce-cart.md +177 -95
  96. package/docs/tutorials/first-app.md +26 -41
  97. package/docs/tutorials/form-builder.md +191 -138
  98. package/docs/tutorials/todo-pluresdb.md +71 -69
  99. package/package.json +58 -23
  100. package/src/__tests__/actors.test.ts +68 -68
  101. package/src/__tests__/billing.test.ts +32 -32
  102. package/src/__tests__/canvas-components.test.ts +94 -73
  103. package/src/__tests__/cli-create.test.ts +28 -28
  104. package/src/__tests__/cloud.test.ts +36 -36
  105. package/src/__tests__/code-canvas-integration.test.ts +132 -141
  106. package/src/__tests__/docs-generator.test.ts +3 -9
  107. package/src/__tests__/dsl.test.ts +58 -64
  108. package/src/__tests__/edge-cases.test.ts +106 -108
  109. package/src/__tests__/engine.test.ts +51 -25
  110. package/src/__tests__/generators.test.ts +42 -44
  111. package/src/__tests__/introspection.test.ts +104 -114
  112. package/src/__tests__/pluresdb.test.ts +189 -187
  113. package/src/__tests__/protocol.test.ts +15 -15
  114. package/src/__tests__/provisioning.test.ts +61 -61
  115. package/src/__tests__/schema.test.ts +7 -11
  116. package/src/__tests__/state-docs-integration.test.ts +162 -145
  117. package/src/__tests__/svelte-integration.test.ts +16 -19
  118. package/src/__tests__/tauri-integration.test.ts +149 -147
  119. package/src/__tests__/terminal-node.test.ts +12 -7
  120. package/src/__tests__/unum-integration.test.ts +68 -68
  121. package/src/adapters/cli.ts +21 -15
  122. package/src/cli/commands/auth.ts +82 -78
  123. package/src/cli/commands/build.ts +29 -27
  124. package/src/cli/commands/canvas.ts +338 -127
  125. package/src/cli/commands/cloud.ts +47 -47
  126. package/src/cli/commands/create.ts +59 -47
  127. package/src/cli/commands/dev.ts +12 -12
  128. package/src/cli/commands/generate.ts +29 -40
  129. package/src/cli/commands/orchestrate.ts +24 -24
  130. package/src/cli/commands/verify.ts +7 -8
  131. package/src/cli/index.ts +14 -10
  132. package/src/cloud/README.md +28 -15
  133. package/src/cloud/auth.ts +55 -70
  134. package/src/cloud/billing.ts +59 -58
  135. package/src/cloud/client.ts +29 -35
  136. package/src/cloud/index.ts +19 -40
  137. package/src/cloud/marketplace.ts +69 -78
  138. package/src/cloud/provisioning.ts +42 -51
  139. package/src/cloud/relay/endpoints.ts +30 -34
  140. package/src/cloud/relay/health/index.ts +1 -1
  141. package/src/cloud/relay/stats/index.ts +1 -1
  142. package/src/cloud/relay/sync/index.ts +1 -1
  143. package/src/cloud/relay/usage/index.ts +1 -1
  144. package/src/cloud/sponsors.ts +31 -34
  145. package/src/cloud/types.ts +4 -4
  146. package/src/components/README.md +1 -0
  147. package/src/components/index.ts +3 -4
  148. package/src/core/actors.ts +7 -7
  149. package/src/core/component/generator.ts +10 -28
  150. package/src/core/engine.ts +51 -24
  151. package/src/core/introspection.ts +37 -35
  152. package/src/core/logic/generator.ts +62 -62
  153. package/src/core/pluresdb/adapter.ts +8 -8
  154. package/src/core/pluresdb/generator.ts +39 -35
  155. package/src/core/pluresdb/index.ts +9 -12
  156. package/src/core/pluresdb/schema-registry.ts +22 -25
  157. package/src/core/pluresdb/store.ts +57 -57
  158. package/src/core/protocol.ts +14 -14
  159. package/src/core/reactive-engine.svelte.ts +65 -0
  160. package/src/core/reactive-engine.ts +67 -0
  161. package/src/core/rules.ts +4 -4
  162. package/src/core/schema/loader.common.ts +150 -0
  163. package/src/core/schema/loader.ts +19 -149
  164. package/src/core/schema/normalize.ts +34 -51
  165. package/src/core/schema/types.ts +47 -11
  166. package/src/dsl/index.ts +8 -8
  167. package/src/dsl.ts +11 -17
  168. package/src/examples/advanced-todo/README.md +58 -40
  169. package/src/examples/advanced-todo/index.ts +3 -3
  170. package/src/examples/auth-basic/index.ts +30 -30
  171. package/src/examples/cart/index.ts +50 -50
  172. package/src/examples/hero-ecommerce/index.ts +130 -157
  173. package/src/examples/svelte-counter/index.ts +22 -26
  174. package/src/flows.ts +6 -17
  175. package/src/index.browser.ts +204 -0
  176. package/src/index.ts +37 -42
  177. package/src/integrations/code-canvas.ts +237 -193
  178. package/src/integrations/pluresdb.ts +55 -35
  179. package/src/integrations/state-docs.ts +104 -104
  180. package/src/integrations/svelte.ts +35 -35
  181. package/src/integrations/tauri.ts +75 -73
  182. package/src/integrations/unum.ts +68 -61
  183. package/src/registry.ts +7 -14
  184. package/src/runtime/terminal-adapter.ts +31 -26
  185. package/src/step.ts +10 -16
  186. package/src/types.ts +1 -1
  187. package/templates/basic-app/README.md +6 -9
  188. package/templates/fullstack-app/README.md +10 -0
  189. package/dist/core/codegen/docs-generator.d.ts +0 -123
  190. package/dist/core/codegen/docs-generator.d.ts.map +0 -1
  191. package/dist/core/codegen/docs-generator.js +0 -674
  192. package/dist/core/codegen/docs-generator.js.map +0 -1
  193. package/dist/core/codegen/index.d.ts +0 -11
  194. package/dist/core/codegen/index.d.ts.map +0 -1
  195. package/dist/core/codegen/index.js +0 -13
  196. package/dist/core/codegen/index.js.map +0 -1
  197. package/dist/core/codegen/ts-generator.d.ts +0 -8
  198. package/dist/core/codegen/ts-generator.d.ts.map +0 -1
  199. package/dist/core/codegen/ts-generator.js +0 -8
  200. package/dist/core/codegen/ts-generator.js.map +0 -1
  201. package/dist/core/db-adapter/index.d.ts +0 -18
  202. package/dist/core/db-adapter/index.d.ts.map +0 -1
  203. package/dist/core/db-adapter/index.js +0 -23
  204. package/dist/core/db-adapter/index.js.map +0 -1
  205. package/dist/core/db-adapter/sync-engine.d.ts +0 -180
  206. package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
  207. package/dist/core/db-adapter/sync-engine.js +0 -342
  208. package/dist/core/db-adapter/sync-engine.js.map +0 -1
  209. package/dist/core/logic-engine/engine.d.ts +0 -8
  210. package/dist/core/logic-engine/engine.d.ts.map +0 -1
  211. package/dist/core/logic-engine/engine.js +0 -8
  212. package/dist/core/logic-engine/engine.js.map +0 -1
  213. package/dist/core/logic-engine/index.d.ts +0 -16
  214. package/dist/core/logic-engine/index.d.ts.map +0 -1
  215. package/dist/core/logic-engine/index.js +0 -16
  216. package/dist/core/logic-engine/index.js.map +0 -1
  217. package/dist/core/logic-engine/protocol.d.ts +0 -7
  218. package/dist/core/logic-engine/protocol.d.ts.map +0 -1
  219. package/dist/core/logic-engine/protocol.js +0 -7
  220. package/dist/core/logic-engine/protocol.js.map +0 -1
  221. package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
  222. package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
  223. package/dist/core/logic-engine/psf-adapter.js +0 -207
  224. package/dist/core/logic-engine/psf-adapter.js.map +0 -1
  225. package/dist/core/logic-engine/rules.d.ts +0 -7
  226. package/dist/core/logic-engine/rules.d.ts.map +0 -1
  227. package/dist/core/logic-engine/rules.js +0 -7
  228. package/dist/core/logic-engine/rules.js.map +0 -1
  229. package/dist/core/schema-engine/compiler.d.ts +0 -198
  230. package/dist/core/schema-engine/compiler.d.ts.map +0 -1
  231. package/dist/core/schema-engine/compiler.js +0 -262
  232. package/dist/core/schema-engine/compiler.js.map +0 -1
  233. package/dist/core/schema-engine/generator.d.ts +0 -115
  234. package/dist/core/schema-engine/generator.d.ts.map +0 -1
  235. package/dist/core/schema-engine/generator.js +0 -506
  236. package/dist/core/schema-engine/generator.js.map +0 -1
  237. package/dist/core/schema-engine/index.d.ts +0 -18
  238. package/dist/core/schema-engine/index.d.ts.map +0 -1
  239. package/dist/core/schema-engine/index.js +0 -18
  240. package/dist/core/schema-engine/index.js.map +0 -1
  241. package/dist/core/schema-engine/psf.d.ts +0 -612
  242. package/dist/core/schema-engine/psf.d.ts.map +0 -1
  243. package/dist/core/schema-engine/psf.js +0 -45
  244. package/dist/core/schema-engine/psf.js.map +0 -1
  245. package/dist/core/schema-engine/types.d.ts +0 -10
  246. package/dist/core/schema-engine/types.d.ts.map +0 -1
  247. package/dist/core/schema-engine/types.js +0 -7
  248. package/dist/core/schema-engine/types.js.map +0 -1
  249. package/dist/core/schema-engine/validator.d.ts +0 -140
  250. package/dist/core/schema-engine/validator.d.ts.map +0 -1
  251. package/dist/core/schema-engine/validator.js +0 -407
  252. package/dist/core/schema-engine/validator.js.map +0 -1
  253. package/dist/src/adapters/cli.d.ts +0 -43
  254. package/dist/src/adapters/cli.d.ts.map +0 -1
  255. package/dist/src/adapters/cli.js +0 -126
  256. package/dist/src/adapters/cli.js.map +0 -1
  257. package/dist/src/cli/commands/auth.d.ts +0 -26
  258. package/dist/src/cli/commands/auth.d.ts.map +0 -1
  259. package/dist/src/cli/commands/auth.js +0 -233
  260. package/dist/src/cli/commands/auth.js.map +0 -1
  261. package/dist/src/cli/commands/build.d.ts +0 -23
  262. package/dist/src/cli/commands/build.d.ts.map +0 -1
  263. package/dist/src/cli/commands/build.js +0 -162
  264. package/dist/src/cli/commands/build.js.map +0 -1
  265. package/dist/src/cli/commands/canvas.d.ts +0 -23
  266. package/dist/src/cli/commands/canvas.d.ts.map +0 -1
  267. package/dist/src/cli/commands/canvas.js +0 -215
  268. package/dist/src/cli/commands/canvas.js.map +0 -1
  269. package/dist/src/cli/commands/cloud.d.ts +0 -27
  270. package/dist/src/cli/commands/cloud.d.ts.map +0 -1
  271. package/dist/src/cli/commands/cloud.js +0 -232
  272. package/dist/src/cli/commands/cloud.js.map +0 -1
  273. package/dist/src/cli/commands/create.d.ts +0 -21
  274. package/dist/src/cli/commands/create.d.ts.map +0 -1
  275. package/dist/src/cli/commands/create.js +0 -621
  276. package/dist/src/cli/commands/create.js.map +0 -1
  277. package/dist/src/cli/commands/dev.d.ts +0 -21
  278. package/dist/src/cli/commands/dev.d.ts.map +0 -1
  279. package/dist/src/cli/commands/dev.js +0 -71
  280. package/dist/src/cli/commands/dev.js.map +0 -1
  281. package/dist/src/cli/commands/generate.d.ts +0 -25
  282. package/dist/src/cli/commands/generate.d.ts.map +0 -1
  283. package/dist/src/cli/commands/generate.js +0 -168
  284. package/dist/src/cli/commands/generate.js.map +0 -1
  285. package/dist/src/cli/commands/orchestrate.d.ts +0 -44
  286. package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
  287. package/dist/src/cli/commands/orchestrate.js +0 -150
  288. package/dist/src/cli/commands/orchestrate.js.map +0 -1
  289. package/dist/src/cli/commands/verify.d.ts +0 -10
  290. package/dist/src/cli/commands/verify.d.ts.map +0 -1
  291. package/dist/src/cli/commands/verify.js +0 -39
  292. package/dist/src/cli/commands/verify.js.map +0 -1
  293. package/dist/src/cli/index.d.ts +0 -8
  294. package/dist/src/cli/index.d.ts.map +0 -1
  295. package/dist/src/cli/index.js +0 -226
  296. package/dist/src/cli/index.js.map +0 -1
  297. package/dist/src/cloud/auth.d.ts +0 -51
  298. package/dist/src/cloud/auth.d.ts.map +0 -1
  299. package/dist/src/cloud/auth.js +0 -194
  300. package/dist/src/cloud/auth.js.map +0 -1
  301. package/dist/src/cloud/billing.d.ts +0 -184
  302. package/dist/src/cloud/billing.d.ts.map +0 -1
  303. package/dist/src/cloud/billing.js +0 -179
  304. package/dist/src/cloud/billing.js.map +0 -1
  305. package/dist/src/cloud/client.d.ts +0 -39
  306. package/dist/src/cloud/client.d.ts.map +0 -1
  307. package/dist/src/cloud/client.js +0 -176
  308. package/dist/src/cloud/client.js.map +0 -1
  309. package/dist/src/cloud/index.d.ts +0 -44
  310. package/dist/src/cloud/index.d.ts.map +0 -1
  311. package/dist/src/cloud/index.js +0 -44
  312. package/dist/src/cloud/index.js.map +0 -1
  313. package/dist/src/cloud/marketplace.d.ts +0 -166
  314. package/dist/src/cloud/marketplace.d.ts.map +0 -1
  315. package/dist/src/cloud/marketplace.js +0 -159
  316. package/dist/src/cloud/marketplace.js.map +0 -1
  317. package/dist/src/cloud/provisioning.d.ts +0 -110
  318. package/dist/src/cloud/provisioning.d.ts.map +0 -1
  319. package/dist/src/cloud/provisioning.js +0 -148
  320. package/dist/src/cloud/provisioning.js.map +0 -1
  321. package/dist/src/cloud/relay/endpoints.d.ts +0 -62
  322. package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
  323. package/dist/src/cloud/relay/endpoints.js +0 -217
  324. package/dist/src/cloud/relay/endpoints.js.map +0 -1
  325. package/dist/src/cloud/relay/health/index.d.ts +0 -5
  326. package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
  327. package/dist/src/cloud/relay/health/index.js +0 -9
  328. package/dist/src/cloud/relay/health/index.js.map +0 -1
  329. package/dist/src/cloud/relay/stats/index.d.ts +0 -5
  330. package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
  331. package/dist/src/cloud/relay/stats/index.js +0 -9
  332. package/dist/src/cloud/relay/stats/index.js.map +0 -1
  333. package/dist/src/cloud/relay/sync/index.d.ts +0 -5
  334. package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
  335. package/dist/src/cloud/relay/sync/index.js +0 -9
  336. package/dist/src/cloud/relay/sync/index.js.map +0 -1
  337. package/dist/src/cloud/relay/usage/index.d.ts +0 -5
  338. package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
  339. package/dist/src/cloud/relay/usage/index.js +0 -9
  340. package/dist/src/cloud/relay/usage/index.js.map +0 -1
  341. package/dist/src/cloud/sponsors.d.ts +0 -81
  342. package/dist/src/cloud/sponsors.d.ts.map +0 -1
  343. package/dist/src/cloud/sponsors.js +0 -130
  344. package/dist/src/cloud/sponsors.js.map +0 -1
  345. package/dist/src/cloud/types.d.ts +0 -169
  346. package/dist/src/cloud/types.d.ts.map +0 -1
  347. package/dist/src/cloud/types.js +0 -7
  348. package/dist/src/cloud/types.js.map +0 -1
  349. package/dist/src/components/index.d.ts.map +0 -1
  350. package/dist/src/components/index.js +0 -17
  351. package/dist/src/components/index.js.map +0 -1
  352. package/dist/src/core/actors.d.ts +0 -95
  353. package/dist/src/core/actors.d.ts.map +0 -1
  354. package/dist/src/core/actors.js +0 -158
  355. package/dist/src/core/actors.js.map +0 -1
  356. package/dist/src/core/component/generator.d.ts.map +0 -1
  357. package/dist/src/core/component/generator.js +0 -349
  358. package/dist/src/core/component/generator.js.map +0 -1
  359. package/dist/src/core/engine.d.ts +0 -92
  360. package/dist/src/core/engine.d.ts.map +0 -1
  361. package/dist/src/core/engine.js +0 -199
  362. package/dist/src/core/engine.js.map +0 -1
  363. package/dist/src/core/introspection.d.ts +0 -141
  364. package/dist/src/core/introspection.d.ts.map +0 -1
  365. package/dist/src/core/introspection.js +0 -208
  366. package/dist/src/core/introspection.js.map +0 -1
  367. package/dist/src/core/logic/generator.d.ts +0 -76
  368. package/dist/src/core/logic/generator.d.ts.map +0 -1
  369. package/dist/src/core/logic/generator.js +0 -370
  370. package/dist/src/core/logic/generator.js.map +0 -1
  371. package/dist/src/core/pluresdb/adapter.d.ts +0 -72
  372. package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
  373. package/dist/src/core/pluresdb/adapter.js +0 -73
  374. package/dist/src/core/pluresdb/adapter.js.map +0 -1
  375. package/dist/src/core/pluresdb/generator.d.ts +0 -58
  376. package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
  377. package/dist/src/core/pluresdb/generator.js +0 -191
  378. package/dist/src/core/pluresdb/generator.js.map +0 -1
  379. package/dist/src/core/pluresdb/index.d.ts +0 -15
  380. package/dist/src/core/pluresdb/index.d.ts.map +0 -1
  381. package/dist/src/core/pluresdb/index.js +0 -11
  382. package/dist/src/core/pluresdb/index.js.map +0 -1
  383. package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
  384. package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
  385. package/dist/src/core/pluresdb/schema-registry.js +0 -130
  386. package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
  387. package/dist/src/core/pluresdb/store.d.ts +0 -199
  388. package/dist/src/core/pluresdb/store.d.ts.map +0 -1
  389. package/dist/src/core/pluresdb/store.js +0 -344
  390. package/dist/src/core/pluresdb/store.js.map +0 -1
  391. package/dist/src/core/protocol.d.ts.map +0 -1
  392. package/dist/src/core/protocol.js +0 -46
  393. package/dist/src/core/protocol.js.map +0 -1
  394. package/dist/src/core/rules.d.ts +0 -120
  395. package/dist/src/core/rules.d.ts.map +0 -1
  396. package/dist/src/core/rules.js +0 -81
  397. package/dist/src/core/rules.js.map +0 -1
  398. package/dist/src/core/schema/loader.d.ts +0 -47
  399. package/dist/src/core/schema/loader.d.ts.map +0 -1
  400. package/dist/src/core/schema/loader.js +0 -189
  401. package/dist/src/core/schema/loader.js.map +0 -1
  402. package/dist/src/core/schema/normalize.d.ts +0 -72
  403. package/dist/src/core/schema/normalize.d.ts.map +0 -1
  404. package/dist/src/core/schema/normalize.js +0 -190
  405. package/dist/src/core/schema/normalize.js.map +0 -1
  406. package/dist/src/core/schema/types.d.ts.map +0 -1
  407. package/dist/src/core/schema/types.js +0 -161
  408. package/dist/src/core/schema/types.js.map +0 -1
  409. package/dist/src/dsl/index.d.ts +0 -152
  410. package/dist/src/dsl/index.d.ts.map +0 -1
  411. package/dist/src/dsl/index.js +0 -132
  412. package/dist/src/dsl/index.js.map +0 -1
  413. package/dist/src/dsl.d.ts +0 -124
  414. package/dist/src/dsl.d.ts.map +0 -1
  415. package/dist/src/dsl.js +0 -130
  416. package/dist/src/dsl.js.map +0 -1
  417. package/dist/src/examples/advanced-todo/index.d.ts +0 -55
  418. package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
  419. package/dist/src/examples/advanced-todo/index.js +0 -222
  420. package/dist/src/examples/advanced-todo/index.js.map +0 -1
  421. package/dist/src/examples/auth-basic/index.d.ts +0 -17
  422. package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
  423. package/dist/src/examples/auth-basic/index.js +0 -122
  424. package/dist/src/examples/auth-basic/index.js.map +0 -1
  425. package/dist/src/examples/cart/index.d.ts +0 -19
  426. package/dist/src/examples/cart/index.d.ts.map +0 -1
  427. package/dist/src/examples/cart/index.js +0 -202
  428. package/dist/src/examples/cart/index.js.map +0 -1
  429. package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
  430. package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
  431. package/dist/src/examples/hero-ecommerce/index.js +0 -506
  432. package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
  433. package/dist/src/examples/svelte-counter/index.d.ts +0 -31
  434. package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
  435. package/dist/src/examples/svelte-counter/index.js +0 -123
  436. package/dist/src/examples/svelte-counter/index.js.map +0 -1
  437. package/dist/src/flows.d.ts +0 -125
  438. package/dist/src/flows.d.ts.map +0 -1
  439. package/dist/src/flows.js +0 -160
  440. package/dist/src/flows.js.map +0 -1
  441. package/dist/src/index.d.ts +0 -77
  442. package/dist/src/index.d.ts.map +0 -1
  443. package/dist/src/index.js +0 -64
  444. package/dist/src/index.js.map +0 -1
  445. package/dist/src/integrations/code-canvas.d.ts +0 -265
  446. package/dist/src/integrations/code-canvas.d.ts.map +0 -1
  447. package/dist/src/integrations/code-canvas.js +0 -451
  448. package/dist/src/integrations/code-canvas.js.map +0 -1
  449. package/dist/src/integrations/pluresdb.d.ts +0 -117
  450. package/dist/src/integrations/pluresdb.d.ts.map +0 -1
  451. package/dist/src/integrations/pluresdb.js +0 -117
  452. package/dist/src/integrations/pluresdb.js.map +0 -1
  453. package/dist/src/integrations/state-docs.d.ts +0 -191
  454. package/dist/src/integrations/state-docs.d.ts.map +0 -1
  455. package/dist/src/integrations/state-docs.js +0 -515
  456. package/dist/src/integrations/state-docs.js.map +0 -1
  457. package/dist/src/integrations/svelte.d.ts.map +0 -1
  458. package/dist/src/integrations/svelte.js +0 -447
  459. package/dist/src/integrations/svelte.js.map +0 -1
  460. package/dist/src/integrations/tauri.d.ts +0 -360
  461. package/dist/src/integrations/tauri.d.ts.map +0 -1
  462. package/dist/src/integrations/tauri.js +0 -278
  463. package/dist/src/integrations/tauri.js.map +0 -1
  464. package/dist/src/integrations/unum.d.ts +0 -159
  465. package/dist/src/integrations/unum.d.ts.map +0 -1
  466. package/dist/src/integrations/unum.js +0 -240
  467. package/dist/src/integrations/unum.js.map +0 -1
  468. package/dist/src/registry.d.ts +0 -94
  469. package/dist/src/registry.d.ts.map +0 -1
  470. package/dist/src/registry.js +0 -181
  471. package/dist/src/registry.js.map +0 -1
  472. package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
  473. package/dist/src/runtime/terminal-adapter.js +0 -239
  474. package/dist/src/runtime/terminal-adapter.js.map +0 -1
  475. package/dist/src/step.d.ts +0 -34
  476. package/dist/src/step.d.ts.map +0 -1
  477. package/dist/src/step.js +0 -111
  478. package/dist/src/step.js.map +0 -1
  479. package/dist/src/types.d.ts +0 -63
  480. package/dist/src/types.d.ts.map +0 -1
  481. package/dist/src/types.js +0 -6
  482. package/dist/src/types.js.map +0 -1
  483. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
  484. package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
  485. package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
  486. package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
  487. package/dist/tools/cli/commands/index.d.ts +0 -7
  488. package/dist/tools/cli/commands/index.d.ts.map +0 -1
  489. package/dist/tools/cli/commands/index.js +0 -7
  490. package/dist/tools/cli/commands/index.js.map +0 -1
  491. package/dist/tools/cli/index.d.ts +0 -8
  492. package/dist/tools/cli/index.d.ts.map +0 -1
  493. package/dist/tools/cli/index.js +0 -9
  494. package/dist/tools/cli/index.js.map +0 -1
  495. package/dist/tools/watcher/index.d.ts +0 -105
  496. package/dist/tools/watcher/index.d.ts.map +0 -1
  497. package/dist/tools/watcher/index.js +0 -213
  498. package/dist/tools/watcher/index.js.map +0 -1
  499. package/dist/ui/canvas/canvas-projection.d.ts +0 -78
  500. package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
  501. package/dist/ui/canvas/canvas-projection.js +0 -416
  502. package/dist/ui/canvas/canvas-projection.js.map +0 -1
  503. package/dist/ui/canvas/canvas-state.d.ts +0 -200
  504. package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
  505. package/dist/ui/canvas/canvas-state.js +0 -464
  506. package/dist/ui/canvas/canvas-state.js.map +0 -1
  507. package/dist/ui/canvas/components/index.d.ts +0 -95
  508. package/dist/ui/canvas/components/index.d.ts.map +0 -1
  509. package/dist/ui/canvas/components/index.js +0 -19
  510. package/dist/ui/canvas/components/index.js.map +0 -1
  511. package/dist/ui/canvas/index.d.ts +0 -32
  512. package/dist/ui/canvas/index.d.ts.map +0 -1
  513. package/dist/ui/canvas/index.js +0 -32
  514. package/dist/ui/canvas/index.js.map +0 -1
  515. package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
  516. package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
  517. package/dist/ui/canvas-inspector/src/server.js +0 -248
  518. package/dist/ui/canvas-inspector/src/server.js.map +0 -1
  519. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
  520. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
  521. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
  522. package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
  523. package/dist/ui/svelte-generator/index.d.ts +0 -9
  524. package/dist/ui/svelte-generator/index.d.ts.map +0 -1
  525. package/dist/ui/svelte-generator/index.js +0 -11
  526. package/dist/ui/svelte-generator/index.js.map +0 -1
  527. package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
  528. package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
  529. package/dist/ui/svelte-generator/psf-generator.js +0 -506
  530. package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Praxis Reactive Logic Engine
3
+ *
4
+ * A Svelte 5 native implementation of the Praxis Logic Engine.
5
+ * Uses Runes ($state, $derived, $effect) for fine-grained reactivity.
6
+ */
7
+
8
+ console.log("Reactive Engine Loaded");
9
+
10
+ export interface ReactiveEngineOptions<TContext> {
11
+ initialContext: TContext;
12
+ initialFacts?: any[];
13
+ initialMeta?: Record<string, unknown>;
14
+ }
15
+
16
+ export class ReactiveLogicEngine<TContext extends object> {
17
+ // The single source of truth, reactive by default
18
+ // We use $state.raw for things that shouldn't be deeply reactive if needed,
19
+ // but for context we usually want deep reactivity.
20
+ state = $state<{
21
+ context: TContext;
22
+ facts: any[];
23
+ meta: Record<string, unknown>;
24
+ }>({
25
+ context: {} as TContext,
26
+ facts: [],
27
+ meta: {}
28
+ });
29
+
30
+ constructor(options: ReactiveEngineOptions<TContext>) {
31
+ this.state.context = options.initialContext;
32
+ this.state.facts = options.initialFacts ?? [];
33
+ this.state.meta = options.initialMeta ?? {};
34
+ }
35
+
36
+ /**
37
+ * Access the reactive context directly.
38
+ * Consumers can use this in $derived() or $effect().
39
+ */
40
+ get context() {
41
+ return this.state.context;
42
+ }
43
+
44
+ /**
45
+ * Access the reactive facts list.
46
+ */
47
+ get facts() {
48
+ return this.state.facts;
49
+ }
50
+
51
+ /**
52
+ * Apply a mutation to the state.
53
+ * This is the "Action" or "Rule" equivalent.
54
+ *
55
+ * @param mutator A function that receives the state and modifies it.
56
+ */
57
+ apply(mutator: (state: { context: TContext; facts: any[]; meta: Record<string, unknown> }) => void) {
58
+ mutator(this.state);
59
+ }
60
+
61
+ /**
62
+ * Access the reactive meta.
63
+ */
64
+ get meta() {
65
+ return this.state.meta;
66
+ }
67
+ }
package/src/core/rules.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Rules and Constraints System
3
- *
3
+ *
4
4
  * This module defines the types and registry for rules and constraints.
5
5
  * Rules and constraints are identified by stable IDs and can be described as data,
6
6
  * making them portable across languages and suitable for DSL-based definitions.
7
7
  */
8
8
 
9
- import type { PraxisEvent, PraxisFact, PraxisState } from "./protocol.js";
9
+ import type { PraxisEvent, PraxisFact, PraxisState } from './protocol.js';
10
10
 
11
11
  /**
12
12
  * Unique identifier for a rule
@@ -21,7 +21,7 @@ export type ConstraintId = string;
21
21
  /**
22
22
  * A rule function derives new facts or transitions from context + input facts/events.
23
23
  * Rules must be pure - no side effects.
24
- *
24
+ *
25
25
  * @param state Current Praxis state
26
26
  * @param events Events to process
27
27
  * @returns Array of new facts to add to the state
@@ -34,7 +34,7 @@ export type RuleFn<TContext = unknown> = (
34
34
  /**
35
35
  * A constraint function checks that an invariant holds.
36
36
  * Constraints must be pure - no side effects.
37
- *
37
+ *
38
38
  * @param state Current Praxis state
39
39
  * @returns true if constraint is satisfied, false or error message if violated
40
40
  */
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Praxis Schema Loader (Common/Browser Compatible)
3
+ *
4
+ * Core schema loading and validation functions that don't depend on Node.js APIs.
5
+ */
6
+
7
+ import { load as yamlLoad } from 'js-yaml';
8
+ import type { PraxisSchema, ValidationResult } from './types.js';
9
+ import { validateSchema } from './types.js';
10
+
11
+ /**
12
+ * Loader options
13
+ */
14
+ export interface LoaderOptions {
15
+ /** Validate schema after loading */
16
+ validate?: boolean;
17
+ /** Base directory for resolving relative paths */
18
+ baseDir?: string;
19
+ }
20
+
21
+ /**
22
+ * Loader result
23
+ */
24
+ export interface LoaderResult {
25
+ /** Loaded schema */
26
+ schema?: PraxisSchema;
27
+ /** Validation result */
28
+ validation?: ValidationResult;
29
+ /** Load errors */
30
+ errors: string[];
31
+ }
32
+
33
+ /**
34
+ * Create a new empty schema
35
+ */
36
+ export function createSchema(name: string): PraxisSchema {
37
+ return {
38
+ version: '1.0.0',
39
+ name,
40
+ description: `Schema for ${name}`,
41
+ models: [],
42
+ components: [],
43
+ logic: [],
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Load schema from JSON string
49
+ */
50
+ export function loadSchemaFromJson(json: string, options: LoaderOptions = {}): LoaderResult {
51
+ const errors: string[] = [];
52
+
53
+ try {
54
+ const schema = JSON.parse(json) as PraxisSchema;
55
+
56
+ // Validate if requested
57
+ let validation: ValidationResult | undefined;
58
+ if (options.validate !== false) {
59
+ validation = validateSchema(schema);
60
+ if (!validation.valid) {
61
+ errors.push('Schema validation failed:');
62
+ validation.errors.forEach((error) => {
63
+ errors.push(` ${error.path}: ${error.message}`);
64
+ });
65
+ }
66
+ }
67
+
68
+ return {
69
+ schema,
70
+ validation,
71
+ errors,
72
+ };
73
+ } catch (error) {
74
+ if (error instanceof Error) {
75
+ errors.push(`Failed to parse JSON: ${error.message}`);
76
+ } else {
77
+ errors.push('Failed to parse JSON: Unknown error');
78
+ }
79
+ return { errors };
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Load schema from YAML string
85
+ */
86
+ export function loadSchemaFromYaml(yaml: string, options: LoaderOptions = {}): LoaderResult {
87
+ const errors: string[] = [];
88
+
89
+ try {
90
+ const schema = yamlLoad(yaml) as PraxisSchema;
91
+
92
+ // Validate if requested
93
+ let validation: ValidationResult | undefined;
94
+ if (options.validate !== false) {
95
+ validation = validateSchema(schema);
96
+ if (!validation.valid) {
97
+ errors.push('Schema validation failed:');
98
+ validation.errors.forEach((error) => {
99
+ errors.push(` ${error.path}: ${error.message}`);
100
+ });
101
+ }
102
+ }
103
+
104
+ return {
105
+ schema,
106
+ validation,
107
+ errors,
108
+ };
109
+ } catch (error) {
110
+ if (error instanceof Error) {
111
+ errors.push(`Failed to parse YAML: ${error.message}`);
112
+ } else {
113
+ errors.push('Failed to parse YAML: Unknown error');
114
+ }
115
+ return { errors };
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Validate that a loaded schema has required fields for generation
121
+ */
122
+ export function validateForGeneration(schema: PraxisSchema): ValidationResult {
123
+ const errors: string[] = [];
124
+
125
+ // Check for entities/models
126
+ if (!schema.models || schema.models.length === 0) {
127
+ errors.push('Schema must define at least one model for generation');
128
+ }
129
+
130
+ // Check that models have valid fields
131
+ schema.models?.forEach((model, index) => {
132
+ if (!model.fields || model.fields.length === 0) {
133
+ errors.push(`Model "${model.name}" at index ${index} must have at least one field`);
134
+ }
135
+
136
+ model.fields?.forEach((field, fieldIndex) => {
137
+ if (!field.name) {
138
+ errors.push(`Field at index ${fieldIndex} in model "${model.name}" must have a name`);
139
+ }
140
+ if (!field.type) {
141
+ errors.push(`Field "${field.name}" in model "${model.name}" must have a type`);
142
+ }
143
+ });
144
+ });
145
+
146
+ return {
147
+ valid: errors.length === 0,
148
+ errors: errors.map((message) => ({ path: 'schema', message })),
149
+ };
150
+ }
@@ -1,36 +1,22 @@
1
1
  /**
2
2
  * Praxis Schema Loader
3
- *
3
+ *
4
4
  * Loads and validates Praxis schema files.
5
5
  */
6
6
 
7
7
  import { readFile } from 'node:fs/promises';
8
8
  import { pathToFileURL } from 'node:url';
9
- import { load as yamlLoad } from 'js-yaml';
10
9
  import type { PraxisSchema, ValidationResult } from './types.js';
11
10
  import { validateSchema } from './types.js';
11
+ import {
12
+ loadSchemaFromJson,
13
+ loadSchemaFromYaml,
14
+ LoaderOptions,
15
+ LoaderResult,
16
+ } from './loader.common.js';
12
17
 
13
- /**
14
- * Loader options
15
- */
16
- export interface LoaderOptions {
17
- /** Validate schema after loading */
18
- validate?: boolean;
19
- /** Base directory for resolving relative paths */
20
- baseDir?: string;
21
- }
22
-
23
- /**
24
- * Loader result
25
- */
26
- export interface LoaderResult {
27
- /** Loaded schema */
28
- schema?: PraxisSchema;
29
- /** Validation result */
30
- validation?: ValidationResult;
31
- /** Load errors */
32
- errors: string[];
33
- }
18
+ // Re-export common functions
19
+ export * from './loader.common.js';
34
20
 
35
21
  /**
36
22
  * Load a Praxis schema from a file
@@ -40,20 +26,20 @@ export async function loadSchema(
40
26
  options: LoaderOptions = {}
41
27
  ): Promise<LoaderResult> {
42
28
  const errors: string[] = [];
43
-
29
+
44
30
  try {
45
31
  // Only .js files are supported. TypeScript schema files must be compiled to .js first.
46
32
  // Use a compiled JavaScript file for your schema.
47
33
  // Dynamic import is used, which works with .js files only.
48
-
34
+
49
35
  // Convert to absolute URL for ES module import
50
36
  let fileUrl = pathToFileURL(filePath).href;
51
-
37
+
52
38
  // Attempt to import .ts or .js files directly. If import fails, error will be caught below.
53
-
39
+
54
40
  // Dynamic import of the schema file
55
41
  const module = await import(fileUrl);
56
-
42
+
57
43
  // Look for common schema export names
58
44
  let schema: PraxisSchema | undefined;
59
45
  if (module.default) {
@@ -67,23 +53,20 @@ export async function loadSchema(
67
53
  const exports = Object.values(module);
68
54
  const possibleSchema = exports.find(
69
55
  (exp): exp is PraxisSchema =>
70
- typeof exp === 'object' &&
71
- exp !== null &&
72
- 'version' in exp &&
73
- 'name' in exp
56
+ typeof exp === 'object' && exp !== null && 'version' in exp && 'name' in exp
74
57
  );
75
58
  if (possibleSchema) {
76
59
  schema = possibleSchema;
77
60
  }
78
61
  }
79
-
62
+
80
63
  if (!schema) {
81
64
  errors.push(
82
65
  'Schema file must export a PraxisSchema object (as default, schema, or appSchema)'
83
66
  );
84
67
  return { errors };
85
68
  }
86
-
69
+
87
70
  // Validate if requested
88
71
  let validation: ValidationResult | undefined;
89
72
  if (options.validate !== false) {
@@ -95,7 +78,7 @@ export async function loadSchema(
95
78
  });
96
79
  }
97
80
  }
98
-
81
+
99
82
  return {
100
83
  schema,
101
84
  validation,
@@ -111,83 +94,7 @@ export async function loadSchema(
111
94
  }
112
95
  }
113
96
 
114
- /**
115
- * Load schema from JSON string
116
- */
117
- export function loadSchemaFromJson(
118
- json: string,
119
- options: LoaderOptions = {}
120
- ): LoaderResult {
121
- const errors: string[] = [];
122
-
123
- try {
124
- const schema = JSON.parse(json) as PraxisSchema;
125
-
126
- // Validate if requested
127
- let validation: ValidationResult | undefined;
128
- if (options.validate !== false) {
129
- validation = validateSchema(schema);
130
- if (!validation.valid) {
131
- errors.push('Schema validation failed:');
132
- validation.errors.forEach((error) => {
133
- errors.push(` ${error.path}: ${error.message}`);
134
- });
135
- }
136
- }
137
-
138
- return {
139
- schema,
140
- validation,
141
- errors,
142
- };
143
- } catch (error) {
144
- if (error instanceof Error) {
145
- errors.push(`Failed to parse JSON: ${error.message}`);
146
- } else {
147
- errors.push('Failed to parse JSON: Unknown error');
148
- }
149
- return { errors };
150
- }
151
- }
152
97
 
153
- /**
154
- * Load schema from YAML string
155
- */
156
- export function loadSchemaFromYaml(
157
- yaml: string,
158
- options: LoaderOptions = {}
159
- ): LoaderResult {
160
- const errors: string[] = [];
161
-
162
- try {
163
- const schema = yamlLoad(yaml) as PraxisSchema;
164
-
165
- // Validate if requested
166
- let validation: ValidationResult | undefined;
167
- if (options.validate !== false) {
168
- validation = validateSchema(schema);
169
- if (!validation.valid) {
170
- errors.push('Schema validation failed:');
171
- validation.errors.forEach((error) => {
172
- errors.push(` ${error.path}: ${error.message}`);
173
- });
174
- }
175
- }
176
-
177
- return {
178
- schema,
179
- validation,
180
- errors,
181
- };
182
- } catch (error) {
183
- if (error instanceof Error) {
184
- errors.push(`Failed to parse YAML: ${error.message}`);
185
- } else {
186
- errors.push('Failed to parse YAML: Unknown error');
187
- }
188
- return { errors };
189
- }
190
- }
191
98
 
192
99
  /**
193
100
  * Load schema from file (supports .ts, .json, and .yaml/.yml)
@@ -207,41 +114,4 @@ export async function loadSchemaFromFile(
207
114
  }
208
115
  }
209
116
 
210
- /**
211
- * Validate that a loaded schema has required fields for generation
212
- */
213
- export function validateForGeneration(schema: PraxisSchema): ValidationResult {
214
- const errors: string[] = [];
215
-
216
- // Check for entities/models
217
- if (!schema.models || schema.models.length === 0) {
218
- errors.push('Schema must define at least one model for generation');
219
- }
220
-
221
- // Check that models have valid fields
222
- schema.models?.forEach((model, index) => {
223
- if (!model.fields || model.fields.length === 0) {
224
- errors.push(
225
- `Model "${model.name}" at index ${index} must have at least one field`
226
- );
227
- }
228
-
229
- model.fields?.forEach((field, fieldIndex) => {
230
- if (!field.name) {
231
- errors.push(
232
- `Field at index ${fieldIndex} in model "${model.name}" must have a name`
233
- );
234
- }
235
- if (!field.type) {
236
- errors.push(
237
- `Field "${field.name}" in model "${model.name}" must have a type`
238
- );
239
- }
240
- });
241
- });
242
-
243
- return {
244
- valid: errors.length === 0,
245
- errors: errors.map((message) => ({ path: 'schema', message })),
246
- };
247
- }
117
+
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Praxis Schema Normalizer
3
- *
3
+ *
4
4
  * Expands and normalizes schema definitions for code generation.
5
5
  */
6
6
 
@@ -74,19 +74,13 @@ export function normalizeSchema(
74
74
  options: NormalizationOptions = {}
75
75
  ): NormalizedSchema {
76
76
  const schemaPrefix = options.schemaPrefix || schema.name;
77
-
77
+
78
78
  // Normalize models
79
- const normalizedModels = normalizeModels(
80
- schema.models || [],
81
- schemaPrefix,
82
- options
83
- );
84
-
79
+ const normalizedModels = normalizeModels(schema.models || [], schemaPrefix, options);
80
+
85
81
  // Create model lookup map
86
- const modelMap = new Map(
87
- normalizedModels.map((model) => [model.name, model])
88
- );
89
-
82
+ const modelMap = new Map(normalizedModels.map((model) => [model.name, model]));
83
+
90
84
  // Normalize components
91
85
  const normalizedComponents = normalizeComponents(
92
86
  schema.components || [],
@@ -94,14 +88,10 @@ export function normalizeSchema(
94
88
  modelMap,
95
89
  options
96
90
  );
97
-
91
+
98
92
  // Normalize logic
99
- const normalizedLogic = normalizeLogic(
100
- schema.logic || [],
101
- schemaPrefix,
102
- options
103
- );
104
-
93
+ const normalizedLogic = normalizeLogic(schema.logic || [], schemaPrefix, options);
94
+
105
95
  return {
106
96
  ...schema,
107
97
  models: normalizedModels,
@@ -121,11 +111,11 @@ function normalizeModels(
121
111
  return models.map((model) => {
122
112
  const fullName = `${schemaPrefix}.${model.name}`;
123
113
  const dependencies = extractModelDependencies(model);
124
-
114
+
125
115
  // For now, allFields is the same as fields
126
116
  // In the future, this could include inherited fields
127
117
  const allFields = [...model.fields];
128
-
118
+
129
119
  return {
130
120
  ...model,
131
121
  fullName,
@@ -140,20 +130,20 @@ function normalizeModels(
140
130
  */
141
131
  function extractModelDependencies(model: ModelDefinition): string[] {
142
132
  const dependencies = new Set<string>();
143
-
133
+
144
134
  for (const field of model.fields) {
145
135
  if (typeof field.type === 'object' && 'reference' in field.type) {
146
136
  dependencies.add(field.type.reference);
147
137
  }
148
138
  }
149
-
139
+
150
140
  // Add relationship dependencies
151
141
  if (model.relationships) {
152
142
  for (const rel of model.relationships) {
153
143
  dependencies.add(rel.target);
154
144
  }
155
145
  }
156
-
146
+
157
147
  return Array.from(dependencies);
158
148
  }
159
149
 
@@ -168,10 +158,8 @@ function normalizeComponents(
168
158
  ): NormalizedComponent[] {
169
159
  return components.map((component) => {
170
160
  const fullName = `${schemaPrefix}.${component.name}`;
171
- const resolvedModel = component.model
172
- ? modelMap.get(component.model)
173
- : undefined;
174
-
161
+ const resolvedModel = component.model ? modelMap.get(component.model) : undefined;
162
+
175
163
  return {
176
164
  ...component,
177
165
  fullName,
@@ -190,7 +178,7 @@ function normalizeLogic(
190
178
  ): NormalizedLogic[] {
191
179
  return logic.map((logicDef) => {
192
180
  const fullId = `${schemaPrefix}.${logicDef.id}`;
193
-
181
+
194
182
  return {
195
183
  ...logicDef,
196
184
  fullId,
@@ -201,30 +189,27 @@ function normalizeLogic(
201
189
  /**
202
190
  * Expand field type to fully qualified type string
203
191
  */
204
- export function expandFieldType(
205
- fieldType: any,
206
- schemaPrefix: string = ''
207
- ): string {
192
+ export function expandFieldType(fieldType: any, schemaPrefix: string = ''): string {
208
193
  if (typeof fieldType === 'string') {
209
194
  return fieldType;
210
195
  }
211
-
196
+
212
197
  if (typeof fieldType === 'object') {
213
198
  if ('array' in fieldType) {
214
199
  const innerType = expandFieldType(fieldType.array, schemaPrefix);
215
200
  return `${innerType}[]`;
216
201
  }
217
-
202
+
218
203
  if ('object' in fieldType) {
219
204
  return 'object';
220
205
  }
221
-
206
+
222
207
  if ('reference' in fieldType) {
223
208
  const refName = fieldType.reference;
224
209
  return schemaPrefix ? `${schemaPrefix}.${refName}` : refName;
225
210
  }
226
211
  }
227
-
212
+
228
213
  return 'unknown';
229
214
  }
230
215
 
@@ -250,13 +235,13 @@ export function fieldTypeToTypeScript(fieldType: any): string {
250
235
  return 'unknown';
251
236
  }
252
237
  }
253
-
238
+
254
239
  if (typeof fieldType === 'object') {
255
240
  if ('array' in fieldType) {
256
241
  const innerType = fieldTypeToTypeScript(fieldType.array);
257
242
  return `${innerType}[]`;
258
243
  }
259
-
244
+
260
245
  if ('object' in fieldType) {
261
246
  const fields = fieldType.object;
262
247
  const fieldTypes = Object.entries(fields)
@@ -267,30 +252,28 @@ export function fieldTypeToTypeScript(fieldType: any): string {
267
252
  .join('; ');
268
253
  return `{ ${fieldTypes} }`;
269
254
  }
270
-
255
+
271
256
  if ('reference' in fieldType) {
272
257
  return fieldType.reference;
273
258
  }
274
259
  }
275
-
260
+
276
261
  return 'unknown';
277
262
  }
278
263
 
279
264
  /**
280
265
  * Sort models by dependency order (models with no dependencies first)
281
266
  */
282
- export function sortModelsByDependencies(
283
- models: NormalizedModel[]
284
- ): NormalizedModel[] {
267
+ export function sortModelsByDependencies(models: NormalizedModel[]): NormalizedModel[] {
285
268
  const sorted: NormalizedModel[] = [];
286
269
  const visited = new Set<string>();
287
270
  const visiting = new Set<string>();
288
-
271
+
289
272
  function visit(model: NormalizedModel) {
290
273
  if (visited.has(model.name)) {
291
274
  return;
292
275
  }
293
-
276
+
294
277
  if (visiting.has(model.name)) {
295
278
  // Circular dependency detected, just add it
296
279
  visiting.delete(model.name);
@@ -298,9 +281,9 @@ export function sortModelsByDependencies(
298
281
  visited.add(model.name);
299
282
  return;
300
283
  }
301
-
284
+
302
285
  visiting.add(model.name);
303
-
286
+
304
287
  // Visit dependencies first
305
288
  for (const depName of model.dependencies) {
306
289
  const dep = models.find((m) => m.name === depName);
@@ -308,15 +291,15 @@ export function sortModelsByDependencies(
308
291
  visit(dep);
309
292
  }
310
293
  }
311
-
294
+
312
295
  visiting.delete(model.name);
313
296
  visited.add(model.name);
314
297
  sorted.push(model);
315
298
  }
316
-
299
+
317
300
  for (const model of models) {
318
301
  visit(model);
319
302
  }
320
-
303
+
321
304
  return sorted;
322
305
  }