ormbridge 0.9.0 → 0.11.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 (146) hide show
  1. package/README.md +19 -18
  2. package/dist/cliRunner.js +4 -4
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +2 -2
  5. package/dist/convert.js +30 -1
  6. package/dist/convert.js.map +1 -1
  7. package/dist/emitters/cockroach.d.ts +33 -0
  8. package/dist/emitters/cockroach.js +81 -0
  9. package/dist/emitters/cockroach.js.map +1 -0
  10. package/dist/emitters/doctrine.js +11 -0
  11. package/dist/emitters/doctrine.js.map +1 -1
  12. package/dist/emitters/drizzle.js +39 -4
  13. package/dist/emitters/drizzle.js.map +1 -1
  14. package/dist/emitters/efcore.js +18 -1
  15. package/dist/emitters/efcore.js.map +1 -1
  16. package/dist/emitters/efcoreColumns.js +23 -2
  17. package/dist/emitters/efcoreColumns.js.map +1 -1
  18. package/dist/emitters/gorm.js +20 -1
  19. package/dist/emitters/gorm.js.map +1 -1
  20. package/dist/emitters/jpa.d.ts +36 -0
  21. package/dist/emitters/jpa.js +262 -0
  22. package/dist/emitters/jpa.js.map +1 -0
  23. package/dist/emitters/jpaColumns.d.ts +27 -0
  24. package/dist/emitters/jpaColumns.js +342 -0
  25. package/dist/emitters/jpaColumns.js.map +1 -0
  26. package/dist/emitters/jpaDefaults.d.ts +24 -0
  27. package/dist/emitters/jpaDefaults.js +223 -0
  28. package/dist/emitters/jpaDefaults.js.map +1 -0
  29. package/dist/emitters/jpaEnums.d.ts +11 -0
  30. package/dist/emitters/jpaEnums.js +134 -0
  31. package/dist/emitters/jpaEnums.js.map +1 -0
  32. package/dist/emitters/jpaFormat.d.ts +16 -0
  33. package/dist/emitters/jpaFormat.js +73 -0
  34. package/dist/emitters/jpaFormat.js.map +1 -0
  35. package/dist/emitters/jpaKeys.d.ts +25 -0
  36. package/dist/emitters/jpaKeys.js +110 -0
  37. package/dist/emitters/jpaKeys.js.map +1 -0
  38. package/dist/emitters/jpaNames.d.ts +26 -0
  39. package/dist/emitters/jpaNames.js +234 -0
  40. package/dist/emitters/jpaNames.js.map +1 -0
  41. package/dist/emitters/jpaRelations.d.ts +41 -0
  42. package/dist/emitters/jpaRelations.js +304 -0
  43. package/dist/emitters/jpaRelations.js.map +1 -0
  44. package/dist/emitters/jpaRender.d.ts +10 -0
  45. package/dist/emitters/jpaRender.js +81 -0
  46. package/dist/emitters/jpaRender.js.map +1 -0
  47. package/dist/emitters/jpaScalars.d.ts +32 -0
  48. package/dist/emitters/jpaScalars.js +201 -0
  49. package/dist/emitters/jpaScalars.js.map +1 -0
  50. package/dist/emitters/jpaTable.d.ts +10 -0
  51. package/dist/emitters/jpaTable.js +109 -0
  52. package/dist/emitters/jpaTable.js.map +1 -0
  53. package/dist/emitters/jpaTypes.d.ts +85 -0
  54. package/dist/emitters/jpaTypes.js +36 -0
  55. package/dist/emitters/jpaTypes.js.map +1 -0
  56. package/dist/emitters/laravel.js +11 -0
  57. package/dist/emitters/laravel.js.map +1 -1
  58. package/dist/emitters/prisma.d.ts +1 -1
  59. package/dist/emitters/prisma.js +47 -5
  60. package/dist/emitters/prisma.js.map +1 -1
  61. package/dist/emitters/sequelize.js +82 -6
  62. package/dist/emitters/sequelize.js.map +1 -1
  63. package/dist/emitters/sqlClickhouse.d.ts +43 -0
  64. package/dist/emitters/sqlClickhouse.js +265 -0
  65. package/dist/emitters/sqlClickhouse.js.map +1 -0
  66. package/dist/emitters/sqlClickhouseIndexes.d.ts +3 -0
  67. package/dist/emitters/sqlClickhouseIndexes.js +98 -0
  68. package/dist/emitters/sqlClickhouseIndexes.js.map +1 -0
  69. package/dist/emitters/sqlClickhouseTypes.d.ts +39 -0
  70. package/dist/emitters/sqlClickhouseTypes.js +360 -0
  71. package/dist/emitters/sqlClickhouseTypes.js.map +1 -0
  72. package/dist/emitters/sqlDdl.d.ts +29 -1
  73. package/dist/emitters/sqlDdl.js +141 -21
  74. package/dist/emitters/sqlDdl.js.map +1 -1
  75. package/dist/emitters/sqlalchemy.d.ts +7 -1
  76. package/dist/emitters/sqlalchemy.js +39 -0
  77. package/dist/emitters/sqlalchemy.js.map +1 -1
  78. package/dist/emitters/typeorm.js +44 -9
  79. package/dist/emitters/typeorm.js.map +1 -1
  80. package/dist/formats.d.ts +5 -2
  81. package/dist/formats.js +36 -1
  82. package/dist/formats.js.map +1 -1
  83. package/dist/index.d.ts +4 -0
  84. package/dist/index.js +2 -0
  85. package/dist/index.js.map +1 -1
  86. package/dist/io.js +27 -1
  87. package/dist/io.js.map +1 -1
  88. package/dist/parsers/javaSyntax.d.ts +120 -0
  89. package/dist/parsers/javaSyntax.js +304 -0
  90. package/dist/parsers/javaSyntax.js.map +1 -0
  91. package/dist/parsers/javaValues.d.ts +5 -0
  92. package/dist/parsers/javaValues.js +187 -0
  93. package/dist/parsers/javaValues.js.map +1 -0
  94. package/dist/parsers/jpa.d.ts +17 -0
  95. package/dist/parsers/jpa.js +131 -0
  96. package/dist/parsers/jpa.js.map +1 -0
  97. package/dist/parsers/jpaAnnotations.d.ts +46 -0
  98. package/dist/parsers/jpaAnnotations.js +156 -0
  99. package/dist/parsers/jpaAnnotations.js.map +1 -0
  100. package/dist/parsers/jpaBuild.d.ts +4 -0
  101. package/dist/parsers/jpaBuild.js +297 -0
  102. package/dist/parsers/jpaBuild.js.map +1 -0
  103. package/dist/parsers/jpaClasses.d.ts +27 -0
  104. package/dist/parsers/jpaClasses.js +257 -0
  105. package/dist/parsers/jpaClasses.js.map +1 -0
  106. package/dist/parsers/jpaCollections.d.ts +12 -0
  107. package/dist/parsers/jpaCollections.js +106 -0
  108. package/dist/parsers/jpaCollections.js.map +1 -0
  109. package/dist/parsers/jpaColumns.d.ts +26 -0
  110. package/dist/parsers/jpaColumns.js +361 -0
  111. package/dist/parsers/jpaColumns.js.map +1 -0
  112. package/dist/parsers/jpaEntities.d.ts +9 -0
  113. package/dist/parsers/jpaEntities.js +181 -0
  114. package/dist/parsers/jpaEntities.js.map +1 -0
  115. package/dist/parsers/jpaIndexes.d.ts +12 -0
  116. package/dist/parsers/jpaIndexes.js +87 -0
  117. package/dist/parsers/jpaIndexes.js.map +1 -0
  118. package/dist/parsers/jpaJoins.d.ts +68 -0
  119. package/dist/parsers/jpaJoins.js +131 -0
  120. package/dist/parsers/jpaJoins.js.map +1 -0
  121. package/dist/parsers/jpaModel.d.ts +73 -0
  122. package/dist/parsers/jpaModel.js +2 -0
  123. package/dist/parsers/jpaModel.js.map +1 -0
  124. package/dist/parsers/jpaNotes.d.ts +20 -0
  125. package/dist/parsers/jpaNotes.js +138 -0
  126. package/dist/parsers/jpaNotes.js.map +1 -0
  127. package/dist/parsers/jpaRelations.d.ts +4 -0
  128. package/dist/parsers/jpaRelations.js +242 -0
  129. package/dist/parsers/jpaRelations.js.map +1 -0
  130. package/dist/parsers/jpaTypes.d.ts +23 -0
  131. package/dist/parsers/jpaTypes.js +232 -0
  132. package/dist/parsers/jpaTypes.js.map +1 -0
  133. package/dist/parsers/prisma.js +9 -1
  134. package/dist/parsers/prisma.js.map +1 -1
  135. package/dist/parsers/sqlDdl.js +40 -2
  136. package/dist/parsers/sqlDdl.js.map +1 -1
  137. package/dist/parsers/sqlSyntax.js +15 -1
  138. package/dist/parsers/sqlSyntax.js.map +1 -1
  139. package/dist/parsers/sqlTypes.js +37 -2
  140. package/dist/parsers/sqlTypes.js.map +1 -1
  141. package/dist/parsers/typeorm.js +2 -0
  142. package/dist/parsers/typeorm.js.map +1 -1
  143. package/dist/styles.d.ts +3 -2
  144. package/dist/styles.js +4 -1
  145. package/dist/styles.js.map +1 -1
  146. package/package.json +8 -1
