ormbridge 0.8.0 → 0.9.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 (71) 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 +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/formats.d.ts +7 -4
  22. package/dist/formats.js +34 -0
  23. package/dist/formats.js.map +1 -1
  24. package/dist/index.d.ts +4 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/io.js +25 -1
  28. package/dist/io.js.map +1 -1
  29. package/dist/parsers/csharpChains.d.ts +36 -0
  30. package/dist/parsers/csharpChains.js +157 -0
  31. package/dist/parsers/csharpChains.js.map +1 -0
  32. package/dist/parsers/csharpDeclarations.d.ts +3 -0
  33. package/dist/parsers/csharpDeclarations.js +293 -0
  34. package/dist/parsers/csharpDeclarations.js.map +1 -0
  35. package/dist/parsers/csharpSyntax.d.ts +130 -0
  36. package/dist/parsers/csharpSyntax.js +339 -0
  37. package/dist/parsers/csharpSyntax.js.map +1 -0
  38. package/dist/parsers/efcore.d.ts +17 -0
  39. package/dist/parsers/efcore.js +265 -0
  40. package/dist/parsers/efcore.js.map +1 -0
  41. package/dist/parsers/efcoreAnnotations.d.ts +19 -0
  42. package/dist/parsers/efcoreAnnotations.js +293 -0
  43. package/dist/parsers/efcoreAnnotations.js.map +1 -0
  44. package/dist/parsers/efcoreBuild.d.ts +13 -0
  45. package/dist/parsers/efcoreBuild.js +523 -0
  46. package/dist/parsers/efcoreBuild.js.map +1 -0
  47. package/dist/parsers/efcoreEntities.d.ts +13 -0
  48. package/dist/parsers/efcoreEntities.js +468 -0
  49. package/dist/parsers/efcoreEntities.js.map +1 -0
  50. package/dist/parsers/efcoreFields.d.ts +22 -0
  51. package/dist/parsers/efcoreFields.js +285 -0
  52. package/dist/parsers/efcoreFields.js.map +1 -0
  53. package/dist/parsers/efcoreFluent.d.ts +47 -0
  54. package/dist/parsers/efcoreFluent.js +375 -0
  55. package/dist/parsers/efcoreFluent.js.map +1 -0
  56. package/dist/parsers/efcoreModel.d.ts +209 -0
  57. package/dist/parsers/efcoreModel.js +2 -0
  58. package/dist/parsers/efcoreModel.js.map +1 -0
  59. package/dist/parsers/efcoreRelations.d.ts +46 -0
  60. package/dist/parsers/efcoreRelations.js +317 -0
  61. package/dist/parsers/efcoreRelations.js.map +1 -0
  62. package/dist/parsers/efcoreSteps.d.ts +89 -0
  63. package/dist/parsers/efcoreSteps.js +793 -0
  64. package/dist/parsers/efcoreSteps.js.map +1 -0
  65. package/dist/parsers/efcoreTypes.d.ts +35 -0
  66. package/dist/parsers/efcoreTypes.js +404 -0
  67. package/dist/parsers/efcoreTypes.js.map +1 -0
  68. package/dist/styles.d.ts +3 -2
  69. package/dist/styles.js +4 -1
  70. package/dist/styles.js.map +1 -1
  71. package/package.json +3 -1
