@manifesto-ai/core 0.3.0 → 1.3.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 (279) hide show
  1. package/README.md +148 -498
  2. package/dist/__tests__/apply.test.d.ts +2 -0
  3. package/dist/__tests__/apply.test.d.ts.map +1 -0
  4. package/dist/__tests__/apply.test.js +144 -0
  5. package/dist/__tests__/apply.test.js.map +1 -0
  6. package/dist/__tests__/jcs.test.d.ts +2 -0
  7. package/dist/__tests__/jcs.test.d.ts.map +1 -0
  8. package/dist/__tests__/jcs.test.js +45 -0
  9. package/dist/__tests__/jcs.test.js.map +1 -0
  10. package/dist/core/apply.d.ts +17 -0
  11. package/dist/core/apply.d.ts.map +1 -0
  12. package/dist/core/apply.js +130 -0
  13. package/dist/core/apply.js.map +1 -0
  14. package/dist/core/compute.d.ts +17 -0
  15. package/dist/core/compute.d.ts.map +1 -0
  16. package/dist/core/compute.js +287 -0
  17. package/dist/core/compute.js.map +1 -0
  18. package/dist/core/compute.test.d.ts +2 -0
  19. package/dist/core/compute.test.d.ts.map +1 -0
  20. package/dist/core/compute.test.js +633 -0
  21. package/dist/core/compute.test.js.map +1 -0
  22. package/dist/core/explain.d.ts +14 -0
  23. package/dist/core/explain.d.ts.map +1 -0
  24. package/dist/core/explain.js +78 -0
  25. package/dist/core/explain.js.map +1 -0
  26. package/dist/core/index.d.ts +5 -0
  27. package/dist/core/index.d.ts.map +1 -0
  28. package/dist/core/index.js +5 -0
  29. package/dist/core/index.js.map +1 -0
  30. package/dist/core/validate.d.ts +16 -0
  31. package/dist/core/validate.d.ts.map +1 -0
  32. package/dist/core/validate.js +361 -0
  33. package/dist/core/validate.js.map +1 -0
  34. package/dist/core/validate.test.d.ts +2 -0
  35. package/dist/core/validate.test.d.ts.map +1 -0
  36. package/dist/core/validate.test.js +638 -0
  37. package/dist/core/validate.test.js.map +1 -0
  38. package/dist/core/validation-utils.d.ts +20 -0
  39. package/dist/core/validation-utils.d.ts.map +1 -0
  40. package/dist/core/validation-utils.js +289 -0
  41. package/dist/core/validation-utils.js.map +1 -0
  42. package/dist/errors.d.ts +30 -0
  43. package/dist/errors.d.ts.map +1 -0
  44. package/dist/errors.js +51 -0
  45. package/dist/errors.js.map +1 -0
  46. package/dist/evaluator/computed.d.ts +14 -0
  47. package/dist/evaluator/computed.d.ts.map +1 -0
  48. package/dist/evaluator/computed.js +60 -0
  49. package/dist/evaluator/computed.js.map +1 -0
  50. package/dist/evaluator/context.d.ts +59 -0
  51. package/dist/evaluator/context.d.ts.map +1 -0
  52. package/dist/evaluator/context.js +41 -0
  53. package/dist/evaluator/context.js.map +1 -0
  54. package/dist/evaluator/dag.d.ts +30 -0
  55. package/dist/evaluator/dag.d.ts.map +1 -0
  56. package/dist/evaluator/dag.js +121 -0
  57. package/dist/evaluator/dag.js.map +1 -0
  58. package/dist/evaluator/expr.d.ts +11 -0
  59. package/dist/evaluator/expr.d.ts.map +1 -0
  60. package/dist/evaluator/expr.js +649 -0
  61. package/dist/evaluator/expr.js.map +1 -0
  62. package/dist/evaluator/expr.test.d.ts +2 -0
  63. package/dist/evaluator/expr.test.d.ts.map +1 -0
  64. package/dist/evaluator/expr.test.js +449 -0
  65. package/dist/evaluator/expr.test.js.map +1 -0
  66. package/dist/evaluator/flow.d.ts +35 -0
  67. package/dist/evaluator/flow.d.ts.map +1 -0
  68. package/dist/evaluator/flow.js +387 -0
  69. package/dist/evaluator/flow.js.map +1 -0
  70. package/dist/evaluator/flow.test.d.ts +2 -0
  71. package/dist/evaluator/flow.test.d.ts.map +1 -0
  72. package/dist/evaluator/flow.test.js +499 -0
  73. package/dist/evaluator/flow.test.js.map +1 -0
  74. package/dist/evaluator/index.d.ts +6 -0
  75. package/dist/evaluator/index.d.ts.map +1 -0
  76. package/dist/evaluator/index.js +6 -0
  77. package/dist/evaluator/index.js.map +1 -0
  78. package/dist/factories.d.ts +22 -0
  79. package/dist/factories.d.ts.map +1 -0
  80. package/dist/factories.js +44 -0
  81. package/dist/factories.js.map +1 -0
  82. package/dist/index.d.ts +47 -11
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +30 -45
  85. package/dist/index.js.map +1 -1
  86. package/dist/index.test.d.ts +2 -0
  87. package/dist/index.test.d.ts.map +1 -0
  88. package/dist/index.test.js +13 -0
  89. package/dist/index.test.js.map +1 -0
  90. package/dist/schema/action.d.ts +14 -0
  91. package/dist/schema/action.d.ts.map +1 -0
  92. package/dist/schema/action.js +30 -0
  93. package/dist/schema/action.js.map +1 -0
  94. package/dist/schema/common.d.ts +37 -0
  95. package/dist/schema/common.d.ts.map +1 -0
  96. package/dist/schema/common.js +20 -0
  97. package/dist/schema/common.js.map +1 -0
  98. package/dist/schema/computed.d.ts +23 -0
  99. package/dist/schema/computed.d.ts.map +1 -0
  100. package/dist/schema/computed.js +34 -0
  101. package/dist/schema/computed.js.map +1 -0
  102. package/dist/schema/domain.d.ts +50 -0
  103. package/dist/schema/domain.d.ts.map +1 -0
  104. package/dist/schema/domain.js +60 -0
  105. package/dist/schema/domain.js.map +1 -0
  106. package/dist/schema/expr.d.ts +303 -0
  107. package/dist/schema/expr.d.ts.map +1 -0
  108. package/dist/schema/expr.js +283 -0
  109. package/dist/schema/expr.js.map +1 -0
  110. package/dist/schema/field.d.ts +48 -0
  111. package/dist/schema/field.d.ts.map +1 -0
  112. package/dist/schema/field.js +31 -0
  113. package/dist/schema/field.js.map +1 -0
  114. package/dist/schema/flow.d.ts +103 -0
  115. package/dist/schema/flow.d.ts.map +1 -0
  116. package/dist/schema/flow.js +82 -0
  117. package/dist/schema/flow.js.map +1 -0
  118. package/dist/schema/host-context.d.ts +12 -0
  119. package/dist/schema/host-context.d.ts.map +1 -0
  120. package/dist/schema/host-context.js +23 -0
  121. package/dist/schema/host-context.js.map +1 -0
  122. package/dist/schema/index.d.ts +13 -2
  123. package/dist/schema/index.d.ts.map +1 -1
  124. package/dist/schema/index.js +25 -2
  125. package/dist/schema/index.js.map +1 -1
  126. package/dist/schema/patch.d.ts +59 -0
  127. package/dist/schema/patch.d.ts.map +1 -0
  128. package/dist/schema/patch.js +60 -0
  129. package/dist/schema/patch.js.map +1 -0
  130. package/dist/schema/result.d.ts +142 -0
  131. package/dist/schema/result.d.ts.map +1 -0
  132. package/dist/schema/result.js +94 -0
  133. package/dist/schema/result.js.map +1 -0
  134. package/dist/schema/snapshot.d.ts +153 -0
  135. package/dist/schema/snapshot.d.ts.map +1 -0
  136. package/dist/schema/snapshot.js +160 -0
  137. package/dist/schema/snapshot.js.map +1 -0
  138. package/dist/schema/trace.d.ts +98 -0
  139. package/dist/schema/trace.d.ts.map +1 -0
  140. package/dist/schema/trace.js +90 -0
  141. package/dist/schema/trace.js.map +1 -0
  142. package/dist/schema/type-spec.d.ts +34 -0
  143. package/dist/schema/type-spec.d.ts.map +1 -0
  144. package/dist/schema/type-spec.js +40 -0
  145. package/dist/schema/type-spec.js.map +1 -0
  146. package/dist/utils/canonical.d.ts +37 -0
  147. package/dist/utils/canonical.d.ts.map +1 -0
  148. package/dist/utils/canonical.js +122 -0
  149. package/dist/utils/canonical.js.map +1 -0
  150. package/dist/utils/canonical.test.d.ts +2 -0
  151. package/dist/utils/canonical.test.d.ts.map +1 -0
  152. package/dist/utils/canonical.test.js +183 -0
  153. package/dist/utils/canonical.test.js.map +1 -0
  154. package/dist/utils/hash.d.ts +28 -0
  155. package/dist/utils/hash.d.ts.map +1 -0
  156. package/dist/utils/hash.js +152 -0
  157. package/dist/utils/hash.js.map +1 -0
  158. package/dist/utils/hash.test.d.ts +2 -0
  159. package/dist/utils/hash.test.d.ts.map +1 -0
  160. package/dist/utils/hash.test.js +170 -0
  161. package/dist/utils/hash.test.js.map +1 -0
  162. package/dist/utils/index.d.ts +4 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +4 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/path.d.ts +40 -0
  167. package/dist/utils/path.d.ts.map +1 -0
  168. package/dist/utils/path.js +132 -0
  169. package/dist/utils/path.js.map +1 -0
  170. package/dist/utils/path.test.d.ts +2 -0
  171. package/dist/utils/path.test.d.ts.map +1 -0
  172. package/dist/utils/path.test.js +191 -0
  173. package/dist/utils/path.test.js.map +1 -0
  174. package/package.json +28 -41
  175. package/LICENSE +0 -21
  176. package/dist/dag/graph.d.ts +0 -62
  177. package/dist/dag/graph.d.ts.map +0 -1
  178. package/dist/dag/graph.js +0 -244
  179. package/dist/dag/graph.js.map +0 -1
  180. package/dist/dag/index.d.ts +0 -4
  181. package/dist/dag/index.d.ts.map +0 -1
  182. package/dist/dag/index.js +0 -4
  183. package/dist/dag/index.js.map +0 -1
  184. package/dist/dag/propagation.d.ts +0 -58
  185. package/dist/dag/propagation.d.ts.map +0 -1
  186. package/dist/dag/propagation.js +0 -224
  187. package/dist/dag/propagation.js.map +0 -1
  188. package/dist/dag/topological.d.ts +0 -33
  189. package/dist/dag/topological.d.ts.map +0 -1
  190. package/dist/dag/topological.js +0 -173
  191. package/dist/dag/topological.js.map +0 -1
  192. package/dist/domain/define.d.ts +0 -82
  193. package/dist/domain/define.d.ts.map +0 -1
  194. package/dist/domain/define.js +0 -105
  195. package/dist/domain/define.js.map +0 -1
  196. package/dist/domain/index.d.ts +0 -4
  197. package/dist/domain/index.d.ts.map +0 -1
  198. package/dist/domain/index.js +0 -4
  199. package/dist/domain/index.js.map +0 -1
  200. package/dist/domain/types.d.ts +0 -203
  201. package/dist/domain/types.d.ts.map +0 -1
  202. package/dist/domain/types.js +0 -2
  203. package/dist/domain/types.js.map +0 -1
  204. package/dist/domain/validate.d.ts +0 -17
  205. package/dist/domain/validate.d.ts.map +0 -1
  206. package/dist/domain/validate.js +0 -204
  207. package/dist/domain/validate.js.map +0 -1
  208. package/dist/effect/index.d.ts +0 -4
  209. package/dist/effect/index.d.ts.map +0 -1
  210. package/dist/effect/index.js +0 -4
  211. package/dist/effect/index.js.map +0 -1
  212. package/dist/effect/result.d.ts +0 -100
  213. package/dist/effect/result.d.ts.map +0 -1
  214. package/dist/effect/result.js +0 -163
  215. package/dist/effect/result.js.map +0 -1
  216. package/dist/effect/runner.d.ts +0 -98
  217. package/dist/effect/runner.d.ts.map +0 -1
  218. package/dist/effect/runner.js +0 -321
  219. package/dist/effect/runner.js.map +0 -1
  220. package/dist/effect/types.d.ts +0 -169
  221. package/dist/effect/types.d.ts.map +0 -1
  222. package/dist/effect/types.js +0 -28
  223. package/dist/effect/types.js.map +0 -1
  224. package/dist/expression/analyzer.d.ts +0 -42
  225. package/dist/expression/analyzer.d.ts.map +0 -1
  226. package/dist/expression/analyzer.js +0 -166
  227. package/dist/expression/analyzer.js.map +0 -1
  228. package/dist/expression/evaluator.d.ts +0 -16
  229. package/dist/expression/evaluator.d.ts.map +0 -1
  230. package/dist/expression/evaluator.js +0 -382
  231. package/dist/expression/evaluator.js.map +0 -1
  232. package/dist/expression/index.d.ts +0 -5
  233. package/dist/expression/index.d.ts.map +0 -1
  234. package/dist/expression/index.js +0 -5
  235. package/dist/expression/index.js.map +0 -1
  236. package/dist/expression/parser.d.ts +0 -37
  237. package/dist/expression/parser.d.ts.map +0 -1
  238. package/dist/expression/parser.js +0 -201
  239. package/dist/expression/parser.js.map +0 -1
  240. package/dist/expression/types.d.ts +0 -123
  241. package/dist/expression/types.d.ts.map +0 -1
  242. package/dist/expression/types.js +0 -10
  243. package/dist/expression/types.js.map +0 -1
  244. package/dist/policy/field-policy.d.ts +0 -63
  245. package/dist/policy/field-policy.d.ts.map +0 -1
  246. package/dist/policy/field-policy.js +0 -138
  247. package/dist/policy/field-policy.js.map +0 -1
  248. package/dist/policy/index.d.ts +0 -3
  249. package/dist/policy/index.d.ts.map +0 -1
  250. package/dist/policy/index.js +0 -3
  251. package/dist/policy/index.js.map +0 -1
  252. package/dist/policy/precondition.d.ts +0 -58
  253. package/dist/policy/precondition.d.ts.map +0 -1
  254. package/dist/policy/precondition.js +0 -115
  255. package/dist/policy/precondition.js.map +0 -1
  256. package/dist/runtime/index.d.ts +0 -4
  257. package/dist/runtime/index.d.ts.map +0 -1
  258. package/dist/runtime/index.js +0 -4
  259. package/dist/runtime/index.js.map +0 -1
  260. package/dist/runtime/runtime.d.ts +0 -94
  261. package/dist/runtime/runtime.d.ts.map +0 -1
  262. package/dist/runtime/runtime.js +0 -294
  263. package/dist/runtime/runtime.js.map +0 -1
  264. package/dist/runtime/snapshot.d.ts +0 -39
  265. package/dist/runtime/snapshot.d.ts.map +0 -1
  266. package/dist/runtime/snapshot.js +0 -264
  267. package/dist/runtime/snapshot.js.map +0 -1
  268. package/dist/runtime/subscription.d.ts +0 -82
  269. package/dist/runtime/subscription.d.ts.map +0 -1
  270. package/dist/runtime/subscription.js +0 -222
  271. package/dist/runtime/subscription.js.map +0 -1
  272. package/dist/schema/integration.d.ts +0 -89
  273. package/dist/schema/integration.d.ts.map +0 -1
  274. package/dist/schema/integration.js +0 -171
  275. package/dist/schema/integration.js.map +0 -1
  276. package/dist/schema/validation.d.ts +0 -51
  277. package/dist/schema/validation.d.ts.map +0 -1
  278. package/dist/schema/validation.js +0 -212
  279. package/dist/schema/validation.js.map +0 -1
