@hyperscale0/udl 1.0.0-rc.1 → 1.0.123

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 (234) hide show
  1. package/CHANGELOG.md +5 -211
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +14 -106
  5. package/dist/canonical.d.ts.map +1 -1
  6. package/dist/canonical.js +1 -29
  7. package/dist/canonical.js.map +1 -1
  8. package/dist/diagnostics.d.ts +13 -165
  9. package/dist/diagnostics.d.ts.map +1 -1
  10. package/dist/diagnostics.js +33 -157
  11. package/dist/diagnostics.js.map +1 -1
  12. package/dist/field-value.d.ts +5 -0
  13. package/dist/field-value.d.ts.map +1 -0
  14. package/dist/field-value.js +85 -0
  15. package/dist/field-value.js.map +1 -0
  16. package/dist/finance.d.ts +10 -53
  17. package/dist/finance.d.ts.map +1 -1
  18. package/dist/finance.js +252 -536
  19. package/dist/finance.js.map +1 -1
  20. package/dist/index.d.ts +9 -13
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/json.d.ts +2 -0
  25. package/dist/json.d.ts.map +1 -0
  26. package/dist/json.js +30 -0
  27. package/dist/json.js.map +1 -0
  28. package/dist/limits.d.ts +3 -28
  29. package/dist/limits.d.ts.map +1 -1
  30. package/dist/limits.js +5 -31
  31. package/dist/limits.js.map +1 -1
  32. package/dist/object-contract.d.ts +140 -0
  33. package/dist/object-contract.d.ts.map +1 -0
  34. package/dist/object-contract.js +314 -0
  35. package/dist/object-contract.js.map +1 -0
  36. package/dist/object-semantics-schema.d.ts +5710 -0
  37. package/dist/object-semantics-schema.d.ts.map +1 -0
  38. package/dist/object-semantics-schema.js +119 -0
  39. package/dist/object-semantics-schema.js.map +1 -0
  40. package/dist/object-semantics.d.ts +6 -0
  41. package/dist/object-semantics.d.ts.map +1 -0
  42. package/dist/object-semantics.js +279 -0
  43. package/dist/object-semantics.js.map +1 -0
  44. package/dist/object-structures.d.ts +4 -0
  45. package/dist/object-structures.d.ts.map +1 -0
  46. package/dist/object-structures.js +134 -0
  47. package/dist/object-structures.js.map +1 -0
  48. package/dist/reporting-validation.d.ts +8 -0
  49. package/dist/reporting-validation.d.ts.map +1 -0
  50. package/dist/reporting-validation.js +252 -0
  51. package/dist/reporting-validation.js.map +1 -0
  52. package/dist/reporting.d.ts +477 -0
  53. package/dist/reporting.d.ts.map +1 -0
  54. package/dist/reporting.js +169 -0
  55. package/dist/reporting.js.map +1 -0
  56. package/dist/schema.d.ts +5572 -2710
  57. package/dist/schema.d.ts.map +1 -1
  58. package/dist/schema.js +444 -1121
  59. package/dist/schema.js.map +1 -1
  60. package/dist/validation.d.ts +10 -73
  61. package/dist/validation.d.ts.map +1 -1
  62. package/dist/validation.js +1109 -2569
  63. package/dist/validation.js.map +1 -1
  64. package/docs/assets/brand/manifest.json +30 -0
  65. package/docs/assets/brand/udl-horizontal-white.svg +1 -0
  66. package/docs/assets/brand/udl-horizontal.svg +1 -0
  67. package/docs/assets/brand/udl-stacked-white.svg +1 -0
  68. package/docs/assets/brand/udl-stacked.svg +1 -0
  69. package/docs/assets/udl.svg +11 -0
  70. package/package.json +13 -22
  71. package/spec/README.md +300 -172
  72. package/spec/cars.udl.json +249 -0
  73. package/spec/udl.schema.json +3066 -2242
  74. package/src/canonical.ts +1 -35
  75. package/src/diagnostics.ts +76 -209
  76. package/src/field-value.ts +87 -0
  77. package/src/finance.ts +327 -832
  78. package/src/index.ts +18 -95
  79. package/src/json.ts +34 -0
  80. package/src/limits.ts +5 -31
  81. package/src/object-contract.ts +559 -0
  82. package/src/object-semantics-schema.ts +148 -0
  83. package/src/object-semantics.ts +378 -0
  84. package/src/object-structures.ts +255 -0
  85. package/src/reporting-validation.ts +383 -0
  86. package/src/reporting.ts +178 -0
  87. package/src/schema.ts +510 -1277
  88. package/src/validation.ts +1630 -4545
  89. package/LICENSE +0 -661
  90. package/LICENSING.md +0 -51
  91. package/TRADEMARKS.md +0 -35
  92. package/conformance/README.md +0 -82
  93. package/conformance/evolution/action-contract.expected.json +0 -10
  94. package/conformance/evolution/action-contract.live.udl +0 -44
  95. package/conformance/evolution/action-contract.next.udl +0 -45
  96. package/conformance/evolution/product-identity.expected.json +0 -10
  97. package/conformance/evolution/product-identity.live.udl +0 -55
  98. package/conformance/evolution/product-identity.next.udl +0 -55
  99. package/conformance/evolution/version-required.expected.json +0 -10
  100. package/conformance/evolution/version-required.live.udl +0 -55
  101. package/conformance/evolution/version-required.next.udl +0 -58
  102. package/conformance/invalid/action-without-transition.expected.json +0 -10
  103. package/conformance/invalid/action-without-transition.udl +0 -60
  104. package/conformance/invalid/agent-description-too-long.expected.json +0 -10
  105. package/conformance/invalid/agent-description-too-long.udl +0 -57
  106. package/conformance/invalid/blank-title.expected.json +0 -10
  107. package/conformance/invalid/blank-title.udl +0 -54
  108. package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
  109. package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
  110. package/conformance/invalid/depth-budget.expected.json +0 -10
  111. package/conformance/invalid/depth-budget.udl +0 -49
  112. package/conformance/invalid/duplicate-subject.expected.json +0 -10
  113. package/conformance/invalid/duplicate-subject.udl +0 -230
  114. package/conformance/invalid/forged-effects.expected.json +0 -10
  115. package/conformance/invalid/forged-effects.udl +0 -76
  116. package/conformance/invalid/format-version.expected.json +0 -10
  117. package/conformance/invalid/format-version.udl +0 -54
  118. package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
  119. package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
  120. package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
  121. package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
  122. package/conformance/invalid/invalid-check-duration.expected.json +0 -10
  123. package/conformance/invalid/invalid-check-duration.udl +0 -219
  124. package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
  125. package/conformance/invalid/invalid-dial-anchor.udl +0 -219
  126. package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
  127. package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
  128. package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
  129. package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
  130. package/conformance/invalid/invalid-remainder.expected.json +0 -10
  131. package/conformance/invalid/invalid-remainder.udl +0 -220
  132. package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
  133. package/conformance/invalid/invalid-schema-keyword.udl +0 -220
  134. package/conformance/invalid/invalid-utf8.expected.json +0 -10
  135. package/conformance/invalid/invalid-utf8.udl +0 -1
  136. package/conformance/invalid/malformed-json.expected.json +0 -10
  137. package/conformance/invalid/malformed-json.udl +0 -1
  138. package/conformance/invalid/missing-create-action.expected.json +0 -10
  139. package/conformance/invalid/missing-create-action.udl +0 -48
  140. package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
  141. package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
  142. package/conformance/invalid/missing-exception-contract.expected.json +0 -14
  143. package/conformance/invalid/missing-exception-contract.udl +0 -2523
  144. package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
  145. package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
  146. package/conformance/invalid/not-an-object.expected.json +0 -10
  147. package/conformance/invalid/not-an-object.udl +0 -1
  148. package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
  149. package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
  150. package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
  151. package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
  152. package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
  153. package/conformance/invalid/quote-named-reference-gate.udl +0 -50
  154. package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
  155. package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
  156. package/conformance/invalid/unknown-key.expected.json +0 -10
  157. package/conformance/invalid/unknown-key.udl +0 -55
  158. package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
  159. package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
  160. package/conformance/invalid/unknown-required-field.expected.json +0 -10
  161. package/conformance/invalid/unknown-required-field.udl +0 -220
  162. package/conformance/invalid/unreachable-state.expected.json +0 -10
  163. package/conformance/invalid/unreachable-state.udl +0 -55
  164. package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
  165. package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
  166. package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
  167. package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
  168. package/conformance/valid/agent-description.expected.json +0 -6
  169. package/conformance/valid/agent-description.udl +0 -66
  170. package/conformance/valid/cards.expected.json +0 -6
  171. package/conformance/valid/cards.udl +0 -1579
  172. package/conformance/valid/commerce-escrow.expected.json +0 -6
  173. package/conformance/valid/commerce-escrow.udl +0 -1512
  174. package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
  175. package/conformance/valid/compiled-crowdfunding.udl +0 -1843
  176. package/conformance/valid/compiled-watch-club.expected.json +0 -6
  177. package/conformance/valid/compiled-watch-club.udl +0 -2486
  178. package/conformance/valid/complete-contract.expected.json +0 -6
  179. package/conformance/valid/complete-contract.udl +0 -218
  180. package/conformance/valid/effect-signatures.expected.json +0 -6
  181. package/conformance/valid/effect-signatures.udl +0 -75
  182. package/conformance/valid/hand-edited.expected.json +0 -6
  183. package/conformance/valid/hand-edited.udl +0 -1
  184. package/conformance/valid/insured-car-marketplace.expected.json +0 -6
  185. package/conformance/valid/insured-car-marketplace.udl +0 -1050
  186. package/conformance/valid/insured-travel.expected.json +0 -6
  187. package/conformance/valid/insured-travel.udl +0 -3469
  188. package/conformance/valid/minimal.expected.json +0 -6
  189. package/conformance/valid/minimal.udl +0 -54
  190. package/conformance/valid/protection.expected.json +0 -6
  191. package/conformance/valid/protection.udl +0 -1551
  192. package/conformance/valid/string-escaping.expected.json +0 -6
  193. package/conformance/valid/string-escaping.udl +0 -54
  194. package/dist/check-profiles.d.ts +0 -57
  195. package/dist/check-profiles.d.ts.map +0 -1
  196. package/dist/check-profiles.js +0 -62
  197. package/dist/check-profiles.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -184
  201. package/dist/cli.js.map +0 -1
  202. package/dist/effects.d.ts +0 -41
  203. package/dist/effects.d.ts.map +0 -1
  204. package/dist/effects.js +0 -110
  205. package/dist/effects.js.map +0 -1
  206. package/dist/evolution.d.ts +0 -120
  207. package/dist/evolution.d.ts.map +0 -1
  208. package/dist/evolution.js +0 -567
  209. package/dist/evolution.js.map +0 -1
  210. package/dist/parser.d.ts +0 -4
  211. package/dist/parser.d.ts.map +0 -1
  212. package/dist/parser.js +0 -44
  213. package/dist/parser.js.map +0 -1
  214. package/docs/README.md +0 -14
  215. package/docs/guide/01-a-document.md +0 -37
  216. package/docs/guide/02-money-steps.md +0 -23
  217. package/docs/guide/03-laws.md +0 -18
  218. package/docs/guide/04-fees-and-remainder.md +0 -15
  219. package/docs/guide/05-checks-updates-dials.md +0 -7
  220. package/docs/guide/06-effects.md +0 -11
  221. package/docs/guide/07-evolution.md +0 -11
  222. package/docs/guide/08-implementing.md +0 -13
  223. package/docs/llms-full.txt +0 -1241
  224. package/docs/llms.txt +0 -14
  225. package/docs/reference/canonical.md +0 -16
  226. package/docs/reference/clauses.md +0 -986
  227. package/docs/reference/cli.md +0 -22
  228. package/docs/reference/diagnostics.md +0 -32
  229. package/skills/udl/SKILL.md +0 -28
  230. package/src/check-profiles.ts +0 -80
  231. package/src/cli.ts +0 -196
  232. package/src/effects.ts +0 -163
  233. package/src/evolution.ts +0 -965
  234. package/src/parser.ts +0 -58
