ormbridge 0.8.0 → 0.10.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 (152) hide show
  1. package/README.md +2 -0
  2. package/dist/cliRunner.js +3 -3
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +3 -2
  5. package/dist/config.js.map +1 -1
  6. package/dist/emitters/efcore.d.ts +40 -0
  7. package/dist/emitters/efcore.js +686 -0
  8. package/dist/emitters/efcore.js.map +1 -0
  9. package/dist/emitters/efcoreColumns.d.ts +75 -0
  10. package/dist/emitters/efcoreColumns.js +492 -0
  11. package/dist/emitters/efcoreColumns.js.map +1 -0
  12. package/dist/emitters/efcoreNames.d.ts +30 -0
  13. package/dist/emitters/efcoreNames.js +268 -0
  14. package/dist/emitters/efcoreNames.js.map +1 -0
  15. package/dist/emitters/efcoreRender.d.ts +2 -0
  16. package/dist/emitters/efcoreRender.js +570 -0
  17. package/dist/emitters/efcoreRender.js.map +1 -0
  18. package/dist/emitters/efcoreTypes.d.ts +114 -0
  19. package/dist/emitters/efcoreTypes.js +2 -0
  20. package/dist/emitters/efcoreTypes.js.map +1 -0
  21. package/dist/emitters/jpa.d.ts +36 -0
  22. package/dist/emitters/jpa.js +253 -0
  23. package/dist/emitters/jpa.js.map +1 -0
  24. package/dist/emitters/jpaColumns.d.ts +25 -0
  25. package/dist/emitters/jpaColumns.js +341 -0
  26. package/dist/emitters/jpaColumns.js.map +1 -0
  27. package/dist/emitters/jpaDefaults.d.ts +24 -0
  28. package/dist/emitters/jpaDefaults.js +223 -0
  29. package/dist/emitters/jpaDefaults.js.map +1 -0
  30. package/dist/emitters/jpaEnums.d.ts +11 -0
  31. package/dist/emitters/jpaEnums.js +134 -0
  32. package/dist/emitters/jpaEnums.js.map +1 -0
  33. package/dist/emitters/jpaFormat.d.ts +16 -0
  34. package/dist/emitters/jpaFormat.js +73 -0
  35. package/dist/emitters/jpaFormat.js.map +1 -0
  36. package/dist/emitters/jpaKeys.d.ts +25 -0
  37. package/dist/emitters/jpaKeys.js +110 -0
  38. package/dist/emitters/jpaKeys.js.map +1 -0
  39. package/dist/emitters/jpaNames.d.ts +26 -0
  40. package/dist/emitters/jpaNames.js +234 -0
  41. package/dist/emitters/jpaNames.js.map +1 -0
  42. package/dist/emitters/jpaRelations.d.ts +41 -0
  43. package/dist/emitters/jpaRelations.js +304 -0
  44. package/dist/emitters/jpaRelations.js.map +1 -0
  45. package/dist/emitters/jpaRender.d.ts +10 -0
  46. package/dist/emitters/jpaRender.js +81 -0
  47. package/dist/emitters/jpaRender.js.map +1 -0
  48. package/dist/emitters/jpaScalars.d.ts +32 -0
  49. package/dist/emitters/jpaScalars.js +188 -0
  50. package/dist/emitters/jpaScalars.js.map +1 -0
  51. package/dist/emitters/jpaTable.d.ts +10 -0
  52. package/dist/emitters/jpaTable.js +109 -0
  53. package/dist/emitters/jpaTable.js.map +1 -0
  54. package/dist/emitters/jpaTypes.d.ts +85 -0
  55. package/dist/emitters/jpaTypes.js +36 -0
  56. package/dist/emitters/jpaTypes.js.map +1 -0
  57. package/dist/formats.d.ts +8 -4
  58. package/dist/formats.js +68 -0
  59. package/dist/formats.js.map +1 -1
  60. package/dist/index.d.ts +8 -0
  61. package/dist/index.js +4 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/io.js +51 -1
  64. package/dist/io.js.map +1 -1
  65. package/dist/parsers/csharpChains.d.ts +36 -0
  66. package/dist/parsers/csharpChains.js +157 -0
  67. package/dist/parsers/csharpChains.js.map +1 -0
  68. package/dist/parsers/csharpDeclarations.d.ts +3 -0
  69. package/dist/parsers/csharpDeclarations.js +293 -0
  70. package/dist/parsers/csharpDeclarations.js.map +1 -0
  71. package/dist/parsers/csharpSyntax.d.ts +130 -0
  72. package/dist/parsers/csharpSyntax.js +339 -0
  73. package/dist/parsers/csharpSyntax.js.map +1 -0
  74. package/dist/parsers/efcore.d.ts +17 -0
  75. package/dist/parsers/efcore.js +265 -0
  76. package/dist/parsers/efcore.js.map +1 -0
  77. package/dist/parsers/efcoreAnnotations.d.ts +19 -0
  78. package/dist/parsers/efcoreAnnotations.js +293 -0
  79. package/dist/parsers/efcoreAnnotations.js.map +1 -0
  80. package/dist/parsers/efcoreBuild.d.ts +13 -0
  81. package/dist/parsers/efcoreBuild.js +523 -0
  82. package/dist/parsers/efcoreBuild.js.map +1 -0
  83. package/dist/parsers/efcoreEntities.d.ts +13 -0
  84. package/dist/parsers/efcoreEntities.js +468 -0
  85. package/dist/parsers/efcoreEntities.js.map +1 -0
  86. package/dist/parsers/efcoreFields.d.ts +22 -0
  87. package/dist/parsers/efcoreFields.js +285 -0
  88. package/dist/parsers/efcoreFields.js.map +1 -0
  89. package/dist/parsers/efcoreFluent.d.ts +47 -0
  90. package/dist/parsers/efcoreFluent.js +375 -0
  91. package/dist/parsers/efcoreFluent.js.map +1 -0
  92. package/dist/parsers/efcoreModel.d.ts +209 -0
  93. package/dist/parsers/efcoreModel.js +2 -0
  94. package/dist/parsers/efcoreModel.js.map +1 -0
  95. package/dist/parsers/efcoreRelations.d.ts +46 -0
  96. package/dist/parsers/efcoreRelations.js +317 -0
  97. package/dist/parsers/efcoreRelations.js.map +1 -0
  98. package/dist/parsers/efcoreSteps.d.ts +89 -0
  99. package/dist/parsers/efcoreSteps.js +793 -0
  100. package/dist/parsers/efcoreSteps.js.map +1 -0
  101. package/dist/parsers/efcoreTypes.d.ts +35 -0
  102. package/dist/parsers/efcoreTypes.js +404 -0
  103. package/dist/parsers/efcoreTypes.js.map +1 -0
  104. package/dist/parsers/javaSyntax.d.ts +120 -0
  105. package/dist/parsers/javaSyntax.js +304 -0
  106. package/dist/parsers/javaSyntax.js.map +1 -0
  107. package/dist/parsers/javaValues.d.ts +5 -0
  108. package/dist/parsers/javaValues.js +187 -0
  109. package/dist/parsers/javaValues.js.map +1 -0
  110. package/dist/parsers/jpa.d.ts +17 -0
  111. package/dist/parsers/jpa.js +131 -0
  112. package/dist/parsers/jpa.js.map +1 -0
  113. package/dist/parsers/jpaAnnotations.d.ts +46 -0
  114. package/dist/parsers/jpaAnnotations.js +156 -0
  115. package/dist/parsers/jpaAnnotations.js.map +1 -0
  116. package/dist/parsers/jpaBuild.d.ts +4 -0
  117. package/dist/parsers/jpaBuild.js +297 -0
  118. package/dist/parsers/jpaBuild.js.map +1 -0
  119. package/dist/parsers/jpaClasses.d.ts +27 -0
  120. package/dist/parsers/jpaClasses.js +257 -0
  121. package/dist/parsers/jpaClasses.js.map +1 -0
  122. package/dist/parsers/jpaCollections.d.ts +12 -0
  123. package/dist/parsers/jpaCollections.js +106 -0
  124. package/dist/parsers/jpaCollections.js.map +1 -0
  125. package/dist/parsers/jpaColumns.d.ts +26 -0
  126. package/dist/parsers/jpaColumns.js +361 -0
  127. package/dist/parsers/jpaColumns.js.map +1 -0
  128. package/dist/parsers/jpaEntities.d.ts +9 -0
  129. package/dist/parsers/jpaEntities.js +181 -0
  130. package/dist/parsers/jpaEntities.js.map +1 -0
  131. package/dist/parsers/jpaIndexes.d.ts +12 -0
  132. package/dist/parsers/jpaIndexes.js +87 -0
  133. package/dist/parsers/jpaIndexes.js.map +1 -0
  134. package/dist/parsers/jpaJoins.d.ts +68 -0
  135. package/dist/parsers/jpaJoins.js +131 -0
  136. package/dist/parsers/jpaJoins.js.map +1 -0
  137. package/dist/parsers/jpaModel.d.ts +73 -0
  138. package/dist/parsers/jpaModel.js +2 -0
  139. package/dist/parsers/jpaModel.js.map +1 -0
  140. package/dist/parsers/jpaNotes.d.ts +20 -0
  141. package/dist/parsers/jpaNotes.js +138 -0
  142. package/dist/parsers/jpaNotes.js.map +1 -0
  143. package/dist/parsers/jpaRelations.d.ts +4 -0
  144. package/dist/parsers/jpaRelations.js +242 -0
  145. package/dist/parsers/jpaRelations.js.map +1 -0
  146. package/dist/parsers/jpaTypes.d.ts +23 -0
  147. package/dist/parsers/jpaTypes.js +232 -0
  148. package/dist/parsers/jpaTypes.js.map +1 -0
  149. package/dist/styles.d.ts +4 -2
  150. package/dist/styles.js +7 -1
  151. package/dist/styles.js.map +1 -1
  152. package/package.json +10 -1
