@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,710 @@
1
+ /**
2
+ * State-Docs Integration
3
+ *
4
+ * Integration with plures/state-docs - FSM documentation generator for XState projects.
5
+ * Generates Markdown and Mermaid documentation from Praxis state machines and logic.
6
+ *
7
+ * Features:
8
+ * - Auto-generate documentation from Praxis schemas
9
+ * - Markdown output with Mermaid diagrams
10
+ * - State machine visualization
11
+ * - Transition documentation
12
+ * - Integration with Praxis logic engine
13
+ *
14
+ * @see https://github.com/plures/state-docs
15
+ */
16
+
17
+ import type { PraxisSchema, LogicDefinition } from "../core/schema/types.js";
18
+ import type { RuleDescriptor, ConstraintDescriptor, PraxisModule } from "../core/rules.js";
19
+
20
+ /**
21
+ * State-Docs configuration
22
+ */
23
+ export interface StateDocsConfig {
24
+ /** Project title */
25
+ projectTitle: string;
26
+ /** Source directory containing schemas */
27
+ source?: string;
28
+ /** Target directory for generated docs */
29
+ target?: string;
30
+ /** File patterns to include */
31
+ globs?: string[];
32
+ /** Visualization settings */
33
+ visualization?: {
34
+ /** Output format */
35
+ format?: 'mermaid' | 'dot';
36
+ /** Export as PNG */
37
+ exportPng?: boolean;
38
+ /** Diagram theme */
39
+ theme?: 'default' | 'dark' | 'forest' | 'neutral';
40
+ };
41
+ /** Template settings */
42
+ template?: {
43
+ /** Include table of contents */
44
+ toc?: boolean;
45
+ /** Include timestamp */
46
+ timestamp?: boolean;
47
+ /** Custom header content */
48
+ header?: string;
49
+ /** Custom footer content */
50
+ footer?: string;
51
+ };
52
+ }
53
+
54
+ /**
55
+ * Generated documentation file
56
+ */
57
+ export interface GeneratedDoc {
58
+ /** File path */
59
+ path: string;
60
+ /** File content */
61
+ content: string;
62
+ /** File type */
63
+ type: 'markdown' | 'mermaid' | 'dot' | 'json';
64
+ }
65
+
66
+ /**
67
+ * State machine representation for documentation
68
+ */
69
+ export interface StateMachineDoc {
70
+ /** Machine identifier */
71
+ id: string;
72
+ /** Machine name */
73
+ name: string;
74
+ /** Machine description */
75
+ description?: string;
76
+ /** Initial state */
77
+ initial?: string;
78
+ /** All states */
79
+ states: StateDoc[];
80
+ /** All transitions */
81
+ transitions: TransitionDoc[];
82
+ /** Context type description */
83
+ context?: string;
84
+ /** Events that this machine handles */
85
+ events?: string[];
86
+ }
87
+
88
+ /**
89
+ * State documentation
90
+ */
91
+ export interface StateDoc {
92
+ /** State identifier */
93
+ id: string;
94
+ /** State name */
95
+ name: string;
96
+ /** State description */
97
+ description?: string;
98
+ /** Is this an initial state */
99
+ initial?: boolean;
100
+ /** Is this a final state */
101
+ final?: boolean;
102
+ /** Entry actions */
103
+ onEntry?: string[];
104
+ /** Exit actions */
105
+ onExit?: string[];
106
+ /** State tags */
107
+ tags?: string[];
108
+ }
109
+
110
+ /**
111
+ * Transition documentation
112
+ */
113
+ export interface TransitionDoc {
114
+ /** Source state */
115
+ from: string;
116
+ /** Target state */
117
+ to: string;
118
+ /** Event that triggers the transition */
119
+ event: string;
120
+ /** Transition guard condition */
121
+ guard?: string;
122
+ /** Actions executed during transition */
123
+ actions?: string[];
124
+ /** Transition description */
125
+ description?: string;
126
+ }
127
+
128
+ /**
129
+ * Documentation generator for Praxis schemas
130
+ */
131
+ export class StateDocsGenerator {
132
+ private config: StateDocsConfig;
133
+
134
+ constructor(config: StateDocsConfig) {
135
+ this.config = {
136
+ target: './docs',
137
+ globs: ['**/*.ts', '**/*.js'],
138
+ visualization: {
139
+ format: 'mermaid',
140
+ exportPng: false,
141
+ theme: 'default',
142
+ },
143
+ template: {
144
+ toc: true,
145
+ timestamp: true,
146
+ },
147
+ ...config,
148
+ };
149
+ }
150
+
151
+ /**
152
+ * Generate documentation from a Praxis schema
153
+ */
154
+ generateFromSchema(schema: PraxisSchema): GeneratedDoc[] {
155
+ const docs: GeneratedDoc[] = [];
156
+
157
+ // Generate main README
158
+ docs.push(this.generateSchemaReadme(schema));
159
+
160
+ // Generate model documentation
161
+ if (schema.models && schema.models.length > 0) {
162
+ docs.push(this.generateModelsDoc(schema));
163
+ }
164
+
165
+ // Generate component documentation
166
+ if (schema.components && schema.components.length > 0) {
167
+ docs.push(this.generateComponentsDoc(schema));
168
+ }
169
+
170
+ // Generate logic documentation with state diagrams
171
+ if (schema.logic && schema.logic.length > 0) {
172
+ for (const logic of schema.logic) {
173
+ docs.push(this.generateLogicDoc(logic));
174
+ docs.push(this.generateLogicDiagram(logic));
175
+ }
176
+ }
177
+
178
+ return docs;
179
+ }
180
+
181
+ /**
182
+ * Generate documentation from a Praxis registry
183
+ */
184
+ generateFromModule<TContext>(module: PraxisModule<TContext>): GeneratedDoc[] {
185
+ const docs: GeneratedDoc[] = [];
186
+
187
+ // Get all rules and constraints
188
+ const rules = module.rules;
189
+ const constraints = module.constraints;
190
+
191
+ // Generate rules documentation
192
+ docs.push(this.generateRulesDoc(rules));
193
+
194
+ // Generate constraints documentation
195
+ docs.push(this.generateConstraintsDoc(constraints));
196
+
197
+ // Generate state diagram
198
+ docs.push(this.generateRegistryDiagram(rules, constraints));
199
+
200
+ return docs;
201
+ }
202
+
203
+ /**
204
+ * Generate the main schema README
205
+ */
206
+ private generateSchemaReadme(schema: PraxisSchema): GeneratedDoc {
207
+ const lines: string[] = [];
208
+
209
+ // Header
210
+ if (this.config.template?.header) {
211
+ lines.push(this.config.template.header);
212
+ lines.push('');
213
+ }
214
+
215
+ lines.push(`# ${schema.name || this.config.projectTitle}`);
216
+ lines.push('');
217
+
218
+ if (schema.description) {
219
+ lines.push(schema.description);
220
+ lines.push('');
221
+ }
222
+
223
+ // Table of contents
224
+ if (this.config.template?.toc) {
225
+ lines.push('## Table of Contents');
226
+ lines.push('');
227
+ lines.push('- [Overview](#overview)');
228
+ if (schema.models && schema.models.length > 0) {
229
+ lines.push('- [Models](#models)');
230
+ }
231
+ if (schema.components && schema.components.length > 0) {
232
+ lines.push('- [Components](#components)');
233
+ }
234
+ if (schema.logic && schema.logic.length > 0) {
235
+ lines.push('- [Logic](#logic)');
236
+ }
237
+ lines.push('');
238
+ }
239
+
240
+ // Overview
241
+ lines.push('## Overview');
242
+ lines.push('');
243
+ lines.push(`**Version:** ${schema.version}`);
244
+ lines.push('');
245
+
246
+ // Summary statistics
247
+ lines.push('### Statistics');
248
+ lines.push('');
249
+ lines.push('| Category | Count |');
250
+ lines.push('|----------|-------|');
251
+ lines.push(`| Models | ${schema.models?.length || 0} |`);
252
+ lines.push(`| Components | ${schema.components?.length || 0} |`);
253
+ lines.push(`| Logic Modules | ${schema.logic?.length || 0} |`);
254
+ lines.push('');
255
+
256
+ // Models summary
257
+ if (schema.models && schema.models.length > 0) {
258
+ lines.push('## Models');
259
+ lines.push('');
260
+ for (const model of schema.models) {
261
+ lines.push(`### ${model.name}`);
262
+ lines.push('');
263
+ if (model.description) {
264
+ lines.push(model.description);
265
+ lines.push('');
266
+ }
267
+ lines.push('**Fields:**');
268
+ lines.push('');
269
+ lines.push('| Name | Type | Required |');
270
+ lines.push('|------|------|----------|');
271
+ for (const field of model.fields) {
272
+ const required = field.optional ? 'No' : 'Yes';
273
+ lines.push(`| ${field.name} | ${field.type} | ${required} |`);
274
+ }
275
+ lines.push('');
276
+ }
277
+ }
278
+
279
+ // Components summary
280
+ if (schema.components && schema.components.length > 0) {
281
+ lines.push('## Components');
282
+ lines.push('');
283
+ for (const component of schema.components) {
284
+ lines.push(`### ${component.name}`);
285
+ lines.push('');
286
+ lines.push(`**Type:** ${component.type}`);
287
+ lines.push('');
288
+ if (component.description) {
289
+ lines.push(component.description);
290
+ lines.push('');
291
+ }
292
+ if (component.model) {
293
+ lines.push(`**Model:** ${component.model}`);
294
+ lines.push('');
295
+ }
296
+ }
297
+ }
298
+
299
+ // Logic summary
300
+ if (schema.logic && schema.logic.length > 0) {
301
+ lines.push('## Logic');
302
+ lines.push('');
303
+ for (const logic of schema.logic) {
304
+ lines.push(`### ${logic.id}`);
305
+ lines.push('');
306
+ if (logic.description) {
307
+ lines.push(logic.description);
308
+ lines.push('');
309
+ }
310
+
311
+ // Events
312
+ if (logic.events && logic.events.length > 0) {
313
+ lines.push('**Events:**');
314
+ lines.push('');
315
+ for (const event of logic.events) {
316
+ lines.push(`- \`${event.tag}\`: ${event.description || ''}`);
317
+ }
318
+ lines.push('');
319
+ }
320
+
321
+ // Facts
322
+ if (logic.facts && logic.facts.length > 0) {
323
+ lines.push('**Facts:**');
324
+ lines.push('');
325
+ for (const fact of logic.facts) {
326
+ lines.push(`- \`${fact.tag}\`: ${fact.description || ''}`);
327
+ }
328
+ lines.push('');
329
+ }
330
+
331
+ // Rules
332
+ if (logic.rules && logic.rules.length > 0) {
333
+ lines.push('**Rules:**');
334
+ lines.push('');
335
+ for (const rule of logic.rules) {
336
+ lines.push(`- \`${rule.id}\`: ${rule.description || ''}`);
337
+ }
338
+ lines.push('');
339
+ }
340
+ }
341
+ }
342
+
343
+ // Timestamp
344
+ if (this.config.template?.timestamp) {
345
+ lines.push('---');
346
+ lines.push('');
347
+ lines.push(`*Generated on ${new Date().toISOString()} by State-Docs*`);
348
+ }
349
+
350
+ // Footer
351
+ if (this.config.template?.footer) {
352
+ lines.push('');
353
+ lines.push(this.config.template.footer);
354
+ }
355
+
356
+ return {
357
+ path: `${this.config.target}/README.md`,
358
+ content: lines.join('\n'),
359
+ type: 'markdown',
360
+ };
361
+ }
362
+
363
+ /**
364
+ * Generate models documentation
365
+ */
366
+ private generateModelsDoc(schema: PraxisSchema): GeneratedDoc {
367
+ const lines: string[] = [
368
+ '# Models',
369
+ '',
370
+ 'This document describes all data models defined in the schema.',
371
+ '',
372
+ ];
373
+
374
+ if (schema.models) {
375
+ for (const model of schema.models) {
376
+ lines.push(`## ${model.name}`);
377
+ lines.push('');
378
+
379
+ if (model.description) {
380
+ lines.push(model.description);
381
+ lines.push('');
382
+ }
383
+
384
+ lines.push('### Fields');
385
+ lines.push('');
386
+ lines.push('| Name | Type | Required | Description |');
387
+ lines.push('|------|------|----------|-------------|');
388
+
389
+ for (const field of model.fields) {
390
+ const required = field.optional ? 'No' : 'Yes';
391
+ const description = field.description || '-';
392
+ lines.push(`| ${field.name} | \`${field.type}\` | ${required} | ${description} |`);
393
+ }
394
+
395
+ lines.push('');
396
+
397
+ // Indexes
398
+ if (model.indexes && model.indexes.length > 0) {
399
+ lines.push('### Indexes');
400
+ lines.push('');
401
+ for (const index of model.indexes) {
402
+ lines.push(`- **${index.name}**: \`${index.fields.join(', ')}\``);
403
+ }
404
+ lines.push('');
405
+ }
406
+ }
407
+ }
408
+
409
+ return {
410
+ path: `${this.config.target}/models.md`,
411
+ content: lines.join('\n'),
412
+ type: 'markdown',
413
+ };
414
+ }
415
+
416
+ /**
417
+ * Generate components documentation
418
+ */
419
+ private generateComponentsDoc(schema: PraxisSchema): GeneratedDoc {
420
+ const lines: string[] = [
421
+ '# Components',
422
+ '',
423
+ 'This document describes all UI components defined in the schema.',
424
+ '',
425
+ ];
426
+
427
+ if (schema.components) {
428
+ for (const component of schema.components) {
429
+ lines.push(`## ${component.name}`);
430
+ lines.push('');
431
+ lines.push(`**Type:** ${component.type}`);
432
+ lines.push('');
433
+
434
+ if (component.description) {
435
+ lines.push(component.description);
436
+ lines.push('');
437
+ }
438
+
439
+ if (component.model) {
440
+ lines.push(`**Associated Model:** [${component.model}](./models.md#${component.model.toLowerCase()})`);
441
+ lines.push('');
442
+ }
443
+ }
444
+ }
445
+
446
+ return {
447
+ path: `${this.config.target}/components.md`,
448
+ content: lines.join('\n'),
449
+ type: 'markdown',
450
+ };
451
+ }
452
+
453
+ /**
454
+ * Generate logic documentation
455
+ */
456
+ private generateLogicDoc(logic: LogicDefinition): GeneratedDoc {
457
+ const lines: string[] = [
458
+ `# ${logic.id}`,
459
+ '',
460
+ ];
461
+
462
+ if (logic.description) {
463
+ lines.push(logic.description);
464
+ lines.push('');
465
+ }
466
+
467
+ // Events
468
+ if (logic.events && logic.events.length > 0) {
469
+ lines.push('## Events');
470
+ lines.push('');
471
+ lines.push('| Event | Description | Payload |');
472
+ lines.push('|-------|-------------|---------|');
473
+
474
+ for (const event of logic.events) {
475
+ const payload = event.payload
476
+ ? Object.entries(event.payload).map(([k, v]) => `${k}: ${v}`).join(', ')
477
+ : '-';
478
+ lines.push(`| \`${event.tag}\` | ${event.description || '-'} | ${payload} |`);
479
+ }
480
+ lines.push('');
481
+ }
482
+
483
+ // Facts
484
+ if (logic.facts && logic.facts.length > 0) {
485
+ lines.push('## Facts');
486
+ lines.push('');
487
+ lines.push('| Fact | Description | Payload |');
488
+ lines.push('|------|-------------|---------|');
489
+
490
+ for (const fact of logic.facts) {
491
+ const payload = fact.payload
492
+ ? Object.entries(fact.payload).map(([k, v]) => `${k}: ${v}`).join(', ')
493
+ : '-';
494
+ lines.push(`| \`${fact.tag}\` | ${fact.description || '-'} | ${payload} |`);
495
+ }
496
+ lines.push('');
497
+ }
498
+
499
+ // Rules
500
+ if (logic.rules && logic.rules.length > 0) {
501
+ lines.push('## Rules');
502
+ lines.push('');
503
+
504
+ for (const rule of logic.rules) {
505
+ lines.push(`### ${rule.id}`);
506
+ lines.push('');
507
+
508
+ if (rule.description) {
509
+ lines.push(rule.description);
510
+ lines.push('');
511
+ }
512
+
513
+ if (rule.priority !== undefined) {
514
+ lines.push(`**Priority:** ${rule.priority}`);
515
+ lines.push('');
516
+ }
517
+ }
518
+ }
519
+
520
+ // Constraints
521
+ if (logic.constraints && logic.constraints.length > 0) {
522
+ lines.push('## Constraints');
523
+ lines.push('');
524
+
525
+ for (const constraint of logic.constraints) {
526
+ lines.push(`### ${constraint.id}`);
527
+ lines.push('');
528
+
529
+ if (constraint.description) {
530
+ lines.push(constraint.description);
531
+ lines.push('');
532
+ }
533
+
534
+ if (constraint.message) {
535
+ lines.push(`**Error Message:** ${constraint.message}`);
536
+ lines.push('');
537
+ }
538
+ }
539
+ }
540
+
541
+ return {
542
+ path: `${this.config.target}/logic/${logic.id}.md`,
543
+ content: lines.join('\n'),
544
+ type: 'markdown',
545
+ };
546
+ }
547
+
548
+ /**
549
+ * Generate Mermaid diagram for logic
550
+ */
551
+ private generateLogicDiagram(logic: LogicDefinition): GeneratedDoc {
552
+ const lines: string[] = [
553
+ 'stateDiagram-v2',
554
+ ];
555
+
556
+ // Add events as transitions
557
+ if (logic.events && logic.facts) {
558
+ lines.push(' [*] --> Processing');
559
+
560
+ for (const event of logic.events) {
561
+ lines.push(` Processing --> ${event.tag.replace(/[^a-zA-Z0-9]/g, '')}: ${event.tag}`);
562
+ }
563
+
564
+ for (const fact of logic.facts) {
565
+ lines.push(` ${fact.tag.replace(/[^a-zA-Z0-9]/g, '')} --> [*]`);
566
+ }
567
+ }
568
+
569
+ return {
570
+ path: `${this.config.target}/logic/${logic.id}.mmd`,
571
+ content: lines.join('\n'),
572
+ type: 'mermaid',
573
+ };
574
+ }
575
+
576
+ /**
577
+ * Generate rules documentation
578
+ */
579
+ private generateRulesDoc<TContext>(rules: RuleDescriptor<TContext>[]): GeneratedDoc {
580
+ const lines: string[] = [
581
+ '# Rules',
582
+ '',
583
+ 'This document describes all rules registered in the Praxis engine.',
584
+ '',
585
+ ];
586
+
587
+ for (const rule of rules) {
588
+ lines.push(`## ${rule.id}`);
589
+ lines.push('');
590
+
591
+ if (rule.description) {
592
+ lines.push(rule.description);
593
+ lines.push('');
594
+ }
595
+
596
+ if (rule.meta?.eventType) {
597
+ lines.push(`**Triggers on:** \`${rule.meta.eventType}\``);
598
+ lines.push('');
599
+ }
600
+
601
+ if (rule.meta?.priority !== undefined) {
602
+ lines.push(`**Priority:** ${rule.meta.priority}`);
603
+ lines.push('');
604
+ }
605
+ }
606
+
607
+ return {
608
+ path: `${this.config.target}/rules.md`,
609
+ content: lines.join('\n'),
610
+ type: 'markdown',
611
+ };
612
+ }
613
+
614
+ /**
615
+ * Generate constraints documentation
616
+ */
617
+ private generateConstraintsDoc<TContext>(constraints: ConstraintDescriptor<TContext>[]): GeneratedDoc {
618
+ const lines: string[] = [
619
+ '# Constraints',
620
+ '',
621
+ 'This document describes all constraints (invariants) registered in the Praxis engine.',
622
+ '',
623
+ ];
624
+
625
+ for (const constraint of constraints) {
626
+ lines.push(`## ${constraint.id}`);
627
+ lines.push('');
628
+
629
+ if (constraint.description) {
630
+ lines.push(constraint.description);
631
+ lines.push('');
632
+ }
633
+
634
+ if (constraint.meta?.errorMessage) {
635
+ lines.push(`**Error Message:** ${constraint.meta.errorMessage}`);
636
+ lines.push('');
637
+ }
638
+ }
639
+
640
+ return {
641
+ path: `${this.config.target}/constraints.md`,
642
+ content: lines.join('\n'),
643
+ type: 'markdown',
644
+ };
645
+ }
646
+
647
+ /**
648
+ * Generate state diagram from registry
649
+ */
650
+ private generateRegistryDiagram<TContext>(
651
+ rules: RuleDescriptor<TContext>[],
652
+ constraints: ConstraintDescriptor<TContext>[]
653
+ ): GeneratedDoc {
654
+ const lines: string[] = [
655
+ 'graph TD',
656
+ ' subgraph Rules',
657
+ ];
658
+
659
+ for (const rule of rules) {
660
+ const id = rule.id.replace(/[^a-zA-Z0-9]/g, '_');
661
+ lines.push(` ${id}["${rule.id}"]`);
662
+ }
663
+
664
+ lines.push(' end');
665
+ lines.push(' subgraph Constraints');
666
+
667
+ for (const constraint of constraints) {
668
+ const id = constraint.id.replace(/[^a-zA-Z0-9]/g, '_');
669
+ lines.push(` ${id}["${constraint.id}"]`);
670
+ }
671
+
672
+ lines.push(' end');
673
+
674
+ return {
675
+ path: `${this.config.target}/state-diagram.mmd`,
676
+ content: lines.join('\n'),
677
+ type: 'mermaid',
678
+ };
679
+ }
680
+ }
681
+
682
+ /**
683
+ * Create a State-Docs generator instance
684
+ *
685
+ * @example
686
+ * ```typescript
687
+ * import { createStateDocsGenerator } from '@plures/praxis/integrations/state-docs';
688
+ *
689
+ * const generator = createStateDocsGenerator({
690
+ * projectTitle: 'My Project',
691
+ * target: './docs/api',
692
+ * });
693
+ *
694
+ * const docs = generator.generateFromSchema(mySchema);
695
+ * for (const doc of docs) {
696
+ * await writeFile(doc.path, doc.content);
697
+ * }
698
+ * ```
699
+ */
700
+ export function createStateDocsGenerator(config: StateDocsConfig): StateDocsGenerator {
701
+ return new StateDocsGenerator(config);
702
+ }
703
+
704
+ /**
705
+ * Generate documentation from a schema (convenience function)
706
+ */
707
+ export function generateDocs(schema: PraxisSchema, config: StateDocsConfig): GeneratedDoc[] {
708
+ const generator = createStateDocsGenerator(config);
709
+ return generator.generateFromSchema(schema);
710
+ }