metal-orm 1.0.30 → 1.0.33
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 +7 -7
- package/dist/decorators/index.cjs +4 -1
- package/dist/decorators/index.cjs.map +1 -1
- package/dist/decorators/index.js +4 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/index.cjs +108 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +108 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/decorators/bootstrap.ts +4 -1
package/dist/index.cjs
CHANGED
|
@@ -5166,17 +5166,124 @@ var metadataMap = /* @__PURE__ */ new Map();
|
|
|
5166
5166
|
var getEntityMetadata = (target) => {
|
|
5167
5167
|
return metadataMap.get(target);
|
|
5168
5168
|
};
|
|
5169
|
+
var getAllEntityMetadata = () => {
|
|
5170
|
+
return Array.from(metadataMap.values());
|
|
5171
|
+
};
|
|
5172
|
+
var buildTableDef = (meta) => {
|
|
5173
|
+
if (meta.table) {
|
|
5174
|
+
return meta.table;
|
|
5175
|
+
}
|
|
5176
|
+
const columns = Object.entries(meta.columns).reduce((acc, [key, def]) => {
|
|
5177
|
+
acc[key] = {
|
|
5178
|
+
...def,
|
|
5179
|
+
name: key,
|
|
5180
|
+
table: meta.tableName
|
|
5181
|
+
};
|
|
5182
|
+
return acc;
|
|
5183
|
+
}, {});
|
|
5184
|
+
const table = defineTable(meta.tableName, columns, {}, meta.hooks);
|
|
5185
|
+
meta.table = table;
|
|
5186
|
+
return table;
|
|
5187
|
+
};
|
|
5169
5188
|
|
|
5170
5189
|
// src/decorators/bootstrap.ts
|
|
5190
|
+
var isTableDef = (value) => {
|
|
5191
|
+
return typeof value === "object" && value !== null && "columns" in value;
|
|
5192
|
+
};
|
|
5193
|
+
var unwrapTarget = (target) => {
|
|
5194
|
+
if (typeof target === "function" && target.prototype === void 0) {
|
|
5195
|
+
return target();
|
|
5196
|
+
}
|
|
5197
|
+
return target;
|
|
5198
|
+
};
|
|
5199
|
+
var resolveTableTarget = (target, tableMap) => {
|
|
5200
|
+
const resolved = unwrapTarget(target);
|
|
5201
|
+
if (isTableDef(resolved)) {
|
|
5202
|
+
return resolved;
|
|
5203
|
+
}
|
|
5204
|
+
const table = tableMap.get(resolved);
|
|
5205
|
+
if (!table) {
|
|
5206
|
+
throw new Error(`Entity '${resolved.name}' is not registered with decorators`);
|
|
5207
|
+
}
|
|
5208
|
+
return table;
|
|
5209
|
+
};
|
|
5210
|
+
var buildRelationDefinitions = (meta, tableMap) => {
|
|
5211
|
+
const relations = {};
|
|
5212
|
+
for (const [name, relation] of Object.entries(meta.relations)) {
|
|
5213
|
+
switch (relation.kind) {
|
|
5214
|
+
case RelationKinds.HasOne: {
|
|
5215
|
+
relations[name] = hasOne(
|
|
5216
|
+
resolveTableTarget(relation.target, tableMap),
|
|
5217
|
+
relation.foreignKey,
|
|
5218
|
+
relation.localKey,
|
|
5219
|
+
relation.cascade
|
|
5220
|
+
);
|
|
5221
|
+
break;
|
|
5222
|
+
}
|
|
5223
|
+
case RelationKinds.HasMany: {
|
|
5224
|
+
relations[name] = hasMany(
|
|
5225
|
+
resolveTableTarget(relation.target, tableMap),
|
|
5226
|
+
relation.foreignKey,
|
|
5227
|
+
relation.localKey,
|
|
5228
|
+
relation.cascade
|
|
5229
|
+
);
|
|
5230
|
+
break;
|
|
5231
|
+
}
|
|
5232
|
+
case RelationKinds.BelongsTo: {
|
|
5233
|
+
relations[name] = belongsTo(
|
|
5234
|
+
resolveTableTarget(relation.target, tableMap),
|
|
5235
|
+
relation.foreignKey,
|
|
5236
|
+
relation.localKey,
|
|
5237
|
+
relation.cascade
|
|
5238
|
+
);
|
|
5239
|
+
break;
|
|
5240
|
+
}
|
|
5241
|
+
case RelationKinds.BelongsToMany: {
|
|
5242
|
+
relations[name] = belongsToMany(
|
|
5243
|
+
resolveTableTarget(relation.target, tableMap),
|
|
5244
|
+
resolveTableTarget(relation.pivotTable, tableMap),
|
|
5245
|
+
{
|
|
5246
|
+
pivotForeignKeyToRoot: relation.pivotForeignKeyToRoot,
|
|
5247
|
+
pivotForeignKeyToTarget: relation.pivotForeignKeyToTarget,
|
|
5248
|
+
localKey: relation.localKey,
|
|
5249
|
+
targetKey: relation.targetKey,
|
|
5250
|
+
pivotPrimaryKey: relation.pivotPrimaryKey,
|
|
5251
|
+
defaultPivotColumns: relation.defaultPivotColumns,
|
|
5252
|
+
cascade: relation.cascade
|
|
5253
|
+
}
|
|
5254
|
+
);
|
|
5255
|
+
break;
|
|
5256
|
+
}
|
|
5257
|
+
}
|
|
5258
|
+
}
|
|
5259
|
+
return relations;
|
|
5260
|
+
};
|
|
5261
|
+
var bootstrapEntities = () => {
|
|
5262
|
+
const metas = getAllEntityMetadata();
|
|
5263
|
+
const tableMap = /* @__PURE__ */ new Map();
|
|
5264
|
+
for (const meta of metas) {
|
|
5265
|
+
const table = buildTableDef(meta);
|
|
5266
|
+
tableMap.set(meta.target, table);
|
|
5267
|
+
}
|
|
5268
|
+
for (const meta of metas) {
|
|
5269
|
+
const table = meta.table;
|
|
5270
|
+
const relations = buildRelationDefinitions(meta, tableMap);
|
|
5271
|
+
table.relations = relations;
|
|
5272
|
+
}
|
|
5273
|
+
return metas.map((meta) => meta.table);
|
|
5274
|
+
};
|
|
5171
5275
|
var getTableDefFromEntity = (ctor) => {
|
|
5172
5276
|
const meta = getEntityMetadata(ctor);
|
|
5173
5277
|
if (!meta) return void 0;
|
|
5278
|
+
if (!meta.table) {
|
|
5279
|
+
bootstrapEntities();
|
|
5280
|
+
}
|
|
5174
5281
|
return meta.table;
|
|
5175
5282
|
};
|
|
5176
5283
|
var selectFromEntity = (ctor) => {
|
|
5177
5284
|
const table = getTableDefFromEntity(ctor);
|
|
5178
5285
|
if (!table) {
|
|
5179
|
-
throw new Error(
|
|
5286
|
+
throw new Error(`Entity '${ctor.name}' is not registered with decorators or has not been bootstrapped`);
|
|
5180
5287
|
}
|
|
5181
5288
|
return new SelectQueryBuilder(table);
|
|
5182
5289
|
};
|