@altopelago/aeos-core 0.10.0 → 0.12.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 (42) hide show
  1. package/README.md +36 -0
  2. package/dist/index.d.ts +5 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/rules/numericForm.d.ts.map +1 -1
  7. package/dist/rules/numericForm.js +1 -9
  8. package/dist/rules/numericForm.js.map +1 -1
  9. package/dist/rules/presence.d.ts.map +1 -1
  10. package/dist/rules/presence.js +0 -2
  11. package/dist/rules/presence.js.map +1 -1
  12. package/dist/rules/referenceForm.d.ts.map +1 -1
  13. package/dist/rules/referenceForm.js +9 -3
  14. package/dist/rules/referenceForm.js.map +1 -1
  15. package/dist/rules/schemaIndex.d.ts.map +1 -1
  16. package/dist/rules/schemaIndex.js +27 -2
  17. package/dist/rules/schemaIndex.js.map +1 -1
  18. package/dist/rules/stringForm.js +2 -1
  19. package/dist/rules/stringForm.js.map +1 -1
  20. package/dist/rules/typeCheck.d.ts +1 -0
  21. package/dist/rules/typeCheck.d.ts.map +1 -1
  22. package/dist/rules/typeCheck.js +7 -2
  23. package/dist/rules/typeCheck.js.map +1 -1
  24. package/dist/schema-codec.d.ts +19 -0
  25. package/dist/schema-codec.d.ts.map +1 -0
  26. package/dist/schema-codec.js +424 -0
  27. package/dist/schema-codec.js.map +1 -0
  28. package/dist/schema-tools.d.ts +90 -0
  29. package/dist/schema-tools.d.ts.map +1 -0
  30. package/dist/schema-tools.js +465 -0
  31. package/dist/schema-tools.js.map +1 -0
  32. package/dist/types/schema.d.ts +25 -4
  33. package/dist/types/schema.d.ts.map +1 -1
  34. package/dist/types/schema.js.map +1 -1
  35. package/dist/util/datatypes.d.ts +13 -0
  36. package/dist/util/datatypes.d.ts.map +1 -0
  37. package/dist/util/datatypes.js +50 -0
  38. package/dist/util/datatypes.js.map +1 -0
  39. package/dist/validate.d.ts.map +1 -1
  40. package/dist/validate.js +123 -198
  41. package/dist/validate.js.map +1 -1
  42. package/package.json +8 -3
