@mikro-orm/core 7.0.0-dev.1 → 7.0.0-dev.100

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 (281) hide show
  1. package/EntityManager.d.ts +96 -58
  2. package/EntityManager.js +465 -395
  3. package/MikroORM.d.ts +45 -35
  4. package/MikroORM.js +109 -160
  5. package/README.md +3 -2
  6. package/cache/CacheAdapter.js +1 -2
  7. package/cache/FileCacheAdapter.d.ts +2 -2
  8. package/cache/FileCacheAdapter.js +20 -27
  9. package/cache/GeneratedCacheAdapter.d.ts +2 -3
  10. package/cache/GeneratedCacheAdapter.js +1 -7
  11. package/cache/MemoryCacheAdapter.d.ts +1 -1
  12. package/cache/MemoryCacheAdapter.js +1 -5
  13. package/cache/NullCacheAdapter.d.ts +1 -1
  14. package/cache/NullCacheAdapter.js +1 -5
  15. package/cache/index.d.ts +4 -5
  16. package/cache/index.js +4 -21
  17. package/connections/Connection.d.ts +22 -14
  18. package/connections/Connection.js +27 -23
  19. package/connections/index.d.ts +1 -1
  20. package/connections/index.js +1 -17
  21. package/drivers/DatabaseDriver.d.ts +25 -15
  22. package/drivers/DatabaseDriver.js +77 -64
  23. package/drivers/IDatabaseDriver.d.ts +40 -16
  24. package/drivers/IDatabaseDriver.js +1 -4
  25. package/drivers/index.d.ts +2 -2
  26. package/drivers/index.js +2 -18
  27. package/entity/BaseEntity.d.ts +6 -7
  28. package/entity/BaseEntity.js +16 -23
  29. package/entity/Collection.d.ts +98 -34
  30. package/entity/Collection.js +466 -131
  31. package/entity/EntityAssigner.d.ts +3 -3
  32. package/entity/EntityAssigner.js +67 -64
  33. package/entity/EntityFactory.d.ts +10 -3
  34. package/entity/EntityFactory.js +112 -91
  35. package/entity/EntityHelper.d.ts +2 -2
  36. package/entity/EntityHelper.js +66 -53
  37. package/entity/EntityIdentifier.d.ts +1 -1
  38. package/entity/EntityIdentifier.js +1 -5
  39. package/entity/EntityLoader.d.ts +8 -7
  40. package/entity/EntityLoader.js +161 -128
  41. package/entity/EntityRepository.d.ts +8 -8
  42. package/entity/EntityRepository.js +7 -11
  43. package/entity/Reference.d.ts +10 -13
  44. package/entity/Reference.js +64 -46
  45. package/entity/WrappedEntity.d.ts +12 -17
  46. package/entity/WrappedEntity.js +22 -31
  47. package/entity/defineEntity.d.ts +568 -0
  48. package/entity/defineEntity.js +529 -0
  49. package/entity/index.d.ts +14 -13
  50. package/entity/index.js +14 -29
  51. package/entity/utils.d.ts +8 -1
  52. package/entity/utils.js +22 -13
  53. package/entity/validators.d.ts +11 -0
  54. package/entity/validators.js +65 -0
  55. package/entity/wrap.d.ts +1 -1
  56. package/entity/wrap.js +2 -6
  57. package/enums.d.ts +24 -9
  58. package/enums.js +50 -41
  59. package/errors.d.ts +11 -3
  60. package/errors.js +42 -32
  61. package/events/EventManager.d.ts +5 -4
  62. package/events/EventManager.js +26 -22
  63. package/events/EventSubscriber.d.ts +8 -5
  64. package/events/EventSubscriber.js +1 -2
  65. package/events/TransactionEventBroadcaster.d.ts +3 -3
  66. package/events/TransactionEventBroadcaster.js +1 -5
  67. package/events/index.d.ts +3 -3
  68. package/events/index.js +3 -19
  69. package/exceptions.js +18 -39
  70. package/hydration/Hydrator.d.ts +5 -5
  71. package/hydration/Hydrator.js +2 -6
  72. package/hydration/ObjectHydrator.d.ts +7 -7
  73. package/hydration/ObjectHydrator.js +58 -50
  74. package/hydration/index.d.ts +2 -2
  75. package/hydration/index.js +2 -18
  76. package/index.d.ts +21 -21
  77. package/index.js +20 -46
  78. package/logging/DefaultLogger.d.ts +2 -2
  79. package/logging/DefaultLogger.js +10 -13
  80. package/logging/Logger.d.ts +1 -1
  81. package/logging/Logger.js +1 -2
  82. package/logging/SimpleLogger.d.ts +3 -3
  83. package/logging/SimpleLogger.js +2 -6
  84. package/logging/colors.js +1 -5
  85. package/logging/index.d.ts +5 -4
  86. package/logging/index.js +5 -20
  87. package/logging/inspect.d.ts +2 -0
  88. package/logging/inspect.js +16 -0
  89. package/metadata/EntitySchema.d.ts +14 -10
  90. package/metadata/EntitySchema.js +78 -64
  91. package/metadata/MetadataDiscovery.d.ts +11 -14
  92. package/metadata/MetadataDiscovery.js +278 -317
  93. package/metadata/MetadataProvider.d.ts +13 -4
  94. package/metadata/MetadataProvider.js +47 -8
  95. package/metadata/MetadataStorage.d.ts +2 -7
  96. package/metadata/MetadataStorage.js +19 -35
  97. package/metadata/MetadataValidator.d.ts +3 -10
  98. package/metadata/MetadataValidator.js +51 -64
  99. package/metadata/discover-entities.d.ts +5 -0
  100. package/metadata/discover-entities.js +40 -0
  101. package/metadata/index.d.ts +6 -6
  102. package/metadata/index.js +6 -22
  103. package/metadata/types.d.ts +480 -0
  104. package/metadata/types.js +1 -0
  105. package/naming-strategy/AbstractNamingStrategy.d.ts +7 -3
  106. package/naming-strategy/AbstractNamingStrategy.js +11 -9
  107. package/naming-strategy/EntityCaseNamingStrategy.d.ts +1 -1
  108. package/naming-strategy/EntityCaseNamingStrategy.js +2 -6
  109. package/naming-strategy/MongoNamingStrategy.d.ts +1 -1
  110. package/naming-strategy/MongoNamingStrategy.js +2 -6
  111. package/naming-strategy/NamingStrategy.d.ts +12 -2
  112. package/naming-strategy/NamingStrategy.js +1 -2
  113. package/naming-strategy/UnderscoreNamingStrategy.d.ts +1 -1
  114. package/naming-strategy/UnderscoreNamingStrategy.js +2 -6
  115. package/naming-strategy/index.d.ts +5 -5
  116. package/naming-strategy/index.js +5 -21
  117. package/not-supported.d.ts +2 -0
  118. package/not-supported.js +4 -0
  119. package/package.json +19 -20
  120. package/platforms/ExceptionConverter.d.ts +2 -2
  121. package/platforms/ExceptionConverter.js +4 -8
  122. package/platforms/Platform.d.ts +15 -22
  123. package/platforms/Platform.js +58 -88
  124. package/platforms/index.d.ts +2 -2
  125. package/platforms/index.js +2 -18
  126. package/serialization/EntitySerializer.d.ts +4 -2
  127. package/serialization/EntitySerializer.js +64 -51
  128. package/serialization/EntityTransformer.d.ts +1 -1
  129. package/serialization/EntityTransformer.js +48 -42
  130. package/serialization/SerializationContext.d.ts +2 -2
  131. package/serialization/SerializationContext.js +24 -25
  132. package/serialization/index.d.ts +3 -3
  133. package/serialization/index.js +3 -19
  134. package/types/ArrayType.d.ts +3 -3
  135. package/types/ArrayType.js +6 -11
  136. package/types/BigIntType.d.ts +12 -9
  137. package/types/BigIntType.js +6 -6
  138. package/types/BlobType.d.ts +3 -4
  139. package/types/BlobType.js +2 -11
  140. package/types/BooleanType.d.ts +5 -4
  141. package/types/BooleanType.js +5 -6
  142. package/types/CharacterType.d.ts +3 -3
  143. package/types/CharacterType.js +2 -6
  144. package/types/DateTimeType.d.ts +3 -3
  145. package/types/DateTimeType.js +2 -6
  146. package/types/DateType.d.ts +3 -3
  147. package/types/DateType.js +2 -6
  148. package/types/DecimalType.d.ts +9 -7
  149. package/types/DecimalType.js +5 -8
  150. package/types/DoubleType.d.ts +3 -3
  151. package/types/DoubleType.js +4 -7
  152. package/types/EnumArrayType.d.ts +4 -4
  153. package/types/EnumArrayType.js +4 -10
  154. package/types/EnumType.d.ts +3 -3
  155. package/types/EnumType.js +2 -6
  156. package/types/FloatType.d.ts +3 -3
  157. package/types/FloatType.js +2 -6
  158. package/types/IntegerType.d.ts +3 -3
  159. package/types/IntegerType.js +2 -6
  160. package/types/IntervalType.d.ts +3 -3
  161. package/types/IntervalType.js +2 -6
  162. package/types/JsonType.d.ts +4 -4
  163. package/types/JsonType.js +9 -8
  164. package/types/MediumIntType.d.ts +3 -3
  165. package/types/MediumIntType.js +2 -6
  166. package/types/SmallIntType.d.ts +3 -3
  167. package/types/SmallIntType.js +2 -6
  168. package/types/StringType.d.ts +3 -3
  169. package/types/StringType.js +2 -6
  170. package/types/TextType.d.ts +3 -3
  171. package/types/TextType.js +2 -6
  172. package/types/TimeType.d.ts +3 -3
  173. package/types/TimeType.js +4 -8
  174. package/types/TinyIntType.d.ts +3 -3
  175. package/types/TinyIntType.js +3 -6
  176. package/types/Type.d.ts +4 -6
  177. package/types/Type.js +6 -10
  178. package/types/Uint8ArrayType.d.ts +3 -4
  179. package/types/Uint8ArrayType.js +3 -12
  180. package/types/UnknownType.d.ts +3 -3
  181. package/types/UnknownType.js +2 -6
  182. package/types/UuidType.d.ts +3 -3
  183. package/types/UuidType.js +2 -6
  184. package/types/index.d.ts +25 -25
  185. package/types/index.js +52 -79
  186. package/typings.d.ts +134 -93
  187. package/typings.js +67 -65
  188. package/unit-of-work/ChangeSet.d.ts +1 -4
  189. package/unit-of-work/ChangeSet.js +13 -17
  190. package/unit-of-work/ChangeSetComputer.d.ts +8 -9
  191. package/unit-of-work/ChangeSetComputer.js +36 -38
  192. package/unit-of-work/ChangeSetPersister.d.ts +11 -9
  193. package/unit-of-work/ChangeSetPersister.js +100 -65
  194. package/unit-of-work/CommitOrderCalculator.d.ts +1 -1
  195. package/unit-of-work/CommitOrderCalculator.js +6 -10
  196. package/unit-of-work/IdentityMap.d.ts +1 -1
  197. package/unit-of-work/IdentityMap.js +1 -5
  198. package/unit-of-work/UnitOfWork.d.ts +16 -8
  199. package/unit-of-work/UnitOfWork.js +266 -209
  200. package/unit-of-work/index.d.ts +6 -6
  201. package/unit-of-work/index.js +6 -22
  202. package/utils/AbstractSchemaGenerator.d.ts +11 -11
  203. package/utils/AbstractSchemaGenerator.js +21 -20
  204. package/utils/Configuration.d.ts +774 -224
  205. package/utils/Configuration.js +166 -216
  206. package/utils/ConfigurationLoader.d.ts +1 -53
  207. package/utils/ConfigurationLoader.js +1 -367
  208. package/utils/Cursor.d.ts +6 -9
  209. package/utils/Cursor.js +25 -25
  210. package/utils/DataloaderUtils.d.ts +18 -8
  211. package/utils/DataloaderUtils.js +63 -21
  212. package/utils/EntityComparator.d.ts +9 -5
  213. package/utils/EntityComparator.js +155 -108
  214. package/utils/NullHighlighter.d.ts +1 -1
  215. package/utils/NullHighlighter.js +1 -5
  216. package/utils/QueryHelper.d.ts +12 -4
  217. package/utils/QueryHelper.js +110 -53
  218. package/utils/RawQueryFragment.d.ts +37 -14
  219. package/utils/RawQueryFragment.js +50 -33
  220. package/utils/RequestContext.d.ts +2 -2
  221. package/utils/RequestContext.js +3 -7
  222. package/utils/TransactionContext.d.ts +1 -1
  223. package/utils/TransactionContext.js +4 -8
  224. package/utils/TransactionManager.d.ts +65 -0
  225. package/utils/TransactionManager.js +223 -0
  226. package/utils/Utils.d.ts +16 -100
  227. package/utils/Utils.js +114 -332
  228. package/utils/clone.js +7 -11
  229. package/utils/env-vars.d.ts +3 -0
  230. package/utils/env-vars.js +87 -0
  231. package/utils/fs-utils.d.ts +12 -0
  232. package/utils/fs-utils.js +97 -0
  233. package/utils/index.d.ts +14 -13
  234. package/utils/index.js +14 -29
  235. package/utils/upsert-utils.d.ts +8 -3
  236. package/utils/upsert-utils.js +57 -10
  237. package/decorators/Check.d.ts +0 -3
  238. package/decorators/Check.js +0 -16
  239. package/decorators/CreateRequestContext.d.ts +0 -3
  240. package/decorators/CreateRequestContext.js +0 -33
  241. package/decorators/Embeddable.d.ts +0 -8
  242. package/decorators/Embeddable.js +0 -14
  243. package/decorators/Embedded.d.ts +0 -18
  244. package/decorators/Embedded.js +0 -20
  245. package/decorators/Entity.d.ts +0 -18
  246. package/decorators/Entity.js +0 -16
  247. package/decorators/Enum.d.ts +0 -9
  248. package/decorators/Enum.js +0 -19
  249. package/decorators/Filter.d.ts +0 -2
  250. package/decorators/Filter.js +0 -11
  251. package/decorators/Formula.d.ts +0 -5
  252. package/decorators/Formula.js +0 -18
  253. package/decorators/Indexed.d.ts +0 -17
  254. package/decorators/Indexed.js +0 -24
  255. package/decorators/ManyToMany.d.ts +0 -40
  256. package/decorators/ManyToMany.js +0 -16
  257. package/decorators/ManyToOne.d.ts +0 -30
  258. package/decorators/ManyToOne.js +0 -16
  259. package/decorators/OneToMany.d.ts +0 -28
  260. package/decorators/OneToMany.js +0 -20
  261. package/decorators/OneToOne.d.ts +0 -24
  262. package/decorators/OneToOne.js +0 -10
  263. package/decorators/PrimaryKey.d.ts +0 -9
  264. package/decorators/PrimaryKey.js +0 -23
  265. package/decorators/Property.d.ts +0 -250
  266. package/decorators/Property.js +0 -34
  267. package/decorators/Transactional.d.ts +0 -13
  268. package/decorators/Transactional.js +0 -31
  269. package/decorators/hooks.d.ts +0 -16
  270. package/decorators/hooks.js +0 -59
  271. package/decorators/index.d.ts +0 -17
  272. package/decorators/index.js +0 -36
  273. package/entity/ArrayCollection.d.ts +0 -116
  274. package/entity/ArrayCollection.js +0 -399
  275. package/entity/EntityValidator.d.ts +0 -19
  276. package/entity/EntityValidator.js +0 -154
  277. package/index.mjs +0 -199
  278. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  279. package/metadata/ReflectMetadataProvider.js +0 -48
  280. package/utils/resolveContextProvider.d.ts +0 -10
  281. package/utils/resolveContextProvider.js +0 -31
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EntityRepository = void 0;
4
- const errors_1 = require("../errors");
5
- const Utils_1 = require("../utils/Utils");
6
- class EntityRepository {
1
+ import { ValidationError } from '../errors.js';
2
+ import { Utils } from '../utils/Utils.js';
3
+ export class EntityRepository {
7
4
  em;
8
5
  entityName;
9
6
  constructor(em, entityName) {
@@ -191,7 +188,7 @@ class EntityRepository {
191
188
  return this.getEntityManager().count(this.entityName, where, options);
192
189
  }
193
190
  getEntityName() {
194
- return Utils_1.Utils.className(this.entityName);
191
+ return Utils.className(this.entityName);
195
192
  }
196
193
  /**
197
194
  * Returns the underlying EntityManager instance
@@ -200,15 +197,14 @@ class EntityRepository {
200
197
  return this.em;
201
198
  }
202
199
  validateRepositoryType(entities, method) {
203
- entities = Utils_1.Utils.asArray(entities);
200
+ entities = Utils.asArray(entities);
204
201
  if (entities.length === 0) {
205
202
  return;
206
203
  }
207
204
  const entityName = entities[0].constructor.name;
208
- const repoType = Utils_1.Utils.className(this.entityName);
205
+ const repoType = Utils.className(this.entityName);
209
206
  if (entityName && repoType !== entityName) {
210
- throw errors_1.ValidationError.fromWrongRepositoryType(entityName, repoType, method);
207
+ throw ValidationError.fromWrongRepositoryType(entityName, repoType, method);
211
208
  }
212
209
  }
213
210
  }
214
- exports.EntityRepository = EntityRepository;
@@ -1,8 +1,8 @@
1
- import { inspect } from 'node:util';
2
- import type { AddEager, Dictionary, EntityClass, EntityKey, EntityProperty, Loaded, LoadedReference, Primary, Ref } from '../typings';
3
- import type { FindOneOptions, FindOneOrFailOptions } from '../drivers/IDatabaseDriver';
1
+ import type { AddEager, AddOptional, Dictionary, EntityClass, EntityKey, EntityProperty, Loaded, LoadedReference, Primary, Ref } from '../typings.js';
2
+ import type { FindOneOptions, FindOneOrFailOptions } from '../drivers/IDatabaseDriver.js';
4
3
  export declare class Reference<T extends object> {
5
4
  private entity;
5
+ private property?;
6
6
  constructor(entity: T);
7
7
  static create<T extends object>(entity: T | Ref<T>): Ref<T>;
8
8
  static createFromPK<T extends object>(entityType: EntityClass<T>, pk: Primary<T>, options?: {
@@ -42,8 +42,6 @@ export declare class Reference<T extends object> {
42
42
  isInitialized(): boolean;
43
43
  populated(populated?: boolean): void;
44
44
  toJSON(...args: any[]): Dictionary;
45
- /** @ignore */
46
- [inspect.custom](depth?: number): string;
47
45
  }
48
46
  export declare class ScalarReference<Value> {
49
47
  private value?;
@@ -56,12 +54,15 @@ export declare class ScalarReference<Value> {
56
54
  * Returns either the whole entity, or the requested property.
57
55
  */
58
56
  load(options?: Omit<LoadReferenceOptions<any, any>, 'populate' | 'fields' | 'exclude'>): Promise<Value | undefined>;
57
+ /**
58
+ * Ensures the underlying entity is loaded first (without reloading it if it already is loaded).
59
+ * Returns the entity or throws an error just like `em.findOneOrFail()` (and respects the same config options).
60
+ */
61
+ loadOrFail(options?: Omit<LoadReferenceOrFailOptions<any, any>, 'populate' | 'fields' | 'exclude'>): Promise<Value>;
59
62
  set(value: Value): void;
60
63
  bind<Entity extends object>(entity: Entity, property: EntityKey<Entity>): void;
61
64
  unwrap(): Value | undefined;
62
65
  isInitialized(): boolean;
63
- /** @ignore */
64
- [inspect.custom](): string;
65
66
  }
66
67
  export interface LoadReferenceOptions<T extends object, P extends string = never, F extends string = '*', E extends string = never> extends FindOneOptions<T, P, F, E> {
67
68
  dataloader?: boolean;
@@ -72,15 +73,11 @@ export interface LoadReferenceOrFailOptions<T extends object, P extends string =
72
73
  /**
73
74
  * shortcut for `wrap(entity).toReference()`
74
75
  */
75
- export declare function ref<T>(entity: T | Ref<T>): Ref<T> & LoadedReference<Loaded<T, AddEager<T>>>;
76
+ export declare function ref<I extends unknown | Ref<unknown> | undefined | null, T extends I & {}>(entity: I): Ref<T> & LoadedReference<Loaded<T, AddEager<T>>> | AddOptional<typeof entity>;
76
77
  /**
77
78
  * shortcut for `Reference.createFromPK(entityType, pk)`
78
79
  */
79
- export declare function ref<T, PKV extends Primary<T> = Primary<T>>(entityType: EntityClass<T>, pk?: T | PKV): Ref<T>;
80
- /**
81
- * shortcut for `wrap(entity).toReference()`
82
- */
83
- export declare function ref<T>(value: T | Ref<T>): Ref<T> & LoadedReference<Loaded<T, AddEager<T>>>;
80
+ export declare function ref<I extends unknown | undefined | null, T, PKV extends Primary<T> = Primary<T>>(entityType: EntityClass<T>, pk: I): Ref<T> | AddOptional<typeof pk>;
84
81
  /**
85
82
  * shortcut for `Reference.createNakedFromPK(entityType, pk)`
86
83
  */
@@ -1,18 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Ref = exports.ScalarReference = exports.Reference = void 0;
4
- exports.ref = ref;
5
- exports.rel = rel;
6
- const node_util_1 = require("node:util");
7
- const enums_1 = require("../enums");
8
- const wrap_1 = require("./wrap");
9
- const Utils_1 = require("../utils/Utils");
10
- class Reference {
1
+ import { DataloaderType } from '../enums.js';
2
+ import { helper, wrap } from './wrap.js';
3
+ import { Utils } from '../utils/Utils.js';
4
+ import { QueryHelper } from '../utils/QueryHelper.js';
5
+ import { NotFoundError } from '../errors.js';
6
+ import { inspect } from '../logging/inspect.js';
7
+ export class Reference {
11
8
  entity;
9
+ property;
12
10
  constructor(entity) {
13
11
  this.entity = entity;
14
12
  this.set(entity);
15
- const meta = (0, wrap_1.helper)(this.entity).__meta;
13
+ const meta = helper(this.entity).__meta;
16
14
  meta.primaryKeys.forEach(primaryKey => {
17
15
  Object.defineProperty(this, primaryKey, {
18
16
  get() {
@@ -23,14 +21,14 @@ class Reference {
23
21
  if (meta.serializedPrimaryKey && meta.primaryKeys[0] !== meta.serializedPrimaryKey) {
24
22
  Object.defineProperty(this, meta.serializedPrimaryKey, {
25
23
  get() {
26
- return (0, wrap_1.helper)(this.entity).getSerializedPrimaryKey();
24
+ return helper(this.entity).getSerializedPrimaryKey();
27
25
  },
28
26
  });
29
27
  }
30
28
  }
31
29
  static create(entity) {
32
30
  const unwrapped = Reference.unwrapReference(entity);
33
- const ref = (0, wrap_1.helper)(entity).toReference();
31
+ const ref = helper(entity).toReference();
34
32
  if (unwrapped !== ref.unwrap()) {
35
33
  ref.set(unwrapped);
36
34
  }
@@ -38,16 +36,21 @@ class Reference {
38
36
  }
39
37
  static createFromPK(entityType, pk, options) {
40
38
  const ref = this.createNakedFromPK(entityType, pk, options);
41
- return (0, wrap_1.helper)(ref).toReference();
39
+ return helper(ref)?.toReference() ?? ref;
42
40
  }
43
41
  static createNakedFromPK(entityType, pk, options) {
44
42
  const factory = entityType.prototype.__factory;
43
+ if (!factory) {
44
+ // this can happen only if `ref()` is used as a property initializer, and the value is important only for the
45
+ // inference of defaults, so it's fine to return it directly without wrapping with `Reference` class
46
+ return pk;
47
+ }
45
48
  const entity = factory.createReference(entityType, pk, {
46
49
  merge: false,
47
50
  convertCustomTypes: false,
48
51
  ...options,
49
52
  });
50
- const wrapped = (0, wrap_1.helper)(entity);
53
+ const wrapped = helper(entity);
51
54
  wrapped.__meta.primaryKeys.forEach(key => wrapped.__loadedProperties.add(key));
52
55
  wrapped.__originalEntityData = factory.getComparator().prepareEntity(entity);
53
56
  return entity;
@@ -63,7 +66,9 @@ class Reference {
63
66
  */
64
67
  static wrapReference(entity, prop) {
65
68
  if (entity && prop.ref && !Reference.isReference(entity)) {
66
- return Reference.create(entity);
69
+ const ref = Reference.create(entity);
70
+ ref.property = prop;
71
+ return ref;
67
72
  }
68
73
  return entity;
69
74
  }
@@ -79,17 +84,18 @@ class Reference {
79
84
  * the method returns `null`. Use `loadOrFail()` if you want an error to be thrown in such a case.
80
85
  */
81
86
  async load(options = {}) {
82
- const wrapped = (0, wrap_1.helper)(this.entity);
87
+ const wrapped = helper(this.entity);
83
88
  if (!wrapped.__em) {
84
89
  return this.entity;
85
90
  }
91
+ options = { ...options, filters: QueryHelper.mergePropertyFilters(this.property?.filters, options.filters) };
86
92
  if (this.isInitialized() && !options.refresh && options.populate) {
87
93
  await wrapped.__em.populate(this.entity, options.populate, options);
88
94
  }
89
95
  if (!this.isInitialized() || options.refresh) {
90
- if (options.dataloader ?? [enums_1.DataloaderType.ALL, enums_1.DataloaderType.REFERENCE].includes(wrapped.__em.config.getDataloaderType())) {
91
- // eslint-disable-next-line dot-notation
92
- return wrapped.__em['refLoader'].load([this, options]);
96
+ if (options.dataloader ?? [DataloaderType.ALL, DataloaderType.REFERENCE].includes(wrapped.__em.config.getDataloaderType())) {
97
+ const dataLoader = await wrapped.__em.getDataLoader('ref');
98
+ return dataLoader.load([this, options]);
93
99
  }
94
100
  return wrapped.init(options);
95
101
  }
@@ -102,7 +108,7 @@ class Reference {
102
108
  async loadOrFail(options = {}) {
103
109
  const ret = await this.load(options);
104
110
  if (!ret) {
105
- const wrapped = (0, wrap_1.helper)(this.entity);
111
+ const wrapped = helper(this.entity);
106
112
  options.failHandler ??= wrapped.__em.config.get('findOneOrFailHandler');
107
113
  const entityName = this.entity.constructor.name;
108
114
  const where = wrapped.getPrimaryKey();
@@ -112,14 +118,14 @@ class Reference {
112
118
  }
113
119
  set(entity) {
114
120
  this.entity = Reference.unwrapReference(entity);
115
- delete (0, wrap_1.helper)(this.entity).__reference;
121
+ delete helper(this.entity).__reference;
116
122
  }
117
123
  unwrap() {
118
124
  return this.entity;
119
125
  }
120
126
  getEntity() {
121
127
  if (!this.isInitialized()) {
122
- throw new Error(`Reference<${(0, wrap_1.helper)(this.entity).__meta.name}> ${(0, wrap_1.helper)(this.entity).getPrimaryKey()} not initialized`);
128
+ throw new Error(`Reference<${helper(this.entity).__meta.name}> ${helper(this.entity).getPrimaryKey()} not initialized`);
123
129
  }
124
130
  return this.entity;
125
131
  }
@@ -131,31 +137,29 @@ class Reference {
131
137
  return this.getEntity()[prop];
132
138
  }
133
139
  isInitialized() {
134
- return (0, wrap_1.helper)(this.entity).__initialized;
140
+ return helper(this.entity).__initialized;
135
141
  }
136
142
  populated(populated) {
137
- (0, wrap_1.helper)(this.entity).populated(populated);
143
+ helper(this.entity).populated(populated);
138
144
  }
139
145
  toJSON(...args) {
140
- return (0, wrap_1.wrap)(this.entity).toJSON(...args);
146
+ return wrap(this.entity).toJSON(...args);
141
147
  }
142
- /* istanbul ignore next */
143
148
  /** @ignore */
144
- [node_util_1.inspect.custom](depth = 2) {
149
+ [Symbol.for('nodejs.util.inspect.custom')](depth = 2) {
145
150
  const object = { ...this };
146
- const hidden = ['meta'];
151
+ const hidden = ['meta', 'property'];
147
152
  hidden.forEach(k => delete object[k]);
148
- const ret = (0, node_util_1.inspect)(object, { depth });
149
- const wrapped = (0, wrap_1.helper)(this.entity);
153
+ const ret = inspect(object, { depth });
154
+ const wrapped = helper(this.entity);
150
155
  const meta = wrapped.__meta;
156
+ /* v8 ignore next */
151
157
  const pk = wrapped.hasPrimaryKey() ? '<' + wrapped.getSerializedPrimaryKey() + '>' : '';
152
158
  const name = `Ref<${meta.className}${pk}>`;
153
159
  return ret === '[Object]' ? `[${name}]` : name + ' ' + ret;
154
160
  }
155
161
  }
156
- exports.Reference = Reference;
157
- exports.Ref = Reference;
158
- class ScalarReference {
162
+ export class ScalarReference {
159
163
  value;
160
164
  initialized;
161
165
  entity;
@@ -174,10 +178,24 @@ class ScalarReference {
174
178
  if (this.entity == null || this.property == null) {
175
179
  throw new Error('Cannot load scalar reference that is not bound to an entity property.');
176
180
  }
177
- await (0, wrap_1.helper)(this.entity).populate([this.property], opts);
181
+ await helper(this.entity).populate([this.property], opts);
178
182
  }
179
183
  return this.value;
180
184
  }
185
+ /**
186
+ * Ensures the underlying entity is loaded first (without reloading it if it already is loaded).
187
+ * Returns the entity or throws an error just like `em.findOneOrFail()` (and respects the same config options).
188
+ */
189
+ async loadOrFail(options = {}) {
190
+ const ret = await this.load(options);
191
+ if (ret == null) {
192
+ const wrapped = helper(this.entity);
193
+ options.failHandler ??= wrapped.__em.config.get('findOneOrFailHandler');
194
+ const entityName = this.entity.constructor.name;
195
+ throw NotFoundError.failedToLoadProperty(entityName, this.property, wrapped.getPrimaryKey());
196
+ }
197
+ return ret;
198
+ }
181
199
  set(value) {
182
200
  this.value = value;
183
201
  this.initialized = true;
@@ -193,13 +211,12 @@ class ScalarReference {
193
211
  isInitialized() {
194
212
  return this.initialized;
195
213
  }
196
- /* istanbul ignore next */
197
214
  /** @ignore */
198
- [node_util_1.inspect.custom]() {
199
- return this.initialized ? `Ref<${(0, node_util_1.inspect)(this.value)}>` : `Ref<?>`;
215
+ /* v8 ignore next */
216
+ [Symbol.for('nodejs.util.inspect.custom')]() {
217
+ return this.initialized ? `Ref<${inspect(this.value)}>` : `Ref<?>`;
200
218
  }
201
219
  }
202
- exports.ScalarReference = ScalarReference;
203
220
  Object.defineProperties(Reference.prototype, {
204
221
  __reference: { value: true, enumerable: false },
205
222
  __meta: { get() { return this.entity.__meta; } },
@@ -216,15 +233,15 @@ Object.defineProperties(ScalarReference.prototype, {
216
233
  /**
217
234
  * shortcut for `wrap(entity).toReference()`
218
235
  */
219
- function ref(entityOrType, pk) {
236
+ export function ref(entityOrType, pk) {
220
237
  if (entityOrType == null) {
221
238
  return entityOrType;
222
239
  }
223
- if (Utils_1.Utils.isEntity(entityOrType, true)) {
224
- return (0, wrap_1.helper)(entityOrType).toReference();
240
+ if (Utils.isEntity(entityOrType, true)) {
241
+ return helper(entityOrType).toReference();
225
242
  }
226
- if (Utils_1.Utils.isEntity(pk, true)) {
227
- return (0, wrap_1.helper)(pk).toReference();
243
+ if (Utils.isEntity(pk, true)) {
244
+ return helper(pk).toReference();
228
245
  }
229
246
  if (arguments.length === 1) {
230
247
  return new ScalarReference(entityOrType, true);
@@ -237,9 +254,10 @@ function ref(entityOrType, pk) {
237
254
  /**
238
255
  * shortcut for `Reference.createNakedFromPK(entityType, pk)`
239
256
  */
240
- function rel(entityType, pk) {
241
- if (pk == null || Utils_1.Utils.isEntity(pk)) {
257
+ export function rel(entityType, pk) {
258
+ if (pk == null || Utils.isEntity(pk)) {
242
259
  return pk;
243
260
  }
244
261
  return Reference.createNakedFromPK(entityType, pk);
245
262
  }
263
+ export { Reference as Ref };
@@ -1,17 +1,15 @@
1
- import type { PopulatePath } from '../enums';
2
- import { inspect } from 'node:util';
3
- import type { EntityManager } from '../EntityManager';
4
- import type { Dictionary, EntityData, EntityDictionary, EntityMetadata, IHydrator, EntityKey, PopulateOptions, Primary, AutoPath, Ref, AddEager, LoadedReference, EntityDTO, Loaded, FromEntityType, IsSubset, MergeSelected } from '../typings';
5
- import { Reference } from './Reference';
6
- import { type AssignOptions } from './EntityAssigner';
7
- import type { EntityLoaderOptions } from './EntityLoader';
8
- import type { EntityIdentifier } from './EntityIdentifier';
9
- import type { SerializationContext } from '../serialization/SerializationContext';
10
- import { type SerializeOptions } from '../serialization/EntitySerializer';
11
- import type { FindOneOptions, LoadHint } from '../drivers/IDatabaseDriver';
1
+ import type { PopulatePath } from '../enums.js';
2
+ import type { EntityManager } from '../EntityManager.js';
3
+ import type { Dictionary, EntityData, EntityDictionary, EntityMetadata, IHydrator, EntityKey, PopulateOptions, Primary, AutoPath, Ref, AddEager, LoadedReference, EntityDTO, Loaded, FromEntityType, IsSubset, MergeSelected } from '../typings.js';
4
+ import { Reference } from './Reference.js';
5
+ import { type AssignOptions } from './EntityAssigner.js';
6
+ import type { EntityLoaderOptions } from './EntityLoader.js';
7
+ import type { EntityIdentifier } from './EntityIdentifier.js';
8
+ import type { SerializationContext } from '../serialization/SerializationContext.js';
9
+ import { type SerializeOptions } from '../serialization/EntitySerializer.js';
10
+ import type { FindOneOptions, LoadHint } from '../drivers/IDatabaseDriver.js';
12
11
  export declare class WrappedEntity<Entity extends object> {
13
12
  __initialized: boolean;
14
- __touched: boolean;
15
13
  __populated?: boolean;
16
14
  __managed?: boolean;
17
15
  __onLoadFired?: boolean;
@@ -41,7 +39,6 @@ export declare class WrappedEntity<Entity extends object> {
41
39
  private readonly pkGetterConverted?;
42
40
  constructor(entity: Entity, hydrator: IHydrator, pkGetter?: (e: Entity) => Primary<Entity>, pkSerializer?: (e: Entity) => string, pkGetterConverted?: (e: Entity) => Primary<Entity>);
43
41
  isInitialized(): boolean;
44
- isTouched(): boolean;
45
42
  isManaged(): boolean;
46
43
  populated(populated?: boolean | undefined): void;
47
44
  setSerializationContext<Hint extends string = never, Fields extends string = '*', Exclude extends string = never>(options: LoadHint<Entity, Hint, Fields, Exclude>): void;
@@ -61,9 +58,7 @@ export declare class WrappedEntity<Entity extends object> {
61
58
  setPrimaryKey(id: Primary<Entity> | null): void;
62
59
  getSerializedPrimaryKey(): string;
63
60
  get __meta(): EntityMetadata<Entity>;
64
- get __platform(): import("..").Platform;
65
- get __config(): import("..").Configuration<import("../drivers/IDatabaseDriver").IDatabaseDriver<import("..").Connection>, EntityManager<import("../drivers/IDatabaseDriver").IDatabaseDriver<import("..").Connection>>>;
61
+ get __platform(): import("@mikro-orm/sql").Platform;
62
+ get __config(): import("@mikro-orm/sql").Configuration<import("../drivers/IDatabaseDriver.js").IDatabaseDriver<import("@mikro-orm/sql").Connection>, EntityManager<import("../drivers/IDatabaseDriver.js").IDatabaseDriver<import("@mikro-orm/sql").Connection>>>;
66
63
  get __primaryKeys(): Primary<Entity>[];
67
- /** @ignore */
68
- [inspect.custom](): string;
69
64
  }
@@ -1,16 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WrappedEntity = void 0;
4
- const node_util_1 = require("node:util");
5
- const Reference_1 = require("./Reference");
6
- const EntityTransformer_1 = require("../serialization/EntityTransformer");
7
- const EntityAssigner_1 = require("./EntityAssigner");
8
- const Utils_1 = require("../utils/Utils");
9
- const errors_1 = require("../errors");
10
- const wrap_1 = require("./wrap");
11
- const EntitySerializer_1 = require("../serialization/EntitySerializer");
12
- const utils_1 = require("./utils");
13
- class WrappedEntity {
1
+ import { Reference } from './Reference.js';
2
+ import { EntityTransformer } from '../serialization/EntityTransformer.js';
3
+ import { EntityAssigner } from './EntityAssigner.js';
4
+ import { Utils } from '../utils/Utils.js';
5
+ import { ValidationError } from '../errors.js';
6
+ import { helper } from './wrap.js';
7
+ import { EntitySerializer } from '../serialization/EntitySerializer.js';
8
+ import { expandDotPaths } from './utils.js';
9
+ export class WrappedEntity {
14
10
  constructor(entity, hydrator, pkGetter, pkSerializer, pkGetterConverted) {
15
11
  this.entity = entity;
16
12
  this.hydrator = hydrator;
@@ -18,7 +14,6 @@ class WrappedEntity {
18
14
  this.pkSerializer = pkSerializer;
19
15
  this.pkGetterConverted = pkGetterConverted;
20
16
  this.__initialized = true;
21
- this.__touched = false;
22
17
  this.__serializationContext = {};
23
18
  this.__loadedProperties = new Set();
24
19
  this.__data = {};
@@ -27,9 +22,6 @@ class WrappedEntity {
27
22
  isInitialized() {
28
23
  return this.__initialized;
29
24
  }
30
- isTouched() {
31
- return this.__touched;
32
- }
33
25
  isManaged() {
34
26
  return !!this.__managed;
35
27
  }
@@ -39,7 +31,7 @@ class WrappedEntity {
39
31
  setSerializationContext(options) {
40
32
  const exclude = options.exclude ?? [];
41
33
  const context = this.__serializationContext;
42
- const populate = (0, utils_1.expandDotPaths)(this.__meta, options.populate);
34
+ const populate = expandDotPaths(this.__meta, options.populate);
43
35
  context.populate = context.populate ? context.populate.concat(populate) : populate;
44
36
  context.exclude = context.exclude ? context.exclude.concat(exclude) : exclude;
45
37
  if (context.fields && options.fields) {
@@ -53,17 +45,17 @@ class WrappedEntity {
53
45
  }
54
46
  }
55
47
  toReference() {
56
- this.__reference ??= new Reference_1.Reference(this.entity);
48
+ this.__reference ??= new Reference(this.entity);
57
49
  return this.__reference;
58
50
  }
59
51
  toObject(ignoreFields) {
60
- return EntityTransformer_1.EntityTransformer.toObject(this.entity, ignoreFields);
52
+ return EntityTransformer.toObject(this.entity, ignoreFields);
61
53
  }
62
54
  serialize(options) {
63
- return EntitySerializer_1.EntitySerializer.serialize(this.entity, options);
55
+ return EntitySerializer.serialize(this.entity, options);
64
56
  }
65
57
  toPOJO() {
66
- return EntityTransformer_1.EntityTransformer.toObject(this.entity, [], true);
58
+ return EntityTransformer.toObject(this.entity, [], true);
67
59
  }
68
60
  toJSON(...args) {
69
61
  // toJSON methods is added to the prototype during discovery to support automatic serialization via JSON.stringify()
@@ -73,17 +65,17 @@ class WrappedEntity {
73
65
  if ('assign' in this.entity) {
74
66
  return this.entity.assign(data, options);
75
67
  }
76
- return EntityAssigner_1.EntityAssigner.assign(this.entity, data, options);
68
+ return EntityAssigner.assign(this.entity, data, options);
77
69
  }
78
70
  async init(options) {
79
71
  if (!this.__em) {
80
- throw errors_1.ValidationError.entityNotManaged(this.entity);
72
+ throw ValidationError.entityNotManaged(this.entity);
81
73
  }
82
74
  return this.__em.findOne(this.entity.constructor.name, this.entity, { ...options, refresh: true, schema: this.__schema });
83
75
  }
84
76
  async populate(populate, options = {}) {
85
77
  if (!this.__em) {
86
- throw errors_1.ValidationError.entityNotManaged(this.entity);
78
+ throw ValidationError.entityNotManaged(this.entity);
87
79
  }
88
80
  // @ts-ignore hard to type
89
81
  await this.__em.populate(this.entity, populate, options);
@@ -99,7 +91,7 @@ class WrappedEntity {
99
91
  return null;
100
92
  }
101
93
  if (this.__pk != null && this.__meta.compositePK) {
102
- return Utils_1.Utils.getCompositeKeyValue(this.__pk, this.__meta, convertCustomTypes ? 'convertToDatabaseValue' : false, this.__platform);
94
+ return Utils.getCompositeKeyValue(this.__pk, this.__meta, convertCustomTypes ? 'convertToDatabaseValue' : false, this.__platform);
103
95
  }
104
96
  if (convertCustomTypes && this.__pk != null && prop.customType) {
105
97
  return prop.customType.convertToDatabaseValue(this.__pk, this.__platform);
@@ -118,8 +110,8 @@ class WrappedEntity {
118
110
  if (this.__meta.compositePK) {
119
111
  return this.__meta.primaryKeys.reduce((ret, pk) => {
120
112
  const child = this.entity[pk];
121
- if (Utils_1.Utils.isEntity(child, true)) {
122
- const childPk = (0, wrap_1.helper)(child).getPrimaryKeys(convertCustomTypes);
113
+ if (Utils.isEntity(child, true)) {
114
+ const childPk = helper(child).getPrimaryKeys(convertCustomTypes);
123
115
  ret.push(...childPk);
124
116
  }
125
117
  else {
@@ -153,11 +145,10 @@ class WrappedEntity {
153
145
  return this.__em?.config ?? this.entity.__config;
154
146
  }
155
147
  get __primaryKeys() {
156
- return Utils_1.Utils.getPrimaryKeyValues(this.entity, this.__meta.primaryKeys);
148
+ return Utils.getPrimaryKeyValues(this.entity, this.__meta);
157
149
  }
158
150
  /** @ignore */
159
- [node_util_1.inspect.custom]() {
151
+ [Symbol.for('nodejs.util.inspect.custom')]() {
160
152
  return `[WrappedEntity<${this.__meta.className}>]`;
161
153
  }
162
154
  }
163
- exports.WrappedEntity = WrappedEntity;