@@ -0,0 +1,468 @@
1
+ import { parseTypeText, } from './csharpSyntax.js';
2
+ import { annotateProperty, isOwnedByAttribute, newOwnedConfig, } from './efcoreAnnotations.js';
3
+ import { elementType, isCollectionType, isKnownScalar, isKnownUnsupported, } from './efcoreTypes.js';
4
+ const MAX_OWNED_DEPTH = 4;
5
+ const MAX_HIERARCHY_DEPTH = 32;
6
+ /** The class a class derives from, when that class is in the input. */
7
+ function parentOf(cls, project) {
8
+ for (const base of cls.bases) {
9
+ const candidate = project.classes.get(base.name);
10
+ if (candidate !== undefined &&
11
+ candidate.kind !== 'interface' &&
12
+ candidate !== cls) {
13
+ return candidate;
14
+ }
15
+ }
16
+ return undefined;
17
+ }
18
+ /** A class and its ancestors in the input, base first. */
19
+ export function classChain(cls, project) {
20
+ const chain = [cls];
21
+ let current = cls;
22
+ for (let depth = 0; depth < MAX_HIERARCHY_DEPTH; depth += 1) {
23
+ const parent = parentOf(current, project);
24
+ if (parent === undefined || chain.includes(parent)) {
25
+ break;
26
+ }
27
+ chain.unshift(parent);
28
+ current = parent;
29
+ }
30
+ return chain;
31
+ }
32
+ /** Maps the type parameters of generic base classes to the arguments the derived class gave them. */
33
+ function substitutions(chain) {
34
+ const result = new Map();
35
+ for (const cls of chain) {
36
+ result.set(cls, new Map());
37
+ }
38
+ for (let index = chain.length - 1; index > 0; index -= 1) {
39
+ const child = chain[index];
40
+ const parent = chain[index - 1];
41
+ if (child === undefined || parent === undefined) {
42
+ continue;
43
+ }
44
+ const base = child.bases.find((candidate) => candidate.name === parent.name);
45
+ const own = result.get(child) ?? new Map();
46
+ const target = result.get(parent) ?? new Map();
47
+ parent.typeParameters.forEach((parameter, position) => {
48
+ const argument = base?.args[position];
49
+ if (argument !== undefined) {
50
+ target.set(parameter, own.get(argument.name) ?? argument);
51
+ }
52
+ });
53
+ }
54
+ return result;
55
+ }
56
+ function substitute(type, map) {
57
+ const replacement = map?.get(type.name);
58
+ if (replacement !== undefined) {
59
+ return {
60
+ ...replacement,
61
+ nullable: type.nullable || replacement.nullable,
62
+ arrayDepth: replacement.arrayDepth + type.arrayDepth,
63
+ };
64
+ }
65
+ if (type.args.length === 0) {
66
+ return type;
67
+ }
68
+ return {
69
+ ...type,
70
+ args: type.args.map((argument) => substitute(argument, map)),
71
+ };
72
+ }
73
+ /**
74
+ * True for a get-only navigation that the fluent API configures by name, as in
75
+ * `public IReadOnlyCollection<Review> Reviews => _reviews;` with `HasMany(p => p.Reviews)`: EF Core
76
+ * reaches it through its backing field.
77
+ */
78
+ function isConfiguredNavigation(property, navNames, project) {
79
+ if (property.isField ||
80
+ property.modifiers.includes('static') ||
81
+ !navNames.has(property.name)) {
82
+ return false;
83
+ }
84
+ const inner = isCollectionType(property.type)
85
+ ? (property.type.args[0] ?? property.type)
86
+ : property.type;
87
+ return project.classes.has(inner.name);
88
+ }
89
+ function isMapped(property, navNames, project) {
90
+ if (isConfiguredNavigation(property, navNames, project)) {
91
+ return true;
92
+ }
93
+ if (property.isField || property.isComputed) {
94
+ return false;
95
+ }
96
+ if (property.modifiers.includes('static') ||
97
+ property.modifiers.includes('abstract') ||
98
+ property.name === 'this') {
99
+ return false;
100
+ }
101
+ return property.hasGetter && property.hasSetter;
102
+ }
103
+ function attributeArg(property, name) {
104
+ const found = property.attributes.find((item) => item.name === name);
105
+ const node = found?.args[0];
106
+ if (node === undefined) {
107
+ return undefined;
108
+ }
109
+ // [ForeignKey("AuthorId")] and [ForeignKey(nameof(AuthorId))]
110
+ const text = node.text;
111
+ const quoted = text.match(/^"(.*)"$/);
112
+ if (quoted !== null) {
113
+ return quoted[1];
114
+ }
115
+ const named = text.match(/^nameof\((?:[\w.]*\.)?(\w+)\)$/);
116
+ return named === null ? text : named[1];
117
+ }
118
+ function foreignKeyNav(property) {
119
+ const named = attributeArg(property, 'ForeignKey');
120
+ return named === undefined ? {} : { foreignKeyNav: named };
121
+ }
122
+ function isOwnedProperty(type, property, scope, ctx) {
123
+ const inner = elementType(type) ?? type;
124
+ const cls = ctx.project.classes.get(inner.name);
125
+ return (scope.owned.has(property.name) ||
126
+ ctx.store.ownedTypes.has(inner.name) ||
127
+ (cls !== undefined && isOwnedByAttribute(cls)));
128
+ }
129
+ /** True for a property whose type is a class from the input that is not a scalar, enum or owned type. */
130
+ function isNavigation(type, ctx) {
131
+ const inner = isCollectionType(type) ? (type.args[0] ?? type) : type;
132
+ const cls = ctx.project.classes.get(inner.name);
133
+ return (cls !== undefined &&
134
+ (cls.kind === 'class' || cls.kind === 'record') &&
135
+ !ctx.enumNames.has(inner.name) &&
136
+ type.arrayDepth === 0);
137
+ }
138
+ /** Classifies the properties of one class (and its owned types) into scalar columns and navigations. */
139
+ function classifyProperties(properties, cls, scope, prefix, forceNullable, depth, ctx, members) {
140
+ const map = ctx.subst.get(cls);
141
+ const siblings = new Set(properties.map((property) => property.name.toLowerCase()));
142
+ for (const property of properties) {
143
+ if (!isMapped(property, ctx.store.navigationNames(), ctx.project) ||
144
+ scope.ignored.has(property.name)) {
145
+ continue;
146
+ }
147
+ const type = substitute(property.type, map);
148
+ const place = `${cls.name}.${property.name}`;
149
+ const settings = {
150
+ ...(scope.props.get(property.name) ?? {}),
151
+ };
152
+ if (settings.ignored === true) {
153
+ continue;
154
+ }
155
+ if (isOwnedProperty(type, property, scope, ctx)) {
156
+ const inner = elementType(type) ?? type;
157
+ const nested = ctx.project.classes.get(inner.name);
158
+ const ownedScope = scope.owned.get(property.name) ??
159
+ newOwnedConfig(property.name, isCollectionType(type));
160
+ if (ownedScope.many || isCollectionType(type)) {
161
+ ctx.warn(`${place}: the owned collection of ${inner.name} is stored in a separate table, which is not represented; the property was skipped.`);
162
+ continue;
163
+ }
164
+ if (ownedScope.toJson) {
165
+ members.push({
166
+ kind: 'scalar',
167
+ path: `${prefix}${property.name}`,
168
+ name: property.name,
169
+ type: {
170
+ ...type,
171
+ name: 'JsonDocument',
172
+ text: 'JsonDocument',
173
+ args: [],
174
+ },
175
+ config: { ...settings },
176
+ declaredIn: cls.name,
177
+ prefix,
178
+ forceNullable: forceNullable || type.nullable,
179
+ isJson: true,
180
+ });
181
+ continue;
182
+ }
183
+ if (nested === undefined || depth >= MAX_OWNED_DEPTH) {
184
+ ctx.warn(`${place}: the owned type ${inner.name} is not in the input or is nested too deeply; the property was skipped.`);
185
+ continue;
186
+ }
187
+ const ownedChain = classChain(nested, ctx.project);
188
+ const ownedProperties = ownedChain.flatMap((item) => item.properties);
189
+ // Annotations on the owned type's properties apply unless the fluent API said otherwise.
190
+ for (const ownedProperty of ownedProperties) {
191
+ const fluent = ownedScope.props.get(ownedProperty.name);
192
+ const annotated = {};
193
+ annotateProperty(ownedProperty, annotated, ctx.store.consts);
194
+ ownedScope.props.set(ownedProperty.name, { ...annotated, ...fluent });
195
+ if (annotated.ignored === true) {
196
+ ownedScope.ignored.add(ownedProperty.name);
197
+ }
198
+ }
199
+ const ownedMembers = [];
200
+ const ownedSubst = substitutions(ownedChain);
201
+ for (const ownedClass of ownedChain) {
202
+ classifyProperties(ownedClass.properties, ownedClass, ownedScope, `${prefix}${property.name}.`, forceNullable || type.nullable, depth + 1, { ...ctx, subst: ownedSubst, declaredIn: ownedClass.name }, ownedMembers);
203
+ }
204
+ members.push(...ownedMembers);
205
+ continue;
206
+ }
207
+ if (isKnownScalar(type, ctx.enumNames) || isKnownUnsupported(type)) {
208
+ members.push({
209
+ kind: 'scalar',
210
+ path: `${prefix}${property.name}`,
211
+ name: property.name,
212
+ type,
213
+ config: settings,
214
+ declaredIn: cls.name,
215
+ prefix,
216
+ forceNullable,
217
+ ...foreignKeyNav(property),
218
+ });
219
+ continue;
220
+ }
221
+ if (isNavigation(type, ctx)) {
222
+ if (prefix !== '') {
223
+ ctx.warn(`${place}: a navigation inside an owned type is not interpreted and was skipped.`);
224
+ continue;
225
+ }
226
+ const many = isCollectionType(type);
227
+ const inner = many ? (type.args[0] ?? type) : type;
228
+ const foreignKeyAttr = attributeArg(property, 'ForeignKey');
229
+ const inverseAttr = attributeArg(property, 'InverseProperty');
230
+ const nav = {
231
+ kind: 'nav',
232
+ name: property.name,
233
+ target: inner.name,
234
+ many,
235
+ nullable: type.nullable,
236
+ declaredIn: cls.name,
237
+ requiredAttr: property.attributes.some((item) => item.name === 'Required'),
238
+ ...(foreignKeyAttr === undefined ? {} : { foreignKeyAttr }),
239
+ ...(inverseAttr === undefined ? {} : { inverseAttr }),
240
+ };
241
+ members.push(nav);
242
+ continue;
243
+ }
244
+ // A type that is neither a known column type nor a class from the input.
245
+ const inner = isCollectionType(type)
246
+ ? (type.args[0] ?? type)
247
+ : type;
248
+ const looksLikeNavigation = isCollectionType(type) ||
249
+ siblings.has(`${property.name}id`.toLowerCase()) ||
250
+ siblings.has(`${property.name}_id`.toLowerCase());
251
+ if (looksLikeNavigation && !isKnownScalar(inner, ctx.enumNames)) {
252
+ ctx.warn(`${place}: the type ${type.text}${type.args.length > 0 ? '<...>' : ''} is not a model in the input, so the ${isCollectionType(type) ? 'collection ' : ''}navigation was skipped.`);
253
+ continue;
254
+ }
255
+ members.push({
256
+ kind: 'scalar',
257
+ path: `${prefix}${property.name}`,
258
+ name: property.name,
259
+ type,
260
+ config: settings,
261
+ declaredIn: cls.name,
262
+ prefix,
263
+ forceNullable,
264
+ ...foreignKeyNav(property),
265
+ });
266
+ }
267
+ }
268
+ /** Adds the navigation targets of every entity to the store until no new entity appears. */
269
+ export function expandEntities(store, project, enumNames) {
270
+ for (let index = 0; index < store.entityOrder.length; index += 1) {
271
+ const name = store.entityOrder[index];
272
+ const cls = name === undefined ? undefined : project.classes.get(name);
273
+ const config = name === undefined ? undefined : store.entity(name);
274
+ if (cls === undefined || config === undefined) {
275
+ continue;
276
+ }
277
+ const chain = classChain(cls, project);
278
+ const ctx = {
279
+ project,
280
+ store,
281
+ enumNames,
282
+ entityNames: new Set(store.entityOrder),
283
+ subst: substitutions(chain),
284
+ declaredIn: cls.name,
285
+ nullableRefs: false,
286
+ warn: () => undefined,
287
+ place: cls.name,
288
+ };
289
+ for (const item of chain) {
290
+ for (const property of item.properties) {
291
+ if (!isMapped(property, store.navigationNames(), project) ||
292
+ config.ignored.has(property.name)) {
293
+ continue;
294
+ }
295
+ const type = substitute(property.type, ctx.subst.get(item));
296
+ if (isOwnedProperty(type, property, config, ctx) ||
297
+ isKnownScalar(type, enumNames) ||
298
+ !isNavigation(type, ctx)) {
299
+ continue;
300
+ }
301
+ const inner = isCollectionType(type)
302
+ ? (type.args[0] ?? type)
303
+ : type;
304
+ const target = project.classes.get(inner.name);
305
+ if (target !== undefined &&
306
+ !store.ignoredEntities.has(inner.name) &&
307
+ !target.attributes.some((attribute) => attribute.name === 'NotMapped')) {
308
+ store.addEntity(inner.name);
309
+ }
310
+ }
311
+ }
312
+ }
313
+ }
314
+ function nullableRefsFor(cls, project) {
315
+ const directive = project.nullableByPath.get(cls.path);
316
+ if (directive === 'enable') {
317
+ return true;
318
+ }
319
+ if (directive === 'disable') {
320
+ return false;
321
+ }
322
+ return project.nullableReferences;
323
+ }
324
+ /** Reads the mapped members of every entity and groups table-per-hierarchy inheritance under its root. */
325
+ export function buildEntities(store, project, enumNames) {
326
+ const entityNames = new Set(store.entityOrder);
327
+ const infos = new Map();
328
+ // First the hierarchy: which entity is the base of which.
329
+ const baseOf = new Map();
330
+ for (const name of store.entityOrder) {
331
+ const cls = project.classes.get(name);
332
+ const config = store.entity(name);
333
+ if (cls === undefined || config === undefined) {
334
+ continue;
335
+ }
336
+ if (config.baseType !== undefined) {
337
+ if (config.baseType !== '' && entityNames.has(config.baseType)) {
338
+ baseOf.set(name, config.baseType);
339
+ }
340
+ continue;
341
+ }
342
+ const chain = classChain(cls, project);
343
+ for (let index = chain.length - 2; index >= 0; index -= 1) {
344
+ const ancestor = chain[index];
345
+ if (ancestor !== undefined && entityNames.has(ancestor.name)) {
346
+ baseOf.set(name, ancestor.name);
347
+ break;
348
+ }
349
+ }
350
+ }
351
+ const isSeparateTable = (name) => {
352
+ const base = baseOf.get(name);
353
+ const config = store.entity(name);
354
+ if (base === undefined || config === undefined) {
355
+ return true;
356
+ }
357
+ const baseConfig = store.entity(base);
358
+ return (config.mapping === 'tpt' ||
359
+ config.mapping === 'tpc' ||
360
+ baseConfig?.mapping === 'tpt' ||
361
+ baseConfig?.mapping === 'tpc' ||
362
+ (config.table !== undefined && config.table !== baseConfig?.table) ||
363
+ (config.viewName !== undefined &&
364
+ config.viewName !== baseConfig?.viewName));
365
+ };
366
+ for (const name of store.entityOrder) {
367
+ const cls = project.classes.get(name);
368
+ const config = store.entity(name);
369
+ if (cls === undefined || config === undefined) {
370
+ continue;
371
+ }
372
+ const base = baseOf.get(name);
373
+ const separate = isSeparateTable(name);
374
+ if (base !== undefined && separate) {
375
+ project.warnings.push(`${name}: table-per-type or table-per-concrete-type inheritance (the base entity ${base} is stored in another table) is not represented; ${name} was read as an independent table with the columns of its base classes.`);
376
+ }
377
+ let chain = classChain(cls, project);
378
+ if (base !== undefined && !separate) {
379
+ // Table per hierarchy: only the classes below the base entity belong to this entity.
380
+ const baseIndex = chain.findIndex((item) => item.name === base);
381
+ chain = chain.slice(baseIndex + 1);
382
+ }
383
+ const subst = substitutions(classChain(cls, project));
384
+ const members = [];
385
+ const nullableRefs = nullableRefsFor(cls, project);
386
+ for (const item of chain) {
387
+ classifyProperties(item.properties, item, config, '', false, 0, {
388
+ project,
389
+ store,
390
+ enumNames,
391
+ entityNames,
392
+ subst,
393
+ declaredIn: item.name,
394
+ nullableRefs,
395
+ warn: (message) => project.warnings.push(message),
396
+ place: item.name,
397
+ }, members);
398
+ }
399
+ const chainNames = new Set(classChain(cls, project).flatMap((item) => item.properties.map((property) => property.name)));
400
+ for (const [propertyName, settings] of config.props) {
401
+ if (settings.declared !== true || config.ignored.has(propertyName)) {
402
+ continue;
403
+ }
404
+ if (chainNames.has(propertyName)) {
405
+ continue;
406
+ }
407
+ if (settings.shadowType === undefined) {
408
+ project.warnings.push(`${name}: the fluent API configures the property "${propertyName}", which the class does not have (a shadow property needs Property<T>("${propertyName}")); the settings were ignored.`);
409
+ continue;
410
+ }
411
+ // A shadow property exists only in the model: it is a column like any other.
412
+ members.push({
413
+ kind: 'scalar',
414
+ path: propertyName,
415
+ name: propertyName,
416
+ type: parseTypeText(settings.shadowType),
417
+ config: settings,
418
+ declaredIn: name,
419
+ prefix: '',
420
+ forceNullable: false,
421
+ });
422
+ }
423
+ const baseClass = cls.bases.find((base) => !project.classes.has(base.name) &&
424
+ !/^I[A-Z]/.test(base.name) &&
425
+ base.name !== 'object');
426
+ if (baseClass !== undefined && !project.classes.has(baseClass.name)) {
427
+ project.warnings.push(`${name}: the base class ${baseClass.name} is not in the input; the properties it declares (a key, timestamps, ...) were not read.`);
428
+ }
429
+ infos.set(name, {
430
+ name,
431
+ cls,
432
+ config,
433
+ root: base !== undefined && !separate ? base : name,
434
+ derived: [],
435
+ members,
436
+ nullableRefs,
437
+ order: project.classOrder.get(name) ?? 0,
438
+ });
439
+ }
440
+ // Resolve roots of chains (A : B : C) and collect derived entities under them.
441
+ const rootOf = (name) => {
442
+ let current = name;
443
+ for (let depth = 0; depth < MAX_HIERARCHY_DEPTH; depth += 1) {
444
+ const info = infos.get(current);
445
+ if (info === undefined || info.root === current) {
446
+ break;
447
+ }
448
+ current = info.root;
449
+ }
450
+ return current;
451
+ };
452
+ for (const info of infos.values()) {
453
+ info.root = rootOf(info.name);
454
+ if (info.root !== info.name) {
455
+ infos.get(info.root)?.derived.push(info.name);
456
+ }
457
+ }
458
+ return [...infos.values()].sort((first, second) => first.order - second.order);
459
+ }
460
+ /** Names the mapped scalar members of an entity. */
461
+ export function scalarsOf(info) {
462
+ return info.members.filter((member) => member.kind === 'scalar');
463
+ }
464
+ /** Names the navigations of an entity. */
465
+ export function navsOf(info) {
466
+ return info.members.filter((member) => member.kind === 'nav');
467
+ }
468
+ //# sourceMappingURL=efcoreEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"efcoreEntities.js","sourceRoot":"","sources":["../../src/parsers/efcoreEntities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { IrEnum, IrField } from '../ir.js';
2
+ import { type CsEnum } from './csharpSyntax.js';
3
+ import type { EntityInfo, Project, ScalarMember } from './efcoreModel.js';
4
+ /** The IR field of a column, with the enum it uses (if any). */
5
+ export interface BuiltField {
6
+ field: IrField;
7
+ member: ScalarMember;
8
+ enumDefinition?: IrEnum;
9
+ }
10
+ export interface FieldContext {
11
+ project: Project;
12
+ info: EntityInfo;
13
+ /** Property names that make up the primary key of the entity. */
14
+ keyNames: readonly string[];
15
+ warn: (message: string) => void;
16
+ }
17
+ /** The IR name of a mapped property: `PublicId` is `publicId`, an owned `Address.Street` is `addressStreet`. */
18
+ export declare function irFieldName(member: ScalarMember): string;
19
+ /** The database column name: the configured name, or the property name with owned prefixes (`Address_Street`). */
20
+ export declare function columnNameOf(member: ScalarMember): string;
21
+ /** Builds the IR field of one mapped column. */
22
+ export declare function buildField(member: ScalarMember, ctx: FieldContext, enumDefinitions: ReadonlyMap<string, CsEnum>): BuiltField;