import type { EntityManager } from '../EntityManager.js'; import type { EntityData, EntityDTO, EntityProperty, FromEntityType, IsSubset, MergeSelected } from '../typings.js'; /** Handles assigning data to entities, resolving relations, and propagating changes. */ export declare class EntityAssigner { /** Assigns the given data to the entity, resolving relations and handling custom types. */ static assign = FromEntityType, Convert extends boolean = false, Data extends EntityData | Partial> = EntityData | Partial>>(entity: Entity, data: Data & IsSubset, Data>, options?: AssignOptions): MergeSelected; private static assignProperty; /** * auto-wire 1:1 inverse side with owner as in no-sql drivers it can't be joined * also makes sure the link is bidirectional when creating new entities from nested structures * @internal */ static autoWireOneToOne(prop: EntityProperty, entity: O): void; private static validateEM; private static assignReference; private static assignCollection; private static assignEmbeddable; private static createCollectionItem; } export declare const assign: typeof EntityAssigner.assign; /** Options controlling how data is assigned to an entity via `assign()`. */ export interface AssignOptions { /** * Allows disabling processing of nested relations. When disabled, an object payload in place of a relation always * results in an `INSERT` query. To assign a value of the relation, use the foreign key instead of an object. * Defaults to `true`. */ updateNestedEntities?: boolean; /** * When assigning to a relation property with object payload and `updateNestedEntities` enabled (default), you can * control how a payload without a primary key is handled. By default, it is considered as a new object, resulting * in an `INSERT` query. Use `updateByPrimaryKey: false` to allow assigning the data on an existing relation instead. * Defaults to `true`. */ updateByPrimaryKey?: boolean; /** * When you have some properties in the payload that are not represented by an entity property mapping, you can skip * such unknown properties via `onlyProperties: true`. Defaults to `false`. */ onlyProperties?: boolean; /** * With `onlyOwnProperties` enabled, inverse sides of to-many relations are skipped, and payloads of other relations are converted * to foreign keys. Defaults to `false`. */ onlyOwnProperties?: boolean; /** * With `ignoreUndefined` enabled, `undefined` properties passed in the payload are skipped. Defaults to `false`. */ ignoreUndefined?: boolean; /** * `assign` excepts runtime values for properties using custom types. To be able to assign raw database values, you * can enable the `convertCustomTypes` option. Defaults to `false`. */ convertCustomTypes?: Convert; /** * When assigning to a JSON property, the value is replaced. Use `mergeObjectProperties: true` to enable deep merging * of the payload with the existing value. Defaults to `false`. */ mergeObjectProperties?: boolean; /** * When assigning to an embedded property, the values are deeply merged with the existing data. * Use `mergeEmbeddedProperties: false` to replace them instead. Defaults to `true`. */ mergeEmbeddedProperties?: boolean; /** * When assigning to a relation property, if the value is a POJO and `updateByPrimaryKey` is enabled, we check if * the target exists in the identity map based on its primary key and call `assign` on it recursively. If there is * no primary key provided, or the entity is not present in the context, such an entity is considered as new * (resulting in `INSERT` query), created via `em.create()`. You can use `merge: true` to use `em.merge()` instead, * which means there won't be any query used for persisting the relation. Defaults to `false`. */ merge?: boolean; /** * When assigning to a to-many relation properties (`Collection`) with `updateNestedEntities` and `updateByPrimaryKey` * enabled (default), you can use this option to override the relation schema. This is used only when trying to find * the entity reference in the current context. If it is not found, we create the relation entity using the target * entity schema. The value is automatically inferred from the target entity. */ schema?: string; /** * When using the static `assign()` helper, you can pass the EntityManager instance explicitly via the `em` option. * This is only needed when you try to assign a relation property. The value is automatically inferred from the target * entity when it is managed, or when you use `em.assign()` instead. */ em?: EntityManager; }