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.
- package/README.md +21 -21
- package/dist/cliRunner.js +2 -2
- package/dist/cliRunner.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/emitters/sequelize.d.ts +16 -3
- package/dist/emitters/sequelize.js +270 -45
- package/dist/emitters/sequelize.js.map +1 -1
- package/dist/emitters/sequelize7.d.ts +68 -0
- package/dist/emitters/sequelize7.js +199 -0
- package/dist/emitters/sequelize7.js.map +1 -0
- package/dist/emitters/sequelizeText.d.ts +12 -0
- package/dist/emitters/sequelizeText.js +37 -0
- package/dist/emitters/sequelizeText.js.map +1 -0
- package/dist/formats.d.ts +2 -2
- package/dist/formats.js +4 -3
- package/dist/formats.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/io.js +44 -6
- package/dist/io.js.map +1 -1
- package/dist/parsers/efcore.js +60 -3
- package/dist/parsers/efcore.js.map +1 -1
- package/dist/parsers/efcoreAnnotations.js +1 -1
- package/dist/parsers/efcoreAnnotations.js.map +1 -1
- package/dist/parsers/efcoreBuild.d.ts +1 -0
- package/dist/parsers/efcoreBuild.js +15 -4
- package/dist/parsers/efcoreBuild.js.map +1 -1
- package/dist/parsers/efcoreEntities.js +90 -22
- package/dist/parsers/efcoreEntities.js.map +1 -1
- package/dist/parsers/efcoreMigrationHistory.d.ts +17 -0
- package/dist/parsers/efcoreMigrationHistory.js +105 -0
- package/dist/parsers/efcoreMigrationHistory.js.map +1 -0
- package/dist/parsers/efcoreMigrationReplay.d.ts +25 -0
- package/dist/parsers/efcoreMigrationReplay.js +790 -0
- package/dist/parsers/efcoreMigrationReplay.js.map +1 -0
- package/dist/parsers/efcoreMigrationSchema.d.ts +14 -0
- package/dist/parsers/efcoreMigrationSchema.js +550 -0
- package/dist/parsers/efcoreMigrationSchema.js.map +1 -0
- package/dist/parsers/efcoreMigrationState.d.ts +82 -0
- package/dist/parsers/efcoreMigrationState.js +104 -0
- package/dist/parsers/efcoreMigrationState.js.map +1 -0
- package/dist/parsers/efcoreModel.d.ts +18 -2
- package/dist/parsers/efcoreOwned.d.ts +12 -0
- package/dist/parsers/efcoreOwned.js +139 -0
- package/dist/parsers/efcoreOwned.js.map +1 -0
- package/dist/parsers/efcoreSnapshot.d.ts +85 -0
- package/dist/parsers/efcoreSnapshot.js +791 -0
- package/dist/parsers/efcoreSnapshot.js.map +1 -0
- package/dist/parsers/efcoreSteps.js +28 -3
- package/dist/parsers/efcoreSteps.js.map +1 -1
- package/dist/parsers/sequelize.js +37 -10
- package/dist/parsers/sequelize.js.map +1 -1
- package/dist/parsers/sequelizeAssociations.js +13 -2
- package/dist/parsers/sequelizeAssociations.js.map +1 -1
- package/dist/parsers/sequelizeCollect.d.ts +7 -2
- package/dist/parsers/sequelizeCollect.js +120 -9
- package/dist/parsers/sequelizeCollect.js.map +1 -1
- package/dist/parsers/sequelizeMigrationState.d.ts +75 -0
- package/dist/parsers/sequelizeMigrationState.js +330 -0
- package/dist/parsers/sequelizeMigrationState.js.map +1 -0
- package/dist/parsers/sequelizeMigrations.d.ts +14 -0
- package/dist/parsers/sequelizeMigrations.js +1123 -0
- package/dist/parsers/sequelizeMigrations.js.map +1 -0
- package/dist/parsers/sequelizeModel.d.ts +19 -2
- package/dist/styles.d.ts +3 -3
- package/dist/styles.js +4 -4
- package/dist/styles.js.map +1 -1
- 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
|