@plures/praxis 0.2.0 → 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 (488) hide show
  1. package/README.md +282 -76
  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/{core → src/core}/schema/loader.js +2 -2
  178. package/dist/src/core/schema/loader.js.map +1 -0
  179. package/dist/src/core/schema/normalize.d.ts.map +1 -0
  180. package/dist/src/core/schema/normalize.js.map +1 -0
  181. package/dist/src/core/schema/types.d.ts.map +1 -0
  182. package/dist/src/core/schema/types.js.map +1 -0
  183. package/dist/src/dsl/index.d.ts.map +1 -0
  184. package/dist/src/dsl/index.js.map +1 -0
  185. package/dist/src/dsl.d.ts.map +1 -0
  186. package/dist/src/dsl.js.map +1 -0
  187. package/dist/src/examples/advanced-todo/index.d.ts.map +1 -0
  188. package/dist/src/examples/advanced-todo/index.js.map +1 -0
  189. package/dist/src/examples/auth-basic/index.d.ts.map +1 -0
  190. package/dist/src/examples/auth-basic/index.js.map +1 -0
  191. package/dist/src/examples/cart/index.d.ts.map +1 -0
  192. package/dist/src/examples/cart/index.js.map +1 -0
  193. package/dist/src/examples/hero-ecommerce/index.d.ts.map +1 -0
  194. package/dist/src/examples/hero-ecommerce/index.js.map +1 -0
  195. package/dist/src/examples/svelte-counter/index.d.ts.map +1 -0
  196. package/dist/src/examples/svelte-counter/index.js.map +1 -0
  197. package/dist/src/flows.d.ts.map +1 -0
  198. package/dist/src/flows.js.map +1 -0
  199. package/dist/{index.d.ts → src/index.d.ts} +12 -2
  200. package/dist/src/index.d.ts.map +1 -0
  201. package/dist/{index.js → src/index.js} +6 -1
  202. package/dist/src/index.js.map +1 -0
  203. package/dist/src/integrations/code-canvas.d.ts +265 -0
  204. package/dist/src/integrations/code-canvas.d.ts.map +1 -0
  205. package/dist/src/integrations/code-canvas.js +451 -0
  206. package/dist/src/integrations/code-canvas.js.map +1 -0
  207. package/dist/src/integrations/pluresdb.d.ts +117 -0
  208. package/dist/src/integrations/pluresdb.d.ts.map +1 -0
  209. package/dist/src/integrations/pluresdb.js +117 -0
  210. package/dist/src/integrations/pluresdb.js.map +1 -0
  211. package/dist/src/integrations/state-docs.d.ts +191 -0
  212. package/dist/src/integrations/state-docs.d.ts.map +1 -0
  213. package/dist/src/integrations/state-docs.js +515 -0
  214. package/dist/src/integrations/state-docs.js.map +1 -0
  215. package/dist/src/integrations/svelte.d.ts.map +1 -0
  216. package/dist/src/integrations/svelte.js.map +1 -0
  217. package/dist/src/integrations/tauri.d.ts +360 -0
  218. package/dist/src/integrations/tauri.d.ts.map +1 -0
  219. package/dist/src/integrations/tauri.js +278 -0
  220. package/dist/src/integrations/tauri.js.map +1 -0
  221. package/dist/src/integrations/unum.d.ts +159 -0
  222. package/dist/src/integrations/unum.d.ts.map +1 -0
  223. package/dist/src/integrations/unum.js +240 -0
  224. package/dist/src/integrations/unum.js.map +1 -0
  225. package/dist/src/registry.d.ts.map +1 -0
  226. package/dist/src/registry.js.map +1 -0
  227. package/dist/{runtime → src/runtime}/terminal-adapter.d.ts +58 -7
  228. package/dist/src/runtime/terminal-adapter.d.ts.map +1 -0
  229. package/dist/src/runtime/terminal-adapter.js +237 -0
  230. package/dist/src/runtime/terminal-adapter.js.map +1 -0
  231. package/dist/src/step.d.ts.map +1 -0
  232. package/dist/src/step.js.map +1 -0
  233. package/dist/src/types.d.ts.map +1 -0
  234. package/dist/{cloud → src}/types.js.map +1 -1
  235. package/dist/tools/cli/commands/index.d.ts +7 -0
  236. package/dist/tools/cli/commands/index.d.ts.map +1 -0
  237. package/dist/tools/cli/commands/index.js +7 -0
  238. package/dist/tools/cli/commands/index.js.map +1 -0
  239. package/dist/tools/cli/index.d.ts +8 -0
  240. package/dist/tools/cli/index.d.ts.map +1 -0
  241. package/dist/tools/cli/index.js +9 -0
  242. package/dist/tools/cli/index.js.map +1 -0
  243. package/dist/tools/watcher/index.d.ts +105 -0
  244. package/dist/tools/watcher/index.d.ts.map +1 -0
  245. package/dist/tools/watcher/index.js +213 -0
  246. package/dist/tools/watcher/index.js.map +1 -0
  247. package/dist/ui/canvas/canvas-projection.d.ts +78 -0
  248. package/dist/ui/canvas/canvas-projection.d.ts.map +1 -0
  249. package/dist/ui/canvas/canvas-projection.js +416 -0
  250. package/dist/ui/canvas/canvas-projection.js.map +1 -0
  251. package/dist/ui/canvas/canvas-state.d.ts +200 -0
  252. package/dist/ui/canvas/canvas-state.d.ts.map +1 -0
  253. package/dist/ui/canvas/canvas-state.js +464 -0
  254. package/dist/ui/canvas/canvas-state.js.map +1 -0
  255. package/dist/ui/canvas/components/index.d.ts +95 -0
  256. package/dist/ui/canvas/components/index.d.ts.map +1 -0
  257. package/dist/ui/canvas/components/index.js +19 -0
  258. package/dist/ui/canvas/components/index.js.map +1 -0
  259. package/dist/ui/canvas/index.d.ts +32 -0
  260. package/dist/ui/canvas/index.d.ts.map +1 -0
  261. package/dist/ui/canvas/index.js +32 -0
  262. package/dist/ui/canvas/index.js.map +1 -0
  263. package/dist/ui/svelte-generator/index.d.ts +9 -0
  264. package/dist/ui/svelte-generator/index.d.ts.map +1 -0
  265. package/dist/ui/svelte-generator/index.js +11 -0
  266. package/dist/ui/svelte-generator/index.js.map +1 -0
  267. package/dist/ui/svelte-generator/psf-generator.d.ts +128 -0
  268. package/dist/ui/svelte-generator/psf-generator.d.ts.map +1 -0
  269. package/dist/ui/svelte-generator/psf-generator.js +506 -0
  270. package/dist/ui/svelte-generator/psf-generator.js.map +1 -0
  271. package/docs/README.md +155 -0
  272. package/docs/core/building-extensions.md +553 -0
  273. package/docs/core/cli-usage.md +498 -0
  274. package/docs/core/code-canvas-sync.md +468 -0
  275. package/docs/core/logic-engine.md +566 -0
  276. package/docs/core/pluresdb-integration.md +646 -0
  277. package/docs/core/schema-model.md +414 -0
  278. package/docs/core/ui-generation.md +580 -0
  279. package/docs/core/what-is-praxis.md +240 -0
  280. package/docs/tutorials/README.md +84 -0
  281. package/docs/tutorials/ecommerce-cart.md +631 -0
  282. package/docs/tutorials/first-app.md +529 -0
  283. package/docs/tutorials/form-builder.md +620 -0
  284. package/docs/tutorials/todo-pluresdb.md +589 -0
  285. package/package.json +1 -1
  286. package/src/__tests__/canvas-components.test.ts +450 -0
  287. package/src/__tests__/cli-create.test.ts +178 -0
  288. package/src/__tests__/code-canvas-integration.test.ts +277 -0
  289. package/src/__tests__/docs-generator.test.ts +181 -0
  290. package/src/__tests__/generators.test.ts +3 -2
  291. package/src/__tests__/pluresdb.test.ts +457 -0
  292. package/src/__tests__/psf-schema-engine.test.ts +450 -0
  293. package/src/__tests__/state-docs-integration.test.ts +297 -0
  294. package/src/__tests__/tauri-integration.test.ts +298 -0
  295. package/src/__tests__/terminal-node.test.ts +1 -1
  296. package/src/__tests__/unum-integration.test.ts +142 -0
  297. package/src/cli/commands/build.ts +203 -0
  298. package/src/cli/commands/canvas.ts +246 -0
  299. package/src/cli/commands/create.ts +666 -0
  300. package/src/cli/commands/dev.ts +95 -0
  301. package/src/cli/commands/orchestrate.ts +212 -0
  302. package/src/cli/index.ts +48 -21
  303. package/src/core/actors.ts +1 -1
  304. package/src/core/component/generator.ts +45 -3
  305. package/src/core/logic/generator.ts +39 -4
  306. package/src/core/pluresdb/adapter.ts +117 -0
  307. package/src/core/pluresdb/generator.ts +33 -4
  308. package/src/core/pluresdb/index.ts +37 -0
  309. package/src/core/pluresdb/schema-registry.ts +162 -0
  310. package/src/core/pluresdb/store.ts +443 -0
  311. package/src/core/schema/loader.ts +2 -2
  312. package/src/index.ts +109 -0
  313. package/src/integrations/code-canvas.ts +717 -0
  314. package/src/integrations/pluresdb.ts +140 -29
  315. package/src/integrations/state-docs.ts +710 -0
  316. package/src/integrations/tauri.ts +638 -0
  317. package/src/integrations/unum.ts +395 -0
  318. package/src/runtime/terminal-adapter.ts +178 -23
  319. package/dist/adapters/cli.d.ts.map +0 -1
  320. package/dist/adapters/cli.js.map +0 -1
  321. package/dist/cli/commands/auth.d.ts.map +0 -1
  322. package/dist/cli/commands/auth.js.map +0 -1
  323. package/dist/cli/commands/cloud.d.ts.map +0 -1
  324. package/dist/cli/commands/cloud.js.map +0 -1
  325. package/dist/cli/commands/generate.d.ts.map +0 -1
  326. package/dist/cli/commands/generate.js.map +0 -1
  327. package/dist/cli/index.js.map +0 -1
  328. package/dist/cloud/auth.d.ts.map +0 -1
  329. package/dist/cloud/auth.js.map +0 -1
  330. package/dist/cloud/billing.d.ts.map +0 -1
  331. package/dist/cloud/billing.js.map +0 -1
  332. package/dist/cloud/client.d.ts.map +0 -1
  333. package/dist/cloud/client.js.map +0 -1
  334. package/dist/cloud/index.d.ts.map +0 -1
  335. package/dist/cloud/index.js.map +0 -1
  336. package/dist/cloud/marketplace.d.ts.map +0 -1
  337. package/dist/cloud/marketplace.js.map +0 -1
  338. package/dist/cloud/provisioning.d.ts.map +0 -1
  339. package/dist/cloud/provisioning.js.map +0 -1
  340. package/dist/cloud/relay/endpoints.d.ts.map +0 -1
  341. package/dist/cloud/relay/endpoints.js.map +0 -1
  342. package/dist/cloud/relay/health/index.d.ts.map +0 -1
  343. package/dist/cloud/relay/health/index.js.map +0 -1
  344. package/dist/cloud/relay/stats/index.d.ts.map +0 -1
  345. package/dist/cloud/relay/stats/index.js.map +0 -1
  346. package/dist/cloud/relay/sync/index.d.ts.map +0 -1
  347. package/dist/cloud/relay/sync/index.js.map +0 -1
  348. package/dist/cloud/relay/usage/index.d.ts.map +0 -1
  349. package/dist/cloud/relay/usage/index.js.map +0 -1
  350. package/dist/cloud/sponsors.d.ts.map +0 -1
  351. package/dist/cloud/sponsors.js.map +0 -1
  352. package/dist/cloud/types.d.ts.map +0 -1
  353. package/dist/components/index.d.ts.map +0 -1
  354. package/dist/components/index.js.map +0 -1
  355. package/dist/core/actors.d.ts.map +0 -1
  356. package/dist/core/actors.js.map +0 -1
  357. package/dist/core/component/generator.d.ts.map +0 -1
  358. package/dist/core/component/generator.js.map +0 -1
  359. package/dist/core/engine.d.ts.map +0 -1
  360. package/dist/core/engine.js.map +0 -1
  361. package/dist/core/introspection.d.ts.map +0 -1
  362. package/dist/core/introspection.js.map +0 -1
  363. package/dist/core/logic/generator.d.ts.map +0 -1
  364. package/dist/core/logic/generator.js.map +0 -1
  365. package/dist/core/pluresdb/generator.d.ts.map +0 -1
  366. package/dist/core/pluresdb/generator.js.map +0 -1
  367. package/dist/core/protocol.d.ts.map +0 -1
  368. package/dist/core/protocol.js.map +0 -1
  369. package/dist/core/rules.d.ts.map +0 -1
  370. package/dist/core/rules.js.map +0 -1
  371. package/dist/core/schema/loader.d.ts.map +0 -1
  372. package/dist/core/schema/loader.js.map +0 -1
  373. package/dist/core/schema/normalize.d.ts.map +0 -1
  374. package/dist/core/schema/normalize.js.map +0 -1
  375. package/dist/core/schema/types.d.ts.map +0 -1
  376. package/dist/core/schema/types.js.map +0 -1
  377. package/dist/dsl/index.d.ts.map +0 -1
  378. package/dist/dsl/index.js.map +0 -1
  379. package/dist/dsl.d.ts.map +0 -1
  380. package/dist/dsl.js.map +0 -1
  381. package/dist/examples/advanced-todo/index.d.ts.map +0 -1
  382. package/dist/examples/advanced-todo/index.js.map +0 -1
  383. package/dist/examples/auth-basic/index.d.ts.map +0 -1
  384. package/dist/examples/auth-basic/index.js.map +0 -1
  385. package/dist/examples/cart/index.d.ts.map +0 -1
  386. package/dist/examples/cart/index.js.map +0 -1
  387. package/dist/examples/hero-ecommerce/index.d.ts.map +0 -1
  388. package/dist/examples/hero-ecommerce/index.js.map +0 -1
  389. package/dist/examples/svelte-counter/index.d.ts.map +0 -1
  390. package/dist/examples/svelte-counter/index.js.map +0 -1
  391. package/dist/flows.d.ts.map +0 -1
  392. package/dist/flows.js.map +0 -1
  393. package/dist/index.d.ts.map +0 -1
  394. package/dist/index.js.map +0 -1
  395. package/dist/integrations/pluresdb.d.ts +0 -56
  396. package/dist/integrations/pluresdb.d.ts.map +0 -1
  397. package/dist/integrations/pluresdb.js +0 -46
  398. package/dist/integrations/pluresdb.js.map +0 -1
  399. package/dist/integrations/svelte.d.ts.map +0 -1
  400. package/dist/integrations/svelte.js.map +0 -1
  401. package/dist/registry.d.ts.map +0 -1
  402. package/dist/registry.js.map +0 -1
  403. package/dist/runtime/terminal-adapter.d.ts.map +0 -1
  404. package/dist/runtime/terminal-adapter.js +0 -113
  405. package/dist/runtime/terminal-adapter.js.map +0 -1
  406. package/dist/step.d.ts.map +0 -1
  407. package/dist/step.js.map +0 -1
  408. package/dist/types.d.ts.map +0 -1
  409. package/dist/types.js.map +0 -1
  410. /package/dist/{adapters → src/adapters}/cli.d.ts +0 -0
  411. /package/dist/{adapters → src/adapters}/cli.js +0 -0
  412. /package/dist/{cli → src/cli}/commands/auth.d.ts +0 -0
  413. /package/dist/{cli → src/cli}/commands/auth.js +0 -0
  414. /package/dist/{cli → src/cli}/commands/cloud.d.ts +0 -0
  415. /package/dist/{cli → src/cli}/commands/cloud.js +0 -0
  416. /package/dist/{cli → src/cli}/commands/generate.d.ts +0 -0
  417. /package/dist/{cli → src/cli}/commands/generate.js +0 -0
  418. /package/dist/{cli → src/cli}/index.d.ts +0 -0
  419. /package/dist/{cloud → src/cloud}/auth.d.ts +0 -0
  420. /package/dist/{cloud → src/cloud}/auth.js +0 -0
  421. /package/dist/{cloud → src/cloud}/billing.d.ts +0 -0
  422. /package/dist/{cloud → src/cloud}/billing.js +0 -0
  423. /package/dist/{cloud → src/cloud}/client.d.ts +0 -0
  424. /package/dist/{cloud → src/cloud}/client.js +0 -0
  425. /package/dist/{cloud → src/cloud}/index.d.ts +0 -0
  426. /package/dist/{cloud → src/cloud}/index.js +0 -0
  427. /package/dist/{cloud → src/cloud}/marketplace.d.ts +0 -0
  428. /package/dist/{cloud → src/cloud}/marketplace.js +0 -0
  429. /package/dist/{cloud → src/cloud}/provisioning.d.ts +0 -0
  430. /package/dist/{cloud → src/cloud}/provisioning.js +0 -0
  431. /package/dist/{cloud → src/cloud}/relay/endpoints.d.ts +0 -0
  432. /package/dist/{cloud → src/cloud}/relay/endpoints.js +0 -0
  433. /package/dist/{cloud → src/cloud}/relay/health/index.d.ts +0 -0
  434. /package/dist/{cloud → src/cloud}/relay/health/index.js +0 -0
  435. /package/dist/{cloud → src/cloud}/relay/stats/index.d.ts +0 -0
  436. /package/dist/{cloud → src/cloud}/relay/stats/index.js +0 -0
  437. /package/dist/{cloud → src/cloud}/relay/sync/index.d.ts +0 -0
  438. /package/dist/{cloud → src/cloud}/relay/sync/index.js +0 -0
  439. /package/dist/{cloud → src/cloud}/relay/usage/index.d.ts +0 -0
  440. /package/dist/{cloud → src/cloud}/relay/usage/index.js +0 -0
  441. /package/dist/{cloud → src/cloud}/sponsors.d.ts +0 -0
  442. /package/dist/{cloud → src/cloud}/sponsors.js +0 -0
  443. /package/dist/{cloud → src/cloud}/types.d.ts +0 -0
  444. /package/dist/{cloud → src/cloud}/types.js +0 -0
  445. /package/dist/{components → src/components}/index.d.ts +0 -0
  446. /package/dist/{components → src/components}/index.js +0 -0
  447. /package/dist/{core → src/core}/actors.d.ts +0 -0
  448. /package/dist/{core → src/core}/actors.js +0 -0
  449. /package/dist/{core → src/core}/component/generator.d.ts +0 -0
  450. /package/dist/{core → src/core}/engine.d.ts +0 -0
  451. /package/dist/{core → src/core}/engine.js +0 -0
  452. /package/dist/{core → src/core}/introspection.d.ts +0 -0
  453. /package/dist/{core → src/core}/introspection.js +0 -0
  454. /package/dist/{core → src/core}/logic/generator.d.ts +0 -0
  455. /package/dist/{core → src/core}/pluresdb/generator.d.ts +0 -0
  456. /package/dist/{core → src/core}/protocol.d.ts +0 -0
  457. /package/dist/{core → src/core}/protocol.js +0 -0
  458. /package/dist/{core → src/core}/rules.d.ts +0 -0
  459. /package/dist/{core → src/core}/rules.js +0 -0
  460. /package/dist/{core → src/core}/schema/loader.d.ts +0 -0
  461. /package/dist/{core → src/core}/schema/normalize.d.ts +0 -0
  462. /package/dist/{core → src/core}/schema/normalize.js +0 -0
  463. /package/dist/{core → src/core}/schema/types.d.ts +0 -0
  464. /package/dist/{core → src/core}/schema/types.js +0 -0
  465. /package/dist/{dsl → src/dsl}/index.d.ts +0 -0
  466. /package/dist/{dsl → src/dsl}/index.js +0 -0
  467. /package/dist/{dsl.d.ts → src/dsl.d.ts} +0 -0
  468. /package/dist/{dsl.js → src/dsl.js} +0 -0
  469. /package/dist/{examples → src/examples}/advanced-todo/index.d.ts +0 -0
  470. /package/dist/{examples → src/examples}/advanced-todo/index.js +0 -0
  471. /package/dist/{examples → src/examples}/auth-basic/index.d.ts +0 -0
  472. /package/dist/{examples → src/examples}/auth-basic/index.js +0 -0
  473. /package/dist/{examples → src/examples}/cart/index.d.ts +0 -0
  474. /package/dist/{examples → src/examples}/cart/index.js +0 -0
  475. /package/dist/{examples → src/examples}/hero-ecommerce/index.d.ts +0 -0
  476. /package/dist/{examples → src/examples}/hero-ecommerce/index.js +0 -0
  477. /package/dist/{examples → src/examples}/svelte-counter/index.d.ts +0 -0
  478. /package/dist/{examples → src/examples}/svelte-counter/index.js +0 -0
  479. /package/dist/{flows.d.ts → src/flows.d.ts} +0 -0
  480. /package/dist/{flows.js → src/flows.js} +0 -0
  481. /package/dist/{integrations → src/integrations}/svelte.d.ts +0 -0
  482. /package/dist/{integrations → src/integrations}/svelte.js +0 -0
  483. /package/dist/{registry.d.ts → src/registry.d.ts} +0 -0
  484. /package/dist/{registry.js → src/registry.js} +0 -0
  485. /package/dist/{step.d.ts → src/step.d.ts} +0 -0
  486. /package/dist/{step.js → src/step.js} +0 -0
  487. /package/dist/{types.d.ts → src/types.d.ts} +0 -0
  488. /package/dist/{types.js → src/types.js} +0 -0
