ormbridge 0.13.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 (116) hide show
  1. package/README.md +23 -22
  2. package/dist/cliRunner.js +20 -2
  3. package/dist/cliRunner.js.map +1 -1
  4. package/dist/config.d.ts +6 -1
  5. package/dist/config.js +17 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/emitters/jpa.d.ts +17 -2
  8. package/dist/emitters/jpa.js +55 -7
  9. package/dist/emitters/jpa.js.map +1 -1
  10. package/dist/emitters/jpaKeyClass.d.ts +18 -0
  11. package/dist/emitters/jpaKeyClass.js +88 -0
  12. package/dist/emitters/jpaKeyClass.js.map +1 -0
  13. package/dist/emitters/jpaKeys.d.ts +1 -7
  14. package/dist/emitters/jpaKeys.js +0 -43
  15. package/dist/emitters/jpaKeys.js.map +1 -1
  16. package/dist/emitters/jpaRelations.d.ts +5 -1
  17. package/dist/emitters/jpaRelations.js +7 -1
  18. package/dist/emitters/jpaRelations.js.map +1 -1
  19. package/dist/emitters/jpaRender.d.ts +5 -1
  20. package/dist/emitters/jpaRender.js +11 -4
  21. package/dist/emitters/jpaRender.js.map +1 -1
  22. package/dist/emitters/jpaTypes.d.ts +9 -3
  23. package/dist/emitters/jpaTypes.js +8 -0
  24. package/dist/emitters/jpaTypes.js.map +1 -1
  25. package/dist/emitters/sequelize.d.ts +16 -3
  26. package/dist/emitters/sequelize.js +270 -45
  27. package/dist/emitters/sequelize.js.map +1 -1
  28. package/dist/emitters/sequelize7.d.ts +68 -0
  29. package/dist/emitters/sequelize7.js +199 -0
  30. package/dist/emitters/sequelize7.js.map +1 -0
  31. package/dist/emitters/sequelizeText.d.ts +12 -0
  32. package/dist/emitters/sequelizeText.js +37 -0
  33. package/dist/emitters/sequelizeText.js.map +1 -0
  34. package/dist/formats.d.ts +13 -2
  35. package/dist/formats.js +17 -6
  36. package/dist/formats.js.map +1 -1
  37. package/dist/index.d.ts +7 -4
  38. package/dist/index.js +4 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/io.js +105 -26
  41. package/dist/io.js.map +1 -1
  42. package/dist/parsers/efcore.js +60 -3
  43. package/dist/parsers/efcore.js.map +1 -1
  44. package/dist/parsers/efcoreAnnotations.js +1 -1
  45. package/dist/parsers/efcoreAnnotations.js.map +1 -1
  46. package/dist/parsers/efcoreBuild.d.ts +1 -0
  47. package/dist/parsers/efcoreBuild.js +15 -4
  48. package/dist/parsers/efcoreBuild.js.map +1 -1
  49. package/dist/parsers/efcoreEntities.js +90 -22
  50. package/dist/parsers/efcoreEntities.js.map +1 -1
  51. package/dist/parsers/efcoreMigrationHistory.d.ts +17 -0
  52. package/dist/parsers/efcoreMigrationHistory.js +105 -0
  53. package/dist/parsers/efcoreMigrationHistory.js.map +1 -0
  54. package/dist/parsers/efcoreMigrationReplay.d.ts +25 -0
  55. package/dist/parsers/efcoreMigrationReplay.js +790 -0
  56. package/dist/parsers/efcoreMigrationReplay.js.map +1 -0
  57. package/dist/parsers/efcoreMigrationSchema.d.ts +14 -0
  58. package/dist/parsers/efcoreMigrationSchema.js +550 -0
  59. package/dist/parsers/efcoreMigrationSchema.js.map +1 -0
  60. package/dist/parsers/efcoreMigrationState.d.ts +82 -0
  61. package/dist/parsers/efcoreMigrationState.js +104 -0
  62. package/dist/parsers/efcoreMigrationState.js.map +1 -0
  63. package/dist/parsers/efcoreModel.d.ts +18 -2
  64. package/dist/parsers/efcoreOwned.d.ts +12 -0
  65. package/dist/parsers/efcoreOwned.js +139 -0
  66. package/dist/parsers/efcoreOwned.js.map +1 -0
  67. package/dist/parsers/efcoreSnapshot.d.ts +85 -0
  68. package/dist/parsers/efcoreSnapshot.js +791 -0
  69. package/dist/parsers/efcoreSnapshot.js.map +1 -0
  70. package/dist/parsers/efcoreSteps.js +28 -3
  71. package/dist/parsers/efcoreSteps.js.map +1 -1
  72. package/dist/parsers/jpaBuild.js +2 -1
  73. package/dist/parsers/jpaBuild.js.map +1 -1
  74. package/dist/parsers/jpaClasses.js +7 -1
  75. package/dist/parsers/jpaClasses.js.map +1 -1
  76. package/dist/parsers/jpaColumns.d.ts +4 -1
  77. package/dist/parsers/jpaColumns.js +8 -2
  78. package/dist/parsers/jpaColumns.js.map +1 -1
  79. package/dist/parsers/jpaEntities.js +15 -0
  80. package/dist/parsers/jpaEntities.js.map +1 -1
  81. package/dist/parsers/jpaModel.d.ts +6 -0
  82. package/dist/parsers/sequelize.js +37 -10
  83. package/dist/parsers/sequelize.js.map +1 -1
  84. package/dist/parsers/sequelizeAssociations.js +13 -2
  85. package/dist/parsers/sequelizeAssociations.js.map +1 -1
  86. package/dist/parsers/sequelizeCollect.d.ts +7 -2
  87. package/dist/parsers/sequelizeCollect.js +120 -9
  88. package/dist/parsers/sequelizeCollect.js.map +1 -1
  89. package/dist/parsers/sequelizeMigrationState.d.ts +75 -0
  90. package/dist/parsers/sequelizeMigrationState.js +330 -0
  91. package/dist/parsers/sequelizeMigrationState.js.map +1 -0
  92. package/dist/parsers/sequelizeMigrations.d.ts +14 -0
  93. package/dist/parsers/sequelizeMigrations.js +1123 -0
  94. package/dist/parsers/sequelizeMigrations.js.map +1 -0
  95. package/dist/parsers/sequelizeModel.d.ts +19 -2
  96. package/dist/parsers/sqlDdl.js +1306 -65
  97. package/dist/parsers/sqlDdl.js.map +1 -1
  98. package/dist/parsers/sqlMigrationOrder.d.ts +8 -0
  99. package/dist/parsers/sqlMigrationOrder.js +110 -0
  100. package/dist/parsers/sqlMigrationOrder.js.map +1 -0
  101. package/dist/parsers/sqlSyntax.d.ts +6 -0
  102. package/dist/parsers/sqlSyntax.js +15 -2
  103. package/dist/parsers/sqlSyntax.js.map +1 -1
  104. package/dist/parsers/zod.d.ts +11 -0
  105. package/dist/parsers/zod.js +796 -0
  106. package/dist/parsers/zod.js.map +1 -0
  107. package/dist/parsers/zodFields.d.ts +73 -0
  108. package/dist/parsers/zodFields.js +681 -0
  109. package/dist/parsers/zodFields.js.map +1 -0
  110. package/dist/parsers/zodSyntax.d.ts +72 -0
  111. package/dist/parsers/zodSyntax.js +347 -0
  112. package/dist/parsers/zodSyntax.js.map +1 -0
  113. package/dist/styles.d.ts +3 -3
  114. package/dist/styles.js +4 -4
  115. package/dist/styles.js.map +1 -1
  116. 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