ormbridge 0.9.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 (97) hide show
  1. package/README.md +1 -0
  2. package/dist/cliRunner.js +3 -3
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +2 -2
  5. package/dist/emitters/jpa.d.ts +36 -0
  6. package/dist/emitters/jpa.js +253 -0
  7. package/dist/emitters/jpa.js.map +1 -0
  8. package/dist/emitters/jpaColumns.d.ts +25 -0
  9. package/dist/emitters/jpaColumns.js +341 -0
  10. package/dist/emitters/jpaColumns.js.map +1 -0
  11. package/dist/emitters/jpaDefaults.d.ts +24 -0
  12. package/dist/emitters/jpaDefaults.js +223 -0
  13. package/dist/emitters/jpaDefaults.js.map +1 -0
  14. package/dist/emitters/jpaEnums.d.ts +11 -0
  15. package/dist/emitters/jpaEnums.js +134 -0
  16. package/dist/emitters/jpaEnums.js.map +1 -0
  17. package/dist/emitters/jpaFormat.d.ts +16 -0
  18. package/dist/emitters/jpaFormat.js +73 -0
  19. package/dist/emitters/jpaFormat.js.map +1 -0
  20. package/dist/emitters/jpaKeys.d.ts +25 -0
  21. package/dist/emitters/jpaKeys.js +110 -0
  22. package/dist/emitters/jpaKeys.js.map +1 -0
  23. package/dist/emitters/jpaNames.d.ts +26 -0
  24. package/dist/emitters/jpaNames.js +234 -0
  25. package/dist/emitters/jpaNames.js.map +1 -0
  26. package/dist/emitters/jpaRelations.d.ts +41 -0
  27. package/dist/emitters/jpaRelations.js +304 -0
  28. package/dist/emitters/jpaRelations.js.map +1 -0
  29. package/dist/emitters/jpaRender.d.ts +10 -0
  30. package/dist/emitters/jpaRender.js +81 -0
  31. package/dist/emitters/jpaRender.js.map +1 -0
  32. package/dist/emitters/jpaScalars.d.ts +32 -0
  33. package/dist/emitters/jpaScalars.js +188 -0
  34. package/dist/emitters/jpaScalars.js.map +1 -0
  35. package/dist/emitters/jpaTable.d.ts +10 -0
  36. package/dist/emitters/jpaTable.js +109 -0
  37. package/dist/emitters/jpaTable.js.map +1 -0
  38. package/dist/emitters/jpaTypes.d.ts +85 -0
  39. package/dist/emitters/jpaTypes.js +36 -0
  40. package/dist/emitters/jpaTypes.js.map +1 -0
  41. package/dist/formats.d.ts +3 -2
  42. package/dist/formats.js +34 -0
  43. package/dist/formats.js.map +1 -1
  44. package/dist/index.d.ts +4 -0
  45. package/dist/index.js +2 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/io.js +27 -1
  48. package/dist/io.js.map +1 -1
  49. package/dist/parsers/javaSyntax.d.ts +120 -0
  50. package/dist/parsers/javaSyntax.js +304 -0
  51. package/dist/parsers/javaSyntax.js.map +1 -0
  52. package/dist/parsers/javaValues.d.ts +5 -0
  53. package/dist/parsers/javaValues.js +187 -0
  54. package/dist/parsers/javaValues.js.map +1 -0
  55. package/dist/parsers/jpa.d.ts +17 -0
  56. package/dist/parsers/jpa.js +131 -0
  57. package/dist/parsers/jpa.js.map +1 -0
  58. package/dist/parsers/jpaAnnotations.d.ts +46 -0
  59. package/dist/parsers/jpaAnnotations.js +156 -0
  60. package/dist/parsers/jpaAnnotations.js.map +1 -0
  61. package/dist/parsers/jpaBuild.d.ts +4 -0
  62. package/dist/parsers/jpaBuild.js +297 -0
  63. package/dist/parsers/jpaBuild.js.map +1 -0
  64. package/dist/parsers/jpaClasses.d.ts +27 -0
  65. package/dist/parsers/jpaClasses.js +257 -0
  66. package/dist/parsers/jpaClasses.js.map +1 -0
  67. package/dist/parsers/jpaCollections.d.ts +12 -0
  68. package/dist/parsers/jpaCollections.js +106 -0
  69. package/dist/parsers/jpaCollections.js.map +1 -0
  70. package/dist/parsers/jpaColumns.d.ts +26 -0
  71. package/dist/parsers/jpaColumns.js +361 -0
  72. package/dist/parsers/jpaColumns.js.map +1 -0
  73. package/dist/parsers/jpaEntities.d.ts +9 -0
  74. package/dist/parsers/jpaEntities.js +181 -0
  75. package/dist/parsers/jpaEntities.js.map +1 -0
  76. package/dist/parsers/jpaIndexes.d.ts +12 -0
  77. package/dist/parsers/jpaIndexes.js +87 -0
  78. package/dist/parsers/jpaIndexes.js.map +1 -0
  79. package/dist/parsers/jpaJoins.d.ts +68 -0
  80. package/dist/parsers/jpaJoins.js +131 -0
  81. package/dist/parsers/jpaJoins.js.map +1 -0
  82. package/dist/parsers/jpaModel.d.ts +73 -0
  83. package/dist/parsers/jpaModel.js +2 -0
  84. package/dist/parsers/jpaModel.js.map +1 -0
  85. package/dist/parsers/jpaNotes.d.ts +20 -0
  86. package/dist/parsers/jpaNotes.js +138 -0
  87. package/dist/parsers/jpaNotes.js.map +1 -0
  88. package/dist/parsers/jpaRelations.d.ts +4 -0
  89. package/dist/parsers/jpaRelations.js +242 -0
  90. package/dist/parsers/jpaRelations.js.map +1 -0
  91. package/dist/parsers/jpaTypes.d.ts +23 -0
  92. package/dist/parsers/jpaTypes.js +232 -0
  93. package/dist/parsers/jpaTypes.js.map +1 -0
  94. package/dist/styles.d.ts +3 -2
  95. package/dist/styles.js +4 -1
  96. package/dist/styles.js.map +1 -1
  97. package/package.json +8 -1
