import { DataQuery } from '@epam/uui-core'; import { DbTable } from './DbTable'; import { IClientIdsMap } from './tempIds'; export type DbTablesSet> = { [TEntityName in keyof TTables]: DbTable; }; export type DbTablePatch = Partial[]; export type DbTableEntityByTable> = TTable extends DbTable ? TEntity : void; export type DbTableIdByTable> = TTable extends DbTable ? TId : void; type DbTablePatchByTable> = DbTablePatch>; export type DbPatch> = { [TEntityName in keyof TTables]?: DbTablePatchByTable; }; export declare enum DbRelationType { Aggregation = 0, Association = 1 } export type DbFieldFk = { tableName: string | ((entity: TEntity) => string); relationType: DbRelationType; }; export interface DbFieldSchema { fk?: DbFieldFk; isGenerated?: boolean; isClientOnly?: boolean; isReadOnly?: boolean; default?: TEntity[TField]; toServer?: (value: TEntity[TField]) => TEntity[TField]; toClient?: (value: TEntity[TField]) => TEntity[TField]; disableFlatten?: boolean; } export type DbPkFieldType = string | number | (string | number)[]; export type BeforeUpdateContext> = { clientIdsMap: IClientIdsMap; schema: DbEntitySchema; tables: DbTablesSet; }; type DbEntityBeforeUpdateResult> = { entity: TEntity; dependentEntities?: DbPatch; }; type DbTableIndexDefinition = keyof TEntity; export type DbEntitySchema> = { tableName: keyof TTables; typeName: string; searchBy?: (keyof TEntity)[]; fields?: Partial<{ [TField in keyof TEntity]: DbFieldSchema; }>; isClientOnly?: boolean | ((entity: Partial) => boolean); beforeUpdate?: (entity: TEntity, context: BeforeUpdateContext) => DbEntityBeforeUpdateResult; primaryKey: TId extends any[] ? KeysOfType[] : KeysOfType; indexes?: DbTableIndexDefinition[]; deleteFlag?: keyof TEntity; }; export type DbSchema> = { [TTypeName in keyof TTables]: DbEntitySchema; }; export interface DbQuery extends DataQuery { } export interface IQueryable { query(q: DbQuery): TEntity[]; byId(id: TId): TEntity; } export interface ServerError { message?: string; } type DbSaveEntityResponse = { id: TId; payload: Partial; }; export interface DbSaveResponse> { submit: { [EntityName in keyof TTables]?: DbSaveEntityResponse, DbTableIdByTable>[]; }; } export type DbViewFunction = (db: TDb, parameters?: TParams, dependencies?: TDependencies) => TResult; export interface DbViewOptions { getKey?: (parameters: TParams) => string; getDependencies?: (db: TDb, parameters: TParams) => TDependencies; compareDependencies?: (prev: TDependencies, next: TDependencies) => boolean; compareResults?: (prev: TResult, current: TResult) => boolean; traceDiff?: boolean; } export interface DbView extends DbViewOptions { compute: DbViewFunction; } export type KeysOfType = { [P in keyof T]: T[P] extends TProp ? P : never; }[keyof T]; export interface DbSubscription { update(params: TParams): TValue; currentValue: TValue; currentParams: TParams; onUpdate: (newValue: TValue) => void; unsubscribe: () => void; } export type ViewCacheItem = { dependencies: any; currentValue: any; computedOnDb: any; }; export interface LoadingState { isLoading: boolean; isComplete: boolean; request: TRequest; missing?: TRequest; } export interface ILoadingTracker { diff(request: TRequest): TRequest; append(request: TRequest, result?: TResult): void; count?(request: TRequest): { knownCount: number; exactCount: number; }; } export {}; //# sourceMappingURL=types.d.ts.map