type NestedValueOf<T> = T extends object ? T[keyof T] | NestedValueOf<T[keyof T]> : T;
type Filter<T extends UserAgentData | NestedValueOf<UserAgentData> = UserAgentData> = ((parentObject: T) => boolean) | RegExp | Array<Filter<T>> | {
    [key: string]: Filter<T>;
} | string;
interface UserAgentData {
    appName: 'Netscape';
    connection: {
        downlink: number;
        effectiveType: '3g' | '4g';
        rtt: number;
        downlinkMax?: number | null;
        type?: 'cellular' | 'wifi';
    };
    language?: string | null;
    oscpu?: string | null;
    platform: 'iPad' | 'iPhone' | 'Linux aarch64' | 'Linux armv81' | 'Linux armv8l' | 'Linux x86_64' | 'MacIntel' | 'Win32';
    pluginsLength: number;
    screenHeight: number;
    screenWidth: number;
    userAgent: string;
    vendor: 'Apple Computer, Inc.' | 'Google Inc.' | '';
    weight: number;
}
declare module './user-agent' {
    interface UserAgent extends Readonly<UserAgentData> {
        readonly cumulativeWeightIndexPairs: Array<[number, number]>;
        readonly data: UserAgentData;
        (): UserAgent;
    }
}
declare class UserAgent {
    static [Symbol.hasInstance](instance: unknown): boolean;
    static random: (filters: Filter) => UserAgent | null;
    static top: (count?: number, filters?: Filter) => UserAgentData[];
    readonly data: UserAgentData;
    constructor(filters?: Filter);
    [Symbol.toPrimitive]: () => string;
    toString: () => string;
    random: () => UserAgent;
    top: (count?: number) => UserAgentData[];
    randomize: () => void;
}

export { type Filter, type UserAgentData, UserAgent as default };
