@plures/praxis 0.2.1 → 1.0.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 (486) hide show
  1. package/README.md +188 -61
  2. package/core/codegen/docs-generator.ts +808 -0
  3. package/core/codegen/index.ts +27 -0
  4. package/core/codegen/ts-generator.ts +15 -0
  5. package/core/db-adapter/index.ts +52 -0
  6. package/core/db-adapter/sync-engine.ts +450 -0
  7. package/core/logic-engine/engine.ts +12 -0
  8. package/core/logic-engine/index.ts +16 -0
  9. package/core/logic-engine/protocol.ts +16 -0
  10. package/core/logic-engine/psf-adapter.ts +269 -0
  11. package/core/logic-engine/rules.ts +16 -0
  12. package/core/schema-engine/compiler.ts +431 -0
  13. package/core/schema-engine/generator.ts +635 -0
  14. package/core/schema-engine/index.ts +18 -0
  15. package/core/schema-engine/psf.ts +664 -0
  16. package/core/schema-engine/types.ts +63 -0
  17. package/core/schema-engine/validator.ts +541 -0
  18. package/dist/core/codegen/docs-generator.d.ts +123 -0
  19. package/dist/core/codegen/docs-generator.d.ts.map +1 -0
  20. package/dist/core/codegen/docs-generator.js +674 -0
  21. package/dist/core/codegen/docs-generator.js.map +1 -0
  22. package/dist/core/codegen/index.d.ts +11 -0
  23. package/dist/core/codegen/index.d.ts.map +1 -0
  24. package/dist/core/codegen/index.js +13 -0
  25. package/dist/core/codegen/index.js.map +1 -0
  26. package/dist/core/codegen/ts-generator.d.ts +8 -0
  27. package/dist/core/codegen/ts-generator.d.ts.map +1 -0
  28. package/dist/core/codegen/ts-generator.js +8 -0
  29. package/dist/core/codegen/ts-generator.js.map +1 -0
  30. package/dist/core/db-adapter/index.d.ts +18 -0
  31. package/dist/core/db-adapter/index.d.ts.map +1 -0
  32. package/dist/core/db-adapter/index.js +23 -0
  33. package/dist/core/db-adapter/index.js.map +1 -0
  34. package/dist/core/db-adapter/sync-engine.d.ts +180 -0
  35. package/dist/core/db-adapter/sync-engine.d.ts.map +1 -0
  36. package/dist/core/db-adapter/sync-engine.js +342 -0
  37. package/dist/core/db-adapter/sync-engine.js.map +1 -0
  38. package/dist/core/logic-engine/engine.d.ts +8 -0
  39. package/dist/core/logic-engine/engine.d.ts.map +1 -0
  40. package/dist/core/logic-engine/engine.js +8 -0
  41. package/dist/core/logic-engine/engine.js.map +1 -0
  42. package/dist/core/logic-engine/index.d.ts +16 -0
  43. package/dist/core/logic-engine/index.d.ts.map +1 -0
  44. package/dist/core/logic-engine/index.js +16 -0
  45. package/dist/core/logic-engine/index.js.map +1 -0
  46. package/dist/core/logic-engine/protocol.d.ts +7 -0
  47. package/dist/core/logic-engine/protocol.d.ts.map +1 -0
  48. package/dist/core/logic-engine/protocol.js +7 -0
  49. package/dist/core/logic-engine/protocol.js.map +1 -0
  50. package/dist/core/logic-engine/psf-adapter.d.ts +88 -0
  51. package/dist/core/logic-engine/psf-adapter.d.ts.map +1 -0
  52. package/dist/core/logic-engine/psf-adapter.js +207 -0
  53. package/dist/core/logic-engine/psf-adapter.js.map +1 -0
  54. package/dist/core/logic-engine/rules.d.ts +7 -0
  55. package/dist/core/logic-engine/rules.d.ts.map +1 -0
  56. package/dist/core/logic-engine/rules.js +7 -0
  57. package/dist/core/logic-engine/rules.js.map +1 -0
  58. package/dist/core/schema-engine/compiler.d.ts +198 -0
  59. package/dist/core/schema-engine/compiler.d.ts.map +1 -0
  60. package/dist/core/schema-engine/compiler.js +262 -0
  61. package/dist/core/schema-engine/compiler.js.map +1 -0
  62. package/dist/core/schema-engine/generator.d.ts +115 -0
  63. package/dist/core/schema-engine/generator.d.ts.map +1 -0
  64. package/dist/core/schema-engine/generator.js +506 -0
  65. package/dist/core/schema-engine/generator.js.map +1 -0
  66. package/dist/core/schema-engine/index.d.ts +18 -0
  67. package/dist/core/schema-engine/index.d.ts.map +1 -0
  68. package/dist/core/schema-engine/index.js +18 -0
  69. package/dist/core/schema-engine/index.js.map +1 -0
  70. package/dist/core/schema-engine/psf.d.ts +612 -0
  71. package/dist/core/schema-engine/psf.d.ts.map +1 -0
  72. package/dist/core/schema-engine/psf.js +45 -0
  73. package/dist/core/schema-engine/psf.js.map +1 -0
  74. package/dist/core/schema-engine/types.d.ts +10 -0
  75. package/dist/core/schema-engine/types.d.ts.map +1 -0
  76. package/dist/core/schema-engine/types.js +7 -0
  77. package/dist/core/schema-engine/types.js.map +1 -0
  78. package/dist/core/schema-engine/validator.d.ts +140 -0
  79. package/dist/core/schema-engine/validator.d.ts.map +1 -0
  80. package/dist/core/schema-engine/validator.js +407 -0
  81. package/dist/core/schema-engine/validator.js.map +1 -0
  82. package/dist/src/adapters/cli.d.ts.map +1 -0
  83. package/dist/src/adapters/cli.js.map +1 -0
  84. package/dist/src/cli/commands/auth.d.ts.map +1 -0
  85. package/dist/src/cli/commands/auth.js.map +1 -0
  86. package/dist/src/cli/commands/build.d.ts +23 -0
  87. package/dist/src/cli/commands/build.d.ts.map +1 -0
  88. package/dist/src/cli/commands/build.js +162 -0
  89. package/dist/src/cli/commands/build.js.map +1 -0
  90. package/dist/src/cli/commands/canvas.d.ts +23 -0
  91. package/dist/src/cli/commands/canvas.d.ts.map +1 -0
  92. package/dist/src/cli/commands/canvas.js +215 -0
  93. package/dist/src/cli/commands/canvas.js.map +1 -0
  94. package/dist/src/cli/commands/cloud.d.ts.map +1 -0
  95. package/dist/src/cli/commands/cloud.js.map +1 -0
  96. package/dist/src/cli/commands/create.d.ts +21 -0
  97. package/dist/src/cli/commands/create.d.ts.map +1 -0
  98. package/dist/src/cli/commands/create.js +621 -0
  99. package/dist/src/cli/commands/create.js.map +1 -0
  100. package/dist/src/cli/commands/dev.d.ts +21 -0
  101. package/dist/src/cli/commands/dev.d.ts.map +1 -0
  102. package/dist/src/cli/commands/dev.js +71 -0
  103. package/dist/src/cli/commands/dev.js.map +1 -0
  104. package/dist/src/cli/commands/generate.d.ts.map +1 -0
  105. package/dist/src/cli/commands/generate.js.map +1 -0
  106. package/dist/src/cli/commands/orchestrate.d.ts +44 -0
  107. package/dist/src/cli/commands/orchestrate.d.ts.map +1 -0
  108. package/dist/src/cli/commands/orchestrate.js +150 -0
  109. package/dist/src/cli/commands/orchestrate.js.map +1 -0
  110. package/dist/{cli → src/cli}/index.d.ts.map +1 -1
  111. package/dist/{cli → src/cli}/index.js +53 -21
  112. package/dist/src/cli/index.js.map +1 -0
  113. package/dist/src/cloud/auth.d.ts.map +1 -0
  114. package/dist/src/cloud/auth.js.map +1 -0
  115. package/dist/src/cloud/billing.d.ts.map +1 -0
  116. package/dist/src/cloud/billing.js.map +1 -0
  117. package/dist/src/cloud/client.d.ts.map +1 -0
  118. package/dist/src/cloud/client.js.map +1 -0
  119. package/dist/src/cloud/index.d.ts.map +1 -0
  120. package/dist/src/cloud/index.js.map +1 -0
  121. package/dist/src/cloud/marketplace.d.ts.map +1 -0
  122. package/dist/src/cloud/marketplace.js.map +1 -0
  123. package/dist/src/cloud/provisioning.d.ts.map +1 -0
  124. package/dist/src/cloud/provisioning.js.map +1 -0
  125. package/dist/src/cloud/relay/endpoints.d.ts.map +1 -0
  126. package/dist/src/cloud/relay/endpoints.js.map +1 -0
  127. package/dist/src/cloud/relay/health/index.d.ts.map +1 -0
  128. package/dist/src/cloud/relay/health/index.js.map +1 -0
  129. package/dist/src/cloud/relay/stats/index.d.ts.map +1 -0
  130. package/dist/src/cloud/relay/stats/index.js.map +1 -0
  131. package/dist/src/cloud/relay/sync/index.d.ts.map +1 -0
  132. package/dist/src/cloud/relay/sync/index.js.map +1 -0
  133. package/dist/src/cloud/relay/usage/index.d.ts.map +1 -0
  134. package/dist/src/cloud/relay/usage/index.js.map +1 -0
  135. package/dist/src/cloud/sponsors.d.ts.map +1 -0
  136. package/dist/src/cloud/sponsors.js.map +1 -0
  137. package/dist/src/cloud/types.d.ts.map +1 -0
  138. package/dist/src/cloud/types.js.map +1 -0
  139. package/dist/src/components/index.d.ts.map +1 -0
  140. package/dist/src/components/index.js.map +1 -0
  141. package/dist/src/core/actors.d.ts.map +1 -0
  142. package/dist/src/core/actors.js.map +1 -0
  143. package/dist/src/core/component/generator.d.ts.map +1 -0
  144. package/dist/{core → src/core}/component/generator.js +45 -3
  145. package/dist/src/core/component/generator.js.map +1 -0
  146. package/dist/src/core/engine.d.ts.map +1 -0
  147. package/dist/src/core/engine.js.map +1 -0
  148. package/dist/src/core/introspection.d.ts.map +1 -0
  149. package/dist/src/core/introspection.js.map +1 -0
  150. package/dist/src/core/logic/generator.d.ts.map +1 -0
  151. package/dist/{core → src/core}/logic/generator.js +35 -4
  152. package/dist/src/core/logic/generator.js.map +1 -0
  153. package/dist/src/core/pluresdb/adapter.d.ts +72 -0
  154. package/dist/src/core/pluresdb/adapter.d.ts.map +1 -0
  155. package/dist/src/core/pluresdb/adapter.js +73 -0
  156. package/dist/src/core/pluresdb/adapter.js.map +1 -0
  157. package/dist/src/core/pluresdb/generator.d.ts.map +1 -0
  158. package/dist/{core → src/core}/pluresdb/generator.js +33 -4
  159. package/dist/src/core/pluresdb/generator.js.map +1 -0
  160. package/dist/src/core/pluresdb/index.d.ts +15 -0
  161. package/dist/src/core/pluresdb/index.d.ts.map +1 -0
  162. package/dist/src/core/pluresdb/index.js +11 -0
  163. package/dist/src/core/pluresdb/index.js.map +1 -0
  164. package/dist/src/core/pluresdb/schema-registry.d.ts +104 -0
  165. package/dist/src/core/pluresdb/schema-registry.d.ts.map +1 -0
  166. package/dist/src/core/pluresdb/schema-registry.js +130 -0
  167. package/dist/src/core/pluresdb/schema-registry.js.map +1 -0
  168. package/dist/src/core/pluresdb/store.d.ts +199 -0
  169. package/dist/src/core/pluresdb/store.d.ts.map +1 -0
  170. package/dist/src/core/pluresdb/store.js +344 -0
  171. package/dist/src/core/pluresdb/store.js.map +1 -0
  172. package/dist/src/core/protocol.d.ts.map +1 -0
  173. package/dist/src/core/protocol.js.map +1 -0
  174. package/dist/src/core/rules.d.ts.map +1 -0
  175. package/dist/src/core/rules.js.map +1 -0
  176. package/dist/src/core/schema/loader.d.ts.map +1 -0
  177. package/dist/src/core/schema/loader.js.map +1 -0
  178. package/dist/src/core/schema/normalize.d.ts.map +1 -0
  179. package/dist/src/core/schema/normalize.js.map +1 -0
  180. package/dist/src/core/schema/types.d.ts.map +1 -0
  181. package/dist/src/core/schema/types.js.map +1 -0
  182. package/dist/src/dsl/index.d.ts.map +1 -0
  183. package/dist/src/dsl/index.js.map +1 -0
  184. package/dist/src/dsl.d.ts.map +1 -0
  185. package/dist/src/dsl.js.map +1 -0
  186. package/dist/src/examples/advanced-todo/index.d.ts.map +1 -0
  187. package/dist/src/examples/advanced-todo/index.js.map +1 -0
  188. package/dist/src/examples/auth-basic/index.d.ts.map +1 -0
  189. package/dist/src/examples/auth-basic/index.js.map +1 -0
  190. package/dist/src/examples/cart/index.d.ts.map +1 -0
  191. package/dist/src/examples/cart/index.js.map +1 -0
  192. package/dist/src/examples/hero-ecommerce/index.d.ts.map +1 -0
  193. package/dist/src/examples/hero-ecommerce/index.js.map +1 -0
  194. package/dist/src/examples/svelte-counter/index.d.ts.map +1 -0
  195. package/dist/src/examples/svelte-counter/index.js.map +1 -0
  196. package/dist/src/flows.d.ts.map +1 -0
  197. package/dist/src/flows.js.map +1 -0
  198. package/dist/{index.d.ts → src/index.d.ts} +12 -2
  199. package/dist/src/index.d.ts.map +1 -0
  200. package/dist/{index.js → src/index.js} +6 -1
  201. package/dist/src/index.js.map +1 -0
  202. package/dist/src/integrations/code-canvas.d.ts +265 -0
  203. package/dist/src/integrations/code-canvas.d.ts.map +1 -0
  204. package/dist/src/integrations/code-canvas.js +451 -0
  205. package/dist/src/integrations/code-canvas.js.map +1 -0
  206. package/dist/src/integrations/pluresdb.d.ts +117 -0
  207. package/dist/src/integrations/pluresdb.d.ts.map +1 -0
  208. package/dist/src/integrations/pluresdb.js +117 -0
  209. package/dist/src/integrations/pluresdb.js.map +1 -0
  210. package/dist/src/integrations/state-docs.d.ts +191 -0
  211. package/dist/src/integrations/state-docs.d.ts.map +1 -0
  212. package/dist/src/integrations/state-docs.js +515 -0
  213. package/dist/src/integrations/state-docs.js.map +1 -0
  214. package/dist/src/integrations/svelte.d.ts.map +1 -0
  215. package/dist/src/integrations/svelte.js.map +1 -0
  216. package/dist/src/integrations/tauri.d.ts +360 -0
  217. package/dist/src/integrations/tauri.d.ts.map +1 -0
  218. package/dist/src/integrations/tauri.js +278 -0
  219. package/dist/src/integrations/tauri.js.map +1 -0
  220. package/dist/src/integrations/unum.d.ts +159 -0
  221. package/dist/src/integrations/unum.d.ts.map +1 -0
  222. package/dist/src/integrations/unum.js +240 -0
  223. package/dist/src/integrations/unum.js.map +1 -0
  224. package/dist/src/registry.d.ts.map +1 -0
  225. package/dist/src/registry.js.map +1 -0
  226. package/dist/{runtime → src/runtime}/terminal-adapter.d.ts +58 -7
  227. package/dist/src/runtime/terminal-adapter.d.ts.map +1 -0
  228. package/dist/src/runtime/terminal-adapter.js +237 -0
  229. package/dist/src/runtime/terminal-adapter.js.map +1 -0
  230. package/dist/src/step.d.ts.map +1 -0
  231. package/dist/src/step.js.map +1 -0
  232. package/dist/src/types.d.ts.map +1 -0
  233. package/dist/{cloud → src}/types.js.map +1 -1
  234. package/dist/tools/cli/commands/index.d.ts +7 -0
  235. package/dist/tools/cli/commands/index.d.ts.map +1 -0
  236. package/dist/tools/cli/commands/index.js +7 -0
  237. package/dist/tools/cli/commands/index.js.map +1 -0
  238. package/dist/tools/cli/index.d.ts +8 -0
  239. package/dist/tools/cli/index.d.ts.map +1 -0
  240. package/dist/tools/cli/index.js +9 -0
  241. package/dist/tools/cli/index.js.map +1 -0
  242. package/dist/tools/watcher/index.d.ts +105 -0
  243. package/dist/tools/watcher/index.d.ts.map +1 -0
  244. package/dist/tools/watcher/index.js +213 -0
  245. package/dist/tools/watcher/index.js.map +1 -0
  246. package/dist/ui/canvas/canvas-projection.d.ts +78 -0
  247. package/dist/ui/canvas/canvas-projection.d.ts.map +1 -0
  248. package/dist/ui/canvas/canvas-projection.js +416 -0
  249. package/dist/ui/canvas/canvas-projection.js.map +1 -0
  250. package/dist/ui/canvas/canvas-state.d.ts +200 -0
  251. package/dist/ui/canvas/canvas-state.d.ts.map +1 -0
  252. package/dist/ui/canvas/canvas-state.js +464 -0
  253. package/dist/ui/canvas/canvas-state.js.map +1 -0
  254. package/dist/ui/canvas/components/index.d.ts +95 -0
  255. package/dist/ui/canvas/components/index.d.ts.map +1 -0
  256. package/dist/ui/canvas/components/index.js +19 -0
  257. package/dist/ui/canvas/components/index.js.map +1 -0
  258. package/dist/ui/canvas/index.d.ts +32 -0
  259. package/dist/ui/canvas/index.d.ts.map +1 -0
  260. package/dist/ui/canvas/index.js +32 -0
  261. package/dist/ui/canvas/index.js.map +1 -0
  262. package/dist/ui/svelte-generator/index.d.ts +9 -0
  263. package/dist/ui/svelte-generator/index.d.ts.map +1 -0
  264. package/dist/ui/svelte-generator/index.js +11 -0
  265. package/dist/ui/svelte-generator/index.js.map +1 -0
  266. package/dist/ui/svelte-generator/psf-generator.d.ts +128 -0
  267. package/dist/ui/svelte-generator/psf-generator.d.ts.map +1 -0
  268. package/dist/ui/svelte-generator/psf-generator.js +506 -0
  269. package/dist/ui/svelte-generator/psf-generator.js.map +1 -0
  270. package/docs/README.md +155 -0
  271. package/docs/core/building-extensions.md +553 -0
  272. package/docs/core/cli-usage.md +498 -0
  273. package/docs/core/code-canvas-sync.md +468 -0
  274. package/docs/core/logic-engine.md +566 -0
  275. package/docs/core/pluresdb-integration.md +646 -0
  276. package/docs/core/schema-model.md +414 -0
  277. package/docs/core/ui-generation.md +580 -0
  278. package/docs/core/what-is-praxis.md +240 -0
  279. package/docs/tutorials/README.md +84 -0
  280. package/docs/tutorials/ecommerce-cart.md +631 -0
  281. package/docs/tutorials/first-app.md +529 -0
  282. package/docs/tutorials/form-builder.md +620 -0
  283. package/docs/tutorials/todo-pluresdb.md +589 -0
  284. package/package.json +1 -1
  285. package/src/__tests__/canvas-components.test.ts +450 -0
  286. package/src/__tests__/cli-create.test.ts +178 -0
  287. package/src/__tests__/code-canvas-integration.test.ts +277 -0
  288. package/src/__tests__/docs-generator.test.ts +181 -0
  289. package/src/__tests__/generators.test.ts +3 -2
  290. package/src/__tests__/pluresdb.test.ts +457 -0
  291. package/src/__tests__/psf-schema-engine.test.ts +450 -0
  292. package/src/__tests__/state-docs-integration.test.ts +297 -0
  293. package/src/__tests__/tauri-integration.test.ts +298 -0
  294. package/src/__tests__/terminal-node.test.ts +1 -1
  295. package/src/__tests__/unum-integration.test.ts +142 -0
  296. package/src/cli/commands/build.ts +203 -0
  297. package/src/cli/commands/canvas.ts +246 -0
  298. package/src/cli/commands/create.ts +666 -0
  299. package/src/cli/commands/dev.ts +95 -0
  300. package/src/cli/commands/orchestrate.ts +212 -0
  301. package/src/cli/index.ts +48 -21
  302. package/src/core/component/generator.ts +45 -3
  303. package/src/core/logic/generator.ts +39 -4
  304. package/src/core/pluresdb/adapter.ts +117 -0
  305. package/src/core/pluresdb/generator.ts +33 -4
  306. package/src/core/pluresdb/index.ts +37 -0
  307. package/src/core/pluresdb/schema-registry.ts +162 -0
  308. package/src/core/pluresdb/store.ts +443 -0
  309. package/src/index.ts +109 -0
  310. package/src/integrations/code-canvas.ts +717 -0
  311. package/src/integrations/pluresdb.ts +140 -29
  312. package/src/integrations/state-docs.ts +710 -0
  313. package/src/integrations/tauri.ts +638 -0
  314. package/src/integrations/unum.ts +395 -0
  315. package/src/runtime/terminal-adapter.ts +178 -23
  316. package/dist/adapters/cli.d.ts.map +0 -1
  317. package/dist/adapters/cli.js.map +0 -1
  318. package/dist/cli/commands/auth.d.ts.map +0 -1
  319. package/dist/cli/commands/auth.js.map +0 -1
  320. package/dist/cli/commands/cloud.d.ts.map +0 -1
  321. package/dist/cli/commands/cloud.js.map +0 -1
  322. package/dist/cli/commands/generate.d.ts.map +0 -1
  323. package/dist/cli/commands/generate.js.map +0 -1
  324. package/dist/cli/index.js.map +0 -1
  325. package/dist/cloud/auth.d.ts.map +0 -1
  326. package/dist/cloud/auth.js.map +0 -1
  327. package/dist/cloud/billing.d.ts.map +0 -1
  328. package/dist/cloud/billing.js.map +0 -1
  329. package/dist/cloud/client.d.ts.map +0 -1
  330. package/dist/cloud/client.js.map +0 -1
  331. package/dist/cloud/index.d.ts.map +0 -1
  332. package/dist/cloud/index.js.map +0 -1
  333. package/dist/cloud/marketplace.d.ts.map +0 -1
  334. package/dist/cloud/marketplace.js.map +0 -1
  335. package/dist/cloud/provisioning.d.ts.map +0 -1
  336. package/dist/cloud/provisioning.js.map +0 -1
  337. package/dist/cloud/relay/endpoints.d.ts.map +0 -1
  338. package/dist/cloud/relay/endpoints.js.map +0 -1
  339. package/dist/cloud/relay/health/index.d.ts.map +0 -1
  340. package/dist/cloud/relay/health/index.js.map +0 -1
  341. package/dist/cloud/relay/stats/index.d.ts.map +0 -1
  342. package/dist/cloud/relay/stats/index.js.map +0 -1
  343. package/dist/cloud/relay/sync/index.d.ts.map +0 -1
  344. package/dist/cloud/relay/sync/index.js.map +0 -1
  345. package/dist/cloud/relay/usage/index.d.ts.map +0 -1
  346. package/dist/cloud/relay/usage/index.js.map +0 -1
  347. package/dist/cloud/sponsors.d.ts.map +0 -1
  348. package/dist/cloud/sponsors.js.map +0 -1
  349. package/dist/cloud/types.d.ts.map +0 -1
  350. package/dist/components/index.d.ts.map +0 -1
  351. package/dist/components/index.js.map +0 -1
  352. package/dist/core/actors.d.ts.map +0 -1
  353. package/dist/core/actors.js.map +0 -1
  354. package/dist/core/component/generator.d.ts.map +0 -1
  355. package/dist/core/component/generator.js.map +0 -1
  356. package/dist/core/engine.d.ts.map +0 -1
  357. package/dist/core/engine.js.map +0 -1
  358. package/dist/core/introspection.d.ts.map +0 -1
  359. package/dist/core/introspection.js.map +0 -1
  360. package/dist/core/logic/generator.d.ts.map +0 -1
  361. package/dist/core/logic/generator.js.map +0 -1
  362. package/dist/core/pluresdb/generator.d.ts.map +0 -1
  363. package/dist/core/pluresdb/generator.js.map +0 -1
  364. package/dist/core/protocol.d.ts.map +0 -1
  365. package/dist/core/protocol.js.map +0 -1
  366. package/dist/core/rules.d.ts.map +0 -1
  367. package/dist/core/rules.js.map +0 -1
  368. package/dist/core/schema/loader.d.ts.map +0 -1
  369. package/dist/core/schema/loader.js.map +0 -1
  370. package/dist/core/schema/normalize.d.ts.map +0 -1
  371. package/dist/core/schema/normalize.js.map +0 -1
  372. package/dist/core/schema/types.d.ts.map +0 -1
  373. package/dist/core/schema/types.js.map +0 -1
  374. package/dist/dsl/index.d.ts.map +0 -1
  375. package/dist/dsl/index.js.map +0 -1
  376. package/dist/dsl.d.ts.map +0 -1
  377. package/dist/dsl.js.map +0 -1
  378. package/dist/examples/advanced-todo/index.d.ts.map +0 -1
  379. package/dist/examples/advanced-todo/index.js.map +0 -1
  380. package/dist/examples/auth-basic/index.d.ts.map +0 -1
  381. package/dist/examples/auth-basic/index.js.map +0 -1
  382. package/dist/examples/cart/index.d.ts.map +0 -1
  383. package/dist/examples/cart/index.js.map +0 -1
  384. package/dist/examples/hero-ecommerce/index.d.ts.map +0 -1
  385. package/dist/examples/hero-ecommerce/index.js.map +0 -1
  386. package/dist/examples/svelte-counter/index.d.ts.map +0 -1
  387. package/dist/examples/svelte-counter/index.js.map +0 -1
  388. package/dist/flows.d.ts.map +0 -1
  389. package/dist/flows.js.map +0 -1
  390. package/dist/index.d.ts.map +0 -1
  391. package/dist/index.js.map +0 -1
  392. package/dist/integrations/pluresdb.d.ts +0 -56
  393. package/dist/integrations/pluresdb.d.ts.map +0 -1
  394. package/dist/integrations/pluresdb.js +0 -46
  395. package/dist/integrations/pluresdb.js.map +0 -1
  396. package/dist/integrations/svelte.d.ts.map +0 -1
  397. package/dist/integrations/svelte.js.map +0 -1
  398. package/dist/registry.d.ts.map +0 -1
  399. package/dist/registry.js.map +0 -1
  400. package/dist/runtime/terminal-adapter.d.ts.map +0 -1
  401. package/dist/runtime/terminal-adapter.js +0 -113
  402. package/dist/runtime/terminal-adapter.js.map +0 -1
  403. package/dist/step.d.ts.map +0 -1
  404. package/dist/step.js.map +0 -1
  405. package/dist/types.d.ts.map +0 -1
  406. package/dist/types.js.map +0 -1
  407. /package/dist/{adapters → src/adapters}/cli.d.ts +0 -0
  408. /package/dist/{adapters → src/adapters}/cli.js +0 -0
  409. /package/dist/{cli → src/cli}/commands/auth.d.ts +0 -0
  410. /package/dist/{cli → src/cli}/commands/auth.js +0 -0
  411. /package/dist/{cli → src/cli}/commands/cloud.d.ts +0 -0
  412. /package/dist/{cli → src/cli}/commands/cloud.js +0 -0
  413. /package/dist/{cli → src/cli}/commands/generate.d.ts +0 -0
  414. /package/dist/{cli → src/cli}/commands/generate.js +0 -0
  415. /package/dist/{cli → src/cli}/index.d.ts +0 -0
  416. /package/dist/{cloud → src/cloud}/auth.d.ts +0 -0
  417. /package/dist/{cloud → src/cloud}/auth.js +0 -0
  418. /package/dist/{cloud → src/cloud}/billing.d.ts +0 -0
  419. /package/dist/{cloud → src/cloud}/billing.js +0 -0
  420. /package/dist/{cloud → src/cloud}/client.d.ts +0 -0
  421. /package/dist/{cloud → src/cloud}/client.js +0 -0
  422. /package/dist/{cloud → src/cloud}/index.d.ts +0 -0
  423. /package/dist/{cloud → src/cloud}/index.js +0 -0
  424. /package/dist/{cloud → src/cloud}/marketplace.d.ts +0 -0
  425. /package/dist/{cloud → src/cloud}/marketplace.js +0 -0
  426. /package/dist/{cloud → src/cloud}/provisioning.d.ts +0 -0
  427. /package/dist/{cloud → src/cloud}/provisioning.js +0 -0
  428. /package/dist/{cloud → src/cloud}/relay/endpoints.d.ts +0 -0
  429. /package/dist/{cloud → src/cloud}/relay/endpoints.js +0 -0
  430. /package/dist/{cloud → src/cloud}/relay/health/index.d.ts +0 -0
  431. /package/dist/{cloud → src/cloud}/relay/health/index.js +0 -0
  432. /package/dist/{cloud → src/cloud}/relay/stats/index.d.ts +0 -0
  433. /package/dist/{cloud → src/cloud}/relay/stats/index.js +0 -0
  434. /package/dist/{cloud → src/cloud}/relay/sync/index.d.ts +0 -0
  435. /package/dist/{cloud → src/cloud}/relay/sync/index.js +0 -0
  436. /package/dist/{cloud → src/cloud}/relay/usage/index.d.ts +0 -0
  437. /package/dist/{cloud → src/cloud}/relay/usage/index.js +0 -0
  438. /package/dist/{cloud → src/cloud}/sponsors.d.ts +0 -0
  439. /package/dist/{cloud → src/cloud}/sponsors.js +0 -0
  440. /package/dist/{cloud → src/cloud}/types.d.ts +0 -0
  441. /package/dist/{cloud → src/cloud}/types.js +0 -0
  442. /package/dist/{components → src/components}/index.d.ts +0 -0
  443. /package/dist/{components → src/components}/index.js +0 -0
  444. /package/dist/{core → src/core}/actors.d.ts +0 -0
  445. /package/dist/{core → src/core}/actors.js +0 -0
  446. /package/dist/{core → src/core}/component/generator.d.ts +0 -0
  447. /package/dist/{core → src/core}/engine.d.ts +0 -0
  448. /package/dist/{core → src/core}/engine.js +0 -0
  449. /package/dist/{core → src/core}/introspection.d.ts +0 -0
  450. /package/dist/{core → src/core}/introspection.js +0 -0
  451. /package/dist/{core → src/core}/logic/generator.d.ts +0 -0
  452. /package/dist/{core → src/core}/pluresdb/generator.d.ts +0 -0
  453. /package/dist/{core → src/core}/protocol.d.ts +0 -0
  454. /package/dist/{core → src/core}/protocol.js +0 -0
  455. /package/dist/{core → src/core}/rules.d.ts +0 -0
  456. /package/dist/{core → src/core}/rules.js +0 -0
  457. /package/dist/{core → src/core}/schema/loader.d.ts +0 -0
  458. /package/dist/{core → src/core}/schema/loader.js +0 -0
  459. /package/dist/{core → src/core}/schema/normalize.d.ts +0 -0
  460. /package/dist/{core → src/core}/schema/normalize.js +0 -0
  461. /package/dist/{core → src/core}/schema/types.d.ts +0 -0
  462. /package/dist/{core → src/core}/schema/types.js +0 -0
  463. /package/dist/{dsl → src/dsl}/index.d.ts +0 -0
  464. /package/dist/{dsl → src/dsl}/index.js +0 -0
  465. /package/dist/{dsl.d.ts → src/dsl.d.ts} +0 -0
  466. /package/dist/{dsl.js → src/dsl.js} +0 -0
  467. /package/dist/{examples → src/examples}/advanced-todo/index.d.ts +0 -0
  468. /package/dist/{examples → src/examples}/advanced-todo/index.js +0 -0
  469. /package/dist/{examples → src/examples}/auth-basic/index.d.ts +0 -0
  470. /package/dist/{examples → src/examples}/auth-basic/index.js +0 -0
  471. /package/dist/{examples → src/examples}/cart/index.d.ts +0 -0
  472. /package/dist/{examples → src/examples}/cart/index.js +0 -0
  473. /package/dist/{examples → src/examples}/hero-ecommerce/index.d.ts +0 -0
  474. /package/dist/{examples → src/examples}/hero-ecommerce/index.js +0 -0
  475. /package/dist/{examples → src/examples}/svelte-counter/index.d.ts +0 -0
  476. /package/dist/{examples → src/examples}/svelte-counter/index.js +0 -0
  477. /package/dist/{flows.d.ts → src/flows.d.ts} +0 -0
  478. /package/dist/{flows.js → src/flows.js} +0 -0
  479. /package/dist/{integrations → src/integrations}/svelte.d.ts +0 -0
  480. /package/dist/{integrations → src/integrations}/svelte.js +0 -0
  481. /package/dist/{registry.d.ts → src/registry.d.ts} +0 -0
  482. /package/dist/{registry.js → src/registry.js} +0 -0
  483. /package/dist/{step.d.ts → src/step.d.ts} +0 -0
  484. /package/dist/{step.js → src/step.js} +0 -0
  485. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
  486. /package/dist/{types.js → src/types.js} +0 -0
