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,361 @@
1
+ import { toCamelCase } from '../naming.js';
2
+ import { sqlColumn, sqlDefault } from './efcoreTypes.js';
3
+ import { isIntegerType, isPrimitive, javaColumn, jdbcTypeColumn, temporalColumn, } from './jpaTypes.js';
4
+ import { evaluate } from './javaValues.js';
5
+ /** The IR name of a member: `address.street` is `addressStreet`. */
6
+ export function irFieldName(member) {
7
+ return toCamelCase(member.path.join('_'));
8
+ }
9
+ /** Removes the backticks and quotes that make an identifier case-sensitive: `` `Order` `` is `Order`. */
10
+ export function cleanIdentifier(name) {
11
+ return name.replace(/^[`"[]|[`"\]]$/g, '');
12
+ }
13
+ /** The database column name: `@Column(name)`, else the attribute name. */
14
+ export function columnNameOf(member) {
15
+ const given = member.column?.string('name');
16
+ return given === undefined || given === ''
17
+ ? (member.path[member.path.length - 1] ?? member.attr.name)
18
+ : cleanIdentifier(given);
19
+ }
20
+ function converterFor(member, ctx) {
21
+ const notes = member.attr.notes;
22
+ const convert = notes.get('Convert');
23
+ if (convert?.boolean('disableConversion') === true) {
24
+ return undefined;
25
+ }
26
+ const named = convert?.className('converter');
27
+ if (named !== undefined) {
28
+ return (ctx.project.converters.get(named) ?? {
29
+ name: named,
30
+ attributeType: member.attr.type,
31
+ columnType: { name: '', text: '', args: [], arrayDepth: 0 },
32
+ autoApply: false,
33
+ });
34
+ }
35
+ if (notes.has('Id') || notes.has('Version') || notes.has('Enumerated')) {
36
+ return undefined;
37
+ }
38
+ for (const converter of ctx.project.converters.values()) {
39
+ if (converter.autoApply &&
40
+ converter.attributeType.name === member.attr.type.name &&
41
+ converter.attributeType.arrayDepth === member.attr.type.arrayDepth) {
42
+ return converter;
43
+ }
44
+ }
45
+ return undefined;
46
+ }
47
+ function enumDefinition(definition, stringStored) {
48
+ return {
49
+ name: definition.name,
50
+ values: definition.enumConstants.map((constant, index) => ({
51
+ name: constant.name,
52
+ dbValue: stringStored ? constant.name : String(index),
53
+ })),
54
+ };
55
+ }
56
+ /**
57
+ * Reads an enum that an `AttributeConverter<Enum, String|Integer>` stores under other values than its names, the
58
+ * way ormbridge writes it: every constant carries its stored value as the only constructor argument. The converter
59
+ * is not run, so any other shape (a converter that computes the value) is not understood and returns undefined.
60
+ */
61
+ function convertedEnum(member, definition, ctx) {
62
+ const named = member.attr.notes
63
+ .get('Convert')
64
+ ?.className('converter');
65
+ const converter = named === undefined ? undefined : ctx.project.converters.get(named);
66
+ if (converter === undefined ||
67
+ converter.attributeType.name !== definition.name) {
68
+ return undefined;
69
+ }
70
+ const numeric = /^(int|Integer|long|Long|short|Short)$/.test(converter.columnType.name);
71
+ if (!numeric && converter.columnType.name !== 'String') {
72
+ return undefined;
73
+ }
74
+ const values = [];
75
+ for (const constant of definition.enumConstants) {
76
+ const only = constant.args.length === 1 ? constant.args[0] : undefined;
77
+ const value = only === undefined ? undefined : evaluate(only, ctx.project.lookup);
78
+ if (numeric && value?.kind === 'number') {
79
+ values.push(String(value.value));
80
+ }
81
+ else if (!numeric && value?.kind === 'string') {
82
+ values.push(value.value);
83
+ }
84
+ else {
85
+ return undefined;
86
+ }
87
+ }
88
+ return { values, numeric };
89
+ }
90
+ /** Reads `default ...` out of a `columnDefinition` such as `varchar(20) not null default 'x'`. */
91
+ function definitionParts(definition) {
92
+ const defaultMatch = definition.match(/\bdefault\s+('(?:[^']|'')*'|\([^)]*\)|[^\s,]+)/i);
93
+ const type = definition
94
+ .replace(/\bdefault\s+('(?:[^']|'')*'|\([^)]*\)|[^\s,]+)/gi, ' ')
95
+ .replace(/\b(not null|null|unique|primary key|auto_increment|autoincrement|check\s*\(.*\)|generated\b.*|comment\s+'[^']*')/gi, ' ')
96
+ .replace(/\s+/g, ' ')
97
+ .trim();
98
+ return {
99
+ type,
100
+ ...(defaultMatch?.[1] === undefined
101
+ ? {}
102
+ : { defaultText: defaultMatch[1] }),
103
+ notNull: /\bnot\s+null\b/i.test(definition),
104
+ unique: /\bunique\b/i.test(definition),
105
+ };
106
+ }
107
+ /** Bean Validation hints, in the order Hibernate applies them: `@Size`/`@Length` for the length, `@NotNull` for nullability. */
108
+ function validationLength(notes) {
109
+ const size = notes.get('Size')?.number('max');
110
+ const length = notes.get('Length', true)?.number('max');
111
+ const found = size ?? length;
112
+ return found !== undefined && found < 2_000_000_000 ? found : undefined;
113
+ }
114
+ function isDeclaredNotNull(notes) {
115
+ // Hibernate turns @NotNull into NOT NULL; @NotEmpty and @NotBlank add nothing to the DDL (checked against 6.4).
116
+ return (notes.has('NotNull') || notes.get('Basic')?.boolean('optional') === false);
117
+ }
118
+ /** Builds the IR field for one mapped column. */
119
+ export function buildField(member, ctx, singleKey) {
120
+ const attribute = member.attr;
121
+ const notes = attribute.notes;
122
+ const type = attribute.type;
123
+ const column = member.column;
124
+ const place = `${ctx.entity.name}.${member.path.join('.')}`;
125
+ const definitionText = column?.string('columnDefinition');
126
+ const definition = definitionText === undefined || definitionText === ''
127
+ ? undefined
128
+ : definitionParts(definitionText);
129
+ let shape;
130
+ let enumDef;
131
+ let fromJavaType = false;
132
+ const enumClass = type.arrayDepth === 0 ? ctx.project.enums.get(type.name) : undefined;
133
+ const converter = enumClass === undefined ? converterFor(member, ctx) : undefined;
134
+ const converted = enumClass === undefined ? undefined : convertedEnum(member, enumClass, ctx);
135
+ const jdbc = notes.get('JdbcTypeCode', true);
136
+ const hibernateType = notes.get('Type', true);
137
+ if (converter !== undefined) {
138
+ const target = converter.columnType;
139
+ shape =
140
+ target.name === '' ? undefined : javaColumn(target, attribute.imports);
141
+ ctx.warn(`${place}: the converter ${converter.name} is not run; ${shape === undefined
142
+ ? 'its column type is not known'
143
+ : `the column was read as ${target.name}`}.`);
144
+ }
145
+ else if (enumClass !== undefined && converted !== undefined) {
146
+ enumDef = {
147
+ name: enumClass.name,
148
+ values: enumClass.enumConstants.map((constant, index) => ({
149
+ name: constant.name,
150
+ dbValue: converted.values[index] ?? constant.name,
151
+ })),
152
+ };
153
+ shape = converted.numeric
154
+ ? { type: 'int' }
155
+ : { type: 'string', maxLength: 255 };
156
+ }
157
+ else if (enumClass !== undefined) {
158
+ const mode = notes.get('Enumerated')?.member('value');
159
+ const stringStored = mode === 'STRING';
160
+ enumDef = enumDefinition(enumClass, stringStored);
161
+ shape = stringStored ? { type: 'string', maxLength: 255 } : { type: 'int' };
162
+ if (!stringStored) {
163
+ ctx.warn(`${place}: the enum ${enumClass.name} is stored as its ordinal number (the default of @Enumerated); it was read as an enum with the numbers as values, and writers that create enum types will store text instead. Use @Enumerated(EnumType.STRING) to store the names.`);
164
+ }
165
+ }
166
+ else if (jdbc !== undefined) {
167
+ const code = jdbc.member('value');
168
+ shape = code === undefined ? undefined : jdbcTypeColumn(code);
169
+ if (shape === undefined) {
170
+ ctx.warn(`${place}: @JdbcTypeCode(${code ?? '?'}) is not one the model knows; the column was read from the Java type ${type.text}.`);
171
+ }
172
+ }
173
+ else if (hibernateType !== undefined) {
174
+ const named = hibernateType.className('value') ?? '';
175
+ if (/json/i.test(named)) {
176
+ shape = { type: 'json' };
177
+ }
178
+ else {
179
+ ctx.warn(`${place}: @Type(${named}) is a custom type and is not run; the column was read from the Java type ${type.text}.`);
180
+ }
181
+ }
182
+ if (shape === undefined && notes.has('Lob')) {
183
+ if (/^(byte|Byte)$/.test(type.name) || type.name === 'Blob') {
184
+ shape = { type: 'bytes' };
185
+ }
186
+ else if (type.name === 'String' ||
187
+ /^(char|Character|Clob)$/.test(type.name)) {
188
+ shape = { type: 'text' };
189
+ }
190
+ else {
191
+ shape = { type: 'bytes' };
192
+ }
193
+ }
194
+ if (shape === undefined &&
195
+ enumClass === undefined &&
196
+ converter === undefined) {
197
+ const temporal = notes.get('Temporal')?.member('value');
198
+ if (temporal !== undefined && /^(Date|Calendar)$/.test(type.name)) {
199
+ shape = temporalColumn(temporal);
200
+ }
201
+ if (shape === undefined) {
202
+ shape = javaColumn(type, attribute.imports);
203
+ fromJavaType = shape !== undefined;
204
+ }
205
+ }
206
+ if (definition !== undefined &&
207
+ definition.type !== '' &&
208
+ enumClass === undefined) {
209
+ const fromSql = sqlColumn(definition.type);
210
+ if (fromSql === undefined) {
211
+ ctx.warn(`${place}: the columnDefinition "${definitionText ?? ''}" was not understood; the column was read from the Java type ${type.text}.`);
212
+ }
213
+ else {
214
+ shape = fromSql;
215
+ }
216
+ }
217
+ if (shape === undefined) {
218
+ shape = { type: 'unsupported', unsupportedType: type.text };
219
+ ctx.warn(`${place}: the type ${type.text} has no column type in the shared model (add @Convert, @JdbcTypeCode or @Embedded); the column is read as unsupported (${type.text}).`);
220
+ }
221
+ // Lengths, precision and scale ---------------------------------------------------------------
222
+ let irType = shape.type;
223
+ let maxLength = shape.maxLength;
224
+ const declaredLength = column?.number('length');
225
+ const hinted = validationLength(notes);
226
+ if (irType === 'string') {
227
+ if (declaredLength !== undefined) {
228
+ maxLength = declaredLength;
229
+ }
230
+ else if (shape.maxLength === 255 || shape.maxLength === undefined) {
231
+ maxLength = definition !== undefined ? shape.maxLength : (hinted ?? 255);
232
+ }
233
+ }
234
+ if (irType === 'text' && declaredLength !== undefined && !notes.has('Lob')) {
235
+ irType = 'string';
236
+ maxLength = declaredLength;
237
+ }
238
+ let maxDigits = shape.maxDigits;
239
+ let decimalPlaces = shape.decimalPlaces;
240
+ if (irType === 'decimal' && fromJavaType) {
241
+ const precision = column?.number('precision');
242
+ const scale = column?.number('scale');
243
+ const digits = notes.get('Digits');
244
+ if (precision !== undefined && precision > 0) {
245
+ maxDigits = precision;
246
+ decimalPlaces = scale ?? 0;
247
+ }
248
+ else if (scale !== undefined && scale > 0) {
249
+ decimalPlaces = scale;
250
+ }
251
+ else if (digits !== undefined) {
252
+ const whole = digits.number('integer') ?? 0;
253
+ const fraction = digits.number('fraction') ?? 0;
254
+ maxDigits = whole + fraction;
255
+ decimalPlaces = fraction;
256
+ }
257
+ }
258
+ // Nullability ----------------------------------------------------------------------------
259
+ let isNullable = true;
260
+ if (isPrimitive(type)) {
261
+ isNullable = false;
262
+ }
263
+ if (isDeclaredNotNull(notes) || definition?.notNull === true) {
264
+ isNullable = false;
265
+ }
266
+ const explicitNullable = column?.boolean('nullable');
267
+ if (explicitNullable === false) {
268
+ isNullable = false;
269
+ }
270
+ else if (explicitNullable === true && !isPrimitive(type)) {
271
+ isNullable = true;
272
+ }
273
+ const isKey = member.isId;
274
+ if (isKey) {
275
+ isNullable = false;
276
+ }
277
+ // Defaults and generated values -------------------------------------------------------------
278
+ let defaultValue;
279
+ const columnDefault = notes.get('ColumnDefault', true)?.string('value') ??
280
+ definition?.defaultText;
281
+ if (columnDefault !== undefined) {
282
+ defaultValue = sqlDefault(columnDefault, irType);
283
+ if (enumDef !== undefined &&
284
+ defaultValue.kind === 'literal' &&
285
+ typeof defaultValue.value === 'string') {
286
+ const text = defaultValue.value;
287
+ const found = enumDef.values.find((item) => item.dbValue === text);
288
+ if (found !== undefined) {
289
+ defaultValue = { kind: 'enumValue', value: found.name };
290
+ }
291
+ }
292
+ }
293
+ let isAutoUpdated = false;
294
+ const created = notes.has('CreationTimestamp', true) || notes.has('CreatedDate');
295
+ const updated = notes.has('UpdateTimestamp', true) || notes.has('LastModifiedDate');
296
+ if (created && defaultValue === undefined && irType === 'dateTime') {
297
+ defaultValue = { kind: 'now' };
298
+ }
299
+ if (updated && irType === 'dateTime') {
300
+ isAutoUpdated = true;
301
+ }
302
+ if (defaultValue === undefined && notes.has('UuidGenerator', true)) {
303
+ defaultValue = { kind: 'uuid' };
304
+ }
305
+ const generatedValue = notes.get('GeneratedValue');
306
+ if (generatedValue !== undefined && defaultValue === undefined) {
307
+ const strategy = generatedValue.member('strategy') ?? 'AUTO';
308
+ if (irType === 'uuid' && /^(AUTO|UUID)$/.test(strategy)) {
309
+ defaultValue = { kind: 'uuid' };
310
+ }
311
+ else if (isIntegerType(type)) {
312
+ defaultValue = { kind: 'autoIncrement' };
313
+ if (strategy === 'SEQUENCE' || strategy === 'TABLE') {
314
+ ctx.warn(`${place}: the key is generated from ${strategy === 'TABLE' ? 'a table' : 'a sequence'} (@GeneratedValue(strategy = ${strategy})); it was read as an auto-increment column.`);
315
+ }
316
+ }
317
+ }
318
+ const computed = notes.get('GeneratedColumn', true);
319
+ const expression = computed?.string('value');
320
+ if (notes.has('Version')) {
321
+ ctx.warn(`${place}: the @Version attribute is Hibernate's optimistic-locking counter; it was read as an ordinary column.`);
322
+ }
323
+ if (notes.has('Convert') &&
324
+ converter === undefined &&
325
+ converted === undefined) {
326
+ ctx.warn(`${place}: @Convert(disableConversion = true) was ignored.`);
327
+ }
328
+ const unique = (column?.boolean('unique') ?? false) || (definition?.unique ?? false);
329
+ const field = {
330
+ name: irFieldName(member),
331
+ columnName: columnNameOf(member),
332
+ type: irType,
333
+ isPrimaryKey: isKey && singleKey,
334
+ isUnique: unique && !(isKey && singleKey),
335
+ isNullable,
336
+ isAutoUpdated,
337
+ ...(defaultValue === undefined ? {} : { default: defaultValue }),
338
+ ...(irType === 'string' && maxLength !== undefined ? { maxLength } : {}),
339
+ ...(irType === 'decimal' && maxDigits !== undefined ? { maxDigits } : {}),
340
+ ...(irType === 'decimal' && decimalPlaces !== undefined
341
+ ? { decimalPlaces }
342
+ : {}),
343
+ ...(shape.arrayDepth === undefined ? {} : { arrayDepth: shape.arrayDepth }),
344
+ ...(enumDef === undefined ? {} : { enumName: enumDef.name }),
345
+ ...(irType === 'unsupported' && shape.unsupportedType !== undefined
346
+ ? { unsupportedType: shape.unsupportedType }
347
+ : {}),
348
+ ...(expression === undefined
349
+ ? {}
350
+ : { generated: { expression, isStored: false } }),
351
+ };
352
+ return {
353
+ field,
354
+ member,
355
+ ...(enumDef === undefined ? {} : { enumDefinition: enumDef }),
356
+ naturalId: notes.has('NaturalId', true),
357
+ readOnly: column?.boolean('insertable') === false &&
358
+ column.boolean('updatable') === false,
359
+ };
360
+ }
361
+ //# sourceMappingURL=jpaColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpaColumns.js","sourceRoot":"","sources":["../../src/parsers/jpaColumns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { EntityInfo, Member, Project } from './jpaModel.js';
2
+ /** Finds the entity classes of the input and arranges them into hierarchies. */
3
+ export declare function discoverEntities(project: Project, warn: (message: string) => void): EntityInfo[];
4
+ /**
5
+ * The members that make up an entity's table. Mapped superclasses come first. With single-table inheritance the
6
+ * root also takes the members of every subclass (they must allow null); with joined inheritance a subclass takes
7
+ * only what it declares itself; with table-per-class every class of the chain contributes.
8
+ */
9
+ export declare function entityMembers(project: Project, info: EntityInfo, warn: (message: string) => void): Member[];
@@ -0,0 +1,181 @@
1
+ import { accessOf, classNotes, classOverrides, isEntityClass, isMappedSuperclass, membersOf, } from './jpaClasses.js';
2
+ // ---------------------------------------------------------------------------
3
+ // Entities and hierarchies
4
+ // ---------------------------------------------------------------------------
5
+ const IGNORED_SUPERCLASSES = new Set([
6
+ 'Object',
7
+ 'Serializable',
8
+ ]);
9
+ function strategyOf(project, root) {
10
+ const strategy = classNotes(project, root)
11
+ .get('Inheritance')
12
+ ?.member('strategy');
13
+ switch (strategy) {
14
+ case 'JOINED':
15
+ return 'joined';
16
+ case 'TABLE_PER_CLASS':
17
+ return 'tablePerClass';
18
+ default:
19
+ return 'singleTable';
20
+ }
21
+ }
22
+ /** The superclasses of a class that are in the input, root first. */
23
+ function superclassChain(project, cls, warn) {
24
+ const chain = [];
25
+ const seen = new Set([cls.name]);
26
+ let current = cls;
27
+ while (current.superclass !== undefined) {
28
+ const name = current.superclass.name;
29
+ const parent = project.classes.get(name);
30
+ if (parent === undefined) {
31
+ if (!IGNORED_SUPERCLASSES.has(name)) {
32
+ warn(`${cls.name}: the superclass ${name} is not in the input, so the attributes it declares are not read.`);
33
+ }
34
+ break;
35
+ }
36
+ if (seen.has(name)) {
37
+ break;
38
+ }
39
+ seen.add(name);
40
+ chain.unshift(parent);
41
+ current = parent;
42
+ }
43
+ return chain;
44
+ }
45
+ /** Finds the entity classes of the input and arranges them into hierarchies. */
46
+ export function discoverEntities(project, warn) {
47
+ const infos = new Map();
48
+ for (const cls of project.classes.values()) {
49
+ if (!isEntityClass(project, cls)) {
50
+ continue;
51
+ }
52
+ const notes = classNotes(project, cls);
53
+ const chain = [...superclassChain(project, cls, warn), cls];
54
+ infos.set(cls.name, {
55
+ cls,
56
+ name: cls.name,
57
+ entityName: notes.get('Entity')?.string('name') || cls.name,
58
+ notes,
59
+ chain,
60
+ children: [],
61
+ // Set to the first entity of the hierarchy below, once every entity is known.
62
+ root: undefined,
63
+ inheritance: 'none',
64
+ accesses: [],
65
+ isAbstract: cls.modifiers.includes('abstract'),
66
+ members: [],
67
+ });
68
+ }
69
+ for (const info of infos.values()) {
70
+ const ancestors = info.chain
71
+ .slice(0, -1)
72
+ .flatMap((cls) => {
73
+ const found = infos.get(cls.name);
74
+ return found === undefined ? [] : [found];
75
+ });
76
+ const parent = ancestors[ancestors.length - 1];
77
+ if (parent !== undefined) {
78
+ info.parent = parent;
79
+ parent.children.push(info);
80
+ }
81
+ info.root = ancestors[0] ?? info;
82
+ }
83
+ for (const info of infos.values()) {
84
+ if (info.root === info && info.children.length === 0) {
85
+ info.inheritance = 'none';
86
+ }
87
+ else {
88
+ info.inheritance = strategyOf(project, info.root.cls);
89
+ }
90
+ let access = 'field';
91
+ for (const cls of info.chain) {
92
+ access = accessOf(project, cls, access);
93
+ info.accesses.push(access);
94
+ }
95
+ }
96
+ return [...infos.values()];
97
+ }
98
+ /**
99
+ * The type arguments the classes below `position` of a chain gave to its generic class:
100
+ * `class User extends BaseEntity<Long>` makes the parameter `T` of `BaseEntity` a `Long`.
101
+ */
102
+ function genericsAt(chain, position) {
103
+ const generics = new Map();
104
+ for (let index = chain.length - 2; index >= position; index -= 1) {
105
+ const parent = chain[index];
106
+ const child = chain[index + 1];
107
+ const given = child?.superclass?.args ?? [];
108
+ const next = new Map();
109
+ parent?.typeParameters.forEach((name, argument) => {
110
+ const type = given[argument];
111
+ if (type !== undefined) {
112
+ next.set(name, generics.get(type.name) ?? type);
113
+ }
114
+ });
115
+ generics.clear();
116
+ for (const [name, type] of next) {
117
+ generics.set(name, type);
118
+ }
119
+ }
120
+ return generics;
121
+ }
122
+ /** True for a class whose attributes JPA maps into the tables of its subclasses or itself. */
123
+ function isPersistentClass(project, cls) {
124
+ return isEntityClass(project, cls) || isMappedSuperclass(project, cls);
125
+ }
126
+ /** The persistence annotations that only make sense on a mapped class. */
127
+ const MAPPING_ANNOTATIONS = new Set([
128
+ 'Id',
129
+ 'Column',
130
+ 'ManyToOne',
131
+ 'OneToOne',
132
+ 'OneToMany',
133
+ 'ManyToMany',
134
+ 'Embedded',
135
+ 'EmbeddedId',
136
+ 'Basic',
137
+ ]);
138
+ /**
139
+ * The members that make up an entity's table. Mapped superclasses come first. With single-table inheritance the
140
+ * root also takes the members of every subclass (they must allow null); with joined inheritance a subclass takes
141
+ * only what it declares itself; with table-per-class every class of the chain contributes.
142
+ */
143
+ export function entityMembers(project, info, warn) {
144
+ const members = [];
145
+ const add = (entity, from) => {
146
+ const overrides = classOverrides(project, entity.cls, warn);
147
+ entity.chain.forEach((cls, position) => {
148
+ if (position < from) {
149
+ return;
150
+ }
151
+ if (!isPersistentClass(project, cls)) {
152
+ if (cls.fields.some((field) => field.annotations.some((item) => MAPPING_ANNOTATIONS.has(item.name)))) {
153
+ warn(`${entity.name}: the superclass ${cls.name} has mapping annotations but no @MappedSuperclass or @Entity, so JPA does not persist its attributes.`);
154
+ }
155
+ return;
156
+ }
157
+ members.push(...membersOf({
158
+ project,
159
+ warn,
160
+ declaredIn: entity.name,
161
+ generics: genericsAt(entity.chain, position),
162
+ }, cls, entity.accesses[position] ?? 'field', [], overrides, false));
163
+ });
164
+ };
165
+ let first = 0;
166
+ if (info.inheritance === 'joined' && info.parent !== undefined) {
167
+ first = info.chain.indexOf(info.parent.cls) + 1;
168
+ }
169
+ add(info, first);
170
+ if (info.inheritance === 'singleTable' && info.root === info) {
171
+ const visit = (entity) => {
172
+ for (const child of entity.children) {
173
+ add(child, child.chain.indexOf(entity.cls) + 1);
174
+ visit(child);
175
+ }
176
+ };
177
+ visit(info);
178
+ }
179
+ return members;
180
+ }
181
+ //# sourceMappingURL=jpaEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpaEntities.js","sourceRoot":"","sources":["../../src/parsers/jpaEntities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { IrIndex } from '../ir.js';
2
+ import type { EntityInfo } from './jpaModel.js';
3
+ export interface IndexResult {
4
+ indexes: IrIndex[];
5
+ /** IR names of columns that carry a single-column unnamed unique constraint. */
6
+ uniqueFields: Set<string>;
7
+ }
8
+ /**
9
+ * Reads `@Table(uniqueConstraints, indexes)` and the natural id into IR indexes. `names` maps a column name (any
10
+ * case) or an attribute name to the IR field or relation that owns it.
11
+ */
12
+ export declare function buildIndexes(entity: EntityInfo, names: ReadonlyMap<string, string>, naturalId: readonly string[], warn: (message: string) => void): IndexResult;