@mikro-orm/core 7.0.0-dev.23 → 7.0.0-dev.231

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.
Files changed (209) hide show
  1. package/EntityManager.d.ts +91 -59
  2. package/EntityManager.js +303 -251
  3. package/MikroORM.d.ts +44 -35
  4. package/MikroORM.js +109 -143
  5. package/README.md +2 -0
  6. package/cache/FileCacheAdapter.d.ts +1 -1
  7. package/cache/FileCacheAdapter.js +17 -8
  8. package/cache/GeneratedCacheAdapter.d.ts +0 -1
  9. package/cache/GeneratedCacheAdapter.js +0 -2
  10. package/cache/index.d.ts +0 -1
  11. package/cache/index.js +0 -1
  12. package/connections/Connection.d.ts +12 -5
  13. package/connections/Connection.js +21 -12
  14. package/drivers/DatabaseDriver.d.ts +25 -16
  15. package/drivers/DatabaseDriver.js +118 -35
  16. package/drivers/IDatabaseDriver.d.ts +42 -19
  17. package/entity/BaseEntity.d.ts +61 -2
  18. package/entity/BaseEntity.js +0 -3
  19. package/entity/Collection.d.ts +101 -29
  20. package/entity/Collection.js +436 -104
  21. package/entity/EntityAssigner.d.ts +1 -1
  22. package/entity/EntityAssigner.js +26 -18
  23. package/entity/EntityFactory.d.ts +7 -1
  24. package/entity/EntityFactory.js +83 -54
  25. package/entity/EntityHelper.d.ts +2 -2
  26. package/entity/EntityHelper.js +48 -15
  27. package/entity/EntityLoader.d.ts +7 -6
  28. package/entity/EntityLoader.js +221 -93
  29. package/entity/EntityRepository.d.ts +27 -7
  30. package/entity/EntityRepository.js +8 -2
  31. package/entity/PolymorphicRef.d.ts +12 -0
  32. package/entity/PolymorphicRef.js +18 -0
  33. package/entity/Reference.d.ts +1 -5
  34. package/entity/Reference.js +21 -12
  35. package/entity/WrappedEntity.d.ts +0 -5
  36. package/entity/WrappedEntity.js +2 -7
  37. package/entity/defineEntity.d.ts +380 -310
  38. package/entity/defineEntity.js +124 -273
  39. package/entity/index.d.ts +2 -2
  40. package/entity/index.js +2 -2
  41. package/entity/utils.js +1 -1
  42. package/entity/validators.d.ts +11 -0
  43. package/entity/validators.js +65 -0
  44. package/enums.d.ts +8 -6
  45. package/enums.js +2 -1
  46. package/errors.d.ts +20 -10
  47. package/errors.js +55 -23
  48. package/events/EventManager.d.ts +2 -1
  49. package/events/EventManager.js +19 -11
  50. package/hydration/Hydrator.js +1 -2
  51. package/hydration/ObjectHydrator.d.ts +4 -4
  52. package/hydration/ObjectHydrator.js +87 -35
  53. package/index.d.ts +2 -2
  54. package/index.js +1 -2
  55. package/logging/DefaultLogger.d.ts +1 -1
  56. package/logging/DefaultLogger.js +1 -0
  57. package/logging/SimpleLogger.d.ts +1 -1
  58. package/logging/colors.d.ts +1 -1
  59. package/logging/colors.js +7 -6
  60. package/logging/index.d.ts +1 -0
  61. package/logging/index.js +1 -0
  62. package/logging/inspect.d.ts +2 -0
  63. package/logging/inspect.js +11 -0
  64. package/metadata/EntitySchema.d.ts +47 -23
  65. package/metadata/EntitySchema.js +92 -33
  66. package/metadata/MetadataDiscovery.d.ts +64 -9
  67. package/metadata/MetadataDiscovery.js +778 -325
  68. package/metadata/MetadataProvider.d.ts +11 -2
  69. package/metadata/MetadataProvider.js +46 -2
  70. package/metadata/MetadataStorage.d.ts +13 -11
  71. package/metadata/MetadataStorage.js +70 -37
  72. package/metadata/MetadataValidator.d.ts +32 -9
  73. package/metadata/MetadataValidator.js +196 -41
  74. package/metadata/discover-entities.d.ts +5 -0
  75. package/metadata/discover-entities.js +40 -0
  76. package/metadata/index.d.ts +1 -1
  77. package/metadata/index.js +1 -1
  78. package/metadata/types.d.ts +526 -0
  79. package/metadata/types.js +1 -0
  80. package/naming-strategy/AbstractNamingStrategy.d.ts +16 -4
  81. package/naming-strategy/AbstractNamingStrategy.js +20 -2
  82. package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
  83. package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
  84. package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
  85. package/naming-strategy/MongoNamingStrategy.js +6 -6
  86. package/naming-strategy/NamingStrategy.d.ts +28 -4
  87. package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
  88. package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
  89. package/not-supported.d.ts +2 -0
  90. package/not-supported.js +4 -0
  91. package/package.json +19 -11
  92. package/platforms/ExceptionConverter.js +1 -1
  93. package/platforms/Platform.d.ts +7 -14
  94. package/platforms/Platform.js +20 -43
  95. package/serialization/EntitySerializer.d.ts +5 -0
  96. package/serialization/EntitySerializer.js +47 -27
  97. package/serialization/EntityTransformer.js +28 -18
  98. package/serialization/SerializationContext.d.ts +6 -6
  99. package/serialization/SerializationContext.js +3 -3
  100. package/types/ArrayType.d.ts +1 -1
  101. package/types/ArrayType.js +2 -3
  102. package/types/BigIntType.d.ts +8 -6
  103. package/types/BigIntType.js +1 -1
  104. package/types/BlobType.d.ts +0 -1
  105. package/types/BlobType.js +0 -3
  106. package/types/BooleanType.d.ts +1 -0
  107. package/types/BooleanType.js +3 -0
  108. package/types/DecimalType.d.ts +6 -4
  109. package/types/DecimalType.js +2 -2
  110. package/types/DoubleType.js +1 -1
  111. package/types/EnumArrayType.js +1 -2
  112. package/types/JsonType.d.ts +1 -1
  113. package/types/JsonType.js +7 -2
  114. package/types/TinyIntType.js +1 -1
  115. package/types/Type.d.ts +2 -4
  116. package/types/Type.js +3 -3
  117. package/types/Uint8ArrayType.d.ts +0 -1
  118. package/types/Uint8ArrayType.js +1 -4
  119. package/types/index.d.ts +1 -1
  120. package/typings.d.ts +381 -171
  121. package/typings.js +97 -44
  122. package/unit-of-work/ChangeSet.d.ts +4 -6
  123. package/unit-of-work/ChangeSet.js +4 -5
  124. package/unit-of-work/ChangeSetComputer.d.ts +1 -3
  125. package/unit-of-work/ChangeSetComputer.js +35 -14
  126. package/unit-of-work/ChangeSetPersister.d.ts +7 -3
  127. package/unit-of-work/ChangeSetPersister.js +83 -25
  128. package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
  129. package/unit-of-work/CommitOrderCalculator.js +13 -13
  130. package/unit-of-work/IdentityMap.d.ts +12 -0
  131. package/unit-of-work/IdentityMap.js +39 -1
  132. package/unit-of-work/UnitOfWork.d.ts +27 -3
  133. package/unit-of-work/UnitOfWork.js +258 -92
  134. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  135. package/utils/AbstractSchemaGenerator.js +28 -17
  136. package/utils/AsyncContext.d.ts +6 -0
  137. package/utils/AsyncContext.js +42 -0
  138. package/utils/Configuration.d.ts +795 -209
  139. package/utils/Configuration.js +150 -192
  140. package/utils/ConfigurationLoader.d.ts +1 -54
  141. package/utils/ConfigurationLoader.js +1 -352
  142. package/utils/Cursor.d.ts +0 -3
  143. package/utils/Cursor.js +24 -11
  144. package/utils/DataloaderUtils.d.ts +10 -5
  145. package/utils/DataloaderUtils.js +29 -12
  146. package/utils/EntityComparator.d.ts +16 -9
  147. package/utils/EntityComparator.js +158 -58
  148. package/utils/QueryHelper.d.ts +18 -6
  149. package/utils/QueryHelper.js +76 -23
  150. package/utils/RawQueryFragment.d.ts +28 -34
  151. package/utils/RawQueryFragment.js +35 -71
  152. package/utils/RequestContext.js +2 -2
  153. package/utils/TransactionContext.js +2 -2
  154. package/utils/TransactionManager.js +28 -4
  155. package/utils/Utils.d.ts +14 -127
  156. package/utils/Utils.js +85 -397
  157. package/utils/clone.js +8 -23
  158. package/utils/env-vars.d.ts +7 -0
  159. package/utils/env-vars.js +97 -0
  160. package/utils/fs-utils.d.ts +33 -0
  161. package/utils/fs-utils.js +192 -0
  162. package/utils/index.d.ts +1 -1
  163. package/utils/index.js +1 -1
  164. package/utils/upsert-utils.d.ts +9 -4
  165. package/utils/upsert-utils.js +46 -3
  166. package/decorators/Check.d.ts +0 -3
  167. package/decorators/Check.js +0 -13
  168. package/decorators/CreateRequestContext.d.ts +0 -3
  169. package/decorators/CreateRequestContext.js +0 -32
  170. package/decorators/Embeddable.d.ts +0 -8
  171. package/decorators/Embeddable.js +0 -11
  172. package/decorators/Embedded.d.ts +0 -12
  173. package/decorators/Embedded.js +0 -18
  174. package/decorators/Entity.d.ts +0 -33
  175. package/decorators/Entity.js +0 -12
  176. package/decorators/Enum.d.ts +0 -9
  177. package/decorators/Enum.js +0 -16
  178. package/decorators/Filter.d.ts +0 -2
  179. package/decorators/Filter.js +0 -8
  180. package/decorators/Formula.d.ts +0 -4
  181. package/decorators/Formula.js +0 -15
  182. package/decorators/Indexed.d.ts +0 -19
  183. package/decorators/Indexed.js +0 -20
  184. package/decorators/ManyToMany.d.ts +0 -42
  185. package/decorators/ManyToMany.js +0 -14
  186. package/decorators/ManyToOne.d.ts +0 -34
  187. package/decorators/ManyToOne.js +0 -14
  188. package/decorators/OneToMany.d.ts +0 -28
  189. package/decorators/OneToMany.js +0 -17
  190. package/decorators/OneToOne.d.ts +0 -28
  191. package/decorators/OneToOne.js +0 -7
  192. package/decorators/PrimaryKey.d.ts +0 -8
  193. package/decorators/PrimaryKey.js +0 -20
  194. package/decorators/Property.d.ts +0 -250
  195. package/decorators/Property.js +0 -32
  196. package/decorators/Transactional.d.ts +0 -14
  197. package/decorators/Transactional.js +0 -28
  198. package/decorators/hooks.d.ts +0 -16
  199. package/decorators/hooks.js +0 -47
  200. package/decorators/index.d.ts +0 -17
  201. package/decorators/index.js +0 -17
  202. package/entity/ArrayCollection.d.ts +0 -118
  203. package/entity/ArrayCollection.js +0 -407
  204. package/entity/EntityValidator.d.ts +0 -19
  205. package/entity/EntityValidator.js +0 -150
  206. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  207. package/metadata/ReflectMetadataProvider.js +0 -44
  208. package/utils/resolveContextProvider.d.ts +0 -10
  209. package/utils/resolveContextProvider.js +0 -28
