@openrewrite/rewrite 8.66.0 → 8.66.2

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 (113) hide show
  1. package/dist/java/tree.d.ts +10 -1
  2. package/dist/java/tree.d.ts.map +1 -1
  3. package/dist/java/tree.js +21 -5
  4. package/dist/java/tree.js.map +1 -1
  5. package/dist/java/type-visitor.d.ts +1 -1
  6. package/dist/java/type-visitor.d.ts.map +1 -1
  7. package/dist/java/visitor.d.ts +2 -2
  8. package/dist/java/visitor.d.ts.map +1 -1
  9. package/dist/java/visitor.js +8 -2
  10. package/dist/java/visitor.js.map +1 -1
  11. package/dist/javascript/assertions.d.ts +6 -0
  12. package/dist/javascript/assertions.d.ts.map +1 -1
  13. package/dist/javascript/assertions.js +14 -6
  14. package/dist/javascript/assertions.js.map +1 -1
  15. package/dist/javascript/comparator.d.ts +217 -7
  16. package/dist/javascript/comparator.d.ts.map +1 -1
  17. package/dist/javascript/comparator.js +1020 -2848
  18. package/dist/javascript/comparator.js.map +1 -1
  19. package/dist/javascript/format.d.ts +5 -3
  20. package/dist/javascript/format.d.ts.map +1 -1
  21. package/dist/javascript/format.js +87 -44
  22. package/dist/javascript/format.js.map +1 -1
  23. package/dist/javascript/index.d.ts +2 -1
  24. package/dist/javascript/index.d.ts.map +1 -1
  25. package/dist/javascript/index.js +2 -1
  26. package/dist/javascript/index.js.map +1 -1
  27. package/dist/javascript/parser.d.ts +2 -1
  28. package/dist/javascript/parser.d.ts.map +1 -1
  29. package/dist/javascript/parser.js +54 -43
  30. package/dist/javascript/parser.js.map +1 -1
  31. package/dist/javascript/templating/capture.d.ts +293 -0
  32. package/dist/javascript/templating/capture.d.ts.map +1 -0
  33. package/dist/javascript/templating/capture.js +461 -0
  34. package/dist/javascript/templating/capture.js.map +1 -0
  35. package/dist/javascript/templating/comparator.d.ts +171 -0
  36. package/dist/javascript/templating/comparator.d.ts.map +1 -0
  37. package/dist/javascript/templating/comparator.js +1221 -0
  38. package/dist/javascript/templating/comparator.js.map +1 -0
  39. package/dist/javascript/templating/engine.d.ts +108 -0
  40. package/dist/javascript/templating/engine.d.ts.map +1 -0
  41. package/dist/javascript/templating/engine.js +661 -0
  42. package/dist/javascript/templating/engine.js.map +1 -0
  43. package/dist/javascript/templating/index.d.ts +6 -0
  44. package/dist/javascript/templating/index.d.ts.map +1 -0
  45. package/dist/javascript/templating/index.js +44 -0
  46. package/dist/javascript/templating/index.js.map +1 -0
  47. package/dist/javascript/templating/pattern.d.ts +276 -0
  48. package/dist/javascript/templating/pattern.d.ts.map +1 -0
  49. package/dist/javascript/templating/pattern.js +952 -0
  50. package/dist/javascript/templating/pattern.js.map +1 -0
  51. package/dist/javascript/templating/placeholder-replacement.d.ts +83 -0
  52. package/dist/javascript/templating/placeholder-replacement.d.ts.map +1 -0
  53. package/dist/javascript/templating/placeholder-replacement.js +467 -0
  54. package/dist/javascript/templating/placeholder-replacement.js.map +1 -0
  55. package/dist/javascript/templating/rewrite.d.ts +84 -0
  56. package/dist/javascript/templating/rewrite.d.ts.map +1 -0
  57. package/dist/javascript/templating/rewrite.js +208 -0
  58. package/dist/javascript/templating/rewrite.js.map +1 -0
  59. package/dist/javascript/templating/template.d.ts +230 -0
  60. package/dist/javascript/templating/template.d.ts.map +1 -0
  61. package/dist/javascript/templating/template.js +367 -0
  62. package/dist/javascript/templating/template.js.map +1 -0
  63. package/dist/javascript/templating/types.d.ts +610 -0
  64. package/dist/javascript/templating/types.d.ts.map +1 -0
  65. package/dist/javascript/templating/types.js +3 -0
  66. package/dist/javascript/templating/types.js.map +1 -0
  67. package/dist/javascript/templating/utils.d.ts +135 -0
  68. package/dist/javascript/templating/utils.d.ts.map +1 -0
  69. package/dist/javascript/templating/utils.js +251 -0
  70. package/dist/javascript/templating/utils.js.map +1 -0
  71. package/dist/javascript/type-mapping.d.ts.map +1 -1
  72. package/dist/javascript/type-mapping.js +21 -11
  73. package/dist/javascript/type-mapping.js.map +1 -1
  74. package/dist/json/rpc.js +2 -2
  75. package/dist/json/rpc.js.map +1 -1
  76. package/dist/recipe/order-imports.js.map +1 -1
  77. package/dist/test/rewrite-test.d.ts.map +1 -1
  78. package/dist/test/rewrite-test.js +10 -6
  79. package/dist/test/rewrite-test.js.map +1 -1
  80. package/dist/version.txt +1 -1
  81. package/dist/visitor.d.ts +4 -4
  82. package/dist/visitor.d.ts.map +1 -1
  83. package/dist/visitor.js +8 -3
  84. package/dist/visitor.js.map +1 -1
  85. package/package.json +5 -2
  86. package/src/java/tree.ts +10 -3
  87. package/src/java/type-visitor.ts +1 -1
  88. package/src/java/visitor.ts +11 -5
  89. package/src/javascript/assertions.ts +9 -3
  90. package/src/javascript/comparator.ts +1095 -3373
  91. package/src/javascript/format.ts +72 -33
  92. package/src/javascript/index.ts +2 -1
  93. package/src/javascript/parser.ts +67 -45
  94. package/src/javascript/templating/capture.ts +595 -0
  95. package/src/javascript/templating/comparator.ts +1383 -0
  96. package/src/javascript/templating/engine.ts +750 -0
  97. package/src/javascript/templating/index.ts +67 -0
  98. package/src/javascript/templating/pattern.ts +1101 -0
  99. package/src/javascript/templating/placeholder-replacement.ts +475 -0
  100. package/src/javascript/templating/rewrite.ts +229 -0
  101. package/src/javascript/templating/template.ts +414 -0
  102. package/src/javascript/templating/types.ts +674 -0
  103. package/src/javascript/templating/utils.ts +298 -0
  104. package/src/javascript/type-mapping.ts +20 -11
  105. package/src/json/rpc.ts +2 -2
  106. package/src/recipe/order-imports.ts +1 -1
  107. package/src/test/rewrite-test.ts +12 -7
  108. package/src/visitor.ts +14 -6
  109. package/dist/javascript/templating.d.ts +0 -265
  110. package/dist/javascript/templating.d.ts.map +0 -1
  111. package/dist/javascript/templating.js +0 -1027
  112. package/dist/javascript/templating.js.map +0 -1
  113. package/src/javascript/templating.ts +0 -1226
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Template = exports.TemplateBuilder = void 0;
13
+ exports.template = template;
14
+ const pattern_1 = require("./pattern");
15
+ const utils_1 = require("./utils");
16
+ const capture_1 = require("./capture");
17
+ const engine_1 = require("./engine");
18
+ var JavaCoordinates;
19
+ (function (JavaCoordinates) {
20
+ let Mode;
21
+ (function (Mode) {
22
+ Mode[Mode["Before"] = 0] = "Before";
23
+ Mode[Mode["After"] = 1] = "After";
24
+ Mode[Mode["Replace"] = 2] = "Replace";
25
+ })(Mode = JavaCoordinates.Mode || (JavaCoordinates.Mode = {}));
26
+ })(JavaCoordinates || (JavaCoordinates = {}));
27
+ /**
28
+ * Builder for creating templates programmatically.
29
+ * Use when template structure is not known at compile time.
30
+ *
31
+ * @example
32
+ * // Conditional construction
33
+ * const builder = Template.builder().code('function foo(x) {');
34
+ * if (needsValidation) {
35
+ * builder.code('if (typeof x !== "number") throw new Error("Invalid");');
36
+ * }
37
+ * builder.code('return x * 2; }');
38
+ * const tmpl = builder.build();
39
+ *
40
+ * @example
41
+ * // Composition from fragments
42
+ * function createWrapper(innerBody: Capture): Template {
43
+ * return Template.builder()
44
+ * .code('function wrapper() { try { ')
45
+ * .param(innerBody)
46
+ * .code(' } catch(e) { console.error(e); } }')
47
+ * .build();
48
+ * }
49
+ */
50
+ class TemplateBuilder {
51
+ constructor() {
52
+ this.parts = [];
53
+ this.params = [];
54
+ }
55
+ /**
56
+ * Adds a static string part to the template.
57
+ *
58
+ * @param str The string to add
59
+ * @returns This builder for chaining
60
+ */
61
+ code(str) {
62
+ // If there are already params, we need to add an empty string before this
63
+ if (this.params.length > this.parts.length) {
64
+ this.parts.push('');
65
+ }
66
+ // Append to the last part or start a new one
67
+ if (this.parts.length === 0) {
68
+ this.parts.push(str);
69
+ }
70
+ else {
71
+ this.parts[this.parts.length - 1] += str;
72
+ }
73
+ return this;
74
+ }
75
+ /**
76
+ * Adds a parameter to the template.
77
+ *
78
+ * @param value The parameter value (Capture, Tree, or primitive)
79
+ * @returns This builder for chaining
80
+ */
81
+ param(value) {
82
+ // Ensure we have a part for after this parameter
83
+ if (this.parts.length === 0) {
84
+ this.parts.push('');
85
+ }
86
+ this.params.push(value);
87
+ // Add an empty string for the next part
88
+ this.parts.push('');
89
+ return this;
90
+ }
91
+ /**
92
+ * Builds the template from accumulated parts and parameters.
93
+ *
94
+ * @returns A Template instance
95
+ */
96
+ build() {
97
+ // Ensure parts array is one longer than params array
98
+ while (this.parts.length <= this.params.length) {
99
+ this.parts.push('');
100
+ }
101
+ // Create a synthetic TemplateStringsArray
102
+ const templateStrings = this.parts.slice();
103
+ templateStrings.raw = this.parts.slice();
104
+ Object.defineProperty(templateStrings, 'raw', {
105
+ value: this.parts.slice(),
106
+ writable: false
107
+ });
108
+ // Delegate to the template() function
109
+ return template(templateStrings, ...this.params);
110
+ }
111
+ }
112
+ exports.TemplateBuilder = TemplateBuilder;
113
+ /**
114
+ * Template for creating AST nodes.
115
+ *
116
+ * This class provides the public API for template generation.
117
+ * The actual templating logic is handled by the internal TemplateEngine.
118
+ *
119
+ * Templates can reference captures from patterns, and you can access properties
120
+ * of captured nodes using dot notation. This allows you to extract and insert
121
+ * specific subtrees from matched AST nodes.
122
+ *
123
+ * @example
124
+ * // Generate a literal AST node
125
+ * const result = template`2`.apply(cursor, coordinates);
126
+ *
127
+ * @example
128
+ * // Generate an AST node with a parameter
129
+ * const result = template`${capture()}`.apply(cursor, coordinates);
130
+ *
131
+ * @example
132
+ * // Access properties of captured nodes in templates
133
+ * const method = capture<J.MethodInvocation>('method');
134
+ * const pat = pattern`foo(${method})`;
135
+ * const tmpl = template`bar(${method.name})`; // Access the 'name' property
136
+ *
137
+ * const match = await pat.match(someNode);
138
+ * if (match) {
139
+ * // The template will insert just the 'name' subtree from the captured method
140
+ * const result = await tmpl.apply(cursor, someNode, match);
141
+ * }
142
+ *
143
+ * @example
144
+ * // Deep property access chains
145
+ * const method = capture<J.MethodInvocation>('method');
146
+ * template`console.log(${method.name.simpleName})` // Navigate multiple properties
147
+ *
148
+ * @example
149
+ * // Array element access
150
+ * const invocation = capture<J.MethodInvocation>('invocation');
151
+ * template`bar(${invocation.arguments.elements[0].element})` // Access array elements
152
+ */
153
+ class Template {
154
+ /**
155
+ * Creates a new builder for constructing templates programmatically.
156
+ *
157
+ * @returns A new TemplateBuilder instance
158
+ *
159
+ * @example
160
+ * const tmpl = Template.builder()
161
+ * .code('function foo() {')
162
+ * .code('return ')
163
+ * .param(capture('value'))
164
+ * .code('; }')
165
+ * .build();
166
+ */
167
+ static builder() {
168
+ return new TemplateBuilder();
169
+ }
170
+ /**
171
+ * Creates a new template.
172
+ *
173
+ * @param templateParts The string parts of the template
174
+ * @param parameters The parameters between the string parts
175
+ */
176
+ constructor(templateParts, parameters) {
177
+ this.templateParts = templateParts;
178
+ this.parameters = parameters;
179
+ this.options = {};
180
+ }
181
+ /**
182
+ * Configures this template with additional options.
183
+ *
184
+ * @param options Configuration options
185
+ * @returns This template for method chaining
186
+ *
187
+ * @example
188
+ * template`isDate(${capture('date')})`
189
+ * .configure({
190
+ * context: ['import { isDate } from "util"'],
191
+ * dependencies: { 'util': '^1.0.0' }
192
+ * })
193
+ */
194
+ configure(options) {
195
+ this.options = Object.assign(Object.assign({}, this.options), options);
196
+ // Invalidate cache when configuration changes
197
+ this._cachedTemplate = undefined;
198
+ return this;
199
+ }
200
+ /**
201
+ * Gets the template tree for this template, using two-level caching:
202
+ * - Level 1: Instance cache (this._cachedTemplate) - fastest, no lookup needed
203
+ * - Level 2: Global cache (globalAstCache) - fast, shared across all templates
204
+ * - Level 3: TemplateEngine - slow, parses and processes the template
205
+ *
206
+ * Most parameters use placeholders that are replaced during application, so templates
207
+ * with the same structure share cached ASTs. However, raw() parameters are spliced at
208
+ * construction time, so their values must be included in the cache key.
209
+ *
210
+ * @returns The cached or newly computed template tree
211
+ * @internal
212
+ */
213
+ getTemplateTree() {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ // Level 1: Instance cache (fastest path)
216
+ if (this._cachedTemplate) {
217
+ return this._cachedTemplate;
218
+ }
219
+ // Generate cache key for global lookup
220
+ // For raw() parameters, we need to include their code values in the key
221
+ // since they're spliced at construction time, not application time
222
+ const contextStatements = this.options.context || this.options.imports || [];
223
+ const parametersKey = this.parameters.map((p, i) => {
224
+ const value = p.value;
225
+ // Include raw code values in the cache key using the symbol
226
+ if (value && typeof value === 'object' && value[capture_1.RAW_CODE_SYMBOL]) {
227
+ return `raw:${value.code}`;
228
+ }
229
+ return i.toString();
230
+ }).join(',');
231
+ const cacheKey = (0, utils_1.generateCacheKey)(this.templateParts, parametersKey, contextStatements, this.options.dependencies || {});
232
+ // Level 2: Global cache (fast path - shared with Pattern)
233
+ const cached = utils_1.globalAstCache.get(cacheKey);
234
+ if (cached) {
235
+ this._cachedTemplate = cached;
236
+ return cached;
237
+ }
238
+ // Level 3: Compute via TemplateEngine (slow path)
239
+ const result = yield engine_1.TemplateEngine.getTemplateTree(this.templateParts, this.parameters, contextStatements, this.options.dependencies || {});
240
+ // Cache in both levels
241
+ utils_1.globalAstCache.set(cacheKey, result);
242
+ this._cachedTemplate = result;
243
+ return result;
244
+ });
245
+ }
246
+ /**
247
+ * Applies this template and returns the resulting tree.
248
+ *
249
+ * @param cursor The cursor pointing to the current location in the AST
250
+ * @param tree Input tree
251
+ * @param values values for parameters in template
252
+ * @returns A Promise resolving to the generated AST node
253
+ */
254
+ apply(cursor, tree, values) {
255
+ return __awaiter(this, void 0, void 0, function* () {
256
+ // Normalize the values map: convert any Capture keys to string keys
257
+ let normalizedValues;
258
+ let wrappersMap = new Map();
259
+ if (values instanceof pattern_1.MatchResult) {
260
+ // MatchResult - extract both bindings and wrappersMap
261
+ normalizedValues = values;
262
+ wrappersMap = values[utils_1.WRAPPERS_MAP_SYMBOL]();
263
+ }
264
+ else if (values instanceof Map) {
265
+ const normalized = new Map();
266
+ for (const [key, value] of values.entries()) {
267
+ const stringKey = typeof key === 'string'
268
+ ? key
269
+ : (key[capture_1.CAPTURE_NAME_SYMBOL] || key.getName());
270
+ normalized.set(stringKey, value);
271
+ }
272
+ normalizedValues = normalized;
273
+ }
274
+ else if (values && typeof values === 'object') {
275
+ // Check if it's a Map-like object with 'get' method, or a plain object literal
276
+ if ('get' in values && typeof values.get === 'function') {
277
+ // Map-like object with get method
278
+ normalizedValues = values;
279
+ }
280
+ else {
281
+ // Plain object literal - convert to Map
282
+ // Keys may be strings or Capture objects (via computed properties {[x]: value})
283
+ const normalized = new Map();
284
+ for (const [key, value] of Object.entries(values)) {
285
+ // If the key happens to be a stringified Capture (from computed properties),
286
+ // it's already been converted to a string by JavaScript
287
+ normalized.set(key, value);
288
+ }
289
+ normalizedValues = normalized;
290
+ }
291
+ }
292
+ // Use instance-level cache to get the template tree
293
+ const ast = yield this.getTemplateTree();
294
+ // Delegate to TemplateEngine for placeholder substitution and application
295
+ return engine_1.TemplateEngine.applyTemplateFromAst(ast, this.parameters, cursor, {
296
+ tree,
297
+ mode: JavaCoordinates.Mode.Replace
298
+ }, normalizedValues, wrappersMap);
299
+ });
300
+ }
301
+ }
302
+ exports.Template = Template;
303
+ /**
304
+ * Tagged template function for creating templates that generate AST nodes.
305
+ *
306
+ * Templates support property access on captures from patterns, allowing you to
307
+ * extract and insert specific subtrees from matched AST nodes. Use dot notation
308
+ * to navigate properties (e.g., `method.name`) or array bracket notation to
309
+ * access array elements (e.g., `args.elements[0].element`).
310
+ *
311
+ * Templates can also accept AST wrapper types directly:
312
+ * - J.RightPadded<T>: The element will be extracted and inserted
313
+ * - J.RightPadded<T>[]: Elements will be expanded in place
314
+ * - J.Container<T>: Elements will be expanded in place
315
+ *
316
+ * @param strings The string parts of the template
317
+ * @param parameters The parameters between the string parts (Capture, CaptureValue, TemplateParam, Tree, Tree[], J.RightPadded, J.RightPadded[], or J.Container)
318
+ * @returns A Template object that can be applied to generate AST nodes
319
+ *
320
+ * @example
321
+ * // Simple template with literal
322
+ * const tmpl = template`console.log("hello")`;
323
+ * const result = await tmpl.apply(cursor, node);
324
+ *
325
+ * @example
326
+ * // Template with capture - matches captured value from pattern
327
+ * const expr = capture('expr');
328
+ * const pat = pattern`foo(${expr})`;
329
+ * const tmpl = template`bar(${expr})`;
330
+ *
331
+ * const match = await pat.match(node);
332
+ * if (match) {
333
+ * const result = await tmpl.apply(cursor, node, match);
334
+ * }
335
+ *
336
+ * @example
337
+ * // Property access on captures - extract subtrees
338
+ * const method = capture<J.MethodInvocation>('method');
339
+ * const pat = pattern`foo(${method})`;
340
+ * // Access the 'name' property of the captured method invocation
341
+ * const tmpl = template`bar(${method.name})`;
342
+ *
343
+ * @example
344
+ * // Deep property chains
345
+ * const method = capture<J.MethodInvocation>('method');
346
+ * template`console.log(${method.name.simpleName})`
347
+ *
348
+ * @example
349
+ * // Array element access
350
+ * const invocation = capture<J.MethodInvocation>('invocation');
351
+ * template`bar(${invocation.arguments.elements[0].element})`
352
+ *
353
+ * @example
354
+ * // Using J.RightPadded and J.Container directly
355
+ * const selectExpr = method.select; // J.RightPadded<Expression>
356
+ * const args = method.arguments; // J.Container<Expression>
357
+ * template`${selectExpr}.newMethod(${args})`
358
+ */
359
+ function template(strings, ...parameters) {
360
+ // Convert parameters to Parameter objects (no longer need to check for mutable tree property)
361
+ const processedParameters = parameters.map(param => {
362
+ // Just wrap each parameter value in a Parameter object
363
+ return { value: param };
364
+ });
365
+ return new Template(strings, processedParameters);
366
+ }
367
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/javascript/templating/template.ts"],"names":[],"mappings":";;;;;;;;;;;;AAmZA,4BAQC;AAzYD,uCAAsC;AACtC,mCAA8E;AAC9E,uCAA+D;AAC/D,qCAAwC;AAYxC,IAAU,eAAe,CASxB;AATD,WAAU,eAAe;IAIrB,IAAY,IAIX;IAJD,WAAY,IAAI;QACZ,mCAAM,CAAA;QACN,iCAAK,CAAA;QACL,qCAAO,CAAA;IACX,CAAC,EAJW,IAAI,GAAJ,oBAAI,KAAJ,oBAAI,QAIf;AACL,CAAC,EATS,eAAe,KAAf,eAAe,QASxB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,eAAe;IAA5B;QACY,UAAK,GAAa,EAAE,CAAC;QACrB,WAAM,GAAwB,EAAE,CAAC;IA6D7C,CAAC;IA3DG;;;;;OAKG;IACH,IAAI,CAAC,GAAW;QACZ,0EAA0E;QAC1E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,6CAA6C;QAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAwB;QAC1B,iDAAiD;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,wCAAwC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACD,qDAAqD;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAED,0CAA0C;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAS,CAAC;QAClD,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,EAAE;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACzB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,sCAAsC;QACtC,OAAO,QAAQ,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACJ;AA/DD,0CA+DC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAa,QAAQ;IAIjB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,OAAO;QACV,OAAO,IAAI,eAAe,EAAE,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,YACqB,aAAmC,EACnC,UAAuB;QADvB,kBAAa,GAAb,aAAa,CAAsB;QACnC,eAAU,GAAV,UAAU,CAAa;QA5BpC,YAAO,GAAoB,EAAE,CAAC;IA8BtC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,OAAwB;QAC9B,IAAI,CAAC,OAAO,mCAAQ,IAAI,CAAC,OAAO,GAAK,OAAO,CAAE,CAAC;QAC/C,8CAA8C;QAC9C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;OAYG;IACG,eAAe;;YACjB,yCAAyC;YACzC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,eAAqC,CAAC;YACtD,CAAC;YAED,uCAAuC;YACvC,wEAAwE;YACxE,mEAAmE;YACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBACtB,4DAA4D;gBAC5D,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,yBAAe,CAAC,EAAE,CAAC;oBAC/D,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC;gBACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,QAAQ,GAAG,IAAA,wBAAgB,EAC7B,IAAI,CAAC,aAAa,EAClB,aAAa,EACb,iBAAiB,EACjB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAClC,CAAC;YAEF,0DAA0D;YAC1D,MAAM,MAAM,GAAG,sBAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,eAAe,GAAG,MAA4B,CAAC;gBACpD,OAAO,MAA4B,CAAC;YACxC,CAAC;YAED,kDAAkD;YAClD,MAAM,MAAM,GAAG,MAAM,uBAAc,CAAC,eAAe,CAC/C,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAU,EACf,iBAAiB,EACjB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CACZ,CAAC;YAExB,uBAAuB;YACvB,sBAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;YAE9B,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,KAAK,CAAC,MAAc,EAAE,IAAO,EAAE,MAAmF;;YACpH,oEAAoE;YACpE,IAAI,gBAAyD,CAAC;YAC9D,IAAI,WAAW,GAAuD,IAAI,GAAG,EAAE,CAAC;YAEhF,IAAI,MAAM,YAAY,qBAAW,EAAE,CAAC;gBAChC,sDAAsD;gBACtD,gBAAgB,GAAG,MAAM,CAAC;gBAC1B,WAAW,GAAI,MAAc,CAAC,2BAAmB,CAAC,EAAE,CAAC;YACzD,CAAC;iBAAM,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;gBACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC1C,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,QAAQ;wBACrC,CAAC,CAAC,GAAG;wBACL,CAAC,CAAC,CAAE,GAAW,CAAC,6BAAmB,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC3D,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACrC,CAAC;gBACD,gBAAgB,GAAG,UAAU,CAAC;YAClC,CAAC;iBAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC9C,+EAA+E;gBAC/E,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;oBACtD,kCAAkC;oBAClC,gBAAgB,GAAG,MAAqC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACJ,wCAAwC;oBACxC,gFAAgF;oBAChF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;oBACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBAChD,6EAA6E;wBAC7E,wDAAwD;wBACxD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC/B,CAAC;oBACD,gBAAgB,GAAG,UAAU,CAAC;gBAClC,CAAC;YACL,CAAC;YAED,oDAAoD;YACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAEzC,0EAA0E;YAC1E,OAAO,uBAAc,CAAC,oBAAoB,CACtC,GAAG,EACH,IAAI,CAAC,UAAU,EACf,MAAM,EACN;gBACI,IAAI;gBACJ,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO;aACrC,EACD,gBAAgB,EAChB,WAAW,CACd,CAAC;QACN,CAAC;KAAA;CACJ;AA7KD,4BA6KC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,SAAgB,QAAQ,CAAC,OAA6B,EAAE,GAAG,UAA+B;IACtF,8FAA8F;IAC9F,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC/C,uDAAuD;QACvD,OAAO,EAAC,KAAK,EAAE,KAAK,EAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACtD,CAAC"}