ormbridge 0.14.0 → 0.15.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 (69) hide show
  1. package/README.md +21 -21
  2. package/dist/cliRunner.js +2 -2
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +1 -1
  5. package/dist/emitters/sequelize.d.ts +16 -3
  6. package/dist/emitters/sequelize.js +270 -45
  7. package/dist/emitters/sequelize.js.map +1 -1
  8. package/dist/emitters/sequelize7.d.ts +68 -0
  9. package/dist/emitters/sequelize7.js +199 -0
  10. package/dist/emitters/sequelize7.js.map +1 -0
  11. package/dist/emitters/sequelizeText.d.ts +12 -0
  12. package/dist/emitters/sequelizeText.js +37 -0
  13. package/dist/emitters/sequelizeText.js.map +1 -0
  14. package/dist/formats.d.ts +2 -2
  15. package/dist/formats.js +4 -3
  16. package/dist/formats.js.map +1 -1
  17. package/dist/index.d.ts +2 -2
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/io.js +44 -6
  21. package/dist/io.js.map +1 -1
  22. package/dist/parsers/efcore.js +60 -3
  23. package/dist/parsers/efcore.js.map +1 -1
  24. package/dist/parsers/efcoreAnnotations.js +1 -1
  25. package/dist/parsers/efcoreAnnotations.js.map +1 -1
  26. package/dist/parsers/efcoreBuild.d.ts +1 -0
  27. package/dist/parsers/efcoreBuild.js +15 -4
  28. package/dist/parsers/efcoreBuild.js.map +1 -1
  29. package/dist/parsers/efcoreEntities.js +90 -22
  30. package/dist/parsers/efcoreEntities.js.map +1 -1
  31. package/dist/parsers/efcoreMigrationHistory.d.ts +17 -0
  32. package/dist/parsers/efcoreMigrationHistory.js +105 -0
  33. package/dist/parsers/efcoreMigrationHistory.js.map +1 -0
  34. package/dist/parsers/efcoreMigrationReplay.d.ts +25 -0
  35. package/dist/parsers/efcoreMigrationReplay.js +790 -0
  36. package/dist/parsers/efcoreMigrationReplay.js.map +1 -0
  37. package/dist/parsers/efcoreMigrationSchema.d.ts +14 -0
  38. package/dist/parsers/efcoreMigrationSchema.js +550 -0
  39. package/dist/parsers/efcoreMigrationSchema.js.map +1 -0
  40. package/dist/parsers/efcoreMigrationState.d.ts +82 -0
  41. package/dist/parsers/efcoreMigrationState.js +104 -0
  42. package/dist/parsers/efcoreMigrationState.js.map +1 -0
  43. package/dist/parsers/efcoreModel.d.ts +18 -2
  44. package/dist/parsers/efcoreOwned.d.ts +12 -0
  45. package/dist/parsers/efcoreOwned.js +139 -0
  46. package/dist/parsers/efcoreOwned.js.map +1 -0
  47. package/dist/parsers/efcoreSnapshot.d.ts +85 -0
  48. package/dist/parsers/efcoreSnapshot.js +791 -0
  49. package/dist/parsers/efcoreSnapshot.js.map +1 -0
  50. package/dist/parsers/efcoreSteps.js +28 -3
  51. package/dist/parsers/efcoreSteps.js.map +1 -1
  52. package/dist/parsers/sequelize.js +37 -10
  53. package/dist/parsers/sequelize.js.map +1 -1
  54. package/dist/parsers/sequelizeAssociations.js +13 -2
  55. package/dist/parsers/sequelizeAssociations.js.map +1 -1
  56. package/dist/parsers/sequelizeCollect.d.ts +7 -2
  57. package/dist/parsers/sequelizeCollect.js +120 -9
  58. package/dist/parsers/sequelizeCollect.js.map +1 -1
  59. package/dist/parsers/sequelizeMigrationState.d.ts +75 -0
  60. package/dist/parsers/sequelizeMigrationState.js +330 -0
  61. package/dist/parsers/sequelizeMigrationState.js.map +1 -0
  62. package/dist/parsers/sequelizeMigrations.d.ts +14 -0
  63. package/dist/parsers/sequelizeMigrations.js +1123 -0
  64. package/dist/parsers/sequelizeMigrations.js.map +1 -0
  65. package/dist/parsers/sequelizeModel.d.ts +19 -2
  66. package/dist/styles.d.ts +3 -3
  67. package/dist/styles.js +4 -4
  68. package/dist/styles.js.map +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"efcoreMigrationReplay.js","sourceRoot":"","sources":["../../src/parsers/efcoreMigrationReplay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { IrSchema } from '../ir.js';
2
+ import { type MigrationSchema } from './efcoreMigrationState.js';
3
+ /**
4
+ * What differs between the schema the migrations build and the one the model snapshot describes, at the level the
5
+ * shared model keeps: tables, columns and whether they allow null, the primary key, foreign keys with their actions
6
+ * and indexes. An empty list means they agree.
7
+ */
8
+ export declare function describeDifferences(replayed: MigrationSchema, snapshot: MigrationSchema): string[];
9
+ /** Copies the names the model snapshot knows (entity, property and navigation names) onto the replayed schema. */
10
+ export declare function applySnapshotNames(replayed: MigrationSchema, snapshot: MigrationSchema): void;
11
+ /** Turns the schema the migrations (or the model snapshot) describe into the shared model. */
12
+ export declare function buildMigrationSchema(schema: MigrationSchema, options: {
13
+ appLabel: string;
14
+ }, warnings: string[]): IrSchema;
@@ -0,0 +1,550 @@
1
+ import { singularize, toCamelCase, toPascalCase, toSnakeCase, } from '../naming.js';
2
+ import { INDEX_METHODS } from './efcoreBuild.js';
3
+ import { conventionalName, findColumn, tableKey, } from './efcoreMigrationState.js';
4
+ import { clrColumn, sqlColumn, sqlDefault, } from './efcoreTypes.js';
5
+ /** Store types that SQLite uses for everything: the CLR type says more. */
6
+ const GENERIC_STORE_TYPES = new Set([
7
+ 'text',
8
+ 'integer',
9
+ 'real',
10
+ 'blob',
11
+ 'numeric',
12
+ ]);
13
+ function stripKeySuffix(name) {
14
+ const stripped = name.replace(/(?:Id|ID|_id)$/, '');
15
+ return stripped === '' ? name : stripped;
16
+ }
17
+ /** The primary key columns of a table; empty when it has none. */
18
+ function keyColumnsOf(table) {
19
+ return table.primaryKey?.columns ?? [];
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Comparing the replay with the model snapshot
23
+ // ---------------------------------------------------------------------------
24
+ function describeTable(table, schema) {
25
+ const facts = new Map();
26
+ for (const column of table.columns) {
27
+ facts.set(`column ${column.name}`, column.isNullable ? 'nullable' : 'not null');
28
+ }
29
+ facts.set('primary key', keyColumnsOf(table).join(', ') || 'none');
30
+ for (const key of table.foreignKeys) {
31
+ const principal = schema.get(tableKey(key.principalSchema, key.principalTable));
32
+ const columns = key.principalColumns.length > 0
33
+ ? key.principalColumns.join(', ')
34
+ : keyColumnsOf(principal ?? table).join(', ');
35
+ facts.set(`foreign key (${key.columns.join(', ')})`, `to ${key.principalTable} (${columns}), on delete ${key.onDelete}`);
36
+ }
37
+ for (const index of table.indexes) {
38
+ facts.set(`${index.isUnique ? 'unique index' : 'index'} (${index.columns.join(', ')})`, 'present');
39
+ }
40
+ for (const key of table.uniqueKeys) {
41
+ facts.set(`unique key (${key.columns.join(', ')})`, 'present');
42
+ }
43
+ return facts;
44
+ }
45
+ /**
46
+ * What differs between the schema the migrations build and the one the model snapshot describes, at the level the
47
+ * shared model keeps: tables, columns and whether they allow null, the primary key, foreign keys with their actions
48
+ * and indexes. An empty list means they agree.
49
+ */
50
+ export function describeDifferences(replayed, snapshot) {
51
+ const differences = [];
52
+ const keys = new Set([...replayed.keys(), ...snapshot.keys()]);
53
+ for (const key of keys) {
54
+ const left = replayed.get(key);
55
+ const right = snapshot.get(key);
56
+ if (left === undefined || right === undefined) {
57
+ differences.push(`the table "${key}" is only in the ${left === undefined ? 'model snapshot' : 'migrations'}`);
58
+ continue;
59
+ }
60
+ const leftFacts = describeTable(left, replayed);
61
+ const rightFacts = describeTable(right, snapshot);
62
+ for (const [fact, value] of leftFacts) {
63
+ const other = rightFacts.get(fact);
64
+ if (other === undefined) {
65
+ differences.push(`"${key}": ${fact} is only in the migrations`);
66
+ }
67
+ else if (other !== value) {
68
+ differences.push(`"${key}": ${fact} is ${value} in the migrations and ${other} in the model snapshot`);
69
+ }
70
+ }
71
+ for (const fact of rightFacts.keys()) {
72
+ if (!leftFacts.has(fact)) {
73
+ differences.push(`"${key}": ${fact} is only in the model snapshot`);
74
+ }
75
+ }
76
+ }
77
+ return differences;
78
+ }
79
+ /** Copies the names the model snapshot knows (entity, property and navigation names) onto the replayed schema. */
80
+ export function applySnapshotNames(replayed, snapshot) {
81
+ for (const [key, table] of replayed) {
82
+ const known = snapshot.get(key);
83
+ if (known === undefined) {
84
+ continue;
85
+ }
86
+ if (known.entityName !== undefined) {
87
+ table.entityName = known.entityName;
88
+ }
89
+ for (const column of table.columns) {
90
+ const match = findColumn(known, column.name);
91
+ if (match?.propertyName !== undefined) {
92
+ column.propertyName = match.propertyName;
93
+ }
94
+ }
95
+ for (const foreignKey of table.foreignKeys) {
96
+ const match = known.foreignKeys.find((item) => item.columns.join(',') === foreignKey.columns.join(',') &&
97
+ item.principalTable === foreignKey.principalTable);
98
+ if (match?.navigation !== undefined) {
99
+ foreignKey.navigation = match.navigation;
100
+ }
101
+ if (match?.inverseNavigation !== undefined) {
102
+ foreignKey.inverseNavigation = match.inverseNavigation;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Columns
109
+ // ---------------------------------------------------------------------------
110
+ /** Maps the CLR type and the database type of a column to a column of the shared model. */
111
+ function shapeOf(column) {
112
+ const fromClr = column.clrType === undefined
113
+ ? undefined
114
+ : clrColumn({ ...column.clrType, nullable: false });
115
+ const fromStore = column.storeType === undefined ? undefined : sqlColumn(column.storeType);
116
+ if (fromStore === undefined) {
117
+ return fromClr;
118
+ }
119
+ if (fromClr === undefined) {
120
+ return fromStore;
121
+ }
122
+ const storeName = (column.storeType ?? '').trim().toLowerCase();
123
+ if (GENERIC_STORE_TYPES.has(storeName)) {
124
+ return fromClr;
125
+ }
126
+ if (fromClr.type === 'text' || fromClr.type === 'string') {
127
+ return fromStore;
128
+ }
129
+ if (fromClr.type === 'dateTime' &&
130
+ (fromStore.type === 'date' || fromStore.type === 'time')) {
131
+ return fromStore;
132
+ }
133
+ if (fromClr.type === 'decimal') {
134
+ return { ...fromClr, ...fromStore, type: 'decimal' };
135
+ }
136
+ if (fromClr.type === 'uuid' || fromClr.type === 'boolean') {
137
+ return fromClr;
138
+ }
139
+ return fromClr.arrayDepth === undefined && fromStore.arrayDepth !== undefined
140
+ ? { ...fromClr, arrayDepth: fromStore.arrayDepth }
141
+ : fromClr;
142
+ }
143
+ const DATE_TIME_CONSTRUCTOR = /^new\s+DateTime(?:Offset)?\(\s*(\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+),\s*(\d+),\s*(\d+))?/;
144
+ const GUID_CONSTRUCTOR = /^new\s+Guid\(\s*"([0-9a-fA-F-]{36})"\s*\)$/;
145
+ function twoDigits(value) {
146
+ return (value ?? '0').padStart(2, '0');
147
+ }
148
+ /** Maps the default a migration gives a column (`defaultValue:` or `defaultValueSql:`) to a default. */
149
+ function defaultOf(column, type, place, warn) {
150
+ if (column.defaultSql !== undefined) {
151
+ return sqlDefault(column.defaultSql, type);
152
+ }
153
+ const value = column.defaultValue;
154
+ if (value === undefined) {
155
+ return undefined;
156
+ }
157
+ switch (value.kind) {
158
+ case 'string':
159
+ case 'bool':
160
+ return { kind: 'literal', value: value.value };
161
+ case 'number':
162
+ return { kind: 'literal', value: value.value };
163
+ case 'member': {
164
+ const last = value.path[value.path.length - 1] ?? '';
165
+ if (/^(?:Now|UtcNow|Today)$/.test(last)) {
166
+ return { kind: 'now' };
167
+ }
168
+ break;
169
+ }
170
+ case 'other': {
171
+ const guid = GUID_CONSTRUCTOR.exec(value.text);
172
+ if (guid?.[1] !== undefined) {
173
+ return { kind: 'literal', value: guid[1] };
174
+ }
175
+ const time = DATE_TIME_CONSTRUCTOR.exec(value.text);
176
+ if (time !== null) {
177
+ const date = `${time[1]?.padStart(4, '0')}-${twoDigits(time[2])}-${twoDigits(time[3])}`;
178
+ return {
179
+ kind: 'literal',
180
+ value: type === 'date'
181
+ ? date
182
+ : `${date}T${twoDigits(time[4])}:${twoDigits(time[5])}:${twoDigits(time[6])}`,
183
+ };
184
+ }
185
+ break;
186
+ }
187
+ default:
188
+ break;
189
+ }
190
+ warn(`${place}: the default value "${value.kind === 'other' ? value.text : value.kind}" cannot be evaluated statically and was dropped.`);
191
+ return undefined;
192
+ }
193
+ function isIntegerShape(shape) {
194
+ return ((shape.type === 'int' || shape.type === 'bigInt') &&
195
+ shape.arrayDepth === undefined);
196
+ }
197
+ /** Builds the field of one column. `isKey` is true when the column is part of the primary key. */
198
+ function buildField(column, fieldName, isSoleKey, isKey, place, warn) {
199
+ let shape = shapeOf(column);
200
+ if (shape === undefined) {
201
+ const raw = column.storeType ?? column.clrType?.text ?? 'unknown';
202
+ shape = { type: 'unsupported', unsupportedType: raw };
203
+ warn(`${place}: the type ${raw} has no column type in the shared model; the column is read as unsupported (${raw}).`);
204
+ }
205
+ let type = shape.type;
206
+ let maxLength = shape.maxLength;
207
+ if (column.maxLength !== undefined &&
208
+ (type === 'text' || type === 'string')) {
209
+ type = 'string';
210
+ maxLength = column.maxLength;
211
+ }
212
+ let maxDigits = shape.maxDigits;
213
+ let decimalPlaces = shape.decimalPlaces;
214
+ if (type === 'decimal' && column.precision !== undefined) {
215
+ maxDigits = column.precision;
216
+ decimalPlaces = column.scale ?? 0;
217
+ }
218
+ let generated;
219
+ if (column.computedSql !== undefined) {
220
+ generated = {
221
+ expression: column.computedSql,
222
+ isStored: column.isStored === true,
223
+ };
224
+ }
225
+ let defaultValue;
226
+ if (generated === undefined) {
227
+ defaultValue = defaultOf(column, type, place, warn);
228
+ if (defaultValue === undefined &&
229
+ column.isIdentity &&
230
+ isIntegerShape(shape)) {
231
+ defaultValue = { kind: 'autoIncrement' };
232
+ }
233
+ }
234
+ return {
235
+ name: fieldName,
236
+ columnName: column.name,
237
+ type,
238
+ isPrimaryKey: isSoleKey,
239
+ isUnique: false,
240
+ isNullable: isKey ? false : column.isNullable,
241
+ isAutoUpdated: false,
242
+ ...(defaultValue === undefined ? {} : { default: defaultValue }),
243
+ ...(maxLength === undefined || type !== 'string' ? {} : { maxLength }),
244
+ ...(type === 'decimal' && maxDigits !== undefined ? { maxDigits } : {}),
245
+ ...(type === 'decimal' && decimalPlaces !== undefined
246
+ ? { decimalPlaces }
247
+ : {}),
248
+ ...(shape.arrayDepth === undefined ? {} : { arrayDepth: shape.arrayDepth }),
249
+ ...(type === 'unsupported' && shape.unsupportedType !== undefined
250
+ ? { unsupportedType: shape.unsupportedType }
251
+ : {}),
252
+ ...(generated === undefined ? {} : { generated }),
253
+ };
254
+ }
255
+ // ---------------------------------------------------------------------------
256
+ // Tables to models
257
+ // ---------------------------------------------------------------------------
258
+ /** The next free name: `Name`, then `Name2`, `Name3`. */
259
+ function freeName(base, taken) {
260
+ let name = base;
261
+ for (let suffix = 2; taken.has(name); suffix += 1) {
262
+ name = `${base}${suffix}`;
263
+ }
264
+ taken.add(name);
265
+ return name;
266
+ }
267
+ function modelNameFor(table, taken) {
268
+ let base = table.entityName ?? toPascalCase(singularize(toSnakeCase(table.name)));
269
+ if (base === '') {
270
+ base = 'Model';
271
+ }
272
+ if (/^\d/.test(base)) {
273
+ base = `T${base}`;
274
+ }
275
+ if (taken.has(base) && table.schema !== undefined) {
276
+ base = `${toPascalCase(table.schema)}${base}`;
277
+ }
278
+ return freeName(base, taken);
279
+ }
280
+ /** The foreign keys of a table whose principal table exists, with the referenced columns filled in. */
281
+ function resolveForeignKeys(table, schema, warn) {
282
+ const resolved = [];
283
+ for (const foreignKey of table.foreignKeys) {
284
+ const principal = schema.get(tableKey(foreignKey.principalSchema, foreignKey.principalTable));
285
+ if (principal === undefined) {
286
+ warn(`${table.name}: the foreign key ${foreignKey.name === '' ? `(${foreignKey.columns.join(', ')})` : `"${foreignKey.name}"`} refers to the table "${foreignKey.principalTable}", which the migrations do not create; it was skipped.`);
287
+ continue;
288
+ }
289
+ const principalColumns = foreignKey.principalColumns.length > 0
290
+ ? foreignKey.principalColumns
291
+ : keyColumnsOf(principal);
292
+ if (principalColumns.length !== foreignKey.columns.length) {
293
+ warn(`${table.name}: the foreign key (${foreignKey.columns.join(', ')}) to "${principal.name}" does not reference as many columns as it has, so it was skipped.`);
294
+ continue;
295
+ }
296
+ resolved.push({ foreignKey, principal, principalColumns });
297
+ }
298
+ return resolved;
299
+ }
300
+ function columnLabel(column) {
301
+ return (column.propertyName ?? column.name).replace(/\./g, '_');
302
+ }
303
+ /** Turns the schema the migrations (or the model snapshot) describe into the shared model. */
304
+ export function buildMigrationSchema(schema, options, warnings) {
305
+ const warn = (message) => {
306
+ warnings.push(message);
307
+ };
308
+ const taken = new Set();
309
+ const modelNames = new Map();
310
+ const fieldNames = new Map();
311
+ for (const table of schema.values()) {
312
+ modelNames.set(table, modelNameFor(table, taken));
313
+ const names = new Set();
314
+ const columns = new Map();
315
+ for (const column of table.columns) {
316
+ columns.set(column.name, freeName(toCamelCase(columnLabel(column)) || 'column', names));
317
+ }
318
+ fieldNames.set(table, columns);
319
+ }
320
+ const models = [];
321
+ const relationNames = new Map();
322
+ const pendingReferences = [];
323
+ for (const table of schema.values()) {
324
+ const place = table.name;
325
+ const names = fieldNames.get(table) ?? new Map();
326
+ const key = keyColumnsOf(table);
327
+ const resolved = resolveForeignKeys(table, schema, warn);
328
+ const fields = [];
329
+ const fieldOf = new Map();
330
+ for (const column of table.columns) {
331
+ const field = buildField(column, names.get(column.name) ?? column.name, key.length === 1 && key[0] === column.name, key.includes(column.name), `${place}.${column.name}`, warn);
332
+ fields.push(field);
333
+ fieldOf.set(column.name, field);
334
+ if (column.isRowVersion) {
335
+ warn(`${place}.${column.name}: the row version has no equivalent in the shared model; it was read as an ordinary column.`);
336
+ }
337
+ }
338
+ const nonUnicode = table.columns
339
+ .filter((column) => column.isUnicode === false)
340
+ .map((column) => column.name);
341
+ if (nonUnicode.length > 0) {
342
+ warn(`${place}: the columns ${nonUnicode.join(', ')} are not Unicode (varchar instead of nvarchar); the shared model does not tell the two apart.`);
343
+ }
344
+ for (const check of table.checkConstraints) {
345
+ warn(`${place}: the check constraint "${check}" has no equivalent in the shared model and was dropped.`);
346
+ }
347
+ // Foreign keys ---------------------------------------------------------------------------
348
+ const relations = [];
349
+ const compositeKeys = [];
350
+ const consumed = new Set();
351
+ const relationOf = new Map();
352
+ const usedNames = new Set(names.values());
353
+ const uniqueColumns = new Set();
354
+ for (const unique of table.indexes.filter((index) => index.isUnique && index.filter === undefined)) {
355
+ uniqueColumns.add(unique.columns.join(','));
356
+ }
357
+ for (const unique of table.uniqueKeys) {
358
+ uniqueColumns.add(unique.columns.join(','));
359
+ }
360
+ for (const { foreignKey, principal, principalColumns } of resolved) {
361
+ const members = foreignKey.columns.map((name) => findColumn(table, name));
362
+ const first = members[0];
363
+ if (first === undefined || members.some((item) => item === undefined)) {
364
+ warn(`${place}: the foreign key (${foreignKey.columns.join(', ')}) names a column that the table does not have, so it was skipped.`);
365
+ continue;
366
+ }
367
+ const baseName = toCamelCase(foreignKey.navigation ?? stripKeySuffix(columnLabel(first)));
368
+ let relationName = baseName === '' ? 'ref' : baseName;
369
+ const ownField = names.get(first.name);
370
+ while (usedNames.has(relationName) &&
371
+ !(foreignKey.columns.length === 1 && ownField === relationName)) {
372
+ relationName = `${relationName}Ref`;
373
+ }
374
+ const isRequired = members.every((item) => item !== undefined && !item.isNullable);
375
+ const isUnique = uniqueColumns.has(foreignKey.columns.join(',')) ||
376
+ (key.length === foreignKey.columns.length &&
377
+ key.every((name) => foreignKey.columns.includes(name)));
378
+ const kind = isUnique
379
+ ? 'oneToOne'
380
+ : 'foreignKey';
381
+ const targetName = modelNames.get(principal) ?? principal.name;
382
+ const targetFields = fieldNames.get(principal) ?? new Map();
383
+ const principalKey = keyColumnsOf(principal);
384
+ const referencesKey = principalKey.length === principalColumns.length &&
385
+ principalKey.every((name, position) => principalColumns[position] === name);
386
+ const relatedName = foreignKey.inverseNavigation === undefined
387
+ ? undefined
388
+ : toCamelCase(foreignKey.inverseNavigation);
389
+ const defaultName = conventionalName('FK', table.name, foreignKey.columns, principal.name);
390
+ const constraintName = foreignKey.name === '' || foreignKey.name === defaultName
391
+ ? undefined
392
+ : foreignKey.name;
393
+ if (foreignKey.columns.length > 1) {
394
+ const composite = {
395
+ name: relationName,
396
+ targetModel: targetName,
397
+ fields: foreignKey.columns.map((name) => names.get(name) ?? name),
398
+ references: [],
399
+ kind,
400
+ isNullable: !isRequired,
401
+ onDelete: foreignKey.onDelete,
402
+ ...(foreignKey.onUpdate === 'noAction'
403
+ ? {}
404
+ : { onUpdate: foreignKey.onUpdate }),
405
+ ...(relatedName === undefined ? {} : { relatedName }),
406
+ ...(constraintName === undefined ? {} : { constraintName }),
407
+ };
408
+ // A key column of the principal that is a foreign key there is named by its relation, which is only
409
+ // known once the principal is built.
410
+ pendingReferences.push(() => {
411
+ composite.references = principalColumns.map((name) => relationNames.get(principal)?.get(name) ??
412
+ targetFields.get(name) ??
413
+ name);
414
+ });
415
+ compositeKeys.push(composite);
416
+ usedNames.add(relationName);
417
+ continue;
418
+ }
419
+ const isKeyColumn = key.length === 1 && key[0] === first.name;
420
+ relations.push({
421
+ name: relationName,
422
+ kind,
423
+ targetModel: targetName,
424
+ columnName: first.name,
425
+ isNullable: isKeyColumn ? false : !isRequired,
426
+ onDelete: foreignKey.onDelete,
427
+ ...(relatedName === undefined ? {} : { relatedName }),
428
+ ...(referencesKey || principalColumns[0] === undefined
429
+ ? {}
430
+ : { toField: principalColumns[0] }),
431
+ ...(isKeyColumn ? { isPrimaryKey: true } : {}),
432
+ ...(foreignKey.onUpdate === 'noAction'
433
+ ? {}
434
+ : { onUpdate: foreignKey.onUpdate }),
435
+ ...(constraintName === undefined ? {} : { constraintName }),
436
+ });
437
+ usedNames.add(relationName);
438
+ consumed.add(first.name);
439
+ relationOf.set(first.name, relationName);
440
+ }
441
+ relationNames.set(table, relationOf);
442
+ const nameOf = (column) => relationOf.get(column) ?? names.get(column) ?? column;
443
+ // Primary key --------------------------------------------------------------------------------
444
+ let compositePrimaryKey;
445
+ if (key.length === 0) {
446
+ warn(`${place}: the table has no primary key; other formats expect every model to have one.`);
447
+ }
448
+ else if (key.length > 1) {
449
+ compositePrimaryKey = key.map(nameOf);
450
+ for (const name of key) {
451
+ const field = fieldOf.get(name);
452
+ if (field !== undefined) {
453
+ field.isPrimaryKey = false;
454
+ }
455
+ }
456
+ }
457
+ const primaryKeyName = table.primaryKey?.name === undefined ||
458
+ table.primaryKey.name === conventionalName('PK', table.name, key)
459
+ ? undefined
460
+ : table.primaryKey.name;
461
+ // Indexes ---------------------------------------------------------------------------------------
462
+ const indexes = [];
463
+ const foreignKeyColumns = new Set(resolved.map(({ foreignKey }) => foreignKey.columns.join(',')));
464
+ const unnamed = (kind, entry) => entry.name === undefined ||
465
+ entry.name === conventionalName(kind, table.name, entry.columns);
466
+ const addUnique = (columns, name) => {
467
+ const only = columns[0];
468
+ if (columns.length === 1 && only !== undefined && name === undefined) {
469
+ if (consumed.has(only)) {
470
+ return;
471
+ }
472
+ const field = fieldOf.get(only);
473
+ if (field !== undefined) {
474
+ if (!field.isPrimaryKey) {
475
+ field.isUnique = true;
476
+ }
477
+ return;
478
+ }
479
+ }
480
+ indexes.push({
481
+ fields: columns.map(nameOf),
482
+ isUnique: true,
483
+ ...(name === undefined ? {} : { name }),
484
+ });
485
+ };
486
+ for (const index of table.indexes) {
487
+ const label = ` "${index.name}"`;
488
+ const joined = index.columns.join(',');
489
+ const isAutomatic = !index.isUnique &&
490
+ unnamed('IX', index) &&
491
+ foreignKeyColumns.has(joined);
492
+ if (isAutomatic) {
493
+ continue;
494
+ }
495
+ if (index.filter !== undefined) {
496
+ warn(`${place}: the index${label} has a filter (a partial index), which is not preserved; it was read as a full index.`);
497
+ }
498
+ if (index.includes.length > 0) {
499
+ warn(`${place}: the index${label} includes extra columns (IncludeColumns), which are not preserved.`);
500
+ }
501
+ const method = index.method === undefined
502
+ ? undefined
503
+ : INDEX_METHODS[index.method.toLowerCase()];
504
+ if (index.method !== undefined && method === undefined) {
505
+ warn(`${place}: the index method "${index.method}" has no equivalent and was ignored.`);
506
+ }
507
+ const fieldOptions = {};
508
+ index.descending.forEach((flag, position) => {
509
+ const column = index.columns[position];
510
+ if (flag && column !== undefined) {
511
+ fieldOptions[nameOf(column)] = { sort: 'desc' };
512
+ }
513
+ });
514
+ const plain = method === undefined && Object.keys(fieldOptions).length === 0;
515
+ if (index.isUnique && plain) {
516
+ addUnique(index.columns, unnamed('IX', index) ? undefined : index.name);
517
+ continue;
518
+ }
519
+ indexes.push({
520
+ fields: index.columns.map(nameOf),
521
+ isUnique: index.isUnique,
522
+ ...(unnamed('IX', index) ? {} : { name: index.name }),
523
+ ...(method === undefined ? {} : { method }),
524
+ ...(Object.keys(fieldOptions).length === 0 ? {} : { fieldOptions }),
525
+ });
526
+ }
527
+ for (const unique of table.uniqueKeys) {
528
+ addUnique(unique.columns, unnamed('AK', unique) ? undefined : unique.name);
529
+ }
530
+ models.push({
531
+ name: modelNames.get(table) ?? table.name,
532
+ tableName: table.name,
533
+ appLabel: options.appLabel,
534
+ fields: fields.filter((field) => !consumed.has(field.columnName)),
535
+ relations,
536
+ indexes,
537
+ ...(compositePrimaryKey === undefined ? {} : { compositePrimaryKey }),
538
+ ...(compositeKeys.length === 0
539
+ ? {}
540
+ : { compositeForeignKeys: compositeKeys }),
541
+ ...(table.schema === undefined ? {} : { schema: table.schema }),
542
+ ...(primaryKeyName === undefined ? {} : { primaryKeyName }),
543
+ });
544
+ }
545
+ for (const resolve of pendingReferences) {
546
+ resolve();
547
+ }
548
+ return { models, enums: [], warnings };
549
+ }
550
+ //# sourceMappingURL=efcoreMigrationSchema.js.map