@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
package/dist/dsl.js ADDED
@@ -0,0 +1,130 @@
1
+ /**
2
+ * DSL for defining rules and constraints in Praxis.
3
+ * Rules are condition-action pairs that fire when conditions are met.
4
+ * Constraints are invariants that must hold true in valid states.
5
+ */
6
+ /**
7
+ * DSL builder for creating rules with a fluent interface.
8
+ */
9
+ export class RuleBuilder {
10
+ rule = {};
11
+ /**
12
+ * Set the rule ID.
13
+ */
14
+ id(id) {
15
+ this.rule.id = id;
16
+ return this;
17
+ }
18
+ /**
19
+ * Set the rule description.
20
+ */
21
+ describe(description) {
22
+ this.rule.description = description;
23
+ return this;
24
+ }
25
+ /**
26
+ * Set the rule priority.
27
+ */
28
+ priority(priority) {
29
+ this.rule.priority = priority;
30
+ return this;
31
+ }
32
+ /**
33
+ * Set the event type filter.
34
+ */
35
+ on(eventType) {
36
+ this.rule.eventType = eventType;
37
+ return this;
38
+ }
39
+ /**
40
+ * Set the condition for when the rule should fire.
41
+ */
42
+ when(condition) {
43
+ this.rule.when = condition;
44
+ return this;
45
+ }
46
+ /**
47
+ * Set the action to execute when the rule fires.
48
+ */
49
+ then(action) {
50
+ this.rule.then = action;
51
+ return this;
52
+ }
53
+ /**
54
+ * Build the final rule.
55
+ */
56
+ build() {
57
+ if (!this.rule.id) {
58
+ throw new Error('Rule must have an id');
59
+ }
60
+ if (!this.rule.when) {
61
+ throw new Error('Rule must have a when condition');
62
+ }
63
+ if (!this.rule.then) {
64
+ throw new Error('Rule must have a then action');
65
+ }
66
+ return this.rule;
67
+ }
68
+ }
69
+ /**
70
+ * DSL builder for creating constraints with a fluent interface.
71
+ */
72
+ export class ConstraintBuilder {
73
+ constraint = {};
74
+ /**
75
+ * Set the constraint ID.
76
+ */
77
+ id(id) {
78
+ this.constraint.id = id;
79
+ return this;
80
+ }
81
+ /**
82
+ * Set the constraint description.
83
+ */
84
+ describe(description) {
85
+ this.constraint.description = description;
86
+ return this;
87
+ }
88
+ /**
89
+ * Set the constraint check function.
90
+ */
91
+ check(check) {
92
+ this.constraint.check = check;
93
+ return this;
94
+ }
95
+ /**
96
+ * Set the error message for constraint violations.
97
+ */
98
+ message(errorMessage) {
99
+ this.constraint.errorMessage = errorMessage;
100
+ return this;
101
+ }
102
+ /**
103
+ * Build the final constraint.
104
+ */
105
+ build() {
106
+ if (!this.constraint.id) {
107
+ throw new Error('Constraint must have an id');
108
+ }
109
+ if (!this.constraint.check) {
110
+ throw new Error('Constraint must have a check function');
111
+ }
112
+ return this.constraint;
113
+ }
114
+ }
115
+ /**
116
+ * Factory functions for creating rules and constraints using the DSL.
117
+ */
118
+ /**
119
+ * Create a new rule using the fluent builder API.
120
+ */
121
+ export function rule() {
122
+ return new RuleBuilder();
123
+ }
124
+ /**
125
+ * Create a new constraint using the fluent builder API.
126
+ */
127
+ export function constraint() {
128
+ return new ConstraintBuilder();
129
+ }
130
+ //# sourceMappingURL=dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../src/dsl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Advanced Svelte 5 Integration Example
3
+ *
4
+ * Demonstrates the new Svelte 5 runes support with history state pattern.
5
+ * This example shows a todo app with undo/redo and time-travel debugging.
6
+ */
7
+ interface TodoItem {
8
+ id: string;
9
+ text: string;
10
+ completed: boolean;
11
+ createdAt: number;
12
+ }
13
+ interface TodoContext {
14
+ todos: TodoItem[];
15
+ filter: 'all' | 'active' | 'completed';
16
+ nextId: number;
17
+ }
18
+ declare const TodoAdded: import("../../index.js").FactDefinition<"TodoAdded", {
19
+ id: string;
20
+ text: string;
21
+ }>;
22
+ declare const TodoToggled: import("../../index.js").FactDefinition<"TodoToggled", {
23
+ id: string;
24
+ }>;
25
+ declare const TodoRemoved: import("../../index.js").FactDefinition<"TodoRemoved", {
26
+ id: string;
27
+ }>;
28
+ declare const FilterChanged: import("../../index.js").FactDefinition<"FilterChanged", {
29
+ filter: string;
30
+ }>;
31
+ declare const AllCompleted: import("../../index.js").FactDefinition<"AllCompleted", {}>;
32
+ declare const CompletedCleared: import("../../index.js").FactDefinition<"CompletedCleared", {}>;
33
+ declare const AddTodo: import("../../index.js").EventDefinition<"ADD_TODO", {
34
+ text: string;
35
+ }>;
36
+ declare const ToggleTodo: import("../../index.js").EventDefinition<"TOGGLE_TODO", {
37
+ id: string;
38
+ }>;
39
+ declare const RemoveTodo: import("../../index.js").EventDefinition<"REMOVE_TODO", {
40
+ id: string;
41
+ }>;
42
+ declare const SetFilter: import("../../index.js").EventDefinition<"SET_FILTER", {
43
+ filter: "all" | "active" | "completed";
44
+ }>;
45
+ declare const CompleteAll: import("../../index.js").EventDefinition<"COMPLETE_ALL", {}>;
46
+ declare const ClearCompleted: import("../../index.js").EventDefinition<"CLEAR_COMPLETED", {}>;
47
+ export declare function createTodoEngine(): import("../../index.js").LogicEngine<TodoContext>;
48
+ export declare function getFilteredTodos(todos: TodoItem[], filter: string): TodoItem[];
49
+ export declare function getStats(todos: TodoItem[]): {
50
+ total: number;
51
+ active: number;
52
+ completed: number;
53
+ };
54
+ export { type TodoItem, type TodoContext, AddTodo, ToggleTodo, RemoveTodo, SetFilter, CompleteAll, ClearCompleted, TodoAdded, TodoToggled, TodoRemoved, FilterChanged, AllCompleted, CompletedCleared, };
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/examples/advanced-todo/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,QAAA,MAAM,SAAS;QAAiC,MAAM;UAAQ,MAAM;EAAgB,CAAC;AACrF,QAAA,MAAM,WAAW;QAAmC,MAAM;EAAkB,CAAC;AAC7E,QAAA,MAAM,WAAW;QAAmC,MAAM;EAAkB,CAAC;AAC7E,QAAA,MAAM,aAAa;YAAyC,MAAM;EAAoB,CAAC;AACvF,QAAA,MAAM,YAAY,6DAAiD,CAAC;AACpE,QAAA,MAAM,gBAAgB,iEAAyD,CAAC;AAMhF,QAAA,MAAM,OAAO;UAAmC,MAAM;EAAe,CAAC;AACtE,QAAA,MAAM,UAAU;QAAoC,MAAM;EAAkB,CAAC;AAC7E,QAAA,MAAM,UAAU;QAAoC,MAAM;EAAkB,CAAC;AAC7E,QAAA,MAAM,SAAS;YAAuC,KAAK,GAAG,QAAQ,GAAG,WAAW;EAEnF,CAAC;AACF,QAAA,MAAM,WAAW,8DAAkD,CAAC;AACpE,QAAA,MAAM,cAAc,iEAAwD,CAAC;AA4H7E,wBAAgB,gBAAgB,sDAkB/B;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAS9E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;;;;EAMzC;AAsED,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEhB,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EAEd,SAAS,EACT,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Advanced Svelte 5 Integration Example
3
+ *
4
+ * Demonstrates the new Svelte 5 runes support with history state pattern.
5
+ * This example shows a todo app with undo/redo and time-travel debugging.
6
+ */
7
+ import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule, findEvent, } from '../../index.js';
8
+ // ============================================================================
9
+ // Facts
10
+ // ============================================================================
11
+ const TodoAdded = defineFact('TodoAdded');
12
+ const TodoToggled = defineFact('TodoToggled');
13
+ const TodoRemoved = defineFact('TodoRemoved');
14
+ const FilterChanged = defineFact('FilterChanged');
15
+ const AllCompleted = defineFact('AllCompleted');
16
+ const CompletedCleared = defineFact('CompletedCleared');
17
+ // ============================================================================
18
+ // Events
19
+ // ============================================================================
20
+ const AddTodo = defineEvent('ADD_TODO');
21
+ const ToggleTodo = defineEvent('TOGGLE_TODO');
22
+ const RemoveTodo = defineEvent('REMOVE_TODO');
23
+ const SetFilter = defineEvent('SET_FILTER');
24
+ const CompleteAll = defineEvent('COMPLETE_ALL');
25
+ const ClearCompleted = defineEvent('CLEAR_COMPLETED');
26
+ // ============================================================================
27
+ // Rules
28
+ // ============================================================================
29
+ const addTodoRule = defineRule({
30
+ id: 'todo.add',
31
+ description: 'Add a new todo item',
32
+ impl: (state, events) => {
33
+ const event = findEvent(events, AddTodo);
34
+ if (!event || !event.payload.text.trim()) {
35
+ return [];
36
+ }
37
+ const id = `todo-${state.context.nextId}`;
38
+ const todo = {
39
+ id,
40
+ text: event.payload.text.trim(),
41
+ completed: false,
42
+ createdAt: Date.now(),
43
+ };
44
+ state.context.todos.push(todo);
45
+ state.context.nextId++;
46
+ return [TodoAdded.create({ id, text: todo.text })];
47
+ },
48
+ });
49
+ const toggleTodoRule = defineRule({
50
+ id: 'todo.toggle',
51
+ description: 'Toggle todo completion status',
52
+ impl: (state, events) => {
53
+ const event = findEvent(events, ToggleTodo);
54
+ if (!event) {
55
+ return [];
56
+ }
57
+ const todo = state.context.todos.find((t) => t.id === event.payload.id);
58
+ if (todo) {
59
+ todo.completed = !todo.completed;
60
+ return [TodoToggled.create({ id: todo.id })];
61
+ }
62
+ return [];
63
+ },
64
+ });
65
+ const removeTodoRule = defineRule({
66
+ id: 'todo.remove',
67
+ description: 'Remove a todo item',
68
+ impl: (state, events) => {
69
+ const event = findEvent(events, RemoveTodo);
70
+ if (!event) {
71
+ return [];
72
+ }
73
+ const index = state.context.todos.findIndex((t) => t.id === event.payload.id);
74
+ if (index !== -1) {
75
+ state.context.todos.splice(index, 1);
76
+ return [TodoRemoved.create({ id: event.payload.id })];
77
+ }
78
+ return [];
79
+ },
80
+ });
81
+ const setFilterRule = defineRule({
82
+ id: 'todo.setFilter',
83
+ description: 'Change the filter',
84
+ impl: (state, events) => {
85
+ const event = findEvent(events, SetFilter);
86
+ if (!event) {
87
+ return [];
88
+ }
89
+ state.context.filter = event.payload.filter;
90
+ return [FilterChanged.create({ filter: event.payload.filter })];
91
+ },
92
+ });
93
+ const completeAllRule = defineRule({
94
+ id: 'todo.completeAll',
95
+ description: 'Mark all todos as completed',
96
+ impl: (state, events) => {
97
+ const event = findEvent(events, CompleteAll);
98
+ if (!event) {
99
+ return [];
100
+ }
101
+ state.context.todos.forEach((todo) => {
102
+ todo.completed = true;
103
+ });
104
+ return [AllCompleted.create({})];
105
+ },
106
+ });
107
+ const clearCompletedRule = defineRule({
108
+ id: 'todo.clearCompleted',
109
+ description: 'Remove all completed todos',
110
+ impl: (state, events) => {
111
+ const event = findEvent(events, ClearCompleted);
112
+ if (!event) {
113
+ return [];
114
+ }
115
+ const beforeCount = state.context.todos.length;
116
+ state.context.todos = state.context.todos.filter((t) => !t.completed);
117
+ const afterCount = state.context.todos.length;
118
+ if (beforeCount !== afterCount) {
119
+ return [CompletedCleared.create({})];
120
+ }
121
+ return [];
122
+ },
123
+ });
124
+ // ============================================================================
125
+ // Engine Factory
126
+ // ============================================================================
127
+ export function createTodoEngine() {
128
+ const registry = new PraxisRegistry();
129
+ registry.registerRule(addTodoRule);
130
+ registry.registerRule(toggleTodoRule);
131
+ registry.registerRule(removeTodoRule);
132
+ registry.registerRule(setFilterRule);
133
+ registry.registerRule(completeAllRule);
134
+ registry.registerRule(clearCompletedRule);
135
+ return createPraxisEngine({
136
+ initialContext: {
137
+ todos: [],
138
+ filter: 'all',
139
+ nextId: 1,
140
+ },
141
+ registry,
142
+ });
143
+ }
144
+ // ============================================================================
145
+ // Helper Functions for Svelte
146
+ // ============================================================================
147
+ export function getFilteredTodos(todos, filter) {
148
+ switch (filter) {
149
+ case 'active':
150
+ return todos.filter((t) => !t.completed);
151
+ case 'completed':
152
+ return todos.filter((t) => t.completed);
153
+ default:
154
+ return todos;
155
+ }
156
+ }
157
+ export function getStats(todos) {
158
+ const total = todos.length;
159
+ const active = todos.filter((t) => !t.completed).length;
160
+ const completed = todos.filter((t) => t.completed).length;
161
+ return { total, active, completed };
162
+ }
163
+ // ============================================================================
164
+ // Example Usage (non-Svelte demonstration)
165
+ // ============================================================================
166
+ function runExample() {
167
+ console.log('=== Advanced Todo Example ===\n');
168
+ const engine = createTodoEngine();
169
+ // Add some todos
170
+ console.log('1. Adding todos:');
171
+ engine.step([AddTodo.create({ text: 'Learn Praxis' })]);
172
+ engine.step([AddTodo.create({ text: 'Build awesome app' })]);
173
+ engine.step([AddTodo.create({ text: 'Deploy to production' })]);
174
+ const context1 = engine.getContext();
175
+ console.log(` Total todos: ${context1.todos.length}`);
176
+ context1.todos.forEach((todo) => {
177
+ console.log(` - ${todo.text}`);
178
+ });
179
+ console.log();
180
+ // Toggle a todo
181
+ console.log('2. Completing first todo:');
182
+ const firstId = context1.todos[0].id;
183
+ engine.step([ToggleTodo.create({ id: firstId })]);
184
+ const context2 = engine.getContext();
185
+ const stats = getStats(context2.todos);
186
+ console.log(` Active: ${stats.active}, Completed: ${stats.completed}`);
187
+ console.log();
188
+ // Change filter
189
+ console.log('3. Filtering to active todos:');
190
+ engine.step([SetFilter.create({ filter: 'active' })]);
191
+ const context3 = engine.getContext();
192
+ const filtered = getFilteredTodos(context3.todos, context3.filter);
193
+ console.log(` Filter: ${context3.filter}`);
194
+ console.log(` Showing ${filtered.length} todos:`);
195
+ filtered.forEach((todo) => {
196
+ console.log(` - ${todo.text}`);
197
+ });
198
+ console.log();
199
+ // Complete all
200
+ console.log('4. Completing all todos:');
201
+ engine.step([CompleteAll.create({})]);
202
+ const context4 = engine.getContext();
203
+ const stats4 = getStats(context4.todos);
204
+ console.log(` All completed: ${stats4.completed}/${stats4.total}`);
205
+ console.log();
206
+ // Clear completed
207
+ console.log('5. Clearing completed todos:');
208
+ engine.step([ClearCompleted.create({})]);
209
+ const context5 = engine.getContext();
210
+ console.log(` Remaining todos: ${context5.todos.length}`);
211
+ console.log();
212
+ }
213
+ // Run example if executed directly
214
+ if (import.meta.url === `file://${process.argv[1]}`) {
215
+ runExample();
216
+ }
217
+ export {
218
+ // Events
219
+ AddTodo, ToggleTodo, RemoveTodo, SetFilter, CompleteAll, ClearCompleted,
220
+ // Facts
221
+ TodoAdded, TodoToggled, TodoRemoved, FilterChanged, AllCompleted, CompletedCleared, };
222
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/examples/advanced-todo/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Auth Basic Example
3
+ *
4
+ * Demonstrates basic authentication logic with login/logout using Praxis.
5
+ * Shows how to define facts, events, rules, and constraints.
6
+ */
7
+ interface AuthContext {
8
+ currentUser: string | null;
9
+ sessions: Array<{
10
+ userId: string;
11
+ timestamp: number;
12
+ }>;
13
+ }
14
+ declare function createAuthEngine(): import("../../index.js").LogicEngine<AuthContext>;
15
+ declare function runExample(): void;
16
+ export { createAuthEngine, runExample };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/examples/auth-basic/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,UAAU,WAAW;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAuFD,iBAAS,gBAAgB,sDAgBxB;AAGD,iBAAS,UAAU,SA2BlB;AAOD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Auth Basic Example
3
+ *
4
+ * Demonstrates basic authentication logic with login/logout using Praxis.
5
+ * Shows how to define facts, events, rules, and constraints.
6
+ */
7
+ import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule, defineConstraint, findEvent, filterFacts, } from "../../index.js";
8
+ // Define facts
9
+ const UserLoggedIn = defineFact("UserLoggedIn");
10
+ const UserLoggedOut = defineFact("UserLoggedOut");
11
+ // Define events
12
+ const Login = defineEvent("LOGIN");
13
+ const Logout = defineEvent("LOGOUT");
14
+ // Define rules
15
+ const loginRule = defineRule({
16
+ id: "auth.login",
17
+ description: "Process login event and create UserLoggedIn fact",
18
+ impl: (_state, events) => {
19
+ const loginEvent = findEvent(events, Login);
20
+ if (!loginEvent) {
21
+ return [];
22
+ }
23
+ // In real app, validate password here
24
+ const userId = loginEvent.payload.username;
25
+ return [UserLoggedIn.create({ userId, timestamp: Date.now() })];
26
+ },
27
+ });
28
+ const logoutRule = defineRule({
29
+ id: "auth.logout",
30
+ description: "Process logout event and create UserLoggedOut fact",
31
+ impl: (state, events) => {
32
+ const logoutEvent = findEvent(events, Logout);
33
+ if (!logoutEvent || !state.context.currentUser) {
34
+ return [];
35
+ }
36
+ return [
37
+ UserLoggedOut.create({
38
+ userId: state.context.currentUser,
39
+ timestamp: Date.now(),
40
+ }),
41
+ ];
42
+ },
43
+ });
44
+ const updateContextRule = defineRule({
45
+ id: "auth.updateContext",
46
+ description: "Update context based on login/logout facts",
47
+ impl: (state, _events) => {
48
+ // This rule updates context based on facts (side effect on context)
49
+ const loginFacts = filterFacts(state.facts, UserLoggedIn);
50
+ const logoutFacts = filterFacts(state.facts, UserLoggedOut);
51
+ if (loginFacts.length > 0) {
52
+ const latestLogin = loginFacts[loginFacts.length - 1];
53
+ state.context.currentUser = latestLogin.payload.userId;
54
+ state.context.sessions.push({
55
+ userId: latestLogin.payload.userId,
56
+ timestamp: latestLogin.payload.timestamp,
57
+ });
58
+ }
59
+ if (logoutFacts.length > 0) {
60
+ state.context.currentUser = null;
61
+ }
62
+ return [];
63
+ },
64
+ });
65
+ // Define constraints
66
+ const singleSessionConstraint = defineConstraint({
67
+ id: "auth.singleSession",
68
+ description: "Only one user can be logged in at a time",
69
+ impl: (state) => {
70
+ const loginFacts = filterFacts(state.facts, UserLoggedIn);
71
+ const logoutFacts = filterFacts(state.facts, UserLoggedOut);
72
+ const activeLogins = loginFacts.length - logoutFacts.length;
73
+ return activeLogins <= 1 || `Multiple active sessions detected: ${activeLogins}`;
74
+ },
75
+ });
76
+ // Create and configure the engine
77
+ function createAuthEngine() {
78
+ const registry = new PraxisRegistry();
79
+ registry.registerRule(loginRule);
80
+ registry.registerRule(logoutRule);
81
+ registry.registerRule(updateContextRule);
82
+ registry.registerConstraint(singleSessionConstraint);
83
+ const engine = createPraxisEngine({
84
+ initialContext: {
85
+ currentUser: null,
86
+ sessions: [],
87
+ },
88
+ registry,
89
+ });
90
+ return engine;
91
+ }
92
+ // Example usage
93
+ function runExample() {
94
+ console.log("=== Auth Basic Example ===\n");
95
+ const engine = createAuthEngine();
96
+ // Login
97
+ console.log("1. User logs in:");
98
+ let result = engine.step([Login.create({ username: "alice", password: "secret123" })]);
99
+ console.log(" Context:", engine.getContext());
100
+ console.log(" Facts:", result.state.facts);
101
+ console.log(" Diagnostics:", result.diagnostics);
102
+ console.log();
103
+ // Try to login again (should violate constraint)
104
+ console.log("2. Another user tries to log in:");
105
+ result = engine.step([Login.create({ username: "bob", password: "secret456" })]);
106
+ console.log(" Context:", engine.getContext());
107
+ console.log(" Diagnostics:", result.diagnostics);
108
+ console.log();
109
+ // Logout
110
+ console.log("3. User logs out:");
111
+ result = engine.step([Logout.create({})]);
112
+ console.log(" Context:", engine.getContext());
113
+ console.log(" Facts (last 3):", result.state.facts.slice(-3));
114
+ console.log(" Diagnostics:", result.diagnostics);
115
+ console.log();
116
+ }
117
+ // Run example if executed directly
118
+ if (import.meta.url === `file://${process.argv[1]}`) {
119
+ runExample();
120
+ }
121
+ export { createAuthEngine, runExample };
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/examples/auth-basic/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Cart Example
3
+ *
4
+ * Demonstrates shopping cart logic with flows and derived state.
5
+ * Shows how to manage complex state with multiple rules and constraints.
6
+ */
7
+ interface CartContext {
8
+ items: Array<{
9
+ productId: string;
10
+ quantity: number;
11
+ price: number;
12
+ }>;
13
+ total: number;
14
+ discountApplied: boolean;
15
+ }
16
+ declare function createCartEngine(): import("../../index.js").LogicEngine<CartContext>;
17
+ declare function runExample(): void;
18
+ export { createCartEngine, runExample };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/examples/cart/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AA6KD,iBAAS,gBAAgB,sDAcxB;AAGD,iBAAS,UAAU,SAqClB;AAOD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}