import type { AutoIncrement } from '../reflection'; import type { ClassType, HasDefault, ObjectKeysMatching, StringKeyOf } from '../types'; import type { BaseDatabase } from './database'; import type { DatabaseSession } from './session'; import { EntityClass } from './metadata'; import type { FilterQuery, FilterRecord } from './query'; export type EntityFilterInput = Partial | FilterRecord | string | number; export declare class ItemNotFound extends Error { constructor(message?: string); } export declare class BaseEntity { static query(this: EntityClass, session?: DatabaseSession): import("./query").QueryBuilder; static getDatabase(this: EntityClass): BaseDatabase; static registerDatabase(this: EntityClass, db: BaseDatabase): void; static reference(this: EntityClass, value: Partial | string | number): T; save(session?: DatabaseSession): Promise; delete(session?: DatabaseSession): Promise; remove(session?: DatabaseSession): Promise; } export type BaseEntityClassType = EntityClass & typeof BaseEntity; type FieldsMatching = { [K in StringKeyOf]: T[K] extends V ? (T[K] extends (...args: any[]) => any ? never : K) : never; }[StringKeyOf]; export type DataTypes = string | number | boolean | Date | object | null; export type EntityFieldKeys = FieldsMatching; export type EntityFields = Pick>; export type EntityClassFields = EntityFields>; export type EntityPick> = BaseEntity & Pick; export type EntityOptionalKeys = ObjectKeysMatching | ObjectKeysMatching | ObjectKeysMatching; export type EntityOptionals = { [K in keyof Pick, keyof T>>]?: T[K]; } & { [K in keyof Omit>]: T[K]; }; export type NewEntityFields = EntityOptionals>; export type EntityCreateData = NewEntityFields | Partial; export declare function bindEntityDatabase(entityClass: EntityClass, db: BaseDatabase): void; export declare function getEntityDatabase(entityClass: EntityClass): BaseDatabase; export declare function createEntity(Entity: ClassType, data: EntityCreateData): T; export declare function createEntities(Entity: ClassType, data: EntityCreateData[]): T[]; export declare function createQueuedEntity(Entity: ClassType, data: EntityCreateData, session: DatabaseSession): T; export declare function createQueuedEntities(Entity: ClassType, data: EntityCreateData[], session: DatabaseSession): T[]; export declare function createPersistedEntity(Entity: ClassType, data: EntityCreateData, session?: DatabaseSession): Promise; export declare function persistEntity(entity: T, session?: DatabaseSession): Promise; export declare function persistEntities(entities: T[], session?: DatabaseSession): Promise; export declare function createPersistedEntities(Entity: ClassType, data: EntityCreateData[], session?: DatabaseSession): Promise; export declare function markEntityClean(entity: object): void; /** Restores an entity instance to an unpersisted state. */ export declare function markEntityNew(entity: object): void; export declare function getEntityOriginal(entity: T): Partial; export declare function hasEntitySnapshot(entity: object): boolean; /** True only for the deliberately partial instance returned by `Entity.reference()`. */ export declare function isEntityReference(entity: object): boolean; export declare function getDirtyDetails(entity: T): Record; export declare function getDirtyFields(entity: T): (keyof T)[]; export declare function isEntityDirty(entity: object): boolean; export declare function isFieldDirty(entity: T, field: keyof T): boolean; export declare function getFieldOriginal(entity: T, field: K): T[K] | undefined; export declare function revertDirtyEntity(entity: object): void; export declare function getEntityFields(entity: T): Record; /** Returns a detached copy of every persisted entity field. */ export declare function getEntitySnapshot(entity: T): Record; export declare function getPKFieldForEntity(Entity: EntityClass): string; export declare function getPKFieldForEntityInstance(entity: object): string; interface GetEntityOptions> { schema: Schema; ids: unknown[]; keyField?: Field; fields?: Field[]; filter?: FilterQuery>; txn?: DatabaseSession; } export declare function getKeyedEntities>(options: GetEntityOptions): Promise>>; export declare function getKeyedGroupedEntities>(options: GetEntityOptions): Promise>>>; export declare function getEntitiesById>(options: GetEntityOptions): Promise>>; export declare function getEntitiesByIdWithKeyName>({ schema, ids, keyField, fields, filter, txn }: GetEntityOptions): Promise<{ keyField: Field | string; entities: Array>; }>; interface ResolveRelatedOptions, RelatedSchema extends BaseEntityClassType, RelatedKey extends string, RelatedFields extends keyof EntityClassFields> { src: Schema[]; srcIdField: IdKey; targetField: RelatedKey; targetSchema: RelatedSchema; targetFields?: RelatedFields[]; txn?: DatabaseSession; } export declare function resolveRelated, RelatedSchema extends BaseEntityClassType, RelatedKey extends string, RelatedFields extends keyof EntityClassFields>(options: ResolveRelatedOptions): Promise<(Omit & (null extends Schema[IdKey] ? { [K in RelatedKey]?: EntityLookupResult | undefined; } : { [K in RelatedKey]: EntityLookupResult; }))[]>; interface ResolveRelatedByPivotOptions, PivotSchema extends BaseEntityClassType, PivotIdKey extends keyof EntityClassFields, PivotRelatedKey extends keyof EntityClassFields, RelatedSchema extends BaseEntityClassType, RelatedKey extends string, RelatedFields extends keyof EntityClassFields> { src: Schema[]; srcIdField?: SrcIdField; pivotSchema: PivotSchema; pivotIdKey: PivotIdKey; pivotRelatedKey: PivotRelatedKey; pivotFilter?: FilterQuery>; targetField: RelatedKey; targetSchema: RelatedSchema; targetFields?: RelatedFields[]; txn?: DatabaseSession; } export declare function resolveRelatedByPivot, PivotSchema extends BaseEntityClassType, PivotIdKey extends keyof EntityClassFields, PivotRelatedKey extends keyof EntityClassFields, RelatedSchema extends BaseEntityClassType, RelatedKey extends string, RelatedFields extends keyof EntityClassFields>(options: ResolveRelatedByPivotOptions): Promise<(Schema & { [K in RelatedKey]: (EntityLookupResult & { pivot: InstanceType; })[]; })[]>; export declare function resolveRelatedByPivotForOne, PivotSchema extends BaseEntityClassType, PivotIdKey extends keyof EntityClassFields, PivotRelatedKey extends keyof EntityClassFields, RelatedSchema extends BaseEntityClassType, RelatedKey extends string, RelatedFields extends keyof EntityClassFields>(options: Omit, 'src'> & { src: Schema; }): Promise & { pivot: InstanceType; })[]; }>; export declare function getEntityOrUndefined(Entity: EntityClass, filter: EntityFilterInput): Promise; export declare function getEntity(Entity: EntityClass, filter: EntityFilterInput): Promise; export declare function getEntityOr404(Entity: EntityClass, filter: EntityFilterInput): Promise; export declare function entityExists(Entity: EntityClass, filter: EntityFilterInput): Promise; type EntityLookupResult> = Field[] extends never[] ? InstanceType : EntityPick, Field>; export {}; //# sourceMappingURL=entity.d.ts.map