ormbridge 0.12.0 → 0.13.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.
@@ -0,0 +1,584 @@
1
+ import { annotation } from './jpaFormat.js';
2
+ import { planEnums, renderEnumBody } from './jpaEnums.js';
3
+ import { attributeNameOf, capitalize, classNameOf, DEFAULT_JPA_PACKAGE, javaString, RESERVED_TYPE_NAMES, uniqueName, } from './jpaNames.js';
4
+ import { renderFile } from './jpaRender.js';
5
+ import { Imports } from './jpaTypes.js';
6
+ import { collectEdges, defaultReverseName, } from './neo4jEdges.js';
7
+ import { buildGraph, primaryKeyNamesOf, referencedField, } from './neo4jGraph.js';
8
+ import { labelOf, oneLine } from './neo4jNames.js';
9
+ import { javaTypeOf, RESERVED_SDN_TYPES } from './sdnTypes.js';
10
+ import { formatAnnotation } from './jpaFormat.js';
11
+ /**
12
+ * Spring Data Neo4j writer (Java, SDN 7 with Spring Boot 3).
13
+ *
14
+ * Writes one `@Node("Label")` class per node label, a Java `enum` per enum (with a
15
+ * `Neo4jPersistentPropertyConverter` when the stored values differ from the constant names), and a
16
+ * `@RelationshipProperties` class for every direction of a join table that has extra columns. Properties
17
+ * whose graph key differs from the Java name carry `@Property`. Relationships are `@Relationship` fields with
18
+ * the type and the direction, a single value or a `List`. Labels and relationship types are the ones of the
19
+ * Cypher writer, so the three Neo4j outputs agree. Foreign key columns stay as plain properties.
20
+ *
21
+ * The identifier follows the source key: a generated integer is Neo4j's internal id (`@GeneratedValue`), a
22
+ * generated UUID a `UUIDStringGenerator` string, any other single column an assigned `@Id`; a composite or
23
+ * missing key becomes a generated internal id `graphId` and the key columns are plain properties.
24
+ */
25
+ export { isValidJavaPackage } from './jpaNames.js';
26
+ export const DEFAULT_SDN_PACKAGE = DEFAULT_JPA_PACKAGE;
27
+ const INDENT = ' ';
28
+ const SCHEMA_PACKAGE = 'org.springframework.data.neo4j.core.schema';
29
+ const CONVERT_PACKAGE = 'org.springframework.data.neo4j.core.convert';
30
+ export function emitSdn(schema, options) {
31
+ const warnings = schemaWarnings(schema);
32
+ if (schema.models.length === 0) {
33
+ return { files: {}, warnings };
34
+ }
35
+ const graph = buildGraph(schema, {
36
+ camelFields: options.camelFields,
37
+ omitWarnings: { defaults: true, autoIncrement: true },
38
+ }, warnings);
39
+ const edges = collectEdges(schema, graph, warnings);
40
+ const packageName = options.packageName ?? DEFAULT_SDN_PACKAGE;
41
+ const files = {};
42
+ const layout = { packageName, header: options.header !== false };
43
+ const typeNames = new Set([
44
+ ...RESERVED_TYPE_NAMES,
45
+ ...RESERVED_SDN_TYPES,
46
+ ]);
47
+ const enums = planEnums(schema, typeNames, (message) => {
48
+ warnings.push(message);
49
+ });
50
+ for (const plan of enums.values()) {
51
+ if (plan.storage === 'ordinal') {
52
+ // Neo4j has no ordinal mapping; the number is stored through a converter like any other value.
53
+ plan.storage = 'converter';
54
+ plan.converterName = uniqueName(`${plan.typeName}Converter`, typeNames);
55
+ }
56
+ }
57
+ const nodes = graph.nodes.map((node) => {
58
+ const raw = classNameOf(node.label);
59
+ const className = uniqueName(RESERVED_TYPE_NAMES.has(raw) || RESERVED_SDN_TYPES.includes(raw)
60
+ ? `${raw}Entity`
61
+ : raw, typeNames);
62
+ if (className !== node.label) {
63
+ warnings.push(`${node.model.name}: "${node.label}" is a name the generated code uses or another type has, so the class was named "${className}"; @Node keeps the label ${node.label}.`);
64
+ }
65
+ return {
66
+ node,
67
+ className,
68
+ imports: new Imports('jakarta'),
69
+ used: new Set(),
70
+ fields: [],
71
+ doc: [],
72
+ annotations: [],
73
+ attributes: new Map(),
74
+ };
75
+ });
76
+ const byLabel = new Map(nodes.map((plan) => [plan.node.label, plan]));
77
+ for (const plan of nodes) {
78
+ addProperties(plan, schema, enums, warnings);
79
+ }
80
+ const extraClasses = [];
81
+ for (const edge of edges) {
82
+ addEdge(edge, byLabel, typeNames, extraClasses, schema, enums, warnings);
83
+ }
84
+ for (const plan of [...nodes, ...extraClasses]) {
85
+ files[pathOf(packageName, plan.className)] = renderClass(plan, layout);
86
+ }
87
+ for (const plan of enums.values()) {
88
+ const body = renderEnumBody(plan);
89
+ files[pathOf(packageName, plan.typeName)] = renderFile(layout, new Imports('jakarta'), body);
90
+ if (plan.storage === 'converter') {
91
+ files[pathOf(packageName, plan.converterName)] = renderFile(layout, ...converterFile(plan));
92
+ }
93
+ }
94
+ return { files, warnings: [...new Set(warnings)] };
95
+ }
96
+ function pathOf(packageName, className) {
97
+ return `${packageName.replace(/\./g, '/')}/${className}.java`;
98
+ }
99
+ function schemaWarnings(schema) {
100
+ const warnings = [];
101
+ for (const enumDefinition of schema.enums) {
102
+ if (enumDefinition.schema !== undefined) {
103
+ warnings.push(`enum ${enumDefinition.name}: the database schema "${enumDefinition.schema}" (@@schema) was ignored.`);
104
+ }
105
+ }
106
+ for (const model of schema.models) {
107
+ if (model.isView === true) {
108
+ warnings.push(`${model.name}: this is a database view; it was written as a node class like any other model.`);
109
+ }
110
+ if (model.schema !== undefined) {
111
+ warnings.push(`${model.name}: the database schema "${model.schema}" (@@schema) was ignored.`);
112
+ }
113
+ }
114
+ return warnings;
115
+ }
116
+ // ---------------------------------------------------------------------------
117
+ // Properties, identifier, constraints
118
+ // ---------------------------------------------------------------------------
119
+ function fieldOf(model, property) {
120
+ return model.fields.find((candidate) => candidate.name === property.irName);
121
+ }
122
+ function resolveKeys(node, names) {
123
+ const keys = [];
124
+ for (const name of names) {
125
+ const key = node.keys.get(name);
126
+ if (key === undefined) {
127
+ return undefined;
128
+ }
129
+ keys.push(key);
130
+ }
131
+ return keys;
132
+ }
133
+ /** How the identifier is written, from the primary key of the model. */
134
+ function planId(node, warnings) {
135
+ const model = node.model;
136
+ const names = primaryKeyNamesOf(model);
137
+ const keys = resolveKeys(node, names);
138
+ const where = model.name;
139
+ if (names.length === 0 || keys === undefined) {
140
+ if (names.length > 0) {
141
+ warnings.push(`${where}: the primary key (${names.join(', ')}) names a column that does not exist, so it was dropped.`);
142
+ }
143
+ warnings.push(`${where}: the model has no usable primary key; the node has a generated internal id (graphId) and no identifier property of the source.`);
144
+ return { kind: 'synthetic' };
145
+ }
146
+ if (keys.length > 1) {
147
+ warnings.push(`${where}: Spring Data Neo4j has no composite identifier, so the composite primary key (${keys.join(', ')}) was written as plain properties and the node has a generated internal id (graphId).`);
148
+ return { kind: 'synthetic' };
149
+ }
150
+ const property = node.properties.find((candidate) => candidate.key === keys[0]);
151
+ const field = property === undefined ? undefined : fieldOf(model, property);
152
+ if (property === undefined || field === undefined) {
153
+ warnings.push(`${where}: the primary key is a relationship, which Spring Data Neo4j cannot use as an identifier; the node has a generated internal id (graphId).`);
154
+ return { kind: 'synthetic' };
155
+ }
156
+ if (field.default?.kind === 'autoIncrement' &&
157
+ (field.type === 'int' || field.type === 'bigInt')) {
158
+ warnings.push(`${where}.${field.name}: the generated integer key became Neo4j's internal node id (@Id @GeneratedValue Long); it is not stored as a property named ${property.key}, so data loaded with that property is not found by it, and the internal id can change when the database is rebuilt. Spring Data Neo4j 7 also logs a deprecation warning for internal Long ids; a UUID key (UUIDStringGenerator) avoids all of this.`);
159
+ return { kind: 'internal', property };
160
+ }
161
+ if (field.type === 'uuid' && field.default?.kind === 'uuid') {
162
+ return { kind: 'uuid', property };
163
+ }
164
+ return { kind: 'assigned', property };
165
+ }
166
+ function describeDefaultDrop(warnings, label, what) {
167
+ warnings.push(`${label}: ${what} has no Spring Data Neo4j equivalent and was dropped; set the value when you create the node.`);
168
+ }
169
+ /** A Java initializer for the defaults a field can carry, or undefined (with a warning) when there is none. */
170
+ function initializerOf(field, type, enumPlan, label, warnings) {
171
+ const value = field.default;
172
+ if (value === undefined) {
173
+ return undefined;
174
+ }
175
+ switch (value.kind) {
176
+ case 'literal': {
177
+ if (field.arrayDepth !== undefined) {
178
+ describeDefaultDrop(warnings, label, 'the default of an array');
179
+ return undefined;
180
+ }
181
+ const literal = value.value;
182
+ if (type === 'String' && typeof literal !== 'boolean') {
183
+ return javaString(String(literal));
184
+ }
185
+ if (type === 'Boolean' && typeof literal === 'boolean') {
186
+ return literal ? 'true' : 'false';
187
+ }
188
+ if (type === 'Integer' && Number.isInteger(literal)) {
189
+ return String(literal);
190
+ }
191
+ if (type === 'Long' && Number.isInteger(literal)) {
192
+ return `${String(literal)}L`;
193
+ }
194
+ if (type === 'Double' && typeof literal === 'number') {
195
+ return /^-?\d+$/.test(String(literal))
196
+ ? `${String(literal)}.0`
197
+ : String(literal);
198
+ }
199
+ describeDefaultDrop(warnings, label, `the default ${JSON.stringify(literal)}`);
200
+ return undefined;
201
+ }
202
+ case 'enumValue': {
203
+ const member = enumPlan?.members.get(value.value);
204
+ if (enumPlan !== undefined && member !== undefined) {
205
+ return `${enumPlan.typeName}.${member}`;
206
+ }
207
+ describeDefaultDrop(warnings, label, `the default "${value.value}"`);
208
+ return undefined;
209
+ }
210
+ case 'autoIncrement':
211
+ warnings.push(`${label}: auto-increment has no Spring Data Neo4j equivalent; supply the value yourself (a UUID key with UUIDStringGenerator needs none).`);
212
+ return undefined;
213
+ case 'now':
214
+ describeDefaultDrop(warnings, label, 'the default of the current time');
215
+ return undefined;
216
+ case 'uuid':
217
+ describeDefaultDrop(warnings, label, 'the default of a generated UUID');
218
+ return undefined;
219
+ case 'clientGenerated':
220
+ describeDefaultDrop(warnings, label, `the ${value.generator}() default`);
221
+ return undefined;
222
+ case 'dbExpression':
223
+ describeDefaultDrop(warnings, label, `the database default ${oneLine(value.expression)}`);
224
+ return undefined;
225
+ }
226
+ }
227
+ /** The Java type, converter annotation and initializer of a column property. */
228
+ function columnField(plan, schema, enums, model, property, name, warnings, skipDefault = false) {
229
+ const field = fieldOf(model, property);
230
+ const label = `${model.name}.${property.irName}`;
231
+ const annotations = [];
232
+ let type;
233
+ let enumPlan;
234
+ if (field === undefined) {
235
+ // A foreign key column: typed like the column it references.
236
+ const relation = model.relations.find((candidate) => candidate.name === property.irName);
237
+ const referenced = relation === undefined ? undefined : referencedField(schema, relation);
238
+ type = javaTypeOf(referenced === undefined
239
+ ? {
240
+ name: 'key',
241
+ columnName: 'key',
242
+ type: 'int',
243
+ isPrimaryKey: false,
244
+ isUnique: false,
245
+ isNullable: false,
246
+ isAutoUpdated: false,
247
+ }
248
+ : { ...referenced, arrayDepth: undefined, enumName: undefined }, plan.imports);
249
+ }
250
+ else {
251
+ enumPlan =
252
+ field.enumName === undefined ? undefined : enums.get(field.enumName);
253
+ if (enumPlan !== undefined) {
254
+ const isArray = field.arrayDepth !== undefined;
255
+ if (enumPlan.storage === 'converter' && isArray) {
256
+ warnings.push(`${label}: Spring Data Neo4j converts a whole property, not the items of a list, so the array of enum ${enumPlan.typeName} values is a List<String> of the stored values.`);
257
+ type = `${plan.imports.use('java.util.List')}<String>`;
258
+ enumPlan = undefined;
259
+ }
260
+ else {
261
+ type = isArray
262
+ ? `${plan.imports.use('java.util.List')}<${enumPlan.typeName}>`
263
+ : enumPlan.typeName;
264
+ if (enumPlan.storage === 'converter' && !isArray) {
265
+ annotations.push(annotation(plan.imports.use(`${CONVERT_PACKAGE}.ConvertWith`), [
266
+ ['converter', `${enumPlan.converterName}.class`],
267
+ ]));
268
+ }
269
+ }
270
+ }
271
+ else {
272
+ type = javaTypeOf(field, plan.imports);
273
+ }
274
+ }
275
+ const initializer = field === undefined || skipDefault
276
+ ? undefined
277
+ : initializerOf(field, type, enumPlan, label, warnings);
278
+ return {
279
+ name,
280
+ type,
281
+ annotations,
282
+ ...(initializer === undefined ? {} : { initializer }),
283
+ };
284
+ }
285
+ function propertyAnnotation(plan, key, name) {
286
+ return key === name
287
+ ? []
288
+ : [
289
+ annotation(plan.imports.use(`${SCHEMA_PACKAGE}.Property`), [
290
+ [undefined, javaString(key)],
291
+ ]),
292
+ ];
293
+ }
294
+ function claim(plan, raw, where, warnings) {
295
+ const wanted = attributeNameOf(raw);
296
+ const name = uniqueName(wanted, plan.used);
297
+ if (name !== wanted) {
298
+ warnings.push(`${where}: "${wanted}" is taken in ${plan.className}, so the field was named "${name}".`);
299
+ }
300
+ return name;
301
+ }
302
+ function addProperties(plan, schema, enums, warnings) {
303
+ const node = plan.node;
304
+ const model = node.model;
305
+ const id = planId(node, warnings);
306
+ plan.annotations.push(annotation(plan.imports.use(`${SCHEMA_PACKAGE}.Node`), [
307
+ [undefined, javaString(node.label)],
308
+ ]));
309
+ const doc = [
310
+ `Model ${oneLine(model.name)} (table ${oneLine(model.tableName)}), the node label ${oneLine(node.label)}.`,
311
+ ];
312
+ const required = [];
313
+ const constraints = [];
314
+ const keysOfIndexes = [];
315
+ for (const field of model.fields) {
316
+ const key = node.keys.get(field.name);
317
+ if (field.isUnique && key !== undefined) {
318
+ constraints.push(key);
319
+ }
320
+ }
321
+ for (const relation of model.relations) {
322
+ const key = node.keys.get(relation.name);
323
+ if (relation.kind === 'oneToOne' && key !== undefined) {
324
+ constraints.push(key);
325
+ }
326
+ }
327
+ const keyNames = primaryKeyNamesOf(model);
328
+ if (keyNames.length > 0 && id.kind !== 'internal') {
329
+ const keys = resolveKeys(node, keyNames);
330
+ if (keys !== undefined) {
331
+ constraints.unshift(keys.join(' + '));
332
+ }
333
+ }
334
+ for (const index of model.indexes) {
335
+ const keys = resolveKeys(node, index.fields);
336
+ if (keys === undefined || keys.length === 0) {
337
+ warnings.push(`${model.name} index (${index.fields.join(', ')}): it names a column that does not exist and was dropped.`);
338
+ continue;
339
+ }
340
+ if (index.method !== undefined && index.method.toLowerCase() !== 'btree') {
341
+ warnings.push(`${model.name} index (${index.fields.join(', ')}): Neo4j has no ${index.method} index method; the index was dropped.`);
342
+ continue;
343
+ }
344
+ if (index.isUnique && index.kind !== 'fulltext') {
345
+ constraints.push(keys.join(' + '));
346
+ }
347
+ else {
348
+ keysOfIndexes.push(keys.join(' + '));
349
+ }
350
+ }
351
+ if (id.kind === 'synthetic') {
352
+ const name = claim(plan, 'graphId', `${model.name}.graphId`, warnings);
353
+ plan.fields.push({
354
+ name,
355
+ type: 'Long',
356
+ annotations: [
357
+ annotation(plan.imports.use(`${SCHEMA_PACKAGE}.Id`)),
358
+ annotation(plan.imports.use(`${SCHEMA_PACKAGE}.GeneratedValue`)),
359
+ ],
360
+ });
361
+ }
362
+ for (const property of node.properties) {
363
+ const name = claim(plan, property.key, `${model.name}.${property.irName}`, warnings);
364
+ plan.attributes.set(property.key, name);
365
+ const column = columnField(plan, schema, enums, model, property, name, warnings, id.property === property);
366
+ const isId = id.property === property;
367
+ if (isId) {
368
+ column.annotations.unshift(annotation(plan.imports.use(`${SCHEMA_PACKAGE}.Id`)));
369
+ if (id.kind === 'internal') {
370
+ column.type = 'Long';
371
+ delete column.initializer;
372
+ column.annotations.push(annotation(plan.imports.use(`${SCHEMA_PACKAGE}.GeneratedValue`)));
373
+ }
374
+ else if (id.kind === 'uuid') {
375
+ column.type = 'String';
376
+ column.annotations.push(annotation(plan.imports.use(`${SCHEMA_PACKAGE}.GeneratedValue`), [
377
+ [
378
+ undefined,
379
+ `${plan.imports.use('org.springframework.data.neo4j.core.support.UUIDStringGenerator')}.class`,
380
+ ],
381
+ ]));
382
+ }
383
+ }
384
+ if (isId && id.kind === 'internal') {
385
+ // The key is Neo4j's internal id: it is not a stored property, so there is no @Property.
386
+ }
387
+ else {
388
+ column.annotations.push(...propertyAnnotation(plan, property.key, name));
389
+ }
390
+ if (property.required && !isId) {
391
+ required.push(property.key);
392
+ }
393
+ plan.fields.push(column);
394
+ }
395
+ if (required.length > 0) {
396
+ doc.push(`Required properties: ${required.join(', ')}.`);
397
+ }
398
+ if (constraints.length > 0 || keysOfIndexes.length > 0) {
399
+ const parts = [];
400
+ if (constraints.length > 0) {
401
+ parts.push(`unique (${[...new Set(constraints)].join('; ')})`);
402
+ }
403
+ if (keysOfIndexes.length > 0) {
404
+ parts.push(`indexed (${[...new Set(keysOfIndexes)].join('; ')})`);
405
+ }
406
+ doc.push(`Spring Data Neo4j creates no constraints or indexes; create them with the Cypher writer (--to neo4j). Declared in the source: ${parts.join(' and ')}.`);
407
+ warnings.push(`${model.name}: Spring Data Neo4j creates no constraints or indexes, so the constraints and indexes of the source (${parts.join(' and ')}) were not written; create them with --to neo4j.`);
408
+ }
409
+ plan.doc = doc;
410
+ }
411
+ // ---------------------------------------------------------------------------
412
+ // Relationships
413
+ // ---------------------------------------------------------------------------
414
+ function pattern(edge) {
415
+ return `(:${edge.source.label})-[:${edge.type}]->(:${edge.target.label})`;
416
+ }
417
+ function edgeWarning(edge) {
418
+ const where = `${edge.source.model.name}.${edge.name}`;
419
+ switch (edge.kind) {
420
+ case 'manyToMany':
421
+ return `${where}: the many-to-many relation to ${edge.target.model.name} became the relationship ${pattern(edge)}; no join node is created.`;
422
+ case 'join':
423
+ return `${edge.join?.model.name ?? where}: the join table became the relationship ${pattern(edge)} instead of a node class.`;
424
+ default: {
425
+ const keys = (edge.composite?.fields ?? [edge.relation?.name ?? edge.name])
426
+ .map((name) => edge.source.keys.get(name) ?? name)
427
+ .join(', ');
428
+ const many = keys.includes(',');
429
+ return `${where}: the foreign key to ${edge.target.model.name} became the relationship ${pattern(edge)}; Spring Data Neo4j does not enforce the on delete action (${edge.onDelete ?? 'noAction'}), and ${keys} ${many ? 'were kept as plain properties' : 'was kept as a plain property'} that nothing ties to the relationship.`;
430
+ }
431
+ }
432
+ }
433
+ function relationshipAnnotation(plan, edge, direction) {
434
+ const relationship = plan.imports.use(`${SCHEMA_PACKAGE}.Relationship`);
435
+ return annotation(relationship, [
436
+ ['type', javaString(edge.type)],
437
+ ['direction', `${relationship}.Direction.${direction}`],
438
+ ]);
439
+ }
440
+ /** Writes the `@RelationshipProperties` class that holds the columns of a join table, towards `target`. */
441
+ function propertiesClass(edge, join, target, typeNames, schema, enums, warnings) {
442
+ const className = uniqueName(`${classNameOf(labelOf(join.model.name))}${target.className}`, typeNames);
443
+ const plan = {
444
+ className,
445
+ imports: new Imports('jakarta'),
446
+ used: new Set(),
447
+ fields: [],
448
+ doc: [
449
+ `Properties of the relationship ${oneLine(edge.type)} that the join table ${oneLine(join.model.name)} stored, towards ${oneLine(target.node.label)}.`,
450
+ ],
451
+ annotations: [],
452
+ };
453
+ plan.annotations.push(annotation(plan.imports.use(`${SCHEMA_PACKAGE}.RelationshipProperties`)));
454
+ const idName = claim(plan, 'id', `${join.model.name}.id`, warnings);
455
+ plan.fields.push({
456
+ name: idName,
457
+ type: 'Long',
458
+ annotations: [
459
+ annotation(plan.imports.use(`${SCHEMA_PACKAGE}.RelationshipId`)),
460
+ ],
461
+ });
462
+ for (const property of join.extras) {
463
+ const name = claim(plan, property.key, `${join.model.name}.${property.irName}`, warnings);
464
+ const column = columnField(plan, schema, enums, join.model, property, name, warnings);
465
+ column.annotations.push(...propertyAnnotation(plan, property.key, name));
466
+ plan.fields.push(column);
467
+ }
468
+ const targetName = claim(plan, target.className.charAt(0).toLowerCase() + target.className.slice(1), `${join.model.name}.${target.className}`, warnings);
469
+ plan.fields.push({
470
+ name: targetName,
471
+ type: target.className,
472
+ annotations: [annotation(plan.imports.use(`${SCHEMA_PACKAGE}.TargetNode`))],
473
+ });
474
+ return plan;
475
+ }
476
+ function addEdge(edge, byLabel, typeNames, extraClasses, schema, enums, warnings) {
477
+ const source = byLabel.get(edge.source.label);
478
+ const target = byLabel.get(edge.target.label);
479
+ if (source === undefined || target === undefined) {
480
+ return;
481
+ }
482
+ warnings.push(edgeWarning(edge));
483
+ let toTarget = target.className;
484
+ let toSource = source.className;
485
+ if (edge.join !== undefined && edge.properties.length > 0) {
486
+ const forward = propertiesClass(edge, edge.join, target, typeNames, schema, enums, warnings);
487
+ const backward = propertiesClass(edge, edge.join, source, typeNames, schema, enums, warnings);
488
+ extraClasses.push(forward, backward);
489
+ toTarget = forward.className;
490
+ toSource = backward.className;
491
+ }
492
+ const addField = (plan, raw, elementType, many, direction) => {
493
+ const name = claim(plan, raw, `${plan.node.model.name}.${raw}`, warnings);
494
+ const list = plan.imports.use('java.util.List');
495
+ plan.fields.push({
496
+ name,
497
+ type: many ? `${list}<${elementType}>` : elementType,
498
+ annotations: [relationshipAnnotation(plan, edge, direction)],
499
+ ...(many
500
+ ? { initializer: `new ${plan.imports.use('java.util.ArrayList')}<>()` }
501
+ : {}),
502
+ });
503
+ };
504
+ addField(source, edge.name, toTarget, edge.outgoing === 'zeroOrMore' || edge.outgoing === 'oneOrMore', 'OUTGOING');
505
+ addField(target, edge.reverseName ?? defaultReverseName(edge), toSource, edge.incoming === 'zeroOrMore' || edge.incoming === 'oneOrMore', 'INCOMING');
506
+ }
507
+ // ---------------------------------------------------------------------------
508
+ // Text
509
+ // ---------------------------------------------------------------------------
510
+ function converterFile(plan) {
511
+ const imports = new Imports('jakarta');
512
+ const base = imports.use(`${CONVERT_PACKAGE}.Neo4jPersistentPropertyConverter`);
513
+ const value = imports.use('org.neo4j.driver.Value');
514
+ const values = imports.use('org.neo4j.driver.Values');
515
+ const type = plan.typeName;
516
+ const read = plan.numeric ? 'source.asInt()' : 'source.asString()';
517
+ const compare = plan.numeric
518
+ ? 'item.getValue() == stored'
519
+ : 'item.getValue().equals(stored)';
520
+ const stored = plan.numeric ? 'int' : 'String';
521
+ const lines = [
522
+ `public class ${plan.converterName} implements ${base}<${type}> {`,
523
+ ' @Override',
524
+ ` public ${value} write(${type} source) {`,
525
+ ` return source == null ? ${values}.NULL : ${values}.value(source.getValue());`,
526
+ ' }',
527
+ '',
528
+ ' @Override',
529
+ ` public ${type} read(${value} source) {`,
530
+ ' if (source == null || source.isNull()) {',
531
+ ' return null;',
532
+ ' }',
533
+ ` ${stored} stored = ${read};`,
534
+ ` for (${type} item : ${type}.values()) {`,
535
+ ` if (${compare}) {`,
536
+ ' return item;',
537
+ ' }',
538
+ ' }',
539
+ ` throw new IllegalArgumentException("Unknown ${type} value: " + stored);`,
540
+ ' }',
541
+ '}',
542
+ ];
543
+ return [imports, lines];
544
+ }
545
+ function accessors(field) {
546
+ return [
547
+ `${INDENT}public ${field.type} get${capitalize(field.name)}() {`,
548
+ `${INDENT}${INDENT}return ${field.name};`,
549
+ `${INDENT}}`,
550
+ '',
551
+ `${INDENT}public void set${capitalize(field.name)}(${field.type} ${field.name}) {`,
552
+ `${INDENT}${INDENT}this.${field.name} = ${field.name};`,
553
+ `${INDENT}}`,
554
+ ];
555
+ }
556
+ function renderClass(plan, layout) {
557
+ const body = [];
558
+ if (plan.doc.length > 0) {
559
+ body.push('/**');
560
+ for (const line of plan.doc) {
561
+ body.push(` * ${line.replace(/\*\//g, '* /')}`);
562
+ }
563
+ body.push(' */');
564
+ }
565
+ for (const node of plan.annotations) {
566
+ body.push(...formatAnnotation(node, 0));
567
+ }
568
+ body.push(`public class ${plan.className} {`);
569
+ plan.fields.forEach((field, position) => {
570
+ if (position > 0) {
571
+ body.push('');
572
+ }
573
+ for (const node of field.annotations) {
574
+ body.push(...formatAnnotation(node, INDENT.length));
575
+ }
576
+ body.push(`${INDENT}private ${field.type} ${field.name}${field.initializer === undefined ? '' : ` = ${field.initializer}`};`);
577
+ });
578
+ for (const field of plan.fields) {
579
+ body.push('', ...accessors(field));
580
+ }
581
+ body.push('}');
582
+ return renderFile(layout, plan.imports, body);
583
+ }
584
+ //# sourceMappingURL=sdn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdn.js","sourceRoot":"","sources":["../../src/emitters/sdn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { IrField } from '../ir.js';
2
+ import type { Imports } from './jpaTypes.js';
3
+ /** The Java types of the Spring Data Neo4j writer, chosen from the Neo4j type the Cypher writer documents. */
4
+ declare const RESERVED_SDN_TYPES: readonly string[];
5
+ export { RESERVED_SDN_TYPES };
6
+ /** The Java type of a field: the scalar, or `List<scalar>` for a one-dimensional array. */
7
+ export declare function javaTypeOf(field: IrField, imports: Imports): string;