import { AnyMongoAbility, Generics, Normalize } from '@casl/ability'; import type { Document as Doc, Model, Schema } from 'mongoose'; export type AccessibleFieldsOptions = { getFields(schema: Schema): string[]; } & ({ only: string | string[]; } | { except: string | string[]; }); export declare const getSchemaPaths: AccessibleFieldsOptions['getFields']; type GetAccessibleFields = (this: Model | T, ability: U, action?: Normalize['abilities']>[0]) => string[]; export interface AccessibleFieldsModel extends Model, TVirtuals> { accessibleFieldsBy: GetAccessibleFields; } export interface AccessibleFieldDocumentMethods { accessibleFieldsBy: GetAccessibleFields; } /** * @deprecated Mongoose recommends against `extends Document`, prefer to use `AccessibleFieldsModel` instead. * See here: https://mongoosejs.com/docs/typescript.html#using-extends-document */ export interface AccessibleFieldsDocument extends Document, AccessibleFieldDocumentMethods { } export declare function accessibleFieldsPlugin(schema: Schema, rawOptions?: Partial): void; export {};