@mikro-orm/core 7.0.4 → 7.0.5-dev.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.
Files changed (206) hide show
  1. package/EntityManager.d.ts +583 -884
  2. package/EntityManager.js +1895 -1922
  3. package/MikroORM.d.ts +74 -103
  4. package/MikroORM.js +179 -178
  5. package/README.md +1 -1
  6. package/cache/CacheAdapter.d.ts +36 -36
  7. package/cache/FileCacheAdapter.d.ts +24 -30
  8. package/cache/FileCacheAdapter.js +78 -80
  9. package/cache/GeneratedCacheAdapter.d.ts +20 -18
  10. package/cache/GeneratedCacheAdapter.js +30 -30
  11. package/cache/MemoryCacheAdapter.d.ts +20 -18
  12. package/cache/MemoryCacheAdapter.js +36 -35
  13. package/cache/NullCacheAdapter.d.ts +16 -16
  14. package/cache/NullCacheAdapter.js +24 -24
  15. package/connections/Connection.d.ts +84 -95
  16. package/connections/Connection.js +168 -165
  17. package/drivers/DatabaseDriver.d.ts +80 -186
  18. package/drivers/DatabaseDriver.js +443 -450
  19. package/drivers/IDatabaseDriver.d.ts +301 -440
  20. package/entity/BaseEntity.d.ts +83 -120
  21. package/entity/BaseEntity.js +43 -43
  22. package/entity/Collection.d.ts +179 -212
  23. package/entity/Collection.js +721 -727
  24. package/entity/EntityAssigner.d.ts +77 -88
  25. package/entity/EntityAssigner.js +230 -231
  26. package/entity/EntityFactory.d.ts +54 -66
  27. package/entity/EntityFactory.js +383 -425
  28. package/entity/EntityHelper.d.ts +22 -34
  29. package/entity/EntityHelper.js +267 -280
  30. package/entity/EntityIdentifier.d.ts +4 -4
  31. package/entity/EntityIdentifier.js +10 -10
  32. package/entity/EntityLoader.d.ts +72 -98
  33. package/entity/EntityLoader.js +723 -753
  34. package/entity/EntityRepository.d.ts +201 -316
  35. package/entity/EntityRepository.js +213 -213
  36. package/entity/PolymorphicRef.d.ts +5 -5
  37. package/entity/PolymorphicRef.js +10 -10
  38. package/entity/Reference.d.ts +82 -126
  39. package/entity/Reference.js +274 -278
  40. package/entity/WrappedEntity.d.ts +72 -115
  41. package/entity/WrappedEntity.js +166 -168
  42. package/entity/defineEntity.d.ts +636 -1315
  43. package/entity/defineEntity.js +518 -527
  44. package/entity/utils.d.ts +3 -13
  45. package/entity/utils.js +73 -71
  46. package/entity/validators.js +43 -43
  47. package/entity/wrap.js +8 -8
  48. package/enums.d.ts +253 -258
  49. package/enums.js +252 -251
  50. package/errors.d.ts +72 -114
  51. package/errors.js +253 -350
  52. package/events/EventManager.d.ts +14 -26
  53. package/events/EventManager.js +77 -79
  54. package/events/EventSubscriber.d.ts +29 -29
  55. package/events/TransactionEventBroadcaster.d.ts +8 -15
  56. package/events/TransactionEventBroadcaster.js +14 -14
  57. package/exceptions.d.ts +40 -23
  58. package/exceptions.js +52 -35
  59. package/hydration/Hydrator.d.ts +17 -42
  60. package/hydration/Hydrator.js +43 -43
  61. package/hydration/ObjectHydrator.d.ts +17 -50
  62. package/hydration/ObjectHydrator.js +416 -481
  63. package/index.d.ts +2 -116
  64. package/index.js +1 -10
  65. package/logging/DefaultLogger.d.ts +32 -34
  66. package/logging/DefaultLogger.js +86 -86
  67. package/logging/Logger.d.ts +41 -41
  68. package/logging/SimpleLogger.d.ts +11 -13
  69. package/logging/SimpleLogger.js +22 -22
  70. package/logging/colors.d.ts +6 -6
  71. package/logging/colors.js +10 -11
  72. package/logging/inspect.js +7 -7
  73. package/metadata/EntitySchema.d.ts +127 -211
  74. package/metadata/EntitySchema.js +398 -397
  75. package/metadata/MetadataDiscovery.d.ts +114 -114
  76. package/metadata/MetadataDiscovery.js +1870 -1951
  77. package/metadata/MetadataProvider.d.ts +21 -24
  78. package/metadata/MetadataProvider.js +84 -82
  79. package/metadata/MetadataStorage.d.ts +32 -38
  80. package/metadata/MetadataStorage.js +118 -118
  81. package/metadata/MetadataValidator.d.ts +39 -39
  82. package/metadata/MetadataValidator.js +338 -381
  83. package/metadata/discover-entities.d.ts +2 -5
  84. package/metadata/discover-entities.js +37 -35
  85. package/metadata/types.d.ts +531 -615
  86. package/naming-strategy/AbstractNamingStrategy.d.ts +39 -54
  87. package/naming-strategy/AbstractNamingStrategy.js +85 -90
  88. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  89. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  90. package/naming-strategy/MongoNamingStrategy.d.ts +6 -6
  91. package/naming-strategy/MongoNamingStrategy.js +18 -18
  92. package/naming-strategy/NamingStrategy.d.ts +99 -109
  93. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  94. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  95. package/not-supported.js +4 -7
  96. package/package.json +1 -1
  97. package/platforms/ExceptionConverter.d.ts +1 -1
  98. package/platforms/ExceptionConverter.js +4 -4
  99. package/platforms/Platform.d.ts +301 -310
  100. package/platforms/Platform.js +640 -663
  101. package/serialization/EntitySerializer.d.ts +26 -49
  102. package/serialization/EntitySerializer.js +218 -224
  103. package/serialization/EntityTransformer.d.ts +6 -10
  104. package/serialization/EntityTransformer.js +217 -219
  105. package/serialization/SerializationContext.d.ts +23 -27
  106. package/serialization/SerializationContext.js +105 -105
  107. package/types/ArrayType.d.ts +8 -8
  108. package/types/ArrayType.js +33 -33
  109. package/types/BigIntType.d.ts +10 -17
  110. package/types/BigIntType.js +37 -37
  111. package/types/BlobType.d.ts +3 -3
  112. package/types/BlobType.js +13 -13
  113. package/types/BooleanType.d.ts +4 -4
  114. package/types/BooleanType.js +12 -12
  115. package/types/CharacterType.d.ts +2 -2
  116. package/types/CharacterType.js +6 -6
  117. package/types/DateTimeType.d.ts +5 -5
  118. package/types/DateTimeType.js +15 -15
  119. package/types/DateType.d.ts +5 -5
  120. package/types/DateType.js +15 -15
  121. package/types/DecimalType.d.ts +7 -7
  122. package/types/DecimalType.js +26 -26
  123. package/types/DoubleType.d.ts +3 -3
  124. package/types/DoubleType.js +12 -12
  125. package/types/EnumArrayType.d.ts +5 -5
  126. package/types/EnumArrayType.js +24 -24
  127. package/types/EnumType.d.ts +3 -3
  128. package/types/EnumType.js +11 -11
  129. package/types/FloatType.d.ts +3 -3
  130. package/types/FloatType.js +9 -9
  131. package/types/IntegerType.d.ts +3 -3
  132. package/types/IntegerType.js +9 -9
  133. package/types/IntervalType.d.ts +4 -4
  134. package/types/IntervalType.js +12 -12
  135. package/types/JsonType.d.ts +8 -8
  136. package/types/JsonType.js +32 -32
  137. package/types/MediumIntType.d.ts +1 -1
  138. package/types/MediumIntType.js +3 -3
  139. package/types/SmallIntType.d.ts +3 -3
  140. package/types/SmallIntType.js +9 -9
  141. package/types/StringType.d.ts +4 -4
  142. package/types/StringType.js +12 -12
  143. package/types/TextType.d.ts +3 -3
  144. package/types/TextType.js +9 -9
  145. package/types/TimeType.d.ts +5 -5
  146. package/types/TimeType.js +17 -17
  147. package/types/TinyIntType.d.ts +3 -3
  148. package/types/TinyIntType.js +10 -10
  149. package/types/Type.d.ts +79 -83
  150. package/types/Type.js +82 -82
  151. package/types/Uint8ArrayType.d.ts +4 -4
  152. package/types/Uint8ArrayType.js +21 -21
  153. package/types/UnknownType.d.ts +4 -4
  154. package/types/UnknownType.js +12 -12
  155. package/types/UuidType.d.ts +5 -5
  156. package/types/UuidType.js +19 -19
  157. package/types/index.d.ts +49 -75
  158. package/types/index.js +26 -52
  159. package/typings.d.ts +737 -1250
  160. package/typings.js +231 -244
  161. package/unit-of-work/ChangeSet.d.ts +26 -26
  162. package/unit-of-work/ChangeSet.js +56 -56
  163. package/unit-of-work/ChangeSetComputer.d.ts +12 -12
  164. package/unit-of-work/ChangeSetComputer.js +170 -178
  165. package/unit-of-work/ChangeSetPersister.d.ts +44 -63
  166. package/unit-of-work/ChangeSetPersister.js +421 -442
  167. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  168. package/unit-of-work/CommitOrderCalculator.js +88 -89
  169. package/unit-of-work/IdentityMap.d.ts +31 -31
  170. package/unit-of-work/IdentityMap.js +105 -105
  171. package/unit-of-work/UnitOfWork.d.ts +141 -181
  172. package/unit-of-work/UnitOfWork.js +1183 -1200
  173. package/utils/AbstractMigrator.d.ts +91 -111
  174. package/utils/AbstractMigrator.js +275 -275
  175. package/utils/AbstractSchemaGenerator.d.ts +34 -43
  176. package/utils/AbstractSchemaGenerator.js +122 -121
  177. package/utils/AsyncContext.d.ts +3 -3
  178. package/utils/AsyncContext.js +35 -34
  179. package/utils/Configuration.d.ts +808 -852
  180. package/utils/Configuration.js +344 -359
  181. package/utils/Cursor.d.ts +22 -40
  182. package/utils/Cursor.js +127 -135
  183. package/utils/DataloaderUtils.d.ts +43 -58
  184. package/utils/DataloaderUtils.js +198 -203
  185. package/utils/EntityComparator.d.ts +81 -98
  186. package/utils/EntityComparator.js +732 -828
  187. package/utils/NullHighlighter.d.ts +1 -1
  188. package/utils/NullHighlighter.js +3 -3
  189. package/utils/QueryHelper.d.ts +51 -79
  190. package/utils/QueryHelper.js +361 -372
  191. package/utils/RawQueryFragment.d.ts +34 -50
  192. package/utils/RawQueryFragment.js +105 -107
  193. package/utils/RequestContext.d.ts +32 -32
  194. package/utils/RequestContext.js +53 -52
  195. package/utils/TransactionContext.d.ts +16 -16
  196. package/utils/TransactionContext.js +27 -27
  197. package/utils/TransactionManager.d.ts +58 -58
  198. package/utils/TransactionManager.js +197 -199
  199. package/utils/Utils.d.ts +145 -204
  200. package/utils/Utils.js +812 -812
  201. package/utils/clone.js +113 -104
  202. package/utils/env-vars.js +88 -90
  203. package/utils/fs-utils.d.ts +15 -15
  204. package/utils/fs-utils.js +181 -180
  205. package/utils/upsert-utils.d.ts +5 -20
  206. package/utils/upsert-utils.js +116 -114
