@mikro-orm/core 7.0.8-dev.8 → 7.0.8

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 +884 -583
  2. package/EntityManager.js +1926 -1899
  3. package/MikroORM.d.ts +103 -74
  4. package/MikroORM.js +178 -179
  5. package/README.md +1 -1
  6. package/cache/CacheAdapter.d.ts +36 -36
  7. package/cache/FileCacheAdapter.d.ts +30 -24
  8. package/cache/FileCacheAdapter.js +80 -78
  9. package/cache/GeneratedCacheAdapter.d.ts +18 -20
  10. package/cache/GeneratedCacheAdapter.js +30 -30
  11. package/cache/MemoryCacheAdapter.d.ts +18 -20
  12. package/cache/MemoryCacheAdapter.js +35 -36
  13. package/cache/NullCacheAdapter.d.ts +16 -16
  14. package/cache/NullCacheAdapter.js +24 -24
  15. package/connections/Connection.d.ts +95 -84
  16. package/connections/Connection.js +165 -168
  17. package/drivers/DatabaseDriver.d.ts +186 -80
  18. package/drivers/DatabaseDriver.js +450 -443
  19. package/drivers/IDatabaseDriver.d.ts +440 -301
  20. package/entity/BaseEntity.d.ts +120 -83
  21. package/entity/BaseEntity.js +43 -43
  22. package/entity/Collection.d.ts +213 -180
  23. package/entity/Collection.js +730 -724
  24. package/entity/EntityAssigner.d.ts +88 -77
  25. package/entity/EntityAssigner.js +231 -230
  26. package/entity/EntityFactory.d.ts +67 -55
  27. package/entity/EntityFactory.js +455 -414
  28. package/entity/EntityHelper.d.ts +35 -23
  29. package/entity/EntityHelper.js +291 -279
  30. package/entity/EntityIdentifier.d.ts +4 -4
  31. package/entity/EntityIdentifier.js +10 -10
  32. package/entity/EntityLoader.d.ts +98 -72
  33. package/entity/EntityLoader.js +792 -761
  34. package/entity/EntityRepository.d.ts +316 -201
  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 +127 -83
  39. package/entity/Reference.js +281 -277
  40. package/entity/WrappedEntity.d.ts +115 -72
  41. package/entity/WrappedEntity.js +168 -166
  42. package/entity/defineEntity.d.ts +1359 -654
  43. package/entity/defineEntity.js +527 -518
  44. package/entity/utils.d.ts +13 -3
  45. package/entity/utils.js +71 -73
  46. package/entity/validators.js +43 -43
  47. package/entity/wrap.js +8 -8
  48. package/enums.d.ts +258 -253
  49. package/enums.js +251 -252
  50. package/errors.d.ts +114 -72
  51. package/errors.js +350 -253
  52. package/events/EventManager.d.ts +26 -14
  53. package/events/EventManager.js +79 -77
  54. package/events/EventSubscriber.d.ts +29 -29
  55. package/events/TransactionEventBroadcaster.d.ts +15 -8
  56. package/events/TransactionEventBroadcaster.js +14 -14
  57. package/exceptions.d.ts +23 -40
  58. package/exceptions.js +35 -52
  59. package/hydration/Hydrator.d.ts +42 -17
  60. package/hydration/Hydrator.js +43 -43
  61. package/hydration/ObjectHydrator.d.ts +50 -17
  62. package/hydration/ObjectHydrator.js +483 -418
  63. package/index.d.ts +116 -2
  64. package/index.js +10 -1
  65. package/logging/DefaultLogger.d.ts +34 -32
  66. package/logging/DefaultLogger.js +86 -86
  67. package/logging/Logger.d.ts +41 -41
  68. package/logging/SimpleLogger.d.ts +13 -11
  69. package/logging/SimpleLogger.js +22 -22
  70. package/logging/colors.d.ts +6 -6
  71. package/logging/colors.js +11 -10
  72. package/logging/inspect.js +7 -7
  73. package/metadata/EntitySchema.d.ts +214 -130
  74. package/metadata/EntitySchema.js +411 -412
  75. package/metadata/MetadataDiscovery.d.ts +114 -114
  76. package/metadata/MetadataDiscovery.js +1944 -1868
  77. package/metadata/MetadataProvider.d.ts +29 -26
  78. package/metadata/MetadataProvider.js +95 -97
  79. package/metadata/MetadataStorage.d.ts +38 -32
  80. package/metadata/MetadataStorage.js +118 -118
  81. package/metadata/MetadataValidator.d.ts +39 -39
  82. package/metadata/MetadataValidator.js +381 -338
  83. package/metadata/discover-entities.d.ts +5 -2
  84. package/metadata/discover-entities.js +35 -37
  85. package/metadata/types.d.ts +615 -531
  86. package/naming-strategy/AbstractNamingStrategy.d.ts +54 -39
  87. package/naming-strategy/AbstractNamingStrategy.js +90 -85
  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 +109 -99
  93. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  94. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  95. package/not-supported.js +7 -4
  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 +312 -303
  100. package/platforms/Platform.js +667 -644
  101. package/serialization/EntitySerializer.d.ts +49 -26
  102. package/serialization/EntitySerializer.js +224 -218
  103. package/serialization/EntityTransformer.d.ts +10 -6
  104. package/serialization/EntityTransformer.js +219 -217
  105. package/serialization/SerializationContext.d.ts +27 -23
  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 +17 -10
  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 +83 -79
  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 +75 -49
  158. package/types/index.js +52 -26
  159. package/typings.d.ts +1254 -741
  160. package/typings.js +244 -233
  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 +187 -179
  165. package/unit-of-work/ChangeSetPersister.d.ts +63 -44
  166. package/unit-of-work/ChangeSetPersister.js +446 -423
  167. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  168. package/unit-of-work/CommitOrderCalculator.js +89 -88
  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 +181 -141
  172. package/unit-of-work/UnitOfWork.js +1236 -1222
  173. package/utils/AbstractMigrator.d.ts +111 -91
  174. package/utils/AbstractMigrator.js +275 -275
  175. package/utils/AbstractSchemaGenerator.d.ts +43 -34
  176. package/utils/AbstractSchemaGenerator.js +121 -122
  177. package/utils/AsyncContext.d.ts +3 -3
  178. package/utils/AsyncContext.js +34 -35
  179. package/utils/Configuration.d.ts +852 -808
  180. package/utils/Configuration.js +359 -344
  181. package/utils/Cursor.d.ts +40 -22
  182. package/utils/Cursor.js +135 -127
  183. package/utils/DataloaderUtils.d.ts +58 -43
  184. package/utils/DataloaderUtils.js +203 -198
  185. package/utils/EntityComparator.d.ts +99 -82
  186. package/utils/EntityComparator.js +829 -737
  187. package/utils/NullHighlighter.d.ts +1 -1
  188. package/utils/NullHighlighter.js +3 -3
  189. package/utils/QueryHelper.d.ts +79 -51
  190. package/utils/QueryHelper.js +372 -361
  191. package/utils/RawQueryFragment.d.ts +50 -34
  192. package/utils/RawQueryFragment.js +107 -105
  193. package/utils/RequestContext.d.ts +32 -32
  194. package/utils/RequestContext.js +52 -53
  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 +199 -197
  199. package/utils/Utils.d.ts +204 -145
  200. package/utils/Utils.js +815 -815
  201. package/utils/clone.js +105 -114
  202. package/utils/env-vars.js +90 -88
  203. package/utils/fs-utils.d.ts +15 -15
  204. package/utils/fs-utils.js +180 -181
  205. package/utils/upsert-utils.d.ts +20 -5
  206. package/utils/upsert-utils.js +114 -116