@@ -0,0 +1,297 @@
1
+ import { buildCollection } from './jpaCollections.js';
2
+ import { entityMembers } from './jpaEntities.js';
3
+ import { buildField, cleanIdentifier, columnNameOf, irFieldName, } from './jpaColumns.js';
4
+ import { buildIndexes } from './jpaIndexes.js';
5
+ import { joinPairs, modelOwner, tableNameOf, } from './jpaJoins.js';
6
+ import { resolveRelations } from './jpaRelations.js';
7
+ import { inheritanceNotes, tableNotes } from './jpaNotes.js';
8
+ /** True when an entity has a table of its own (single-table subclasses and abstract table-per-class roots do not). */
9
+ function hasTable(entity) {
10
+ if (entity.inheritance === 'singleTable' && entity.root !== entity) {
11
+ return false;
12
+ }
13
+ return !(entity.inheritance === 'tablePerClass' && entity.isAbstract);
14
+ }
15
+ /** Assembles the IR from the entities of the input. */
16
+ export function buildSchema(project, entities) {
17
+ const warn = (message) => {
18
+ project.warnings.push(message);
19
+ };
20
+ for (const entity of entities) {
21
+ entity.members = entityMembers(project, entity, warn);
22
+ }
23
+ const byName = new Map(entities.map((entity) => [
24
+ entity.name,
25
+ entity,
26
+ ]));
27
+ const tables = entities.filter(hasTable);
28
+ const built = new Map();
29
+ const resolver = {
30
+ project,
31
+ entities: byName,
32
+ warn,
33
+ fieldsOf: (entity) => built.get(modelOwner(entity)) ?? [],
34
+ keyOf: (entity) => keyColumns(entity, resolver, 0),
35
+ };
36
+ // Columns ------------------------------------------------------------------------------------
37
+ for (const entity of tables) {
38
+ const keyCount = entity.members.filter((member) => member.isId).length;
39
+ built.set(entity, entity.members
40
+ .filter((member) => member.kind === 'basic')
41
+ .map((member) => buildField(member, { project, entity, warn }, keyCount === 1)));
42
+ }
43
+ // Models --------------------------------------------------------------------------------------
44
+ const models = new Map();
45
+ const outputs = new Map();
46
+ const enums = new Map();
47
+ const relationOf = new Map();
48
+ const inverse = [];
49
+ const foreign = [];
50
+ for (const entity of tables) {
51
+ const output = resolveRelations(entity, entity.members, resolver);
52
+ outputs.set(entity, output);
53
+ inverse.push(...output.inverse);
54
+ foreign.push(...output.foreign);
55
+ }
56
+ const taken = new Set(entities.map((entity) => entity.name));
57
+ const extraModels = [];
58
+ for (const entity of tables) {
59
+ const output = outputs.get(entity);
60
+ const fieldsBuilt = built.get(entity) ?? [];
61
+ if (output === undefined) {
62
+ continue;
63
+ }
64
+ const model = assemble(entity, fieldsBuilt, output, resolver, enums);
65
+ models.set(entity, model);
66
+ for (const placed of output.relations) {
67
+ relationOf.set(`${entity.name}.${placed.relation.name}`, placed.relation);
68
+ }
69
+ for (const member of entity.members) {
70
+ if (member.kind !== 'collection') {
71
+ continue;
72
+ }
73
+ const collection = buildCollection(entity, member, project, resolver, taken);
74
+ if (collection !== undefined) {
75
+ taken.add(collection.model.name);
76
+ extraModels.push(collection.model);
77
+ if (collection.enumDefinition !== undefined) {
78
+ enums.set(collection.enumDefinition.name, collection.enumDefinition);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ for (const { model: owner, relation } of foreign) {
84
+ const model = models.get(owner);
85
+ if (model === undefined) {
86
+ continue;
87
+ }
88
+ let name = relation.name;
89
+ while (model.fields.some((field) => field.name === name) ||
90
+ model.relations.some((item) => item.name === name)) {
91
+ name = `${name}Ref`;
92
+ }
93
+ const placed = { ...relation, name };
94
+ model.relations.push(placed);
95
+ relationOf.set(`${owner.name}.${name}`, placed);
96
+ }
97
+ for (const link of inverse) {
98
+ const owning = relationOf.get(`${link.model.name}.${link.attribute}`);
99
+ if (owning === undefined) {
100
+ project.warnings.push(`${link.model.name}: mappedBy = "${link.attribute}" (declared as ${link.relatedName}) names no relationship of ${link.model.name} in the input; the inverse side was not linked.`);
101
+ }
102
+ else if (owning.relatedName === undefined) {
103
+ owning.relatedName = link.relatedName;
104
+ }
105
+ }
106
+ const all = [...models.values(), ...extraModels];
107
+ dropDanglingRelations(all, warn);
108
+ return {
109
+ models: all,
110
+ enums: [...enums.values()],
111
+ warnings: project.warnings,
112
+ };
113
+ }
114
+ /** Removes relationships whose target has no table (an abstract table-per-class root, a skipped entity). */
115
+ function dropDanglingRelations(models, warn) {
116
+ const known = new Set(models.map((model) => model.name));
117
+ for (const model of models) {
118
+ model.relations = model.relations.filter((relation) => {
119
+ if (known.has(relation.targetModel)) {
120
+ return true;
121
+ }
122
+ warn(`${model.name}.${relation.name}: the target ${relation.targetModel} has no table of its own in the input (an abstract table-per-class entity, or one that was skipped); the relationship was dropped.`);
123
+ return false;
124
+ });
125
+ if (model.compositeForeignKeys !== undefined) {
126
+ model.compositeForeignKeys = model.compositeForeignKeys.filter((key) => known.has(key.targetModel));
127
+ }
128
+ }
129
+ }
130
+ /** The primary key columns of an entity's table. */
131
+ function keyColumns(entity, resolver, depth) {
132
+ const table = modelOwner(entity);
133
+ if (table.inheritance === 'joined' &&
134
+ table.parent !== undefined &&
135
+ depth < 8) {
136
+ const parentKeys = keyColumns(table.parent, resolver, depth + 1);
137
+ const joinColumn = table.notes
138
+ .get('PrimaryKeyJoinColumn')
139
+ ?.string('name');
140
+ return parentKeys.map((key) => parentKeys.length === 1 && joinColumn
141
+ ? { ...key, columnName: cleanIdentifier(joinColumn) }
142
+ : key);
143
+ }
144
+ const keys = [];
145
+ for (const member of table.members) {
146
+ if (!member.isId) {
147
+ continue;
148
+ }
149
+ if (member.kind === 'relation' && depth < 8) {
150
+ const target = resolver.entities.get(member.attr.type.name);
151
+ const pairs = target === undefined
152
+ ? undefined
153
+ : joinPairs(member, target, resolver, `${table.name}.${member.attr.name}`);
154
+ if (pairs !== undefined) {
155
+ keys.push(...pairs.map((pair) => ({
156
+ name: irFieldName(member),
157
+ columnName: pair.columnName,
158
+ })));
159
+ }
160
+ }
161
+ else if (member.kind === 'basic') {
162
+ keys.push({
163
+ name: irFieldName(member),
164
+ columnName: columnNameOf(member),
165
+ });
166
+ }
167
+ }
168
+ return keys;
169
+ }
170
+ function recordEnum(enums, item, place, warn) {
171
+ const definition = item.enumDefinition;
172
+ if (definition === undefined) {
173
+ return;
174
+ }
175
+ const known = enums.get(definition.name);
176
+ if (known === undefined) {
177
+ enums.set(definition.name, definition);
178
+ return;
179
+ }
180
+ if (known.values.some((value, index) => value.dbValue !== definition.values[index]?.dbValue)) {
181
+ warn(`${place}: the enum ${definition.name} is stored differently in different columns (name and ordinal); the IR keeps one definition, with the names.`);
182
+ if (definition.values.every((value) => value.dbValue === value.name)) {
183
+ enums.set(definition.name, definition);
184
+ }
185
+ }
186
+ }
187
+ function assemble(entity, built, output, resolver, enums) {
188
+ const warn = resolver.warn;
189
+ const placed = [...output.relations];
190
+ // A read-only copy of a column (insertable = false, updatable = false) is the relationship's column.
191
+ const columnsTaken = new Set(placed.map((item) => item.relation.columnName.toLowerCase()));
192
+ const kept = [];
193
+ for (const item of built) {
194
+ const path = item.member.path.join('.');
195
+ const consumedBy = output.consumed.get(path);
196
+ if (consumedBy !== undefined) {
197
+ continue;
198
+ }
199
+ const column = item.field.columnName.toLowerCase();
200
+ if (item.readOnly && columnsTaken.has(column)) {
201
+ continue;
202
+ }
203
+ if (kept.some((other) => other.field.columnName.toLowerCase() === column)) {
204
+ warn(`${entity.name}.${path}: another attribute already maps the column "${item.field.columnName}"; this one was skipped.`);
205
+ continue;
206
+ }
207
+ kept.push(item);
208
+ columnsTaken.add(column);
209
+ recordEnum(enums, item, `${entity.name}.${path}`, warn);
210
+ }
211
+ const fields = [
212
+ ...kept.map((item) => item.field),
213
+ ...output.extraFields,
214
+ ];
215
+ // Inheritance --------------------------------------------------------------------------------------
216
+ const extra = inheritanceNotes(entity, fields, resolver);
217
+ // Primary key --------------------------------------------------------------------------------------
218
+ const keyMembers = entity.members.filter((member) => member.isId);
219
+ const names = keyMembers.flatMap((member) => {
220
+ const via = output.consumed.get(member.path.join('.'));
221
+ return [via ?? irFieldName(member)];
222
+ });
223
+ const keyNames = [...new Set(names)];
224
+ let compositePrimaryKey;
225
+ if (extra.primaryKeyRelation !== undefined) {
226
+ // Joined inheritance: the key is the foreign key to the parent table.
227
+ }
228
+ else if (keyNames.length === 0) {
229
+ warn(`${entity.name}: the entity has no @Id (or @EmbeddedId); other formats expect every model to have a primary key.`);
230
+ }
231
+ else if (keyNames.length > 1) {
232
+ compositePrimaryKey = keyNames;
233
+ for (const item of kept) {
234
+ if (keyNames.includes(item.field.name)) {
235
+ item.field.isPrimaryKey = false;
236
+ }
237
+ }
238
+ }
239
+ const relationItems = placed;
240
+ for (const item of relationItems) {
241
+ if (compositePrimaryKey !== undefined) {
242
+ delete item.relation.isPrimaryKey;
243
+ }
244
+ else if (keyNames.length === 1 && keyNames[0] === item.relation.name) {
245
+ item.relation.isPrimaryKey = true;
246
+ }
247
+ }
248
+ for (const item of kept) {
249
+ if (keyNames.length === 1 && keyNames[0] === item.field.name) {
250
+ item.field.isPrimaryKey = true;
251
+ }
252
+ }
253
+ // Indexes ------------------------------------------------------------------------------------------
254
+ const nameOf = new Map();
255
+ for (const field of fields) {
256
+ nameOf.set(field.columnName.toLowerCase(), field.name);
257
+ nameOf.set(field.name, field.name);
258
+ }
259
+ for (const item of relationItems) {
260
+ nameOf.set(item.relation.columnName.toLowerCase(), item.relation.name);
261
+ nameOf.set(item.relation.name, item.relation.name);
262
+ }
263
+ const naturalIds = kept
264
+ .filter((item) => item.naturalId)
265
+ .map((item) => item.field.name);
266
+ const indexResult = buildIndexes(entity, nameOf, naturalIds, warn);
267
+ for (const field of fields) {
268
+ if (indexResult.uniqueFields.has(field.name) && !field.isPrimaryKey) {
269
+ field.isUnique = true;
270
+ }
271
+ }
272
+ const indexes = indexResult.indexes;
273
+ tableNotes(entity, kept, warn);
274
+ const schema = entity.notes
275
+ .get('Table')
276
+ ?.string('schema');
277
+ const model = {
278
+ name: entity.name,
279
+ tableName: tableNameOf(entity),
280
+ appLabel: resolver.project.appLabel,
281
+ fields: [...extra.leadingFields, ...fields, ...extra.trailingFields],
282
+ relations: [
283
+ ...extra.relations,
284
+ ...relationItems
285
+ .sort((first, second) => first.order - second.order)
286
+ .map((item) => item.relation),
287
+ ],
288
+ indexes,
289
+ ...(compositePrimaryKey === undefined ? {} : { compositePrimaryKey }),
290
+ ...(output.composite.length === 0
291
+ ? {}
292
+ : { compositeForeignKeys: output.composite }),
293
+ ...(schema === undefined || schema === '' ? {} : { schema }),
294
+ };
295
+ return model;
296
+ }
297
+ //# sourceMappingURL=jpaBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpaBuild.js","sourceRoot":"","sources":["../../src/parsers/jpaBuild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Annotated, type Ann } from './jpaAnnotations.js';
2
+ import type { JavaClass, JavaType } from './javaSyntax.js';
3
+ import type { Attribute, Member, Project } from './jpaModel.js';
4
+ /** Annotations on the class itself. */
5
+ export declare function classNotes(project: Project, cls: JavaClass): Annotated;
6
+ export declare function isEntityClass(project: Project, cls: JavaClass): boolean;
7
+ export declare function isEmbeddableClass(project: Project, cls: JavaClass): boolean;
8
+ export declare function isMappedSuperclass(project: Project, cls: JavaClass): boolean;
9
+ /** Explicit `@Access`, else where the `@Id` (or `@EmbeddedId`) is written, else the access of the superclass. */
10
+ export declare function accessOf(project: Project, cls: JavaClass, inherited: 'field' | 'property'): 'field' | 'property';
11
+ /** The attributes a class declares (not the ones it inherits), by field or by getter, in source order. */
12
+ export declare function attributesOf(project: Project, cls: JavaClass, access: 'field' | 'property', warn: (message: string) => void): Attribute[];
13
+ /** Class-level `@AttributeOverride`s (they rename columns inherited from a mapped superclass or embedded id). */
14
+ export declare function classOverrides(project: Project, cls: JavaClass, warn: (message: string) => void): Map<string, Ann>;
15
+ export interface FlattenContext {
16
+ project: Project;
17
+ warn: (message: string) => void;
18
+ /** The entity (or subclass) the members are collected for. */
19
+ declaredIn: string;
20
+ /** Type arguments a subclass gives its generic superclass: `BaseEntity<Long>` makes `T` a `Long`. */
21
+ generics?: ReadonlyMap<string, JavaType>;
22
+ }
23
+ /**
24
+ * The members of one class: its attributes with the embedded ones replaced by the attributes of the embeddable
25
+ * (at any depth), each with the column override that applies.
26
+ */
27
+ export declare function membersOf(ctx: FlattenContext, cls: JavaClass, access: 'field' | 'property', path: string[], overrides: Map<string, Ann>, insideId: boolean): Member[];
@@ -0,0 +1,257 @@
1
+ import { Annotated } from './jpaAnnotations.js';
2
+ import { decapitalize, isMapType } from './jpaTypes.js';
3
+ const MAX_EMBEDDING_DEPTH = 8;
4
+ /** Annotations on the class itself. */
5
+ export function classNotes(project, cls) {
6
+ return new Annotated(cls.annotations, project.lookup, cls.imports);
7
+ }
8
+ export function isEntityClass(project, cls) {
9
+ return cls.kind === 'class' && classNotes(project, cls).has('Entity');
10
+ }
11
+ export function isEmbeddableClass(project, cls) {
12
+ return cls.kind === 'class' && classNotes(project, cls).has('Embeddable');
13
+ }
14
+ export function isMappedSuperclass(project, cls) {
15
+ return (cls.kind === 'class' && classNotes(project, cls).has('MappedSuperclass'));
16
+ }
17
+ function isStatic(modifiers) {
18
+ return modifiers.includes('static');
19
+ }
20
+ function fieldAttribute(project, cls, field) {
21
+ const attribute = {
22
+ name: field.name,
23
+ type: field.type,
24
+ notes: new Annotated(field.annotations, project.lookup, cls.imports),
25
+ declaredIn: cls.name,
26
+ imports: cls.imports,
27
+ isProperty: false,
28
+ ...(field.initializer === undefined
29
+ ? {}
30
+ : { initializer: field.initializer }),
31
+ };
32
+ return attribute;
33
+ }
34
+ /** True for `getX()` / `isX()` without parameters. */
35
+ function propertyName(method) {
36
+ if (method.parameters.length > 0 || method.returnType.name === 'void') {
37
+ return undefined;
38
+ }
39
+ const getter = method.name.match(/^get([A-Z]\w*)$/);
40
+ if (getter !== null) {
41
+ return decapitalize(getter[1] ?? '');
42
+ }
43
+ const flag = method.name.match(/^is([A-Z]\w*)$/);
44
+ if (flag !== null && /^(boolean|Boolean)$/.test(method.returnType.name)) {
45
+ return decapitalize(flag[1] ?? '');
46
+ }
47
+ return undefined;
48
+ }
49
+ /** Explicit `@Access`, else where the `@Id` (or `@EmbeddedId`) is written, else the access of the superclass. */
50
+ export function accessOf(project, cls, inherited) {
51
+ const notes = classNotes(project, cls);
52
+ const explicit = notes.get('Access')?.member('value');
53
+ if (explicit === 'PROPERTY') {
54
+ return 'property';
55
+ }
56
+ if (explicit === 'FIELD') {
57
+ return 'field';
58
+ }
59
+ const idNames = ['Id', 'EmbeddedId'];
60
+ const onField = cls.fields.some((field) => !isStatic(field.modifiers) &&
61
+ field.annotations.some((annotation) => idNames.includes(annotation.name)));
62
+ if (onField) {
63
+ return 'field';
64
+ }
65
+ const onMethod = cls.methods.some((method) => method.annotations.some((annotation) => idNames.includes(annotation.name)));
66
+ return onMethod ? 'property' : inherited;
67
+ }
68
+ /** The attributes a class declares (not the ones it inherits), by field or by getter, in source order. */
69
+ export function attributesOf(project, cls, access, warn) {
70
+ const attributes = [];
71
+ const persistence = new Set([
72
+ 'Column',
73
+ 'Id',
74
+ 'ManyToOne',
75
+ 'OneToMany',
76
+ 'OneToOne',
77
+ 'ManyToMany',
78
+ 'Embedded',
79
+ 'ElementCollection',
80
+ 'Enumerated',
81
+ ]);
82
+ if (access === 'field') {
83
+ for (const field of cls.fields) {
84
+ const keywords = field.modifiers;
85
+ if (isStatic(keywords) || keywords.includes('transient')) {
86
+ continue;
87
+ }
88
+ const attribute = fieldAttribute(project, cls, field);
89
+ if (attribute.notes.has('Transient')) {
90
+ continue;
91
+ }
92
+ attributes.push(attribute);
93
+ }
94
+ for (const method of cls.methods) {
95
+ if (method.annotations.some((item) => item.name === 'Access')) {
96
+ warn(`${cls.name}.${method.name}: an attribute switched to property access with @Access is not read; annotate the field instead.`);
97
+ }
98
+ }
99
+ return attributes;
100
+ }
101
+ for (const method of cls.methods) {
102
+ const name = propertyName(method);
103
+ if (name === undefined || isStatic(method.modifiers)) {
104
+ continue;
105
+ }
106
+ const attribute = {
107
+ name,
108
+ type: method.returnType,
109
+ notes: new Annotated(method.annotations, project.lookup, cls.imports),
110
+ declaredIn: cls.name,
111
+ imports: cls.imports,
112
+ isProperty: true,
113
+ };
114
+ if (attribute.notes.has('Transient')) {
115
+ continue;
116
+ }
117
+ attributes.push(attribute);
118
+ }
119
+ for (const field of cls.fields) {
120
+ if (field.annotations.some((annotation) => persistence.has(annotation.name))) {
121
+ warn(`${cls.name}.${field.name}: the annotations on a field are ignored because the class uses property access (the @Id is on a getter or @Access(PROPERTY) is set); put them on the getter.`);
122
+ }
123
+ }
124
+ return attributes;
125
+ }
126
+ const RELATION_ANNOTATIONS = [
127
+ 'ManyToOne',
128
+ 'OneToOne',
129
+ 'OneToMany',
130
+ 'ManyToMany',
131
+ ];
132
+ /** How an attribute is mapped: a column, a relationship, or an element collection; embedded ones are flattened. */
133
+ function kindOf(attribute) {
134
+ const notes = attribute.notes;
135
+ if (RELATION_ANNOTATIONS.some((name) => notes.has(name))) {
136
+ return 'relation';
137
+ }
138
+ if (notes.has('ElementCollection')) {
139
+ return 'collection';
140
+ }
141
+ if (notes.has('Embedded') || notes.has('EmbeddedId')) {
142
+ return 'embedded';
143
+ }
144
+ return 'basic';
145
+ }
146
+ /** `@AttributeOverride(s)` of an attribute or class by the path they name. */
147
+ function overridesOf(notes, into, warn, place) {
148
+ for (const override of notes.repeated('AttributeOverride', 'AttributeOverrides')) {
149
+ const name = override.string('name');
150
+ const column = override.annotation('column');
151
+ if (name !== undefined && column !== undefined && !into.has(name)) {
152
+ into.set(name, column);
153
+ }
154
+ }
155
+ if (notes.repeated('AssociationOverride', 'AssociationOverrides').length > 0) {
156
+ warn(`${place}: @AssociationOverride is not applied; the join columns of the embedded relationship keep their default names.`);
157
+ }
158
+ }
159
+ /** Class-level `@AttributeOverride`s (they rename columns inherited from a mapped superclass or embedded id). */
160
+ export function classOverrides(project, cls, warn) {
161
+ const overrides = new Map();
162
+ overridesOf(classNotes(project, cls), overrides, warn, cls.name);
163
+ return overrides;
164
+ }
165
+ /** Replaces the type parameters of a generic superclass by the arguments a subclass gave it. */
166
+ function substitute(type, generics) {
167
+ if (generics === undefined || generics.size === 0) {
168
+ return type;
169
+ }
170
+ const replacement = generics.get(type.name);
171
+ const args = type.args.map((item) => substitute(item, generics));
172
+ if (replacement !== undefined && type.args.length === 0) {
173
+ return {
174
+ ...replacement,
175
+ arrayDepth: replacement.arrayDepth + type.arrayDepth,
176
+ };
177
+ }
178
+ return { ...type, args };
179
+ }
180
+ /**
181
+ * The members of one class: its attributes with the embedded ones replaced by the attributes of the embeddable
182
+ * (at any depth), each with the column override that applies.
183
+ */
184
+ export function membersOf(ctx, cls, access, path, overrides, insideId) {
185
+ const members = [];
186
+ const attributes = attributesOf(ctx.project, cls, access, ctx.warn).map((attribute) => ({
187
+ ...attribute,
188
+ type: substitute(attribute.type, ctx.generics),
189
+ }));
190
+ for (const attribute of attributes) {
191
+ const place = `${ctx.declaredIn}.${[...path, attribute.name].join('.')}`;
192
+ if (attribute.notes.has('Formula', true)) {
193
+ ctx.warn(`${place}: @Formula is computed in queries, not stored in a column; the attribute was skipped.`);
194
+ continue;
195
+ }
196
+ if (attribute.notes.has('ManyToAny') ||
197
+ attribute.notes.has('Any') ||
198
+ attribute.notes.has('Any', true)) {
199
+ ctx.warn(`${place}: @Any / @ManyToAny polymorphic associations have no equivalent; the attribute was skipped.`);
200
+ continue;
201
+ }
202
+ const kind = kindOf(attribute);
203
+ const target = ctx.project.classes.get(attribute.type.name);
204
+ const isEmbeddedType = kind === 'basic' &&
205
+ attribute.type.arrayDepth === 0 &&
206
+ target !== undefined &&
207
+ isEmbeddableClass(ctx.project, target);
208
+ if (kind === 'embedded' || isEmbeddedType) {
209
+ const idRole = attribute.notes.has('EmbeddedId');
210
+ if (target === undefined || path.length >= MAX_EMBEDDING_DEPTH) {
211
+ ctx.warn(`${place}: the embedded type ${attribute.type.name} is not in the input (or is nested too deeply); its columns were not read.`);
212
+ continue;
213
+ }
214
+ const nested = new Map();
215
+ overridesOf(attribute.notes, nested, ctx.warn, place);
216
+ for (const [name, column] of overrides) {
217
+ if (name.startsWith(`${attribute.name}.`)) {
218
+ nested.set(name.slice(attribute.name.length + 1), column);
219
+ }
220
+ }
221
+ members.push(...membersOf(ctx, target, embeddableAccess(ctx.project, target, access), [...path, attribute.name], nested, insideId || idRole));
222
+ continue;
223
+ }
224
+ if (attribute.type.name === 'Optional') {
225
+ ctx.warn(`${place}: JPA does not allow Optional on a field or getter (Hibernate rejects it); use a nullable type. The attribute was skipped.`);
226
+ continue;
227
+ }
228
+ const memberKind = kind;
229
+ if (memberKind === 'basic' &&
230
+ isMapType(attribute.type) &&
231
+ !attribute.notes.has('JdbcTypeCode', true) &&
232
+ !attribute.notes.has('Type', true)) {
233
+ ctx.warn(`${place}: a Map attribute without @ElementCollection or a JSON type has no column mapping; the attribute was skipped.`);
234
+ continue;
235
+ }
236
+ const own = attribute.notes.get('Column');
237
+ const override = overrides.get(attribute.name);
238
+ members.push({
239
+ attr: attribute,
240
+ path: [...path, attribute.name],
241
+ kind: memberKind,
242
+ ...(override === undefined && own === undefined
243
+ ? {}
244
+ : { column: override ?? own }),
245
+ isId: attribute.notes.has('Id') || insideId,
246
+ inEmbeddedId: insideId,
247
+ declaredIn: ctx.declaredIn,
248
+ });
249
+ }
250
+ return members;
251
+ }
252
+ /** An embeddable follows the access type of the entity that embeds it unless it says otherwise. */
253
+ function embeddableAccess(project, cls, inherited) {
254
+ const notes = classNotes(project, cls);
255
+ return notes.has('Access') ? accessOf(project, cls, inherited) : inherited;
256
+ }
257
+ //# sourceMappingURL=jpaClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpaClasses.js","sourceRoot":"","sources":["../../src/parsers/jpaClasses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { IrEnum, IrModel } from '../ir.js';
2
+ import type { EntityInfo, Member, Project } from './jpaModel.js';
3
+ import type { Resolver } from './jpaJoins.js';
4
+ export interface CollectionTable {
5
+ model: IrModel;
6
+ enumDefinition?: IrEnum;
7
+ }
8
+ /**
9
+ * Reads an `@ElementCollection` of basic values (`List<String>`, `Set<Role>`) as the child table Hibernate creates:
10
+ * the owner's key as a foreign key plus the value column. Collections of embeddables and maps are skipped.
11
+ */
12
+ export declare function buildCollection(owner: EntityInfo, member: Member, project: Project, resolver: Resolver, taken: ReadonlySet<string>): CollectionTable | undefined;