@@ -1,225 +1,141 @@
1
- import {
2
- EntityMetadata,
3
- type AnyEntity,
4
- type EntityKey,
5
- type Constructor,
6
- type DeepPartial,
7
- type EntityName,
8
- type EntityProperty,
9
- type CleanKeys,
10
- type ExpandProperty,
11
- type IsNever,
12
- type EntityCtor,
13
- } from '../typings.js';
1
+ import { EntityMetadata, type AnyEntity, type EntityKey, type Constructor, type DeepPartial, type EntityName, type EntityProperty, type CleanKeys, type ExpandProperty, type IsNever, type EntityCtor } from '../typings.js';
14
2
  import { type EventType, ReferenceKind } from '../enums.js';
15
3
  import type { EventArgs } from '../events/EventSubscriber.js';
16
4
  import { Type } from '../types/Type.js';
17
- import type {
18
- PropertyOptions,
19
- ManyToOneOptions,
20
- OneToOneOptions,
21
- OneToManyOptions,
22
- ManyToManyOptions,
23
- EmbeddedOptions,
24
- EnumOptions,
25
- PrimaryKeyOptions,
26
- SerializedPrimaryKeyOptions,
27
- IndexOptions,
28
- UniqueOptions,
29
- } from './types.js';
30
- type TypeType =
31
- | string
32
- | NumberConstructor
33
- | StringConstructor
34
- | BooleanConstructor
35
- | DateConstructor
36
- | ArrayConstructor
37
- | Constructor<Type<any>>
38
- | Type<any>;
39
- type TypeDef<Target> =
40
- | {
41
- type: TypeType;
42
- }
43
- | {
44
- entity: () => EntityName<Target> | EntityName[];
45
- };
46
- type EmbeddedTypeDef<Target> =
47
- | {
48
- type: TypeType;
49
- }
50
- | {
51
- entity: () => EntityName<Target> | EntityName[];
52
- };
5
+ import type { PropertyOptions, ManyToOneOptions, OneToOneOptions, OneToManyOptions, ManyToManyOptions, EmbeddedOptions, EnumOptions, PrimaryKeyOptions, SerializedPrimaryKeyOptions, IndexOptions, UniqueOptions } from './types.js';
6
+ type TypeType = string | NumberConstructor | StringConstructor | BooleanConstructor | DateConstructor | ArrayConstructor | Constructor<Type<any>> | Type<any>;
7
+ type TypeDef<Target> = {
8
+ type: TypeType;
9
+ } | {
10
+ entity: () => EntityName<Target> | EntityName[];
11
+ };
12
+ type EmbeddedTypeDef<Target> = {
13
+ type: TypeType;
14
+ } | {
15
+ entity: () => EntityName<Target> | EntityName[];
16
+ };
53
17
  /** Union type representing all possible property definition shapes in an EntitySchema. */