@@ -0,0 +1,269 @@
1
+ /**
2
+ * PSF-Aware Logic Engine Adapter
3
+ *
4
+ * This module connects the logic engine to the Praxis Schema Format (PSF).
5
+ * It enables schema-driven rule evaluation and constraint checking.
6
+ */
7
+
8
+ import type { PSFSchema, PSFRule, PSFConstraint, PSFExpression } from '../schema-engine/psf.js';
9
+ import type { PraxisFact, PraxisEvent, PraxisState } from '../../src/core/protocol.js';
10
+ import type { RuleDescriptor, ConstraintDescriptor } from '../../src/core/rules.js';
11
+
12
+ /**
13
+ * PSF Adapter options
14
+ */
15
+ export interface PSFAdapterOptions {
16
+ /** Enable expression caching */
17
+ cacheExpressions?: boolean;
18
+ /** Sandbox for expression evaluation */
19
+ sandbox?: Record<string, unknown>;
20
+ }
21
+
22
+ /**
23
+ * Compiled expression
24
+ */
25
+ interface CompiledExpression {
26
+ fn: Function;
27
+ source: string;
28
+ }
29
+
30
+ /**
31
+ * PSF Adapter for Logic Engine
32
+ *
33
+ * Converts PSF rules and constraints to logic engine format.
34
+ */
35
+ export class PSFLogicAdapter {
36
+ private options: Required<PSFAdapterOptions>;
37
+ private expressionCache: Map<string, CompiledExpression> = new Map();
38
+ private sandbox: Record<string, unknown>;
39
+
40
+ constructor(options: PSFAdapterOptions = {}) {
41
+ this.options = {
42
+ cacheExpressions: options.cacheExpressions ?? true,
43
+ sandbox: options.sandbox ?? {},
44
+ };
45
+ this.sandbox = { ...this.options.sandbox };
46
+ }
47
+
48
+ /**
49
+ * Convert PSF rules to logic engine rule descriptors
50
+ */
51
+ convertRules<TContext = unknown>(rules: PSFRule[]): RuleDescriptor<TContext>[] {
52
+ return rules.map((rule) => this.convertRule<TContext>(rule));
53
+ }
54
+
55
+ /**
56
+ * Convert a single PSF rule to rule descriptor
57
+ */
58
+ convertRule<TContext = unknown>(rule: PSFRule): RuleDescriptor<TContext> {
59
+ const whenFn = rule.when ? this.compileExpression(rule.when, ['state', 'events']) : null;
60
+ const thenFn = this.compileExpression(rule.then, ['state', 'events']);
61
+
62
+ return {
63
+ id: rule.id,
64
+ description: rule.description,
65
+ meta: {
66
+ triggers: rule.triggers,
67
+ priority: rule.priority,
68
+ ...rule.meta,
69
+ },
70
+ impl: (state: PraxisState & { context: TContext }, events: PraxisEvent[]): PraxisFact[] => {
71
+ // Filter events by triggers if specified
72
+ let filteredEvents = events;
73
+ if (rule.triggers && rule.triggers.length > 0) {
74
+ filteredEvents = events.filter((e) => rule.triggers!.includes(e.tag));
75
+ if (filteredEvents.length === 0) {
76
+ return [];
77
+ }
78
+ }
79
+
80
+ // Check condition
81
+ if (whenFn) {
82
+ try {
83
+ const conditionResult = whenFn.fn.call(this.sandbox, state, filteredEvents);
84
+ if (!conditionResult) {
85
+ return [];
86
+ }
87
+ } catch (error) {
88
+ console.error(`Error evaluating rule condition "${rule.id}":`, error);
89
+ return [];
90
+ }
91
+ }
92
+
93
+ // Execute action
94
+ try {
95
+ const result = thenFn.fn.call(this.sandbox, state, filteredEvents);
96
+ if (Array.isArray(result)) {
97
+ return result;
98
+ }
99
+ return [];
100
+ } catch (error) {
101
+ console.error(`Error executing rule action "${rule.id}":`, error);
102
+ return [];
103
+ }
104
+ },
105
+ };
106
+ }
107
+
108
+ /**
109
+ * Convert PSF constraints to logic engine constraint descriptors
110
+ */
111
+ convertConstraints<TContext = unknown>(constraints: PSFConstraint[]): ConstraintDescriptor<TContext>[] {
112
+ return constraints.map((constraint) => this.convertConstraint<TContext>(constraint));
113
+ }
114
+
115
+ /**
116
+ * Convert a single PSF constraint to constraint descriptor
117
+ */
118
+ convertConstraint<TContext = unknown>(constraint: PSFConstraint): ConstraintDescriptor<TContext> {
119
+ const checkFn = this.compileExpression(constraint.check, ['state']);
120
+
121
+ return {
122
+ id: constraint.id,
123
+ description: constraint.description,
124
+ meta: {
125
+ severity: constraint.severity,
126
+ ...constraint.meta,
127
+ },
128
+ impl: (state: PraxisState & { context: TContext }): boolean | string => {
129
+ try {
130
+ const result = checkFn.fn.call(this.sandbox, state);
131
+ if (result === true) {
132
+ return true;
133
+ }
134
+ return constraint.errorMessage;
135
+ } catch (error) {
136
+ return `Error checking constraint "${constraint.id}": ${error}`;
137
+ }
138
+ },
139
+ };
140
+ }
141
+
142
+ /**
143
+ * Load a complete PSF schema into the logic engine
144
+ */
145
+ loadSchema<TContext = unknown>(schema: PSFSchema): {
146
+ rules: RuleDescriptor<TContext>[];
147
+ constraints: ConstraintDescriptor<TContext>[];
148
+ } {
149
+ // Add schema facts and events to sandbox for expression evaluation
150
+ this.sandbox = {
151
+ ...this.options.sandbox,
152
+ Facts: this.createFactHelpers(schema),
153
+ Events: this.createEventHelpers(schema),
154
+ };
155
+
156
+ return {
157
+ rules: this.convertRules<TContext>(schema.rules),
158
+ constraints: this.convertConstraints<TContext>(schema.constraints),
159
+ };
160
+ }
161
+
162
+ /**
163
+ * Compile a PSF expression to a function
164
+ */
165
+ private compileExpression(expr: PSFExpression, args: string[]): CompiledExpression {
166
+ const source = 'inline' in expr ? expr.inline : `/* ref: ${expr.ref} */ null`;
167
+ const cacheKey = `${args.join(',')}:${source}`;
168
+
169
+ if (this.options.cacheExpressions && this.expressionCache.has(cacheKey)) {
170
+ return this.expressionCache.get(cacheKey)!;
171
+ }
172
+
173
+ try {
174
+ // Create function from expression
175
+ const fn = new Function(...args, `return (${source});`);
176
+ const compiled: CompiledExpression = { fn, source };
177
+
178
+ if (this.options.cacheExpressions) {
179
+ this.expressionCache.set(cacheKey, compiled);
180
+ }
181
+
182
+ return compiled;
183
+ } catch (error) {
184
+ // Return a safe no-op function on compilation error
185
+ console.error(`Error compiling expression: ${source}`, error);
186
+ return {
187
+ fn: () => null,
188
+ source,
189
+ };
190
+ }
191
+ }
192
+
193
+ /**
194
+ * Create fact helper functions for expression evaluation
195
+ */
196
+ private createFactHelpers(schema: PSFSchema): Record<string, unknown> {
197
+ const helpers: Record<string, unknown> = {};
198
+
199
+ for (const fact of schema.facts) {
200
+ helpers[fact.tag] = {
201
+ tag: fact.tag,
202
+ create: (payload: unknown) => ({ tag: fact.tag, payload }),
203
+ is: (f: PraxisFact) => f.tag === fact.tag,
204
+ };
205
+ }
206
+
207
+ return helpers;
208
+ }
209
+
210
+ /**
211
+ * Create event helper functions for expression evaluation
212
+ */
213
+ private createEventHelpers(schema: PSFSchema): Record<string, unknown> {
214
+ const helpers: Record<string, unknown> = {};
215
+
216
+ for (const event of schema.events) {
217
+ helpers[event.tag] = {
218
+ tag: event.tag,
219
+ create: (payload: unknown) => ({ tag: event.tag, payload }),
220
+ is: (e: PraxisEvent) => e.tag === event.tag,
221
+ };
222
+ }
223
+
224
+ return helpers;
225
+ }
226
+
227
+ /**
228
+ * Clear expression cache
229
+ */
230
+ clearCache(): void {
231
+ this.expressionCache.clear();
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Create a PSF logic adapter
237
+ */
238
+ export function createPSFLogicAdapter(options?: PSFAdapterOptions): PSFLogicAdapter {
239
+ return new PSFLogicAdapter(options);
240
+ }
241
+
242
+ /**
243
+ * Schema-aware engine factory
244
+ */
245
+ export interface SchemaAwareEngineOptions<TContext = unknown> {
246
+ schema: PSFSchema;
247
+ initialContext: TContext;
248
+ sandbox?: Record<string, unknown>;
249
+ }
250
+
251
+ /**
252
+ * Create a schema-aware logic engine from PSF
253
+ */
254
+ export async function createSchemaAwareEngine<TContext = unknown>(
255
+ options: SchemaAwareEngineOptions<TContext>
256
+ ): Promise<{
257
+ rules: RuleDescriptor<TContext>[];
258
+ constraints: ConstraintDescriptor<TContext>[];
259
+ adapter: PSFLogicAdapter;
260
+ }> {
261
+ const adapter = new PSFLogicAdapter({ sandbox: options.sandbox });
262
+ const { rules, constraints } = adapter.loadSchema<TContext>(options.schema);
263
+
264
+ return {
265
+ rules,
266
+ constraints,
267
+ adapter,
268
+ };
269
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Rules and Constraints
3
+ *
4
+ * Re-exports rules and constraints from the main source.
5
+ */
6
+
7
+ export {
8
+ PraxisRegistry,
9
+ type RuleId,
10
+ type ConstraintId,
11
+ type RuleFn,
12
+ type ConstraintFn,
13
+ type RuleDescriptor,
14
+ type ConstraintDescriptor,
15
+ type PraxisModule,
16
+ } from '../../src/core/rules.js';
@@ -0,0 +1,431 @@
1
+ /**
2
+ * PSF Compiler
3
+ *
4
+ * Compiles TypeScript DSL definitions to PSF format.
5
+ * This enables code → schema synchronization.
6
+ */
7
+
8
+ import type {
9
+ PSFSchema,
10
+ PSFFact,
11
+ PSFEvent,
12
+ PSFRule,
13
+ PSFConstraint,
14
+ PSFModel,
15
+ PSFComponent,
16
+ PSFPayloadSchema,
17
+ PSFField,
18
+ PSFFieldType,
19
+ PSFExpression,
20
+ } from './psf.js';
21
+ import { PSF_VERSION, generatePSFId } from './psf.js';
22
+
23
+ /**
24
+ * Reserved JavaScript keywords (O(1) lookup)
25
+ */
26
+ const RESERVED_KEYWORDS = new Set([
27
+ 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger',
28
+ 'default', 'delete', 'do', 'else', 'export', 'extends', 'finally',
29
+ 'for', 'function', 'if', 'import', 'in', 'instanceof', 'new',
30
+ 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof',
31
+ 'var', 'void', 'while', 'with', 'yield', 'let', 'static',
32
+ 'enum', 'await', 'implements', 'interface', 'package', 'private',
33
+ 'protected', 'public',
34
+ ]);
35
+
36
+ /**
37
+ * Source location information for error reporting
38
+ */
39
+ export interface SourceLocation {
40
+ file?: string;
41
+ line?: number;
42
+ column?: number;
43
+ }
44
+
45
+ /**
46
+ * Compilation error
47
+ */
48
+ export interface CompilationError {
49
+ message: string;
50
+ code: string;
51
+ location?: SourceLocation;
52
+ severity: 'error' | 'warning';
53
+ }
54
+
55
+ /**
56
+ * Compilation result
57
+ */
58
+ export interface CompilationResult {
59
+ success: boolean;
60
+ schema?: PSFSchema;
61
+ errors: CompilationError[];
62
+ warnings: CompilationError[];
63
+ }
64
+
65
+ /**
66
+ * DSL Fact definition input
67
+ */
68
+ export interface DSLFact {
69
+ tag: string;
70
+ description?: string;
71
+ payload: Record<string, string>;
72
+ }
73
+
74
+ /**
75
+ * DSL Event definition input
76
+ */
77
+ export interface DSLEvent {
78
+ tag: string;
79
+ description?: string;
80
+ payload: Record<string, string>;
81
+ }
82
+
83
+ /**
84
+ * DSL Rule definition input
85
+ */
86
+ export interface DSLRule {
87
+ id: string;
88
+ description: string;
89
+ triggers?: string[];
90
+ when?: string;
91
+ then: string;
92
+ priority?: number;
93
+ }
94
+
95
+ /**
96
+ * DSL Constraint definition input
97
+ */
98
+ export interface DSLConstraint {
99
+ id: string;
100
+ description: string;
101
+ check: string;
102
+ errorMessage: string;
103
+ }
104
+
105
+ /**
106
+ * DSL Model definition input
107
+ */
108
+ export interface DSLModel {
109
+ name: string;
110
+ description?: string;
111
+ fields: DSLModelField[];
112
+ }
113
+
114
+ /**
115
+ * DSL Model Field input
116
+ */
117
+ export interface DSLModelField {
118
+ name: string;
119
+ type: string;
120
+ optional?: boolean;
121
+ default?: unknown;
122
+ description?: string;
123
+ }
124
+
125
+ /**
126
+ * DSL Component definition input
127
+ */
128
+ export interface DSLComponent {
129
+ name: string;
130
+ type: 'form' | 'display' | 'list' | 'navigation' | 'editor' | 'custom';
131
+ description?: string;
132
+ model?: string;
133
+ props?: Array<{
134
+ name: string;
135
+ type: string;
136
+ required?: boolean;
137
+ default?: unknown;
138
+ description?: string;
139
+ }>;
140
+ events?: Array<{
141
+ name: string;
142
+ payload?: string;
143
+ description?: string;
144
+ }>;
145
+ }
146
+
147
+ /**
148
+ * DSL Schema input
149
+ */
150
+ export interface DSLSchema {
151
+ id?: string;
152
+ name: string;
153
+ description?: string;
154
+ facts?: DSLFact[];
155
+ events?: DSLEvent[];
156
+ rules?: DSLRule[];
157
+ constraints?: DSLConstraint[];
158
+ models?: DSLModel[];
159
+ components?: DSLComponent[];
160
+ }
161
+
162
+ /**
163
+ * PSF Compiler class
164
+ */
165
+ export class PSFCompiler {
166
+ private errors: CompilationError[] = [];
167
+ private warnings: CompilationError[] = [];
168
+
169
+ /**
170
+ * Compile DSL schema to PSF format
171
+ */
172
+ compile(input: DSLSchema): CompilationResult {
173
+ this.errors = [];
174
+ this.warnings = [];
175
+
176
+ try {
177
+ const schema = this.compileToPSF(input);
178
+
179
+ return {
180
+ success: this.errors.length === 0,
181
+ schema: this.errors.length === 0 ? schema : undefined,
182
+ errors: this.errors,
183
+ warnings: this.warnings,
184
+ };
185
+ } catch (error) {
186
+ this.addError('compilation-failed', error instanceof Error ? error.message : 'Unknown compilation error');
187
+ return {
188
+ success: false,
189
+ errors: this.errors,
190
+ warnings: this.warnings,
191
+ };
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Compile DSL to PSF schema
197
+ */
198
+ private compileToPSF(input: DSLSchema): PSFSchema {
199
+ const now = new Date().toISOString();
200
+
201
+ return {
202
+ $version: PSF_VERSION,
203
+ id: input.id || generatePSFId('schema'),
204
+ name: input.name,
205
+ description: input.description,
206
+ createdAt: now,
207
+ modifiedAt: now,
208
+ facts: this.compileFacts(input.facts || []),
209
+ events: this.compileEvents(input.events || []),
210
+ rules: this.compileRules(input.rules || []),
211
+ constraints: this.compileConstraints(input.constraints || []),
212
+ models: this.compileModels(input.models || []),
213
+ components: this.compileComponents(input.components || []),
214
+ flows: [],
215
+ docs: {},
216
+ };
217
+ }
218
+
219
+ /**
220
+ * Compile facts
221
+ */
222
+ private compileFacts(facts: DSLFact[]): PSFFact[] {
223
+ return facts.map((fact) => {
224
+ if (!this.isValidIdentifier(fact.tag)) {
225
+ this.addError('invalid-identifier', `Invalid fact tag: ${fact.tag}`);
226
+ }
227
+
228
+ return {
229
+ id: generatePSFId('fact'),
230
+ tag: fact.tag,
231
+ description: fact.description,
232
+ payload: this.compilePayload(fact.payload),
233
+ };
234
+ });
235
+ }
236
+
237
+ /**
238
+ * Compile events
239
+ */
240
+ private compileEvents(events: DSLEvent[]): PSFEvent[] {
241
+ return events.map((event) => {
242
+ if (!this.isValidIdentifier(event.tag)) {
243
+ this.addError('invalid-identifier', `Invalid event tag: ${event.tag}`);
244
+ }
245
+
246
+ return {
247
+ id: generatePSFId('event'),
248
+ tag: event.tag,
249
+ description: event.description,
250
+ payload: this.compilePayload(event.payload),
251
+ };
252
+ });
253
+ }
254
+
255
+ /**
256
+ * Compile payload to PSF format
257
+ */
258
+ private compilePayload(payload: Record<string, string>): PSFPayloadSchema {
259
+ const properties: Record<string, { type: PSFFieldType; description?: string }> = {};
260
+
261
+ for (const [key, typeStr] of Object.entries(payload)) {
262
+ properties[key] = {
263
+ type: this.parseFieldType(typeStr),
264
+ };
265
+ }
266
+
267
+ return {
268
+ type: 'object',
269
+ properties,
270
+ required: Object.keys(payload),
271
+ };
272
+ }
273
+
274
+ /**
275
+ * Compile rules
276
+ */
277
+ private compileRules(rules: DSLRule[]): PSFRule[] {
278
+ return rules.map((rule) => ({
279
+ id: rule.id,
280
+ description: rule.description,
281
+ triggers: rule.triggers,
282
+ when: rule.when ? this.parseExpression(rule.when) : undefined,
283
+ then: this.parseExpression(rule.then),
284
+ priority: rule.priority,
285
+ }));
286
+ }
287
+
288
+ /**
289
+ * Compile constraints
290
+ */
291
+ private compileConstraints(constraints: DSLConstraint[]): PSFConstraint[] {
292
+ return constraints.map((constraint) => ({
293
+ id: constraint.id,
294
+ description: constraint.description,
295
+ check: this.parseExpression(constraint.check),
296
+ errorMessage: constraint.errorMessage,
297
+ }));
298
+ }
299
+
300
+ /**
301
+ * Compile models
302
+ */
303
+ private compileModels(models: DSLModel[]): PSFModel[] {
304
+ return models.map((model) => ({
305
+ id: generatePSFId('model'),
306
+ name: model.name,
307
+ description: model.description,
308
+ fields: this.compileFields(model.fields),
309
+ }));
310
+ }
311
+
312
+ /**
313
+ * Compile model fields
314
+ */
315
+ private compileFields(fields: DSLModelField[]): PSFField[] {
316
+ return fields.map((field) => ({
317
+ name: field.name,
318
+ type: this.parseFieldType(field.type),
319
+ optional: field.optional,
320
+ default: field.default,
321
+ description: field.description,
322
+ }));
323
+ }
324
+
325
+ /**
326
+ * Compile components
327
+ */
328
+ private compileComponents(components: DSLComponent[]): PSFComponent[] {
329
+ return components.map((component) => ({
330
+ id: generatePSFId('component'),
331
+ name: component.name,
332
+ type: component.type,
333
+ description: component.description,
334
+ model: component.model,
335
+ props: (component.props || []).map((prop) => ({
336
+ name: prop.name,
337
+ type: prop.type,
338
+ required: prop.required,
339
+ default: prop.default,
340
+ description: prop.description,
341
+ })),
342
+ events: (component.events || []).map((event) => ({
343
+ name: event.name,
344
+ payload: event.payload,
345
+ description: event.description,
346
+ })),
347
+ }));
348
+ }
349
+
350
+ /**
351
+ * Parse field type string to PSF field type
352
+ */
353
+ private parseFieldType(typeStr: string): PSFFieldType {
354
+ // Handle array types
355
+ if (typeStr.endsWith('[]')) {
356
+ const innerType = typeStr.slice(0, -2);
357
+ return { array: this.parseFieldType(innerType) };
358
+ }
359
+
360
+ // Handle reference types
361
+ if (typeStr.startsWith('ref:')) {
362
+ return { reference: typeStr.slice(4) };
363
+ }
364
+
365
+ // Handle enum types
366
+ if (typeStr.startsWith('enum:')) {
367
+ const values = typeStr.slice(5).split('|').map((v) => v.trim());
368
+ return { enum: values };
369
+ }
370
+
371
+ // Handle basic types
372
+ const basicTypes = ['string', 'number', 'boolean', 'date', 'datetime', 'uuid'] as const;
373
+ if (basicTypes.includes(typeStr as typeof basicTypes[number])) {
374
+ return typeStr as PSFFieldType;
375
+ }
376
+
377
+ // Default to string if unknown
378
+ this.addWarning('unknown-type', `Unknown type "${typeStr}", defaulting to string`);
379
+ return 'string';
380
+ }
381
+
382
+ /**
383
+ * Parse expression string to PSF expression
384
+ */
385
+ private parseExpression(expr: string): PSFExpression {
386
+ // Check if it's a reference
387
+ if (expr.startsWith('$ref:')) {
388
+ return { ref: expr.slice(5) };
389
+ }
390
+
391
+ // Otherwise treat as inline TypeScript
392
+ return { inline: expr, language: 'typescript' };
393
+ }
394
+
395
+ /**
396
+ * Check if string is valid JavaScript identifier
397
+ */
398
+ private isValidIdentifier(str: string): boolean {
399
+ const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
400
+ return identifierRegex.test(str) && !RESERVED_KEYWORDS.has(str);
401
+ }
402
+
403
+ /**
404
+ * Add error
405
+ */
406
+ private addError(code: string, message: string, location?: SourceLocation): void {
407
+ this.errors.push({ code, message, location, severity: 'error' });
408
+ }
409
+
410
+ /**
411
+ * Add warning
412
+ */
413
+ private addWarning(code: string, message: string, location?: SourceLocation): void {
414
+ this.warnings.push({ code, message, location, severity: 'warning' });
415
+ }
416
+ }
417
+
418
+ /**
419
+ * Create a PSF compiler
420
+ */
421
+ export function createPSFCompiler(): PSFCompiler {
422
+ return new PSFCompiler();
423
+ }
424
+
425
+ /**
426
+ * Compile DSL to PSF (convenience function)
427
+ */
428
+ export function compileToPSF(input: DSLSchema): CompilationResult {
429
+ const compiler = new PSFCompiler();
430
+ return compiler.compile(input);
431
+ }