import { ExcludeMethod, AnyObject, Many, DeepPartial } from './types/custom_type.types.cjs';

declare type ProvideEntity<E, U extends keyof E> = ExcludeMethod<Omit<E, U> & {
    [K in U]?: E[K];
}>;
declare const DEFAULT_FACTORY_FUNC_OPTIONS: {
    defaultValue: boolean;
    excludeExtraProp: boolean;
};
declare type InputType<E, U extends keyof E, V extends boolean> = V extends false ? ProvideEntity<E, U> : DeepPartial<E>;
declare const modelFactory: <E extends AnyObject, U extends keyof E = never, V extends boolean = false, CE = never>(classModel: new (..._arguments: any[]) => E, factoryOptions?: {
    autoGeneratedProp?: Many<U>[] | undefined;
    allAutoGenerated?: V | undefined;
    excludeExtraProp?: boolean | undefined;
} | undefined, customMapper?: ((input: InputType<E, U, V>) => CE) | undefined) => (input: InputType<E, U, V>, options?: typeof DEFAULT_FACTORY_FUNC_OPTIONS, customMapperOverride?: ((input: InputType<E, U, V>) => CE) | undefined) => never extends CE ? E : CE;
declare const modelCreator: <E extends AnyObject, U extends keyof E = never, V extends boolean = false, CE = never>(classModel: new (..._arguments: any[]) => E, factoryOptions?: {
    autoGeneratedProp?: Many<U>[] | undefined;
    allAutoGenerated?: V | undefined;
    excludeExtraProp?: boolean | undefined;
} | undefined, customMapper?: ((input: InputType<E, U, V>) => CE) | undefined) => (input: InputType<E, U, V>, options?: typeof DEFAULT_FACTORY_FUNC_OPTIONS, customMapperOverride?: ((input: InputType<E, U, V>) => CE) | undefined) => never extends CE ? E : CE;

export { ProvideEntity, modelCreator, modelFactory };
