@lapidist/dtif-parser 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +62 -0
  3. package/dist/adapters/node/index.d.ts +3 -0
  4. package/dist/adapters/node/index.d.ts.map +1 -0
  5. package/dist/adapters/node/index.js +2 -0
  6. package/dist/adapters/node/index.js.map +1 -0
  7. package/dist/adapters/node/token-parser.d.ts +17 -0
  8. package/dist/adapters/node/token-parser.d.ts.map +1 -0
  9. package/dist/adapters/node/token-parser.js +83 -0
  10. package/dist/adapters/node/token-parser.js.map +1 -0
  11. package/dist/index.d.ts +11 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +6 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/io/decoder/synthetic-source-map.d.ts +3 -0
  16. package/dist/io/decoder/synthetic-source-map.d.ts.map +1 -0
  17. package/dist/io/decoder/synthetic-source-map.js +31 -0
  18. package/dist/io/decoder/synthetic-source-map.js.map +1 -0
  19. package/dist/io/decoder.d.ts.map +1 -1
  20. package/dist/io/decoder.js +31 -0
  21. package/dist/io/decoder.js.map +1 -1
  22. package/dist/io/document-loader.d.ts.map +1 -1
  23. package/dist/io/document-loader.js +62 -7
  24. package/dist/io/document-loader.js.map +1 -1
  25. package/dist/tokens/cache.d.ts +38 -0
  26. package/dist/tokens/cache.d.ts.map +1 -0
  27. package/dist/tokens/cache.js +107 -0
  28. package/dist/tokens/cache.js.map +1 -0
  29. package/dist/tokens/diagnostics.d.ts +5 -0
  30. package/dist/tokens/diagnostics.d.ts.map +1 -0
  31. package/dist/tokens/diagnostics.js +122 -0
  32. package/dist/tokens/diagnostics.js.map +1 -0
  33. package/dist/tokens/flatten.d.ts +4 -0
  34. package/dist/tokens/flatten.d.ts.map +1 -0
  35. package/dist/tokens/flatten.js +26 -0
  36. package/dist/tokens/flatten.js.map +1 -0
  37. package/dist/tokens/internal/graph.d.ts +8 -0
  38. package/dist/tokens/internal/graph.d.ts.map +1 -0
  39. package/dist/tokens/internal/graph.js +29 -0
  40. package/dist/tokens/internal/graph.js.map +1 -0
  41. package/dist/tokens/internal/utils.d.ts +4 -0
  42. package/dist/tokens/internal/utils.d.ts.map +1 -0
  43. package/dist/tokens/internal/utils.js +51 -0
  44. package/dist/tokens/internal/utils.js.map +1 -0
  45. package/dist/tokens/parse-tokens.d.ts +31 -0
  46. package/dist/tokens/parse-tokens.d.ts.map +1 -0
  47. package/dist/tokens/parse-tokens.js +425 -0
  48. package/dist/tokens/parse-tokens.js.map +1 -0
  49. package/dist/tokens/snapshots.d.ts +9 -0
  50. package/dist/tokens/snapshots.d.ts.map +1 -0
  51. package/dist/tokens/snapshots.js +162 -0
  52. package/dist/tokens/snapshots.js.map +1 -0
  53. package/dist/tokens/types.d.ts +77 -0
  54. package/dist/tokens/types.d.ts.map +1 -0
  55. package/dist/tokens/types.js +2 -0
  56. package/dist/tokens/types.js.map +1 -0
  57. package/dist/types.d.ts +9 -1
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/utils/clone-json.d.ts +2 -0
  60. package/dist/utils/clone-json.d.ts.map +1 -0
  61. package/dist/utils/clone-json.js +15 -0
  62. package/dist/utils/clone-json.js.map +1 -0
  63. package/dist/utils/hash-json.d.ts +5 -0
  64. package/dist/utils/hash-json.d.ts.map +1 -0
  65. package/dist/utils/hash-json.js +74 -0
  66. package/dist/utils/hash-json.js.map +1 -0
  67. package/dist/utils/stable-json.d.ts +2 -0
  68. package/dist/utils/stable-json.d.ts.map +1 -0
  69. package/dist/utils/stable-json.js +18 -0
  70. package/dist/utils/stable-json.js.map +1 -0
  71. package/package.json +11 -3
