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/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("Entity metadata has not been bootstrapped");
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
  };