joist-core 2.4.0-next.38 → 2.4.0-next.39

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.
@@ -523,7 +523,7 @@ var EntityManager = class EntityManager {
523
523
  return require_upsert.upsert(this, type, input);
524
524
  }
525
525
  async clone(entityOrArray, opts) {
526
- const { deep = {}, skipIf, skip = {}, postClone } = opts ?? {};
526
+ const { deep = {}, skipIf, skip = {}, overrides, postClone } = opts ?? {};
527
527
  const todo = /* @__PURE__ */ new Set();
528
528
  const skipMap = /* @__PURE__ */ new WeakMap();
529
529
  await crawl(todo, skipMap, Array.isArray(entityOrArray) ? entityOrArray : [entityOrArray], deep, {
@@ -531,10 +531,14 @@ var EntityManager = class EntityManager {
531
531
  skip
532
532
  });
533
533
  const deferredRelations = [];
534
+ const overrideMap = /* @__PURE__ */ new WeakMap();
534
535
  const clones = [...todo].map((entity) => {
535
536
  const skip = skipMap.get(entity) ?? [];
537
+ const override = overrides?.(entity) ?? {};
538
+ overrideMap.set(entity, override);
536
539
  const meta = require_EntityMetadata.getMetadata(entity);
537
540
  const copy = Object.fromEntries(Object.values(meta.allFields).map((f) => {
541
+ if (Object.hasOwn(override, f.fieldName)) return [f.fieldName, override[f.fieldName]];
538
542
  if (skip.includes(f.fieldName)) return void 0;
539
543
  switch (f.kind) {
540
544
  case "primitive": if (!f.derived && !f.protected) return [f.fieldName, require_fields.getField(entity, f.fieldName)];
@@ -564,11 +568,15 @@ var EntityManager = class EntityManager {
564
568
  default: require_utils.assertNever(f);
565
569
  }
566
570
  }).filter(isDefined));
567
- return [entity, this.create(require_index.asConcreteCstr(meta.cstr), copy)];
571
+ return [entity, this.create(require_index.asConcreteCstr(meta.cstr), {
572
+ ...copy,
573
+ ...override
574
+ })];
568
575
  });
569
576
  const entityToClone = new Map(clones);
570
- clones.forEach(([, clone]) => {
577
+ clones.forEach(([original, clone]) => {
571
578
  require_index.getRelationEntries(clone).forEach(([fieldName, value]) => {
579
+ if (Object.hasOwn(overrideMap.get(original), fieldName)) return;
572
580
  if (value instanceof require_relations_ManyToOneReference.ManyToOneReferenceImpl || value instanceof require_relations_PolymorphicReference.PolymorphicReferenceImpl || value instanceof require_relations_ReactiveReference.ReactiveReferenceImpl) {
573
581
  const existingIdOrEntity = require_fields.getField(clone, fieldName);
574
582
  const existing = require_Entity.isEntity(existingIdOrEntity) ? existingIdOrEntity : this.getEntity(existingIdOrEntity);