@@ -10,7 +10,7 @@ export class EntitySchema {
10
10
  * so we can use the class in `entities` option just like the EntitySchema instance.
11
11
  */
12
12
  static REGISTRY = new Map();
13
- _meta = new EntityMetadata();
13
+ _meta;
14
14
  internal = false;
15
15
  initialized = false;
16
16
  constructor(meta) {
@@ -18,15 +18,14 @@ export class EntitySchema {
18
18
  if (meta.name) {
19
19
  meta.abstract ??= false;
20
20
  }
21
+ this._meta = new EntityMetadata({
22
+ className: meta.name,
23
+ ...meta,
24
+ });
25
+ this._meta.root ??= this._meta;
21
26
  if (meta.class && !meta.internal) {
22
27
  EntitySchema.REGISTRY.set(meta.class, this);
23
28
  }
24
- if (meta.tableName || meta.collection) {
25
- Utils.renameKey(meta, 'tableName', 'collection');
26
- meta.tableName = meta.collection;
27
- }
28
- Object.assign(this._meta, { className: meta.name }, meta);
29
- this._meta.root ??= this._meta;
30
29
  }
31
30
  static fromMetadata(meta) {
32
31
  const schema = new EntitySchema({ ...meta, internal: true });
@@ -35,12 +34,12 @@ export class EntitySchema {
35
34
  }
36
35
  addProperty(name, type, options = {}) {
37
36
  this.renameCompositeOptions(name, options);
38
- const prop = { name, kind: ReferenceKind.SCALAR, ...options, type: this.normalizeType(options, type) };
37
+ const prop = { name, kind: ReferenceKind.SCALAR, ...options, ...this.normalizeType(options, type) };
39
38
  if (type && Type.isMappedType(type.prototype)) {
40
39
  prop.type = type;
41
40
  }
42
- if (Utils.isString(prop.formula)) {
43
- const formula = prop.formula; // tmp var is needed here
41
+ if (typeof prop.formula === 'string') {
42
+ const formula = prop.formula;
44
43
  prop.formula = () => formula;
45
44
  }
46
45
  if (prop.formula) {
@@ -75,7 +74,7 @@ export class EntitySchema {
75
74
  }
76
75
  addSerializedPrimaryKey(name, type, options = {}) {
77
76
  this._meta.serializedPrimaryKey = name;
78
- this.addProperty(name, type, options);
77
+ this.addProperty(name, type, { serializedPrimaryKey: true, ...options });
79
78
  }
80
79
  addEmbedded(name, options) {
81
80
  this.renameCompositeOptions(name, options);
@@ -85,8 +84,8 @@ export class EntitySchema {
85
84
  }
86
85
  this._meta.properties[name] = {
87
86
  name,
88
- type: this.normalizeType(options),
89
87
  kind: ReferenceKind.EMBEDDED,
88
+ ...this.normalizeType(options),
90
89
  ...options,
91
90
  };
92
91
  }
@@ -151,21 +150,29 @@ export class EntitySchema {
151
150
  setExtends(base) {
152
151
  this._meta.extends = base;
153
152
  }
154
- setClass(proto) {
155
- const sameClass = this._meta.className === proto.name;
156
- this._meta.class = proto;
157
- this._meta.prototype = proto.prototype;
158
- this._meta.className = proto.name;
153
+ setClass(cls) {
154
+ const oldClass = this._meta.class;
155
+ const sameClass = this._meta.class === cls;
156
+ this._meta.class = cls;
157
+ this._meta.prototype = cls.prototype;
158
+ this._meta.className = this._meta.name ?? cls.name;
159
159
  if (!sameClass || !this._meta.constructorParams) {
160
- const tokens = Utils.tokenize(proto);
161
- this._meta.constructorParams = Utils.getParamNames(tokens, 'constructor');
162
- this._meta.toJsonParams = Utils.getParamNames(tokens, 'toJSON').filter(p => p !== '...args');
160
+ this._meta.constructorParams = Utils.getConstructorParams(cls);
163
161
  }
164
162
  if (!this.internal) {
165
- EntitySchema.REGISTRY.set(proto, this);
163
+ // Remove old class from registry if it's being replaced with a different class
164
+ if (oldClass && oldClass !== cls && EntitySchema.REGISTRY.get(oldClass) === this) {
165
+ EntitySchema.REGISTRY.delete(oldClass);
166
+ }
167
+ EntitySchema.REGISTRY.set(cls, this);
166
168
  }
167
- if (Object.getPrototypeOf(proto) !== BaseEntity) {
168
- this._meta.extends = this._meta.extends || Object.getPrototypeOf(proto).name || undefined;
169
+ const base = Object.getPrototypeOf(cls);
170
+ // Only set extends if the parent is NOT the auto-generated class for this same entity.
171
+ // When the user extends the auto-generated class (from defineEntity without a class option)
172
+ // and registers their custom class via setClass, we don't want to discover the
173
+ // auto-generated class as a separate parent entity.
174
+ if (base !== BaseEntity && base.name !== this._meta.className) {
175
+ this._meta.extends ??= base.name ? base : undefined;
169
176
  }
170
177
  }
171
178
  get meta() {
@@ -174,6 +181,18 @@ export class EntitySchema {
174
181
  get name() {
175
182
  return this._meta.className;
176
183
  }
184
+ get tableName() {
185
+ return this._meta.tableName;
186
+ }
187
+ get class() {
188
+ return this._meta.class;
189
+ }
190
+ get properties() {
191
+ return this._meta.properties;
192
+ }
193
+ new(...params) {
194
+ return new this._meta.class(...params);
195
+ }
177
196
  /**
178
197
  * @internal
179
198
  */
@@ -181,19 +200,16 @@ export class EntitySchema {
181
200
  if (this.initialized) {
182
201
  return this;
183
202
  }
184
- if (!this._meta.class) {
185
- const name = this.name;
186
- this._meta.class = ({ [name]: class {
187
- } })[name];
188
- }
189
203
  this.setClass(this._meta.class);
190
- if (this._meta.abstract && !this._meta.discriminatorColumn) {
204
+ // Abstract TPT entities keep their name because they have their own table
205
+ const isTPT = this._meta.inheritance === 'tpt' || this.isPartOfTPTHierarchy();
206
+ if (this._meta.abstract && !this._meta.discriminatorColumn && !isTPT) {
191
207
  delete this._meta.name;
192
208
  }
193
209
  const tableName = this._meta.collection ?? this._meta.tableName;
194
210
  if (tableName?.includes('.') && !this._meta.schema) {
195
211
  this._meta.schema = tableName.substring(0, tableName.indexOf('.'));
196
- this._meta.collection = tableName.substring(tableName.indexOf('.') + 1);
212
+ this._meta.tableName = tableName.substring(tableName.indexOf('.') + 1);
197
213
  }
198
214
  this.initProperties();
199
215
  this.initPrimaryKeys();
@@ -202,6 +218,24 @@ export class EntitySchema {
202
218
  this.initialized = true;
203
219
  return this;
204
220
  }
221
+ /**
222
+ * Check if this entity is part of a TPT hierarchy by walking up the extends chain.
223
+ * This handles mid-level abstract entities (e.g., Animal -> Mammal -> Dog where Mammal is abstract).
224
+ */
225
+ isPartOfTPTHierarchy() {
226
+ let parent = this._meta.extends;
227
+ while (parent) {
228
+ const parentSchema = parent instanceof EntitySchema ? parent : EntitySchema.REGISTRY.get(parent);
229
+ if (!parentSchema) {
230
+ break;
231
+ }
232
+ if (parentSchema._meta.inheritance === 'tpt') {
233
+ return true;
234
+ }
235
+ parent = parentSchema._meta.extends;
236
+ }
237
+ return false;
238
+ }
205
239
  initProperties() {
206
240
  Utils.entries(this._meta.properties).forEach(([name, options]) => {
207
241
  if (Type.isMappedType(options.type)) {
@@ -259,12 +293,15 @@ export class EntitySchema {
259
293
  }
260
294
  normalizeType(options, type) {
261
295
  if ('entity' in options) {
262
- if (Utils.isString(options.entity)) {
263
- type = options.type = options.entity;
296
+ /* v8 ignore next */
297
+ if (typeof options.entity === 'string') {
298
+ throw new Error(`Relation target needs to be an entity class or EntitySchema instance, string '${options.entity}' given instead for ${this._meta.className}.${options.name}.`);
264
299
  }
265
300
  else if (options.entity) {
266
301
  const tmp = options.entity();
267
302
  type = options.type = Array.isArray(tmp) ? tmp.map(t => Utils.className(t)).sort().join(' | ') : Utils.className(tmp);
303
+ const target = tmp instanceof EntitySchema ? tmp.meta.class : tmp;
304
+ return { type, target };
268
305
  }
269
306
  }
270
307
  if (type instanceof Function) {
@@ -273,7 +310,7 @@ export class EntitySchema {
273
310
  if (['String', 'Number', 'Boolean', 'Array'].includes(type)) {
274
311
  type = type.toLowerCase();
275
312
  }
276
- return type;
313
+ return { type };
277
314
  }
278
315
  createProperty(kind, options) {
279
316
  return {
@@ -303,4 +340,26 @@ export class EntitySchema {
303
340
  this.rename(options, 'referenceColumnName', 'referencedColumnNames');
304
341
  this.rename(options, 'columnType', 'columnTypes');
305
342
  }
343
+ /**
344
+ * Adds a lifecycle hook handler to the entity schema.
345
+ * This method allows registering hooks after the entity is defined,
346
+ * which can be useful for avoiding circular type references.
347
+ *
348
+ * @example
349
+ * ```ts
350
+ * export const Article = defineEntity({
351
+ * name: 'Article',
352
+ * properties: { ... },
353
+ * });
354
+ *
355
+ * Article.addHook('beforeCreate', async args => {
356
+ * args.entity.slug = args.entity.title.toLowerCase();
357
+ * });
358
+ * ```
359
+ */
360
+ addHook(event, handler) {
361
+ this._meta.hooks[event] ??= [];
362
+ this._meta.hooks[event].push(handler);
363
+ return this;
364
+ }
306
365
  }
@@ -1,4 +1,4 @@
1
- import { type Constructor, EntityMetadata } from '../typings.js';
1
+ import { type EntityClass, EntityMetadata, type EntityName } from '../typings.js';
2
2
  import type { Configuration } from '../utils/Configuration.js';
3
3
  import { MetadataStorage } from './MetadataStorage.js';
4
4
  import { EntitySchema } from './EntitySchema.js';
@@ -9,26 +9,24 @@ export declare class MetadataDiscovery {
9
9
  private readonly config;
10
10
  private readonly namingStrategy;
11
11
  private readonly metadataProvider;
12
- private readonly cache;
13
12
  private readonly logger;
14
13
  private readonly schemaHelper;
15
14
  private readonly validator;
16
15
  private readonly discovered;
17
16
  constructor(metadata: MetadataStorage, platform: Platform, config: Configuration);
18
17
  discover(preferTs?: boolean): Promise<MetadataStorage>;
19
- discoverSync(preferTs?: boolean): MetadataStorage;
18
+ discoverSync(): MetadataStorage;
20
19
  private mapDiscoveredEntities;
20
+ private initAccessors;
21
21
  processDiscoveredEntities(discovered: EntityMetadata[]): EntityMetadata[];
22
22
  private findEntities;
23
23
  private discoverMissingTargets;
24
24
  private tryDiscoverTargets;
25
- private discoverDirectories;
26
- discoverReferences<T>(refs: (Constructor<T> | EntitySchema<T>)[]): EntityMetadata<T>[];
27
- reset(className: string): void;
28
- private prepare;
25
+ discoverReferences<T>(refs: Iterable<EntityClass<T> | EntitySchema<T>>, validate?: boolean): EntityMetadata<T>[];
26
+ reset<T>(entityName: EntityName<T>): void;
29
27
  private getSchema;
28
+ private getRootEntity;
30
29
  private discoverEntity;
31
- private saveToCache;
32
30
  private initNullability;
33
31
  private applyNamingStrategy;
34
32
  private initOwnColumns;
@@ -36,6 +34,7 @@ export declare class MetadataDiscovery {
36
34
  private initManyToOneFieldName;
37
35
  private initManyToManyFieldName;
38
36
  private initManyToManyFields;
37
+ private isExplicitTableName;
39
38
  private initManyToOneFields;
40
39
  private initOneToManyFields;
41
40
  private processEntity;
@@ -43,15 +42,72 @@ export declare class MetadataDiscovery {
43
42
  private initFactoryField;
44
43
  private ensureCorrectFKOrderInPivotEntity;
45
44
  private definePivotTableEntity;
45
+ /**
46
+ * Create a scalar property for a pivot table column.
47
+ */
48
+ private createPivotScalarProperty;
49
+ /**
50
+ * Get column types for an entity's primary keys, initializing them if needed.
51
+ */
52
+ private getPrimaryKeyColumnTypes;
53
+ /**
54
+ * Add missing FK columns for a polymorphic entity to an existing pivot table.
55
+ */
56
+ private addPolymorphicPivotColumns;
57
+ /**
58
+ * Define properties for a polymorphic pivot table.
59
+ */
60
+ private definePolymorphicPivotProperties;
61
+ /**
62
+ * Create a virtual M:1 relation from pivot to a polymorphic owner entity.
63
+ * This enables single-query join loading for inverse-side polymorphic M:N.
64
+ */
65
+ private definePolymorphicOwnerRelation;
46
66
  private defineFixedOrderProperty;
47
67
  private definePivotProperty;
48
68
  private autoWireBidirectionalProperties;
49
69
  private defineBaseEntityProperties;
50
70
  private initPolyEmbeddables;
71
+ private initPolymorphicRelation;
51
72
  private initEmbeddables;
52
73
  private initSingleTableInheritance;
74
+ /**
75
+ * First pass of TPT initialization: sets up hierarchy relationships
76
+ * (inheritanceType, tptParent, tptChildren) before properties have fieldNames.
77
+ */
78
+ private initTPTRelationships;
79
+ /**
80
+ * Second pass of TPT initialization: re-resolves metadata references after fieldNames
81
+ * are set, syncs to registry metadata, and sets up discriminators.
82
+ */
83
+ private finalizeTPTInheritance;
84
+ /**
85
+ * Initialize TPT discriminator map and virtual discriminator property.
86
+ * Unlike STI where the discriminator is a persisted column, TPT discriminator is computed
87
+ * at query time using CASE WHEN expressions based on which child table has data.
88
+ */
89
+ private initTPTDiscriminator;
90
+ /**
91
+ * Recursively collect all TPT descendants (children, grandchildren, etc.)
92
+ */
93
+ private collectAllTPTDescendants;
94
+ /**
95
+ * Computes ownProps for TPT entities - only properties defined in THIS entity,
96
+ * not inherited from parent. Also creates synthetic join properties for parent/child relationships.
97
+ *
98
+ * Called multiple times during discovery as metadata is progressively built.
99
+ * Each pass overwrites earlier results to reflect the final state of properties.
100
+ */
101
+ private computeTPTOwnProps;
102
+ /** Returns the depth of a TPT entity in its hierarchy (0 for root). */
103
+ private getTPTDepth;
104
+ /**
105
+ * Find the direct TPT parent entity for the given entity.
106
+ */
107
+ private getTPTParent;
53
108
  private createDiscriminatorProperty;
54
109
  private initAutoincrement;
110
+ private createSchemaTable;
55
111
  private initCheckConstraints;
56
112
  private initGeneratedColumn;
57
113
  private getDefaultVersionValue;
@@ -66,6 +122,5 @@ export declare class MetadataDiscovery {
66
122
  private getPrefix;
67
123
  private initUnsigned;
68
124
  private initIndexes;
69
- private getEntityClassOrSchema;
70
125
  private shouldForceConstructorUsage;
71
126
  }