@@ -3,33 +3,36 @@ import type { Logger } from '../logging/Logger.js';
3
3
  import type { SyncCacheAdapter } from '../cache/CacheAdapter.js';
4
4
  import type { Platform } from '../platforms/Platform.js';
5
5
  export interface IConfiguration {
6
- get(key: string, defaultValue?: any): any;
7
- getLogger(): Logger;
8
- getMetadataCacheAdapter(): SyncCacheAdapter;
9
- getPlatform(): Platform;
6
+ get(key: string, defaultValue?: any): any;
7
+ getLogger(): Logger;
8
+ getMetadataCacheAdapter(): SyncCacheAdapter;
9
+ getPlatform(): Platform;
10
10
  }
11
11
  /** Base metadata provider that resolves entity type information and manages metadata caching. */
12
12
  export declare class MetadataProvider {
13
- protected readonly config: IConfiguration;
14
- constructor(config: IConfiguration);
15
- /** Resolves entity references and type information for all properties in the given metadata. */
16
- loadEntityMetadata(meta: EntityMetadata): void;
17
- /**
18
- * Resolves the entity name for a given class or schema, respecting explicit names
19
- * set via `defineEntity({ name })` + `setClass()`.
20
- */
21
- private resolveEntityName;
22
- /** Merges cached metadata into the given entity metadata, preserving function expressions. */
23
- loadFromCache(meta: EntityMetadata, cache: EntityMetadata): void;
24
- /** Whether this provider class uses metadata caching by default. */
25
- static useCache(): boolean;
26
- /** Whether metadata caching is enabled for this instance. */
27
- useCache(): boolean;
28
- saveToCache(meta: EntityMetadata): void;
29
- /** Attempts to load metadata from cache, returning undefined if not available. */
30
- getCachedMetadata<T>(meta: Pick<EntityMetadata<T>, 'className' | 'path' | 'root'>, root: EntityMetadata<T>): EntityMetadata<T> | undefined;
31
- /** Combines individual metadata cache entries into a single file. */
32
- combineCache(): void;
33
- /** Returns the cache key for the given entity metadata. */
34
- getCacheKey(meta: Pick<EntityMetadata, 'className' | 'path'>): string;
13
+ protected readonly config: IConfiguration;
14
+ constructor(config: IConfiguration);
15
+ /** Resolves entity references and type information for all properties in the given metadata. */
16
+ loadEntityMetadata(meta: EntityMetadata): void;
17
+ /**
18
+ * Resolves the entity name for a given class or schema, respecting explicit names
19
+ * set via `defineEntity({ name })` + `setClass()`.
20
+ */
21
+ private resolveEntityName;
22
+ /** Merges cached metadata into the given entity metadata, preserving function expressions. */
23
+ loadFromCache(meta: EntityMetadata, cache: EntityMetadata): void;
24
+ /** Whether this provider class uses metadata caching by default. */
25
+ static useCache(): boolean;
26
+ /** Whether metadata caching is enabled for this instance. */
27
+ useCache(): boolean;
28
+ saveToCache(meta: EntityMetadata): void;
29
+ /** Attempts to load metadata from cache, returning undefined if not available. */
30
+ getCachedMetadata<T>(
31
+ meta: Pick<EntityMetadata<T>, 'className' | 'path' | 'root'>,
32
+ root: EntityMetadata<T>,
33
+ ): EntityMetadata<T> | undefined;
34
+ /** Combines individual metadata cache entries into a single file. */
35
+ combineCache(): void;
36
+ /** Returns the cache key for the given entity metadata. */
37
+ getCacheKey(meta: Pick<EntityMetadata, 'className' | 'path'>): string;
35
38
  }