@@ -0,0 +1,425 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { createSession } from '../session.js';
3
+ import { createDocumentResolver } from '../resolver/index.js';
4
+ import { flattenTokens } from './flatten.js';
5
+ import { createMetadataSnapshot, createResolutionSnapshot } from './snapshots.js';
6
+ import { computeDocumentHash, createCacheKey } from './cache.js';
7
+ import { toTokenDiagnostic } from './diagnostics.js';
8
+ import { DiagnosticBag } from '../diagnostics/bag.js';
9
+ import { normalizeDocument } from '../ast/normaliser.js';
10
+ import { buildDocumentGraph } from '../graph/builder.js';
11
+ import { decodeBytes } from '../io/decoder/encoding.js';
12
+ import { createSyntheticSourceMap } from '../io/decoder/synthetic-source-map.js';
13
+ import { parseYaml, toJavaScript } from '../io/decoder/yaml.js';
14
+ import { buildSourceMap } from '../io/decoder/source-map.js';
15
+ import { cloneJsonValue } from '../utils/clone-json.js';
16
+ import { hashJsonValue } from '../utils/hash-json.js';
17
+ export async function parseTokens(input, options = {}) {
18
+ const { flatten = true, includeGraphs = true, cache: parseCache, documentCache, onDiagnostic, warn, ...sessionOptions } = options;
19
+ const session = createSession({ ...sessionOptions, cache: documentCache });
20
+ const normalizedInput = normalizeInput(input);
21
+ const result = await session.parseDocument(normalizedInput);
22
+ const cacheContext = parseCache && result.document
23
+ ? await resolveCacheContextAsync(parseCache, result.document, session, {
24
+ flatten,
25
+ includeGraphs
26
+ })
27
+ : undefined;
28
+ const artifacts = buildParseTokensArtifacts(result, { session, flatten, includeGraphs, onDiagnostic, warn }, cacheContext);
29
+ if (parseCache && cacheContext && artifacts.cacheEntry) {
30
+ await ensureAsync(parseCache.set(cacheContext.key, artifacts.cacheEntry));
31
+ }
32
+ return artifacts.outcome;
33
+ }
34
+ export function parseTokensSync(input, options = {}) {
35
+ const { flatten = true, includeGraphs = true, cache: parseCache, documentCache, onDiagnostic, warn, ...sessionOptions } = options;
36
+ if (documentCache) {
37
+ throw new Error('parseTokensSync does not support document caches.');
38
+ }
39
+ const inline = normalizeInlineInput(input);
40
+ if (!inline) {
41
+ throw new Error('parseTokensSync requires inline content or design token objects.');
42
+ }
43
+ const session = createSession(sessionOptions);
44
+ const handle = createInlineHandle(inline);
45
+ const diagnostics = new DiagnosticBag();
46
+ const document = decodeDocumentSync(handle);
47
+ const schemaResult = session.options.schemaGuard.validate(document);
48
+ if (!schemaResult.valid) {
49
+ diagnostics.addMany(schemaResult.diagnostics);
50
+ return finalizeSync({ document, diagnostics }, {
51
+ session,
52
+ flatten,
53
+ includeGraphs,
54
+ parseCache,
55
+ onDiagnostic,
56
+ warn
57
+ });
58
+ }
59
+ const normalised = normalizeDocument(document, {
60
+ extensions: session.options.plugins
61
+ });
62
+ diagnostics.addMany(normalised.diagnostics);
63
+ if (!normalised.ast) {
64
+ return finalizeSync({
65
+ document,
66
+ diagnostics,
67
+ extensions: normalised.extensions
68
+ }, { session, flatten, includeGraphs, parseCache, onDiagnostic, warn });
69
+ }
70
+ const graphResult = buildDocumentGraph(normalised.ast);
71
+ diagnostics.addMany(graphResult.diagnostics);
72
+ const graph = graphResult.graph;
73
+ const resolver = graph &&
74
+ createDocumentResolver(graph, {
75
+ context: session.options.overrideContext,
76
+ maxDepth: session.options.maxDepth,
77
+ document,
78
+ transforms: session.options.plugins?.transforms
79
+ });
80
+ return finalizeSync({
81
+ document,
82
+ graph,
83
+ resolver,
84
+ diagnostics,
85
+ extensions: normalised.extensions,
86
+ ast: normalised.ast
87
+ }, { session, flatten, includeGraphs, parseCache, onDiagnostic, warn });
88
+ }
89
+ function normalizeInput(input) {
90
+ if (typeof input === 'object' && input !== null) {
91
+ if (isParseInputRecord(input)) {
92
+ return input;
93
+ }
94
+ if (isContentsRecord(input)) {
95
+ return {
96
+ uri: input.uri,
97
+ content: input.contents
98
+ };
99
+ }
100
+ return input;
101
+ }
102
+ return input;
103
+ }
104
+ function isParseInputRecord(value) {
105
+ if (!value || typeof value !== 'object') {
106
+ return false;
107
+ }
108
+ return 'content' in value;
109
+ }
110
+ function isContentsRecord(value) {
111
+ if (!value || typeof value !== 'object') {
112
+ return false;
113
+ }
114
+ return 'contents' in value;
115
+ }
116
+ function isParseDataRecord(value) {
117
+ if (!value || typeof value !== 'object') {
118
+ return false;
119
+ }
120
+ return 'data' in value;
121
+ }
122
+ function createMemoryUriFromDesignTokens(value, kind) {
123
+ const hash = hashJsonValue(value, { algorithm: 'sha1' });
124
+ return `memory://dtif-${kind}/${hash}.json`;
125
+ }
126
+ function buildParseTokensArtifacts(result, options, cacheContext) {
127
+ const document = result.document;
128
+ const graph = result.graph;
129
+ const resolver = result.resolver;
130
+ const includeGraphs = options.includeGraphs;
131
+ const flatten = options.flatten;
132
+ const diagnosticContext = {
133
+ documentUri: document?.uri.href,
134
+ pointerSpans: document?.sourceMap?.pointers
135
+ };
136
+ const baseDiagnostics = result.diagnostics.toArray();
137
+ const parseDiagnostics = baseDiagnostics.map((diagnostic) => toTokenDiagnostic(diagnostic, diagnosticContext));
138
+ if (!document || !graph || !resolver) {
139
+ const outcome = {
140
+ document: includeGraphs ? document : undefined,
141
+ graph: includeGraphs ? graph : undefined,
142
+ resolver: includeGraphs ? resolver : undefined,
143
+ flattened: [],
144
+ metadataIndex: graph ? createMetadataSnapshot(graph) : new Map(),
145
+ resolutionIndex: new Map(),
146
+ diagnostics: parseDiagnostics
147
+ };
148
+ notifyDiagnostics(outcome.diagnostics, options);
149
+ return { outcome };
150
+ }
151
+ if (cacheContext?.entry && cacheContext.entry.documentHash === cacheContext.documentHash) {
152
+ const cachedDiagnostics = mergeDiagnostics(cacheContext.entry.diagnostics ?? [], parseDiagnostics);
153
+ const outcome = {
154
+ document: includeGraphs ? document : undefined,
155
+ graph: includeGraphs ? graph : undefined,
156
+ resolver: includeGraphs ? resolver : undefined,
157
+ flattened: flatten
158
+ ? cacheContext.entry.flattened
159
+ ? [...cacheContext.entry.flattened]
160
+ : []
161
+ : [],
162
+ metadataIndex: cacheContext.entry.metadataIndex
163
+ ? new Map(cacheContext.entry.metadataIndex)
164
+ : new Map(),
165
+ resolutionIndex: cacheContext.entry.resolutionIndex
166
+ ? new Map(cacheContext.entry.resolutionIndex)
167
+ : new Map(),
168
+ diagnostics: cachedDiagnostics
169
+ };
170
+ notifyDiagnostics(outcome.diagnostics, options);
171
+ return { outcome };
172
+ }
173
+ const resolutionDiagnostics = [];
174
+ const metadataIndex = createMetadataSnapshot(graph);
175
+ const resolutionIndex = flatten
176
+ ? createResolutionSnapshot(graph, resolver, {
177
+ onDiagnostic: (diagnostic) => resolutionDiagnostics.push(diagnostic)
178
+ })
179
+ : new Map();
180
+ const flattened = flatten ? flattenTokens(graph, resolutionIndex) : [];
181
+ const formattedResolutionDiagnostics = resolutionDiagnostics.map((diagnostic) => toTokenDiagnostic(diagnostic, diagnosticContext));
182
+ const diagnostics = mergeDiagnostics(parseDiagnostics, formattedResolutionDiagnostics);
183
+ notifyDiagnostics(diagnostics, options);
184
+ const cacheEntry = cacheContext
185
+ ? {
186
+ documentHash: cacheContext.documentHash,
187
+ flattened: flatten ? flattened : undefined,
188
+ metadataIndex,
189
+ resolutionIndex: flatten ? resolutionIndex : undefined,
190
+ diagnostics,
191
+ timestamp: Date.now()
192
+ }
193
+ : undefined;
194
+ return {
195
+ outcome: {
196
+ document: includeGraphs ? document : undefined,
197
+ graph: includeGraphs ? graph : undefined,
198
+ resolver: includeGraphs ? resolver : undefined,
199
+ flattened,
200
+ metadataIndex,
201
+ resolutionIndex,
202
+ diagnostics
203
+ },
204
+ cacheEntry
205
+ };
206
+ }
207
+ function finalizeSync(result, options) {
208
+ const cacheContext = options.parseCache && result.document
209
+ ? resolveCacheContextSync(options.parseCache, result.document, options.session, {
210
+ flatten: options.flatten,
211
+ includeGraphs: options.includeGraphs
212
+ })
213
+ : undefined;
214
+ const artifacts = buildParseTokensArtifacts(result, options, cacheContext);
215
+ if (options.parseCache && cacheContext && artifacts.cacheEntry) {
216
+ ensureSync(options.parseCache.set(cacheContext.key, artifacts.cacheEntry));
217
+ }
218
+ return artifacts.outcome;
219
+ }
220
+ async function resolveCacheContextAsync(cache, document, session, variantOptions) {
221
+ const documentHash = computeDocumentHash(document);
222
+ const key = createCacheKey(document.uri.href, session.options, variantOptions);
223
+ const entry = await ensureAsync(cache.get(key));
224
+ return { key, documentHash, entry: entry ?? undefined };
225
+ }
226
+ function resolveCacheContextSync(cache, document, session, variantOptions) {
227
+ const documentHash = computeDocumentHash(document);
228
+ const key = createCacheKey(document.uri.href, session.options, variantOptions);
229
+ const candidate = cache.get(key);
230
+ if (isPromiseLike(candidate)) {
231
+ throw new Error('parseTokensSync requires caches with synchronous get/set semantics.');
232
+ }
233
+ return { key, documentHash, entry: candidate ?? undefined };
234
+ }
235
+ async function ensureAsync(value) {
236
+ return isPromiseLike(value) ? await value : value;
237
+ }
238
+ function ensureSync(value) {
239
+ if (isPromiseLike(value)) {
240
+ throw new Error('parseTokensSync requires caches with synchronous get/set semantics.');
241
+ }
242
+ return value;
243
+ }
244
+ function isPromiseLike(value) {
245
+ return typeof value?.then === 'function';
246
+ }
247
+ function notifyDiagnostics(diagnostics, options) {
248
+ if (diagnostics.length === 0) {
249
+ return;
250
+ }
251
+ if (options.onDiagnostic) {
252
+ for (const diagnostic of diagnostics) {
253
+ options.onDiagnostic(diagnostic);
254
+ }
255
+ }
256
+ if (options.warn) {
257
+ for (const diagnostic of diagnostics) {
258
+ if (diagnostic.severity !== 'error') {
259
+ options.warn(diagnostic);
260
+ }
261
+ }
262
+ }
263
+ }
264
+ function mergeDiagnostics(...groups) {
265
+ const map = new Map();
266
+ for (const group of groups) {
267
+ for (const diagnostic of group) {
268
+ const key = createDiagnosticKey(diagnostic);
269
+ map.set(key, diagnostic);
270
+ }
271
+ }
272
+ return Array.from(map.values());
273
+ }
274
+ function createDiagnosticKey(diagnostic) {
275
+ const { severity, code, message, target } = diagnostic;
276
+ const range = target.range;
277
+ const parts = [
278
+ severity,
279
+ code,
280
+ message,
281
+ target.uri,
282
+ range.start.line,
283
+ range.start.character,
284
+ range.end.line,
285
+ range.end.character
286
+ ];
287
+ return parts.join('|');
288
+ }
289
+ function normalizeInlineInput(input) {
290
+ if (typeof input === 'string') {
291
+ if (!looksLikeInlineDocument(input)) {
292
+ return undefined;
293
+ }
294
+ const text = input;
295
+ const hash = createHash('sha1').update(text).digest('hex');
296
+ return {
297
+ uri: `memory://dtif-inline/${hash}.yaml`,
298
+ text,
299
+ contentType: detectContentTypeFromContent(text) ?? 'application/yaml'
300
+ };
301
+ }
302
+ if (input instanceof Uint8Array || input instanceof URL) {
303
+ return undefined;
304
+ }
305
+ if (typeof input === 'object' && input !== null) {
306
+ if (isParseInputRecord(input)) {
307
+ const content = typeof input.content === 'string' ? input.content : new TextDecoder().decode(input.content);
308
+ return {
309
+ uri: typeof input.uri === 'string'
310
+ ? input.uri
311
+ : (input.uri?.toString() ?? createMemoryUriFromText(content)),
312
+ text: content,
313
+ contentType: input.contentType ?? detectContentTypeFromContent(content) ?? 'application/json'
314
+ };
315
+ }
316
+ if (isContentsRecord(input)) {
317
+ return {
318
+ uri: input.uri ?? createMemoryUriFromText(input.contents),
319
+ text: input.contents,
320
+ contentType: detectContentTypeFromContent(input.contents) ?? 'application/json'
321
+ };
322
+ }
323
+ if (isParseDataRecord(input)) {
324
+ const uri = typeof input.uri === 'string'
325
+ ? input.uri
326
+ : (input.uri?.toString() ?? createMemoryUriFromDesignTokens(input.data, 'token'));
327
+ return {
328
+ uri,
329
+ contentType: input.contentType ?? 'application/json',
330
+ data: input.data
331
+ };
332
+ }
333
+ const uri = createMemoryUriFromDesignTokens(input, 'token');
334
+ return {
335
+ uri,
336
+ contentType: 'application/json',
337
+ data: input
338
+ };
339
+ }
340
+ return undefined;
341
+ }
342
+ function looksLikeInlineDocument(value) {
343
+ const trimmed = value.trimStart();
344
+ if (trimmed.length === 0) {
345
+ return true;
346
+ }
347
+ if (trimmed.startsWith('{') || trimmed.startsWith('[') || trimmed.startsWith('---')) {
348
+ return true;
349
+ }
350
+ if (trimmed.startsWith('%YAML') || trimmed.includes('\n')) {
351
+ return true;
352
+ }
353
+ return false;
354
+ }
355
+ function detectContentTypeFromContent(value) {
356
+ const trimmed = value.trimStart();
357
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
358
+ return 'application/json';
359
+ }
360
+ if (trimmed.startsWith('---') || trimmed.startsWith('%YAML') || trimmed.includes('\n')) {
361
+ return 'application/yaml';
362
+ }
363
+ return undefined;
364
+ }
365
+ function createMemoryUriFromText(text) {
366
+ const hash = createHash('sha1').update(text).digest('hex');
367
+ return `memory://dtif-inline/${hash}.txt`;
368
+ }
369
+ function createInlineHandle(input) {
370
+ const encoder = new TextEncoder();
371
+ const bytes = typeof input.text === 'string' ? encoder.encode(input.text) : new Uint8Array(0);
372
+ const uri = new URL(input.uri);
373
+ return Object.freeze({
374
+ uri,
375
+ contentType: input.contentType,
376
+ bytes,
377
+ ...(input.text !== undefined ? { text: input.text } : {}),
378
+ ...(input.data !== undefined ? { data: cloneJsonValue(input.data) } : {})
379
+ });
380
+ }
381
+ function decodeDocumentSync(handle) {
382
+ if (handle.data !== undefined) {
383
+ return Object.freeze(createRawDocumentFromProvidedData(handle));
384
+ }
385
+ const { text } = decodeBytes(handle.bytes);
386
+ const { document: yamlDocument, lineCounter } = parseYaml(text);
387
+ const data = toJavaScript(yamlDocument);
388
+ const sourceMap = buildSourceMap(handle, text, yamlDocument.contents, lineCounter);
389
+ return Object.freeze({
390
+ uri: handle.uri,
391
+ contentType: handle.contentType,
392
+ bytes: handle.bytes,
393
+ text,
394
+ data,
395
+ sourceMap
396
+ });
397
+ }
398
+ function createRawDocumentFromProvidedData(handle) {
399
+ if (typeof handle.text === 'string' && handle.text.length > 0) {
400
+ const text = handle.text;
401
+ const { document: yamlDocument, lineCounter } = parseYaml(text);
402
+ const sourceMap = buildSourceMap(handle, text, yamlDocument.contents, lineCounter);
403
+ const data = handle.data;
404
+ return {
405
+ uri: handle.uri,
406
+ contentType: handle.contentType,
407
+ bytes: handle.bytes,
408
+ text,
409
+ data,
410
+ sourceMap
411
+ };
412
+ }
413
+ const text = handle.text ?? '';
414
+ const data = handle.data;
415
+ const sourceMap = createSyntheticSourceMap(handle.uri, data);
416
+ return {
417
+ uri: handle.uri,
418
+ contentType: handle.contentType,
419
+ bytes: handle.bytes,
420
+ text,
421
+ data,
422
+ sourceMap
423
+ };
424
+ }
425
+ //# sourceMappingURL=parse-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-tokens.js","sourceRoot":"","sources":["../../src/tokens/parse-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAY9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EACL,mBAAmB,EACnB,cAAc,EAKf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0BtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAuB,EACvB,UAA8B,EAAE;IAEhC,MAAM,EACJ,OAAO,GAAG,IAAI,EACd,aAAa,GAAG,IAAI,EACpB,KAAK,EAAE,UAAU,EACjB,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,GAAG,cAAc,EAClB,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,GAAG,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5D,MAAM,YAAY,GAChB,UAAU,IAAI,MAAM,CAAC,QAAQ;QAC3B,CAAC,CAAC,MAAM,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE;YACnE,OAAO;YACP,aAAa;SACd,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,SAAS,GAAG,yBAAyB,CACzC,MAAM,EACN,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,EACvD,YAAY,CACb,CAAC;IAEF,IAAI,UAAU,IAAI,YAAY,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACvD,MAAM,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAuB,EACvB,UAA8B,EAAE;IAEhC,MAAM,EACJ,OAAO,GAAG,IAAI,EACd,aAAa,GAAG,IAAI,EACpB,KAAK,EAAE,UAAU,EACjB,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,GAAG,cAAc,EAClB,GAAG,OAAO,CAAC;IAEZ,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACxB,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9C,OAAO,YAAY,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAwB,EAAE;YACnE,OAAO;YACP,OAAO;YACP,aAAa;YACb,UAAU;YACV,YAAY;YACZ,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,EAAE;QAC7C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;KACpC,CAAC,CAAC;IACH,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACpB,OAAO,YAAY,CACjB;YACE,QAAQ;YACR,WAAW;YACX,UAAU,EAAE,UAAU,CAAC,UAAU;SACZ,EACvB,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAEhC,MAAM,QAAQ,GACZ,KAAK;QACL,sBAAsB,CAAC,KAAK,EAAE;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe;YACxC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YAClC,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU;SAChD,CAAC,CAAC;IAEL,OAAO,YAAY,CACjB;QACE,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,WAAW;QACX,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,GAAG,EAAE,UAAU,CAAC,GAAG;KACpB,EACD,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,CACpE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,OAAO,EAAE,KAAK,CAAC,QAAQ;aACxB,CAAC;QACJ,CAAC;QAED,OAAO,KAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,IAAK,KAAiC,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,IAAK,KAAiC,CAAC;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IAKvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,IAAK,KAAiC,CAAC;AACtD,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAmC,EACnC,IAAY;IAEZ,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,iBAAiB,IAAI,IAAI,IAAI,OAAO,CAAC;AAC9C,CAAC;AAqBD,SAAS,yBAAyB,CAChC,MAAmB,EACnB,OAAwB,EACxB,YAA2B;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,MAAM,iBAAiB,GAA2B;QAChD,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI;QAC/B,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;KAC5C,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC1D,iBAAiB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CACjD,CAAC;IAEF,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACxC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YAChE,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,WAAW,EAAE,gBAAgB;SACF,CAAC;QAE9B,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEhD,OAAO,EAAE,OAAO,EAA8B,CAAC;IACjD,CAAC;IAED,IAAI,YAAY,EAAE,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,YAAY,EAAE,CAAC;QACzF,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EACpC,gBAAgB,CACjB,CAAC;QACF,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACxC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,SAAS,EAAE,OAAO;gBAChB,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS;oBAC5B,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;oBACnC,CAAC,CAAC,EAAE;gBACN,CAAC,CAAC,EAAE;YACN,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa;gBAC7C,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;gBAC3C,CAAC,CAAC,IAAI,GAAG,EAAE;YACb,eAAe,EAAE,YAAY,CAAC,KAAK,CAAC,eAAe;gBACjD,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC7C,CAAC,CAAC,IAAI,GAAG,EAAE;YACb,WAAW,EAAE,iBAAiB;SACH,CAAC;QAE9B,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEhD,OAAO,EAAE,OAAO,EAA8B,CAAC;IACjD,CAAC;IAED,MAAM,qBAAqB,GAAiB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,OAAO;QAC7B,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE;YACxC,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC;SACrE,CAAC;QACJ,CAAC,CAAC,IAAI,GAAG,EAA8B,CAAC;IAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC9E,iBAAiB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CACjD,CAAC;IACF,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC;IAEvF,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAExC,MAAM,UAAU,GAAgC,YAAY;QAC1D,CAAC,CAAC;YACE,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC1C,aAAa;YACb,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YACtD,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,OAAO,EAAE;YACP,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACxC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC9C,SAAS;YACT,aAAa;YACb,eAAe;YACf,WAAW;SACZ;QACD,UAAU;KACiB,CAAC;AAChC,CAAC;AAMD,SAAS,YAAY,CAAC,MAAmB,EAAE,OAA4B;IACrE,MAAM,YAAY,GAChB,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ;QACnC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE;YAC5E,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAE3E,IAAI,OAAO,CAAC,UAAU,IAAI,YAAY,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QAC/D,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAAiB,EACjB,QAAqB,EACrB,OAAqB,EACrB,cAAsC;IAEtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAyB,CAAC;AACjF,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAiB,EACjB,QAAqB,EACrB,OAAqB,EACrB,cAAsC;IAEtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,IAAI,SAAS,EAAyB,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,WAAW,CAAI,KAAqB;IACjD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAI,KAAqB;IAC1C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAI,KAAqB;IAC7C,OAAO,OAAQ,KAAwB,EAAE,IAAI,KAAK,UAAU,CAAC;AAC/D,CAAC;AAED,SAAS,iBAAiB,CACxB,WAAuC,EACvC,OAAuD;IAEvD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAG,MAAqD;IAExD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA2B;IACtD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,MAAM,CAAC,GAAG;QACV,KAAK,CAAC,KAAK,CAAC,IAAI;QAChB,KAAK,CAAC,KAAK,CAAC,SAAS;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI;QACd,KAAK,CAAC,GAAG,CAAC,SAAS;KACpB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AASD,SAAS,oBAAoB,CAAC,KAAuB;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO;YACL,GAAG,EAAE,wBAAwB,IAAI,OAAO;YACxC,IAAI;YACJ,WAAW,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,kBAAkB;SAChD,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9F,OAAO;gBACL,GAAG,EACD,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;oBAC3B,CAAC,CAAC,KAAK,CAAC,GAAG;oBACX,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACjE,IAAI,EAAE,OAAO;gBACb,WAAW,EACT,KAAK,CAAC,WAAW,IAAI,4BAA4B,CAAC,OAAO,CAAC,IAAI,kBAAkB;aAC7D,CAAC;QAC1B,CAAC;QAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACzD,IAAI,EAAE,KAAK,CAAC,QAAQ;gBACpB,WAAW,EAAE,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB;aAC1D,CAAC;QAC1B,CAAC;QAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GACP,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAC3B,CAAC,CAAC,KAAK,CAAC,GAAG;gBACX,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,+BAA+B,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACtF,OAAO;gBACL,GAAG;gBACH,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,kBAAkB;gBACpD,IAAI,EAAE,KAAK,CAAC,IAAI;aACK,CAAC;QAC1B,CAAC;QAED,MAAM,GAAG,GAAG,+BAA+B,CAAC,KAAqC,EAAE,OAAO,CAAC,CAAC;QAC5F,OAAO;YACL,GAAG;YACH,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,KAAqC;SACtB,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAa;IACjD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,wBAAwB,IAAI,MAAM,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAkB;IAC5C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG;QACH,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK;QACL,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAsB;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEnF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI;QACJ,IAAI;QACJ,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAsB;IAC/D,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;QAE1B,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI;YACJ,IAAI;YACJ,SAAS;SACY,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;IAC1B,MAAM,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI;QACJ,IAAI;QACJ,SAAS;KACY,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DocumentGraph } from '../graph/nodes.js';
2
+ import type { DocumentResolver } from '../resolver/index.js';
3
+ import type { Diagnostic } from '../types.js';
4
+ import type { ResolvedTokenView, TokenId, TokenMetadataSnapshot } from './types.js';
5
+ export declare function createMetadataSnapshot(graph: DocumentGraph): Map<TokenId, TokenMetadataSnapshot>;
6
+ export declare function createResolutionSnapshot(graph: DocumentGraph, resolver: DocumentResolver, options?: {
7
+ onDiagnostic?: (diagnostic: Diagnostic) => void;
8
+ }): Map<TokenId, ResolvedTokenView>;
9
+ //# sourceMappingURL=snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../src/tokens/snapshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,qBAAqB,EAAgB,MAAM,YAAY,CAAC;AAGlG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAqBhG;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAA;CAAO,GAChE,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAiFjC"}
@@ -0,0 +1,162 @@
1
+ import { dedupePointers, toPlainJson } from './internal/utils.js';
2
+ import { getBaseType, getBaseValue, getTokenId, iterateTokenNodes } from './internal/graph.js';
3
+ import { normalizeJsonPointer } from '../utils/json-pointer.js';
4
+ export function createMetadataSnapshot(graph) {
5
+ const entries = new Map();
6
+ const documentUri = graph.uri.href;
7
+ for (const node of iterateTokenNodes(graph)) {
8
+ const id = getTokenId(node.pointer);
9
+ const sourceUri = node.span?.uri?.href ?? documentUri;
10
+ const metadata = normalizeMetadata(node.metadata, {
11
+ uri: sourceUri,
12
+ line: node.span?.start?.line,
13
+ column: node.span?.start?.column
14
+ }, documentUri);
15
+ entries.set(id, metadata);
16
+ }
17
+ return entries;
18
+ }
19
+ export function createResolutionSnapshot(graph, resolver, options = {}) {
20
+ const entries = new Map();
21
+ const documentUri = graph.uri.href;
22
+ const forwardDiagnostic = options.onDiagnostic;
23
+ for (const node of iterateTokenNodes(graph)) {
24
+ const pointer = normalizeJsonPointer(node.pointer);
25
+ const id = getTokenId(node.pointer);
26
+ const baseType = getBaseType(node);
27
+ const rawValue = getBaseValue(node);
28
+ const resolution = resolver.resolve(pointer);
29
+ if (forwardDiagnostic) {
30
+ for (const diagnostic of resolution.diagnostics) {
31
+ forwardDiagnostic(diagnostic);
32
+ }
33
+ }
34
+ const resolvedToken = resolution.token;
35
+ const value = resolvedToken?.value ?? rawValue;
36
+ const normalizedValue = toPlainJson(value);
37
+ const normalizedRaw = toPlainJson(rawValue);
38
+ const references = [];
39
+ if (node.kind === 'alias') {
40
+ const target = node.ref.value;
41
+ references.push({
42
+ uri: target.uri.href,
43
+ pointer: normalizeJsonPointer(target.pointer)
44
+ });
45
+ }
46
+ if (resolvedToken?.overridesApplied) {
47
+ for (const override of resolvedToken.overridesApplied) {
48
+ if (override.source) {
49
+ references.push({
50
+ uri: override.source.uri.href,
51
+ pointer: normalizeJsonPointer(override.source.pointer)
52
+ });
53
+ }
54
+ }
55
+ }
56
+ const resolutionPath = [];
57
+ const appliedAliases = [];
58
+ if (resolvedToken) {
59
+ if (forwardDiagnostic && resolvedToken.warnings) {
60
+ for (const warning of resolvedToken.warnings) {
61
+ forwardDiagnostic(warning);
62
+ }
63
+ }
64
+ for (const step of resolvedToken.trace) {
65
+ const tokenPointer = {
66
+ uri: documentUri,
67
+ pointer: normalizeJsonPointer(step.pointer)
68
+ };
69
+ resolutionPath.push(tokenPointer);
70
+ if (step.kind === 'alias') {
71
+ appliedAliases.push(tokenPointer);
72
+ }
73
+ }
74
+ if (resolvedToken.source) {
75
+ references.push({
76
+ uri: resolvedToken.source.uri.href,
77
+ pointer: normalizeJsonPointer(resolvedToken.source.pointer)
78
+ });
79
+ }
80
+ }
81
+ entries.set(id, {
82
+ id,
83
+ type: resolvedToken?.type ?? baseType,
84
+ value: normalizedValue,
85
+ raw: normalizedRaw,
86
+ references: dedupePointers(references),
87
+ resolutionPath: dedupePointers(resolutionPath),
88
+ appliedAliases: dedupePointers(appliedAliases)
89
+ });
90
+ }
91
+ return entries;
92
+ }
93
+ function normalizeMetadata(metadata, source, documentUri) {
94
+ const description = typeof metadata.description?.value === 'string' ? metadata.description.value : undefined;
95
+ const extensions = cloneExtensions(metadata.extensions);
96
+ const deprecated = normalizeDeprecated(metadata, documentUri);
97
+ const line = Number.isFinite(source.line) ? source.line : 1;
98
+ const column = Number.isFinite(source.column) ? source.column : 1;
99
+ return {
100
+ description,
101
+ extensions,
102
+ deprecated,
103
+ source: {
104
+ uri: source.uri,
105
+ line,
106
+ column
107
+ }
108
+ };
109
+ }
110
+ function cloneExtensions(value) {
111
+ const extensionsValue = value?.value;
112
+ if (!extensionsValue || typeof extensionsValue !== 'object') {
113
+ return {};
114
+ }
115
+ const copy = {};
116
+ for (const [key, entry] of Object.entries(extensionsValue)) {
117
+ const cloned = toPlainJson(entry);
118
+ copy[key] = cloned === undefined ? entry : cloned;
119
+ }
120
+ return copy;
121
+ }
122
+ function normalizeDeprecated(metadata, documentUri) {
123
+ const deprecated = metadata.deprecated?.value;
124
+ if (!deprecated || typeof deprecated !== 'object') {
125
+ return undefined;
126
+ }
127
+ if ('active' in deprecated && deprecated.active) {
128
+ const replacementField = deprecated
129
+ .replacement;
130
+ const supersededBy = replacementField
131
+ ? createTokenPointer(replacementField.value, documentUri)
132
+ : undefined;
133
+ if (supersededBy) {
134
+ return { supersededBy };
135
+ }
136
+ return {};
137
+ }
138
+ return undefined;
139
+ }
140
+ function createTokenPointer(reference, documentUri) {
141
+ if (!reference || typeof reference !== 'string') {
142
+ return undefined;
143
+ }
144
+ try {
145
+ const trimmed = reference.trim();
146
+ if (trimmed.length === 0) {
147
+ return undefined;
148
+ }
149
+ const base = new URL(documentUri);
150
+ const resolved = new URL(trimmed, base);
151
+ const pointer = normalizeJsonPointer(resolved.hash || trimmed);
152
+ resolved.hash = '';
153
+ return {
154
+ uri: resolved.href,
155
+ pointer
156
+ };
157
+ }
158
+ catch {
159
+ return undefined;
160
+ }
161
+ }
162
+ //# sourceMappingURL=snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/tokens/snapshots.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIhE,MAAM,UAAU,sBAAsB,CAAC,KAAoB;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,WAAW,CAAC;QACtD,MAAM,QAAQ,GAAG,iBAAiB,CAChC,IAAI,CAAC,QAAQ,EACb;YACE,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI;YAC5B,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM;SACjC,EACD,WAAW,CACZ,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAoB,EACpB,QAA0B,EAC1B,UAA+D,EAAE;IAEjE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACnC,MAAM,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,iBAAiB,EAAE,CAAC;YACtB,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAChD,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;QAEvC,MAAM,KAAK,GAAG,aAAa,EAAE,KAAK,IAAI,QAAQ,CAAC;QAC/C,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,UAAU,GAAmB,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;gBACpB,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,EAAE,gBAAgB,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,gBAAgB,EAAE,CAAC;gBACtD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpB,UAAU,CAAC,IAAI,CAAC;wBACd,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;wBAC7B,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;qBACvD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,iBAAiB,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAChD,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;oBAC7C,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAiB;oBACjC,GAAG,EAAE,WAAW;oBAChB,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;iBAC5C,CAAC;gBACF,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC1B,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzB,UAAU,CAAC,IAAI,CAAC;oBACd,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;oBAClC,OAAO,EAAE,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;YACd,EAAE;YACF,IAAI,EAAE,aAAa,EAAE,IAAI,IAAI,QAAQ;YACrC,KAAK,EAAE,eAAe;YACtB,GAAG,EAAE,aAAa;YAClB,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;YACtC,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;YAC9C,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAsB,EACtB,MAAuD,EACvD,WAAmB;IAEnB,MAAM,WAAW,GACf,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,IAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,MAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,OAAO;QACL,WAAW;QACX,UAAU;QACV,UAAU;QACV,MAAM,EAAE;YACN,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI;YACJ,MAAM;SACP;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAiC;IACxD,MAAM,eAAe,GAAG,KAAK,EAAE,KAAK,CAAC;IACrC,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAA0C,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAsB,EACtB,WAAmB;IAEnB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC9C,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAI,UAAoE;aAC3F,WAAW,CAAC;QACf,MAAM,YAAY,GAAG,gBAAgB;YACnC,CAAC,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC;YACzD,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CACzB,SAA6B,EAC7B,WAAmB;IAMnB,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,SAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,SAAkB,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;QACnB,OAAO;YACL,GAAG,EAAE,QAAQ,CAAC,IAAI;YAClB,OAAO;SACC,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAkB,CAAC;IAC5B,CAAC;AACH,CAAC"}