import { ComponentPublicInstance } from 'vue-demi';

type PropType<T> = PropConstructor<T> | PropConstructor<T>[];
type PropConstructor<T = any> = {
    new (...args: any[]): T & object;
} | {
    (): T;
} | PropMethod<T>;
type PropMethod<T, TConstructor = any> = [T] extends [((...args: any) => any) | undefined] ? {
    new (): TConstructor;
    (): T;
    readonly prototype: TConstructor;
} : never;
declare function conclude(configSequence: any[], options?: {
    type?: PropType<any>;
    default?: any;
    defaultIsDynamic?: boolean;
    required?: boolean;
    validator?: (prop: any) => boolean;
    camelizeObjectKeys?: boolean;
    mergeObject?: string | false;
    mergeObjectCustomizer?: (objValue: any, srcValue: any, key: string, object: Record<string, any>, source: Record<string, any>, stack: object) => any;
    mergeObjectApplyOnlyToDefault?: boolean;
    mergeFunction?: false | ((accumulator: any, currentValue: any, currentIndex?: any, array?: any) => (...args: any) => unknown);
    mergeFunctionApplyOnlyToDefault?: boolean;
}): any;

declare function getLocalListeners(listeners: Record<keyof any, any>): Record<string | number | symbol, any>;

declare function listenGlobalHooks(this: ComponentPublicInstance, globalHooks: Record<keyof any, any>): void;

interface ResolvedResult {
    props: Record<keyof any, any>;
    attrs: Record<keyof any, any>;
    listeners: Record<string, (...args: any) => unknown>;
    hooks: Record<string, (...args: any) => unknown>;
    slots: Record<string, (...args: any) => unknown>;
}
declare function resolveConfig(config: Record<keyof any, any>, { props, camelizePropNames, }?: {
    props?: string[] | Record<keyof any, any>;
    camelizePropNames?: boolean;
}): ResolvedResult;

export { conclude, getLocalListeners, listenGlobalHooks, resolveConfig };
