import { CascadeActionAuth, CascadeRelationAuth, ActionOnRemove } from "."; import { AsyncContext } from "../store/AsyncRowStore"; import { SyncContext } from "../store/SyncRowStore"; import { EntityDict, OperateOption, SelectOption } from "../types/Entity"; export declare type CheckerType = 'relation' | 'row' | 'data' | 'logical' | 'logicalRelation'; /** * conditionalFilter是指该action发生时,operation所操作的行中有满足conditionalFilter的行 * 被转化成trigger的filter条件,详细可看trigger中的说明 */ export declare type DataChecker | SyncContext> = { priority?: number; type: 'data'; entity: T; action: Omit | Array>; checker: (data: ED[T]['Create']['data'] | ED[T]['Update']['data'], context: Cxt) => any | Promise; conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise); }; export declare type RowChecker | SyncContext> = { priority?: number; type: 'row'; entity: T; action: Omit | Array>; filter: ED[T]['Selection']['filter'] | ((operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => ED[T]['Selection']['filter'] | Promise); errMsg?: string; inconsistentRows?: { entity: keyof ED; selection: (filter?: ED[T]['Selection']['filter']) => ED[keyof ED]['Selection']; }; conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise); }; export declare type RelationChecker | SyncContext> = { priority?: number; type: 'relation'; entity: T; when?: 'after'; action: ED[T]['Action'] | Array; relationFilter: (operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => ED[T]['Selection']['filter'] | Promise; errMsg: string; conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter'] | Promise); }; export declare type LogicalChecker | SyncContext> = { priority?: number; type: 'logical'; when?: 'after'; entity: T; action: ED[T]['Action'] | Array; checker: (operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => any | Promise; conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter']); }; export declare type LogicalRelationChecker | SyncContext> = { priority?: number; type: 'logicalRelation'; when?: 'after'; entity: T; action: ED[T]['Action'] | Array; checker: (operation: ED[T]['Operation'] | ED[T]['Selection'], context: Cxt, option: OperateOption | SelectOption) => any | Promise; conditionalFilter?: ED[T]['Update']['filter'] | ((operation: ED[T]['Operation'], context: Cxt, option: OperateOption) => ED[T]['Update']['filter']); }; export declare type Checker | SyncContext> = DataChecker | RowChecker | RelationChecker | LogicalChecker | LogicalRelationChecker; export declare type AuthDef = { relationAuth?: CascadeRelationAuth>; actionAuth?: CascadeActionAuth; cascadeRemove?: { [E in (keyof ED | '@entity')]?: ActionOnRemove; }; }; export declare type AuthDefDict = { [K in keyof ED]?: AuthDef; };