@@ -0,0 +1,638 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { validate } from "./validate.js";
3
+ import { hashSchemaSync } from "../utils/hash.js";
4
+ const BASE_STATE_FIELDS = {
5
+ dummy: { type: "string", required: true },
6
+ a: { type: "number", required: true },
7
+ b: { type: "number", required: true },
8
+ x: { type: "number", required: true },
9
+ count: { type: "number", required: true },
10
+ balance: { type: "number", required: true },
11
+ flag: { type: "boolean", required: true },
12
+ result: { type: "string", required: true },
13
+ items: {
14
+ type: "array",
15
+ required: true,
16
+ items: {
17
+ type: "object",
18
+ required: true,
19
+ fields: {
20
+ active: { type: "boolean", required: true },
21
+ },
22
+ },
23
+ },
24
+ };
25
+ const BASE_COMPUTED_FIELDS = {
26
+ "computed.dummy": {
27
+ expr: { kind: "get", path: "dummy" },
28
+ deps: ["dummy"],
29
+ },
30
+ };
31
+ const BASE_ACTIONS = {
32
+ noop: { flow: { kind: "halt", reason: "noop" } },
33
+ };
34
+ // Helper to create a valid minimal schema
35
+ function createValidSchema(overrides = {}) {
36
+ const { state, computed, actions: overrideActions, hash, types, ...restOverrides } = overrides;
37
+ const stateFields = {
38
+ ...BASE_STATE_FIELDS,
39
+ ...(state?.fields ?? {}),
40
+ };
41
+ const computedFields = {
42
+ ...BASE_COMPUTED_FIELDS,
43
+ ...(computed?.fields ?? {}),
44
+ };
45
+ const actions = {
46
+ ...BASE_ACTIONS,
47
+ ...(overrideActions ?? {}),
48
+ };
49
+ const schemaWithoutHash = {
50
+ id: "manifesto:test",
51
+ version: "1.0.0",
52
+ ...restOverrides,
53
+ types: types ?? {},
54
+ state: { fields: stateFields },
55
+ computed: { fields: computedFields },
56
+ actions,
57
+ };
58
+ return {
59
+ ...schemaWithoutHash,
60
+ hash: hash ?? hashSchemaSync(schemaWithoutHash),
61
+ };
62
+ }
63
+ describe("validate", () => {
64
+ describe("Basic Schema Validation", () => {
65
+ it("should validate a valid schema", () => {
66
+ const schema = createValidSchema();
67
+ const result = validate(schema);
68
+ expect(result.valid).toBe(true);
69
+ expect(result.errors).toEqual([]);
70
+ });
71
+ it("should reject non-object input", () => {
72
+ const result = validate(null);
73
+ expect(result.valid).toBe(false);
74
+ expect(result.errors.length).toBeGreaterThan(0);
75
+ });
76
+ it("should reject schema without required fields", () => {
77
+ const result = validate({});
78
+ expect(result.valid).toBe(false);
79
+ expect(result.errors.some((e) => e.code === "SCHEMA_ERROR")).toBe(true);
80
+ });
81
+ it("should reject schema with invalid version format", () => {
82
+ const result = validate({
83
+ id: "manifesto:test",
84
+ version: 123, // Should be string
85
+ hash: "test-hash",
86
+ state: { fields: {} },
87
+ computed: { fields: {} },
88
+ actions: {},
89
+ });
90
+ expect(result.valid).toBe(false);
91
+ });
92
+ it("should reject schema with invalid id", () => {
93
+ const schema = createValidSchema({ id: "not-a-uri" });
94
+ const result = validate(schema);
95
+ expect(result.valid).toBe(false);
96
+ expect(result.errors.some((e) => e.path === "id")).toBe(true);
97
+ });
98
+ it("should reject schema with invalid semver", () => {
99
+ const schema = createValidSchema({ version: "1.0" });
100
+ const result = validate(schema);
101
+ expect(result.valid).toBe(false);
102
+ expect(result.errors.some((e) => e.path === "version")).toBe(true);
103
+ });
104
+ it("should reject schema with empty computed fields", () => {
105
+ const schema = createValidSchema();
106
+ schema.computed = { fields: {} };
107
+ const result = validate(schema);
108
+ expect(result.valid).toBe(false);
109
+ expect(result.errors.some((e) => e.path === "computed.fields")).toBe(true);
110
+ });
111
+ it("should reject schema with hash mismatch", () => {
112
+ const schema = createValidSchema({ hash: "bad-hash" });
113
+ const result = validate(schema);
114
+ expect(result.valid).toBe(false);
115
+ expect(result.errors.some((e) => e.code === "V-008")).toBe(true);
116
+ });
117
+ it("should accept schemas with extra compiler fields when hash matches raw canonical", () => {
118
+ const schemaWithoutHash = {
119
+ id: "manifesto:test",
120
+ version: "1.0.0",
121
+ state: { fields: BASE_STATE_FIELDS },
122
+ computed: { fields: BASE_COMPUTED_FIELDS },
123
+ actions: BASE_ACTIONS,
124
+ types: {
125
+ CustomType: {
126
+ name: "CustomType",
127
+ definition: {
128
+ kind: "object",
129
+ fields: {
130
+ a: { type: { kind: "primitive", type: "string" }, optional: false },
131
+ b: { type: { kind: "primitive", type: "number" }, optional: false },
132
+ },
133
+ },
134
+ },
135
+ },
136
+ };
137
+ const schema = {
138
+ ...schemaWithoutHash,
139
+ hash: hashSchemaSync(schemaWithoutHash),
140
+ };
141
+ const result = validate(schema);
142
+ expect(result.valid).toBe(true);
143
+ });
144
+ });
145
+ describe("Computed Field Validation", () => {
146
+ it("should validate schema with computed fields", () => {
147
+ const schema = createValidSchema({
148
+ computed: {
149
+ fields: {
150
+ "computed.total": {
151
+ expr: { kind: "add", left: { kind: "get", path: "a" }, right: { kind: "get", path: "b" } },
152
+ deps: ["a", "b"],
153
+ },
154
+ },
155
+ },
156
+ });
157
+ const result = validate(schema);
158
+ expect(result.valid).toBe(true);
159
+ });
160
+ it("should require deps to cover all expression paths", () => {
161
+ const schema = createValidSchema({
162
+ computed: {
163
+ fields: {
164
+ "computed.sum": {
165
+ expr: { kind: "add", left: { kind: "get", path: "a" }, right: { kind: "get", path: "b" } },
166
+ deps: ["a"],
167
+ },
168
+ },
169
+ },
170
+ });
171
+ const result = validate(schema);
172
+ expect(result.valid).toBe(false);
173
+ expect(result.errors.some((e) => e.message.includes("Missing dependency"))).toBe(true);
174
+ });
175
+ it("should reject deps with unknown paths", () => {
176
+ const schema = createValidSchema({
177
+ computed: {
178
+ fields: {
179
+ "computed.sum": {
180
+ expr: { kind: "get", path: "a" },
181
+ deps: ["a", "missing.path"],
182
+ },
183
+ },
184
+ },
185
+ });
186
+ const result = validate(schema);
187
+ expect(result.valid).toBe(false);
188
+ expect(result.errors.some((e) => e.code === "V-001")).toBe(true);
189
+ expect(result.errors.some((e) => e.message.includes("missing.path"))).toBe(true);
190
+ });
191
+ it("should reject computed expressions that read system paths", () => {
192
+ const schema = createValidSchema({
193
+ computed: {
194
+ fields: {
195
+ "computed.invalid": {
196
+ expr: { kind: "get", path: "system.status" },
197
+ deps: ["dummy"],
198
+ },
199
+ },
200
+ },
201
+ });
202
+ const result = validate(schema);
203
+ expect(result.valid).toBe(false);
204
+ expect(result.errors.some((e) => e.code === "V-003")).toBe(true);
205
+ expect(result.errors.some((e) => e.message.includes("system.status"))).toBe(true);
206
+ });
207
+ it("should detect cyclic dependencies in computed fields (V-002)", () => {
208
+ const schema = createValidSchema({
209
+ computed: {
210
+ fields: {
211
+ "computed.a": {
212
+ expr: { kind: "get", path: "computed.b" },
213
+ deps: ["computed.b"],
214
+ },
215
+ "computed.b": {
216
+ expr: { kind: "get", path: "computed.a" },
217
+ deps: ["computed.a"],
218
+ },
219
+ },
220
+ },
221
+ });
222
+ const result = validate(schema);
223
+ expect(result.valid).toBe(false);
224
+ expect(result.errors.some((e) => e.code === "V-002")).toBe(true);
225
+ });
226
+ it("should detect self-referential computed fields", () => {
227
+ const schema = createValidSchema({
228
+ computed: {
229
+ fields: {
230
+ "computed.self": {
231
+ expr: { kind: "get", path: "computed.self" },
232
+ deps: ["computed.self"],
233
+ },
234
+ },
235
+ },
236
+ });
237
+ const result = validate(schema);
238
+ expect(result.valid).toBe(false);
239
+ expect(result.errors.some((e) => e.code === "V-002")).toBe(true);
240
+ });
241
+ it("should detect complex cyclic dependencies", () => {
242
+ const schema = createValidSchema({
243
+ computed: {
244
+ fields: {
245
+ "computed.a": {
246
+ expr: { kind: "get", path: "computed.b" },
247
+ deps: ["computed.b"],
248
+ },
249
+ "computed.b": {
250
+ expr: { kind: "get", path: "computed.c" },
251
+ deps: ["computed.c"],
252
+ },
253
+ "computed.c": {
254
+ expr: { kind: "get", path: "computed.a" },
255
+ deps: ["computed.a"],
256
+ },
257
+ },
258
+ },
259
+ });
260
+ const result = validate(schema);
261
+ expect(result.valid).toBe(false);
262
+ expect(result.errors.some((e) => e.code === "V-002")).toBe(true);
263
+ });
264
+ it("should allow valid dependency chains", () => {
265
+ const schema = createValidSchema({
266
+ computed: {
267
+ fields: {
268
+ "computed.a": {
269
+ expr: { kind: "get", path: "x" },
270
+ deps: ["x"],
271
+ },
272
+ "computed.b": {
273
+ expr: { kind: "get", path: "computed.a" },
274
+ deps: ["computed.a"],
275
+ },
276
+ "computed.c": {
277
+ expr: { kind: "get", path: "computed.b" },
278
+ deps: ["computed.b"],
279
+ },
280
+ },
281
+ },
282
+ });
283
+ const result = validate(schema);
284
+ expect(result.valid).toBe(true);
285
+ });
286
+ });
287
+ describe("Action Validation", () => {
288
+ it("should validate schema with actions", () => {
289
+ const schema = createValidSchema({
290
+ actions: {
291
+ increment: {
292
+ flow: {
293
+ kind: "patch",
294
+ op: "set",
295
+ path: "count",
296
+ value: { kind: "lit", value: 1 },
297
+ },
298
+ },
299
+ },
300
+ });
301
+ const result = validate(schema);
302
+ expect(result.valid).toBe(true);
303
+ });
304
+ it("should validate action with availability condition", () => {
305
+ const schema = createValidSchema({
306
+ actions: {
307
+ withdraw: {
308
+ available: {
309
+ kind: "gt",
310
+ left: { kind: "get", path: "balance" },
311
+ right: { kind: "lit", value: 0 },
312
+ },
313
+ flow: {
314
+ kind: "patch",
315
+ op: "set",
316
+ path: "balance",
317
+ value: { kind: "lit", value: 0 },
318
+ },
319
+ },
320
+ },
321
+ });
322
+ const result = validate(schema);
323
+ expect(result.valid).toBe(true);
324
+ });
325
+ it("should allow meta paths in action flow", () => {
326
+ const schema = createValidSchema({
327
+ actions: {
328
+ mark: {
329
+ flow: {
330
+ kind: "patch",
331
+ op: "set",
332
+ path: "dummy",
333
+ value: { kind: "get", path: "meta.intentId" },
334
+ },
335
+ },
336
+ },
337
+ });
338
+ const result = validate(schema);
339
+ expect(result.valid).toBe(true);
340
+ });
341
+ it("should reject unknown input paths in action expressions", () => {
342
+ const schema = createValidSchema({
343
+ actions: {
344
+ update: {
345
+ input: {
346
+ type: "object",
347
+ required: true,
348
+ fields: {
349
+ value: { type: "string", required: true },
350
+ },
351
+ },
352
+ flow: {
353
+ kind: "patch",
354
+ op: "set",
355
+ path: "dummy",
356
+ value: { kind: "get", path: "input.missing" },
357
+ },
358
+ },
359
+ },
360
+ });
361
+ const result = validate(schema);
362
+ expect(result.valid).toBe(false);
363
+ expect(result.errors.some((e) => e.code === "V-003")).toBe(true);
364
+ expect(result.errors.some((e) => e.message.includes("input.missing"))).toBe(true);
365
+ });
366
+ });
367
+ describe("Call Reference Validation (V-004)", () => {
368
+ it("should detect unknown call references", () => {
369
+ const schema = createValidSchema({
370
+ actions: {
371
+ main: {
372
+ flow: {
373
+ kind: "call",
374
+ flow: "nonexistent",
375
+ },
376
+ },
377
+ },
378
+ });
379
+ const result = validate(schema);
380
+ expect(result.valid).toBe(false);
381
+ expect(result.errors.some((e) => e.code === "V-004")).toBe(true);
382
+ expect(result.errors.some((e) => e.message.includes("nonexistent"))).toBe(true);
383
+ });
384
+ it("should allow valid call references", () => {
385
+ const schema = createValidSchema({
386
+ actions: {
387
+ helper: {
388
+ flow: { kind: "patch", op: "set", path: "x", value: { kind: "lit", value: 1 } },
389
+ },
390
+ main: {
391
+ flow: {
392
+ kind: "call",
393
+ flow: "helper",
394
+ },
395
+ },
396
+ },
397
+ });
398
+ const result = validate(schema);
399
+ expect(result.valid).toBe(true);
400
+ });
401
+ it("should detect unknown calls in nested flows", () => {
402
+ const schema = createValidSchema({
403
+ actions: {
404
+ main: {
405
+ flow: {
406
+ kind: "seq",
407
+ steps: [
408
+ { kind: "patch", op: "set", path: "x", value: { kind: "lit", value: 1 } },
409
+ {
410
+ kind: "if",
411
+ cond: { kind: "lit", value: true },
412
+ then: { kind: "call", flow: "unknown" },
413
+ },
414
+ ],
415
+ },
416
+ },
417
+ },
418
+ });
419
+ const result = validate(schema);
420
+ expect(result.valid).toBe(false);
421
+ expect(result.errors.some((e) => e.code === "V-004")).toBe(true);
422
+ });
423
+ });
424
+ describe("Call Graph Cycle Detection (V-005)", () => {
425
+ it("should detect direct recursive calls", () => {
426
+ const schema = createValidSchema({
427
+ actions: {
428
+ recursive: {
429
+ flow: {
430
+ kind: "call",
431
+ flow: "recursive",
432
+ },
433
+ },
434
+ },
435
+ });
436
+ const result = validate(schema);
437
+ expect(result.valid).toBe(false);
438
+ expect(result.errors.some((e) => e.code === "V-005")).toBe(true);
439
+ });
440
+ it("should detect indirect recursive calls", () => {
441
+ const schema = createValidSchema({
442
+ actions: {
443
+ a: {
444
+ flow: { kind: "call", flow: "b" },
445
+ },
446
+ b: {
447
+ flow: { kind: "call", flow: "c" },
448
+ },
449
+ c: {
450
+ flow: { kind: "call", flow: "a" },
451
+ },
452
+ },
453
+ });
454
+ const result = validate(schema);
455
+ expect(result.valid).toBe(false);
456
+ expect(result.errors.some((e) => e.code === "V-005")).toBe(true);
457
+ });
458
+ it("should allow non-recursive call chains", () => {
459
+ const schema = createValidSchema({
460
+ actions: {
461
+ step1: {
462
+ flow: { kind: "patch", op: "set", path: "x", value: { kind: "lit", value: 1 } },
463
+ },
464
+ step2: {
465
+ flow: { kind: "call", flow: "step1" },
466
+ },
467
+ main: {
468
+ flow: {
469
+ kind: "seq",
470
+ steps: [
471
+ { kind: "call", flow: "step1" },
472
+ { kind: "call", flow: "step2" },
473
+ ],
474
+ },
475
+ },
476
+ },
477
+ });
478
+ const result = validate(schema);
479
+ expect(result.valid).toBe(true);
480
+ });
481
+ });
482
+ describe("Flow Node Validation", () => {
483
+ it("should validate seq flow", () => {
484
+ const schema = createValidSchema({
485
+ actions: {
486
+ test: {
487
+ flow: {
488
+ kind: "seq",
489
+ steps: [
490
+ { kind: "patch", op: "set", path: "a", value: { kind: "lit", value: 1 } },
491
+ { kind: "patch", op: "set", path: "b", value: { kind: "lit", value: 2 } },
492
+ ],
493
+ },
494
+ },
495
+ },
496
+ });
497
+ const result = validate(schema);
498
+ expect(result.valid).toBe(true);
499
+ });
500
+ it("should validate if flow", () => {
501
+ const schema = createValidSchema({
502
+ actions: {
503
+ test: {
504
+ flow: {
505
+ kind: "if",
506
+ cond: { kind: "get", path: "flag" },
507
+ then: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "yes" } },
508
+ else: { kind: "patch", op: "set", path: "result", value: { kind: "lit", value: "no" } },
509
+ },
510
+ },
511
+ },
512
+ });
513
+ const result = validate(schema);
514
+ expect(result.valid).toBe(true);
515
+ });
516
+ it("should validate effect flow", () => {
517
+ const schema = createValidSchema({
518
+ actions: {
519
+ test: {
520
+ flow: {
521
+ kind: "effect",
522
+ type: "http",
523
+ params: {
524
+ url: { kind: "lit", value: "https://api.example.com" },
525
+ },
526
+ },
527
+ },
528
+ },
529
+ });
530
+ const result = validate(schema);
531
+ expect(result.valid).toBe(true);
532
+ });
533
+ it("should validate halt flow", () => {
534
+ const schema = createValidSchema({
535
+ actions: {
536
+ test: {
537
+ flow: { kind: "halt", reason: "stopped" },
538
+ },
539
+ },
540
+ });
541
+ const result = validate(schema);
542
+ expect(result.valid).toBe(true);
543
+ });
544
+ it("should validate fail flow", () => {
545
+ const schema = createValidSchema({
546
+ actions: {
547
+ test: {
548
+ flow: {
549
+ kind: "fail",
550
+ code: "ERROR",
551
+ message: { kind: "lit", value: "Something went wrong" },
552
+ },
553
+ },
554
+ },
555
+ });
556
+ const result = validate(schema);
557
+ expect(result.valid).toBe(true);
558
+ });
559
+ });
560
+ describe("Expression Validation", () => {
561
+ it("should validate nested expressions", () => {
562
+ const schema = createValidSchema({
563
+ computed: {
564
+ fields: {
565
+ "computed.complex": {
566
+ expr: {
567
+ kind: "if",
568
+ cond: {
569
+ kind: "and",
570
+ args: [
571
+ { kind: "gt", left: { kind: "get", path: "x" }, right: { kind: "lit", value: 0 } },
572
+ { kind: "lt", left: { kind: "get", path: "x" }, right: { kind: "lit", value: 100 } },
573
+ ],
574
+ },
575
+ then: {
576
+ kind: "mul",
577
+ left: { kind: "get", path: "x" },
578
+ right: { kind: "lit", value: 2 },
579
+ },
580
+ else: { kind: "lit", value: 0 },
581
+ },
582
+ deps: ["x"],
583
+ },
584
+ },
585
+ },
586
+ });
587
+ const result = validate(schema);
588
+ expect(result.valid).toBe(true);
589
+ });
590
+ it("should validate collection expressions", () => {
591
+ const schema = createValidSchema({
592
+ computed: {
593
+ fields: {
594
+ "computed.filtered": {
595
+ expr: {
596
+ kind: "filter",
597
+ array: { kind: "get", path: "items" },
598
+ predicate: { kind: "get", path: "$item.active" },
599
+ },
600
+ deps: ["items"],
601
+ },
602
+ },
603
+ },
604
+ });
605
+ const result = validate(schema);
606
+ expect(result.valid).toBe(true);
607
+ });
608
+ });
609
+ describe("Multiple Errors", () => {
610
+ it("should report multiple validation errors", () => {
611
+ const schema = createValidSchema({
612
+ computed: {
613
+ fields: {
614
+ "computed.a": {
615
+ expr: { kind: "get", path: "computed.b" },
616
+ deps: ["computed.b"],
617
+ },
618
+ "computed.b": {
619
+ expr: { kind: "get", path: "computed.a" },
620
+ deps: ["computed.a"],
621
+ },
622
+ },
623
+ },
624
+ actions: {
625
+ test: {
626
+ flow: { kind: "call", flow: "nonexistent" },
627
+ },
628
+ },
629
+ });
630
+ const result = validate(schema);
631
+ expect(result.valid).toBe(false);
632
+ // Should have both cycle error and unknown flow error
633
+ expect(result.errors.some((e) => e.code === "V-002")).toBe(true);
634
+ expect(result.errors.some((e) => e.code === "V-004")).toBe(true);
635
+ });
636
+ });
637
+ });
638
+ //# sourceMappingURL=validate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/core/validate.test.ts"],"names":[],"mappings":"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"}