ormbridge 0.7.0 → 0.8.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 +1 -0
- package/dist/cliRunner.js +7 -5
- package/dist/cliRunner.js.map +1 -1
- package/dist/config.d.ts +6 -3
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/emitters/sequelize.d.ts +35 -0
- package/dist/emitters/sequelize.js +1276 -0
- package/dist/emitters/sequelize.js.map +1 -0
- package/dist/formats.d.ts +6 -5
- package/dist/formats.js +38 -4
- package/dist/formats.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/io.js +29 -1
- package/dist/io.js.map +1 -1
- package/dist/parsers/sequelize.d.ts +15 -0
- package/dist/parsers/sequelize.js +906 -0
- package/dist/parsers/sequelize.js.map +1 -0
- package/dist/parsers/sequelizeAssociations.d.ts +45 -0
- package/dist/parsers/sequelizeAssociations.js +449 -0
- package/dist/parsers/sequelizeAssociations.js.map +1 -0
- package/dist/parsers/sequelizeCollect.d.ts +33 -0
- package/dist/parsers/sequelizeCollect.js +1298 -0
- package/dist/parsers/sequelizeCollect.js.map +1 -0
- package/dist/parsers/sequelizeInflection.d.ts +14 -0
- package/dist/parsers/sequelizeInflection.js +451 -0
- package/dist/parsers/sequelizeInflection.js.map +1 -0
- package/dist/parsers/sequelizeModel.d.ts +185 -0
- package/dist/parsers/sequelizeModel.js +2 -0
- package/dist/parsers/sequelizeModel.js.map +1 -0
- package/dist/parsers/sequelizeTypes.d.ts +24 -0
- package/dist/parsers/sequelizeTypes.js +248 -0
- package/dist/parsers/sequelizeTypes.js.map +1 -0
- package/dist/styles.d.ts +17 -0
- package/dist/styles.js +40 -0
- package/dist/styles.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequelize.js","sourceRoot":"","sources":["../../src/parsers/sequelize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ModelOptions, Project, RawAttribute, RawModel } from './sequelizeModel.js';
|
|
2
|
+
/** A model with the options and names that the association rules need. */
|
|
3
|
+
export interface Prepared {
|
|
4
|
+
raw: RawModel;
|
|
5
|
+
options: ModelOptions;
|
|
6
|
+
/** The model name used in the IR. */
|
|
7
|
+
irName: string;
|
|
8
|
+
/** The table Sequelize creates for the model. */
|
|
9
|
+
tableName: string;
|
|
10
|
+
}
|
|
11
|
+
/** What an association says about the foreign key attribute it is attached to. */
|
|
12
|
+
export interface ReverseSide {
|
|
13
|
+
/** The accessor on the model that owns the key (`User.hasMany(Post, { as: 'posts' })`). */
|
|
14
|
+
name: string;
|
|
15
|
+
kind: 'hasMany' | 'hasOne';
|
|
16
|
+
label: string;
|
|
17
|
+
}
|
|
18
|
+
/** A many-to-many relation whose join table Sequelize creates itself (`through: 'table'`). */
|
|
19
|
+
export interface ManyToManyLink {
|
|
20
|
+
owner: Prepared;
|
|
21
|
+
target: Prepared;
|
|
22
|
+
/** The accessor on the owner. */
|
|
23
|
+
name: string;
|
|
24
|
+
/** The accessor on the target, when the target declares the other half. */
|
|
25
|
+
relatedName: string | undefined;
|
|
26
|
+
table: string;
|
|
27
|
+
ownerColumn: string;
|
|
28
|
+
targetColumn: string;
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LinkResult {
|
|
32
|
+
/** The accessor a `belongsTo` gives the foreign key attribute it owns. */
|
|
33
|
+
aliases: Map<RawAttribute, string>;
|
|
34
|
+
/** The reverse accessors (`hasMany` / `hasOne`) that share a foreign key attribute. */
|
|
35
|
+
reverses: Map<RawAttribute, ReverseSide>;
|
|
36
|
+
manyToMany: ManyToManyLink[];
|
|
37
|
+
}
|
|
38
|
+
/** The column of an attribute: its `field`, else the name (snake_case when the model is `underscored`). */
|
|
39
|
+
export declare function columnOf(model: Prepared, attribute: RawAttribute): string;
|
|
40
|
+
/**
|
|
41
|
+
* Applies the associations the way Sequelize does when `associate` runs: foreign key columns are added to
|
|
42
|
+
* the model that holds them (or completed when the model declares them), and the accessor names are
|
|
43
|
+
* recorded so the relations can be named and paired.
|
|
44
|
+
*/
|
|
45
|
+
export declare function linkAssociations(prepared: Prepared[], project: Project): LinkResult;
|
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import { camelize, pluralize, singularize, underscore, } from './sequelizeInflection.js';
|
|
2
|
+
function aliasKey(path, alias) {
|
|
3
|
+
return `${path}\u0000${alias}`;
|
|
4
|
+
}
|
|
5
|
+
function buildLookup(prepared) {
|
|
6
|
+
const byName = new Map();
|
|
7
|
+
const byAlias = new Map();
|
|
8
|
+
const add = (key, model) => {
|
|
9
|
+
const list = byAlias.get(key) ?? [];
|
|
10
|
+
list.push(model);
|
|
11
|
+
byAlias.set(key, list);
|
|
12
|
+
};
|
|
13
|
+
for (const model of prepared) {
|
|
14
|
+
byName.set(model.raw.modelName, model);
|
|
15
|
+
for (const alias of model.raw.aliases) {
|
|
16
|
+
add(aliasKey(model.raw.file.path, alias), model);
|
|
17
|
+
add(alias, model);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return { byName, byAlias };
|
|
21
|
+
}
|
|
22
|
+
function resolveModel(reference, path, lookup) {
|
|
23
|
+
const local = lookup.byAlias.get(aliasKey(path, reference));
|
|
24
|
+
if (local !== undefined && local.length === 1) {
|
|
25
|
+
return local[0];
|
|
26
|
+
}
|
|
27
|
+
const byName = lookup.byName.get(reference);
|
|
28
|
+
if (byName !== undefined) {
|
|
29
|
+
return byName;
|
|
30
|
+
}
|
|
31
|
+
const shared = lookup.byAlias.get(reference);
|
|
32
|
+
return shared !== undefined && shared.length === 1 ? shared[0] : undefined;
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Names the way Sequelize derives them
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
function singularName(model) {
|
|
38
|
+
return model.options.nameSingular ?? singularize(model.raw.modelName);
|
|
39
|
+
}
|
|
40
|
+
function pluralName(model) {
|
|
41
|
+
return model.options.namePlural ?? pluralize(model.raw.modelName);
|
|
42
|
+
}
|
|
43
|
+
function attributeOf(model, name) {
|
|
44
|
+
return model.raw.attributes.find((attribute) => attribute.name === name);
|
|
45
|
+
}
|
|
46
|
+
/** The first primary key attribute, which Sequelize calls `primaryKeyAttribute`. */
|
|
47
|
+
function primaryKeyName(model) {
|
|
48
|
+
return (model.raw.attributes.find((attribute) => attribute.primaryKey === true)?.name ?? 'id');
|
|
49
|
+
}
|
|
50
|
+
function lowerFirst(text) {
|
|
51
|
+
return text.charAt(0).toLowerCase() + text.slice(1);
|
|
52
|
+
}
|
|
53
|
+
/** The column of an attribute: its `field`, else the name (snake_case when the model is `underscored`). */
|
|
54
|
+
export function columnOf(model, attribute) {
|
|
55
|
+
return (attribute.field ??
|
|
56
|
+
(model.options.underscored ? underscore(attribute.name) : attribute.name));
|
|
57
|
+
}
|
|
58
|
+
function copyColumnType(target, source) {
|
|
59
|
+
if (source === undefined) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (source.type !== undefined) {
|
|
63
|
+
target.type = source.type;
|
|
64
|
+
}
|
|
65
|
+
if (source.tsType !== undefined) {
|
|
66
|
+
target.tsType = source.tsType;
|
|
67
|
+
}
|
|
68
|
+
if (source.enumValues !== undefined) {
|
|
69
|
+
target.enumValues = source.enumValues;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** The column settings of an attribute definition, without its identity and without unset values. */
|
|
73
|
+
function columnSettings(attribute) {
|
|
74
|
+
const settings = {};
|
|
75
|
+
if (attribute === undefined) {
|
|
76
|
+
return settings;
|
|
77
|
+
}
|
|
78
|
+
for (const [key, value] of Object.entries(attribute)) {
|
|
79
|
+
if (key !== 'name' && key !== 'origin' && value !== undefined) {
|
|
80
|
+
Object.assign(settings, { [key]: value });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return settings;
|
|
84
|
+
}
|
|
85
|
+
/** Adds the foreign key column an association needs, or completes the one the model already declares. */
|
|
86
|
+
function injectKey(spec, project) {
|
|
87
|
+
const existing = attributeOf(spec.holder, spec.name);
|
|
88
|
+
const template = spec.key?.attribute;
|
|
89
|
+
const keyAttribute = spec.keyOwner === undefined || spec.keyAttribute === undefined
|
|
90
|
+
? undefined
|
|
91
|
+
: attributeOf(spec.keyOwner, spec.keyAttribute);
|
|
92
|
+
let attribute;
|
|
93
|
+
let allowNullForDefault;
|
|
94
|
+
if (existing === undefined) {
|
|
95
|
+
attribute = { name: spec.name, origin: 'foreignKey', allowNull: true };
|
|
96
|
+
copyColumnType(attribute, keyAttribute);
|
|
97
|
+
Object.assign(attribute, columnSettings(template));
|
|
98
|
+
spec.holder.raw.attributes.push(attribute);
|
|
99
|
+
allowNullForDefault = attribute.allowNull === true;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
attribute = existing;
|
|
103
|
+
// Sequelize decides the default action before it completes the column.
|
|
104
|
+
allowNullForDefault = existing.allowNull === true;
|
|
105
|
+
if (attribute.type === undefined) {
|
|
106
|
+
copyColumnType(attribute, keyAttribute);
|
|
107
|
+
}
|
|
108
|
+
if (attribute.allowNull === undefined) {
|
|
109
|
+
attribute.allowNull = template?.allowNull ?? true;
|
|
110
|
+
}
|
|
111
|
+
// What the model declares wins over what the foreignKey option adds.
|
|
112
|
+
Object.assign(attribute, {
|
|
113
|
+
...columnSettings(template),
|
|
114
|
+
...columnSettings(attribute),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const constrained = spec.constraints !== false ||
|
|
118
|
+
spec.onDelete !== undefined ||
|
|
119
|
+
spec.onUpdate !== undefined;
|
|
120
|
+
const keyIsComposite = spec.keyOwner !== undefined &&
|
|
121
|
+
spec.keyOwner.raw.attributes.filter((candidate) => candidate.primaryKey === true).length > 1 &&
|
|
122
|
+
keyAttribute?.primaryKey === true;
|
|
123
|
+
if (constrained &&
|
|
124
|
+
!keyIsComposite &&
|
|
125
|
+
attribute.link === undefined &&
|
|
126
|
+
attribute.references === undefined) {
|
|
127
|
+
const onDelete = attribute.onDelete ??
|
|
128
|
+
spec.onDelete ??
|
|
129
|
+
(spec.constraints === false
|
|
130
|
+
? undefined
|
|
131
|
+
: spec.defaultOnDelete(allowNullForDefault));
|
|
132
|
+
const onUpdate = attribute.onUpdate ??
|
|
133
|
+
spec.onUpdate ??
|
|
134
|
+
(spec.constraints === false ? undefined : 'CASCADE');
|
|
135
|
+
const link = {
|
|
136
|
+
target: spec.keyOwner?.raw,
|
|
137
|
+
targetName: spec.keyOwnerName,
|
|
138
|
+
keyAttribute: spec.keyAttribute,
|
|
139
|
+
constraint: true,
|
|
140
|
+
...(onDelete === undefined ? {} : { onDelete }),
|
|
141
|
+
...(onUpdate === undefined ? {} : { onUpdate }),
|
|
142
|
+
};
|
|
143
|
+
attribute.link = link;
|
|
144
|
+
}
|
|
145
|
+
else if (spec.constraints === false && attribute.link === undefined) {
|
|
146
|
+
project.warnings.push(`${spec.holder.raw.location}, field "${attribute.name}": the association uses constraints: false, so there is no foreign key in the database; the column is read as a plain column.`);
|
|
147
|
+
}
|
|
148
|
+
return attribute;
|
|
149
|
+
}
|
|
150
|
+
function sameThrough(first, second) {
|
|
151
|
+
if (first.throughModel !== undefined || second.throughModel !== undefined) {
|
|
152
|
+
return first.throughModel === second.throughModel;
|
|
153
|
+
}
|
|
154
|
+
return first.table === second.table;
|
|
155
|
+
}
|
|
156
|
+
function planManyToMany(assoc, source, target, lookup, project) {
|
|
157
|
+
const through = assoc.options.through;
|
|
158
|
+
if (through === undefined) {
|
|
159
|
+
project.warnings.push(`${assoc.label}: belongsToMany needs a through option (a table name or a model); the association was skipped.`);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
const isSelf = source === target;
|
|
163
|
+
const as = assoc.options.as;
|
|
164
|
+
if (isSelf && as === undefined) {
|
|
165
|
+
project.warnings.push(`${assoc.label}: a many-to-many association to the same model needs an "as"; the association was skipped.`);
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const alias = as ?? pluralName(target);
|
|
169
|
+
let throughModel;
|
|
170
|
+
if (through.model !== undefined) {
|
|
171
|
+
throughModel = resolveModel(through.model, assoc.file.path, lookup);
|
|
172
|
+
if (throughModel === undefined) {
|
|
173
|
+
project.warnings.push(`${assoc.label}: the through model "${through.model}" is not in the input; the association was skipped.`);
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else if (through.table !== undefined) {
|
|
178
|
+
// A string that names a defined model uses that model.
|
|
179
|
+
throughModel = lookup.byName.get(through.table);
|
|
180
|
+
}
|
|
181
|
+
// sequelize-typescript finds the keys through @ForeignKey on the join model.
|
|
182
|
+
const hints = assoc.owner !== undefined && throughModel !== undefined
|
|
183
|
+
? hintedKeys(throughModel, source, target)
|
|
184
|
+
: [undefined, undefined];
|
|
185
|
+
const sourceKey = assoc.options.sourceKey ?? primaryKeyName(source);
|
|
186
|
+
const targetKey = assoc.options.targetKey ?? primaryKeyName(target);
|
|
187
|
+
const foreignKey = assoc.options.foreignKey?.name ??
|
|
188
|
+
hints[0] ??
|
|
189
|
+
camelize(`${singularName(source)}_${sourceKey}`);
|
|
190
|
+
const otherKey = assoc.options.otherKey?.name ??
|
|
191
|
+
hints[1] ??
|
|
192
|
+
camelize(`${isSelf ? singularize(alias) : singularName(target)}_${targetKey}`);
|
|
193
|
+
return {
|
|
194
|
+
assoc,
|
|
195
|
+
source,
|
|
196
|
+
target,
|
|
197
|
+
as: alias,
|
|
198
|
+
foreignKey,
|
|
199
|
+
otherKey,
|
|
200
|
+
otherKeyIsDefault: assoc.options.otherKey?.name === undefined && hints[1] === undefined,
|
|
201
|
+
table: throughModel === undefined ? through.table : undefined,
|
|
202
|
+
throughModel,
|
|
203
|
+
paired: undefined,
|
|
204
|
+
consumed: false,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/** The join model's attributes marked `@ForeignKey` for the source and for the target model. */
|
|
208
|
+
function hintedKeys(join, source, target) {
|
|
209
|
+
const pointsAt = (model, hint) => model.raw.aliases.includes(hint) || model.raw.modelName === hint;
|
|
210
|
+
const hints = [...join.raw.foreignKeyHints.entries()];
|
|
211
|
+
const fromSource = hints.find(([, hint]) => pointsAt(source, hint));
|
|
212
|
+
const fromTarget = hints.find(([name, hint]) => pointsAt(target, hint) && name !== fromSource?.[0]);
|
|
213
|
+
return [fromSource?.[0], fromTarget?.[0]];
|
|
214
|
+
}
|
|
215
|
+
/** Injects the two key columns into an explicit join model. */
|
|
216
|
+
function injectJoinModel(plan, project) {
|
|
217
|
+
const join = plan.throughModel;
|
|
218
|
+
if (join === undefined) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const options = plan.assoc.options;
|
|
222
|
+
// A join model without a key of its own loses the generated `id`; the two keys become its primary key.
|
|
223
|
+
const generated = join.raw.attributes.find((attribute) => attribute.origin === 'id' && attribute.primaryKey === true);
|
|
224
|
+
if (generated !== undefined) {
|
|
225
|
+
join.raw.attributes.splice(join.raw.attributes.indexOf(generated), 1);
|
|
226
|
+
}
|
|
227
|
+
const sourceKey = options.sourceKey ?? primaryKeyName(plan.source);
|
|
228
|
+
const targetKey = options.targetKey ?? primaryKeyName(plan.target);
|
|
229
|
+
const hasOwnKey = join.raw.attributes.some((attribute) => attribute.primaryKey === true &&
|
|
230
|
+
attribute.name !== plan.foreignKey &&
|
|
231
|
+
attribute.name !== plan.otherKey);
|
|
232
|
+
const uniqueName = `${join.tableName}_${plan.foreignKey}_${plan.otherKey}_unique`;
|
|
233
|
+
const keys = [
|
|
234
|
+
[plan.foreignKey, plan.source, sourceKey, options.foreignKey],
|
|
235
|
+
[plan.otherKey, plan.target, targetKey, options.otherKey],
|
|
236
|
+
];
|
|
237
|
+
for (const [name, owner, keyAttribute, key] of keys) {
|
|
238
|
+
const attribute = injectKey({
|
|
239
|
+
holder: join,
|
|
240
|
+
name,
|
|
241
|
+
key,
|
|
242
|
+
keyOwner: owner,
|
|
243
|
+
keyOwnerName: owner.irName,
|
|
244
|
+
keyAttribute,
|
|
245
|
+
onDelete: options.onDelete,
|
|
246
|
+
onUpdate: options.onUpdate,
|
|
247
|
+
constraints: options.constraints,
|
|
248
|
+
defaultOnDelete: () => 'CASCADE',
|
|
249
|
+
}, project);
|
|
250
|
+
if (!hasOwnKey) {
|
|
251
|
+
attribute.primaryKey = true;
|
|
252
|
+
}
|
|
253
|
+
else if (options.through?.unique !== false &&
|
|
254
|
+
attribute.unique === undefined) {
|
|
255
|
+
attribute.unique = { name: uniqueName };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
// Entry point
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
/**
|
|
263
|
+
* Applies the associations the way Sequelize does when `associate` runs: foreign key columns are added to
|
|
264
|
+
* the model that holds them (or completed when the model declares them), and the accessor names are
|
|
265
|
+
* recorded so the relations can be named and paired.
|
|
266
|
+
*/
|
|
267
|
+
export function linkAssociations(prepared, project) {
|
|
268
|
+
const lookup = buildLookup(prepared);
|
|
269
|
+
const result = {
|
|
270
|
+
aliases: new Map(),
|
|
271
|
+
reverses: new Map(),
|
|
272
|
+
manyToMany: [],
|
|
273
|
+
};
|
|
274
|
+
const plans = [];
|
|
275
|
+
for (const assoc of project.associations) {
|
|
276
|
+
for (const unsupported of assoc.options.unsupported) {
|
|
277
|
+
project.warnings.push(`${assoc.label}: the ${unsupported} option has no equivalent and was ignored.`);
|
|
278
|
+
}
|
|
279
|
+
const sourceName = assoc.owner !== undefined
|
|
280
|
+
? undefined
|
|
281
|
+
: assoc.source === 'this'
|
|
282
|
+
? assoc.enclosing
|
|
283
|
+
: assoc.source;
|
|
284
|
+
const source = assoc.owner !== undefined
|
|
285
|
+
? prepared.find((model) => model.raw === assoc.owner)
|
|
286
|
+
: sourceName === undefined
|
|
287
|
+
? undefined
|
|
288
|
+
: resolveModel(sourceName, assoc.file.path, lookup);
|
|
289
|
+
if (source === undefined) {
|
|
290
|
+
project.warnings.push(`${assoc.file.label}: ${assoc.label} is called on "${sourceName ?? assoc.source}", which is not a model in the input; the association was skipped.`);
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
const target = resolveModel(assoc.target, assoc.file.path, lookup);
|
|
294
|
+
resolveFromHints(assoc, source, target);
|
|
295
|
+
switch (assoc.kind) {
|
|
296
|
+
case 'belongsTo':
|
|
297
|
+
linkBelongsTo(assoc, source, target, result, project);
|
|
298
|
+
break;
|
|
299
|
+
case 'hasMany':
|
|
300
|
+
case 'hasOne':
|
|
301
|
+
linkHasOneOrMany(assoc, source, target, result, project);
|
|
302
|
+
break;
|
|
303
|
+
case 'belongsToMany': {
|
|
304
|
+
if (target === undefined) {
|
|
305
|
+
project.warnings.push(`${assoc.label}: "${assoc.target}" is not a model in the input; the many-to-many association was skipped.`);
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
const plan = planManyToMany(assoc, source, target, lookup, project);
|
|
309
|
+
if (plan !== undefined) {
|
|
310
|
+
plans.push(plan);
|
|
311
|
+
}
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
linkManyToMany(plans, result, project);
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
/** sequelize-typescript finds a foreign key through `@ForeignKey(() => Model)` when none is named. */
|
|
320
|
+
function resolveFromHints(assoc, source, target) {
|
|
321
|
+
if (assoc.owner === undefined ||
|
|
322
|
+
assoc.options.foreignKey !== undefined ||
|
|
323
|
+
target === undefined) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const holder = assoc.kind === 'belongsTo' ? source.raw : target.raw;
|
|
327
|
+
const pointsAt = assoc.kind === 'belongsTo' ? target.raw : source.raw;
|
|
328
|
+
if (assoc.kind === 'belongsToMany') {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const names = [...holder.foreignKeyHints.entries()]
|
|
332
|
+
.filter(([, model]) => pointsAt.aliases.includes(model) || pointsAt.modelName === model)
|
|
333
|
+
.map(([name]) => name);
|
|
334
|
+
const only = names[0];
|
|
335
|
+
if (only !== undefined) {
|
|
336
|
+
assoc.options.foreignKey = {
|
|
337
|
+
name: only,
|
|
338
|
+
attribute: { name: only, origin: 'foreignKey' },
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
function linkBelongsTo(assoc, source, target, result, project) {
|
|
343
|
+
const targetName = target?.irName ?? assoc.target;
|
|
344
|
+
const as = assoc.options.as ??
|
|
345
|
+
(target === undefined ? singularize(assoc.target) : singularName(target));
|
|
346
|
+
const targetPrimaryKey = target === undefined ? 'id' : primaryKeyName(target);
|
|
347
|
+
const name = assoc.options.foreignKey?.name ?? camelize(`${as}_${targetPrimaryKey}`);
|
|
348
|
+
const attribute = injectKey({
|
|
349
|
+
holder: source,
|
|
350
|
+
name,
|
|
351
|
+
key: assoc.options.foreignKey,
|
|
352
|
+
keyOwner: target,
|
|
353
|
+
keyOwnerName: targetName,
|
|
354
|
+
keyAttribute: assoc.options.targetKey ?? targetPrimaryKey,
|
|
355
|
+
onDelete: assoc.options.onDelete,
|
|
356
|
+
onUpdate: assoc.options.onUpdate,
|
|
357
|
+
constraints: assoc.options.constraints,
|
|
358
|
+
defaultOnDelete: (allowNull) => allowNull ? 'SET NULL' : 'NO ACTION',
|
|
359
|
+
}, project);
|
|
360
|
+
if (!result.aliases.has(attribute)) {
|
|
361
|
+
result.aliases.set(attribute, lowerFirst(as));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
function linkHasOneOrMany(assoc, source, target, result, project) {
|
|
365
|
+
if (target === undefined) {
|
|
366
|
+
project.warnings.push(`${assoc.label}: "${assoc.target}" is not a model in the input, so the foreign key it needs could not be added; the association was skipped.`);
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const isMany = assoc.kind === 'hasMany';
|
|
370
|
+
const as = assoc.options.as ?? (isMany ? pluralName(target) : singularName(target));
|
|
371
|
+
const sourceKey = assoc.options.sourceKey ?? primaryKeyName(source);
|
|
372
|
+
// hasOne names the key after its alias when it has one; hasMany always uses the model.
|
|
373
|
+
const keyBase = isMany
|
|
374
|
+
? singularName(source)
|
|
375
|
+
: singularize(assoc.options.as ?? source.raw.modelName);
|
|
376
|
+
const name = assoc.options.foreignKey?.name ??
|
|
377
|
+
camelize(`${keyBase}_${primaryKeyName(source)}`);
|
|
378
|
+
const attribute = injectKey({
|
|
379
|
+
holder: target,
|
|
380
|
+
name,
|
|
381
|
+
key: assoc.options.foreignKey,
|
|
382
|
+
keyOwner: source,
|
|
383
|
+
keyOwnerName: source.irName,
|
|
384
|
+
keyAttribute: sourceKey,
|
|
385
|
+
onDelete: assoc.options.onDelete,
|
|
386
|
+
onUpdate: assoc.options.onUpdate,
|
|
387
|
+
constraints: assoc.options.constraints,
|
|
388
|
+
defaultOnDelete: (allowNull) => allowNull ? 'SET NULL' : 'CASCADE',
|
|
389
|
+
}, project);
|
|
390
|
+
if (!result.reverses.has(attribute)) {
|
|
391
|
+
result.reverses.set(attribute, {
|
|
392
|
+
name: lowerFirst(as),
|
|
393
|
+
kind: isMany ? 'hasMany' : 'hasOne',
|
|
394
|
+
label: assoc.label,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
function linkManyToMany(plans, result, project) {
|
|
399
|
+
// Two declarations over the same join table are the two halves of one relation.
|
|
400
|
+
for (const [index, plan] of plans.entries()) {
|
|
401
|
+
if (plan.paired !== undefined) {
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
const other = plans
|
|
405
|
+
.slice(index + 1)
|
|
406
|
+
.find((candidate) => candidate.paired === undefined &&
|
|
407
|
+
candidate.source === plan.target &&
|
|
408
|
+
candidate.target === plan.source &&
|
|
409
|
+
sameThrough(plan, candidate));
|
|
410
|
+
if (other !== undefined) {
|
|
411
|
+
plan.paired = other;
|
|
412
|
+
other.paired = plan;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
for (const plan of plans) {
|
|
416
|
+
const paired = plan.paired;
|
|
417
|
+
if (paired !== undefined && plan.otherKeyIsDefault) {
|
|
418
|
+
plan.otherKey = paired.foreignKey;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
for (const plan of plans) {
|
|
422
|
+
if (plan.throughModel !== undefined) {
|
|
423
|
+
injectJoinModel(plan, project);
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
const paired = plan.paired;
|
|
427
|
+
if (plan.consumed) {
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
if (paired !== undefined) {
|
|
431
|
+
paired.consumed = true;
|
|
432
|
+
}
|
|
433
|
+
const table = plan.table ?? '';
|
|
434
|
+
// The join model is defined with the options of the model the association is called on.
|
|
435
|
+
const underscored = plan.source.options.underscored;
|
|
436
|
+
const column = (name, key) => key?.attribute.field ?? (underscored ? underscore(name) : name);
|
|
437
|
+
result.manyToMany.push({
|
|
438
|
+
owner: plan.source,
|
|
439
|
+
target: plan.target,
|
|
440
|
+
name: lowerFirst(plan.as),
|
|
441
|
+
relatedName: paired === undefined ? undefined : lowerFirst(paired.as),
|
|
442
|
+
table,
|
|
443
|
+
ownerColumn: column(plan.foreignKey, plan.assoc.options.foreignKey),
|
|
444
|
+
targetColumn: column(plan.otherKey, plan.assoc.options.otherKey),
|
|
445
|
+
label: plan.assoc.label,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
//# sourceMappingURL=sequelizeAssociations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequelizeAssociations.js","sourceRoot":"","sources":["../../src/parsers/sequelizeAssociations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type SyntaxNode } from './typescriptSyntax.js';
|
|
2
|
+
import type { AssociationOptions, FileInfo, ModelOptions, Project, RawAttribute, RawIndex, RawModel } from './sequelizeModel.js';
|
|
3
|
+
/** What the walk needs to resolve names: the file being read and the project it belongs to. */
|
|
4
|
+
export interface Ctx {
|
|
5
|
+
file: FileInfo;
|
|
6
|
+
project: Project;
|
|
7
|
+
}
|
|
8
|
+
export declare function stripWrappers(node: SyntaxNode): SyntaxNode;
|
|
9
|
+
export declare function describeFile(path: string, root: SyntaxNode): FileInfo;
|
|
10
|
+
/** Follows `const x = ...` references (also across files) until a node that is not a plain name. */
|
|
11
|
+
export declare function resolveNode(node: SyntaxNode, ctx: Ctx): SyntaxNode;
|
|
12
|
+
interface ObjectEntries {
|
|
13
|
+
entries: Map<string, SyntaxNode>;
|
|
14
|
+
/** True when a spread or computed key could not be followed. */
|
|
15
|
+
incomplete: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** The `key: value` entries of an object literal, following identifiers and spreads of known objects. */
|
|
18
|
+
export declare function objectEntries(node: SyntaxNode, ctx: Ctx): ObjectEntries;
|
|
19
|
+
export declare function argsOf(call: SyntaxNode): SyntaxNode[];
|
|
20
|
+
/** Reads one attribute definition: `{ type, allowNull, ... }` or a bare `DataTypes.X`. */
|
|
21
|
+
export declare function readAttribute(name: string, node: SyntaxNode, ctx: Ctx): RawAttribute;
|
|
22
|
+
/** Applies the options of an attribute object (`allowNull`, `unique`, ...) to an attribute. */
|
|
23
|
+
export declare function applyAttributeEntries(attribute: RawAttribute, entries: Map<string, SyntaxNode>, ctx: Ctx): void;
|
|
24
|
+
export declare function readAssociationOptions(node: SyntaxNode | undefined, ctx: Ctx): AssociationOptions;
|
|
25
|
+
/** Reads the options of a model, with the project defaults and the decorators' contributions below them. */
|
|
26
|
+
export declare function readModelOptions(model: RawModel, project: Project): ModelOptions;
|
|
27
|
+
/** Reads the `indexes` option (and the `uniqueKeys` option) of a model. */
|
|
28
|
+
export declare function readIndexes(model: RawModel, project: Project): RawIndex[];
|
|
29
|
+
/** Merges indexes that several properties contributed under one name into a composite index. */
|
|
30
|
+
export declare function mergeNamedIndexes(indexes: RawIndex[]): RawIndex[];
|
|
31
|
+
/** Walks one file and records its models, association calls and the shared `define` defaults. */
|
|
32
|
+
export declare function collectFile(file: FileInfo, project: Project): void;
|
|
33
|
+
export {};
|