export type CrudContextPayload = Record; export type CrudWherePayload = Record; export type CrudEntityOperationHookName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore' | 'bulkCreate' | 'bulkDelete'; export type CrudRelationOperationHookName = 'assignFirst' | 'assignSecond'; export type CrudHookOperationName = CrudEntityOperationHookName | CrudRelationOperationHookName; export type CrudAuthorizeResult = boolean | void | Promise; export type CrudHookContext = { req?: any; params?: Record; query?: Record; id?: string; itemData?: CrudContextPayload; where?: CrudWherePayload; entity?: CrudContextPayload; result?: any; operation: CrudHookOperationName; service?: any; repository?: any; setMeta?: (key: string, value: any) => void; getMeta?: (key: string) => T | undefined; }; export type CrudOperationHook = (context: CrudHookContext) => void | Partial | { itemData?: Partial; where?: Partial; result?: any; entity?: Partial; } | Promise | { itemData?: Partial; where?: Partial; result?: any; entity?: Partial; }>; export type CrudAuthorizeHook = (context: CrudHookContext) => CrudAuthorizeResult; export type CrudOperationAuthorizeHook = (context: CrudHookContext) => CrudAuthorizeResult; export type CrudPolicyAuthorizeHook = (context: CrudHookContext, entity?: CrudContextPayload) => CrudAuthorizeResult; export type CrudPolicyScopeResult = void | Partial | { where?: Partial; } | Promise | { where?: Partial; }>; export type CrudPolicyScopeHook = (context: CrudHookContext) => CrudPolicyScopeResult; export type CrudPolicy = { canCreate?: CrudPolicyAuthorizeHook; canRead?: CrudPolicyAuthorizeHook; canUpdate?: CrudPolicyAuthorizeHook; canDelete?: CrudPolicyAuthorizeHook; canRestore?: CrudPolicyAuthorizeHook; canBulkCreate?: CrudPolicyAuthorizeHook; canBulkDelete?: CrudPolicyAuthorizeHook; scopeQuery?: CrudPolicyScopeHook; }; export type CrudWriteFilterOptions = { allowedWriteFields?: string[]; blockedWriteFields?: string[]; }; export type CrudDeleteMode = 'auto' | 'soft' | 'hard'; export type CrudEndpointDisableMode = 'hide' | 'block'; export type CrudEndpointDisableConfig = CrudEndpointDisableMode | { mode: CrudEndpointDisableMode; reason?: string; }; export type CrudEntityOperationName = 'create' | 'findAll' | 'findOne' | 'update' | 'delete' | 'restore' | 'findAllArchived' | 'bulkCreate' | 'bulkDelete'; export type CrudExtraOperationName = CrudEntityOperationName; export type CrudRelationOperationName = 'bulkSaveFirst' | 'bulkSaveSecond' | 'findAllFirst' | 'findAllSecond'; export type EntityCrudOptions = { createDto?: { new (): NonNullable; }; updateDto?: { new (): NonNullable; }; createPermission?: string; viewPermission?: string; updatePermission?: string; deletePermission?: string; restorePermission?: string; viewArchivedPermission?: string; policy?: CrudPolicy; useTransaction?: boolean; allowedWriteFields?: string[]; blockedWriteFields?: string[]; beforeCreate?: CrudOperationHook; afterCreate?: CrudOperationHook; beforeFindAll?: CrudOperationHook; afterFindAll?: CrudOperationHook; beforeFindOne?: CrudOperationHook; afterFindOne?: CrudOperationHook; beforeUpdate?: CrudOperationHook; afterUpdate?: CrudOperationHook; beforeDelete?: CrudOperationHook; afterDelete?: CrudOperationHook; beforeSoftDelete?: CrudOperationHook; afterSoftDelete?: CrudOperationHook; deleteMode?: CrudDeleteMode; beforeRestore?: CrudOperationHook; afterRestore?: CrudOperationHook; authorize?: CrudAuthorizeHook; canCreate?: CrudOperationAuthorizeHook; canFindAll?: CrudOperationAuthorizeHook; canFindOne?: CrudOperationAuthorizeHook; canUpdate?: CrudOperationAuthorizeHook; canDelete?: CrudOperationAuthorizeHook; collectionQueryDefaults?: { allowedFilterColumns?: string[]; allowedSortColumns?: string[]; }; optimisticConcurrency?: boolean; idempotency?: { enabled?: boolean; headerName?: string; ttlMs?: number; }; enableBulkCreate?: boolean; enableBulkDelete?: boolean; bulkCreatePermission?: string; bulkDeletePermission?: string; beforeBulkCreate?: CrudOperationHook; afterBulkCreate?: CrudOperationHook; beforeBulkDelete?: CrudOperationHook; afterBulkDelete?: CrudOperationHook; canBulkCreate?: CrudOperationAuthorizeHook; canBulkDelete?: CrudOperationAuthorizeHook; canRestore?: CrudOperationAuthorizeHook; operations?: Partial>; }; export type ExtraCrudOptions = { entityIdName: string; createDto?: { new (): NonNullable; }; updateDto?: { new (): NonNullable; }; createPermission?: string; viewPermission?: string; updatePermission?: string; deletePermission?: string; restorePermission?: string; viewArchivedPermission?: string; policy?: CrudPolicy; useTransaction?: boolean; allowedWriteFields?: string[]; blockedWriteFields?: string[]; beforeCreate?: CrudOperationHook; afterCreate?: CrudOperationHook; beforeFindAll?: CrudOperationHook; afterFindAll?: CrudOperationHook; beforeFindOne?: CrudOperationHook; afterFindOne?: CrudOperationHook; beforeUpdate?: CrudOperationHook; afterUpdate?: CrudOperationHook; beforeDelete?: CrudOperationHook; afterDelete?: CrudOperationHook; beforeSoftDelete?: CrudOperationHook; afterSoftDelete?: CrudOperationHook; deleteMode?: CrudDeleteMode; beforeRestore?: CrudOperationHook; afterRestore?: CrudOperationHook; authorize?: CrudAuthorizeHook; canCreate?: CrudOperationAuthorizeHook; canFindAll?: CrudOperationAuthorizeHook; canFindOne?: CrudOperationAuthorizeHook; canUpdate?: CrudOperationAuthorizeHook; canDelete?: CrudOperationAuthorizeHook; canRestore?: CrudOperationAuthorizeHook; operations?: Partial>; }; export interface RelationCrudOptions { firstEntityIdName: string; firstInclude: string; secondEntityIdName: string; secondInclude: string; assignFirstDto?: { new (): NonNullable; }; assignSecondDto?: { new (): NonNullable; }; createPermission?: string; viewPermission?: string; useTransaction?: boolean; beforeAssignFirst?: CrudOperationHook; afterAssignFirst?: CrudOperationHook; beforeAssignSecond?: CrudOperationHook; afterAssignSecond?: CrudOperationHook; operations?: Partial>; }