54
- export type EntitySchemaProperty<Target, Owner> =
55
- | ({
56
- kind: ReferenceKind.MANY_TO_ONE | 'm:1';
57
- } & TypeDef<Target> &
58
- ManyToOneOptions<Owner, Target>)
59
- | ({
60
- kind: ReferenceKind.ONE_TO_ONE | '1:1';
61
- } & TypeDef<Target> &
62
- OneToOneOptions<Owner, Target>)
63
- | ({
64
- kind: ReferenceKind.ONE_TO_MANY | '1:m';
65
- } & TypeDef<Target> &
66
- OneToManyOptions<Owner, Target>)
67
- | ({
68
- kind: ReferenceKind.MANY_TO_MANY | 'm:n';
69
- } & TypeDef<Target> &
70
- ManyToManyOptions<Owner, Target>)
71
- | ({
72
- kind: ReferenceKind.EMBEDDED | 'embedded';
73
- } & EmbeddedTypeDef<Target> &
74
- EmbeddedOptions<Owner, Target> &
75
- PropertyOptions<Owner>)
76
- | ({
77
- enum: true;
78
- } & EnumOptions<Owner>)
79
- | (TypeDef<Target> & PropertyOptions<Owner>);
18
+ export type EntitySchemaProperty<Target, Owner> = ({
19
+ kind: ReferenceKind.MANY_TO_ONE | 'm:1';
20
+ } & TypeDef<Target> & ManyToOneOptions<Owner, Target>) | ({
21
+ kind: ReferenceKind.ONE_TO_ONE | '1:1';
22
+ } & TypeDef<Target> & OneToOneOptions<Owner, Target>) | ({
23
+ kind: ReferenceKind.ONE_TO_MANY | '1:m';
24
+ } & TypeDef<Target> & OneToManyOptions<Owner, Target>) | ({
25
+ kind: ReferenceKind.MANY_TO_MANY | 'm:n';
26
+ } & TypeDef<Target> & ManyToManyOptions<Owner, Target>) | ({
27
+ kind: ReferenceKind.EMBEDDED | 'embedded';
28
+ } & EmbeddedTypeDef<Target> & EmbeddedOptions<Owner, Target> & PropertyOptions<Owner>) | ({
29
+ enum: true;
30
+ } & EnumOptions<Owner>) | (TypeDef<Target> & PropertyOptions<Owner>);
80
31
  type OmitBaseProps<Entity, Base> = IsNever<Base> extends true ? Entity : Omit<Entity, keyof Base>;
