@mikro-orm/core 7.0.0-dev.12 → 7.0.0-dev.121

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 (207) hide show
  1. package/EntityManager.d.ts +85 -56
  2. package/EntityManager.js +332 -293
  3. package/MikroORM.d.ts +41 -32
  4. package/MikroORM.js +100 -140
  5. package/README.md +3 -2
  6. package/cache/FileCacheAdapter.d.ts +1 -1
  7. package/cache/FileCacheAdapter.js +8 -7
  8. package/cache/GeneratedCacheAdapter.d.ts +0 -1
  9. package/cache/GeneratedCacheAdapter.js +0 -2
  10. package/cache/index.d.ts +0 -1
  11. package/cache/index.js +0 -1
  12. package/connections/Connection.d.ts +16 -7
  13. package/connections/Connection.js +23 -14
  14. package/drivers/DatabaseDriver.d.ts +25 -16
  15. package/drivers/DatabaseDriver.js +40 -24
  16. package/drivers/IDatabaseDriver.d.ts +38 -17
  17. package/entity/BaseEntity.d.ts +0 -1
  18. package/entity/BaseEntity.js +0 -3
  19. package/entity/Collection.d.ts +95 -30
  20. package/entity/Collection.js +439 -99
  21. package/entity/EntityAssigner.d.ts +1 -1
  22. package/entity/EntityAssigner.js +26 -18
  23. package/entity/EntityFactory.d.ts +7 -0
  24. package/entity/EntityFactory.js +72 -53
  25. package/entity/EntityHelper.d.ts +2 -2
  26. package/entity/EntityHelper.js +30 -15
  27. package/entity/EntityLoader.d.ts +7 -6
  28. package/entity/EntityLoader.js +84 -72
  29. package/entity/EntityRepository.d.ts +1 -1
  30. package/entity/EntityRepository.js +2 -2
  31. package/entity/Reference.d.ts +6 -5
  32. package/entity/Reference.js +34 -9
  33. package/entity/WrappedEntity.d.ts +2 -7
  34. package/entity/WrappedEntity.js +3 -8
  35. package/entity/defineEntity.d.ts +568 -0
  36. package/entity/defineEntity.js +529 -0
  37. package/entity/index.d.ts +3 -2
  38. package/entity/index.js +3 -2
  39. package/entity/utils.d.ts +7 -0
  40. package/entity/utils.js +16 -4
  41. package/entity/validators.d.ts +11 -0
  42. package/entity/validators.js +65 -0
  43. package/enums.d.ts +21 -6
  44. package/enums.js +14 -1
  45. package/errors.d.ts +17 -9
  46. package/errors.js +41 -21
  47. package/events/EventManager.d.ts +2 -1
  48. package/events/EventManager.js +19 -11
  49. package/hydration/Hydrator.js +1 -2
  50. package/hydration/ObjectHydrator.d.ts +4 -4
  51. package/hydration/ObjectHydrator.js +50 -33
  52. package/index.d.ts +2 -2
  53. package/index.js +1 -2
  54. package/logging/DefaultLogger.d.ts +1 -1
  55. package/logging/DefaultLogger.js +1 -0
  56. package/logging/SimpleLogger.d.ts +1 -1
  57. package/logging/colors.d.ts +1 -1
  58. package/logging/colors.js +7 -6
  59. package/logging/index.d.ts +1 -0
  60. package/logging/index.js +1 -0
  61. package/logging/inspect.d.ts +2 -0
  62. package/logging/inspect.js +11 -0
  63. package/metadata/EntitySchema.d.ts +22 -24
  64. package/metadata/EntitySchema.js +73 -51
  65. package/metadata/MetadataDiscovery.d.ts +6 -10
  66. package/metadata/MetadataDiscovery.js +289 -298
  67. package/metadata/MetadataProvider.d.ts +11 -2
  68. package/metadata/MetadataProvider.js +46 -2
  69. package/metadata/MetadataStorage.d.ts +13 -11
  70. package/metadata/MetadataStorage.js +70 -37
  71. package/metadata/MetadataValidator.d.ts +2 -9
  72. package/metadata/MetadataValidator.js +22 -38
  73. package/metadata/discover-entities.d.ts +5 -0
  74. package/metadata/discover-entities.js +40 -0
  75. package/metadata/index.d.ts +1 -1
  76. package/metadata/index.js +1 -1
  77. package/metadata/types.d.ts +480 -0
  78. package/metadata/types.js +1 -0
  79. package/naming-strategy/AbstractNamingStrategy.d.ts +8 -4
  80. package/naming-strategy/AbstractNamingStrategy.js +8 -2
  81. package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
  82. package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
  83. package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
  84. package/naming-strategy/MongoNamingStrategy.js +6 -6
  85. package/naming-strategy/NamingStrategy.d.ts +14 -4
  86. package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
  87. package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
  88. package/not-supported.d.ts +2 -0
  89. package/not-supported.js +4 -0
  90. package/package.json +19 -11
  91. package/platforms/ExceptionConverter.js +1 -1
  92. package/platforms/Platform.d.ts +6 -13
  93. package/platforms/Platform.js +17 -43
  94. package/serialization/EntitySerializer.d.ts +5 -0
  95. package/serialization/EntitySerializer.js +47 -27
  96. package/serialization/EntityTransformer.js +28 -18
  97. package/serialization/SerializationContext.d.ts +6 -6
  98. package/serialization/SerializationContext.js +16 -13
  99. package/types/ArrayType.d.ts +1 -1
  100. package/types/ArrayType.js +2 -3
  101. package/types/BigIntType.d.ts +8 -6
  102. package/types/BigIntType.js +1 -1
  103. package/types/BlobType.d.ts +0 -1
  104. package/types/BlobType.js +0 -3
  105. package/types/BooleanType.d.ts +2 -1
  106. package/types/BooleanType.js +3 -0
  107. package/types/DecimalType.d.ts +6 -4
  108. package/types/DecimalType.js +3 -3
  109. package/types/DoubleType.js +2 -2
  110. package/types/EnumArrayType.js +1 -2
  111. package/types/JsonType.d.ts +1 -1
  112. package/types/JsonType.js +7 -2
  113. package/types/TinyIntType.js +1 -1
  114. package/types/Type.d.ts +2 -4
  115. package/types/Type.js +3 -3
  116. package/types/Uint8ArrayType.d.ts +0 -1
  117. package/types/Uint8ArrayType.js +1 -4
  118. package/types/index.d.ts +1 -1
  119. package/typings.d.ts +148 -109
  120. package/typings.js +50 -42
  121. package/unit-of-work/ChangeSet.d.ts +2 -6
  122. package/unit-of-work/ChangeSet.js +4 -5
  123. package/unit-of-work/ChangeSetComputer.d.ts +1 -3
  124. package/unit-of-work/ChangeSetComputer.js +14 -12
  125. package/unit-of-work/ChangeSetPersister.d.ts +5 -4
  126. package/unit-of-work/ChangeSetPersister.js +65 -33
  127. package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
  128. package/unit-of-work/CommitOrderCalculator.js +13 -13
  129. package/unit-of-work/UnitOfWork.d.ts +10 -3
  130. package/unit-of-work/UnitOfWork.js +139 -96
  131. package/utils/AbstractSchemaGenerator.d.ts +5 -5
  132. package/utils/AbstractSchemaGenerator.js +18 -16
  133. package/utils/AsyncContext.d.ts +6 -0
  134. package/utils/AsyncContext.js +42 -0
  135. package/utils/Configuration.d.ts +753 -207
  136. package/utils/Configuration.js +145 -190
  137. package/utils/ConfigurationLoader.d.ts +1 -54
  138. package/utils/ConfigurationLoader.js +1 -352
  139. package/utils/Cursor.d.ts +0 -3
  140. package/utils/Cursor.js +9 -6
  141. package/utils/DataloaderUtils.d.ts +15 -5
  142. package/utils/DataloaderUtils.js +65 -17
  143. package/utils/EntityComparator.d.ts +13 -9
  144. package/utils/EntityComparator.js +85 -43
  145. package/utils/QueryHelper.d.ts +14 -6
  146. package/utils/QueryHelper.js +87 -25
  147. package/utils/RawQueryFragment.d.ts +48 -25
  148. package/utils/RawQueryFragment.js +66 -70
  149. package/utils/RequestContext.js +2 -2
  150. package/utils/TransactionContext.js +2 -2
  151. package/utils/TransactionManager.d.ts +65 -0
  152. package/utils/TransactionManager.js +223 -0
  153. package/utils/Utils.d.ts +12 -119
  154. package/utils/Utils.js +97 -373
  155. package/utils/clone.js +8 -23
  156. package/utils/env-vars.d.ts +7 -0
  157. package/utils/env-vars.js +97 -0
  158. package/utils/fs-utils.d.ts +32 -0
  159. package/utils/fs-utils.js +178 -0
  160. package/utils/index.d.ts +2 -1
  161. package/utils/index.js +2 -1
  162. package/utils/upsert-utils.d.ts +9 -4
  163. package/utils/upsert-utils.js +55 -4
  164. package/decorators/Check.d.ts +0 -3
  165. package/decorators/Check.js +0 -13
  166. package/decorators/CreateRequestContext.d.ts +0 -3
  167. package/decorators/CreateRequestContext.js +0 -32
  168. package/decorators/Embeddable.d.ts +0 -8
  169. package/decorators/Embeddable.js +0 -11
  170. package/decorators/Embedded.d.ts +0 -18
  171. package/decorators/Embedded.js +0 -18
  172. package/decorators/Entity.d.ts +0 -18
  173. package/decorators/Entity.js +0 -12
  174. package/decorators/Enum.d.ts +0 -9
  175. package/decorators/Enum.js +0 -16
  176. package/decorators/Filter.d.ts +0 -2
  177. package/decorators/Filter.js +0 -8
  178. package/decorators/Formula.d.ts +0 -4
  179. package/decorators/Formula.js +0 -15
  180. package/decorators/Indexed.d.ts +0 -19
  181. package/decorators/Indexed.js +0 -20
  182. package/decorators/ManyToMany.d.ts +0 -40
  183. package/decorators/ManyToMany.js +0 -14
  184. package/decorators/ManyToOne.d.ts +0 -30
  185. package/decorators/ManyToOne.js +0 -14
  186. package/decorators/OneToMany.d.ts +0 -28
  187. package/decorators/OneToMany.js +0 -17
  188. package/decorators/OneToOne.d.ts +0 -24
  189. package/decorators/OneToOne.js +0 -7
  190. package/decorators/PrimaryKey.d.ts +0 -8
  191. package/decorators/PrimaryKey.js +0 -20
  192. package/decorators/Property.d.ts +0 -250
  193. package/decorators/Property.js +0 -32
  194. package/decorators/Transactional.d.ts +0 -13
  195. package/decorators/Transactional.js +0 -28
  196. package/decorators/hooks.d.ts +0 -16
  197. package/decorators/hooks.js +0 -47
  198. package/decorators/index.d.ts +0 -17
  199. package/decorators/index.js +0 -17
  200. package/entity/ArrayCollection.d.ts +0 -116
  201. package/entity/ArrayCollection.js +0 -402
  202. package/entity/EntityValidator.d.ts +0 -19
  203. package/entity/EntityValidator.js +0 -150
  204. package/metadata/ReflectMetadataProvider.d.ts +0 -8
  205. package/metadata/ReflectMetadataProvider.js +0 -44
  206. package/utils/resolveContextProvider.d.ts +0 -10
  207. package/utils/resolveContextProvider.js +0 -28
