@plures/praxis 0.2.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 (263) hide show
  1. package/FRAMEWORK.md +420 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1310 -0
  4. package/dist/adapters/cli.d.ts +43 -0
  5. package/dist/adapters/cli.d.ts.map +1 -0
  6. package/dist/adapters/cli.js +126 -0
  7. package/dist/adapters/cli.js.map +1 -0
  8. package/dist/cli/commands/auth.d.ts +26 -0
  9. package/dist/cli/commands/auth.d.ts.map +1 -0
  10. package/dist/cli/commands/auth.js +233 -0
  11. package/dist/cli/commands/auth.js.map +1 -0
  12. package/dist/cli/commands/cloud.d.ts +27 -0
  13. package/dist/cli/commands/cloud.d.ts.map +1 -0
  14. package/dist/cli/commands/cloud.js +232 -0
  15. package/dist/cli/commands/cloud.js.map +1 -0
  16. package/dist/cli/commands/generate.d.ts +25 -0
  17. package/dist/cli/commands/generate.d.ts.map +1 -0
  18. package/dist/cli/commands/generate.js +168 -0
  19. package/dist/cli/commands/generate.js.map +1 -0
  20. package/dist/cli/index.d.ts +8 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +179 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cloud/auth.d.ts +51 -0
  25. package/dist/cloud/auth.d.ts.map +1 -0
  26. package/dist/cloud/auth.js +194 -0
  27. package/dist/cloud/auth.js.map +1 -0
  28. package/dist/cloud/billing.d.ts +184 -0
  29. package/dist/cloud/billing.d.ts.map +1 -0
  30. package/dist/cloud/billing.js +179 -0
  31. package/dist/cloud/billing.js.map +1 -0
  32. package/dist/cloud/client.d.ts +39 -0
  33. package/dist/cloud/client.d.ts.map +1 -0
  34. package/dist/cloud/client.js +176 -0
  35. package/dist/cloud/client.js.map +1 -0
  36. package/dist/cloud/index.d.ts +44 -0
  37. package/dist/cloud/index.d.ts.map +1 -0
  38. package/dist/cloud/index.js +44 -0
  39. package/dist/cloud/index.js.map +1 -0
  40. package/dist/cloud/marketplace.d.ts +166 -0
  41. package/dist/cloud/marketplace.d.ts.map +1 -0
  42. package/dist/cloud/marketplace.js +159 -0
  43. package/dist/cloud/marketplace.js.map +1 -0
  44. package/dist/cloud/provisioning.d.ts +110 -0
  45. package/dist/cloud/provisioning.d.ts.map +1 -0
  46. package/dist/cloud/provisioning.js +148 -0
  47. package/dist/cloud/provisioning.js.map +1 -0
  48. package/dist/cloud/relay/endpoints.d.ts +62 -0
  49. package/dist/cloud/relay/endpoints.d.ts.map +1 -0
  50. package/dist/cloud/relay/endpoints.js +217 -0
  51. package/dist/cloud/relay/endpoints.js.map +1 -0
  52. package/dist/cloud/relay/health/index.d.ts +5 -0
  53. package/dist/cloud/relay/health/index.d.ts.map +1 -0
  54. package/dist/cloud/relay/health/index.js +9 -0
  55. package/dist/cloud/relay/health/index.js.map +1 -0
  56. package/dist/cloud/relay/stats/index.d.ts +5 -0
  57. package/dist/cloud/relay/stats/index.d.ts.map +1 -0
  58. package/dist/cloud/relay/stats/index.js +9 -0
  59. package/dist/cloud/relay/stats/index.js.map +1 -0
  60. package/dist/cloud/relay/sync/index.d.ts +5 -0
  61. package/dist/cloud/relay/sync/index.d.ts.map +1 -0
  62. package/dist/cloud/relay/sync/index.js +9 -0
  63. package/dist/cloud/relay/sync/index.js.map +1 -0
  64. package/dist/cloud/relay/usage/index.d.ts +5 -0
  65. package/dist/cloud/relay/usage/index.d.ts.map +1 -0
  66. package/dist/cloud/relay/usage/index.js +9 -0
  67. package/dist/cloud/relay/usage/index.js.map +1 -0
  68. package/dist/cloud/sponsors.d.ts +81 -0
  69. package/dist/cloud/sponsors.d.ts.map +1 -0
  70. package/dist/cloud/sponsors.js +130 -0
  71. package/dist/cloud/sponsors.js.map +1 -0
  72. package/dist/cloud/types.d.ts +169 -0
  73. package/dist/cloud/types.d.ts.map +1 -0
  74. package/dist/cloud/types.js +7 -0
  75. package/dist/cloud/types.js.map +1 -0
  76. package/dist/components/index.d.ts +43 -0
  77. package/dist/components/index.d.ts.map +1 -0
  78. package/dist/components/index.js +17 -0
  79. package/dist/components/index.js.map +1 -0
  80. package/dist/core/actors.d.ts +95 -0
  81. package/dist/core/actors.d.ts.map +1 -0
  82. package/dist/core/actors.js +158 -0
  83. package/dist/core/actors.js.map +1 -0
  84. package/dist/core/component/generator.d.ts +122 -0
  85. package/dist/core/component/generator.d.ts.map +1 -0
  86. package/dist/core/component/generator.js +307 -0
  87. package/dist/core/component/generator.js.map +1 -0
  88. package/dist/core/engine.d.ts +92 -0
  89. package/dist/core/engine.d.ts.map +1 -0
  90. package/dist/core/engine.js +199 -0
  91. package/dist/core/engine.js.map +1 -0
  92. package/dist/core/introspection.d.ts +141 -0
  93. package/dist/core/introspection.d.ts.map +1 -0
  94. package/dist/core/introspection.js +208 -0
  95. package/dist/core/introspection.js.map +1 -0
  96. package/dist/core/logic/generator.d.ts +76 -0
  97. package/dist/core/logic/generator.d.ts.map +1 -0
  98. package/dist/core/logic/generator.js +339 -0
  99. package/dist/core/logic/generator.js.map +1 -0
  100. package/dist/core/pluresdb/generator.d.ts +58 -0
  101. package/dist/core/pluresdb/generator.d.ts.map +1 -0
  102. package/dist/core/pluresdb/generator.js +162 -0
  103. package/dist/core/pluresdb/generator.js.map +1 -0
  104. package/dist/core/protocol.d.ts +121 -0
  105. package/dist/core/protocol.d.ts.map +1 -0
  106. package/dist/core/protocol.js +46 -0
  107. package/dist/core/protocol.js.map +1 -0
  108. package/dist/core/rules.d.ts +120 -0
  109. package/dist/core/rules.d.ts.map +1 -0
  110. package/dist/core/rules.js +81 -0
  111. package/dist/core/rules.js.map +1 -0
  112. package/dist/core/schema/loader.d.ts +47 -0
  113. package/dist/core/schema/loader.d.ts.map +1 -0
  114. package/dist/core/schema/loader.js +189 -0
  115. package/dist/core/schema/loader.js.map +1 -0
  116. package/dist/core/schema/normalize.d.ts +72 -0
  117. package/dist/core/schema/normalize.d.ts.map +1 -0
  118. package/dist/core/schema/normalize.js +190 -0
  119. package/dist/core/schema/normalize.js.map +1 -0
  120. package/dist/core/schema/types.d.ts +370 -0
  121. package/dist/core/schema/types.d.ts.map +1 -0
  122. package/dist/core/schema/types.js +161 -0
  123. package/dist/core/schema/types.js.map +1 -0
  124. package/dist/dsl/index.d.ts +152 -0
  125. package/dist/dsl/index.d.ts.map +1 -0
  126. package/dist/dsl/index.js +132 -0
  127. package/dist/dsl/index.js.map +1 -0
  128. package/dist/dsl.d.ts +124 -0
  129. package/dist/dsl.d.ts.map +1 -0
  130. package/dist/dsl.js +130 -0
  131. package/dist/dsl.js.map +1 -0
  132. package/dist/examples/advanced-todo/index.d.ts +55 -0
  133. package/dist/examples/advanced-todo/index.d.ts.map +1 -0
  134. package/dist/examples/advanced-todo/index.js +222 -0
  135. package/dist/examples/advanced-todo/index.js.map +1 -0
  136. package/dist/examples/auth-basic/index.d.ts +17 -0
  137. package/dist/examples/auth-basic/index.d.ts.map +1 -0
  138. package/dist/examples/auth-basic/index.js +122 -0
  139. package/dist/examples/auth-basic/index.js.map +1 -0
  140. package/dist/examples/cart/index.d.ts +19 -0
  141. package/dist/examples/cart/index.d.ts.map +1 -0
  142. package/dist/examples/cart/index.js +202 -0
  143. package/dist/examples/cart/index.js.map +1 -0
  144. package/dist/examples/hero-ecommerce/index.d.ts +39 -0
  145. package/dist/examples/hero-ecommerce/index.d.ts.map +1 -0
  146. package/dist/examples/hero-ecommerce/index.js +506 -0
  147. package/dist/examples/hero-ecommerce/index.js.map +1 -0
  148. package/dist/examples/svelte-counter/index.d.ts +31 -0
  149. package/dist/examples/svelte-counter/index.d.ts.map +1 -0
  150. package/dist/examples/svelte-counter/index.js +123 -0
  151. package/dist/examples/svelte-counter/index.js.map +1 -0
  152. package/dist/flows.d.ts +125 -0
  153. package/dist/flows.d.ts.map +1 -0
  154. package/dist/flows.js +160 -0
  155. package/dist/flows.js.map +1 -0
  156. package/dist/index.d.ts +67 -0
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +59 -0
  159. package/dist/index.js.map +1 -0
  160. package/dist/integrations/pluresdb.d.ts +56 -0
  161. package/dist/integrations/pluresdb.d.ts.map +1 -0
  162. package/dist/integrations/pluresdb.js +46 -0
  163. package/dist/integrations/pluresdb.js.map +1 -0
  164. package/dist/integrations/svelte.d.ts +306 -0
  165. package/dist/integrations/svelte.d.ts.map +1 -0
  166. package/dist/integrations/svelte.js +447 -0
  167. package/dist/integrations/svelte.js.map +1 -0
  168. package/dist/registry.d.ts +94 -0
  169. package/dist/registry.d.ts.map +1 -0
  170. package/dist/registry.js +181 -0
  171. package/dist/registry.js.map +1 -0
  172. package/dist/runtime/terminal-adapter.d.ts +105 -0
  173. package/dist/runtime/terminal-adapter.d.ts.map +1 -0
  174. package/dist/runtime/terminal-adapter.js +113 -0
  175. package/dist/runtime/terminal-adapter.js.map +1 -0
  176. package/dist/step.d.ts +34 -0
  177. package/dist/step.d.ts.map +1 -0
  178. package/dist/step.js +111 -0
  179. package/dist/step.js.map +1 -0
  180. package/dist/types.d.ts +63 -0
  181. package/dist/types.d.ts.map +1 -0
  182. package/dist/types.js +6 -0
  183. package/dist/types.js.map +1 -0
  184. package/docs/MONETIZATION.md +394 -0
  185. package/docs/TERMINAL_NODE.md +588 -0
  186. package/docs/guides/canvas.md +389 -0
  187. package/docs/guides/getting-started.md +347 -0
  188. package/docs/guides/history-state-pattern.md +618 -0
  189. package/docs/guides/orchestration.md +617 -0
  190. package/docs/guides/parallel-state-pattern.md +767 -0
  191. package/docs/guides/svelte-integration.md +691 -0
  192. package/package.json +96 -0
  193. package/src/__tests__/actors.test.ts +270 -0
  194. package/src/__tests__/billing.test.ts +175 -0
  195. package/src/__tests__/cloud.test.ts +247 -0
  196. package/src/__tests__/dsl.test.ts +154 -0
  197. package/src/__tests__/edge-cases.test.ts +475 -0
  198. package/src/__tests__/engine.test.ts +137 -0
  199. package/src/__tests__/generators.test.ts +270 -0
  200. package/src/__tests__/introspection.test.ts +321 -0
  201. package/src/__tests__/protocol.test.ts +40 -0
  202. package/src/__tests__/provisioning.test.ts +162 -0
  203. package/src/__tests__/schema.test.ts +241 -0
  204. package/src/__tests__/svelte-integration.test.ts +431 -0
  205. package/src/__tests__/terminal-node.test.ts +352 -0
  206. package/src/adapters/cli.ts +175 -0
  207. package/src/cli/commands/auth.ts +271 -0
  208. package/src/cli/commands/cloud.ts +281 -0
  209. package/src/cli/commands/generate.ts +225 -0
  210. package/src/cli/index.ts +190 -0
  211. package/src/cloud/README.md +383 -0
  212. package/src/cloud/auth.ts +245 -0
  213. package/src/cloud/billing.ts +336 -0
  214. package/src/cloud/client.ts +221 -0
  215. package/src/cloud/index.ts +121 -0
  216. package/src/cloud/marketplace.ts +303 -0
  217. package/src/cloud/provisioning.ts +254 -0
  218. package/src/cloud/relay/endpoints.ts +307 -0
  219. package/src/cloud/relay/health/function.json +17 -0
  220. package/src/cloud/relay/health/index.ts +10 -0
  221. package/src/cloud/relay/host.json +15 -0
  222. package/src/cloud/relay/local.settings.json +8 -0
  223. package/src/cloud/relay/stats/function.json +17 -0
  224. package/src/cloud/relay/stats/index.ts +10 -0
  225. package/src/cloud/relay/sync/function.json +17 -0
  226. package/src/cloud/relay/sync/index.ts +10 -0
  227. package/src/cloud/relay/usage/function.json +17 -0
  228. package/src/cloud/relay/usage/index.ts +10 -0
  229. package/src/cloud/sponsors.ts +213 -0
  230. package/src/cloud/types.ts +198 -0
  231. package/src/components/README.md +125 -0
  232. package/src/components/TerminalNode.svelte +457 -0
  233. package/src/components/index.ts +46 -0
  234. package/src/core/actors.ts +205 -0
  235. package/src/core/component/generator.ts +432 -0
  236. package/src/core/engine.ts +243 -0
  237. package/src/core/introspection.ts +329 -0
  238. package/src/core/logic/generator.ts +420 -0
  239. package/src/core/pluresdb/generator.ts +229 -0
  240. package/src/core/protocol.ts +132 -0
  241. package/src/core/rules.ts +167 -0
  242. package/src/core/schema/loader.ts +247 -0
  243. package/src/core/schema/normalize.ts +322 -0
  244. package/src/core/schema/types.ts +557 -0
  245. package/src/dsl/index.ts +218 -0
  246. package/src/dsl.ts +214 -0
  247. package/src/examples/advanced-todo/App.svelte +506 -0
  248. package/src/examples/advanced-todo/README.md +371 -0
  249. package/src/examples/advanced-todo/index.ts +309 -0
  250. package/src/examples/auth-basic/index.ts +163 -0
  251. package/src/examples/cart/index.ts +259 -0
  252. package/src/examples/hero-ecommerce/index.ts +657 -0
  253. package/src/examples/svelte-counter/index.ts +168 -0
  254. package/src/flows.ts +268 -0
  255. package/src/index.ts +154 -0
  256. package/src/integrations/pluresdb.ts +93 -0
  257. package/src/integrations/svelte.ts +617 -0
  258. package/src/registry.ts +223 -0
  259. package/src/runtime/terminal-adapter.ts +175 -0
  260. package/src/step.ts +151 -0
  261. package/src/types.ts +70 -0
  262. package/templates/basic-app/README.md +147 -0
  263. package/templates/fullstack-app/README.md +279 -0
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Actors System
3
+ *
4
+ * Actors are effectful units that:
5
+ * - Observe Praxis logic state
6
+ * - Perform side effects (network I/O, database operations, timers, etc.)
7
+ * - Feed new events/facts back into the engine
8
+ *
9
+ * Actors provide the bridge between pure logic and the effectful world.
10
+ */
11
+ /**
12
+ * Actor manager
13
+ *
14
+ * Manages the lifecycle of actors and coordinates their interaction with the engine.
15
+ */
16
+ export class ActorManager {
17
+ actors = new Map();
18
+ activeActors = new Set();
19
+ engine = null;
20
+ /**
21
+ * Register an actor
22
+ */
23
+ register(actor) {
24
+ if (this.actors.has(actor.id)) {
25
+ throw new Error(`Actor with id "${actor.id}" already registered`);
26
+ }
27
+ this.actors.set(actor.id, actor);
28
+ }
29
+ /**
30
+ * Unregister an actor
31
+ */
32
+ unregister(actorId) {
33
+ if (this.activeActors.has(actorId)) {
34
+ throw new Error(`Cannot unregister active actor "${actorId}". Stop it first.`);
35
+ }
36
+ this.actors.delete(actorId);
37
+ }
38
+ /**
39
+ * Attach the actor manager to an engine
40
+ */
41
+ attachEngine(engine) {
42
+ this.engine = engine;
43
+ }
44
+ /**
45
+ * Start an actor
46
+ */
47
+ async start(actorId) {
48
+ const actor = this.actors.get(actorId);
49
+ if (!actor) {
50
+ throw new Error(`Actor "${actorId}" not found`);
51
+ }
52
+ if (this.activeActors.has(actorId)) {
53
+ throw new Error(`Actor "${actorId}" is already started`);
54
+ }
55
+ if (!this.engine) {
56
+ throw new Error("Actor manager not attached to an engine");
57
+ }
58
+ this.activeActors.add(actorId);
59
+ if (actor.onStart) {
60
+ await actor.onStart(this.engine);
61
+ }
62
+ }
63
+ /**
64
+ * Stop an actor
65
+ */
66
+ async stop(actorId) {
67
+ const actor = this.actors.get(actorId);
68
+ if (!actor) {
69
+ throw new Error(`Actor "${actorId}" not found`);
70
+ }
71
+ if (!this.activeActors.has(actorId)) {
72
+ return; // Already stopped
73
+ }
74
+ this.activeActors.delete(actorId);
75
+ if (actor.onStop) {
76
+ await actor.onStop();
77
+ }
78
+ }
79
+ /**
80
+ * Start all registered actors
81
+ */
82
+ async startAll() {
83
+ const actorIds = Array.from(this.actors.keys());
84
+ for (const actorId of actorIds) {
85
+ if (!this.activeActors.has(actorId)) {
86
+ await this.start(actorId);
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Stop all active actors
92
+ */
93
+ async stopAll() {
94
+ const activeIds = Array.from(this.activeActors);
95
+ for (const actorId of activeIds) {
96
+ await this.stop(actorId);
97
+ }
98
+ }
99
+ /**
100
+ * Notify active actors of a state change
101
+ */
102
+ async notifyStateChange(state) {
103
+ if (!this.engine) {
104
+ return;
105
+ }
106
+ const promises = [];
107
+ for (const actorId of this.activeActors) {
108
+ const actor = this.actors.get(actorId);
109
+ if (actor?.onStateChange) {
110
+ const result = actor.onStateChange(state, this.engine);
111
+ if (result instanceof Promise) {
112
+ promises.push(result);
113
+ }
114
+ }
115
+ }
116
+ await Promise.all(promises);
117
+ }
118
+ /**
119
+ * Get all registered actor IDs
120
+ */
121
+ getActorIds() {
122
+ return Array.from(this.actors.keys());
123
+ }
124
+ /**
125
+ * Get all active actor IDs
126
+ */
127
+ getActiveActorIds() {
128
+ return Array.from(this.activeActors);
129
+ }
130
+ /**
131
+ * Check if an actor is active
132
+ */
133
+ isActive(actorId) {
134
+ return this.activeActors.has(actorId);
135
+ }
136
+ }
137
+ /**
138
+ * Helper to create a simple actor that dispatches events on a timer
139
+ */
140
+ export function createTimerActor(id, intervalMs, createEvent) {
141
+ let timerId = null;
142
+ return {
143
+ id,
144
+ description: `Timer actor (${intervalMs}ms) - ${id}`,
145
+ onStart: (engine) => {
146
+ timerId = setInterval(() => {
147
+ engine.step([createEvent()]);
148
+ }, intervalMs);
149
+ },
150
+ onStop: () => {
151
+ if (timerId) {
152
+ clearInterval(timerId);
153
+ timerId = null;
154
+ }
155
+ },
156
+ };
157
+ }
158
+ //# sourceMappingURL=actors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actors.js","sourceRoot":"","sources":["../../src/core/actors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Praxis Component Generator
3
+ *
4
+ * Generates Svelte components from schema definitions.
5
+ */
6
+ import type { ComponentDefinition, ModelDefinition } from '../schema/types.js';
7
+ /**
8
+ * Generator configuration
9
+ */
10
+ export interface GeneratorConfig {
11
+ /** Output directory */
12
+ outputDir: string;
13
+ /** Component framework */
14
+ framework: 'svelte' | 'react' | 'vue';
15
+ /** TypeScript support */
16
+ typescript: boolean;
17
+ /** Include tests */
18
+ includeTests: boolean;
19
+ /** Include documentation */
20
+ includeDocs: boolean;
21
+ }
22
+ /**
23
+ * Generation result
24
+ */
25
+ export interface GenerationResult {
26
+ /** Success status */
27
+ success: boolean;
28
+ /** Generated files */
29
+ files: GeneratedFile[];
30
+ /** Generation errors */
31
+ errors: GenerationError[];
32
+ }
33
+ /**
34
+ * Generated file
35
+ */
36
+ export interface GeneratedFile {
37
+ /** File path */
38
+ path: string;
39
+ /** File content */
40
+ content: string;
41
+ /** File type */
42
+ type: 'component' | 'test' | 'docs' | 'types';
43
+ }
44
+ /**
45
+ * Generation error
46
+ */
47
+ export interface GenerationError {
48
+ /** Error message */
49
+ message: string;
50
+ /** Component name */
51
+ component?: string;
52
+ /** Error code */
53
+ code?: string;
54
+ }
55
+ /**
56
+ * Component generator class
57
+ */
58
+ export declare class ComponentGenerator {
59
+ private config;
60
+ constructor(config: GeneratorConfig);
61
+ /**
62
+ * Generate component from definition
63
+ */
64
+ generateComponent(component: ComponentDefinition, model?: ModelDefinition): GenerationResult;
65
+ /**
66
+ * Generate component file
67
+ */
68
+ private generateComponentFile;
69
+ /**
70
+ * Generate Svelte component code
71
+ */
72
+ private generateSvelteComponent;
73
+ /**
74
+ * Generate component script
75
+ */
76
+ private generateScript;
77
+ /**
78
+ * Generate component template
79
+ */
80
+ private generateTemplate;
81
+ /**
82
+ * Generate form template
83
+ */
84
+ private generateFormTemplate;
85
+ /**
86
+ * Generate display template
87
+ */
88
+ private generateDisplayTemplate;
89
+ /**
90
+ * Generate list template
91
+ */
92
+ private generateListTemplate;
93
+ /**
94
+ * Generate navigation template
95
+ */
96
+ private generateNavigationTemplate;
97
+ /**
98
+ * Generate component styles
99
+ */
100
+ private generateStyles;
101
+ /**
102
+ * Generate types file
103
+ */
104
+ private generateTypesFile;
105
+ /**
106
+ * Map field type to TypeScript type
107
+ */
108
+ private mapFieldType;
109
+ /**
110
+ * Generate test file
111
+ */
112
+ private generateTestFile;
113
+ /**
114
+ * Generate documentation file
115
+ */
116
+ private generateDocsFile;
117
+ }
118
+ /**
119
+ * Create a component generator with default configuration
120
+ */
121
+ export declare function createComponentGenerator(outputDir: string, options?: Partial<GeneratorConfig>): ComponentGenerator;
122
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/core/component/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC,yBAAyB;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,wBAAwB;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAInC;;OAEG;IACH,iBAAiB,CACf,SAAS,EAAE,mBAAmB,EAC9B,KAAK,CAAC,EAAE,eAAe,GACtB,gBAAgB;IAwCnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAIlC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA6CzB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACjC,kBAAkB,CAWpB"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Praxis Component Generator
3
+ *
4
+ * Generates Svelte components from schema definitions.
5
+ */
6
+ /**
7
+ * Component generator class
8
+ */
9
+ export class ComponentGenerator {
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * Generate component from definition
16
+ */
17
+ generateComponent(component, model) {
18
+ const files = [];
19
+ const errors = [];
20
+ try {
21
+ // Generate main component file
22
+ const componentFile = this.generateComponentFile(component, model);
23
+ files.push(componentFile);
24
+ // Generate TypeScript types if enabled
25
+ if (this.config.typescript) {
26
+ const typesFile = this.generateTypesFile(component, model);
27
+ files.push(typesFile);
28
+ }
29
+ // Generate tests if enabled
30
+ if (this.config.includeTests) {
31
+ const testFile = this.generateTestFile(component);
32
+ files.push(testFile);
33
+ }
34
+ // Generate docs if enabled
35
+ if (this.config.includeDocs) {
36
+ const docsFile = this.generateDocsFile(component);
37
+ files.push(docsFile);
38
+ }
39
+ }
40
+ catch (error) {
41
+ errors.push({
42
+ message: error instanceof Error ? error.message : 'Unknown error',
43
+ component: component.name,
44
+ });
45
+ }
46
+ return {
47
+ success: errors.length === 0,
48
+ files,
49
+ errors,
50
+ };
51
+ }
52
+ /**
53
+ * Generate component file
54
+ */
55
+ generateComponentFile(component, model) {
56
+ // Note: ext could be used for file naming in future versions
57
+ // const ext = this.config.typescript ? 'ts' : 'js';
58
+ const content = this.generateSvelteComponent(component, model);
59
+ return {
60
+ path: `${this.config.outputDir}/${component.name}.svelte`,
61
+ content,
62
+ type: 'component',
63
+ };
64
+ }
65
+ /**
66
+ * Generate Svelte component code
67
+ */
68
+ generateSvelteComponent(component, model) {
69
+ const script = this.generateScript(component, model);
70
+ const template = this.generateTemplate(component, model);
71
+ const styles = this.generateStyles(component);
72
+ return `<script${this.config.typescript ? ' lang="ts"' : ''}>
73
+ ${script}
74
+ </script>
75
+
76
+ ${template}
77
+
78
+ ${styles ? `<style>\n${styles}\n</style>` : ''}`;
79
+ }
80
+ /**
81
+ * Generate component script
82
+ */
83
+ generateScript(component, _model // Prefix with _ to indicate intentionally unused
84
+ ) {
85
+ const lines = [];
86
+ // Import statements
87
+ lines.push(` import { createPraxisStore } from '@plures/praxis/svelte';`);
88
+ lines.push('');
89
+ // Props
90
+ if (component.props && component.props.length > 0) {
91
+ component.props.forEach((prop) => {
92
+ const typeAnnotation = this.config.typescript ? `: ${prop.type}` : '';
93
+ const defaultValue = prop.default !== undefined ? ` = ${JSON.stringify(prop.default)}` : '';
94
+ lines.push(` export let ${prop.name}${typeAnnotation}${defaultValue};`);
95
+ });
96
+ lines.push('');
97
+ }
98
+ // Component logic placeholder
99
+ lines.push(' // Component logic will be generated based on schema');
100
+ lines.push(' // TODO: Implement component behavior');
101
+ return lines.join('\n');
102
+ }
103
+ /**
104
+ * Generate component template
105
+ */
106
+ generateTemplate(component, model) {
107
+ switch (component.type) {
108
+ case 'form':
109
+ return this.generateFormTemplate(component, model);
110
+ case 'display':
111
+ return this.generateDisplayTemplate(component, model);
112
+ case 'list':
113
+ return this.generateListTemplate(component, model);
114
+ case 'navigation':
115
+ return this.generateNavigationTemplate(component);
116
+ default:
117
+ return `<div class="${component.name.toLowerCase()}">\n <!-- ${component.description || component.name} -->\n <p>Component: ${component.name}</p>\n</div>`;
118
+ }
119
+ }
120
+ /**
121
+ * Generate form template
122
+ */
123
+ generateFormTemplate(component, model) {
124
+ const fields = model?.fields || [];
125
+ const formFields = fields
126
+ .map((field) => {
127
+ return ` <label>\n ${field.name}\n <input type="text" bind:value={data.${field.name}} />\n </label>`;
128
+ })
129
+ .join('\n');
130
+ return `<form class="${component.name.toLowerCase()}">\n${formFields}\n <button type="submit">Submit</button>\n</form>`;
131
+ }
132
+ /**
133
+ * Generate display template
134
+ */
135
+ generateDisplayTemplate(component, model) {
136
+ const fields = model?.fields || [];
137
+ const displayFields = fields
138
+ .map((field) => {
139
+ return ` <div class="field">\n <strong>${field.name}:</strong> {data.${field.name}}\n </div>`;
140
+ })
141
+ .join('\n');
142
+ return `<div class="${component.name.toLowerCase()}">\n${displayFields}\n</div>`;
143
+ }
144
+ /**
145
+ * Generate list template
146
+ */
147
+ generateListTemplate(component, _model // Prefix with _ to indicate intentionally unused
148
+ ) {
149
+ return `<div class="${component.name.toLowerCase()}">\n {#each items as item}\n <div class="item">{item.name}</div>\n {/each}\n</div>`;
150
+ }
151
+ /**
152
+ * Generate navigation template
153
+ */
154
+ generateNavigationTemplate(component) {
155
+ return `<nav class="${component.name.toLowerCase()}">\n <ul>\n <li><a href="/">Home</a></li>\n <li><a href="/about">About</a></li>\n </ul>\n</nav>`;
156
+ }
157
+ /**
158
+ * Generate component styles
159
+ */
160
+ generateStyles(component) {
161
+ if (!component.styling) {
162
+ return '';
163
+ }
164
+ const lines = [];
165
+ const styles = component.styling.styles || {};
166
+ Object.entries(styles).forEach(([key, value]) => {
167
+ lines.push(` ${key}: ${value};`);
168
+ });
169
+ return lines.length > 0 ? lines.join('\n') : '';
170
+ }
171
+ /**
172
+ * Generate types file
173
+ */
174
+ generateTypesFile(component, model) {
175
+ const lines = [];
176
+ // Component props type
177
+ if (component.props && component.props.length > 0) {
178
+ lines.push(`export interface ${component.name}Props {`);
179
+ component.props.forEach((prop) => {
180
+ const optional = prop.required ? '' : '?';
181
+ lines.push(` ${prop.name}${optional}: ${prop.type};`);
182
+ });
183
+ lines.push('}');
184
+ lines.push('');
185
+ }
186
+ // Model type if available
187
+ if (model) {
188
+ lines.push(`export interface ${model.name} {`);
189
+ model.fields.forEach((field) => {
190
+ const optional = field.optional ? '?' : '';
191
+ lines.push(` ${field.name}${optional}: ${this.mapFieldType(field.type)};`);
192
+ });
193
+ lines.push('}');
194
+ }
195
+ return {
196
+ path: `${this.config.outputDir}/${component.name}.types.ts`,
197
+ content: lines.join('\n'),
198
+ type: 'types',
199
+ };
200
+ }
201
+ /**
202
+ * Map field type to TypeScript type
203
+ */
204
+ mapFieldType(type) {
205
+ if (typeof type === 'string') {
206
+ switch (type) {
207
+ case 'string':
208
+ return 'string';
209
+ case 'number':
210
+ return 'number';
211
+ case 'boolean':
212
+ return 'boolean';
213
+ case 'date':
214
+ return 'Date';
215
+ case 'array':
216
+ return 'unknown[]';
217
+ case 'object':
218
+ return 'Record<string, unknown>';
219
+ default:
220
+ return 'unknown';
221
+ }
222
+ }
223
+ return 'unknown';
224
+ }
225
+ /**
226
+ * Generate test file
227
+ */
228
+ generateTestFile(component) {
229
+ const content = `import { describe, it, expect } from 'vitest';
230
+ import { render } from '@testing-library/svelte';
231
+ import ${component.name} from './${component.name}.svelte';
232
+
233
+ describe('${component.name}', () => {
234
+ it('renders correctly', () => {
235
+ const { container } = render(${component.name});
236
+ expect(container).toBeTruthy();
237
+ });
238
+
239
+ // TODO: Add more tests based on component behavior
240
+ });
241
+ `;
242
+ return {
243
+ path: `${this.config.outputDir}/${component.name}.test.ts`,
244
+ content,
245
+ type: 'test',
246
+ };
247
+ }
248
+ /**
249
+ * Generate documentation file
250
+ */
251
+ generateDocsFile(component) {
252
+ const lines = [];
253
+ lines.push(`# ${component.name}`);
254
+ lines.push('');
255
+ if (component.description) {
256
+ lines.push(component.description);
257
+ lines.push('');
258
+ }
259
+ lines.push('## Props');
260
+ lines.push('');
261
+ if (component.props && component.props.length > 0) {
262
+ component.props.forEach((prop) => {
263
+ lines.push(`- \`${prop.name}\`: ${prop.type}${prop.required ? ' (required)' : ' (optional)'}`);
264
+ if (prop.description) {
265
+ lines.push(` - ${prop.description}`);
266
+ }
267
+ });
268
+ }
269
+ else {
270
+ lines.push('No props defined.');
271
+ }
272
+ lines.push('');
273
+ lines.push('## Events');
274
+ lines.push('');
275
+ if (component.events && component.events.length > 0) {
276
+ component.events.forEach((event) => {
277
+ lines.push(`- \`${event.name}\`: ${event.payload || 'void'}`);
278
+ if (event.description) {
279
+ lines.push(` - ${event.description}`);
280
+ }
281
+ });
282
+ }
283
+ else {
284
+ lines.push('No events defined.');
285
+ }
286
+ return {
287
+ path: `${this.config.outputDir}/${component.name}.md`,
288
+ content: lines.join('\n'),
289
+ type: 'docs',
290
+ };
291
+ }
292
+ }
293
+ /**
294
+ * Create a component generator with default configuration
295
+ */
296
+ export function createComponentGenerator(outputDir, options) {
297
+ const config = {
298
+ outputDir,
299
+ framework: 'svelte',
300
+ typescript: true,
301
+ includeTests: false,
302
+ includeDocs: false,
303
+ ...options,
304
+ };
305
+ return new ComponentGenerator(config);
306
+ }
307
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/core/component/generator.ts"],"names":[],"mappings":"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"}