@mcp-native/a2ui 0.1.0 → 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 (72) hide show
  1. package/README.md +74 -13
  2. package/dist/binding.d.ts +33 -0
  3. package/dist/binding.d.ts.map +1 -0
  4. package/dist/binding.js +83 -0
  5. package/dist/binding.js.map +1 -0
  6. package/dist/errors.d.ts +7 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +13 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/index.d.ts +9 -12
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -13
  13. package/dist/index.js.map +1 -1
  14. package/dist/mime.d.ts +6 -0
  15. package/dist/mime.d.ts.map +1 -0
  16. package/dist/mime.js +2 -0
  17. package/dist/mime.js.map +1 -0
  18. package/dist/schema-revision.d.ts +3 -0
  19. package/dist/schema-revision.d.ts.map +1 -0
  20. package/dist/schema-revision.js +3 -0
  21. package/dist/schema-revision.js.map +1 -0
  22. package/dist/v1/format-string.d.ts +8 -0
  23. package/dist/v1/format-string.d.ts.map +1 -0
  24. package/dist/v1/format-string.js +377 -0
  25. package/dist/v1/format-string.js.map +1 -0
  26. package/dist/v1/index.d.ts +9 -0
  27. package/dist/v1/index.d.ts.map +1 -0
  28. package/dist/v1/index.js +6 -0
  29. package/dist/v1/index.js.map +1 -0
  30. package/dist/v1/parse.d.ts +12 -0
  31. package/dist/v1/parse.d.ts.map +1 -0
  32. package/dist/v1/parse.js +96 -0
  33. package/dist/v1/parse.js.map +1 -0
  34. package/dist/v1/resolve.d.ts +19 -0
  35. package/dist/v1/resolve.d.ts.map +1 -0
  36. package/dist/v1/resolve.js +112 -0
  37. package/dist/v1/resolve.js.map +1 -0
  38. package/dist/v1/schemas.d.ts +7 -0
  39. package/dist/v1/schemas.d.ts.map +1 -0
  40. package/dist/v1/schemas.js +92 -0
  41. package/dist/v1/schemas.js.map +1 -0
  42. package/dist/v1/store.d.ts +21 -0
  43. package/dist/v1/store.d.ts.map +1 -0
  44. package/dist/v1/store.js +301 -0
  45. package/dist/v1/store.js.map +1 -0
  46. package/dist/v1/types.d.ts +58 -0
  47. package/dist/v1/types.d.ts.map +1 -0
  48. package/dist/v1/types.js +10 -0
  49. package/dist/v1/types.js.map +1 -0
  50. package/dist/v1/validate.d.ts +26 -0
  51. package/dist/v1/validate.d.ts.map +1 -0
  52. package/dist/v1/validate.js +434 -0
  53. package/dist/v1/validate.js.map +1 -0
  54. package/dist/v1/vendor/agent_to_renderer.json +216 -0
  55. package/dist/v1/vendor/catalog.json +1346 -0
  56. package/dist/v1/vendor/common_types.json +395 -0
  57. package/package.json +5 -2
  58. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/CHECKSUMS.sha256 +13 -0
  59. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/PROVENANCE.md +12 -0
  60. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/catalogs/basic/catalog.json +1346 -0
  61. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_capabilities.json +26 -0
  62. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer.json +216 -0
  63. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list.json +10 -0
  64. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/agent_to_renderer_list_wrapper.json +14 -0
  65. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/catalog_definition.json +267 -0
  66. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/common_types.json +395 -0
  67. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_capabilities.json +29 -0
  68. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_data_model.json +22 -0
  69. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent.json +161 -0
  70. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list.json +10 -0
  71. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/renderer_to_agent_list_wrapper.json +14 -0
  72. package/schemas/7541f953050cd58b80f0bf5d85fe2d63192af305/json/sample.json +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/v1/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAe,CAAC;AAExD,qEAAqE;AACrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AACnD,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { A2uiV1SurfaceState } from "./types.js";
