@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.
- package/EntityManager.d.ts +96 -58
- package/EntityManager.js +465 -395
- package/MikroORM.d.ts +45 -35
- package/MikroORM.js +109 -160
- package/README.md +3 -2
- package/cache/CacheAdapter.js +1 -2
- package/cache/FileCacheAdapter.d.ts +2 -2
- package/cache/FileCacheAdapter.js +20 -27
- package/cache/GeneratedCacheAdapter.d.ts +2 -3
- package/cache/GeneratedCacheAdapter.js +1 -7
- package/cache/MemoryCacheAdapter.d.ts +1 -1
- package/cache/MemoryCacheAdapter.js +1 -5
- package/cache/NullCacheAdapter.d.ts +1 -1
- package/cache/NullCacheAdapter.js +1 -5
- package/cache/index.d.ts +4 -5
- package/cache/index.js +4 -21
- package/connections/Connection.d.ts +22 -14
- package/connections/Connection.js +27 -23
- package/connections/index.d.ts +1 -1
- package/connections/index.js +1 -17
- package/drivers/DatabaseDriver.d.ts +25 -15
- package/drivers/DatabaseDriver.js +77 -64
- package/drivers/IDatabaseDriver.d.ts +40 -16
- package/drivers/IDatabaseDriver.js +1 -4
- package/drivers/index.d.ts +2 -2
- package/drivers/index.js +2 -18
- package/entity/BaseEntity.d.ts +6 -7
- package/entity/BaseEntity.js +16 -23
- package/entity/Collection.d.ts +98 -34
- package/entity/Collection.js +466 -131
- package/entity/EntityAssigner.d.ts +3 -3
- package/entity/EntityAssigner.js +67 -64
- package/entity/EntityFactory.d.ts +10 -3
- package/entity/EntityFactory.js +112 -91
- package/entity/EntityHelper.d.ts +2 -2
- package/entity/EntityHelper.js +66 -53
- package/entity/EntityIdentifier.d.ts +1 -1
- package/entity/EntityIdentifier.js +1 -5
- package/entity/EntityLoader.d.ts +8 -7
- package/entity/EntityLoader.js +161 -128
- package/entity/EntityRepository.d.ts +8 -8
- package/entity/EntityRepository.js +7 -11
- package/entity/Reference.d.ts +10 -13
- package/entity/Reference.js +64 -46
- package/entity/WrappedEntity.d.ts +12 -17
- package/entity/WrappedEntity.js +22 -31
- package/entity/defineEntity.d.ts +568 -0
- package/entity/defineEntity.js +529 -0
- package/entity/index.d.ts +14 -13
- package/entity/index.js +14 -29
- package/entity/utils.d.ts +8 -1
- package/entity/utils.js +22 -13
- package/entity/validators.d.ts +11 -0
- package/entity/validators.js +65 -0
- package/entity/wrap.d.ts +1 -1
- package/entity/wrap.js +2 -6
- package/enums.d.ts +24 -9
- package/enums.js +50 -41
- package/errors.d.ts +11 -3
- package/errors.js +42 -32
- package/events/EventManager.d.ts +5 -4
- package/events/EventManager.js +26 -22
- package/events/EventSubscriber.d.ts +8 -5
- package/events/EventSubscriber.js +1 -2
- package/events/TransactionEventBroadcaster.d.ts +3 -3
- package/events/TransactionEventBroadcaster.js +1 -5
- package/events/index.d.ts +3 -3
- package/events/index.js +3 -19
- package/exceptions.js +18 -39
- package/hydration/Hydrator.d.ts +5 -5
- package/hydration/Hydrator.js +2 -6
- package/hydration/ObjectHydrator.d.ts +7 -7
- package/hydration/ObjectHydrator.js +58 -50
- package/hydration/index.d.ts +2 -2
- package/hydration/index.js +2 -18
- package/index.d.ts +21 -21
- package/index.js +20 -46
- package/logging/DefaultLogger.d.ts +2 -2
- package/logging/DefaultLogger.js +10 -13
- package/logging/Logger.d.ts +1 -1
- package/logging/Logger.js +1 -2
- package/logging/SimpleLogger.d.ts +3 -3
- package/logging/SimpleLogger.js +2 -6
- package/logging/colors.js +1 -5
- package/logging/index.d.ts +5 -4
- package/logging/index.js +5 -20
- package/logging/inspect.d.ts +2 -0
- package/logging/inspect.js +16 -0
- package/metadata/EntitySchema.d.ts +14 -10
- package/metadata/EntitySchema.js +78 -64
- package/metadata/MetadataDiscovery.d.ts +11 -14
- package/metadata/MetadataDiscovery.js +278 -317
- package/metadata/MetadataProvider.d.ts +13 -4
- package/metadata/MetadataProvider.js +47 -8
- package/metadata/MetadataStorage.d.ts +2 -7
- package/metadata/MetadataStorage.js +19 -35
- package/metadata/MetadataValidator.d.ts +3 -10
- package/metadata/MetadataValidator.js +51 -64
- package/metadata/discover-entities.d.ts +5 -0
- package/metadata/discover-entities.js +40 -0
- package/metadata/index.d.ts +6 -6
- package/metadata/index.js +6 -22
- package/metadata/types.d.ts +480 -0
- package/metadata/types.js +1 -0
- package/naming-strategy/AbstractNamingStrategy.d.ts +7 -3
- package/naming-strategy/AbstractNamingStrategy.js +11 -9
- package/naming-strategy/EntityCaseNamingStrategy.d.ts +1 -1
- package/naming-strategy/EntityCaseNamingStrategy.js +2 -6
- package/naming-strategy/MongoNamingStrategy.d.ts +1 -1
- package/naming-strategy/MongoNamingStrategy.js +2 -6
- package/naming-strategy/NamingStrategy.d.ts +12 -2
- package/naming-strategy/NamingStrategy.js +1 -2
- package/naming-strategy/UnderscoreNamingStrategy.d.ts +1 -1
- package/naming-strategy/UnderscoreNamingStrategy.js +2 -6
- package/naming-strategy/index.d.ts +5 -5
- package/naming-strategy/index.js +5 -21
- package/not-supported.d.ts +2 -0
- package/not-supported.js +4 -0
- package/package.json +19 -20
- package/platforms/ExceptionConverter.d.ts +2 -2
- package/platforms/ExceptionConverter.js +4 -8
- package/platforms/Platform.d.ts +15 -22
- package/platforms/Platform.js +58 -88
- package/platforms/index.d.ts +2 -2
- package/platforms/index.js +2 -18
- package/serialization/EntitySerializer.d.ts +4 -2
- package/serialization/EntitySerializer.js +64 -51
- package/serialization/EntityTransformer.d.ts +1 -1
- package/serialization/EntityTransformer.js +48 -42
- package/serialization/SerializationContext.d.ts +2 -2
- package/serialization/SerializationContext.js +24 -25
- package/serialization/index.d.ts +3 -3
- package/serialization/index.js +3 -19
- package/types/ArrayType.d.ts +3 -3
- package/types/ArrayType.js +6 -11
- package/types/BigIntType.d.ts +12 -9
- package/types/BigIntType.js +6 -6
- package/types/BlobType.d.ts +3 -4
- package/types/BlobType.js +2 -11
- package/types/BooleanType.d.ts +5 -4
- package/types/BooleanType.js +5 -6
- package/types/CharacterType.d.ts +3 -3
- package/types/CharacterType.js +2 -6
- package/types/DateTimeType.d.ts +3 -3
- package/types/DateTimeType.js +2 -6
- package/types/DateType.d.ts +3 -3
- package/types/DateType.js +2 -6
- package/types/DecimalType.d.ts +9 -7
- package/types/DecimalType.js +5 -8
- package/types/DoubleType.d.ts +3 -3
- package/types/DoubleType.js +4 -7
- package/types/EnumArrayType.d.ts +4 -4
- package/types/EnumArrayType.js +4 -10
- package/types/EnumType.d.ts +3 -3
- package/types/EnumType.js +2 -6
- package/types/FloatType.d.ts +3 -3
- package/types/FloatType.js +2 -6
- package/types/IntegerType.d.ts +3 -3
- package/types/IntegerType.js +2 -6
- package/types/IntervalType.d.ts +3 -3
- package/types/IntervalType.js +2 -6
- package/types/JsonType.d.ts +4 -4
- package/types/JsonType.js +9 -8
- package/types/MediumIntType.d.ts +3 -3
- package/types/MediumIntType.js +2 -6
- package/types/SmallIntType.d.ts +3 -3
- package/types/SmallIntType.js +2 -6
- package/types/StringType.d.ts +3 -3
- package/types/StringType.js +2 -6
- package/types/TextType.d.ts +3 -3
- package/types/TextType.js +2 -6
- package/types/TimeType.d.ts +3 -3
- package/types/TimeType.js +4 -8
- package/types/TinyIntType.d.ts +3 -3
- package/types/TinyIntType.js +3 -6
- package/types/Type.d.ts +4 -6
- package/types/Type.js +6 -10
- package/types/Uint8ArrayType.d.ts +3 -4
- package/types/Uint8ArrayType.js +3 -12
- package/types/UnknownType.d.ts +3 -3
- package/types/UnknownType.js +2 -6
- package/types/UuidType.d.ts +3 -3
- package/types/UuidType.js +2 -6
- package/types/index.d.ts +25 -25
- package/types/index.js +52 -79
- package/typings.d.ts +134 -93
- package/typings.js +67 -65
- package/unit-of-work/ChangeSet.d.ts +1 -4
- package/unit-of-work/ChangeSet.js +13 -17
- package/unit-of-work/ChangeSetComputer.d.ts +8 -9
- package/unit-of-work/ChangeSetComputer.js +36 -38
- package/unit-of-work/ChangeSetPersister.d.ts +11 -9
- package/unit-of-work/ChangeSetPersister.js +100 -65
- package/unit-of-work/CommitOrderCalculator.d.ts +1 -1
- package/unit-of-work/CommitOrderCalculator.js +6 -10
- package/unit-of-work/IdentityMap.d.ts +1 -1
- package/unit-of-work/IdentityMap.js +1 -5
- package/unit-of-work/UnitOfWork.d.ts +16 -8
- package/unit-of-work/UnitOfWork.js +266 -209
- package/unit-of-work/index.d.ts +6 -6
- package/unit-of-work/index.js +6 -22
- package/utils/AbstractSchemaGenerator.d.ts +11 -11
- package/utils/AbstractSchemaGenerator.js +21 -20
- package/utils/Configuration.d.ts +774 -224
- package/utils/Configuration.js +166 -216
- package/utils/ConfigurationLoader.d.ts +1 -53
- package/utils/ConfigurationLoader.js +1 -367
- package/utils/Cursor.d.ts +6 -9
- package/utils/Cursor.js +25 -25
- package/utils/DataloaderUtils.d.ts +18 -8
- package/utils/DataloaderUtils.js +63 -21
- package/utils/EntityComparator.d.ts +9 -5
- package/utils/EntityComparator.js +155 -108
- package/utils/NullHighlighter.d.ts +1 -1
- package/utils/NullHighlighter.js +1 -5
- package/utils/QueryHelper.d.ts +12 -4
- package/utils/QueryHelper.js +110 -53
- package/utils/RawQueryFragment.d.ts +37 -14
- package/utils/RawQueryFragment.js +50 -33
- package/utils/RequestContext.d.ts +2 -2
- package/utils/RequestContext.js +3 -7
- package/utils/TransactionContext.d.ts +1 -1
- package/utils/TransactionContext.js +4 -8
- package/utils/TransactionManager.d.ts +65 -0
- package/utils/TransactionManager.js +223 -0
- package/utils/Utils.d.ts +16 -100
- package/utils/Utils.js +114 -332
- package/utils/clone.js +7 -11
- package/utils/env-vars.d.ts +3 -0
- package/utils/env-vars.js +87 -0
- package/utils/fs-utils.d.ts +12 -0
- package/utils/fs-utils.js +97 -0
- package/utils/index.d.ts +14 -13
- package/utils/index.js +14 -29
- package/utils/upsert-utils.d.ts +8 -3
- package/utils/upsert-utils.js +57 -10
- package/decorators/Check.d.ts +0 -3
- package/decorators/Check.js +0 -16
- package/decorators/CreateRequestContext.d.ts +0 -3
- package/decorators/CreateRequestContext.js +0 -33
- package/decorators/Embeddable.d.ts +0 -8
- package/decorators/Embeddable.js +0 -14
- package/decorators/Embedded.d.ts +0 -18
- package/decorators/Embedded.js +0 -20
- package/decorators/Entity.d.ts +0 -18
- package/decorators/Entity.js +0 -16
- package/decorators/Enum.d.ts +0 -9
- package/decorators/Enum.js +0 -19
- package/decorators/Filter.d.ts +0 -2
- package/decorators/Filter.js +0 -11
- package/decorators/Formula.d.ts +0 -5
- package/decorators/Formula.js +0 -18
- package/decorators/Indexed.d.ts +0 -17
- package/decorators/Indexed.js +0 -24
- package/decorators/ManyToMany.d.ts +0 -40
- package/decorators/ManyToMany.js +0 -16
- package/decorators/ManyToOne.d.ts +0 -30
- package/decorators/ManyToOne.js +0 -16
- package/decorators/OneToMany.d.ts +0 -28
- package/decorators/OneToMany.js +0 -20
- package/decorators/OneToOne.d.ts +0 -24
- package/decorators/OneToOne.js +0 -10
- package/decorators/PrimaryKey.d.ts +0 -9
- package/decorators/PrimaryKey.js +0 -23
- package/decorators/Property.d.ts +0 -250
- package/decorators/Property.js +0 -34
- package/decorators/Transactional.d.ts +0 -13
- package/decorators/Transactional.js +0 -31
- package/decorators/hooks.d.ts +0 -16
- package/decorators/hooks.js +0 -59
- package/decorators/index.d.ts +0 -17
- package/decorators/index.js +0 -36
- package/entity/ArrayCollection.d.ts +0 -116
- package/entity/ArrayCollection.js +0 -399
- package/entity/EntityValidator.d.ts +0 -19
- package/entity/EntityValidator.js +0 -154
- package/index.mjs +0 -199
- package/metadata/ReflectMetadataProvider.d.ts +0 -8
- package/metadata/ReflectMetadataProvider.js +0 -48
- package/utils/resolveContextProvider.d.ts +0 -10
- package/utils/resolveContextProvider.js +0 -31
package/entity/EntityHelper.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const WrappedEntity_1 = require("./WrappedEntity");
|
|
10
|
-
const enums_1 = require("../enums");
|
|
11
|
-
const wrap_1 = require("./wrap");
|
|
1
|
+
import { EagerProps, EntityRepositoryType, HiddenProps, OptionalProps, PrimaryKeyProp, } from '../typings.js';
|
|
2
|
+
import { EntityTransformer } from '../serialization/EntityTransformer.js';
|
|
3
|
+
import { Reference } from './Reference.js';
|
|
4
|
+
import { Utils } from '../utils/Utils.js';
|
|
5
|
+
import { WrappedEntity } from './WrappedEntity.js';
|
|
6
|
+
import { ReferenceKind } from '../enums.js';
|
|
7
|
+
import { helper } from './wrap.js';
|
|
8
|
+
import { inspect } from '../logging/inspect.js';
|
|
12
9
|
/**
|
|
13
10
|
* @internal
|
|
14
11
|
*/
|
|
15
|
-
class EntityHelper {
|
|
12
|
+
export class EntityHelper {
|
|
16
13
|
static decorate(meta, em) {
|
|
17
14
|
const fork = em.fork(); // use fork so we can access `EntityFactory`
|
|
18
15
|
const serializedPrimaryKey = meta.props.find(p => p.serializedPrimaryKey);
|
|
@@ -35,7 +32,7 @@ class EntityHelper {
|
|
|
35
32
|
const prototype = meta.prototype;
|
|
36
33
|
if (!prototype.toJSON) { // toJSON can be overridden
|
|
37
34
|
prototype.toJSON = function (...args) {
|
|
38
|
-
return
|
|
35
|
+
return EntityTransformer.toObject(this, ...args);
|
|
39
36
|
};
|
|
40
37
|
}
|
|
41
38
|
}
|
|
@@ -56,7 +53,7 @@ class EntityHelper {
|
|
|
56
53
|
__helper: {
|
|
57
54
|
get() {
|
|
58
55
|
Object.defineProperty(this, '__helper', {
|
|
59
|
-
value: new
|
|
56
|
+
value: new WrappedEntity(this, em.getHydrator(), ...helperParams),
|
|
60
57
|
enumerable: false,
|
|
61
58
|
configurable: true,
|
|
62
59
|
});
|
|
@@ -78,8 +75,8 @@ class EntityHelper {
|
|
|
78
75
|
Object
|
|
79
76
|
.values(meta.properties)
|
|
80
77
|
.forEach(prop => {
|
|
81
|
-
const isCollection = [
|
|
82
|
-
const isReference = [
|
|
78
|
+
const isCollection = [ReferenceKind.ONE_TO_MANY, ReferenceKind.MANY_TO_MANY].includes(prop.kind);
|
|
79
|
+
const isReference = [ReferenceKind.ONE_TO_ONE, ReferenceKind.MANY_TO_ONE].includes(prop.kind) && (prop.inversedBy || prop.mappedBy) && !prop.mapToPk;
|
|
83
80
|
if (isReference) {
|
|
84
81
|
Object.defineProperty(meta.prototype, prop.name, {
|
|
85
82
|
set(val) {
|
|
@@ -90,7 +87,7 @@ class EntityHelper {
|
|
|
90
87
|
});
|
|
91
88
|
return;
|
|
92
89
|
}
|
|
93
|
-
if (prop.inherited || prop.primary || prop.
|
|
90
|
+
if (prop.inherited || prop.primary || prop.accessor || prop.persist === false || prop.embedded || isCollection) {
|
|
94
91
|
return;
|
|
95
92
|
}
|
|
96
93
|
Object.defineProperty(meta.prototype, prop.name, {
|
|
@@ -101,13 +98,11 @@ class EntityHelper {
|
|
|
101
98
|
},
|
|
102
99
|
set(val) {
|
|
103
100
|
this.__helper.__data[prop.name] = val;
|
|
104
|
-
this.__helper.__touched = !this.__helper.hydrator.isRunning();
|
|
105
101
|
},
|
|
106
102
|
enumerable: true,
|
|
107
103
|
configurable: true,
|
|
108
104
|
});
|
|
109
105
|
this.__helper.__data[prop.name] = val;
|
|
110
|
-
this.__helper.__touched = !this.__helper.hydrator.isRunning();
|
|
111
106
|
},
|
|
112
107
|
configurable: true,
|
|
113
108
|
});
|
|
@@ -115,49 +110,60 @@ class EntityHelper {
|
|
|
115
110
|
}
|
|
116
111
|
static defineCustomInspect(meta) {
|
|
117
112
|
// @ts-ignore
|
|
118
|
-
meta.prototype[
|
|
119
|
-
const object = {
|
|
113
|
+
meta.prototype[Symbol.for('nodejs.util.inspect.custom')] ??= function (depth = 2) {
|
|
114
|
+
const object = {};
|
|
115
|
+
const keys = new Set(Utils.keys(this));
|
|
116
|
+
for (const prop of meta.props) {
|
|
117
|
+
if (keys.has(prop.name) || (prop.getter && prop.accessor === prop.name)) {
|
|
118
|
+
object[prop.name] = this[prop.name];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const key of keys) {
|
|
122
|
+
if (!meta.properties[key]) {
|
|
123
|
+
object[key] = this[key];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
120
126
|
// ensure we dont have internal symbols in the POJO
|
|
121
|
-
[
|
|
127
|
+
[OptionalProps, EntityRepositoryType, PrimaryKeyProp, EagerProps, HiddenProps].forEach(sym => delete object[sym]);
|
|
122
128
|
meta.props
|
|
123
129
|
.filter(prop => object[prop.name] === undefined)
|
|
124
130
|
.forEach(prop => delete object[prop.name]);
|
|
125
|
-
const ret =
|
|
126
|
-
let name =
|
|
131
|
+
const ret = inspect(object, { depth });
|
|
132
|
+
let name = this.constructor.name;
|
|
127
133
|
const showEM = ['true', 't', '1'].includes(process.env.MIKRO_ORM_LOG_EM_ID?.toString().toLowerCase() ?? '');
|
|
128
134
|
if (showEM) {
|
|
129
|
-
if (
|
|
130
|
-
name += ` [managed by ${
|
|
135
|
+
if (helper(this).__em) {
|
|
136
|
+
name += ` [managed by ${helper(this).__em.id}]`;
|
|
131
137
|
}
|
|
132
138
|
else {
|
|
133
139
|
name += ` [not managed]`;
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
// distinguish not initialized entities
|
|
137
|
-
if (!
|
|
143
|
+
if (!helper(this).__initialized) {
|
|
138
144
|
name = `(${name})`;
|
|
139
145
|
}
|
|
140
146
|
return ret === '[Object]' ? `[${name}]` : name + ' ' + ret;
|
|
141
147
|
};
|
|
142
148
|
}
|
|
143
149
|
static defineReferenceProperty(meta, prop, ref, hydrator) {
|
|
144
|
-
const wrapped =
|
|
150
|
+
const wrapped = helper(ref);
|
|
145
151
|
Object.defineProperty(ref, prop.name, {
|
|
146
152
|
get() {
|
|
147
|
-
return
|
|
153
|
+
return helper(ref).__data[prop.name];
|
|
148
154
|
},
|
|
149
155
|
set(val) {
|
|
150
|
-
const entity =
|
|
151
|
-
const old =
|
|
152
|
-
|
|
156
|
+
const entity = Reference.unwrapReference(val ?? wrapped.__data[prop.name]);
|
|
157
|
+
const old = Reference.unwrapReference(wrapped.__data[prop.name]);
|
|
158
|
+
if (old && old !== entity && prop.kind === ReferenceKind.MANY_TO_ONE && prop.inversedBy && old[prop.inversedBy]) {
|
|
159
|
+
old[prop.inversedBy].removeWithoutPropagation(this);
|
|
160
|
+
}
|
|
161
|
+
wrapped.__data[prop.name] = Reference.wrapReference(val, prop);
|
|
153
162
|
// when propagation from inside hydration, we set the FK to the entity data immediately
|
|
154
163
|
if (val && hydrator.isRunning() && wrapped.__originalEntityData && prop.owner) {
|
|
155
|
-
wrapped.__originalEntityData[prop.name] =
|
|
164
|
+
wrapped.__originalEntityData[prop.name] = Utils.getPrimaryKeyValues(wrapped.__data[prop.name], prop.targetMeta, true);
|
|
156
165
|
}
|
|
157
|
-
|
|
158
|
-
wrapped.__touched = !hydrator.isRunning();
|
|
159
|
-
}
|
|
160
|
-
EntityHelper.propagate(meta, entity, this, prop, Reference_1.Reference.unwrapReference(val), old);
|
|
166
|
+
EntityHelper.propagate(meta, entity, this, prop, Reference.unwrapReference(val), old);
|
|
161
167
|
},
|
|
162
168
|
enumerable: true,
|
|
163
169
|
configurable: true,
|
|
@@ -172,51 +178,59 @@ class EntityHelper {
|
|
|
172
178
|
continue;
|
|
173
179
|
}
|
|
174
180
|
const inverse = value?.[prop2.name];
|
|
175
|
-
if (prop.
|
|
181
|
+
if (prop.ref && owner[prop.name]) {
|
|
182
|
+
// eslint-disable-next-line dot-notation
|
|
183
|
+
owner[prop.name]['property'] = prop;
|
|
184
|
+
}
|
|
185
|
+
if (Utils.isCollection(inverse) && inverse.isPartial()) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (prop.kind === ReferenceKind.MANY_TO_ONE && Utils.isCollection(inverse) && inverse.isInitialized()) {
|
|
176
189
|
inverse.addWithoutPropagation(owner);
|
|
177
|
-
|
|
190
|
+
helper(owner).__em?.getUnitOfWork().cancelOrphanRemoval(owner);
|
|
178
191
|
}
|
|
179
|
-
if (prop.kind ===
|
|
180
|
-
if ((value != null &&
|
|
192
|
+
if (prop.kind === ReferenceKind.ONE_TO_ONE) {
|
|
193
|
+
if ((value != null && Reference.unwrapReference(inverse) !== owner) ||
|
|
181
194
|
(value == null && entity?.[prop2.name] != null)) {
|
|
182
|
-
if (entity && (!prop.owner ||
|
|
195
|
+
if (entity && (!prop.owner || helper(entity).__initialized)) {
|
|
183
196
|
EntityHelper.propagateOneToOne(entity, owner, prop, prop2, value, old);
|
|
184
197
|
}
|
|
185
198
|
if (old && prop.orphanRemoval) {
|
|
186
|
-
|
|
199
|
+
helper(old).__em?.getUnitOfWork().scheduleOrphanRemoval(old);
|
|
187
200
|
}
|
|
188
201
|
}
|
|
189
202
|
}
|
|
190
203
|
}
|
|
191
204
|
}
|
|
192
205
|
static propagateOneToOne(entity, owner, prop, prop2, value, old) {
|
|
193
|
-
|
|
206
|
+
helper(entity).__pk = helper(entity).getPrimaryKey();
|
|
194
207
|
// the inverse side will be changed on the `value` too, so we need to clean-up and schedule orphan removal there too
|
|
195
|
-
if (!prop.primary && !prop2.mapToPk && value?.[prop2.name] != null &&
|
|
196
|
-
const other =
|
|
197
|
-
delete
|
|
208
|
+
if (!prop.primary && !prop2.mapToPk && value?.[prop2.name] != null && Reference.unwrapReference(value[prop2.name]) !== entity) {
|
|
209
|
+
const other = Reference.unwrapReference(value[prop2.name]);
|
|
210
|
+
delete helper(other).__data[prop.name];
|
|
198
211
|
if (prop2.orphanRemoval) {
|
|
199
|
-
|
|
212
|
+
helper(other).__em?.getUnitOfWork().scheduleOrphanRemoval(other);
|
|
200
213
|
}
|
|
201
214
|
}
|
|
202
215
|
if (value == null) {
|
|
203
216
|
entity[prop2.name] = value;
|
|
204
217
|
}
|
|
205
218
|
else if (prop2.mapToPk) {
|
|
206
|
-
entity[prop2.name] =
|
|
219
|
+
entity[prop2.name] = helper(owner).getPrimaryKey();
|
|
207
220
|
}
|
|
208
221
|
else {
|
|
209
|
-
entity[prop2.name] =
|
|
222
|
+
entity[prop2.name] = Reference.wrapReference(owner, prop);
|
|
210
223
|
}
|
|
211
224
|
if (old?.[prop2.name] != null) {
|
|
212
|
-
delete
|
|
225
|
+
delete helper(old).__data[prop2.name];
|
|
226
|
+
old[prop2.name] = null;
|
|
213
227
|
}
|
|
214
228
|
}
|
|
215
229
|
static ensurePropagation(entity) {
|
|
216
230
|
if (entity.__gettersDefined) {
|
|
217
231
|
return;
|
|
218
232
|
}
|
|
219
|
-
const wrapped =
|
|
233
|
+
const wrapped = helper(entity);
|
|
220
234
|
const meta = wrapped.__meta;
|
|
221
235
|
const platform = wrapped.__platform;
|
|
222
236
|
const serializedPrimaryKey = meta.props.find(p => p.serializedPrimaryKey);
|
|
@@ -250,4 +264,3 @@ class EntityHelper {
|
|
|
250
264
|
}
|
|
251
265
|
}
|
|
252
266
|
}
|
|
253
|
-
exports.EntityHelper = EntityHelper;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EntityIdentifier = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* @internal
|
|
6
3
|
*/
|
|
7
|
-
class EntityIdentifier {
|
|
4
|
+
export class EntityIdentifier {
|
|
8
5
|
value;
|
|
9
6
|
constructor(value) {
|
|
10
7
|
this.value = value;
|
|
@@ -16,4 +13,3 @@ class EntityIdentifier {
|
|
|
16
13
|
return this.value;
|
|
17
14
|
}
|
|
18
15
|
}
|
|
19
|
-
exports.EntityIdentifier = EntityIdentifier;
|
package/entity/EntityLoader.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { ConnectionType,
|
|
2
|
-
import type { EntityManager } from '../EntityManager';
|
|
3
|
-
import { LoadStrategy, type LockMode, type PopulateHint, PopulatePath, type QueryOrderMap } from '../enums';
|
|
4
|
-
import type { EntityField } from '../drivers/IDatabaseDriver';
|
|
5
|
-
import type { LoggingOptions } from '../logging/Logger';
|
|
1
|
+
import type { AnyEntity, ConnectionType, EntityProperty, FilterQuery, PopulateOptions } from '../typings.js';
|
|
2
|
+
import type { EntityManager } from '../EntityManager.js';
|
|
3
|
+
import { LoadStrategy, type LockMode, type PopulateHint, PopulatePath, type QueryOrderMap } from '../enums.js';
|
|
4
|
+
import type { EntityField, FilterOptions } from '../drivers/IDatabaseDriver.js';
|
|
5
|
+
import type { LoggingOptions } from '../logging/Logger.js';
|
|
6
6
|
export type EntityLoaderOptions<Entity, Fields extends string = PopulatePath.ALL, Excludes extends string = never> = {
|
|
7
7
|
where?: FilterQuery<Entity>;
|
|
8
8
|
populateWhere?: PopulateHint | `${PopulateHint}`;
|
|
@@ -14,7 +14,7 @@ export type EntityLoaderOptions<Entity, Fields extends string = PopulatePath.ALL
|
|
|
14
14
|
lookup?: boolean;
|
|
15
15
|
convertCustomTypes?: boolean;
|
|
16
16
|
ignoreLazyScalarProperties?: boolean;
|
|
17
|
-
filters?:
|
|
17
|
+
filters?: FilterOptions;
|
|
18
18
|
strategy?: LoadStrategy;
|
|
19
19
|
lockMode?: Exclude<LockMode, LockMode.OPTIMISTIC>;
|
|
20
20
|
schema?: string;
|
|
@@ -49,7 +49,8 @@ export declare class EntityLoader {
|
|
|
49
49
|
private findChildren;
|
|
50
50
|
private mergePrimaryCondition;
|
|
51
51
|
private populateField;
|
|
52
|
-
|
|
52
|
+
/** @internal */
|
|
53
|
+
findChildrenFromPivotTable<Entity extends object>(filtered: Entity[], prop: EntityProperty<Entity>, options: Required<EntityLoaderOptions<Entity>>, orderBy?: QueryOrderMap<Entity>[], populate?: PopulateOptions<Entity>, pivotJoin?: boolean): Promise<AnyEntity[][]>;
|
|
53
54
|
private extractChildCondition;
|
|
54
55
|
private buildFields;
|
|
55
56
|
private getChildReferences;
|