@@ -2,110 +2,108 @@ import { Utils } from '../utils/Utils.js';
2
2
  import { EntitySchema } from './EntitySchema.js';
3
3
  /** Base metadata provider that resolves entity type information and manages metadata caching. */
4
4
  export class MetadataProvider {
5
- config;
6
- constructor(config) {
7
- this.config = config;
5
+ config;
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ /** Resolves entity references and type information for all properties in the given metadata. */
10
+ loadEntityMetadata(meta) {
11
+ for (const prop of meta.props) {
12
+ /* v8 ignore next */
13
+ if (typeof prop.entity === 'string') {
14
+ prop.type = prop.entity;
15
+ } else if (prop.entity) {
16
+ const tmp = prop.entity();
17
+ prop.type = Array.isArray(tmp)
18
+ ? tmp
19
+ .map(t => this.resolveEntityName(t))
20
+ .sort()
21
+ .join(' | ')
22
+ : this.resolveEntityName(tmp);
23
+ prop.target = EntitySchema.is(tmp) ? tmp.meta.class : tmp;
24
+ } else if (!prop.type && !((prop.enum || prop.array) && (prop.items?.length ?? 0) > 0)) {
25
+ throw new Error(`Please provide either 'type' or 'entity' attribute in ${meta.className}.${prop.name}.`);
26
+ }
8
27
  }
9
- /** Resolves entity references and type information for all properties in the given metadata. */
10
- loadEntityMetadata(meta) {
11
- for (const prop of meta.props) {
12
- /* v8 ignore next */
13
- if (typeof prop.entity === 'string') {
14
- prop.type = prop.entity;
15
- }
16
- else if (prop.entity) {
17
- const tmp = prop.entity();
18
- prop.type = Array.isArray(tmp)
19
- ? tmp
20
- .map(t => this.resolveEntityName(t))
21
- .sort()
22
- .join(' | ')
23
- : this.resolveEntityName(tmp);
24
- prop.target = EntitySchema.is(tmp) ? tmp.meta.class : tmp;
25
- }
26
- else if (!prop.type && !((prop.enum || prop.array) && (prop.items?.length ?? 0) > 0)) {
27
- throw new Error(`Please provide either 'type' or 'entity' attribute in ${meta.className}.${prop.name}.`);
28
- }
29
- }
28
+ }
29
+ /**
30
+ * Resolves the entity name for a given class or schema, respecting explicit names
31
+ * set via `defineEntity({ name })` + `setClass()`.
32
+ */
33
+ resolveEntityName(entity) {
34
+ if (EntitySchema.is(entity)) {
35
+ return entity.meta.className;
30
36
  }
31
- /**
32
- * Resolves the entity name for a given class or schema, respecting explicit names
33
- * set via `defineEntity({ name })` + `setClass()`.
34
- */
35
- resolveEntityName(entity) {
36
- if (EntitySchema.is(entity)) {
37
- return entity.meta.className;
38
- }
39
- const schema = EntitySchema.REGISTRY.get(entity);
40
- if (schema) {
41
- return schema.name;
42
- }
43
- return Utils.className(entity);
37
+ const schema = EntitySchema.REGISTRY.get(entity);
38
+ if (schema) {
39
+ return schema.name;
44
40
  }
45
- /** Merges cached metadata into the given entity metadata, preserving function expressions. */
46
- loadFromCache(meta, cache) {
47
- Object.values(cache.properties).forEach(prop => {
48
- const metaProp = meta.properties[prop.name];
49
- /* v8 ignore next */
50
- if (metaProp?.enum && Array.isArray(metaProp.items)) {
51
- delete prop.items;
52
- }
53
- });
54
- // Preserve function expressions from indexes/uniques — they can't survive JSON cache serialization
55
- const expressionMap = new Map();
56
- for (const arr of [meta.indexes, meta.uniques]) {
57
- for (const idx of arr ?? []) {
58
- if (typeof idx.expression === 'function' && idx.name) {
59
- expressionMap.set(idx.name, idx.expression);
60
- }
61
- }
41
+ return Utils.className(entity);
42
+ }
43
+ /** Merges cached metadata into the given entity metadata, preserving function expressions. */
44
+ loadFromCache(meta, cache) {
45
+ Object.values(cache.properties).forEach(prop => {
46
+ const metaProp = meta.properties[prop.name];
47
+ /* v8 ignore next */
48
+ if (metaProp?.enum && Array.isArray(metaProp.items)) {
49
+ delete prop.items;
50
+ }
51
+ });
52
+ // Preserve function expressions from indexes/uniques — they can't survive JSON cache serialization
53
+ const expressionMap = new Map();
54
+ for (const arr of [meta.indexes, meta.uniques]) {
55
+ for (const idx of arr ?? []) {
56
+ if (typeof idx.expression === 'function' && idx.name) {
57
+ expressionMap.set(idx.name, idx.expression);
62
58
  }
63
- Utils.mergeConfig(meta, cache);
64
- // Restore function expressions that were lost during JSON serialization
65
- if (expressionMap.size > 0) {
66
- for (const arr of [meta.indexes, meta.uniques]) {
67
- for (const idx of arr ?? []) {
68
- const fn = idx.name && expressionMap.get(idx.name);
69
- if (fn && typeof idx.expression !== 'function') {
70
- idx.expression = fn;
71
- }
72
- }
73
- }
74
- }
75
- }
76
- /** Whether this provider class uses metadata caching by default. */
77
- static useCache() {
78
- return false;
59
+ }
79
60
  }
80
- /** Whether metadata caching is enabled for this instance. */
81
- useCache() {
82
- return this.config.get('metadataCache').enabled ?? MetadataProvider.useCache();
83
- }
84
- saveToCache(meta) {
85
- //
86
- }
87
- /** Attempts to load metadata from cache, returning undefined if not available. */
88
- getCachedMetadata(meta, root) {
89
- if (!this.useCache()) {
90
- return undefined;
91
- }
92
- const cache = meta.path && this.config.getMetadataCacheAdapter().get(this.getCacheKey(meta));
93
- if (cache) {
94
- this.loadFromCache(meta, cache);
95
- meta.root = root;
61
+ Utils.mergeConfig(meta, cache);
62
+ // Restore function expressions that were lost during JSON serialization
63
+ if (expressionMap.size > 0) {
64
+ for (const arr of [meta.indexes, meta.uniques]) {
65
+ for (const idx of arr ?? []) {
66
+ const fn = idx.name && expressionMap.get(idx.name);
67
+ if (fn && typeof idx.expression !== 'function') {
68
+ idx.expression = fn;
69
+ }
96
70
  }
97
- return cache;
71
+ }
98
72
  }
99
- /** Combines individual metadata cache entries into a single file. */
100
- combineCache() {
101
- const path = this.config.getMetadataCacheAdapter().combine?.();
102
- // override the path in the options, so we can log it from the CLI in `cache:generate` command
103
- if (path) {
104
- this.config.get('metadataCache').combined = path;
105
- }
73
+ }
74
+ /** Whether this provider class uses metadata caching by default. */
75
+ static useCache() {
76
+ return false;
77
+ }
78
+ /** Whether metadata caching is enabled for this instance. */
79
+ useCache() {
80
+ return this.config.get('metadataCache').enabled ?? MetadataProvider.useCache();
81
+ }
82
+ saveToCache(meta) {
83
+ //
84
+ }
85
+ /** Attempts to load metadata from cache, returning undefined if not available. */
86
+ getCachedMetadata(meta, root) {
87
+ if (!this.useCache()) {
88
+ return undefined;
89
+ }
90
+ const cache = meta.path && this.config.getMetadataCacheAdapter().get(this.getCacheKey(meta));
91
+ if (cache) {
92
+ this.loadFromCache(meta, cache);
93
+ meta.root = root;
106
94
  }
107
- /** Returns the cache key for the given entity metadata. */
108
- getCacheKey(meta) {
109
- return meta.className;
95
+ return cache;
96
+ }
97
+ /** Combines individual metadata cache entries into a single file. */
98
+ combineCache() {
99
+ const path = this.config.getMetadataCacheAdapter().combine?.();
100
+ // override the path in the options, so we can log it from the CLI in `cache:generate` command
101
+ if (path) {
102
+ this.config.get('metadataCache').combined = path;
110
103
  }
104
+ }
105
+ /** Returns the cache key for the given entity metadata. */
106
+ getCacheKey(meta) {
107
+ return meta.className;
108
+ }
111
109
  }
@@ -2,36 +2,42 @@ import { type Dictionary, EntityMetadata, type EntityName } from '../typings.js'
2
2
  import type { EntityManager } from '../EntityManager.js';
3
3
  /** Registry that stores and provides access to entity metadata by class, name, or id. */
4
4
  export declare class MetadataStorage {
5
- #private;
6
- static readonly PATH_SYMBOL: unique symbol;
7
- constructor(metadata?: Dictionary<EntityMetadata>);
8
- /** Returns the global metadata dictionary, or a specific entry by entity name and path. */
9
- static getMetadata(): Dictionary<EntityMetadata>;
10
- static getMetadata<T = any>(entity: string, path: string): EntityMetadata<T>;
11
- /** Checks whether an entity with the given class name exists in the global metadata. */
12
- static isKnownEntity(name: string): boolean;
13
- /** Clears all entries from the global metadata registry. */
14
- static clear(): void;
15
- /** Returns the map of all registered entity metadata. */
16
- getAll(): Map<EntityName, EntityMetadata>;
17
- /** Returns metadata for the given entity, optionally initializing it if not found. */
18
- get<T = any>(entityName: EntityName<T>, init?: boolean): EntityMetadata<T>;
19
- /** Finds metadata for the given entity, returning undefined if not registered. */
20
- find<T = any>(entityName: EntityName<T>): EntityMetadata<T> | undefined;
21
- /** Checks whether metadata exists for the given entity. */
22
- has<T>(entityName: EntityName<T>): boolean;
23
- /** Registers metadata for the given entity. */
24
- set<T>(entityName: EntityName<T>, meta: EntityMetadata): EntityMetadata;
25
- /** Removes metadata for the given entity from all internal maps. */
26
- reset<T>(entityName: EntityName<T>): void;
27
- /** Decorates all entity prototypes with helper methods (e.g. init, toJSON). */
28
- decorate(em: EntityManager): void;
29
- [Symbol.iterator](): IterableIterator<EntityMetadata>;
30
- /** Returns metadata by its internal numeric id. */
31
- getById<T>(id: number): EntityMetadata<T>;
32
- /** Returns metadata by class name, optionally throwing if not found. */
33
- getByClassName<T = any, V extends boolean = true>(className: string, validate?: V): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
34
- /** Returns metadata by unique name, optionally throwing if not found. */
35
- getByUniqueName<T = any, V extends boolean = true>(uniqueName: string, validate?: V): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
36
- private validate;
5
+ #private;
6
+ static readonly PATH_SYMBOL: unique symbol;
7
+ constructor(metadata?: Dictionary<EntityMetadata>);
8
+ /** Returns the global metadata dictionary, or a specific entry by entity name and path. */
9
+ static getMetadata(): Dictionary<EntityMetadata>;
10
+ static getMetadata<T = any>(entity: string, path: string): EntityMetadata<T>;
11
+ /** Checks whether an entity with the given class name exists in the global metadata. */
12
+ static isKnownEntity(name: string): boolean;
13
+ /** Clears all entries from the global metadata registry. */
14
+ static clear(): void;
15
+ /** Returns the map of all registered entity metadata. */
16
+ getAll(): Map<EntityName, EntityMetadata>;
17
+ /** Returns metadata for the given entity, optionally initializing it if not found. */
18
+ get<T = any>(entityName: EntityName<T>, init?: boolean): EntityMetadata<T>;
19
+ /** Finds metadata for the given entity, returning undefined if not registered. */
20
+ find<T = any>(entityName: EntityName<T>): EntityMetadata<T> | undefined;
21
+ /** Checks whether metadata exists for the given entity. */
22
+ has<T>(entityName: EntityName<T>): boolean;
23
+ /** Registers metadata for the given entity. */
24
+ set<T>(entityName: EntityName<T>, meta: EntityMetadata): EntityMetadata;
25
+ /** Removes metadata for the given entity from all internal maps. */
26
+ reset<T>(entityName: EntityName<T>): void;
27
+ /** Decorates all entity prototypes with helper methods (e.g. init, toJSON). */
28
+ decorate(em: EntityManager): void;
29
+ [Symbol.iterator](): IterableIterator<EntityMetadata>;
30
+ /** Returns metadata by its internal numeric id. */
31
+ getById<T>(id: number): EntityMetadata<T>;
32
+ /** Returns metadata by class name, optionally throwing if not found. */
33
+ getByClassName<T = any, V extends boolean = true>(
34
+ className: string,
35
+ validate?: V,
36
+ ): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
37
+ /** Returns metadata by unique name, optionally throwing if not found. */
38
+ getByUniqueName<T = any, V extends boolean = true>(
39
+ uniqueName: string,
40
+ validate?: V,
41
+ ): V extends true ? EntityMetadata<T> : EntityMetadata<T> | undefined;
42
+ private validate;
37
43
  }
@@ -4,125 +4,125 @@ import { MetadataError } from '../errors.js';
4
4
  import { EntityHelper } from '../entity/EntityHelper.js';
5
5
  import { EntitySchema } from './EntitySchema.js';
6
6
  function getGlobalStorage(namespace) {
7
- const key = `mikro-orm-${namespace}`;
8
- globalThis[key] = globalThis[key] || {};
9
- return globalThis[key];
7
+ const key = `mikro-orm-${namespace}`;
8
+ globalThis[key] = globalThis[key] || {};
9
+ return globalThis[key];
10
10
  }
11
11
  /** Registry that stores and provides access to entity metadata by class, name, or id. */
12
12
  export class MetadataStorage {
13
- static PATH_SYMBOL = Symbol.for('@mikro-orm/core/MetadataStorage.PATH_SYMBOL');
14
- static #metadata = getGlobalStorage('metadata');
15
- #metadataMap = new Map();
16
- #idMap;
17
- #classNameMap;
18
- #uniqueNameMap;
19
- constructor(metadata = {}) {
20
- this.#idMap = {};
21
- this.#uniqueNameMap = {};
22
- this.#classNameMap = Utils.copy(metadata, false);
23
- for (const meta of Object.values(this.#classNameMap)) {
24
- this.#idMap[meta._id] = meta;
25
- this.#uniqueNameMap[meta.uniqueName] = meta;
26
- this.#metadataMap.set(meta.class, meta);
27
- }
28
- }
29
- static getMetadata(entity, path) {
30
- const key = entity && path ? entity + '-' + Utils.hash(path) : null;
31
- if (key && !MetadataStorage.#metadata[key]) {
32
- MetadataStorage.#metadata[key] = new EntityMetadata({ className: entity, path });
33
- }
34
- if (key) {
35
- return MetadataStorage.#metadata[key];
36
- }
37
- return MetadataStorage.#metadata;
38
- }
39
- /** Checks whether an entity with the given class name exists in the global metadata. */
40
- static isKnownEntity(name) {
41
- return !!Object.values(this.#metadata).find(meta => meta.className === name);
42
- }
43
- /** Clears all entries from the global metadata registry. */
44
- static clear() {
45
- Object.keys(this.#metadata).forEach(k => delete this.#metadata[k]);
46
- }
47
- /** Returns the map of all registered entity metadata. */
48
- getAll() {
49
- return this.#metadataMap;
50
- }
51
- /** Returns metadata for the given entity, optionally initializing it if not found. */
52
- get(entityName, init = false) {
53
- const exists = this.find(entityName);
54
- if (exists) {
55
- return exists;
56
- }
57
- const className = Utils.className(entityName);
58
- if (!init) {
59
- throw MetadataError.missingMetadata(className);
60
- }
61
- const meta = new EntityMetadata({ class: entityName, name: className });
62
- this.set(entityName, meta);
63
- return meta;
64
- }
65
- /** Finds metadata for the given entity, returning undefined if not registered. */
66
- find(entityName) {
67
- if (!entityName) {
68
- return;
69
- }
70
- const meta = this.#metadataMap.get(entityName);
71
- if (meta) {
72
- return meta;
73
- }
74
- if (EntitySchema.is(entityName)) {
75
- return this.#metadataMap.get(entityName.meta.class) ?? entityName.meta;
76
- }
77
- return this.#classNameMap[Utils.className(entityName)];
78
- }
79
- /** Checks whether metadata exists for the given entity. */
80
- has(entityName) {
81
- return this.#metadataMap.has(entityName);
82
- }
83
- /** Registers metadata for the given entity. */
84
- set(entityName, meta) {
85
- this.#metadataMap.set(entityName, meta);
86
- this.#idMap[meta._id] = meta;
87
- this.#uniqueNameMap[meta.uniqueName] = meta;
88
- this.#classNameMap[Utils.className(entityName)] = meta;
89
- return meta;
90
- }
91
- /** Removes metadata for the given entity from all internal maps. */
92
- reset(entityName) {
93
- const meta = this.find(entityName);
94
- if (meta) {
95
- this.#metadataMap.delete(meta.class);
96
- delete this.#idMap[meta._id];
97
- delete this.#uniqueNameMap[meta.uniqueName];
98
- delete this.#classNameMap[meta.className];
99
- }
100
- }
101
- /** Decorates all entity prototypes with helper methods (e.g. init, toJSON). */
102
- decorate(em) {
103
- [...this.#metadataMap.values()].filter(meta => meta.prototype).forEach(meta => EntityHelper.decorate(meta, em));
104
- }
105
- *[Symbol.iterator]() {
106
- for (const meta of this.#metadataMap.values()) {
107
- yield meta;
108
- }
109
- }
110
- /** Returns metadata by its internal numeric id. */
111
- getById(id) {
112
- return this.#idMap[id];
113
- }
114
- /** Returns metadata by class name, optionally throwing if not found. */
115
- getByClassName(className, validate = true) {
116
- return this.validate(this.#classNameMap[className], className, validate);
117
- }
118
- /** Returns metadata by unique name, optionally throwing if not found. */
119
- getByUniqueName(uniqueName, validate = true) {
120
- return this.validate(this.#uniqueNameMap[uniqueName], uniqueName, validate);
121
- }
122
- validate(meta, id, validate) {
123
- if (!meta && validate) {
124
- throw MetadataError.missingMetadata(id);
125
- }
126
- return meta;
127
- }
13
+ static PATH_SYMBOL = Symbol.for('@mikro-orm/core/MetadataStorage.PATH_SYMBOL');
14
+ static #metadata = getGlobalStorage('metadata');
15
+ #metadataMap = new Map();
16
+ #idMap;
17
+ #classNameMap;
18
+ #uniqueNameMap;
19
+ constructor(metadata = {}) {
20
+ this.#idMap = {};
21
+ this.#uniqueNameMap = {};
22
+ this.#classNameMap = Utils.copy(metadata, false);
23
+ for (const meta of Object.values(this.#classNameMap)) {
24
+ this.#idMap[meta._id] = meta;
25
+ this.#uniqueNameMap[meta.uniqueName] = meta;
26
+ this.#metadataMap.set(meta.class, meta);
27
+ }
28
+ }
29
+ static getMetadata(entity, path) {
30
+ const key = entity && path ? entity + '-' + Utils.hash(path) : null;
31
+ if (key && !MetadataStorage.#metadata[key]) {
32
+ MetadataStorage.#metadata[key] = new EntityMetadata({ className: entity, path });
33
+ }
34
+ if (key) {
35
+ return MetadataStorage.#metadata[key];
36
+ }
37
+ return MetadataStorage.#metadata;
38
+ }
39
+ /** Checks whether an entity with the given class name exists in the global metadata. */
40
+ static isKnownEntity(name) {
41
+ return !!Object.values(this.#metadata).find(meta => meta.className === name);
42
+ }
43
+ /** Clears all entries from the global metadata registry. */
44
+ static clear() {
45
+ Object.keys(this.#metadata).forEach(k => delete this.#metadata[k]);
46
+ }
47
+ /** Returns the map of all registered entity metadata. */
48
+ getAll() {
49
+ return this.#metadataMap;
50
+ }
51
+ /** Returns metadata for the given entity, optionally initializing it if not found. */
52
+ get(entityName, init = false) {
53
+ const exists = this.find(entityName);
54
+ if (exists) {
55
+ return exists;
56
+ }
57
+ const className = Utils.className(entityName);
58
+ if (!init) {
59
+ throw MetadataError.missingMetadata(className);
60
+ }
61
+ const meta = new EntityMetadata({ class: entityName, name: className });
62
+ this.set(entityName, meta);
63
+ return meta;
64
+ }
65
+ /** Finds metadata for the given entity, returning undefined if not registered. */
66
+ find(entityName) {
67
+ if (!entityName) {
68
+ return;
69
+ }
70
+ const meta = this.#metadataMap.get(entityName);
71
+ if (meta) {
72
+ return meta;
73
+ }
74
+ if (EntitySchema.is(entityName)) {
75
+ return this.#metadataMap.get(entityName.meta.class) ?? entityName.meta;
76
+ }
77
+ return this.#classNameMap[Utils.className(entityName)];
78
+ }
79
+ /** Checks whether metadata exists for the given entity. */
80
+ has(entityName) {
81
+ return this.#metadataMap.has(entityName);
82
+ }
83
+ /** Registers metadata for the given entity. */
84
+ set(entityName, meta) {
85
+ this.#metadataMap.set(entityName, meta);
86
+ this.#idMap[meta._id] = meta;
87
+ this.#uniqueNameMap[meta.uniqueName] = meta;
88
+ this.#classNameMap[Utils.className(entityName)] = meta;
89
+ return meta;
90
+ }
91
+ /** Removes metadata for the given entity from all internal maps. */
92
+ reset(entityName) {
93
+ const meta = this.find(entityName);
94
+ if (meta) {
95
+ this.#metadataMap.delete(meta.class);
96
+ delete this.#idMap[meta._id];
97
+ delete this.#uniqueNameMap[meta.uniqueName];
98
+ delete this.#classNameMap[meta.className];
99
+ }
100
+ }
101
+ /** Decorates all entity prototypes with helper methods (e.g. init, toJSON). */
102
+ decorate(em) {
103
+ [...this.#metadataMap.values()].filter(meta => meta.prototype).forEach(meta => EntityHelper.decorate(meta, em));
104
+ }
105
+ *[Symbol.iterator]() {
106
+ for (const meta of this.#metadataMap.values()) {
107
+ yield meta;
108
+ }
109
+ }
110
+ /** Returns metadata by its internal numeric id. */
111
+ getById(id) {
112
+ return this.#idMap[id];
113
+ }
114
+ /** Returns metadata by class name, optionally throwing if not found. */
115
+ getByClassName(className, validate = true) {
116
+ return this.validate(this.#classNameMap[className], className, validate);
117
+ }
118
+ /** Returns metadata by unique name, optionally throwing if not found. */
119
+ getByUniqueName(uniqueName, validate = true) {
120
+ return this.validate(this.#uniqueNameMap[uniqueName], uniqueName, validate);
121
+ }
122
+ validate(meta, id, validate) {
123
+ if (!meta && validate) {
124
+ throw MetadataError.missingMetadata(id);
125
+ }
126
+ return meta;
127
+ }
128
128
  }