2
+ export declare const A2UI_V1_BASIC_CATALOG_ID: "https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json";
3
+ export declare const A2UI_V1_BASIC_COMPONENT_NAMES: readonly string[];
4
+ export declare const A2UI_V1_BASIC_FUNCTION_NAMES: readonly string[];
5
+ export declare const A2UI_V1_SYSTEM_FUNCTION_NAMES: readonly string[];
6
+ export interface A2uiV1SurfaceValidationPolicy {
7
+ /** Host-bundled basic-catalog components that this surface may instantiate. */
8
+ readonly allowedComponentNames: readonly string[];
9
+ /** Agent event names the host is prepared to route after renderer adaptation. */
10
+ readonly allowedEventNames?: readonly string[];
11
+ /** Locally registered basic-catalog function names. Empty means deny all functions. */
12
+ readonly allowedFunctionNames?: readonly string[];
13
+ }
14
+ export interface A2uiV1BasicCatalogPolicyOptions {
15
+ readonly allowedComponentNames: readonly string[];
16
+ readonly allowedEventNames?: readonly string[];
17
+ readonly allowedFunctionNames?: readonly string[];
18
+ }
19
+ /** Creates an explicit host policy for the pinned basic catalog. */
20
+ export declare function createA2uiV1BasicCatalogPolicy(options: A2uiV1BasicCatalogPolicyOptions): A2uiV1SurfaceValidationPolicy;
21
+ /**
22
+ * Validates a complete surface snapshot before it crosses into a renderer.
23
+ * Store snapshots may remain incomplete while ordered lifecycle messages arrive.
24
+ */
25
+ export declare function validateA2uiV1SurfaceState(surface: A2uiV1SurfaceState, policy: A2uiV1SurfaceValidationPolicy): A2uiV1SurfaceState;
26
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/v1/validate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,wBAAwB,EACnC,iEAA0E,CAAC;AAE7E,eAAO,MAAM,6BAA6B,EAErC,SAAS,MAAM,EAAE,CAAC;AAEvB,eAAO,MAAM,4BAA4B,EAEpC,SAAS,MAAM,EAAE,CAAC;AAEvB,eAAO,MAAM,6BAA6B,EAAgC,SAAS,MAAM,EAAE,CAAC;AAO5F,MAAM,WAAW,6BAA6B;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,iFAAiF;IACjF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,uFAAuF;IACvF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED,oEAAoE;AACpE,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,6BAA6B,CAS/B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,6BAA6B,GACpC,kBAAkB,CA2EpB"}
@@ -0,0 +1,434 @@
1
+ import { JSON_MAX_VALUES } from "@mcp-native/core";
2
+ import { A2uiParseError } from "../errors.js";
3
+ import basicCatalog from "./vendor/catalog.json" with { type: "json" };
4
+ import { parseA2uiV1FormatString } from "./format-string.js";
5
+ import { parseA2uiV1Envelope } from "./parse.js";
6
+ import { formatAjvErrors, getA2uiV1FunctionCallValidator } from "./schemas.js";
7
+ import { A2UI_V1_MAX_COMPONENTS, A2UI_V1_MAX_SOURCE_LENGTH } from "./types.js";
8
+ export const A2UI_V1_BASIC_CATALOG_ID = "https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json";
9
+ export const A2UI_V1_BASIC_COMPONENT_NAMES = Object.freeze(Object.keys(basicCatalog.components));
10
+ export const A2UI_V1_BASIC_FUNCTION_NAMES = Object.freeze(Object.keys(basicCatalog.functions));
11
+ export const A2UI_V1_SYSTEM_FUNCTION_NAMES = Object.freeze(["@index"]);
12
+ const A2UI_V1_KNOWN_FUNCTION_NAMES = new Set([
13
+ ...A2UI_V1_BASIC_FUNCTION_NAMES,
14
+ ...A2UI_V1_SYSTEM_FUNCTION_NAMES,
15
+ ]);
16
+ /** Creates an explicit host policy for the pinned basic catalog. */
17
+ export function createA2uiV1BasicCatalogPolicy(options) {
18
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
19
+ throw new A2uiParseError("Expected A2UI basic catalog policy options to be an object");
20
+ }
21
+ return Object.freeze({
22
+ allowedComponentNames: freezeStrings(options.allowedComponentNames, "allowedComponentNames"),
23
+ allowedEventNames: freezeStrings(options.allowedEventNames ?? []),
24
+ allowedFunctionNames: freezeStrings(options.allowedFunctionNames ?? []),
25
+ });
26
+ }
27
+ /**
28
+ * Validates a complete surface snapshot before it crosses into a renderer.
29
+ * Store snapshots may remain incomplete while ordered lifecycle messages arrive.
30
+ */
31
+ export function validateA2uiV1SurfaceState(surface, policy) {
32
+ if (policy === null || typeof policy !== "object" || Array.isArray(policy)) {
33
+ throw new A2uiParseError("Expected A2UI surface validation policy to be an object");
34
+ }
35
+ const allowedComponents = parseAllowedNames(policy.allowedComponentNames, "policy.allowedComponentNames", new Set(A2UI_V1_BASIC_COMPONENT_NAMES));
36
+ const allowedEvents = parseAllowedNames(policy.allowedEventNames ?? [], "policy.allowedEventNames");
37
+ const allowedFunctions = parseAllowedNames(policy.allowedFunctionNames ?? [], "policy.allowedFunctionNames", A2UI_V1_KNOWN_FUNCTION_NAMES);
38
+ const validatedSurface = reconstructSurfaceSnapshot(surface);
39
+ validateCatalogId(validatedSurface.catalogId, "surface.catalogId");
40
+ if (!validatedSurface.components.has("root")) {
41
+ throw new A2uiParseError('A complete A2UI surface must define component "root"');
42
+ }
43
+ const edges = new Map();
44
+ for (const [id, component] of validatedSurface.components) {
45
+ if (component.id !== id) {
46
+ throw new A2uiParseError(`A2UI component map key ${JSON.stringify(id)} does not match component id ${JSON.stringify(component.id)}`);
47
+ }
48
+ if (!allowedComponents.has(component.component)) {
49
+ throw new A2uiParseError(`A2UI component ${JSON.stringify(id)} uses host-denied component ${JSON.stringify(component.component)}`);
50
+ }
51
+ validateCatalogId(component.catalogId, `components.${id}.catalogId`);
52
+ edges.set(id, getComponentEdges(component));
53
+ }
54
+ rejectGraphCycles(edges);
55
+ const contexts = collectComponentContexts(edges);
56
+ for (const [parentId, references] of edges) {
57
+ if (!contexts.has(parentId)) {
58
+ continue;
59
+ }
60
+ for (const reference of references) {
61
+ if (!validatedSurface.components.has(reference.id)) {
62
+ throw new A2uiParseError(`A2UI component ${JSON.stringify(parentId)} references missing child ${JSON.stringify(reference.id)}`);
63
+ }
64
+ }
65
+ }
66
+ validateComponentPlacement(validatedSurface.components, edges, contexts);
67
+ const semanticsPolicy = {
68
+ allowedEvents,
69
+ allowedFunctions,
70
+ formatStringExpressionCount: 0,
71
+ formatStringSourceLength: 0,
72
+ };
73
+ for (const [id, component] of validatedSurface.components) {
74
+ const componentContexts = contexts.get(id);
75
+ if (componentContexts === undefined) {
76
+ continue;
77
+ }
78
+ for (const context of componentContexts) {
79
+ validateComponentAction(component, id, context, semanticsPolicy);
80
+ validateSemanticValue(component, `components.${id}`, context, semanticsPolicy);
81
+ }
82
+ }
83
+ return validatedSurface;
84
+ }
85
+ function reconstructSurfaceSnapshot(input) {
86
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
87
+ throw new A2uiParseError("Expected an A2UI surface snapshot object");
88
+ }
89
+ const prototype = Object.getPrototypeOf(input);
90
+ if (prototype !== Object.prototype && prototype !== null) {
91
+ throw new A2uiParseError("Expected a plain A2UI surface snapshot object");
92
+ }
93
+ const source = input;
94
+ const allowedKeys = new Set([
95
+ "catalogId",
96
+ "components",
97
+ "dataModel",
98
+ "metadata",
99
+ "sendDataModel",
100
+ "surfaceId",
101
+ ]);
102
+ for (const key of Object.keys(source)) {
103
+ if (!allowedKeys.has(key)) {
104
+ throw new A2uiParseError(`Unexpected A2UI surface snapshot field ${JSON.stringify(key)}`);
105
+ }
106
+ }
107
+ if (!(source.components instanceof Map)) {
108
+ throw new A2uiParseError("Expected a Map at surface.components");
109
+ }
110
+ if (source.components.size > A2UI_V1_MAX_COMPONENTS) {
111
+ throw new A2uiParseError(`A2UI surface exceeds maximum of ${A2UI_V1_MAX_COMPONENTS} components`);
112
+ }
113
+ const sourceEntries = [...source.components.entries()];
114
+ const createSurface = {
115
+ surfaceId: source.surfaceId,
116
+ sendDataModel: source.sendDataModel,
117
+ dataModel: source.dataModel,
118
+ };
119
+ if (sourceEntries.length > 0) {
120
+ createSurface.components = sourceEntries.map((entry) => entry[1]);
121
+ }
122
+ if (source.catalogId !== undefined) {
123
+ createSurface.catalogId = source.catalogId;
124
+ }
125
+ if (source.metadata !== undefined) {
126
+ createSurface.metadata = source.metadata;
127
+ }
128
+ const envelope = parseA2uiV1Envelope({ version: "v1.0", createSurface });
129
+ if (!("createSurface" in envelope)) {
130
+ throw new A2uiParseError("Expected a validated createSurface snapshot");
131
+ }
132
+ const components = new Map();
133
+ for (const [index, component] of (envelope.createSurface.components ?? []).entries()) {
134
+ const sourceKey = sourceEntries[index]?.[0];
135
+ if (sourceKey !== component.id) {
136
+ throw new A2uiParseError(`A2UI component map key ${JSON.stringify(sourceKey)} does not match component id ${JSON.stringify(component.id)}`);
137
+ }
138
+ if (components.has(component.id)) {
139
+ throw new A2uiParseError(`Duplicate A2UI component id ${JSON.stringify(component.id)} in surface snapshot`);
140
+ }
141
+ components.set(component.id, component);
142
+ }
143
+ return {
144
+ surfaceId: envelope.createSurface.surfaceId,
145
+ ...(envelope.createSurface.catalogId === undefined
146
+ ? {}
147
+ : { catalogId: envelope.createSurface.catalogId }),
148
+ sendDataModel: envelope.createSurface.sendDataModel === true,
149
+ components,
150
+ dataModel: envelope.createSurface.dataModel ?? {},
151
+ ...(envelope.createSurface.metadata === undefined
152
+ ? {}
153
+ : { metadata: envelope.createSurface.metadata }),
154
+ };
155
+ }
156
+ function getComponentEdges(component) {
157
+ switch (component.component) {
158
+ case "Row":
159
+ case "Column":
160
+ case "List":
161
+ return getChildListEdges(component.children);
162
+ case "Card":
163
+ case "Button":
164
+ return [{ id: component.child, template: false }];
165
+ case "Tabs":
166
+ return component.tabs.map(({ child }) => ({
167
+ id: child,
168
+ template: false,
169
+ }));
170
+ case "Modal":
171
+ return [
172
+ { id: component.trigger, template: false },
173
+ { id: component.content, template: false },
174
+ ];
175
+ default:
176
+ return [];
177
+ }
178
+ }
179
+ function getChildListEdges(value) {
180
+ if (Array.isArray(value)) {
181
+ return value.map((id) => ({ id: id, template: false }));
182
+ }
183
+ const template = value;
184
+ return [{ id: template.componentId, template: true }];
185
+ }
186
+ function rejectGraphCycles(edges) {
187
+ const visiting = new Set();
188
+ const visited = new Set();
189
+ const visit = (id) => {
190
+ if (visiting.has(id)) {
191
+ throw new A2uiParseError(`A2UI component graph contains a cycle at ${JSON.stringify(id)}`);
192
+ }
193
+ if (visited.has(id)) {
194
+ return;
195
+ }
196
+ visiting.add(id);
197
+ for (const edge of edges.get(id) ?? []) {
198
+ visit(edge.id);
199
+ }
200
+ visiting.delete(id);
201
+ visited.add(id);
202
+ };
203
+ visit("root");
204
+ }
205
+ function collectComponentContexts(edges) {
206
+ const contexts = new Map();
207
+ const queue = [
208
+ { id: "root", context: "surface" },
209
+ ];
210
+ for (let index = 0; index < queue.length; index += 1) {
211
+ const current = queue[index];
212
+ const existing = contexts.get(current.id) ?? new Set();
213
+ if (existing.has(current.context)) {
214
+ continue;
215
+ }
216
+ existing.add(current.context);
217
+ contexts.set(current.id, existing);
218
+ for (const edge of edges.get(current.id) ?? []) {
219
+ queue.push({
220
+ id: edge.id,
221
+ context: current.context === "template" || edge.template ? "template" : "surface",
222
+ });
223
+ }
224
+ }
225
+ return contexts;
226
+ }
227
+ function validateSemanticValue(value, path, context, policy) {
228
+ if (value === null || typeof value !== "object") {
229
+ return;
230
+ }
231
+ if (Array.isArray(value)) {
232
+ for (const [index, child] of value.entries()) {
233
+ validateSemanticValue(child, `${path}[${index}]`, context, policy);
234
+ }
235
+ return;
236
+ }
237
+ const object = value;
238
+ if (Object.hasOwn(object, "call")) {
239
+ validateFunctionCall(object, path, context, policy);
240
+ return;
241
+ }
242
+ if (Object.hasOwn(object, "path")) {
243
+ const bindingPath = object.path;
244
+ const isTemplateList = Object.hasOwn(object, "componentId");
245
+ validateBindingPath(bindingPath, path, isTemplateList ? "surface" : context);
246
+ return;
247
+ }
248
+ for (const [key, child] of Object.entries(object)) {
249
+ if (key === "action" || key === "metadata") {
250
+ continue;
251
+ }
252
+ validateSemanticValue(child, `${path}.${key}`, context, policy);
253
+ }
254
+ }
255
+ function validateComponentAction(component, id, context, policy) {
256
+ if (!Object.hasOwn(component, "action")) {
257
+ return;
258
+ }
259
+ const action = component.action;
260
+ if (!Object.hasOwn(action, "event")) {
261
+ if (Object.hasOwn(action, "functionCall")) {
262
+ validateDynamicValue(action.functionCall, `components.${id}.action.functionCall`, context, policy);
263
+ }
264
+ return;
265
+ }
266
+ const event = action.event;
267
+ const eventName = event.name;
268
+ if (eventName.length === 0 || !policy.allowedEvents.has(eventName)) {
269
+ throw new A2uiParseError(`A2UI event ${JSON.stringify(eventName)} at components.${id}.action.event.name is not allowed by the host`);
270
+ }
271
+ if (Object.hasOwn(event, "userMessage")) {
272
+ validateDynamicValue(event.userMessage, `components.${id}.action.event.userMessage`, context, policy);
273
+ }
274
+ if (Object.hasOwn(event, "context")) {
275
+ const eventContext = event.context;
276
+ for (const [name, value] of Object.entries(eventContext)) {
277
+ validateDynamicValue(value, `components.${id}.action.event.context.${name}`, context, policy);
278
+ }
279
+ }
280
+ }
281
+ function validateDynamicValue(value, path, context, policy) {
282
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
283
+ return;
284
+ }
285
+ const object = value;
286
+ if (Object.hasOwn(object, "call")) {
287
+ validateFunctionCall(object, path, context, policy);
288
+ return;
289
+ }
290
+ if (Object.hasOwn(object, "path")) {
291
+ validateBindingPath(object.path, path, context);
292
+ }
293
+ }
294
+ function validateFunctionCall(object, path, context, policy) {
295
+ const functionName = object.call;
296
+ if (Object.hasOwn(object, "catalogId")) {
297
+ validateCatalogId(object.catalogId, `${path}.catalogId`);
298
+ }
299
+ if (!policy.allowedFunctions.has(functionName)) {
300
+ throw new A2uiParseError(`A2UI function ${JSON.stringify(functionName)} at ${path}.call is not allowed by the host`);
301
+ }
302
+ if (functionName === "@index" && context !== "template") {
303
+ throw new A2uiParseError(`A2UI system function "@index" at ${path}.call is only valid inside a dynamic-list template`);
304
+ }
305
+ if (functionName === "formatString") {
306
+ validateFormatString(object, path, context, policy);
307
+ }
308
+ if (Object.hasOwn(object, "args")) {
309
+ const args = object.args;
310
+ for (const [name, value] of Object.entries(args)) {
311
+ validateDynamicValue(value, `${path}.args.${name}`, context, policy);
312
+ }
313
+ }
314
+ }
315
+ function validateFormatString(object, path, context, policy) {
316
+ const args = object.args;
317
+ const source = args.value;
318
+ if (typeof source !== "string") {
319
+ throw new A2uiParseError(`A2UI formatString at ${path}.args.value requires a literal string so every interpolation can be validated`);
320
+ }
321
+ policy.formatStringSourceLength += source.length;
322
+ if (policy.formatStringSourceLength > A2UI_V1_MAX_SOURCE_LENGTH) {
323
+ throw new A2uiParseError(`A2UI formatString source exceeds cumulative maximum length of ${A2UI_V1_MAX_SOURCE_LENGTH}`);
324
+ }
325
+ const parsed = parseA2uiV1FormatString(source, `${path}.args.value`);
326
+ policy.formatStringExpressionCount += parsed.expressionCount;
327
+ if (policy.formatStringExpressionCount > JSON_MAX_VALUES) {
328
+ throw new A2uiParseError(`A2UI surface exceeds maximum of ${JSON_MAX_VALUES} formatString expressions`);
329
+ }
330
+ for (const [index, expression] of parsed.expressions.entries()) {
331
+ const expressionPath = `${path}.args.value.interpolations[${index}]`;
332
+ if (expression !== null &&
333
+ typeof expression === "object" &&
334
+ !Array.isArray(expression) &&
335
+ Object.hasOwn(expression, "call")) {
336
+ const validate = getA2uiV1FunctionCallValidator();
337
+ if (!validate(expression)) {
338
+ throw new A2uiParseError(`A2UI formatString function schema validation failed at ${expressionPath}: ${formatAjvErrors(validate)}`);
339
+ }
340
+ }
341
+ validateDynamicValue(expression, expressionPath, context, policy);
342
+ }
343
+ }
344
+ function validateBindingPath(path, location, context) {
345
+ if (path.length === 0) {
346
+ return;
347
+ }
348
+ if (path.startsWith("/")) {
349
+ for (const token of path.slice(1).split("/")) {
350
+ validatePointerToken(token, path, location);
351
+ }
352
+ return;
353
+ }
354
+ if (context !== "template") {
355
+ throw new A2uiParseError(`Relative A2UI binding ${JSON.stringify(path)} at ${location}.path is only valid inside a dynamic-list template`);
356
+ }
357
+ for (const token of path.split("/")) {
358
+ if (token.length === 0) {
359
+ throw new A2uiParseError(`Invalid relative A2UI binding ${JSON.stringify(path)} at ${location}.path`);
360
+ }
361
+ validatePointerToken(token, path, location);
362
+ }
363
+ }
364
+ function validatePointerToken(token, path, location) {
365
+ for (let index = 0; index < token.length; index += 1) {
366
+ if (token[index] !== "~") {
367
+ continue;
368
+ }
369
+ const escaped = token[index + 1];
370
+ if (escaped !== "0" && escaped !== "1") {
371
+ throw new A2uiParseError(`Invalid JSON Pointer escape in A2UI binding ${JSON.stringify(path)} at ${location}.path`);
372
+ }
373
+ index += 1;
374
+ }
375
+ }
376
+ function validateCatalogId(value, path) {
377
+ if (value !== undefined && value !== A2UI_V1_BASIC_CATALOG_ID) {
378
+ throw new A2uiParseError(`Unsupported A2UI catalog ${JSON.stringify(value)} at ${path}; only the pinned basic catalog is available`);
379
+ }
380
+ }
381
+ function parseAllowedNames(value, path, knownNames) {
382
+ if (!Array.isArray(value)) {
383
+ throw new A2uiParseError(`Expected an array at ${path}`);
384
+ }
385
+ const names = new Set();
386
+ for (const [index, name] of value.entries()) {
387
+ if (typeof name !== "string" || name.length === 0) {
388
+ throw new A2uiParseError(`Expected a non-empty string at ${path}[${index}]`);
389
+ }
390
+ if (knownNames !== undefined && !knownNames.has(name)) {
391
+ throw new A2uiParseError(`Unknown pinned-catalog name ${JSON.stringify(name)} at ${path}`);
392
+ }
393
+ names.add(name);
394
+ }
395
+ return names;
396
+ }
397
+ function freezeStrings(value, path = "policy option") {
398
+ if (!Array.isArray(value)) {
399
+ throw new A2uiParseError(`Expected an array at ${path}`);
400
+ }
401
+ for (const [index, name] of value.entries()) {
402
+ if (typeof name !== "string" || name.length === 0) {
403
+ throw new A2uiParseError(`Expected a non-empty string at ${path}[${index}]`);
404
+ }
405
+ }
406
+ return Object.freeze([...value]);
407
+ }
408
+ function validateComponentPlacement(components, edges, contexts) {
409
+ const parents = new Map();
410
+ for (const [parentId, children] of edges) {
411
+ if (!contexts.has(parentId)) {
412
+ continue;
413
+ }
414
+ for (const child of children) {
415
+ const childParents = parents.get(child.id) ?? [];
416
+ childParents.push(parentId);
417
+ parents.set(child.id, childParents);
418
+ }
419
+ }
420
+ for (const [id, component] of components) {
421
+ if (!contexts.has(id) || !Object.hasOwn(component, "weight")) {
422
+ continue;
423
+ }
424
+ const componentParents = parents.get(id) ?? [];
425
+ if (componentParents.length === 0 ||
426
+ componentParents.some((parentId) => {
427
+ const parentName = components.get(parentId)?.component;
428
+ return parentName !== "Row" && parentName !== "Column";
429
+ })) {
430
+ throw new A2uiParseError(`A2UI component ${JSON.stringify(id)} may use weight only as a direct child of Row or Column`);
431
+ }
432
+ }
433
+ }
434
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/v1/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,YAAY,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG/E,MAAM,CAAC,MAAM,wBAAwB,GACnC,iEAA0E,CAAC;AAE7E,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CACxD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChB,CAAC;AAEvB,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CACvD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CACf,CAAC;AAEvB,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAsB,CAAC;AAE5F,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,GAAG,4BAA4B;IAC/B,GAAG,6BAA6B;CACjC,CAAC,CAAC;AAiBH,oEAAoE;AACpE,MAAM,UAAU,8BAA8B,CAC5C,OAAwC;IAExC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,cAAc,CAAC,4DAA4D,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,qBAAqB,EAAE,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;QAC5F,iBAAiB,EAAE,aAAa,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACjE,oBAAoB,EAAE,aAAa,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;KACxE,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAA2B,EAC3B,MAAqC;IAErC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,cAAc,CAAC,yDAAyD,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,iBAAiB,GAAG,iBAAiB,CACzC,MAAM,CAAC,qBAAqB,EAC5B,8BAA8B,EAC9B,IAAI,GAAG,CAAC,6BAA6B,CAAC,CACvC,CAAC;IACF,MAAM,aAAa,GAAG,iBAAiB,CACrC,MAAM,CAAC,iBAAiB,IAAI,EAAE,EAC9B,0BAA0B,CAC3B,CAAC;IACF,MAAM,gBAAgB,GAAG,iBAAiB,CACxC,MAAM,CAAC,oBAAoB,IAAI,EAAE,EACjC,6BAA6B,EAC7B,4BAA4B,CAC7B,CAAC;IAEF,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC7D,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACnE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,cAAc,CAAC,sDAAsD,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoC,CAAC;IAC1D,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAC1D,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,cAAc,CACtB,0BAA0B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAC3G,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,cAAc,CACtB,kBAAkB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACzG,CAAC;QACJ,CAAC;QACD,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QACrE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,cAAc,CACtB,kBAAkB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CACtG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,0BAA0B,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEzE,MAAM,eAAe,GAAoB;QACvC,aAAa;QACb,gBAAgB;QAChB,2BAA2B,EAAE,CAAC;QAC9B,wBAAwB,EAAE,CAAC;KAC5B,CAAC;IACF,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAC1D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,SAAS;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACxC,uBAAuB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;YACjE,qBAAqB,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAgBD,SAAS,0BAA0B,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,cAAc,CAAC,0CAA0C,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,cAAc,CAAC,+CAA+C,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,WAAW;QACX,YAAY;QACZ,WAAW;QACX,UAAU;QACV,eAAe;QACf,WAAW;KACZ,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,cAAc,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,YAAY,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,cAAc,CAAC,sCAAsC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACpD,MAAM,IAAI,cAAc,CACtB,mCAAmC,sBAAsB,aAAa,CACvE,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAGjD,CAAC;IACL,MAAM,aAAa,GAA4B;QAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,eAAe,IAAI,QAAQ,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,cAAc,CAAC,6CAA6C,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;IACtD,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrF,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,cAAc,CACtB,0BAA0B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAClH,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,cAAc,CACtB,+BAA+B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,sBAAsB,CAClF,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS;QAC3C,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACpD,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI;QAC5D,UAAU;QACV,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE;QACjD,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,KAAK,SAAS;YAC/C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA0B;IACnD,QAAQ,SAAS,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,KAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM;YACT,OAAQ,SAAS,CAAC,IAA8C,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnF,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,KAAK,OAAO;YACV,OAAO;gBACL,EAAE,EAAE,EAAE,SAAS,CAAC,OAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACpD,EAAE,EAAE,EAAE,SAAS,CAAC,OAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE;aACrD,CAAC;QACJ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA4B;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,QAAQ,GAAG,KAAyC,CAAC;IAC3D,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAoD;IAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAQ,EAAE;QACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,cAAc,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAoD;IAEpD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IACxD,MAAM,KAAK,GAAgE;QACzE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;KACnC,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;QACvE,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;aAClF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAgB,EAChB,IAAY,EACZ,OAAuB,EACvB,MAAuB;IAEvB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,qBAAqB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,KAAkC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAc,CAAC;QAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5D,mBAAmB,CAAC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,qBAAqB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAA0B,EAC1B,EAAU,EACV,OAAuB,EACvB,MAAuB;IAEvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAmC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAC1C,oBAAoB,CAClB,MAAM,CAAC,YAAa,EACpB,cAAc,EAAE,sBAAsB,EACtC,OAAO,EACP,MAAM,CACP,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAc,CAAC;IACvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,cAAc,CACtB,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,EAAE,+CAA+C,CAC3G,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;QACxC,oBAAoB,CAClB,KAAK,CAAC,WAAY,EAClB,cAAc,EAAE,2BAA2B,EAC3C,OAAO,EACP,MAAM,CACP,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAoC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,yBAAyB,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAgB,EAChB,IAAY,EACZ,OAAuB,EACvB,MAAuB;IAEvB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,KAAkC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,mBAAmB,CAAC,MAAM,CAAC,IAAc,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAiC,EACjC,IAAY,EACZ,OAAuB,EACvB,MAAuB;IAEvB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAc,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;QACvC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,cAAc,CACtB,iBAAiB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,IAAI,kCAAkC,CAC3F,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QACxD,MAAM,IAAI,cAAc,CACtB,oCAAoC,IAAI,oDAAoD,CAC7F,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,KAAK,cAAc,EAAE,CAAC;QACpC,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAiC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,oBAAoB,CAAC,KAAK,EAAE,GAAG,IAAI,SAAS,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAiC,EACjC,IAAY,EACZ,OAAuB,EACvB,MAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAiC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,cAAc,CACtB,wBAAwB,IAAI,+EAA+E,CAC5G,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,wBAAwB,IAAI,MAAM,CAAC,MAAM,CAAC;IACjD,IAAI,MAAM,CAAC,wBAAwB,GAAG,yBAAyB,EAAE,CAAC;QAChE,MAAM,IAAI,cAAc,CACtB,iEAAiE,yBAAyB,EAAE,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IACrE,MAAM,CAAC,2BAA2B,IAAI,MAAM,CAAC,eAAe,CAAC;IAC7D,IAAI,MAAM,CAAC,2BAA2B,GAAG,eAAe,EAAE,CAAC;QACzD,MAAM,IAAI,cAAc,CACtB,mCAAmC,eAAe,2BAA2B,CAC9E,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/D,MAAM,cAAc,GAAG,GAAG,IAAI,8BAA8B,KAAK,GAAG,CAAC;QACrE,IACE,UAAU,KAAK,IAAI;YACnB,OAAO,UAAU,KAAK,QAAQ;YAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EACjC,CAAC;YACD,MAAM,QAAQ,GAAG,8BAA8B,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,cAAc,CACtB,0DAA0D,cAAc,KAAK,eAAe,CAAC,QAAQ,CAAC,EAAE,CACzG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAgB,EAAE,OAAuB;IAClF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,CACtB,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,QAAQ,oDAAoD,CACjH,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,cAAc,CACtB,iCAAiC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,CAC5E,CAAC;QACJ,CAAC;QACD,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,IAAY,EAAE,QAAgB;IACzE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACvC,MAAM,IAAI,cAAc,CACtB,+CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,CAC1F,CAAC;QACJ,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA4B,EAAE,IAAY;IACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,wBAAwB,EAAE,CAAC;QAC9D,MAAM,IAAI,cAAc,CACtB,4BAA4B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,8CAA8C,CAC3G,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAwB,EACxB,IAAY,EACZ,UAAgC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,cAAc,CAAC,kCAAkC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,cAAc,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB,EAAE,IAAI,GAAG,eAAe;IACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,cAAc,CAAC,kCAAkC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAgD,EAChD,KAAoD,EACpD,QAA0D;IAE1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACjD,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/C,IACE,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC7B,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;gBACvD,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,QAAQ,CAAC;YACzD,CAAC,CAAC,EACF,CAAC;YACD,MAAM,IAAI,cAAc,CACtB,kBAAkB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,yDAAyD,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}