@@ -0,0 +1,120 @@
1
+ import Parser from 'web-tree-sitter';
2
+ import { type Result } from '../result.js';
3
+ export type SyntaxNode = Parser.SyntaxNode;
4
+ /** A Java type reduced to what mapping needs: a name, generic arguments and the array depth. */
5
+ export interface JavaType {
6
+ /** The last identifier, without package qualifiers or arguments: `List`, `Post`, `int`. */
7
+ name: string;
8
+ /** The type as written without generic arguments and array markers (`java.util.List`). */
9
+ text: string;
10
+ args: JavaType[];
11
+ /** Number of array dimensions: `byte[]` is 1. */
12
+ arrayDepth: number;
13
+ }
14
+ /** A statically evaluated expression. Anything that cannot be evaluated is `other` with its source text. */
15
+ export type JavaValue = {
16
+ kind: 'string';
17
+ value: string;
18
+ } | {
19
+ kind: 'number';
20
+ value: number;
21
+ text: string;
22
+ } | {
23
+ kind: 'bool';
24
+ value: boolean;
25
+ } | {
26
+ kind: 'null';
27
+ }
28
+ /** `GenerationType.IDENTITY`, or a bare identifier that is not a known constant. */
29
+ | {
30
+ kind: 'member';
31
+ path: string[];
32
+ }
33
+ /** `Post.class`. */
34
+ | {
35
+ kind: 'class';
36
+ type: string;
37
+ } | {
38
+ kind: 'array';
39
+ items: JavaValue[];
40
+ } | {
41
+ kind: 'annotation';
42
+ annotation: JavaAnnotation;
43
+ } | {
44
+ kind: 'other';
45
+ text: string;
46
+ };
47
+ /** Looks a constant up by simple or `Class.NAME` form; used while evaluating expressions. */
48
+ export type ConstLookup = (path: string[]) => SyntaxNode | undefined;
49
+ export interface JavaAnnotation {
50
+ /** The simple name: `Entity` for `@Entity` and for `@jakarta.persistence.Entity`. */
51
+ name: string;
52
+ /** The qualifier when the annotation is written fully qualified (`jakarta.persistence`). */
53
+ qualifier?: string;
54
+ /** Argument expressions by name; a single unnamed argument is stored as `value`. */
55
+ args: Map<string, SyntaxNode>;
56
+ node: SyntaxNode;
57
+ }
58
+ export interface JavaField {
59
+ name: string;
60
+ type: JavaType;
61
+ modifiers: string[];
62
+ annotations: JavaAnnotation[];
63
+ initializer?: SyntaxNode;
64
+ node: SyntaxNode;
65
+ }
66
+ export interface JavaParameter {
67
+ name: string;
68
+ type: JavaType;
69
+ }
70
+ export interface JavaMethod {
71
+ name: string;
72
+ returnType: JavaType;
73
+ parameters: JavaParameter[];
74
+ modifiers: string[];
75
+ annotations: JavaAnnotation[];
76
+ node: SyntaxNode;
77
+ }
78
+ export type JavaClassKind = 'class' | 'interface' | 'enum' | 'record' | 'annotation';
79
+ export interface JavaEnumConstant {
80
+ name: string;
81
+ /** The constructor arguments of the constant: `DRAFT("draft")` has one. */
82
+ args: SyntaxNode[];
83
+ }
84
+ export interface JavaClass {
85
+ name: string;
86
+ kind: JavaClassKind;
87
+ modifiers: string[];
88
+ annotations: JavaAnnotation[];
89
+ typeParameters: string[];
90
+ superclass?: JavaType;
91
+ interfaces: JavaType[];
92
+ fields: JavaField[];
93
+ methods: JavaMethod[];
94
+ enumConstants: JavaEnumConstant[];
95
+ /** Name of the enclosing type for nested types. */
96
+ outer?: string;
97
+ /** Imports of the file: simple name to the full name, or `pkg.*` for wildcards. */
98
+ imports: string[];
99
+ packageName: string;
100
+ path: string;
101
+ }
102
+ export interface JavaFile {
103
+ path: string;
104
+ packageName: string;
105
+ imports: string[];
106
+ /** Every type of the file, nested ones included. */
107
+ classes: JavaClass[];
108
+ /** True when the grammar reported syntax errors. */
109
+ hasErrors: boolean;
110
+ }
111
+ /** Lazily loads the tree-sitter Java grammar (WebAssembly, no native build step). */
112
+ export declare function getJavaParser(): Promise<Result<Parser>>;
113
+ /** Splits at commas that are not inside `<...>`, `(...)` or `[...]`. */
114
+ export declare function splitTopLevel(text: string): string[];
115
+ /** Reads a type from its source text. Never fails: unreadable text becomes a type named after the text. */
116
+ export declare function parseTypeText(text: string, depth?: number): JavaType;
117
+ /** Reads `@Name`, `@Name(value)` and `@Name(a = 1, b = 2)`. */
118
+ export declare function readAnnotation(node: SyntaxNode): JavaAnnotation;
119
+ /** Reads the types, fields and methods of one Java file. */
120
+ export declare function readJavaFile(root: SyntaxNode, path: string): JavaFile;
@@ -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>>;