81
32
  /** Configuration object for defining an entity via EntitySchema. */
82
- export type EntitySchemaMetadata<Entity, Base = never, Class extends EntityCtor = EntityCtor<Entity>> = Omit<
83
- Partial<EntityMetadata<Entity>>,
84
- 'name' | 'properties' | 'extends'
85
- > &
86
- (
87
- | {
88
- name: string;
89
- }
90
- | {
91
- class: Class;
92
- name?: string;
93
- }
94
- ) & {
33
+ export type EntitySchemaMetadata<Entity, Base = never, Class extends EntityCtor = EntityCtor<Entity>> = Omit<Partial<EntityMetadata<Entity>>, 'name' | 'properties' | 'extends'> & ({
34
+ name: string;
35
+ } | {
36
+ class: Class;
37
+ name?: string;
38
+ }) & {
95
39
  extends?: EntityName<Base>;
96
- } & {
40
+ } & {
97
41
  properties?: {
98
- [Key in keyof OmitBaseProps<Entity, Base> as CleanKeys<OmitBaseProps<Entity, Base>, Key>]-?: EntitySchemaProperty<
99
- ExpandProperty<NonNullable<Entity[Key]>>,
100
- Entity
101
- >;
42
+ [Key in keyof OmitBaseProps<Entity, Base> as CleanKeys<OmitBaseProps<Entity, Base>, Key>]-?: EntitySchemaProperty<ExpandProperty<NonNullable<Entity[Key]>>, Entity>;
102
43
  };
103
- } & {
44
+ } & {
104
45
  inheritance?: 'tpt';
105
- };
46
+ };
106
47
  /** Class-less entity definition that provides a programmatic API for defining entities without decorators. */