@@ -0,0 +1,666 @@
1
+ /**
2
+ * Praxis Create Command
3
+ *
4
+ * Creates new Praxis applications and components from templates.
5
+ */
6
+
7
+ import { mkdir, writeFile } from 'fs/promises';
8
+ import { join, resolve } from 'path';
9
+ import { existsSync } from 'fs';
10
+
11
+ /**
12
+ * Options for the create command
13
+ */
14
+ export interface CreateOptions {
15
+ /** Template to use (basic, fullstack) */
16
+ template?: string;
17
+ /** Output directory (for components) */
18
+ directory?: string;
19
+ /** Features to include */
20
+ features?: string[];
21
+ }
22
+
23
+ /**
24
+ * Generate package.json content for a new app
25
+ */
26
+ function generatePackageJson(name: string): string {
27
+ const pkg = {
28
+ name: name,
29
+ version: "0.1.0",
30
+ private: true,
31
+ type: "module",
32
+ scripts: {
33
+ dev: "vite",
34
+ build: "tsc && vite build",
35
+ preview: "vite preview",
36
+ generate: "praxis generate",
37
+ test: "vitest"
38
+ },
39
+ dependencies: {
40
+ "@plures/praxis": "^0.2.1"
41
+ },
42
+ devDependencies: {
43
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
44
+ "@tsconfig/svelte": "^5.0.4",
45
+ "svelte": "^5.0.0",
46
+ "svelte-check": "^4.0.0",
47
+ "typescript": "^5.6.0",
48
+ "vite": "^6.0.0",
49
+ "vitest": "^4.0.0"
50
+ }
51
+ };
52
+
53
+ return JSON.stringify(pkg, null, 2);
54
+ }
55
+
56
+ /**
57
+ * Generate tsconfig.json content
58
+ */
59
+ function generateTsConfig(): string {
60
+ const config = {
61
+ extends: "@tsconfig/svelte/tsconfig.json",
62
+ compilerOptions: {
63
+ target: "ESNext",
64
+ module: "ESNext",
65
+ moduleResolution: "bundler",
66
+ strict: true,
67
+ esModuleInterop: true,
68
+ skipLibCheck: true,
69
+ resolveJsonModule: true,
70
+ isolatedModules: true,
71
+ noEmit: true
72
+ },
73
+ include: ["src/**/*"],
74
+ exclude: ["node_modules"]
75
+ };
76
+
77
+ return JSON.stringify(config, null, 2);
78
+ }
79
+
80
+ /**
81
+ * Generate vite.config.ts content
82
+ */
83
+ function generateViteConfig(): string {
84
+ return `import { defineConfig } from 'vite';
85
+ import { svelte } from '@sveltejs/vite-plugin-svelte';
86
+
87
+ export default defineConfig({
88
+ plugins: [svelte()],
89
+ resolve: {
90
+ alias: {
91
+ '@': '/src'
92
+ }
93
+ }
94
+ });
95
+ `;
96
+ }
97
+
98
+ /**
99
+ * Generate main.ts entry point
100
+ */
101
+ function generateMainTs(name: string): string {
102
+ return `/**
103
+ * ${name} - Built with Praxis
104
+ */
105
+ import App from './App.svelte';
106
+ import { mount } from 'svelte';
107
+
108
+ const app = mount(App, {
109
+ target: document.getElementById('app')!
110
+ });
111
+
112
+ export default app;
113
+ `;
114
+ }
115
+
116
+ /**
117
+ * Generate App.svelte component
118
+ */
119
+ function generateAppSvelte(name: string): string {
120
+ return `<script lang="ts">
121
+ import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule } from '@plures/praxis';
122
+
123
+ // Define your context type
124
+ interface AppContext {
125
+ initialized: boolean;
126
+ message: string;
127
+ }
128
+
129
+ // Create the registry and engine
130
+ const registry = new PraxisRegistry<AppContext>();
131
+
132
+ const engine = createPraxisEngine({
133
+ initialContext: {
134
+ initialized: true,
135
+ message: 'Welcome to ${name}!'
136
+ },
137
+ registry
138
+ });
139
+
140
+ // Reactive context
141
+ let context = $state(engine.getContext());
142
+ </script>
143
+
144
+ <main>
145
+ <h1>{context.message}</h1>
146
+ <p>Your Praxis application is running!</p>
147
+
148
+ <div class="card">
149
+ <h2>Next Steps</h2>
150
+ <ul>
151
+ <li>Define your schema in <code>src/schemas/app.schema.js</code></li>
152
+ <li>Run <code>praxis generate</code> to generate code</li>
153
+ <li>Build your application logic with facts, events, and rules</li>
154
+ </ul>
155
+ </div>
156
+ </main>
157
+
158
+ <style>
159
+ main {
160
+ max-width: 800px;
161
+ margin: 0 auto;
162
+ padding: 2rem;
163
+ font-family: system-ui, -apple-system, sans-serif;
164
+ }
165
+
166
+ h1 {
167
+ color: #333;
168
+ text-align: center;
169
+ }
170
+
171
+ .card {
172
+ background: #f5f5f5;
173
+ border-radius: 8px;
174
+ padding: 1.5rem;
175
+ margin-top: 2rem;
176
+ }
177
+
178
+ .card h2 {
179
+ margin-top: 0;
180
+ }
181
+
182
+ code {
183
+ background: #e0e0e0;
184
+ padding: 0.2rem 0.4rem;
185
+ border-radius: 4px;
186
+ font-size: 0.9em;
187
+ }
188
+
189
+ li {
190
+ margin: 0.5rem 0;
191
+ }
192
+ </style>
193
+ `;
194
+ }
195
+
196
+ /**
197
+ * Generate index.html
198
+ */
199
+ function generateIndexHtml(name: string): string {
200
+ return `<!DOCTYPE html>
201
+ <html lang="en">
202
+ <head>
203
+ <meta charset="UTF-8" />
204
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
205
+ <title>${name}</title>
206
+ <style>
207
+ * {
208
+ margin: 0;
209
+ padding: 0;
210
+ box-sizing: border-box;
211
+ }
212
+ body {
213
+ min-height: 100vh;
214
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
215
+ }
216
+ </style>
217
+ </head>
218
+ <body>
219
+ <div id="app"></div>
220
+ <script type="module" src="/src/main.ts"></script>
221
+ </body>
222
+ </html>
223
+ `;
224
+ }
225
+
226
+ /**
227
+ * Generate app schema file
228
+ */
229
+ function generateAppSchema(name: string): string {
230
+ return `/**
231
+ * ${name} Schema
232
+ *
233
+ * Define your application schema here.
234
+ * Run 'praxis generate' to generate code from this schema.
235
+ */
236
+
237
+ export const schema = {
238
+ version: '1.0.0',
239
+ name: '${name}',
240
+ description: 'A Praxis application',
241
+
242
+ models: [
243
+ {
244
+ name: 'Item',
245
+ description: 'Example item model',
246
+ fields: [
247
+ { name: 'id', type: 'string' },
248
+ { name: 'name', type: 'string' },
249
+ { name: 'createdAt', type: 'date' }
250
+ ]
251
+ }
252
+ ],
253
+
254
+ components: [
255
+ {
256
+ name: 'ItemForm',
257
+ type: 'form',
258
+ description: 'Form for creating items',
259
+ model: 'Item'
260
+ },
261
+ {
262
+ name: 'ItemList',
263
+ type: 'list',
264
+ description: 'List of items',
265
+ model: 'Item'
266
+ }
267
+ ],
268
+
269
+ logic: [
270
+ {
271
+ id: 'item-logic',
272
+ description: 'Item management logic',
273
+
274
+ events: [
275
+ {
276
+ tag: 'CREATE_ITEM',
277
+ payload: { name: 'string' },
278
+ description: 'Create a new item'
279
+ },
280
+ {
281
+ tag: 'DELETE_ITEM',
282
+ payload: { itemId: 'string' },
283
+ description: 'Delete an item'
284
+ }
285
+ ],
286
+
287
+ facts: [
288
+ {
289
+ tag: 'ItemCreated',
290
+ payload: { itemId: 'string', name: 'string' },
291
+ description: 'An item was created'
292
+ },
293
+ {
294
+ tag: 'ItemDeleted',
295
+ payload: { itemId: 'string' },
296
+ description: 'An item was deleted'
297
+ }
298
+ ],
299
+
300
+ rules: [
301
+ {
302
+ id: 'item.create',
303
+ description: 'Create a new item',
304
+ priority: 10
305
+ }
306
+ ],
307
+
308
+ constraints: [
309
+ {
310
+ id: 'item.name-required',
311
+ description: 'Item name must not be empty',
312
+ message: 'Item name is required'
313
+ }
314
+ ]
315
+ }
316
+ ]
317
+ };
318
+
319
+ export default schema;
320
+ `;
321
+ }
322
+
323
+ /**
324
+ * Generate svelte.config.js
325
+ */
326
+ function generateSvelteConfig(): string {
327
+ return `import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
328
+
329
+ export default {
330
+ preprocess: vitePreprocess()
331
+ };
332
+ `;
333
+ }
334
+
335
+ /**
336
+ * Generate README for new app
337
+ */
338
+ function generateReadme(name: string, template: string): string {
339
+ return `# ${name}
340
+
341
+ A Praxis application created with the ${template} template.
342
+
343
+ ## Getting Started
344
+
345
+ ### Install dependencies
346
+
347
+ \`\`\`bash
348
+ npm install
349
+ \`\`\`
350
+
351
+ ### Start development server
352
+
353
+ \`\`\`bash
354
+ npm run dev
355
+ \`\`\`
356
+
357
+ ### Generate code from schema
358
+
359
+ \`\`\`bash
360
+ npm run generate
361
+ \`\`\`
362
+
363
+ ### Build for production
364
+
365
+ \`\`\`bash
366
+ npm run build
367
+ \`\`\`
368
+
369
+ ## Project Structure
370
+
371
+ \`\`\`
372
+ ${name}/
373
+ ā”œā”€ā”€ src/
374
+ │ ā”œā”€ā”€ schemas/
375
+ │ │ └── app.schema.js # Application schema
376
+ │ ā”œā”€ā”€ components/ # Generated & custom components
377
+ │ ā”œā”€ā”€ logic/ # Logic engine setup
378
+ │ ā”œā”€ā”€ App.svelte # Root component
379
+ │ └── main.ts # Application entry
380
+ ā”œā”€ā”€ public/ # Static assets
381
+ ā”œā”€ā”€ package.json
382
+ ā”œā”€ā”€ tsconfig.json
383
+ ā”œā”€ā”€ vite.config.ts
384
+ └── README.md
385
+ \`\`\`
386
+
387
+ ## Documentation
388
+
389
+ - [Praxis Framework Guide](https://github.com/plures/praxis/blob/main/FRAMEWORK.md)
390
+ - [Getting Started](https://github.com/plures/praxis/blob/main/GETTING_STARTED.md)
391
+ - [Schema Reference](https://github.com/plures/praxis/blob/main/docs/guides/schema.md)
392
+
393
+ ## License
394
+
395
+ MIT
396
+ `;
397
+ }
398
+
399
+ /**
400
+ * Generate .gitignore
401
+ */
402
+ function generateGitignore(): string {
403
+ return `# Dependencies
404
+ node_modules/
405
+
406
+ # Build output
407
+ dist/
408
+ build/
409
+ .svelte-kit/
410
+
411
+ # Generated code
412
+ generated/
413
+
414
+ # Environment
415
+ .env
416
+ .env.local
417
+ .env.*.local
418
+
419
+ # IDE
420
+ .vscode/
421
+ .idea/
422
+ *.swp
423
+ *.swo
424
+
425
+ # OS
426
+ .DS_Store
427
+ Thumbs.db
428
+
429
+ # Logs
430
+ *.log
431
+ npm-debug.log*
432
+
433
+ # Test coverage
434
+ coverage/
435
+ `;
436
+ }
437
+
438
+ /**
439
+ * Create a new Praxis application
440
+ */
441
+ async function createApp(name: string, options: CreateOptions): Promise<void> {
442
+ const template = options.template || 'basic';
443
+ const appDir = resolve(process.cwd(), name);
444
+
445
+ // Check if directory already exists
446
+ if (existsSync(appDir)) {
447
+ console.error(`\nāœ— Directory '${name}' already exists`);
448
+ console.error(' Please choose a different name or remove the existing directory.\n');
449
+ process.exit(1);
450
+ }
451
+
452
+ console.log(`\nšŸ“¦ Creating Praxis application: ${name}`);
453
+ console.log(` Template: ${template}`);
454
+ console.log(` Location: ${appDir}\n`);
455
+
456
+ // Create directory structure
457
+ const dirs = [
458
+ appDir,
459
+ join(appDir, 'src'),
460
+ join(appDir, 'src', 'schemas'),
461
+ join(appDir, 'src', 'components'),
462
+ join(appDir, 'src', 'logic'),
463
+ join(appDir, 'src', 'store'),
464
+ join(appDir, 'public')
465
+ ];
466
+
467
+ for (const dir of dirs) {
468
+ await mkdir(dir, { recursive: true });
469
+ }
470
+ console.log('āœ“ Created directory structure');
471
+
472
+ // Write configuration files
473
+ await writeFile(join(appDir, 'package.json'), generatePackageJson(name));
474
+ await writeFile(join(appDir, 'tsconfig.json'), generateTsConfig());
475
+ await writeFile(join(appDir, 'vite.config.ts'), generateViteConfig());
476
+ await writeFile(join(appDir, 'svelte.config.js'), generateSvelteConfig());
477
+ await writeFile(join(appDir, '.gitignore'), generateGitignore());
478
+ await writeFile(join(appDir, 'README.md'), generateReadme(name, template));
479
+ console.log('āœ“ Created configuration files');
480
+
481
+ // Write source files
482
+ await writeFile(join(appDir, 'index.html'), generateIndexHtml(name));
483
+ await writeFile(join(appDir, 'src', 'main.ts'), generateMainTs(name));
484
+ await writeFile(join(appDir, 'src', 'App.svelte'), generateAppSvelte(name));
485
+ await writeFile(join(appDir, 'src', 'schemas', 'app.schema.js'), generateAppSchema(name));
486
+ console.log('āœ“ Created source files');
487
+
488
+ // Create placeholder files for generated directories
489
+ await writeFile(join(appDir, 'src', 'components', '.gitkeep'), '# Generated components will be placed here\n');
490
+ await writeFile(join(appDir, 'src', 'logic', '.gitkeep'), '# Logic files will be placed here\n');
491
+ await writeFile(join(appDir, 'src', 'store', '.gitkeep'), '# Store files will be placed here\n');
492
+ await writeFile(join(appDir, 'public', '.gitkeep'), '# Static assets go here\n');
493
+ console.log('āœ“ Created placeholder files');
494
+
495
+ console.log(`
496
+ āœ… Application created successfully!
497
+
498
+ Next steps:
499
+
500
+ cd ${name}
501
+ npm install
502
+ npm run dev
503
+
504
+ Then open http://localhost:5173 in your browser.
505
+
506
+ To generate code from your schema:
507
+
508
+ npm run generate
509
+
510
+ For more information, see the README.md in your project.
511
+ `);
512
+ }
513
+
514
+ /**
515
+ * Generate component schema content
516
+ */
517
+ function generateComponentSchema(name: string): string {
518
+ return `/**
519
+ * ${name} Component Schema
520
+ */
521
+
522
+ export const componentSchema = {
523
+ name: '${name}',
524
+ type: 'display',
525
+ description: 'A ${name} component',
526
+
527
+ props: [
528
+ { name: 'title', type: 'string', required: true },
529
+ { name: 'content', type: 'string', required: false }
530
+ ],
531
+
532
+ events: [
533
+ { name: 'click', description: 'Emitted when clicked' }
534
+ ]
535
+ };
536
+
537
+ export default componentSchema;
538
+ `;
539
+ }
540
+
541
+ /**
542
+ * Generate component Svelte content
543
+ */
544
+ function generateComponentSvelte(name: string): string {
545
+ return `<script lang="ts">
546
+ /**
547
+ * ${name} Component
548
+ *
549
+ * Generated by Praxis.
550
+ */
551
+
552
+ interface Props {
553
+ title: string;
554
+ content?: string;
555
+ }
556
+
557
+ let { title, content = '' }: Props = $props();
558
+ </script>
559
+
560
+ <div class="${name.toLowerCase()}" role="button" tabindex="0">
561
+ <h3>{title}</h3>
562
+ {#if content}
563
+ <p>{content}</p>
564
+ {/if}
565
+ <slot />
566
+ </div>
567
+
568
+ <style>
569
+ .${name.toLowerCase()} {
570
+ padding: 1rem;
571
+ border: 1px solid #ddd;
572
+ border-radius: 8px;
573
+ margin: 0.5rem 0;
574
+ cursor: pointer;
575
+ transition: box-shadow 0.2s;
576
+ }
577
+
578
+ .${name.toLowerCase()}:hover {
579
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
580
+ }
581
+
582
+ h3 {
583
+ margin: 0 0 0.5rem 0;
584
+ color: #333;
585
+ }
586
+
587
+ p {
588
+ margin: 0;
589
+ color: #666;
590
+ }
591
+ </style>
592
+ `;
593
+ }
594
+
595
+ /**
596
+ * Create a new Praxis component
597
+ */
598
+ async function createComponent(name: string, options: CreateOptions): Promise<void> {
599
+ const outputDir = options.directory || join(process.cwd(), 'src', 'components');
600
+ const componentDir = join(outputDir, name);
601
+
602
+ // Check if component directory already exists
603
+ if (existsSync(componentDir)) {
604
+ console.error(`\nāœ— Component '${name}' already exists at ${componentDir}`);
605
+ console.error(' Please choose a different name or remove the existing component.\n');
606
+ process.exit(1);
607
+ }
608
+
609
+ console.log(`\n🧩 Creating component: ${name}`);
610
+ console.log(` Location: ${componentDir}\n`);
611
+
612
+ // Create component directory
613
+ await mkdir(componentDir, { recursive: true });
614
+
615
+ // Write component files
616
+ await writeFile(join(componentDir, `${name}.svelte`), generateComponentSvelte(name));
617
+ await writeFile(join(componentDir, `${name}.schema.js`), generateComponentSchema(name));
618
+ await writeFile(join(componentDir, 'index.ts'), `export { default as ${name} } from './${name}.svelte';\n`);
619
+
620
+ console.log(`āœ“ Created ${name}.svelte`);
621
+ console.log(`āœ“ Created ${name}.schema.js`);
622
+ console.log(`āœ“ Created index.ts`);
623
+
624
+ console.log(`
625
+ āœ… Component created successfully!
626
+
627
+ Import it in your application:
628
+
629
+ import { ${name} } from './components/${name}';
630
+
631
+ Or use the schema for generation:
632
+
633
+ praxis generate --schema src/components/${name}/${name}.schema.js
634
+ `);
635
+ }
636
+
637
+ /**
638
+ * Execute the create command
639
+ */
640
+ export async function create(type: string, name: string | undefined, options: CreateOptions): Promise<void> {
641
+ if (!name) {
642
+ console.error('\nāœ— Please provide a name for the ' + type);
643
+ console.error(` Usage: praxis create ${type} <name>\n`);
644
+ process.exit(1);
645
+ }
646
+
647
+ // Validate name
648
+ if (!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(name)) {
649
+ console.error('\nāœ— Invalid name format');
650
+ console.error(' Name must start with a letter and contain only letters, numbers, hyphens, and underscores.\n');
651
+ process.exit(1);
652
+ }
653
+
654
+ switch (type) {
655
+ case 'app':
656
+ await createApp(name, options);
657
+ break;
658
+ case 'component':
659
+ await createComponent(name, options);
660
+ break;
661
+ default:
662
+ console.error(`\nāœ— Unknown type: ${type}`);
663
+ console.error(' Valid types: app, component\n');
664
+ process.exit(1);
665
+ }
666
+ }