@@ -0,0 +1,424 @@
1
+ /**
2
+ * @altopelago/aeos-core - Schema source codec
3
+ *
4
+ * Parses and prints AEOS schema documents expressed as AEON source.
5
+ */
6
+ import { compile } from '@altopelago/aeon-core';
7
+ import { finalizeJson } from '@altopelago/aeon-finalize';
8
+ import { parseAddress, renderAddress } from '@altopelago/sansa';
9
+ export class SchemaCodecError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = 'SchemaCodecError';
13
+ }
14
+ }
15
+ export function parseSchemaSource(source, options = {}) {
16
+ const compiled = compile(source, {
17
+ ...options.compileOptions,
18
+ datatypePolicy: options.compileOptions?.datatypePolicy ?? 'allow_custom',
19
+ });
20
+ if (compiled.errors.length > 0) {
21
+ throw new SchemaCodecError(formatErrors(compiled.errors));
22
+ }
23
+ const finalized = finalizeJson(compiled.events, {
24
+ mode: 'strict',
25
+ scope: 'payload',
26
+ ...options.finalizeOptions,
27
+ });
28
+ const errors = finalized.meta?.errors ?? [];
29
+ if (errors.length > 0) {
30
+ throw new SchemaCodecError(formatErrors(errors));
31
+ }
32
+ return normalizeSchemaObject(finalized.document);
33
+ }
34
+ export function normalizeSchemaObject(input) {
35
+ const root = extractSchemaRoot(input);
36
+ const rules = normalizeRules(root.rules);
37
+ const schema = { rules };
38
+ if (root.evolution !== undefined) {
39
+ schema.evolution = normalizeEvolution(root.evolution, rules);
40
+ }
41
+ if (root.world !== undefined) {
42
+ if (root.world !== 'open' && root.world !== 'closed') {
43
+ throw new SchemaCodecError("Schema field 'world' must be 'open' or 'closed'");
44
+ }
45
+ schema.world = root.world;
46
+ }
47
+ if (root.reference_policy !== undefined) {
48
+ if (root.reference_policy !== 'allow' && root.reference_policy !== 'forbid') {
49
+ throw new SchemaCodecError("Schema field 'reference_policy' must be 'allow' or 'forbid'");
50
+ }
51
+ schema.reference_policy = root.reference_policy;
52
+ }
53
+ if (root.attribute_policy !== undefined) {
54
+ if (root.attribute_policy !== 'inherit_world' && root.attribute_policy !== 'forbid') {
55
+ throw new SchemaCodecError("Schema field 'attribute_policy' must be 'inherit_world' or 'forbid'");
56
+ }
57
+ schema.attribute_policy = root.attribute_policy;
58
+ }
59
+ if (root.datatype_rules !== undefined) {
60
+ if (!isRecord(root.datatype_rules)) {
61
+ throw new SchemaCodecError("Schema field 'datatype_rules' must be an object");
62
+ }
63
+ schema.datatype_rules = normalizeConstraintMap(root.datatype_rules, 'datatype_rules');
64
+ }
65
+ if (root.resource_policy !== undefined) {
66
+ if (!isRecord(root.resource_policy)) {
67
+ throw new SchemaCodecError("Schema field 'resource_policy' must be an object");
68
+ }
69
+ schema.resource_policy = cloneJsonObject(root.resource_policy);
70
+ }
71
+ return schema;
72
+ }
73
+ export function schemaToAeon(input) {
74
+ const schema = normalizeSchemaObject(input);
75
+ const lines = [
76
+ '//! format:aeos-v1',
77
+ 'aeos:schema = {',
78
+ ];
79
+ if (schema.world !== undefined) {
80
+ lines.push(` world:string = ${renderString(schema.world)}`);
81
+ }
82
+ if (schema.reference_policy !== undefined) {
83
+ lines.push(` reference_policy:string = ${renderString(schema.reference_policy)}`);
84
+ }
85
+ if (schema.attribute_policy !== undefined) {
86
+ lines.push(` attribute_policy:string = ${renderString(schema.attribute_policy)}`);
87
+ }
88
+ if (schema.datatype_rules !== undefined) {
89
+ lines.push(` datatype_rules:object = ${renderAeonValue(schema.datatype_rules, 2)}`);
90
+ }
91
+ if (schema.resource_policy !== undefined) {
92
+ lines.push(` resource_policy:object = ${renderAeonValue(schema.resource_policy, 2)}`);
93
+ }
94
+ if (schema.evolution !== undefined) {
95
+ lines.push(` evolution:list<object> = ${renderAeonValue(schema.evolution, 2)}`);
96
+ }
97
+ lines.push(' rules:list<object> = [');
98
+ for (const rule of schema.rules) {
99
+ lines.push(' {');
100
+ if (rule.declaration_id !== undefined) {
101
+ lines.push(` declaration_id:string = ${renderString(rule.declaration_id)}`);
102
+ }
103
+ if (rule.lineage_id !== undefined) {
104
+ lines.push(` lineage_id:string = ${renderString(rule.lineage_id)}`);
105
+ }
106
+ if (rule.label !== undefined) {
107
+ lines.push(` label:string = ${renderString(rule.label)}`);
108
+ }
109
+ if (rule.description !== undefined) {
110
+ lines.push(` description:string = ${renderString(rule.description)}`);
111
+ }
112
+ if (rule.path !== undefined) {
113
+ lines.push(` path:sansa = ${canonicalAddress(rule.path, 'path')}`);
114
+ }
115
+ else if (rule.selector !== undefined) {
116
+ lines.push(` selector:sansa = ${canonicalAddress(rule.selector, 'selector')}`);
117
+ }
118
+ lines.push(` constraints:object = ${renderAeonValue(rule.constraints, 3)}`);
119
+ lines.push(' }');
120
+ }
121
+ lines.push(' ]');
122
+ lines.push('}');
123
+ return `${lines.join('\n')}\n`;
124
+ }
125
+ function extractSchemaRoot(input) {
126
+ const document = isRecord(input) && isRecord(input.payload) ? input.payload : input;
127
+ if (!isRecord(document)) {
128
+ throw new SchemaCodecError('AEOS schema source must finalize to an object');
129
+ }
130
+ if (isRecord(document.aeos)) {
131
+ return document.aeos;
132
+ }
133
+ if (isRecord(document.schema)) {
134
+ return document.schema;
135
+ }
136
+ return document;
137
+ }
138
+ function normalizeRules(value) {
139
+ let rules;
140
+ if (Array.isArray(value)) {
141
+ rules = value.map((rule, index) => normalizeRule(rule, `rules[${index}]`));
142
+ }
143
+ else if (isRecord(value)) {
144
+ rules = Object.entries(value).map(([path, constraints]) => normalizeRule({ path, constraints }, `rules.${path}`));
145
+ }
146
+ else if (value === undefined) {
147
+ rules = [];
148
+ }
149
+ else {
150
+ throw new SchemaCodecError("Schema field 'rules' must be a list or object");
151
+ }
152
+ const declarationIds = new Set();
153
+ for (const rule of rules) {
154
+ if (rule.declaration_id === undefined)
155
+ continue;
156
+ if (declarationIds.has(rule.declaration_id)) {
157
+ throw new SchemaCodecError(`Schema declaration_id '${rule.declaration_id}' must be unique`);
158
+ }
159
+ declarationIds.add(rule.declaration_id);
160
+ }
161
+ return rules;
162
+ }
163
+ function normalizeRule(input, label) {
164
+ if (!isRecord(input)) {
165
+ throw new SchemaCodecError(`Schema rule ${label} must be an object`);
166
+ }
167
+ const path = optionalString(input.path, `${label}.path`);
168
+ const selector = optionalString(input.selector, `${label}.selector`);
169
+ const declarationId = optionalSchemaIdentity(input.declaration_id, `${label}.declaration_id`);
170
+ const lineageId = optionalSchemaIdentity(input.lineage_id, `${label}.lineage_id`);
171
+ const ruleLabel = optionalMetadataText(input.label, `${label}.label`, 160);
172
+ const description = optionalMetadataText(input.description, `${label}.description`, 4_000);
173
+ if ((path === undefined) === (selector === undefined)) {
174
+ throw new SchemaCodecError(`Schema rule ${label} must define exactly one of 'path' or 'selector'`);
175
+ }
176
+ if (!isRecord(input.constraints)) {
177
+ throw new SchemaCodecError(`Schema rule ${label} must define an object 'constraints'`);
178
+ }
179
+ const constraints = normalizeConstraints(input.constraints, `${label}.constraints`);
180
+ const identity = {
181
+ ...(declarationId === undefined ? {} : { declaration_id: declarationId }),
182
+ ...(lineageId === undefined ? {} : { lineage_id: lineageId }),
183
+ ...(ruleLabel === undefined ? {} : { label: ruleLabel }),
184
+ ...(description === undefined ? {} : { description }),
185
+ };
186
+ if (path !== undefined) {
187
+ return { ...identity, path: canonicalAddress(path, 'path'), constraints };
188
+ }
189
+ return { ...identity, selector: canonicalAddress(selector, 'selector'), constraints };
190
+ }
191
+ const EVOLUTION_KINDS = new Set([
192
+ 'add', 'remove', 'rename', 'move', 'constraint-change',
193
+ 'datatype-change', 'split', 'merge', 'derive', 'replace',
194
+ ]);
195
+ function normalizeEvolution(value, rules) {
196
+ if (!Array.isArray(value))
197
+ throw new SchemaCodecError("Schema field 'evolution' must be a list");
198
+ const declarationIds = new Set(rules.flatMap((rule) => rule.declaration_id === undefined ? [] : [rule.declaration_id]));
199
+ const changeIds = new Set();
200
+ return value.map((entry, index) => {
201
+ const label = `evolution[${index}]`;
202
+ if (!isRecord(entry))
203
+ throw new SchemaCodecError(`${label} must be an object`);
204
+ const changeId = requiredSchemaIdentity(entry.change_id, `${label}.change_id`);
205
+ if (changeIds.has(changeId))
206
+ throw new SchemaCodecError(`Schema change_id '${changeId}' must be unique`);
207
+ changeIds.add(changeId);
208
+ const kind = optionalString(entry.kind, `${label}.kind`);
209
+ if (kind === undefined || !EVOLUTION_KINDS.has(kind)) {
210
+ throw new SchemaCodecError(`${label}.kind is not a supported schema evolution kind`);
211
+ }
212
+ const fromDeclarations = schemaIdentityList(entry.from_declarations, `${label}.from_declarations`);
213
+ const toDeclarations = schemaIdentityList(entry.to_declarations, `${label}.to_declarations`);
214
+ validateEvolutionCardinality(kind, fromDeclarations, toDeclarations, label);
215
+ for (const declarationId of toDeclarations) {
216
+ if (!declarationIds.has(declarationId)) {
217
+ throw new SchemaCodecError(`${label}.to_declarations references unknown target declaration '${declarationId}'`);
218
+ }
219
+ }
220
+ const fromContract = optionalSchemaIdentity(entry.from_contract, `${label}.from_contract`);
221
+ const transform = optionalSchemaIdentity(entry.transform, `${label}.transform`);
222
+ const note = optionalString(entry.note, `${label}.note`);
223
+ if (note !== undefined && note.length > 2000)
224
+ throw new SchemaCodecError(`${label}.note must be at most 2000 characters`);
225
+ if (requiresTransform(kind) && transform === undefined) {
226
+ throw new SchemaCodecError(`${label}.transform is required for '${kind}' evolution`);
227
+ }
228
+ return {
229
+ change_id: changeId,
230
+ kind: kind,
231
+ from_declarations: fromDeclarations,
232
+ to_declarations: toDeclarations,
233
+ ...(fromContract === undefined ? {} : { from_contract: fromContract }),
234
+ ...(transform === undefined ? {} : { transform }),
235
+ ...(note === undefined ? {} : { note }),
236
+ };
237
+ });
238
+ }
239
+ function requiredSchemaIdentity(value, label) {
240
+ const identity = optionalSchemaIdentity(value, label);
241
+ if (identity === undefined)
242
+ throw new SchemaCodecError(`${label} must be a non-empty string`);
243
+ return identity;
244
+ }
245
+ function schemaIdentityList(value, label) {
246
+ if (!Array.isArray(value))
247
+ throw new SchemaCodecError(`${label} must be a list`);
248
+ const identities = value.map((item, index) => requiredSchemaIdentity(item, `${label}[${index}]`));
249
+ if (new Set(identities).size !== identities.length)
250
+ throw new SchemaCodecError(`${label} must not contain duplicates`);
251
+ return identities;
252
+ }
253
+ function validateEvolutionCardinality(kind, fromDeclarations, toDeclarations, label) {
254
+ const exact = (from, to) => fromDeclarations.length === from && toDeclarations.length === to;
255
+ const valid = kind === 'add' ? exact(0, 1)
256
+ : kind === 'remove' ? exact(1, 0)
257
+ : ['rename', 'move', 'constraint-change', 'datatype-change', 'derive', 'replace'].includes(kind) ? exact(1, 1)
258
+ : kind === 'split' ? fromDeclarations.length === 1 && toDeclarations.length >= 2
259
+ : kind === 'merge' ? fromDeclarations.length >= 2 && toDeclarations.length === 1
260
+ : false;
261
+ if (!valid)
262
+ throw new SchemaCodecError(`${label} has invalid declaration cardinality for '${kind}' evolution`);
263
+ }
264
+ function requiresTransform(kind) {
265
+ return ['datatype-change', 'split', 'merge', 'derive', 'replace'].includes(kind);
266
+ }
267
+ function optionalSchemaIdentity(value, label) {
268
+ const identity = optionalString(value, label);
269
+ if (identity === undefined)
270
+ return undefined;
271
+ if (identity.length > 512 || /[\u0000-\u001f\u007f]/.test(identity)) {
272
+ throw new SchemaCodecError(`${label} must be at most 512 characters and contain no control characters`);
273
+ }
274
+ return identity;
275
+ }
276
+ function canonicalAddress(value, role) {
277
+ if (value.includes('[*]')) {
278
+ throw new SchemaCodecError(`Legacy indexed wildcard '[*]' is not valid in AEOS ${role}s; use SANSA expansion selectors such as '.*'`);
279
+ }
280
+ const parsed = parseAddress(value);
281
+ if (!parsed.ok) {
282
+ const first = parsed.errors[0];
283
+ const detail = first ? `${first.message} at index ${first.index}` : 'invalid SANSA address';
284
+ throw new SchemaCodecError(`Invalid AEOS ${role} '${value}': ${detail}`);
285
+ }
286
+ if (role === 'path' && !parsed.address.isExact) {
287
+ throw new SchemaCodecError(`AEOS path '${value}' must be an exact SANSA address; use 'selector' for wildcard or filter rules`);
288
+ }
289
+ return renderAddress(parsed.address);
290
+ }
291
+ function normalizeConstraintMap(input, label) {
292
+ const result = {};
293
+ for (const [key, value] of Object.entries(input)) {
294
+ if (!isRecord(value)) {
295
+ throw new SchemaCodecError(`${label}.${key} must be an object`);
296
+ }
297
+ result[key] = normalizeConstraints(value, `${label}.${key}`);
298
+ }
299
+ return result;
300
+ }
301
+ function normalizeConstraints(input, label) {
302
+ if (Array.isArray(input.any_of)) {
303
+ for (let index = 0; index < input.any_of.length; index += 1) {
304
+ if (!isRecord(input.any_of[index])) {
305
+ throw new SchemaCodecError(`${label}.any_of[${index}] must be an object`);
306
+ }
307
+ }
308
+ }
309
+ if (input.attributes !== undefined) {
310
+ if (!isRecord(input.attributes)) {
311
+ throw new SchemaCodecError(`${label}.attributes must be an object`);
312
+ }
313
+ normalizeConstraintMap(input.attributes, `${label}.attributes`);
314
+ }
315
+ return cloneJsonObject(input);
316
+ }
317
+ function cloneJsonObject(input) {
318
+ const result = {};
319
+ for (const [key, value] of Object.entries(input)) {
320
+ result[key] = cloneJsonValue(value);
321
+ }
322
+ return result;
323
+ }
324
+ function cloneJsonValue(value) {
325
+ if (value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string') {
326
+ return value;
327
+ }
328
+ if (Array.isArray(value)) {
329
+ return value.map(cloneJsonValue);
330
+ }
331
+ if (isRecord(value)) {
332
+ return cloneJsonObject(value);
333
+ }
334
+ throw new SchemaCodecError(`Unsupported schema value: ${String(value)}`);
335
+ }
336
+ function renderAeonValue(value, indent) {
337
+ if (typeof value === 'string')
338
+ return renderString(value);
339
+ if (typeof value === 'number') {
340
+ if (!Number.isFinite(value)) {
341
+ throw new SchemaCodecError('Schema numeric values must be finite');
342
+ }
343
+ return String(value);
344
+ }
345
+ if (typeof value === 'boolean')
346
+ return value ? 'true' : 'false';
347
+ if (value === null)
348
+ return 'null';
349
+ if (Array.isArray(value)) {
350
+ if (value.length === 0)
351
+ return '[]';
352
+ const pad = ' '.repeat(indent);
353
+ const childPad = ' '.repeat(indent + 1);
354
+ const rendered = value.map((item) => `${childPad}${renderAeonValue(item, indent + 1)}`);
355
+ return `[\n${rendered.join('\n')}\n${pad}]`;
356
+ }
357
+ const entries = Object.entries(value);
358
+ if (entries.length === 0)
359
+ return '{}';
360
+ const pad = ' '.repeat(indent);
361
+ const childPad = ' '.repeat(indent + 1);
362
+ const rendered = entries.map(([key, item]) => `${childPad}${renderObjectKey(key)}:${datatypeForValue(item)} = ${renderAeonValue(item, indent + 1)}`);
363
+ return `{\n${rendered.join('\n')}\n${pad}}`;
364
+ }
365
+ function datatypeForValue(value) {
366
+ if (typeof value === 'string')
367
+ return 'string';
368
+ if (typeof value === 'number')
369
+ return 'number';
370
+ if (typeof value === 'boolean')
371
+ return 'boolean';
372
+ if (value === null)
373
+ return 'null';
374
+ if (Array.isArray(value)) {
375
+ const first = value[0];
376
+ if (first === undefined)
377
+ return 'list';
378
+ if (isJsonObject(first))
379
+ return 'list<object>';
380
+ if (Array.isArray(first))
381
+ return 'list<list>';
382
+ if (first === null)
383
+ return 'list<null>';
384
+ return `list<${typeof first}>`;
385
+ }
386
+ return 'object';
387
+ }
388
+ function isJsonObject(value) {
389
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
390
+ }
391
+ function renderObjectKey(key) {
392
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(key) ? key : renderString(key);
393
+ }
394
+ function renderString(value) {
395
+ return JSON.stringify(value);
396
+ }
397
+ function optionalString(value, label) {
398
+ if (value === undefined)
399
+ return undefined;
400
+ if (typeof value !== 'string' || value.length === 0) {
401
+ throw new SchemaCodecError(`${label} must be a non-empty string`);
402
+ }
403
+ return value;
404
+ }
405
+ function optionalMetadataText(value, label, maximumLength) {
406
+ const text = optionalString(value, label);
407
+ if (text !== undefined && (text.length === 0 || text.trim() !== text || text.length > maximumLength)) {
408
+ throw new SchemaCodecError(`${label} must be trimmed, non-empty, and contain at most ${maximumLength} characters`);
409
+ }
410
+ return text;
411
+ }
412
+ function isRecord(value) {
413
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
414
+ }
415
+ function formatErrors(errors) {
416
+ return errors.map((error) => {
417
+ if (error instanceof Error)
418
+ return error.message;
419
+ if (isRecord(error) && typeof error.message === 'string')
420
+ return error.message;
421
+ return String(error);
422
+ }).join('\n');
423
+ }
424
+ //# sourceMappingURL=schema-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-codec.js","sourceRoot":"","sources":["../src/schema-codec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAuB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAwB,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAkBhE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACvC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAO,GAAuB,EAAE;IAC9E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE;QAC7B,GAAG,OAAO,CAAC,cAAc;QACzB,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,cAAc,IAAI,cAAc;KAC3E,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC5C,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;QAChB,GAAG,OAAO,CAAC,eAAe;KAC7B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAQR,EAAE,KAAK,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,gBAAgB,CAAC,iDAAiD,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAC1E,MAAM,IAAI,gBAAgB,CAAC,6DAA6D,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,gBAAgB,KAAK,eAAe,IAAI,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YAClF,MAAM,IAAI,gBAAgB,CAAC,qEAAqE,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAgB,CAAC,iDAAiD,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,CAAC,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,gBAAgB,CAAC,kDAAkD,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,eAAe,CAAqB,CAAC;IACvF,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAe;IACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG;QACV,oBAAoB;QACpB,iBAAiB;KACpB,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,6BAA6B,eAAe,CAAC,MAAM,CAAC,cAA0B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,8BAA8B,eAAe,CAAC,MAAM,CAAC,eAA2B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,8BAA8B,eAAe,CAAC,MAAM,CAAC,SAAgC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,iCAAiC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,6BAA6B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,8BAA8B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,0BAA0B,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,8BAA8B,eAAe,CAAC,IAAI,CAAC,WAAuB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,gBAAgB,CAAC,+CAA+C,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAClC,IAAI,KAA4B,CAAC;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;SAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,GAAG,EAAE,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,gBAAgB,CAAC,+CAA+C,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,SAAS;QAChD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,IAAI,CAAC,cAAc,kBAAkB,CAAC,CAAC;QAChG,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAChD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,gBAAgB,CAAC,eAAe,KAAK,oBAAoB,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,cAAc,EAAE,KAAK,CAAC,CAAC;IAC3F,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,gBAAgB,CAAC,eAAe,KAAK,kDAAkD,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,gBAAgB,CAAC,eAAe,KAAK,sCAAsC,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,KAAK,cAAc,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG;QACb,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;QACzE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAC7D,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KACxD,CAAC;IACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAS,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,eAAe,GAAuC,IAAI,GAAG,CAAC;IAChE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB;IACtD,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;CAC3D,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAA4B;IACpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,yCAAyC,CAAC,CAAC;IACjG,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,aAAa,KAAK,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC;QAC/E,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,QAAQ,kBAAkB,CAAC,CAAC;QACzG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAA6B,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,gDAAgD,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,KAAK,oBAAoB,CAAC,CAAC;QACnG,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC;QAC7F,4BAA4B,CAAC,IAA6B,EAAE,gBAAgB,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QACrG,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,2DAA2D,aAAa,GAAG,CAAC,CAAC;YACpH,CAAC;QACL,CAAC;QACD,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,KAAK,gBAAgB,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACzD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;YAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,uCAAuC,CAAC,CAAC;QAC1H,IAAI,iBAAiB,CAAC,IAA6B,CAAC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9E,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,+BAA+B,IAAI,aAAa,CAAC,CAAC;QACzF,CAAC;QACD,OAAO;YACH,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,IAA6B;YACnC,iBAAiB,EAAE,gBAAgB;YACnC,eAAe,EAAE,cAAc;YAC/B,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;YACtE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SAC1C,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,KAAa;IACzD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IAC9F,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAa;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAClG,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IACvH,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,4BAA4B,CACjC,IAA2B,EAC3B,gBAAmC,EACnC,cAAiC,EACjC,KAAa;IAEb,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAU,EAAW,EAAE,CAAC,gBAAgB,CAAC,MAAM,KAAK,IAAI,IAAI,cAAc,CAAC,MAAM,KAAK,EAAE,CAAC;IACtH,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1G,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;oBAC5E,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;wBAC5E,CAAC,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,6CAA6C,IAAI,aAAa,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA2B;IAClD,OAAO,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc,EAAE,KAAa;IACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,mEAAmE,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAyB;IAC9D,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,gBAAgB,CAAC,sDAAsD,IAAI,+CAA+C,CAAC,CAAC;IAC1I,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAC5F,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,IAAI,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,gBAAgB,CAAC,cAAc,KAAK,+EAA+E,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IAC/D,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAoB,EAAE,KAAa;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,WAAW,KAAK,qBAAqB,CAAC,CAAC;YAC9E,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;QACxE,CAAC;QACD,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAkB,CAAC;AACnD,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IACzC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzG,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,gBAAgB,CAAC,6BAA6B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,eAAe,CAAC,KAAe,EAAE,MAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACrJ,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACvC,IAAI,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC9C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,YAAY,CAAC;QACxC,OAAO,QAAQ,OAAO,KAAK,GAAG,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,KAAe;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAChC,OAAO,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa,EAAE,aAAqB;IAC9E,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,oDAAoD,aAAa,aAAa,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,YAAY,CAAC,MAA0B;IAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,IAAI,KAAK,YAAY,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QACjD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Tooling primitives for deriving editable schema candidates and reviewing
3
+ * changes between schema versions. These functions do not admit migrations.
4
+ */
5
+ import { type CompileOptions } from '@altopelago/aeon-core';
6
+ import type { AssignmentEvent } from './types/aes.js';
7
+ import type { SchemaRule, SchemaV1 } from './types/schema.js';
8
+ type JsonValue = null | boolean | number | string | readonly JsonValue[] | {
9
+ readonly [key: string]: JsonValue;
10
+ };
11
+ export interface InferSchemaOptions {
12
+ /** Generated candidates are open-world unless the caller explicitly closes them. */
13
+ readonly world?: 'open' | 'closed';
14
+ readonly compileOptions?: CompileOptions;
15
+ readonly maxInputBytes?: number;
16
+ readonly maxEvents?: number;
17
+ }
18
+ export interface InferredSchemaCandidate {
19
+ readonly schema: SchemaV1;
20
+ readonly source: string;
21
+ readonly observedEventCount: number;
22
+ readonly assumptions: readonly string[];
23
+ }
24
+ export declare class SchemaInferenceError extends Error {
25
+ readonly diagnostics: readonly string[];
26
+ constructor(message: string, diagnostics?: readonly string[]);
27
+ }
28
+ export type SchemaDiffChange = {
29
+ readonly kind: 'setting-changed';
30
+ readonly setting: string;
31
+ readonly before?: JsonValue;
32
+ readonly after?: JsonValue;
33
+ } | {
34
+ readonly kind: 'rule-added';
35
+ readonly rule: SchemaRule;
36
+ } | {
37
+ readonly kind: 'rule-removed';
38
+ readonly rule: SchemaRule;
39
+ } | {
40
+ readonly kind: 'rule-relocated';
41
+ readonly identity: string;
42
+ readonly before: SchemaRule;
43
+ readonly after: SchemaRule;
44
+ readonly constraintPaths: readonly string[];
45
+ readonly evidence: 'shared-declaration-id';
46
+ } | {
47
+ readonly kind: 'rule-changed';
48
+ readonly identity: string;
49
+ readonly before: SchemaRule;
50
+ readonly after: SchemaRule;
51
+ readonly constraintPaths: readonly string[];
52
+ readonly metadataPaths?: readonly string[];
53
+ };
54
+ export interface PossibleRuleMove {
55
+ readonly from: string;
56
+ readonly to: string;
57
+ readonly reason: 'shared-lineage-id' | 'identical-constraints';
58
+ }
59
+ export interface SchemaDiff {
60
+ readonly equal: boolean;
61
+ readonly changes: readonly SchemaDiffChange[];
62
+ /** These are review hints, not inferred migration instructions. */
63
+ readonly possibleRuleMoves: readonly PossibleRuleMove[];
64
+ }
65
+ export interface SchemaEvolutionDiagnostic {
66
+ readonly changeId: string;
67
+ readonly code: 'SOURCE_DECLARATION_MISSING' | 'TEMPORAL_KIND_MISMATCH';
68
+ readonly message: string;
69
+ }
70
+ export interface SchemaAeonProjection {
71
+ /** Illustrative AEON instance shape. It is not schema authority or validation evidence. */
72
+ readonly source: string;
73
+ readonly assumptions: readonly string[];
74
+ readonly omittedRules: readonly string[];
75
+ }
76
+ export declare function inferSchemaFromAeon(source: string, options?: InferSchemaOptions): InferredSchemaCandidate;
77
+ /**
78
+ * Projects a schema into one inspectable AEON instance shape. The schema remains
79
+ * authoritative; this deliberately cannot represent every valid value.
80
+ */
81
+ export declare function projectSchemaToAeon(schema: SchemaV1): SchemaAeonProjection;
82
+ export declare function projectSchemaSourceToAeon(source: string): SchemaAeonProjection;
83
+ export declare function inferSchemaFromEvents(events: readonly AssignmentEvent[], options?: Pick<InferSchemaOptions, 'world'>): InferredSchemaCandidate;
84
+ export declare function diffSchemaSources(source: string, target: string): SchemaDiff;
85
+ /** Validate authored temporal intent against the two schema states it relates. */
86
+ export declare function validateSchemaEvolution(source: SchemaV1, target: SchemaV1): readonly SchemaEvolutionDiagnostic[];
87
+ export declare function validateSchemaEvolutionSources(source: string, target: string): readonly SchemaEvolutionDiagnostic[];
88
+ export declare function diffSchemas(source: SchemaV1, target: SchemaV1): SchemaDiff;
89
+ export {};
90
+ //# sourceMappingURL=schema-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-tools.d.ts","sourceRoot":"","sources":["../src/schema-tools.ts"],"names":[],"mappings":"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"}