@@ -1,150 +0,0 @@
1
- import { ReferenceKind } from '../enums.js';
2
- import { Utils } from '../utils/Utils.js';
3
- import { ValidationError } from '../errors.js';
4
- import { helper } from './wrap.js';
5
- import { RawQueryFragment } from '../utils/RawQueryFragment.js';
6
- export class EntityValidator {
7
- strict;
8
- KNOWN_TYPES = new Set(['string', 'number', 'boolean', 'bigint', 'Uint8Array', 'Date', 'Buffer', 'RegExp']);
9
- constructor(strict) {
10
- this.strict = strict;
11
- }
12
- validate(entity, payload, meta) {
13
- meta.props.forEach(prop => {
14
- if (prop.inherited) {
15
- return;
16
- }
17
- if ([ReferenceKind.ONE_TO_MANY, ReferenceKind.MANY_TO_MANY].includes(prop.kind)) {
18
- this.validateCollection(entity, prop);
19
- }
20
- const SCALAR_TYPES = ['string', 'number', 'boolean', 'Date'];
21
- if (prop.kind !== ReferenceKind.SCALAR || !SCALAR_TYPES.includes(prop.type)) {
22
- return;
23
- }
24
- const newValue = this.validateProperty(prop, this.getValue(payload, prop), entity);
25
- if (this.getValue(payload, prop) === newValue) {
26
- return;
27
- }
28
- this.setValue(payload, prop, newValue);
29
- if (entity[prop.name]) {
30
- entity[prop.name] = payload[prop.name];
31
- }
32
- });
33
- }
34
- validateRequired(entity) {
35
- const wrapped = helper(entity);
36
- for (const prop of wrapped.__meta.props) {
37
- if (!prop.nullable &&
38
- !prop.autoincrement &&
39
- !prop.default &&
40
- !prop.defaultRaw &&
41
- !prop.onCreate &&
42
- !prop.generated &&
43
- !prop.embedded &&
44
- ![ReferenceKind.ONE_TO_MANY, ReferenceKind.MANY_TO_MANY].includes(prop.kind) &&
45
- prop.name !== wrapped.__meta.root.discriminatorColumn &&
46
- prop.type.toLowerCase() !== 'objectid' &&
47
- prop.persist !== false &&
48
- entity[prop.name] == null) {
49
- throw ValidationError.propertyRequired(entity, prop);
50
- }
51
- }
52
- }
53
- validateProperty(prop, givenValue, entity) {
54
- if (givenValue == null || givenValue instanceof RawQueryFragment) {
55
- return givenValue;
56
- }
57
- const expectedType = prop.runtimeType;
58
- const propName = prop.embedded ? prop.name.replace(/~/g, '.') : prop.name;
59
- let givenType = Utils.getObjectType(givenValue);
60
- let ret = givenValue;
61
- if (!this.strict) {
62
- ret = this.fixTypes(expectedType, givenType, givenValue);
63
- givenType = Utils.getObjectType(ret);
64
- }
65
- if (prop.enum && prop.items) {
66
- /* v8 ignore next 3 */
67
- if (!prop.items.some(it => it === givenValue)) {
68
- throw ValidationError.fromWrongPropertyType(entity, propName, expectedType, givenType, givenValue);
69
- }
70
- }
71
- else {
72
- if (givenType !== expectedType && this.KNOWN_TYPES.has(expectedType)) {
73
- throw ValidationError.fromWrongPropertyType(entity, propName, expectedType, givenType, givenValue);
74
- }
75
- }
76
- return ret;
77
- }
78
- validateParams(params, type = 'search condition', field) {
79
- if (Utils.isPrimaryKey(params) || Utils.isEntity(params)) {
80
- return;
81
- }
82
- if (Array.isArray(params)) {
83
- return params.forEach(item => this.validateParams(item, type, field));
84
- }
85
- if (Utils.isPlainObject(params)) {
86
- Object.keys(params).forEach(k => {
87
- this.validateParams(params[k], type, k);
88
- });
89
- }
90
- }
91
- validatePrimaryKey(entity, meta) {
92
- const pkExists = meta.primaryKeys.every(pk => entity[pk] != null) || entity[meta.serializedPrimaryKey] != null;
93
- if (!entity || !pkExists) {
94
- throw ValidationError.fromMergeWithoutPK(meta);
95
- }
96
- }
97
- validateEmptyWhere(where) {
98
- if (Utils.isEmpty(where)) {
99
- throw new Error(`You cannot call 'EntityManager.findOne()' with empty 'where' parameter`);
100
- }
101
- }
102
- getValue(o, prop) {
103
- if (prop.embedded && prop.embedded[0] in o) {
104
- return o[prop.embedded[0]]?.[prop.embedded[1]];
105
- }
106
- return o[prop.name];
107
- }
108
- setValue(o, prop, v) {
109
- /* v8 ignore next 3 */
110
- if (prop.embedded && prop.embedded[0] in o) {
111
- return o[prop.embedded[0]][prop.embedded[1]] = v;
112
- }
113
- o[prop.name] = v;
114
- }
115
- validateCollection(entity, prop) {
116
- if (prop.hydrate !== false && helper(entity).__initialized && !entity[prop.name]) {
117
- throw ValidationError.fromCollectionNotInitialized(entity, prop);
118
- }
119
- }
120
- fixTypes(expectedType, givenType, givenValue) {
121
- if (expectedType === 'Date' && ['string', 'number'].includes(givenType)) {
122
- givenValue = this.fixDateType(givenValue);
123
- }
124
- if (expectedType === 'number' && givenType === 'string') {
125
- givenValue = this.fixNumberType(givenValue);
126
- }
127
- if (expectedType === 'boolean' && givenType === 'number') {
128
- givenValue = this.fixBooleanType(givenValue);
129
- }
130
- return givenValue;
131
- }
132
- fixDateType(givenValue) {
133
- let date;
134
- if (Utils.isString(givenValue) && givenValue.match(/^-?\d+(\.\d+)?$/)) {
135
- date = new Date(+givenValue);
136
- }
137
- else {
138
- date = new Date(givenValue);
139
- }
140
- return date.toString() !== 'Invalid Date' ? date : givenValue;
141
- }
142
- fixNumberType(givenValue) {
143
- const num = +givenValue;
144
- return '' + num === givenValue ? num : givenValue;
145
- }
146
- fixBooleanType(givenValue) {
147
- const bool = !!givenValue;
148
- return +bool === givenValue ? bool : givenValue;
149
- }
150
- }
@@ -1,8 +0,0 @@
1
- import 'reflect-metadata';
2
- import type { EntityMetadata, EntityProperty } from '../typings.js';
3
- import { MetadataProvider } from './MetadataProvider.js';
4
- export declare class ReflectMetadataProvider extends MetadataProvider {
5
- loadEntityMetadata(meta: EntityMetadata, name: string): void;
6
- protected initProperties(meta: EntityMetadata): void;
7
- protected initPropertyType(meta: EntityMetadata, prop: EntityProperty): void;
8
- }
@@ -1,44 +0,0 @@
1
- import 'reflect-metadata';
2
- import { MetadataProvider } from './MetadataProvider.js';
3
- import { ReferenceKind } from '../enums.js';
4
- import { Utils } from '../utils/Utils.js';
5
- export class ReflectMetadataProvider extends MetadataProvider {
6
- loadEntityMetadata(meta, name) {
7
- this.initProperties(meta);
8
- }
9
- initProperties(meta) {
10
- // load types and column names
11
- for (const prop of meta.props) {
12
- if (typeof prop.entity === 'string') {
13
- prop.type = prop.entity;
14
- }
15
- else if (prop.entity) {
16
- const tmp = prop.entity();
17
- prop.type = Array.isArray(tmp) ? tmp.map(t => Utils.className(t)).sort().join(' | ') : Utils.className(tmp);
18
- }
19
- else {
20
- this.initPropertyType(meta, prop);
21
- }
22
- }
23
- }
24
- initPropertyType(meta, prop) {
25
- const type = Reflect.getMetadata('design:type', meta.prototype, prop.name);
26
- if (!prop.type && (!type || (type === Object && prop.kind !== ReferenceKind.SCALAR)) && !(prop.enum && (prop.items?.length ?? 0) > 0)) {
27
- throw new Error(`Please provide either 'type' or 'entity' attribute in ${meta.className}.${prop.name}. If you are using decorators, ensure you have 'emitDecoratorMetadata' enabled in your tsconfig.json.`);
28
- }
29
- // Force mapping to UnknownType which is a string when we see just `Object`, as that often means failed inference.
30
- // This is to prevent defaulting to JSON column type, which can often be hard to revert and cause hard to understand issues with PKs.
31
- // If there are explicitly provided `columnTypes`, we use those instead for the inference, this way
32
- // we can have things like `columnType: 'timestamp'` be respected as `type: 'Date'`.
33
- if (prop.kind === ReferenceKind.SCALAR && type === Object && !prop.columnTypes) {
34
- prop.type ??= 'any';
35
- return;
36
- }
37
- let typeName = type?.name;
38
- if (typeName && ['string', 'number', 'boolean', 'array', 'object'].includes(typeName.toLowerCase())) {
39
- typeName = typeName.toLowerCase();
40
- }
41
- prop.type ??= typeName;
42
- prop.runtimeType ??= typeName;
43
- }
44
- }
@@ -1,10 +0,0 @@
1
- import { EntityManager } from '../EntityManager.js';
2
- import { MikroORM } from '../MikroORM.js';
3
- import type { ContextProvider, MaybePromise } from '../typings.js';
4
- /**
5
- * Find `EntityManager` in provided context, or else in instance's `orm` or `em` properties.
6
- */
7
- export declare function resolveContextProvider<T>(caller: T & {
8
- orm?: MaybePromise<MikroORM>;
9
- em?: MaybePromise<EntityManager>;
10
- }, provider?: ContextProvider<T>): Promise<EntityManager | undefined>;
@@ -1,28 +0,0 @@
1
- import { EntityRepository } from '../entity/EntityRepository.js';
2
- import { EntityManager } from '../EntityManager.js';
3
- import { MikroORM } from '../MikroORM.js';
4
- function getEntityManager(caller, context) {
5
- if (context instanceof EntityManager) {
6
- return context;
7
- }
8
- if (context instanceof EntityRepository) {
9
- return context.getEntityManager();
10
- }
11
- if (context instanceof MikroORM) {
12
- return context.em;
13
- }
14
- if (caller.em instanceof EntityManager) {
15
- return caller.em;
16
- }
17
- if (caller.orm instanceof MikroORM) {
18
- return caller.orm.em;
19
- }
20
- return undefined;
21
- }
22
- /**
23
- * Find `EntityManager` in provided context, or else in instance's `orm` or `em` properties.
24
- */
25
- export async function resolveContextProvider(caller, provider) {
26
- const context = typeof provider === 'function' ? await provider(caller) : await provider;
27
- return getEntityManager({ orm: await caller.orm, em: await caller.em }, context);
28
- }