@@ -0,0 +1,314 @@
1
+ import * as z from "zod";
2
+ import { udlFieldValueSchema } from "./field-value.js";
3
+ import { projectDocumentSemantics, presentationLabel, } from "./object-semantics.js";
4
+ export * from "./object-semantics-schema.js";
5
+ export { projectDocumentSemantics, presentationLabel, } from "./object-semantics.js";
6
+ import { udlExternalIdSchema, } from "./schema.js";
7
+ export function objectKindFilters(kind) {
8
+ return kind.columns.flatMap((column) => {
9
+ const field = kind.fields.find((item) => item.name === column);
10
+ return field &&
11
+ !field.sensitive &&
12
+ ["text", "enum", "date", "boolean", "integer"].includes(field.type)
13
+ ? [
14
+ {
15
+ field: column,
16
+ type: field.type,
17
+ },
18
+ ]
19
+ : [];
20
+ });
21
+ }
22
+ /** Creation accepts the full metadata union, with every value optional. */
23
+ export function objectCreateSchema(kind) {
24
+ return z.strictObject({
25
+ externalId: udlExternalIdSchema.optional(),
26
+ fields: z
27
+ .strictObject(Object.fromEntries(kind.fields.map((field) => [
28
+ field.name,
29
+ udlFieldValueSchema(field).optional(),
30
+ ])))
31
+ .optional(),
32
+ });
33
+ }
34
+ /** Canonical UDL supplies meaning; core adds authority, instance state and readiness. */
35
+ export function projectObjectDiscovery(document, build) {
36
+ const semantics = projectDocumentSemantics(document);
37
+ return {
38
+ ...build,
39
+ semantics,
40
+ navigation: document.objects.map((kind) => ({
41
+ kind: kind.id,
42
+ title: kind.title,
43
+ creation: true,
44
+ })),
45
+ retainedKinds: [],
46
+ kinds: semantics.objects.map((kind) => ({
47
+ ...build,
48
+ creation: true,
49
+ kind: kind.id,
50
+ title: kind.title,
51
+ fields: kind.fields,
52
+ authoredFields: kind.authoredFields,
53
+ columns: kind.columns,
54
+ filters: objectKindFilters(kind),
55
+ attachments: kind.attachments.map((attachment) => ({
56
+ name: attachment.name,
57
+ title: attachment.title ??
58
+ document.instruments.find((item) => item.id === attachment.instrument)
59
+ ?.title ??
60
+ attachment.name,
61
+ instrument: attachment.instrument,
62
+ parentAttachment: attachment.parent ?? null,
63
+ block: null,
64
+ })),
65
+ createSchema: z.toJSONSchema(objectCreateSchema(kind), { io: "input" }),
66
+ actions: document.instruments
67
+ .filter((instrument) => instrument.subject === kind.id)
68
+ .flatMap((instrument) => {
69
+ const createHidden = !!instrument.actions.create &&
70
+ !instrument.actions.create.publicAction;
71
+ const attachmentRefListFields = instrument.fields.filter((field) => field.type === "list" &&
72
+ field.item === "ref" &&
73
+ field.targetKind !== "object");
74
+ return instrument.actionOrder.flatMap((name) => {
75
+ const action = instrument.actions[name];
76
+ if (!action.publicAction)
77
+ return [];
78
+ const transition = instrument.lifecycle.transitions[name];
79
+ const canStartFromInitial = Boolean(transition?.from.includes(instrument.lifecycle.initial));
80
+ const isCreationAction = name === "create" || (createHidden && canStartFromInitial);
81
+ const rawCreateReqs = isCreationAction
82
+ ? [
83
+ ...(instrument.actions.create?.subject?.requirements ?? []),
84
+ ...attachmentRefListFields.map((field) => ({
85
+ field: field,
86
+ })),
87
+ ]
88
+ : [];
89
+ const actionReqs = action.subject?.requirements ?? [];
90
+ const actionReqNames = new Set(actionReqs.map((r) => r.objectField ?? r.field.name));
91
+ const mergedReqs = actionReqs.map((requirement) => ({ ...requirement }));
92
+ for (const req of rawCreateReqs) {
93
+ const reqName = req.objectField ?? req.field.name;
94
+ const existing = mergedReqs.find((r) => (r.objectField ?? r.field.name) === reqName);
95
+ if (!existing)
96
+ mergedReqs.push({ ...req });
97
+ else if (!req.when)
98
+ delete existing.when;
99
+ else if (existing.when)
100
+ existing.when = [...existing.when, ...req.when];
101
+ }
102
+ const requirementConditions = Object.fromEntries(mergedReqs.flatMap((req) => req.when ? [[req.objectField ?? req.field.name, req.when]] : []));
103
+ const unbound = [
104
+ ...(action.subject?.adapters ?? []),
105
+ ...(isCreationAction
106
+ ? (instrument.actions.create?.subject?.adapters ?? [])
107
+ : []),
108
+ ].find((adapter) => adapter.snapshot === null);
109
+ const seenCreation = new Set();
110
+ const creationRequirements = [];
111
+ for (const requirement of rawCreateReqs) {
112
+ const name = requirement.objectField ?? requirement.field.name;
113
+ if (!seenCreation.has(name)) {
114
+ seenCreation.add(name);
115
+ creationRequirements.push({
116
+ ...requirement.field,
117
+ name,
118
+ });
119
+ }
120
+ }
121
+ const creationOnlyNames = creationRequirements
122
+ .map((field) => field.name)
123
+ .filter((name) => !actionReqNames.has(name));
124
+ return [
125
+ {
126
+ ...build,
127
+ target: {
128
+ kind: "attachment",
129
+ attachment: kind.attachments.find((attachment) => attachment.instrument === instrument.id).name,
130
+ },
131
+ name: action.publicAction,
132
+ title: action.title ?? presentationLabel(action.publicAction),
133
+ summary: action.summary,
134
+ instrument: instrument.id,
135
+ action: name,
136
+ requirements: mergedReqs.map((requirement) => ({
137
+ ...requirement.field,
138
+ name: requirement.objectField ?? requirement.field.name,
139
+ })),
140
+ ...(Object.keys(requirementConditions).length
141
+ ? { requirementConditions }
142
+ : {}),
143
+ ...(creationRequirements.length > 0
144
+ ? { creationRequirements }
145
+ : {}),
146
+ ...(creationRequirements.length > 0
147
+ ? { creationOnlyNames }
148
+ : {}),
149
+ fieldsSchema: z.toJSONSchema(z.strictObject(Object.fromEntries(mergedReqs.map((requirement) => [
150
+ requirement.objectField ?? requirement.field.name,
151
+ udlFieldValueSchema(requirement.field).optional(),
152
+ ]))), { io: "input" }),
153
+ inputSchema: z.toJSONSchema(z.strictObject(Object.fromEntries(action.input.map((field) => [
154
+ field.name,
155
+ field.optional
156
+ ? udlFieldValueSchema(field).optional()
157
+ : udlFieldValueSchema(field),
158
+ ]))), { io: "input" }),
159
+ availability: unbound
160
+ ? {
161
+ status: "unavailable",
162
+ blockers: [
163
+ {
164
+ code: "setup_required",
165
+ reason: "A required external check has not been set up.",
166
+ },
167
+ ],
168
+ }
169
+ : { status: "available" },
170
+ },
171
+ ];
172
+ });
173
+ }),
174
+ })),
175
+ };
176
+ }
177
+ /** Values overwritten before invocation cannot decide a guard during discovery. */
178
+ export function objectActionSelf(instrument, actionName, fields = {}) {
179
+ const action = instrument.actions[actionName];
180
+ const known = {
181
+ ...Object.fromEntries(instrument.fields.flatMap((field) => "value" in field ? [[field.name, field.value]] : [])),
182
+ ...fields,
183
+ };
184
+ for (const calculation of [
185
+ ...instrument.calculate,
186
+ ...(action.calculate ?? []),
187
+ ])
188
+ delete known[calculation.target];
189
+ for (const name of Object.keys(action.set ?? {}))
190
+ delete known[name];
191
+ return known;
192
+ }
193
+ /** Unknown invocation state remains possible; a known false guard suppresses a prompt. */
194
+ function requirementPossible(paths, action, fields, options) {
195
+ return paths.some((path) => path.every((condition) => {
196
+ const read = (value) => {
197
+ if ("literal" in value)
198
+ return value.literal;
199
+ const [root, name, ...tail] = value.field.split(".");
200
+ if (!name || tail.length)
201
+ return undefined;
202
+ if (root === "subject")
203
+ return fields[name];
204
+ if (condition.instrument !== action.instrument ||
205
+ condition.action !== action.action)
206
+ return undefined;
207
+ if (root === "self")
208
+ return options.self?.[name];
209
+ if (root === "input")
210
+ return options.input?.[name];
211
+ return undefined;
212
+ };
213
+ let left = read(condition.guard.left);
214
+ let right = read(condition.guard.right);
215
+ if (left === undefined || right === undefined)
216
+ return true;
217
+ try {
218
+ if (condition.valueType === "money") {
219
+ left = BigInt(String(left));
220
+ right = BigInt(String(right));
221
+ }
222
+ else if (condition.valueType === "date") {
223
+ left = Date.parse(String(left));
224
+ right = Date.parse(String(right));
225
+ if (!Number.isFinite(left) || !Number.isFinite(right))
226
+ return true;
227
+ }
228
+ }
229
+ catch {
230
+ return true;
231
+ }
232
+ if (typeof left !== typeof right ||
233
+ !["string", "number", "boolean", "bigint"].includes(typeof left))
234
+ return true;
235
+ const a = left;
236
+ const b = right;
237
+ switch (condition.guard.operator) {
238
+ case "==":
239
+ return left === right;
240
+ case "!=":
241
+ return left !== right;
242
+ case "<":
243
+ return a < b;
244
+ case "<=":
245
+ return a <= b;
246
+ case ">":
247
+ return a > b;
248
+ case ">=":
249
+ return a >= b;
250
+ }
251
+ }));
252
+ }
253
+ /** Object-specific values determine missing fields; global discovery cannot. */
254
+ export function objectActionState(action, fields, options) {
255
+ const attached = typeof options === "boolean" ? options : (options?.attached ?? false);
256
+ const creationFilter = new Set(action.creationOnlyNames ?? []);
257
+ return {
258
+ ...action,
259
+ requiredNow: action.requirements
260
+ .filter((field) => {
261
+ const conditions = action.requirementConditions &&
262
+ Object.hasOwn(action.requirementConditions, field.name)
263
+ ? action.requirementConditions[field.name]
264
+ : undefined;
265
+ if (conditions &&
266
+ !requirementPossible(conditions, action, fields, typeof options === "object" ? options : {}))
267
+ return false;
268
+ const value = fields[field.name];
269
+ const optional = field.optional || (attached && creationFilter.has(field.name));
270
+ return (!(optional && value === undefined) &&
271
+ !udlFieldValueSchema(field).safeParse(value).success);
272
+ })
273
+ .map((field) => field.name),
274
+ };
275
+ }
276
+ /** Check merged metadata before dispatch. Runtime guards add their active child requirements. */
277
+ export function validateObjectActionSubject(action, storedFields, submittedFields, options) {
278
+ const origin = `${action.instrument}.${action.action}.subject`;
279
+ const issues = [];
280
+ if (action.availability.status === "unavailable" &&
281
+ action.availability.blockers.some((blocker) => blocker.code === "setup_required")) {
282
+ issues.push({
283
+ code: "subject_adapter_unbound",
284
+ action: action.name,
285
+ origin,
286
+ message: "A required external check has not been set up.",
287
+ });
288
+ }
289
+ const admitted = new Set(action.requirements.map((field) => field.name));
290
+ for (const field of Object.keys(submittedFields)) {
291
+ if (!admitted.has(field))
292
+ issues.push({
293
+ code: "subject_field_unknown",
294
+ action: action.name,
295
+ field,
296
+ origin,
297
+ message: `${field} is not admitted by ${action.name}`,
298
+ });
299
+ }
300
+ for (const field of objectActionState(action, {
301
+ ...storedFields,
302
+ ...submittedFields,
303
+ }, options).requiredNow) {
304
+ issues.push({
305
+ code: "subject_requirement_missing",
306
+ action: action.name,
307
+ field,
308
+ origin: `${origin}.${field}`,
309
+ message: `${action.name} requires a valid ${field}`,
310
+ });
311
+ }
312
+ return issues;
313
+ }
314
+ //# sourceMappingURL=object-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-contract.js","sourceRoot":"","sources":["../src/object-contract.ts"],"names":[],"mappings":"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"}