@@ -0,0 +1,304 @@
1
+ import { createRequire } from 'node:module';
2
+ import Parser from 'web-tree-sitter';
3
+ import { describeThrown, err, ok } from '../result.js';
4
+ let cachedParser;
5
+ /** Lazily loads the tree-sitter Java grammar (WebAssembly, no native build step). */
6
+ export async function getJavaParser() {
7
+ if (cachedParser !== undefined) {
8
+ return ok(cachedParser);
9
+ }
10
+ try {
11
+ const requireFromHere = createRequire(import.meta.url);
12
+ const wasmPath = requireFromHere.resolve('tree-sitter-wasms/out/tree-sitter-java.wasm');
13
+ await Parser.init();
14
+ const language = await Parser.Language.load(wasmPath);
15
+ const parser = new Parser();
16
+ parser.setLanguage(language);
17
+ cachedParser = parser;
18
+ return ok(parser);
19
+ }
20
+ catch (thrown) {
21
+ return err('PARSER_INIT_FAILED', `Failed to initialize the tree-sitter Java grammar. Check that the "web-tree-sitter" (0.22.x) and ` +
22
+ `"tree-sitter-wasms" packages are installed. Underlying error: ${describeThrown(thrown)}`);
23
+ }
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Types
27
+ // ---------------------------------------------------------------------------
28
+ /** Splits at commas that are not inside `<...>`, `(...)` or `[...]`. */
29
+ export function splitTopLevel(text) {
30
+ const parts = [];
31
+ let depth = 0;
32
+ let current = '';
33
+ for (const character of text) {
34
+ if (character === '<' || character === '(' || character === '[') {
35
+ depth += 1;
36
+ }
37
+ else if (character === '>' || character === ')' || character === ']') {
38
+ depth -= 1;
39
+ }
40
+ if (character === ',' && depth === 0) {
41
+ parts.push(current);
42
+ current = '';
43
+ }
44
+ else {
45
+ current += character;
46
+ }
47
+ }
48
+ if (current.trim() !== '') {
49
+ parts.push(current);
50
+ }
51
+ return parts.map((part) => part.trim());
52
+ }
53
+ const MAX_TYPE_DEPTH = 16;
54
+ /** Reads a type from its source text. Never fails: unreadable text becomes a type named after the text. */
55
+ export function parseTypeText(text, depth = 0) {
56
+ let rest = text
57
+ .replace(/@[\w.]+(?:\([^)]*\))?/g, ' ')
58
+ .replace(/\bfinal\b/g, ' ')
59
+ .replace(/\s+/g, ' ')
60
+ .trim();
61
+ let arrayDepth = 0;
62
+ while (/\[\s*\]$/.test(rest)) {
63
+ arrayDepth += 1;
64
+ rest = rest.replace(/\[\s*\]$/, '').trim();
65
+ }
66
+ if (rest.endsWith('...')) {
67
+ arrayDepth += 1;
68
+ rest = rest.slice(0, -3).trim();
69
+ }
70
+ // `? extends Foo` and `? super Foo` are read as Foo; a bare `?` is Object.
71
+ const wildcard = rest.match(/^\?\s*(?:extends|super)\s+(.+)$/);
72
+ if (wildcard !== null) {
73
+ return parseTypeText(wildcard[1] ?? 'Object', depth + 1);
74
+ }
75
+ if (rest === '?') {
76
+ return { name: 'Object', text: 'Object', args: [], arrayDepth };
77
+ }
78
+ const open = rest.indexOf('<');
79
+ const head = open === -1 ? rest : rest.slice(0, open).trim();
80
+ const name = head.split('.').pop()?.trim() ?? head;
81
+ let args = [];
82
+ if (open !== -1 && rest.endsWith('>') && depth < MAX_TYPE_DEPTH) {
83
+ args = splitTopLevel(rest.slice(open + 1, -1)).map((part) => parseTypeText(part, depth + 1));
84
+ }
85
+ return { name, text: head, args, arrayDepth };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Declarations
89
+ // ---------------------------------------------------------------------------
90
+ /** Reads `@Name`, `@Name(value)` and `@Name(a = 1, b = 2)`. */
91
+ export function readAnnotation(node) {
92
+ const nameNode = node.childForFieldName('name');
93
+ const full = (nameNode?.text ?? '').split('.');
94
+ const name = full.pop() ?? '';
95
+ const args = new Map();
96
+ const list = node.childForFieldName('arguments');
97
+ if (list !== null) {
98
+ for (const child of list.namedChildren) {
99
+ if (child.type === 'element_value_pair') {
100
+ const key = child.childForFieldName('key');
101
+ const value = child.childForFieldName('value');
102
+ if (key !== null && value !== null) {
103
+ args.set(key.text, value);
104
+ }
105
+ }
106
+ else if (!child.type.includes('comment')) {
107
+ args.set('value', child);
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ name,
113
+ ...(full.length === 0 ? {} : { qualifier: full.join('.') }),
114
+ args,
115
+ node,
116
+ };
117
+ }
118
+ function readModifiers(node) {
119
+ const modifiers = node.namedChildren.find((child) => child.type === 'modifiers');
120
+ const result = { keywords: [], annotations: [] };
121
+ if (modifiers === undefined) {
122
+ return result;
123
+ }
124
+ for (const child of modifiers.children) {
125
+ if (child.type === 'annotation' || child.type === 'marker_annotation') {
126
+ result.annotations.push(readAnnotation(child));
127
+ }
128
+ else if (!child.type.includes('comment')) {
129
+ result.keywords.push(child.type);
130
+ }
131
+ }
132
+ return result;
133
+ }
134
+ function readFields(node, fields, modifiers) {
135
+ const typeNode = node.childForFieldName('type');
136
+ if (typeNode === null) {
137
+ return;
138
+ }
139
+ const base = parseTypeText(typeNode.text);
140
+ for (const declarator of node.namedChildren) {
141
+ if (declarator.type !== 'variable_declarator') {
142
+ continue;
143
+ }
144
+ const name = declarator.childForFieldName('name');
145
+ if (name === null) {
146
+ continue;
147
+ }
148
+ const dimensions = declarator.childForFieldName('dimensions');
149
+ const extra = dimensions === null ? 0 : (dimensions.text.match(/\[/g) ?? []).length;
150
+ const value = declarator.childForFieldName('value');
151
+ fields.push({
152
+ name: name.text,
153
+ type: { ...base, arrayDepth: base.arrayDepth + extra },
154
+ modifiers: modifiers.keywords,
155
+ annotations: modifiers.annotations,
156
+ ...(value === null ? {} : { initializer: value }),
157
+ node,
158
+ });
159
+ }
160
+ }
161
+ function readMethod(node) {
162
+ const name = node.childForFieldName('name');
163
+ const type = node.childForFieldName('type');
164
+ if (name === null || type === null) {
165
+ return undefined;
166
+ }
167
+ const modifiers = readModifiers(node);
168
+ const parameters = [];
169
+ const list = node.childForFieldName('parameters');
170
+ for (const parameter of list?.namedChildren ?? []) {
171
+ const parameterType = parameter.childForFieldName('type');
172
+ const parameterName = parameter.childForFieldName('name');
173
+ if (parameterType !== null && parameterName !== null) {
174
+ parameters.push({
175
+ name: parameterName.text,
176
+ type: parseTypeText(parameterType.text),
177
+ });
178
+ }
179
+ }
180
+ return {
181
+ name: name.text,
182
+ returnType: parseTypeText(type.text),
183
+ parameters,
184
+ modifiers: modifiers.keywords,
185
+ annotations: modifiers.annotations,
186
+ node,
187
+ };
188
+ }
189
+ const TYPE_DECLARATIONS = {
190
+ class_declaration: 'class',
191
+ interface_declaration: 'interface',
192
+ enum_declaration: 'enum',
193
+ record_declaration: 'record',
194
+ annotation_type_declaration: 'annotation',
195
+ };
196
+ function readTypeParameters(node) {
197
+ const list = node.childForFieldName('type_parameters');
198
+ return (list?.namedChildren ?? [])
199
+ .filter((child) => child.type === 'type_parameter')
200
+ .map((child) => child.namedChild(0)?.text ?? child.text);
201
+ }
202
+ function readTypeList(node) {
203
+ if (node === null) {
204
+ return [];
205
+ }
206
+ const list = node.namedChildren.find((child) => child.type === 'type_list');
207
+ return (list ?? node).namedChildren
208
+ .filter((child) => !child.type.includes('comment'))
209
+ .map((child) => parseTypeText(child.text));
210
+ }
211
+ function readType(node, file, outer, into) {
212
+ const kind = TYPE_DECLARATIONS[node.type];
213
+ const nameNode = node.childForFieldName('name');
214
+ if (kind === undefined || nameNode === null) {
215
+ return;
216
+ }
217
+ const modifiers = readModifiers(node);
218
+ const superNode = node.namedChildren.find((child) => child.type === 'superclass');
219
+ const superType = superNode?.namedChildren.find((child) => !child.type.includes('comment'));
220
+ const interfaces = node.namedChildren.find((child) => child.type === 'super_interfaces' || child.type === 'extends_interfaces');
221
+ const cls = {
222
+ name: nameNode.text,
223
+ kind,
224
+ modifiers: modifiers.keywords,
225
+ annotations: modifiers.annotations,
226
+ typeParameters: readTypeParameters(node),
227
+ ...(superType === undefined
228
+ ? {}
229
+ : { superclass: parseTypeText(superType.text) }),
230
+ interfaces: readTypeList(interfaces ?? null),
231
+ fields: [],
232
+ methods: [],
233
+ enumConstants: [],
234
+ ...(outer === undefined ? {} : { outer }),
235
+ imports: file.imports,
236
+ packageName: file.packageName,
237
+ path: file.path,
238
+ };
239
+ into.push(cls);
240
+ const body = node.childForFieldName('body');
241
+ const members = [];
242
+ for (const child of body?.namedChildren ?? []) {
243
+ if (child.type === 'enum_body_declarations') {
244
+ members.push(...child.namedChildren);
245
+ }
246
+ else {
247
+ members.push(child);
248
+ }
249
+ }
250
+ if (kind === 'record') {
251
+ // Record components are not mapped by JPA, so they are not read as fields.
252
+ return;
253
+ }
254
+ for (const member of members) {
255
+ if (member.type === 'enum_constant') {
256
+ const constant = member.childForFieldName('name');
257
+ if (constant !== null) {
258
+ const list = member.childForFieldName('arguments');
259
+ cls.enumConstants.push({
260
+ name: constant.text,
261
+ args: (list?.namedChildren ?? []).filter((child) => !child.type.includes('comment')),
262
+ });
263
+ }
264
+ }
265
+ else if (member.type === 'field_declaration') {
266
+ readFields(member, cls.fields, readModifiers(member));
267
+ }
268
+ else if (member.type === 'method_declaration') {
269
+ const method = readMethod(member);
270
+ if (method !== undefined) {
271
+ cls.methods.push(method);
272
+ }
273
+ }
274
+ else if (member.type in TYPE_DECLARATIONS) {
275
+ readType(member, file, cls.name, into);
276
+ }
277
+ }
278
+ }
279
+ /** Reads the types, fields and methods of one Java file. */
280
+ export function readJavaFile(root, path) {
281
+ let packageName = '';
282
+ const imports = [];
283
+ const classes = [];
284
+ const file = { path, packageName, imports };
285
+ for (const child of root.namedChildren) {
286
+ if (child.type === 'package_declaration') {
287
+ packageName =
288
+ child.namedChildren.find((item) => !item.type.includes('comment'))?.text ?? '';
289
+ file.packageName = packageName;
290
+ }
291
+ else if (child.type === 'import_declaration') {
292
+ const text = child.text
293
+ .replace(/^import\s+(?:static\s+)?/, '')
294
+ .replace(/;\s*$/, '')
295
+ .trim();
296
+ imports.push(text);
297
+ }
298
+ else if (child.type in TYPE_DECLARATIONS) {
299
+ readType(child, file, undefined, classes);
300
+ }
301
+ }
302
+ return { path, packageName, imports, classes, hasErrors: root.hasError };
303
+ }
304
+ //# sourceMappingURL=javaSyntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javaSyntax.js","sourceRoot":"","sources":["../../src/parsers/javaSyntax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,cAAc,CAAC;AAuGpE,IAAI,YAAgC,CAAC;AAErC,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,eAAe,GAAgB,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAW,eAAe,CAAC,OAAO,CAC9C,6CAA6C,CAC9C,CAAC;QACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAoB,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,MAAM,GAAW,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,YAAY,GAAG,MAAM,CAAC;QACtB,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CACR,oBAAoB,EACpB,mGAAmG;YACjG,iEAAiE,cAAc,CAAC,MAAM,CAAC,EAAE,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,wEAAwE;AACxE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,IAAI,OAAO,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAChE,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACvE,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,IAAI,SAAS,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,cAAc,GAAW,EAAE,CAAC;AAElC,2GAA2G;AAC3G,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB,CAAC;IAC3D,IAAI,IAAI,GAAW,IAAI;SACpB,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC;SACtC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;SAC1B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IACV,IAAI,UAAU,GAAW,CAAC,CAAC;IAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,UAAU,IAAI,CAAC,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IACD,2EAA2E;IAC3E,MAAM,QAAQ,GAA4B,IAAI,CAAC,KAAK,CAClD,iCAAiC,CAClC,CAAC;IACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,IAAI,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAW,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC3D,IAAI,IAAI,GAAe,EAAE,CAAC;IAC1B,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAChE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAClE,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAC/B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,QAAQ,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,IAAI,GAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAW,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAA4B,IAAI,GAAG,EAAE,CAAC;IAChD,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAsB,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAsB,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC;AAOD,SAAS,aAAa,CAAC,IAAgB;IACrC,MAAM,SAAS,GAA2B,IAAI,CAAC,aAAa,CAAC,IAAI,CAC/D,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAClD,CAAC;IACF,MAAM,MAAM,GAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,IAAgB,EAChB,MAAmB,EACnB,SAAoB;IAEpB,MAAM,QAAQ,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAa,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAsB,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GACd,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,GACT,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACxE,MAAM,KAAK,GAAsB,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE;YACtD,SAAS,EAAE,SAAS,CAAC,QAAQ;YAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACjD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAgB;IAClC,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAc,aAAa,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACrE,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,aAAa,GACjB,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,aAAa,GACjB,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YACrD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,UAAU;QACV,SAAS,EAAE,SAAS,CAAC,QAAQ;QAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAA4C;IACjE,iBAAiB,EAAE,OAAO;IAC1B,qBAAqB,EAAE,WAAW;IAClC,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,QAAQ;IAC5B,2BAA2B,EAAE,YAAY;CAC1C,CAAC;AAEF,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;SAC9D,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,YAAY,CAAC,IAAuB;IAC3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,GAA2B,IAAI,CAAC,aAAa,CAAC,IAAI,CAC1D,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAClD,CAAC;IACF,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa;SAChC,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAC9D,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CACf,IAAgB,EAChB,IAA8D,EAC9D,KAAyB,EACzB,IAAiB;IAEjB,MAAM,IAAI,GAA8B,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAc,aAAa,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAA2B,IAAI,CAAC,aAAa,CAAC,IAAI,CAC/D,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CACnD,CAAC;IACF,MAAM,SAAS,GAA2B,SAAS,EAAE,aAAa,CAAC,IAAI,CACrE,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACvD,CAAC;IACF,MAAM,UAAU,GAA2B,IAAI,CAAC,aAAa,CAAC,IAAI,CAChE,CAAC,KAAiB,EAAE,EAAE,CACpB,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAC3E,CAAC;IACF,MAAM,GAAG,GAAc;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,IAAI;QACJ,SAAS,EAAE,SAAS,CAAC,QAAQ;QAC7B,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,cAAc,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACxC,GAAG,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC;QAC5C,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,EAAE;QACjB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAsB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,EAAE,CAAC;QAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,2EAA2E;QAC3E,OAAO;IACT,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAsB,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAsB,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACtE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;oBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CACtC,CAAC,KAAiB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACvD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC/C,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAChD,MAAM,MAAM,GAA2B,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC5C,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,IAAY;IACzD,IAAI,WAAW,GAAW,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACzC,WAAW;gBACT,KAAK,CAAC,aAAa,CAAC,IAAI,CACtB,CAAC,IAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CACrD,EAAE,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI;iBAC5B,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;iBACvC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;iBACpB,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC3C,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type ConstLookup, type JavaValue, type SyntaxNode } from './javaSyntax.js';
2
+ /** Decodes the text of a regular string literal or text block. */
3
+ export declare function unquoteJavaString(literal: string): string;
4
+ /** Evaluates an annotation argument or field initializer without running any code. */
5
+ export declare function evaluate(node: SyntaxNode, lookup: ConstLookup, depth?: number): JavaValue;
@@ -0,0 +1,187 @@
1
+ import { parseTypeText, readAnnotation, } from './javaSyntax.js';
2
+ // ---------------------------------------------------------------------------
3
+ // Literals and expressions
4
+ // ---------------------------------------------------------------------------
5
+ function unescapeJava(body) {
6
+ return body.replace(/\\(?:u+([0-9a-fA-F]{4})|([0-7]{1,3})|([\s\S]))/g, (_whole, unicode, octal, single) => {
7
+ if (unicode !== undefined) {
8
+ return String.fromCharCode(parseInt(unicode, 16));
9
+ }
10
+ if (octal !== undefined) {
11
+ return String.fromCharCode(parseInt(octal, 8));
12
+ }
13
+ switch (single) {
14
+ case 'n':
15
+ return '\n';
16
+ case 't':
17
+ return '\t';
18
+ case 'r':
19
+ return '\r';
20
+ case 'b':
21
+ return '\b';
22
+ case 'f':
23
+ return '\f';
24
+ case 's':
25
+ return ' ';
26
+ default:
27
+ return single ?? '';
28
+ }
29
+ });
30
+ }
31
+ /** Decodes the text of a regular string literal or text block. */
32
+ export function unquoteJavaString(literal) {
33
+ if (literal.startsWith('"""')) {
34
+ return unescapeJava(literal
35
+ .replace(/^"""[ \t]*\r?\n?/, '')
36
+ .replace(/[ \t]*"""$/, '')
37
+ .replace(/^[ \t]+/gm, ''));
38
+ }
39
+ if (literal.startsWith('"') && literal.endsWith('"') && literal.length >= 2) {
40
+ return unescapeJava(literal.slice(1, -1));
41
+ }
42
+ return literal;
43
+ }
44
+ function parseNumber(text) {
45
+ const cleaned = text.replace(/_/g, '');
46
+ if (/^0[xX][0-9a-fA-F]+[lL]?$/.test(cleaned)) {
47
+ return parseInt(cleaned.replace(/[lL]$/, ''), 16);
48
+ }
49
+ if (/^0[bB][01]+[lL]?$/.test(cleaned)) {
50
+ return parseInt(cleaned.slice(2).replace(/[lL]$/, ''), 2);
51
+ }
52
+ const plain = cleaned.replace(/[lLfFdD]$/, '');
53
+ const value = Number(plain);
54
+ return Number.isNaN(value) ? undefined : value;
55
+ }
56
+ const MAX_EVAL_DEPTH = 12;
57
+ /** The dotted path of a name or field access (`GenerationType.IDENTITY`), or undefined for other expressions. */
58
+ function memberPath(node) {
59
+ if (node.type === 'identifier' || node.type === 'type_identifier') {
60
+ return [node.text];
61
+ }
62
+ if (node.type === 'field_access' || node.type === 'scoped_identifier') {
63
+ const owner = node.childForFieldName('object') ?? node.childForFieldName('scope');
64
+ const name = node.childForFieldName('field') ?? node.childForFieldName('name');
65
+ if (owner === null || name === null) {
66
+ return undefined;
67
+ }
68
+ const prefix = memberPath(owner);
69
+ return prefix === undefined ? undefined : [...prefix, name.text];
70
+ }
71
+ return undefined;
72
+ }
73
+ /** Evaluates an annotation argument or field initializer without running any code. */
74
+ export function evaluate(node, lookup, depth = 0) {
75
+ if (depth > MAX_EVAL_DEPTH) {
76
+ return { kind: 'other', text: node.text };
77
+ }
78
+ switch (node.type) {
79
+ case 'string_literal':
80
+ return { kind: 'string', value: unquoteJavaString(node.text) };
81
+ case 'character_literal':
82
+ return { kind: 'string', value: unescapeJava(node.text.slice(1, -1)) };
83
+ case 'decimal_integer_literal':
84
+ case 'hex_integer_literal':
85
+ case 'octal_integer_literal':
86
+ case 'binary_integer_literal':
87
+ case 'decimal_floating_point_literal':
88
+ case 'hex_floating_point_literal': {
89
+ const value = parseNumber(node.text);
90
+ return value === undefined
91
+ ? { kind: 'other', text: node.text }
92
+ : { kind: 'number', value, text: node.text };
93
+ }
94
+ case 'true':
95
+ return { kind: 'bool', value: true };
96
+ case 'false':
97
+ return { kind: 'bool', value: false };
98
+ case 'null_literal':
99
+ return { kind: 'null' };
100
+ case 'parenthesized_expression': {
101
+ const inner = node.namedChild(0);
102
+ return inner === null
103
+ ? { kind: 'other', text: node.text }
104
+ : evaluate(inner, lookup, depth + 1);
105
+ }
106
+ case 'unary_expression': {
107
+ const operand = node.childForFieldName('operand');
108
+ const value = operand === null ? undefined : evaluate(operand, lookup, depth + 1);
109
+ if (value?.kind === 'number' && node.text.startsWith('-')) {
110
+ return { kind: 'number', value: -value.value, text: node.text };
111
+ }
112
+ return { kind: 'other', text: node.text };
113
+ }
114
+ case 'binary_expression': {
115
+ const left = node.childForFieldName('left');
116
+ const right = node.childForFieldName('right');
117
+ if (left === null || right === null) {
118
+ return { kind: 'other', text: node.text };
119
+ }
120
+ const first = evaluate(left, lookup, depth + 1);
121
+ const second = evaluate(right, lookup, depth + 1);
122
+ const operator = node.text.slice(left.endIndex - node.startIndex, right.startIndex - node.startIndex);
123
+ if (operator.trim() === '+') {
124
+ if (first.kind === 'number' && second.kind === 'number') {
125
+ return {
126
+ kind: 'number',
127
+ value: first.value + second.value,
128
+ text: node.text,
129
+ };
130
+ }
131
+ const a = scalarText(first);
132
+ const b = scalarText(second);
133
+ if (a !== undefined && b !== undefined) {
134
+ return { kind: 'string', value: a + b };
135
+ }
136
+ }
137
+ return { kind: 'other', text: node.text };
138
+ }
139
+ case 'element_value_array_initializer':
140
+ case 'array_initializer':
141
+ return {
142
+ kind: 'array',
143
+ items: node.namedChildren
144
+ .filter((child) => !child.type.includes('comment'))
145
+ .map((child) => evaluate(child, lookup, depth + 1)),
146
+ };
147
+ case 'annotation':
148
+ case 'marker_annotation': {
149
+ const annotation = readAnnotation(node);
150
+ return { kind: 'annotation', annotation };
151
+ }
152
+ case 'class_literal': {
153
+ const target = node.namedChild(0);
154
+ return {
155
+ kind: 'class',
156
+ type: target === null ? node.text : parseTypeText(target.text).name,
157
+ };
158
+ }
159
+ case 'identifier':
160
+ case 'field_access': {
161
+ const path = memberPath(node);
162
+ if (path === undefined) {
163
+ return { kind: 'other', text: node.text };
164
+ }
165
+ const constant = lookup(path);
166
+ if (constant !== undefined) {
167
+ return evaluate(constant, lookup, depth + 1);
168
+ }
169
+ return { kind: 'member', path };
170
+ }
171
+ default:
172
+ return { kind: 'other', text: node.text };
173
+ }
174
+ }
175
+ function scalarText(value) {
176
+ switch (value.kind) {
177
+ case 'string':
178
+ return value.value;
179
+ case 'number':
180
+ return String(value.value);
181
+ case 'bool':
182
+ return String(value.value);
183
+ default:
184
+ return undefined;
185
+ }
186
+ }
187
+ //# sourceMappingURL=javaValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javaValues.js","sourceRoot":"","sources":["../../src/parsers/javaValues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { IrSchema } from '../ir.js';
2
+ import { type Result } from '../result.js';
3
+ export interface JpaSourceFile {
4
+ path: string;
5
+ text: string;
6
+ }
7
+ export interface JpaParseOptions {
8
+ /** App label stored on each model (JPA has no equivalent). */
9
+ appLabel: string;
10
+ }
11
+ /** True for build output, tests, generated metamodel classes, `module-info.java`, `package-info.java` and migrations. */
12
+ export declare function isSkippedJpaPath(path: string): boolean;
13
+ /**
14
+ * Parses Hibernate / JPA entities (Java) into the shared IR using tree-sitter. The source is only read: nothing is
15
+ * compiled or run, and `persistence.xml` and `orm.xml` are not read.
16
+ */
17
+ export declare function parseJpa(sources: JpaSourceFile[], options: JpaParseOptions): Promise<Result<IrSchema>>;