@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 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/core/pluresdb/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Core Praxis Protocol
3
+ *
4
+ * Language-neutral, JSON-friendly protocol that forms the foundation of Praxis.
5
+ * This protocol is designed to be stable and portable across languages (TypeScript, C#, PowerShell, etc.)
6
+ *
7
+ * The protocol defines the conceptual core of the engine:
8
+ * - Pure, deterministic, data in → data out
9
+ * - No side effects, no global state
10
+ * - All higher-level TypeScript APIs are built on top of this protocol
11
+ *
12
+ * ## Protocol Versioning
13
+ *
14
+ * The Praxis protocol follows semantic versioning (MAJOR.MINOR.PATCH):
15
+ * - MAJOR: Breaking changes to core protocol types or semantics
16
+ * - MINOR: Backward-compatible additions to protocol (new optional fields)
17
+ * - PATCH: Clarifications, documentation updates, no functional changes
18
+ *
19
+ * Current version: 1.0.0
20
+ *
21
+ * ### Stability Guarantees
22
+ *
23
+ * 1. **Core Types Stability**: The following types are considered stable and will not
24
+ * change in backward-incompatible ways within the same major version:
25
+ * - PraxisFact (tag, payload structure)
26
+ * - PraxisEvent (tag, payload structure)
27
+ * - PraxisState (context, facts, meta structure)
28
+ * - PraxisStepFn signature
29
+ *
30
+ * 2. **JSON Compatibility**: All protocol types will remain JSON-serializable.
31
+ * No non-JSON-safe types (functions, symbols, etc.) will be added to the protocol.
32
+ *
33
+ * 3. **Cross-Language Compatibility**: Protocol changes will be coordinated across
34
+ * all official language implementations (TypeScript, C#, PowerShell) to ensure
35
+ * interoperability.
36
+ *
37
+ * 4. **Migration Path**: Major version changes will be accompanied by:
38
+ * - Migration guide
39
+ * - Deprecation warnings in previous version
40
+ * - Compatibility shims where possible
41
+ */
42
+ /**
43
+ * Protocol version following semantic versioning
44
+ */
45
+ export declare const PRAXIS_PROTOCOL_VERSION: "1.0.0";
46
+ /**
47
+ * A fact is a typed proposition about the domain.
48
+ * Examples: UserLoggedIn, CartItem, NetworkOnline
49
+ */
50
+ export interface PraxisFact {
51
+ /** Tag identifying the fact type */
52
+ tag: string;
53
+ /** Payload containing the fact data */
54
+ payload: unknown;
55
+ }
56
+ /**
57
+ * An event is a temporally ordered fact meant to drive change.
58
+ * Examples: LOGIN, LOGOUT, ADD_TO_CART
59
+ */
60
+ export interface PraxisEvent {
61
+ /** Tag identifying the event type */
62
+ tag: string;
63
+ /** Payload containing the event data */
64
+ payload: unknown;
65
+ }
66
+ /**
67
+ * The state of the Praxis engine at a point in time.
68
+ */
69
+ export interface PraxisState {
70
+ /** Application context (domain-specific data) */
71
+ context: unknown;
72
+ /** Current facts about the domain */
73
+ facts: PraxisFact[];
74
+ /** Optional metadata (timestamps, version, etc.) */
75
+ meta?: Record<string, unknown>;
76
+ /** Protocol version (for cross-language compatibility) */
77
+ protocolVersion?: string;
78
+ }
79
+ /**
80
+ * Diagnostic information about constraint violations or rule errors.
81
+ */
82
+ export interface PraxisDiagnostics {
83
+ /** Kind of diagnostic */
84
+ kind: "constraint-violation" | "rule-error";
85
+ /** Human-readable message */
86
+ message: string;
87
+ /** Additional diagnostic data */
88
+ data?: unknown;
89
+ }
90
+ /**
91
+ * Configuration for a step execution.
92
+ * Specifies which rules and constraints to apply.
93
+ */
94
+ export interface PraxisStepConfig {
95
+ /** IDs of rules to apply during this step */
96
+ ruleIds: string[];
97
+ /** IDs of constraints to check during this step */
98
+ constraintIds: string[];
99
+ }
100
+ /**
101
+ * Result of a step execution.
102
+ */
103
+ export interface PraxisStepResult {
104
+ /** New state after applying rules and checking constraints */
105
+ state: PraxisState;
106
+ /** Diagnostics from rule execution and constraint checking */
107
+ diagnostics: PraxisDiagnostics[];
108
+ }
109
+ /**
110
+ * The core step function of the Praxis engine.
111
+ *
112
+ * This is the conceptual heart of the engine:
113
+ * - Takes current state, events, and configuration
114
+ * - Applies rules and checks constraints
115
+ * - Returns new state and diagnostics
116
+ *
117
+ * Pure, deterministic, data in → data out.
118
+ * No side effects, no global state.
119
+ */
120
+ export type PraxisStepFn = (state: PraxisState, events: PraxisEvent[], config: PraxisStepConfig) => PraxisStepResult;
121
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAG,OAAgB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,IAAI,EAAE,sBAAsB,GAAG,YAAY,CAAC;IAC5C,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,WAAW,CAAC;IACnB,8DAA8D;IAC9D,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,gBAAgB,KACrB,gBAAgB,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Core Praxis Protocol
3
+ *
4
+ * Language-neutral, JSON-friendly protocol that forms the foundation of Praxis.
5
+ * This protocol is designed to be stable and portable across languages (TypeScript, C#, PowerShell, etc.)
6
+ *
7
+ * The protocol defines the conceptual core of the engine:
8
+ * - Pure, deterministic, data in → data out
9
+ * - No side effects, no global state
10
+ * - All higher-level TypeScript APIs are built on top of this protocol
11
+ *
12
+ * ## Protocol Versioning
13
+ *
14
+ * The Praxis protocol follows semantic versioning (MAJOR.MINOR.PATCH):
15
+ * - MAJOR: Breaking changes to core protocol types or semantics
16
+ * - MINOR: Backward-compatible additions to protocol (new optional fields)
17
+ * - PATCH: Clarifications, documentation updates, no functional changes
18
+ *
19
+ * Current version: 1.0.0
20
+ *
21
+ * ### Stability Guarantees
22
+ *
23
+ * 1. **Core Types Stability**: The following types are considered stable and will not
24
+ * change in backward-incompatible ways within the same major version:
25
+ * - PraxisFact (tag, payload structure)
26
+ * - PraxisEvent (tag, payload structure)
27
+ * - PraxisState (context, facts, meta structure)
28
+ * - PraxisStepFn signature
29
+ *
30
+ * 2. **JSON Compatibility**: All protocol types will remain JSON-serializable.
31
+ * No non-JSON-safe types (functions, symbols, etc.) will be added to the protocol.
32
+ *
33
+ * 3. **Cross-Language Compatibility**: Protocol changes will be coordinated across
34
+ * all official language implementations (TypeScript, C#, PowerShell) to ensure
35
+ * interoperability.
36
+ *
37
+ * 4. **Migration Path**: Major version changes will be accompanied by:
38
+ * - Migration guide
39
+ * - Deprecation warnings in previous version
40
+ * - Compatibility shims where possible
41
+ */
42
+ /**
43
+ * Protocol version following semantic versioning
44
+ */
45
+ export const PRAXIS_PROTOCOL_VERSION = "1.0.0";
46
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAgB,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Rules and Constraints System
3
+ *
4
+ * This module defines the types and registry for rules and constraints.
5
+ * Rules and constraints are identified by stable IDs and can be described as data,
6
+ * making them portable across languages and suitable for DSL-based definitions.
7
+ */
8
+ import type { PraxisEvent, PraxisFact, PraxisState } from "./protocol.js";
9
+ /**
10
+ * Unique identifier for a rule
11
+ */
12
+ export type RuleId = string;
13
+ /**
14
+ * Unique identifier for a constraint
15
+ */
16
+ export type ConstraintId = string;
17
+ /**
18
+ * A rule function derives new facts or transitions from context + input facts/events.
19
+ * Rules must be pure - no side effects.
20
+ *
21
+ * @param state Current Praxis state
22
+ * @param events Events to process
23
+ * @returns Array of new facts to add to the state
24
+ */
25
+ export type RuleFn<TContext = unknown> = (state: PraxisState & {
26
+ context: TContext;
27
+ }, events: PraxisEvent[]) => PraxisFact[];
28
+ /**
29
+ * A constraint function checks that an invariant holds.
30
+ * Constraints must be pure - no side effects.
31
+ *
32
+ * @param state Current Praxis state
33
+ * @returns true if constraint is satisfied, false or error message if violated
34
+ */
35
+ export type ConstraintFn<TContext = unknown> = (state: PraxisState & {
36
+ context: TContext;
37
+ }) => boolean | string;
38
+ /**
39
+ * Descriptor for a rule, including its ID, description, and implementation.
40
+ */
41
+ export interface RuleDescriptor<TContext = unknown> {
42
+ /** Unique identifier for the rule */
43
+ id: RuleId;
44
+ /** Human-readable description */
45
+ description: string;
46
+ /** Implementation function */
47
+ impl: RuleFn<TContext>;
48
+ /** Optional metadata */
49
+ meta?: Record<string, unknown>;
50
+ }
51
+ /**
52
+ * Descriptor for a constraint, including its ID, description, and implementation.
53
+ */
54
+ export interface ConstraintDescriptor<TContext = unknown> {
55
+ /** Unique identifier for the constraint */
56
+ id: ConstraintId;
57
+ /** Human-readable description */
58
+ description: string;
59
+ /** Implementation function */
60
+ impl: ConstraintFn<TContext>;
61
+ /** Optional metadata */
62
+ meta?: Record<string, unknown>;
63
+ }
64
+ /**
65
+ * A Praxis module bundles rules and constraints.
66
+ * Modules can be composed and registered with the engine.
67
+ */
68
+ export interface PraxisModule<TContext = unknown> {
69
+ /** Rules in this module */
70
+ rules: RuleDescriptor<TContext>[];
71
+ /** Constraints in this module */
72
+ constraints: ConstraintDescriptor<TContext>[];
73
+ /** Optional module metadata */
74
+ meta?: Record<string, unknown>;
75
+ }
76
+ /**
77
+ * Registry for rules and constraints.
78
+ * Maps IDs to their descriptors.
79
+ */
80
+ export declare class PraxisRegistry<TContext = unknown> {
81
+ private rules;
82
+ private constraints;
83
+ /**
84
+ * Register a rule
85
+ */
86
+ registerRule(descriptor: RuleDescriptor<TContext>): void;
87
+ /**
88
+ * Register a constraint
89
+ */
90
+ registerConstraint(descriptor: ConstraintDescriptor<TContext>): void;
91
+ /**
92
+ * Register a module (all its rules and constraints)
93
+ */
94
+ registerModule(module: PraxisModule<TContext>): void;
95
+ /**
96
+ * Get a rule by ID
97
+ */
98
+ getRule(id: RuleId): RuleDescriptor<TContext> | undefined;
99
+ /**
100
+ * Get a constraint by ID
101
+ */
102
+ getConstraint(id: ConstraintId): ConstraintDescriptor<TContext> | undefined;
103
+ /**
104
+ * Get all registered rule IDs
105
+ */
106
+ getRuleIds(): RuleId[];
107
+ /**
108
+ * Get all registered constraint IDs
109
+ */
110
+ getConstraintIds(): ConstraintId[];
111
+ /**
112
+ * Get all rules
113
+ */
114
+ getAllRules(): RuleDescriptor<TContext>[];
115
+ /**
116
+ * Get all constraints
117
+ */
118
+ getAllConstraints(): ConstraintDescriptor<TContext>[];
119
+ }
120
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,MAAM,MAAM,CAAC,QAAQ,GAAG,OAAO,IAAI,CACvC,KAAK,EAAE,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,EAC1C,MAAM,EAAE,WAAW,EAAE,KAClB,UAAU,EAAE,CAAC;AAElB;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CAAC,QAAQ,GAAG,OAAO,IAAI,CAC7C,KAAK,EAAE,WAAW,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,KACvC,OAAO,GAAG,MAAM,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,QAAQ,GAAG,OAAO;IAChD,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ,GAAG,OAAO;IACtD,2CAA2C;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7B,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,OAAO;IAC9C,2BAA2B;IAC3B,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClC,iCAAiC;IACjC,WAAW,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC9C,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,QAAQ,GAAG,OAAO;IAC5C,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,WAAW,CAA2D;IAE9E;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI;IAOxD;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAOpE;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IASpD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,SAAS;IAIzD;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI3E;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,gBAAgB,IAAI,YAAY,EAAE;IAIlC;;OAEG;IACH,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE;IAIzC;;OAEG;IACH,iBAAiB,IAAI,oBAAoB,CAAC,QAAQ,CAAC,EAAE;CAGtD"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Rules and Constraints System
3
+ *
4
+ * This module defines the types and registry for rules and constraints.
5
+ * Rules and constraints are identified by stable IDs and can be described as data,
6
+ * making them portable across languages and suitable for DSL-based definitions.
7
+ */
8
+ /**
9
+ * Registry for rules and constraints.
10
+ * Maps IDs to their descriptors.
11
+ */
12
+ export class PraxisRegistry {
13
+ rules = new Map();
14
+ constraints = new Map();
15
+ /**
16
+ * Register a rule
17
+ */
18
+ registerRule(descriptor) {
19
+ if (this.rules.has(descriptor.id)) {
20
+ throw new Error(`Rule with id "${descriptor.id}" already registered`);
21
+ }
22
+ this.rules.set(descriptor.id, descriptor);
23
+ }
24
+ /**
25
+ * Register a constraint
26
+ */
27
+ registerConstraint(descriptor) {
28
+ if (this.constraints.has(descriptor.id)) {
29
+ throw new Error(`Constraint with id "${descriptor.id}" already registered`);
30
+ }
31
+ this.constraints.set(descriptor.id, descriptor);
32
+ }
33
+ /**
34
+ * Register a module (all its rules and constraints)
35
+ */
36
+ registerModule(module) {
37
+ for (const rule of module.rules) {
38
+ this.registerRule(rule);
39
+ }
40
+ for (const constraint of module.constraints) {
41
+ this.registerConstraint(constraint);
42
+ }
43
+ }
44
+ /**
45
+ * Get a rule by ID
46
+ */
47
+ getRule(id) {
48
+ return this.rules.get(id);
49
+ }
50
+ /**
51
+ * Get a constraint by ID
52
+ */
53
+ getConstraint(id) {
54
+ return this.constraints.get(id);
55
+ }
56
+ /**
57
+ * Get all registered rule IDs
58
+ */
59
+ getRuleIds() {
60
+ return Array.from(this.rules.keys());
61
+ }
62
+ /**
63
+ * Get all registered constraint IDs
64
+ */
65
+ getConstraintIds() {
66
+ return Array.from(this.constraints.keys());
67
+ }
68
+ /**
69
+ * Get all rules
70
+ */
71
+ getAllRules() {
72
+ return Array.from(this.rules.values());
73
+ }
74
+ /**
75
+ * Get all constraints
76
+ */
77
+ getAllConstraints() {
78
+ return Array.from(this.constraints.values());
79
+ }
80
+ }
81
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+EH;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,KAAK,GAAG,IAAI,GAAG,EAAoC,CAAC;IACpD,WAAW,GAAG,IAAI,GAAG,EAAgD,CAAC;IAE9E;;OAEG;IACH,YAAY,CAAC,UAAoC;QAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,UAA0C;QAC3D,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAA8B;QAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,EAAgB;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Praxis Schema Loader
3
+ *
4
+ * Loads and validates Praxis schema files.
5
+ */
6
+ import type { PraxisSchema, ValidationResult } from './types.js';
7
+ /**
8
+ * Loader options
9
+ */
10
+ export interface LoaderOptions {
11
+ /** Validate schema after loading */
12
+ validate?: boolean;
13
+ /** Base directory for resolving relative paths */
14
+ baseDir?: string;
15
+ }
16
+ /**
17
+ * Loader result
18
+ */
19
+ export interface LoaderResult {
20
+ /** Loaded schema */
21
+ schema?: PraxisSchema;
22
+ /** Validation result */
23
+ validation?: ValidationResult;
24
+ /** Load errors */
25
+ errors: string[];
26
+ }
27
+ /**
28
+ * Load a Praxis schema from a file
29
+ */
30
+ export declare function loadSchema(filePath: string, options?: LoaderOptions): Promise<LoaderResult>;
31
+ /**
32
+ * Load schema from JSON string
33
+ */
34
+ export declare function loadSchemaFromJson(json: string, options?: LoaderOptions): LoaderResult;
35
+ /**
36
+ * Load schema from YAML string
37
+ */
38
+ export declare function loadSchemaFromYaml(yaml: string, options?: LoaderOptions): LoaderResult;
39
+ /**
40
+ * Load schema from file (supports .ts, .json, and .yaml/.yml)
41
+ */
42
+ export declare function loadSchemaFromFile(filePath: string, options?: LoaderOptions): Promise<LoaderResult>;
43
+ /**
44
+ * Validate that a loaded schema has required fields for generation
45
+ */
46
+ export declare function validateForGeneration(schema: PraxisSchema): ValidationResult;
47
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/schema/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,kBAAkB;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAuEvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAkB,GAC1B,YAAY,CA+Bd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAkB,GAC1B,YAAY,CA+Bd;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAkC5E"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Praxis Schema Loader
3
+ *
4
+ * Loads and validates Praxis schema files.
5
+ */
6
+ import { readFile } from 'fs/promises';
7
+ import { pathToFileURL } from 'url';
8
+ import { load as yamlLoad } from 'js-yaml';
9
+ import { validateSchema } from './types.js';
10
+ /**
11
+ * Load a Praxis schema from a file
12
+ */
13
+ export async function loadSchema(filePath, options = {}) {
14
+ const errors = [];
15
+ try {
16
+ // Only .js files are supported. TypeScript schema files must be compiled to .js first.
17
+ // Use a compiled JavaScript file for your schema.
18
+ // Dynamic import is used, which works with .js files only.
19
+ // Convert to absolute URL for ES module import
20
+ let fileUrl = pathToFileURL(filePath).href;
21
+ // Attempt to import .ts or .js files directly. If import fails, error will be caught below.
22
+ // Dynamic import of the schema file
23
+ const module = await import(fileUrl);
24
+ // Look for common schema export names
25
+ let schema;
26
+ if (module.default) {
27
+ schema = module.default;
28
+ }
29
+ else if (module.schema) {
30
+ schema = module.schema;
31
+ }
32
+ else if (module.appSchema) {
33
+ schema = module.appSchema;
34
+ }
35
+ else {
36
+ // Try to find any object that looks like a PraxisSchema
37
+ const exports = Object.values(module);
38
+ const possibleSchema = exports.find((exp) => typeof exp === 'object' &&
39
+ exp !== null &&
40
+ 'version' in exp &&
41
+ 'name' in exp);
42
+ if (possibleSchema) {
43
+ schema = possibleSchema;
44
+ }
45
+ }
46
+ if (!schema) {
47
+ errors.push('Schema file must export a PraxisSchema object (as default, schema, or appSchema)');
48
+ return { errors };
49
+ }
50
+ // Validate if requested
51
+ let validation;
52
+ if (options.validate !== false) {
53
+ validation = validateSchema(schema);
54
+ if (!validation.valid) {
55
+ errors.push('Schema validation failed:');
56
+ validation.errors.forEach((error) => {
57
+ errors.push(` ${error.path}: ${error.message}`);
58
+ });
59
+ }
60
+ }
61
+ return {
62
+ schema,
63
+ validation,
64
+ errors,
65
+ };
66
+ }
67
+ catch (error) {
68
+ if (error instanceof Error) {
69
+ errors.push(`Failed to load schema: ${error.message}`);
70
+ }
71
+ else {
72
+ errors.push('Failed to load schema: Unknown error');
73
+ }
74
+ return { errors };
75
+ }
76
+ }
77
+ /**
78
+ * Load schema from JSON string
79
+ */
80
+ export function loadSchemaFromJson(json, options = {}) {
81
+ const errors = [];
82
+ try {
83
+ const schema = JSON.parse(json);
84
+ // Validate if requested
85
+ let validation;
86
+ if (options.validate !== false) {
87
+ validation = validateSchema(schema);
88
+ if (!validation.valid) {
89
+ errors.push('Schema validation failed:');
90
+ validation.errors.forEach((error) => {
91
+ errors.push(` ${error.path}: ${error.message}`);
92
+ });
93
+ }
94
+ }
95
+ return {
96
+ schema,
97
+ validation,
98
+ errors,
99
+ };
100
+ }
101
+ catch (error) {
102
+ if (error instanceof Error) {
103
+ errors.push(`Failed to parse JSON: ${error.message}`);
104
+ }
105
+ else {
106
+ errors.push('Failed to parse JSON: Unknown error');
107
+ }
108
+ return { errors };
109
+ }
110
+ }
111
+ /**
112
+ * Load schema from YAML string
113
+ */
114
+ export function loadSchemaFromYaml(yaml, options = {}) {
115
+ const errors = [];
116
+ try {
117
+ const schema = yamlLoad(yaml);
118
+ // Validate if requested
119
+ let validation;
120
+ if (options.validate !== false) {
121
+ validation = validateSchema(schema);
122
+ if (!validation.valid) {
123
+ errors.push('Schema validation failed:');
124
+ validation.errors.forEach((error) => {
125
+ errors.push(` ${error.path}: ${error.message}`);
126
+ });
127
+ }
128
+ }
129
+ return {
130
+ schema,
131
+ validation,
132
+ errors,
133
+ };
134
+ }
135
+ catch (error) {
136
+ if (error instanceof Error) {
137
+ errors.push(`Failed to parse YAML: ${error.message}`);
138
+ }
139
+ else {
140
+ errors.push('Failed to parse YAML: Unknown error');
141
+ }
142
+ return { errors };
143
+ }
144
+ }
145
+ /**
146
+ * Load schema from file (supports .ts, .json, and .yaml/.yml)
147
+ */
148
+ export async function loadSchemaFromFile(filePath, options = {}) {
149
+ if (filePath.endsWith('.json')) {
150
+ const content = await readFile(filePath, 'utf-8');
151
+ return loadSchemaFromJson(content, options);
152
+ }
153
+ else if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) {
154
+ const content = await readFile(filePath, 'utf-8');
155
+ return loadSchemaFromYaml(content, options);
156
+ }
157
+ else {
158
+ return loadSchema(filePath, options);
159
+ }
160
+ }
161
+ /**
162
+ * Validate that a loaded schema has required fields for generation
163
+ */
164
+ export function validateForGeneration(schema) {
165
+ const errors = [];
166
+ // Check for entities/models
167
+ if (!schema.models || schema.models.length === 0) {
168
+ errors.push('Schema must define at least one model for generation');
169
+ }
170
+ // Check that models have valid fields
171
+ schema.models?.forEach((model, index) => {
172
+ if (!model.fields || model.fields.length === 0) {
173
+ errors.push(`Model "${model.name}" at index ${index} must have at least one field`);
174
+ }
175
+ model.fields?.forEach((field, fieldIndex) => {
176
+ if (!field.name) {
177
+ errors.push(`Field at index ${fieldIndex} in model "${model.name}" must have a name`);
178
+ }
179
+ if (!field.type) {
180
+ errors.push(`Field "${field.name}" in model "${model.name}" must have a type`);
181
+ }
182
+ });
183
+ });
184
+ return {
185
+ valid: errors.length === 0,
186
+ errors: errors.map((message) => ({ path: 'schema', message })),
187
+ };
188
+ }
189
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/schema/loader.ts"],"names":[],"mappings":"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"}