@graph-ir/core 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 (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/generation/id-generator.d.ts +81 -0
  4. package/dist/generation/id-generator.d.ts.map +1 -0
  5. package/dist/generation/id-generator.js +193 -0
  6. package/dist/generation/id-generator.js.map +1 -0
  7. package/dist/generation/index.d.ts +7 -0
  8. package/dist/generation/index.d.ts.map +1 -0
  9. package/dist/generation/index.js +7 -0
  10. package/dist/generation/index.js.map +1 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +26 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/output/ci.d.ts +36 -0
  16. package/dist/output/ci.d.ts.map +1 -0
  17. package/dist/output/ci.js +145 -0
  18. package/dist/output/ci.js.map +1 -0
  19. package/dist/output/index.d.ts +20 -0
  20. package/dist/output/index.d.ts.map +1 -0
  21. package/dist/output/index.js +40 -0
  22. package/dist/output/index.js.map +1 -0
  23. package/dist/output/json.d.ts +24 -0
  24. package/dist/output/json.d.ts.map +1 -0
  25. package/dist/output/json.js +49 -0
  26. package/dist/output/json.js.map +1 -0
  27. package/dist/output/pretty.d.ts +44 -0
  28. package/dist/output/pretty.d.ts.map +1 -0
  29. package/dist/output/pretty.js +227 -0
  30. package/dist/output/pretty.js.map +1 -0
  31. package/dist/output/types.d.ts +63 -0
  32. package/dist/output/types.d.ts.map +1 -0
  33. package/dist/output/types.js +5 -0
  34. package/dist/output/types.js.map +1 -0
  35. package/dist/schemas/graph-ir.schema.json +360 -0
  36. package/dist/skills/diff.d.ts +73 -0
  37. package/dist/skills/diff.d.ts.map +1 -0
  38. package/dist/skills/diff.js +315 -0
  39. package/dist/skills/diff.js.map +1 -0
  40. package/dist/skills/migrate.d.ts +40 -0
  41. package/dist/skills/migrate.d.ts.map +1 -0
  42. package/dist/skills/migrate.js +288 -0
  43. package/dist/skills/migrate.js.map +1 -0
  44. package/dist/skills/visualize.d.ts +30 -0
  45. package/dist/skills/visualize.d.ts.map +1 -0
  46. package/dist/skills/visualize.js +254 -0
  47. package/dist/skills/visualize.js.map +1 -0
  48. package/dist/symbols/index.d.ts +12 -0
  49. package/dist/symbols/index.d.ts.map +1 -0
  50. package/dist/symbols/index.js +12 -0
  51. package/dist/symbols/index.js.map +1 -0
  52. package/dist/symbols/notation-registry.d.ts +61 -0
  53. package/dist/symbols/notation-registry.d.ts.map +1 -0
  54. package/dist/symbols/notation-registry.js +114 -0
  55. package/dist/symbols/notation-registry.js.map +1 -0
  56. package/dist/symbols/symbol-registry.d.ts +58 -0
  57. package/dist/symbols/symbol-registry.d.ts.map +1 -0
  58. package/dist/symbols/symbol-registry.js +88 -0
  59. package/dist/symbols/symbol-registry.js.map +1 -0
  60. package/dist/symbols/types.d.ts +166 -0
  61. package/dist/symbols/types.d.ts.map +1 -0
  62. package/dist/symbols/types.js +13 -0
  63. package/dist/symbols/types.js.map +1 -0
  64. package/dist/testing/diff.d.ts +46 -0
  65. package/dist/testing/diff.d.ts.map +1 -0
  66. package/dist/testing/diff.js +400 -0
  67. package/dist/testing/diff.js.map +1 -0
  68. package/dist/testing/index.d.ts +10 -0
  69. package/dist/testing/index.d.ts.map +1 -0
  70. package/dist/testing/index.js +10 -0
  71. package/dist/testing/index.js.map +1 -0
  72. package/dist/testing/snapshot.d.ts +95 -0
  73. package/dist/testing/snapshot.d.ts.map +1 -0
  74. package/dist/testing/snapshot.js +172 -0
  75. package/dist/testing/snapshot.js.map +1 -0
  76. package/dist/types.d.ts +240 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +7 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/validation/index.d.ts +9 -0
  81. package/dist/validation/index.d.ts.map +1 -0
  82. package/dist/validation/index.js +8 -0
  83. package/dist/validation/index.js.map +1 -0
  84. package/dist/validation/ir-validator.d.ts +51 -0
  85. package/dist/validation/ir-validator.d.ts.map +1 -0
  86. package/dist/validation/ir-validator.js +349 -0
  87. package/dist/validation/ir-validator.js.map +1 -0
  88. package/dist/validation/validator.d.ts +13 -0
  89. package/dist/validation/validator.d.ts.map +1 -0
  90. package/dist/validation/validator.js +19 -0
  91. package/dist/validation/validator.js.map +1 -0
  92. package/package.json +73 -0
@@ -0,0 +1,400 @@
1
+ /**
2
+ * Diff Utilities for Graph-IR
3
+ *
4
+ * Provides semantic diffing for Graph-IR structures that ignores
5
+ * ordering differences where appropriate.
6
+ */
7
+ // ============================================================================
8
+ // Generic Object Diff
9
+ // ============================================================================
10
+ /**
11
+ * Compute diff between two objects
12
+ */
13
+ export function diff(a, b, path = '') {
14
+ const changes = [];
15
+ diffRecursive(a, b, path, changes);
16
+ return { changes };
17
+ }
18
+ /**
19
+ * Recursive diff helper
20
+ */
21
+ function diffRecursive(a, b, path, changes) {
22
+ // Handle null/undefined
23
+ if (a === null && b === null)
24
+ return;
25
+ if (a === undefined && b === undefined)
26
+ return;
27
+ if (a === null || a === undefined) {
28
+ changes.push({ type: 'added', path: path || '$', newValue: b });
29
+ return;
30
+ }
31
+ if (b === null || b === undefined) {
32
+ changes.push({ type: 'removed', path: path || '$', oldValue: a });
33
+ return;
34
+ }
35
+ // Handle primitives
36
+ if (typeof a !== 'object' || typeof b !== 'object') {
37
+ if (a !== b) {
38
+ changes.push({
39
+ type: 'modified',
40
+ path: path || '$',
41
+ oldValue: a,
42
+ newValue: b,
43
+ });
44
+ }
45
+ return;
46
+ }
47
+ // Handle arrays
48
+ if (Array.isArray(a) && Array.isArray(b)) {
49
+ // Simple array diff - compare by index
50
+ const maxLen = Math.max(a.length, b.length);
51
+ for (let i = 0; i < maxLen; i++) {
52
+ const itemPath = path ? `${path}[${i}]` : `[${i}]`;
53
+ if (i >= a.length) {
54
+ changes.push({ type: 'added', path: itemPath, newValue: b[i] });
55
+ }
56
+ else if (i >= b.length) {
57
+ changes.push({ type: 'removed', path: itemPath, oldValue: a[i] });
58
+ }
59
+ else {
60
+ diffRecursive(a[i], b[i], itemPath, changes);
61
+ }
62
+ }
63
+ return;
64
+ }
65
+ // Handle objects
66
+ const aObj = a;
67
+ const bObj = b;
68
+ const allKeys = new Set([...Object.keys(aObj), ...Object.keys(bObj)]);
69
+ for (const key of allKeys) {
70
+ const keyPath = path ? `${path}.${key}` : key;
71
+ const aHas = key in aObj;
72
+ const bHas = key in bObj;
73
+ if (aHas && !bHas) {
74
+ changes.push({ type: 'removed', path: keyPath, oldValue: aObj[key] });
75
+ }
76
+ else if (!aHas && bHas) {
77
+ changes.push({ type: 'added', path: keyPath, newValue: bObj[key] });
78
+ }
79
+ else {
80
+ diffRecursive(aObj[key], bObj[key], keyPath, changes);
81
+ }
82
+ }
83
+ }
84
+ // ============================================================================
85
+ // Graph-IR Semantic Diff
86
+ // ============================================================================
87
+ /**
88
+ * Compute semantic diff between two Graph-IR structures
89
+ *
90
+ * This diff ignores:
91
+ * - Node ordering (compares by ID)
92
+ * - Edge ordering (compares by ID)
93
+ */
94
+ export function diffGraphIR(a, b) {
95
+ const changes = [];
96
+ // Compare metadata
97
+ if (a.version !== b.version) {
98
+ changes.push({
99
+ type: 'modified',
100
+ path: 'version',
101
+ oldValue: a.version,
102
+ newValue: b.version,
103
+ });
104
+ }
105
+ if (a.id !== b.id) {
106
+ changes.push({
107
+ type: 'modified',
108
+ path: 'id',
109
+ oldValue: a.id,
110
+ newValue: b.id,
111
+ });
112
+ }
113
+ if (a.name !== b.name) {
114
+ if (a.name === undefined) {
115
+ changes.push({ type: 'added', path: 'name', newValue: b.name });
116
+ }
117
+ else if (b.name === undefined) {
118
+ changes.push({ type: 'removed', path: 'name', oldValue: a.name });
119
+ }
120
+ else {
121
+ changes.push({
122
+ type: 'modified',
123
+ path: 'name',
124
+ oldValue: a.name,
125
+ newValue: b.name,
126
+ });
127
+ }
128
+ }
129
+ // Compare nodes by ID (order-independent)
130
+ const aNodesById = new Map(a.nodes.map((n) => [n.id, n]));
131
+ const bNodesById = new Map(b.nodes.map((n) => [n.id, n]));
132
+ // Find added/removed nodes
133
+ for (const [id, node] of bNodesById) {
134
+ if (!aNodesById.has(id)) {
135
+ changes.push({
136
+ type: 'added',
137
+ path: `nodes[id=${id}]`,
138
+ newValue: node,
139
+ });
140
+ }
141
+ }
142
+ for (const [id, node] of aNodesById) {
143
+ if (!bNodesById.has(id)) {
144
+ changes.push({
145
+ type: 'removed',
146
+ path: `nodes[id=${id}]`,
147
+ oldValue: node,
148
+ });
149
+ }
150
+ }
151
+ // Compare matching nodes
152
+ for (const [id, aNode] of aNodesById) {
153
+ const bNode = bNodesById.get(id);
154
+ if (bNode) {
155
+ const nodeChanges = diffNode(aNode, bNode, `nodes[id=${id}]`);
156
+ changes.push(...nodeChanges);
157
+ }
158
+ }
159
+ // Compare edges by ID (order-independent)
160
+ const aEdgesById = new Map(a.edges.map((e) => [e.id, e]));
161
+ const bEdgesById = new Map(b.edges.map((e) => [e.id, e]));
162
+ // Find added/removed edges
163
+ for (const [id, edge] of bEdgesById) {
164
+ if (!aEdgesById.has(id)) {
165
+ changes.push({
166
+ type: 'added',
167
+ path: `edges[id=${id}]`,
168
+ newValue: edge,
169
+ });
170
+ }
171
+ }
172
+ for (const [id, edge] of aEdgesById) {
173
+ if (!bEdgesById.has(id)) {
174
+ changes.push({
175
+ type: 'removed',
176
+ path: `edges[id=${id}]`,
177
+ oldValue: edge,
178
+ });
179
+ }
180
+ }
181
+ // Compare matching edges
182
+ for (const [id, aEdge] of aEdgesById) {
183
+ const bEdge = bEdgesById.get(id);
184
+ if (bEdge) {
185
+ const edgeChanges = diffEdge(aEdge, bEdge, `edges[id=${id}]`);
186
+ changes.push(...edgeChanges);
187
+ }
188
+ }
189
+ return { changes };
190
+ }
191
+ /**
192
+ * Diff two nodes
193
+ */
194
+ function diffNode(a, b, basePath) {
195
+ const changes = [];
196
+ // Compare simple properties
197
+ const simpleProps = [
198
+ 'type',
199
+ 'label',
200
+ 'description',
201
+ 'pinned',
202
+ ];
203
+ for (const prop of simpleProps) {
204
+ if (a[prop] !== b[prop]) {
205
+ const aVal = a[prop];
206
+ const bVal = b[prop];
207
+ if (aVal === undefined && bVal !== undefined) {
208
+ changes.push({
209
+ type: 'added',
210
+ path: `${basePath}.${prop}`,
211
+ newValue: bVal,
212
+ });
213
+ }
214
+ else if (aVal !== undefined && bVal === undefined) {
215
+ changes.push({
216
+ type: 'removed',
217
+ path: `${basePath}.${prop}`,
218
+ oldValue: aVal,
219
+ });
220
+ }
221
+ else {
222
+ changes.push({
223
+ type: 'modified',
224
+ path: `${basePath}.${prop}`,
225
+ oldValue: aVal,
226
+ newValue: bVal,
227
+ });
228
+ }
229
+ }
230
+ }
231
+ // Compare properties object
232
+ if (JSON.stringify(a.properties) !== JSON.stringify(b.properties)) {
233
+ changes.push({
234
+ type: 'modified',
235
+ path: `${basePath}.properties`,
236
+ oldValue: a.properties,
237
+ newValue: b.properties,
238
+ });
239
+ }
240
+ // Compare position
241
+ if (a.position || b.position) {
242
+ if (a.position?.x !== b.position?.x ||
243
+ a.position?.y !== b.position?.y) {
244
+ changes.push({
245
+ type: 'modified',
246
+ path: `${basePath}.position`,
247
+ oldValue: a.position,
248
+ newValue: b.position,
249
+ });
250
+ }
251
+ }
252
+ // Compare dimensions
253
+ if (a.dimensions || b.dimensions) {
254
+ if (a.dimensions?.width !== b.dimensions?.width ||
255
+ a.dimensions?.height !== b.dimensions?.height) {
256
+ changes.push({
257
+ type: 'modified',
258
+ path: `${basePath}.dimensions`,
259
+ oldValue: a.dimensions,
260
+ newValue: b.dimensions,
261
+ });
262
+ }
263
+ }
264
+ // Compare children recursively (by ID)
265
+ if (a.children || b.children) {
266
+ const aChildren = a.children || [];
267
+ const bChildren = b.children || [];
268
+ const aChildrenById = new Map(aChildren.map((n) => [n.id, n]));
269
+ const bChildrenById = new Map(bChildren.map((n) => [n.id, n]));
270
+ for (const [id, child] of bChildrenById) {
271
+ if (!aChildrenById.has(id)) {
272
+ changes.push({
273
+ type: 'added',
274
+ path: `${basePath}.children[id=${id}]`,
275
+ newValue: child,
276
+ });
277
+ }
278
+ }
279
+ for (const [id, child] of aChildrenById) {
280
+ if (!bChildrenById.has(id)) {
281
+ changes.push({
282
+ type: 'removed',
283
+ path: `${basePath}.children[id=${id}]`,
284
+ oldValue: child,
285
+ });
286
+ }
287
+ else {
288
+ const bChild = bChildrenById.get(id);
289
+ const childChanges = diffNode(child, bChild, `${basePath}.children[id=${id}]`);
290
+ changes.push(...childChanges);
291
+ }
292
+ }
293
+ }
294
+ return changes;
295
+ }
296
+ /**
297
+ * Diff two edges
298
+ */
299
+ function diffEdge(a, b, basePath) {
300
+ const changes = [];
301
+ // Compare simple properties
302
+ const simpleProps = [
303
+ 'source',
304
+ 'target',
305
+ 'sourcePort',
306
+ 'targetPort',
307
+ 'type',
308
+ 'label',
309
+ ];
310
+ for (const prop of simpleProps) {
311
+ if (a[prop] !== b[prop]) {
312
+ const aVal = a[prop];
313
+ const bVal = b[prop];
314
+ if (aVal === undefined && bVal !== undefined) {
315
+ changes.push({
316
+ type: 'added',
317
+ path: `${basePath}.${prop}`,
318
+ newValue: bVal,
319
+ });
320
+ }
321
+ else if (aVal !== undefined && bVal === undefined) {
322
+ changes.push({
323
+ type: 'removed',
324
+ path: `${basePath}.${prop}`,
325
+ oldValue: aVal,
326
+ });
327
+ }
328
+ else {
329
+ changes.push({
330
+ type: 'modified',
331
+ path: `${basePath}.${prop}`,
332
+ oldValue: aVal,
333
+ newValue: bVal,
334
+ });
335
+ }
336
+ }
337
+ }
338
+ // Compare properties object
339
+ if (JSON.stringify(a.properties) !== JSON.stringify(b.properties)) {
340
+ changes.push({
341
+ type: 'modified',
342
+ path: `${basePath}.properties`,
343
+ oldValue: a.properties,
344
+ newValue: b.properties,
345
+ });
346
+ }
347
+ return changes;
348
+ }
349
+ // ============================================================================
350
+ // Formatting
351
+ // ============================================================================
352
+ /**
353
+ * Format a diff result for human-readable output
354
+ */
355
+ export function formatDiff(result, options = {}) {
356
+ if (result.changes.length === 0) {
357
+ return 'No differences found.';
358
+ }
359
+ const lines = [];
360
+ lines.push(`Found ${result.changes.length} difference(s):`);
361
+ lines.push('');
362
+ for (const change of result.changes) {
363
+ let prefix;
364
+ let valueStr;
365
+ switch (change.type) {
366
+ case 'added':
367
+ prefix = '+';
368
+ valueStr = formatValue(change.newValue);
369
+ break;
370
+ case 'removed':
371
+ prefix = '-';
372
+ valueStr = formatValue(change.oldValue);
373
+ break;
374
+ case 'modified':
375
+ prefix = '~';
376
+ valueStr = `${formatValue(change.oldValue)} → ${formatValue(change.newValue)}`;
377
+ break;
378
+ }
379
+ lines.push(` ${prefix} ${change.path}: ${valueStr}`);
380
+ }
381
+ return lines.join('\n');
382
+ }
383
+ /**
384
+ * Format a value for display
385
+ */
386
+ function formatValue(value) {
387
+ if (value === undefined)
388
+ return 'undefined';
389
+ if (value === null)
390
+ return 'null';
391
+ if (typeof value === 'object') {
392
+ const str = JSON.stringify(value);
393
+ if (str.length > 50) {
394
+ return str.slice(0, 47) + '...';
395
+ }
396
+ return str;
397
+ }
398
+ return String(value);
399
+ }
400
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/testing/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Testing module for Graph-IR
3
+ *
4
+ * Utilities for snapshot testing and diffing Graph-IR structures.
5
+ */
6
+ export { SnapshotManager, wrapSnapshot, unwrapSnapshot, } from './snapshot.js';
7
+ export type { Snapshot, SnapshotMatchResult } from './snapshot.js';
8
+ export { diff, diffGraphIR, formatDiff } from './diff.js';
9
+ export type { Change, DiffResult } from './diff.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE1D,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Testing module for Graph-IR
3
+ *
4
+ * Utilities for snapshot testing and diffing Graph-IR structures.
5
+ */
6
+ // Snapshot utilities
7
+ export { SnapshotManager, wrapSnapshot, unwrapSnapshot, } from './snapshot.js';
8
+ // Diff utilities
9
+ export { diff, diffGraphIR, formatDiff } from './diff.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAqB;AACrB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,GACf,MAAM,eAAe,CAAC;AAIvB,iBAAiB;AACjB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Snapshot Testing Utilities for Graph-IR
3
+ *
4
+ * Provides snapshot management for comparing Graph-IR structures
5
+ * across test runs.
6
+ */
7
+ /**
8
+ * Snapshot envelope with metadata
9
+ */
10
+ export interface Snapshot<T = unknown> {
11
+ /** Snapshot name/identifier */
12
+ name: string;
13
+ /** The actual snapshot data */
14
+ data: T;
15
+ /** ISO 8601 timestamp when created */
16
+ createdAt: string;
17
+ /** ISO 8601 timestamp when last updated */
18
+ updatedAt?: string;
19
+ /** Snapshot format version */
20
+ version: number;
21
+ }
22
+ /**
23
+ * Result of a snapshot match operation
24
+ */
25
+ export interface SnapshotMatchResult {
26
+ /** Match status */
27
+ status: 'pass' | 'fail' | 'new';
28
+ /** Snapshot name */
29
+ name: string;
30
+ /** Diff description if failed (human-readable) */
31
+ diff?: string;
32
+ /** Expected data (from snapshot) */
33
+ expected?: unknown;
34
+ /** Actual data (from test) */
35
+ actual?: unknown;
36
+ }
37
+ /**
38
+ * Manages snapshots for testing
39
+ */
40
+ export declare class SnapshotManager {
41
+ private snapshotDir;
42
+ constructor(snapshotDir: string);
43
+ /**
44
+ * Match data against a snapshot
45
+ *
46
+ * If snapshot doesn't exist, creates it.
47
+ * If snapshot exists, compares and returns result.
48
+ */
49
+ match<T>(name: string, data: T): SnapshotMatchResult;
50
+ /**
51
+ * Update a snapshot with new data
52
+ */
53
+ update<T>(name: string, data: T): void;
54
+ /**
55
+ * Read a snapshot by name
56
+ */
57
+ read<T = unknown>(name: string): Snapshot<T> | undefined;
58
+ /**
59
+ * Check if a snapshot exists
60
+ */
61
+ exists(name: string): boolean;
62
+ /**
63
+ * Delete a snapshot
64
+ */
65
+ delete(name: string): void;
66
+ /**
67
+ * List all snapshot names
68
+ */
69
+ list(): string[];
70
+ /**
71
+ * Get the file path for a snapshot
72
+ */
73
+ private getSnapshotPath;
74
+ /**
75
+ * Write a snapshot to disk
76
+ */
77
+ private writeSnapshot;
78
+ /**
79
+ * Deep equality check
80
+ */
81
+ private deepEqual;
82
+ /**
83
+ * Format a simple diff for display
84
+ */
85
+ private formatDiff;
86
+ }
87
+ /**
88
+ * Wrap data in a snapshot envelope
89
+ */
90
+ export declare function wrapSnapshot<T>(data: T, name: string): Snapshot<T>;
91
+ /**
92
+ * Extract data from a snapshot envelope
93
+ */
94
+ export declare function unwrapSnapshot<T>(snapshot: Snapshot<T>): T;
95
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/testing/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IAEb,+BAA+B;IAC/B,IAAI,EAAE,CAAC,CAAC;IAER,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAEhC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAS/B;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,mBAAmB;IAuCpD;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAatC;;OAEG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;IAexD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAUhB;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,UAAU;CAYnB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAE1D"}