@mikro-orm/core 6.4.17-dev.47 → 6.4.17-dev.49

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.
@@ -552,6 +552,8 @@ export interface MergeOptions {
552
552
  refresh?: boolean;
553
553
  convertCustomTypes?: boolean;
554
554
  schema?: string;
555
+ disableContextResolution?: boolean;
556
+ keepIdentity?: boolean;
555
557
  }
556
558
  export interface ForkOptions {
557
559
  /** do we want a clear identity map? defaults to true */
package/EntityManager.js CHANGED
@@ -988,8 +988,7 @@ class EntityManager {
988
988
  if (propagateToUpperContext) {
989
989
  // ensure all entities from inner context are merged to the upper one
990
990
  for (const entity of fork.unitOfWork.getIdentityMap()) {
991
- em.unitOfWork.register(entity);
992
- entity.__helper.__em = em;
991
+ em.merge(entity, { disableContextResolution: true, keepIdentity: true, refresh: true });
993
992
  }
994
993
  }
995
994
  return ret;
@@ -1174,10 +1173,10 @@ class EntityManager {
1174
1173
  * via second parameter. By default, it will return already loaded entities without modifying them.
1175
1174
  */
1176
1175
  merge(entityName, data, options = {}) {
1177
- const em = this.getContext();
1178
1176
  if (utils_1.Utils.isEntity(entityName)) {
1179
- return em.merge(entityName.constructor.name, entityName, data);
1177
+ return this.merge(entityName.constructor.name, entityName, data);
1180
1178
  }
1179
+ const em = options.disableContextResolution ? this : this.getContext();
1181
1180
  options.schema ??= em._schema;
1182
1181
  entityName = utils_1.Utils.className(entityName);
1183
1182
  em.validator.validatePrimaryKey(data, em.metadata.get(entityName));
@@ -1187,7 +1186,12 @@ class EntityManager {
1187
1186
  }
1188
1187
  const meta = em.metadata.find(entityName);
1189
1188
  const childMeta = em.metadata.getByDiscriminatorColumn(meta, data);
1190
- entity = utils_1.Utils.isEntity(data) ? data : em.entityFactory.create(entityName, data, { merge: true, ...options });
1189
+ const dataIsEntity = utils_1.Utils.isEntity(data);
1190
+ if (options.keepIdentity && entity && dataIsEntity && entity !== data) {
1191
+ em.entityFactory.mergeData(meta, entity, (0, entity_1.helper)(data).__originalEntityData, { initialized: true, merge: true, ...options });
1192
+ return entity;
1193
+ }
1194
+ entity = dataIsEntity ? data : em.entityFactory.create(entityName, data, { merge: true, ...options });
1191
1195
  em.validator.validate(entity, data, childMeta ?? meta);
1192
1196
  em.unitOfWork.merge(entity);
1193
1197
  return entity;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/core",
3
- "version": "6.4.17-dev.47",
3
+ "version": "6.4.17-dev.49",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -64,7 +64,7 @@
64
64
  "esprima": "4.0.1",
65
65
  "fs-extra": "11.3.0",
66
66
  "globby": "11.1.0",
67
- "mikro-orm": "6.4.17-dev.47",
67
+ "mikro-orm": "6.4.17-dev.49",
68
68
  "reflect-metadata": "0.2.2"
69
69
  }
70
70
  }