107
48
  export declare class EntitySchema<Entity = any, Base = never, Class extends EntityCtor = EntityCtor<Entity>> {
108
- /**
109
- * When schema links the entity class via `class` option, this registry allows the lookup from opposite side,
110
- * so we can use the class in `entities` option just like the EntitySchema instance.
111
- */
112
- static REGISTRY: Map<AnyEntity, EntitySchema>;
113
- /** @internal Type-level marker for fast entity type inference */
114
- readonly '~entity': Entity;
115
- private readonly _meta;
116
- private internal;
117
- private initialized;
118
- constructor(meta: EntitySchemaMetadata<Entity, Base, Class>);
119
- /**
120
- * Checks if the given value is an EntitySchema instance, using duck-typing
121
- * as a fallback when `instanceof` fails due to CJS/ESM dual-package hazard
122
- * (e.g. when using `tsx` or `@swc-node/register` with `"type": "commonjs"` projects).
123
- */
124
- static is(item: unknown): item is EntitySchema;
125
- /** Creates an EntitySchema from existing EntityMetadata (used internally). */
126
- static fromMetadata<T = AnyEntity, U = never>(
127
- meta: EntityMetadata<T> | DeepPartial<EntityMetadata<T>>,
128
- ): EntitySchema<T, U>;
129
- /** Adds a scalar property to the entity schema. */
130
- addProperty(
131
- name: EntityKey<Entity>,
132
- type?: TypeType,
133
- options?: PropertyOptions<Entity> | EntityProperty<Entity>,
134
- ): void;
135
- /** Adds an enum property to the entity schema. */
136
- addEnum(name: EntityKey<Entity>, type?: TypeType, options?: EnumOptions<Entity>): void;
137
- /** Adds a version property for optimistic locking. */
138
- addVersion(name: EntityKey<Entity>, type: TypeType, options?: PropertyOptions<Entity>): void;
139
- /** Adds a primary key property to the entity schema. */
140
- addPrimaryKey(name: EntityKey<Entity>, type: TypeType, options?: PrimaryKeyOptions<Entity>): void;
141
- /** Adds a serialized primary key property (e.g. for MongoDB ObjectId). */
142
- addSerializedPrimaryKey(name: EntityKey<Entity>, type: TypeType, options?: SerializedPrimaryKeyOptions<Entity>): void;
143
- /** Adds an embedded property to the entity schema. */
144
- addEmbedded<Target = AnyEntity>(name: EntityKey<Entity>, options: EmbeddedOptions<Entity, Target>): void;
145
- /** Adds a many-to-one relation to the entity schema. */
146
- addManyToOne<Target = AnyEntity>(
147
- name: EntityKey<Entity>,
148
- type: TypeType,
149
- options: ManyToOneOptions<Entity, Target>,
150
- ): void;
151
- /** Adds a many-to-many relation to the entity schema. */
152
- addManyToMany<Target = AnyEntity>(
153
- name: EntityKey<Entity>,
154
- type: TypeType,
155
- options: ManyToManyOptions<Entity, Target>,
156
- ): void;
157
- /** Adds a one-to-many relation to the entity schema. */
158
- addOneToMany<Target = AnyEntity>(
159
- name: EntityKey<Entity>,
160
- type: TypeType,
161
- options: OneToManyOptions<Entity, Target>,
162
- ): void;
163
- /** Adds a one-to-one relation to the entity schema. */
164
- addOneToOne<Target = AnyEntity>(
165
- name: EntityKey<Entity>,
166
- type: TypeType,
167
- options: OneToOneOptions<Entity, Target>,
168
- ): void;
169
- /** Adds an index definition to the entity schema. */
170
- addIndex<Key extends string>(options: IndexOptions<Entity, Key>): void;
171
- /** Adds a unique constraint definition to the entity schema. */
172
- addUnique<Key extends string>(options: UniqueOptions<Entity, Key>): void;
173
- /** Sets a custom repository class for this entity. */
174
- setCustomRepository(repository: () => Constructor): void;
175
- /** Sets the base entity that this schema extends. */
176
- setExtends(base: EntityName): void;
177
- /** Sets or replaces the entity class associated with this schema. */
178
- setClass(cls: Class): void;
179
- /** Returns the underlying EntityMetadata. */
180
- get meta(): EntityMetadata<Entity, Class>;
181
- /** Returns the entity class name. */
182
- get name(): string | EntityName<Entity>;
183
- /** Returns the database table name. */
184
- get tableName(): string;
185
- get class(): Class;
186
- get properties(): Record<string, any>;
187
- new(...params: ConstructorParameters<Class>): Entity;
188
- /**
189
- * @internal
190
- */
191
- init(): this;
192
- /**
193
- * Check if this entity is part of a TPT hierarchy by walking up the extends chain.
194
- * This handles mid-level abstract entities (e.g., Animal -> Mammal -> Dog where Mammal is abstract).
195
- */
196
- private isPartOfTPTHierarchy;
197
- private initProperties;
198
- private initPrimaryKeys;
199
- private normalizeType;
200
- private createProperty;
201
- private rename;
202
- private renameCompositeOptions;
203
- /**
204
- * Adds a lifecycle hook handler to the entity schema.
205
- * This method allows registering hooks after the entity is defined,
206
- * which can be useful for avoiding circular type references.
207
- *
208
- * @example
209
- * ```ts
210
- * export const Article = defineEntity({
211
- * name: 'Article',
212
- * properties: { ... },
213
- * });
214
- *
215
- * Article.addHook('beforeCreate', async args => {
216
- * args.entity.slug = args.entity.title.toLowerCase();
217
- * });
218
- * ```
219
- */
220
- addHook<T extends Entity = Entity>(
221
- event: EventType | `${EventType}`,
222
- handler: (args: EventArgs<T>) => void | Promise<void>,
223
- ): this;
49
+ /**
50
+ * When schema links the entity class via `class` option, this registry allows the lookup from opposite side,
51
+ * so we can use the class in `entities` option just like the EntitySchema instance.
52
+ */
53
+ static REGISTRY: Map<AnyEntity, EntitySchema>;
54
+ /** @internal Type-level marker for fast entity type inference */
55
+ readonly '~entity': Entity;
56
+ private readonly _meta;
57
+ private internal;
58
+ private initialized;
59
+ constructor(meta: EntitySchemaMetadata<Entity, Base, Class>);
60
+ /**
61
+ * Checks if the given value is an EntitySchema instance, using duck-typing
62
+ * as a fallback when `instanceof` fails due to CJS/ESM dual-package hazard
63
+ * (e.g. when using `tsx` or `@swc-node/register` with `"type": "commonjs"` projects).
64
+ */
65
+ static is(item: unknown): item is EntitySchema;
66
+ /** Creates an EntitySchema from existing EntityMetadata (used internally). */
67
+ static fromMetadata<T = AnyEntity, U = never>(meta: EntityMetadata<T> | DeepPartial<EntityMetadata<T>>): EntitySchema<T, U>;
68
+ /** Adds a scalar property to the entity schema. */
69
+ addProperty(name: EntityKey<Entity>, type?: TypeType, options?: PropertyOptions<Entity> | EntityProperty<Entity>): void;
70
+ /** Adds an enum property to the entity schema. */
71
+ addEnum(name: EntityKey<Entity>, type?: TypeType, options?: EnumOptions<Entity>): void;
72
+ /** Adds a version property for optimistic locking. */
73
+ addVersion(name: EntityKey<Entity>, type: TypeType, options?: PropertyOptions<Entity>): void;
74
+ /** Adds a primary key property to the entity schema. */
75
+ addPrimaryKey(name: EntityKey<Entity>, type: TypeType, options?: PrimaryKeyOptions<Entity>): void;
76
+ /** Adds a serialized primary key property (e.g. for MongoDB ObjectId). */
77
+ addSerializedPrimaryKey(name: EntityKey<Entity>, type: TypeType, options?: SerializedPrimaryKeyOptions<Entity>): void;
78
+ /** Adds an embedded property to the entity schema. */
79
+ addEmbedded<Target = AnyEntity>(name: EntityKey<Entity>, options: EmbeddedOptions<Entity, Target>): void;
80
+ /** Adds a many-to-one relation to the entity schema. */
81
+ addManyToOne<Target = AnyEntity>(name: EntityKey<Entity>, type: TypeType, options: ManyToOneOptions<Entity, Target>): void;
82
+ /** Adds a many-to-many relation to the entity schema. */
83
+ addManyToMany<Target = AnyEntity>(name: EntityKey<Entity>, type: TypeType, options: ManyToManyOptions<Entity, Target>): void;
84
+ /** Adds a one-to-many relation to the entity schema. */
85
+ addOneToMany<Target = AnyEntity>(name: EntityKey<Entity>, type: TypeType, options: OneToManyOptions<Entity, Target>): void;
86
+ /** Adds a one-to-one relation to the entity schema. */
87
+ addOneToOne<Target = AnyEntity>(name: EntityKey<Entity>, type: TypeType, options: OneToOneOptions<Entity, Target>): void;
88
+ /** Adds an index definition to the entity schema. */
89
+ addIndex<Key extends string>(options: IndexOptions<Entity, Key>): void;
90
+ /** Adds a unique constraint definition to the entity schema. */
91
+ addUnique<Key extends string>(options: UniqueOptions<Entity, Key>): void;
92
+ /** Sets a custom repository class for this entity. */
93
+ setCustomRepository(repository: () => Constructor): void;
94
+ /** Sets the base entity that this schema extends. */
95
+ setExtends(base: EntityName): void;
96
+ /** Sets or replaces the entity class associated with this schema. */
97
+ setClass(cls: Class): void;
98
+ /** Returns the underlying EntityMetadata. */
99
+ get meta(): EntityMetadata<Entity, Class>;
100
+ /** Returns the entity class name. */
101
+ get name(): string | EntityName<Entity>;
102
+ /** Returns the database table name. */
103
+ get tableName(): string;
104
+ get class(): Class;
105
+ get properties(): Record<string, any>;
106
+ new(...params: ConstructorParameters<Class>): Entity;
107
+ /**
108
+ * @internal
109
+ */
110
+ init(): this;
111
+ /**
112
+ * Check if this entity is part of a TPT hierarchy by walking up the extends chain.
113
+ * This handles mid-level abstract entities (e.g., Animal -> Mammal -> Dog where Mammal is abstract).
114
+ */
115
+ private isPartOfTPTHierarchy;
116
+ private initProperties;
117
+ private initPrimaryKeys;
118
+ private normalizeType;
119
+ private createProperty;
120
+ private rename;
121
+ private renameCompositeOptions;
122
+ /**
123
+ * Adds a lifecycle hook handler to the entity schema.
124
+ * This method allows registering hooks after the entity is defined,
125
+ * which can be useful for avoiding circular type references.
126
+ *
127
+ * @example
128
+ * ```ts
129
+ * export const Article = defineEntity({
130
+ * name: 'Article',
131
+ * properties: { ... },
132
+ * });
133
+ *
134
+ * Article.addHook('beforeCreate', async args => {
135
+ * args.entity.slug = args.entity.title.toLowerCase();
136
+ * });
137
+ * ```
138
+ */
139
+ addHook<T extends Entity = Entity>(event: EventType | `${EventType}`, handler: (args: EventArgs<T>) => void | Promise<void>): this;
224
140
  }
225
141
  export {};