metal-orm 1.0.29 → 1.0.32

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.d.cts CHANGED
@@ -1359,7 +1359,6 @@ interface TediousTypes {
1359
1359
  Bit: unknown;
1360
1360
  DateTime: unknown;
1361
1361
  VarBinary: unknown;
1362
- [key: string]: unknown;
1363
1362
  }
1364
1363
  interface TediousModule {
1365
1364
  Request: TediousRequestCtor;
package/dist/index.d.ts CHANGED
@@ -1359,7 +1359,6 @@ interface TediousTypes {
1359
1359
  Bit: unknown;
1360
1360
  DateTime: unknown;
1361
1361
  VarBinary: unknown;
1362
- [key: string]: unknown;
1363
1362
  }
1364
1363
  interface TediousModule {
1365
1364
  Request: TediousRequestCtor;
package/dist/index.js CHANGED
@@ -4971,17 +4971,124 @@ var metadataMap = /* @__PURE__ */ new Map();
4971
4971
  var getEntityMetadata = (target) => {
4972
4972
  return metadataMap.get(target);
4973
4973
  };
4974
+ var getAllEntityMetadata = () => {
4975
+ return Array.from(metadataMap.values());
4976
+ };
4977
+ var buildTableDef = (meta) => {
4978
+ if (meta.table) {
4979
+ return meta.table;
4980
+ }
4981
+ const columns = Object.entries(meta.columns).reduce((acc, [key, def]) => {
4982
+ acc[key] = {
4983
+ ...def,
4984
+ name: key,
4985
+ table: meta.tableName
4986
+ };
4987
+ return acc;
4988
+ }, {});
4989
+ const table = defineTable(meta.tableName, columns, {}, meta.hooks);
4990
+ meta.table = table;
4991
+ return table;
4992
+ };
4974
4993
 
4975
4994
  // src/decorators/bootstrap.ts
4995
+ var isTableDef = (value) => {
4996
+ return typeof value === "object" && value !== null && "columns" in value;
4997
+ };
4998
+ var unwrapTarget = (target) => {
4999
+ if (typeof target === "function" && target.prototype === void 0) {
5000
+ return target();
5001
+ }
5002
+ return target;
5003
+ };
5004
+ var resolveTableTarget = (target, tableMap) => {
5005
+ const resolved = unwrapTarget(target);
5006
+ if (isTableDef(resolved)) {
5007
+ return resolved;
5008
+ }
5009
+ const table = tableMap.get(resolved);
5010
+ if (!table) {
5011
+ throw new Error(`Entity '${resolved.name}' is not registered with decorators`);
5012
+ }
5013
+ return table;
5014
+ };
5015
+ var buildRelationDefinitions = (meta, tableMap) => {
5016
+ const relations = {};
5017
+ for (const [name, relation] of Object.entries(meta.relations)) {
5018
+ switch (relation.kind) {
5019
+ case RelationKinds.HasOne: {
5020
+ relations[name] = hasOne(
5021
+ resolveTableTarget(relation.target, tableMap),
5022
+ relation.foreignKey,
5023
+ relation.localKey,
5024
+ relation.cascade
5025
+ );
5026
+ break;
5027
+ }
5028
+ case RelationKinds.HasMany: {
5029
+ relations[name] = hasMany(
5030
+ resolveTableTarget(relation.target, tableMap),
5031
+ relation.foreignKey,
5032
+ relation.localKey,
5033
+ relation.cascade
5034
+ );
5035
+ break;
5036
+ }
5037
+ case RelationKinds.BelongsTo: {
5038
+ relations[name] = belongsTo(
5039
+ resolveTableTarget(relation.target, tableMap),
5040
+ relation.foreignKey,
5041
+ relation.localKey,
5042
+ relation.cascade
5043
+ );
5044
+ break;
5045
+ }
5046
+ case RelationKinds.BelongsToMany: {
5047
+ relations[name] = belongsToMany(
5048
+ resolveTableTarget(relation.target, tableMap),
5049
+ resolveTableTarget(relation.pivotTable, tableMap),
5050
+ {
5051
+ pivotForeignKeyToRoot: relation.pivotForeignKeyToRoot,
5052
+ pivotForeignKeyToTarget: relation.pivotForeignKeyToTarget,
5053
+ localKey: relation.localKey,
5054
+ targetKey: relation.targetKey,
5055
+ pivotPrimaryKey: relation.pivotPrimaryKey,
5056
+ defaultPivotColumns: relation.defaultPivotColumns,
5057
+ cascade: relation.cascade
5058
+ }
5059
+ );
5060
+ break;
5061
+ }
5062
+ }
5063
+ }
5064
+ return relations;
5065
+ };
5066
+ var bootstrapEntities = () => {
5067
+ const metas = getAllEntityMetadata();
5068
+ const tableMap = /* @__PURE__ */ new Map();
5069
+ for (const meta of metas) {
5070
+ const table = buildTableDef(meta);
5071
+ tableMap.set(meta.target, table);
5072
+ }
5073
+ for (const meta of metas) {
5074
+ const table = meta.table;
5075
+ const relations = buildRelationDefinitions(meta, tableMap);
5076
+ table.relations = relations;
5077
+ }
5078
+ return metas.map((meta) => meta.table);
5079
+ };
4976
5080
  var getTableDefFromEntity = (ctor) => {
4977
5081
  const meta = getEntityMetadata(ctor);
4978
5082
  if (!meta) return void 0;
5083
+ if (!meta.table) {
5084
+ bootstrapEntities();
5085
+ }
4979
5086
  return meta.table;
4980
5087
  };
4981
5088
  var selectFromEntity = (ctor) => {
4982
5089
  const table = getTableDefFromEntity(ctor);
4983
5090
  if (!table) {
4984
- throw new Error("Entity metadata has not been bootstrapped");
5091
+ throw new Error(`Entity '${ctor.name}' is not registered with decorators or has not been bootstrapped`);
4985
5092
  }
4986
5093
  return new SelectQueryBuilder(table);
4987
5094
  };