Skip to content

type .d.ts #108

@Shana-AE

Description

@Shana-AE

定义了一下browser-tool的类型,需要的同志可以自取

declare module 'browser-tool' {

  type UnionToIntersection<U> = (
    U extends any ? (k: U) => void : never
  ) extends (k: infer I) => void ? I : never;

  interface BrowserParser {
    parse(ua: string): {
      browser: string;
      browserVersion: string;
      engine: string;
      isWebview: boolean;
      isRobot: boolean;
    };
    getInfo(): Promise<
      ReturnType<BrowserParser['parse']> & {
        cookieEnabled: boolean;
        userAgent: string;
      }
    >;
  }

  interface SystemParser {
    parse(ua: string): {
      system: string;
      systemVersion: string;
      platform: string;
      architecture: string;
      bitness: number;
    }
    getInfo(): Promise<ReturnType<SystemParser['parse']>>;
  }

  interface DeviceParser {
    parse(ua: string): {
      device: string;
    }
    getInfo(): Promise<ReturnType<DeviceParser['parse']>> & {
      devicePixelRatio: number;
      deviceMemory: number;
    };
  }

  interface GpuParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      gpu: string;
      gpuModel: string;
    }>;
  }

  interface NetworkParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      network: string;
      isOnline: boolean;
      ip: string;
    }>;
  }

  interface BatteryParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      isCharging: boolean;
      battery: string;
    }>;
  }

  interface ScreenParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      screenWidth: number;
      screenHeight: number;
      clientWidth: number;
      clientHeight: number;
      screenFPS: number;
      screenColorDepth: number;
      screenPixelDepth: number;
      isTouch: boolean;
    }>
  }

  interface LanguageParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      language: string;
    }>
  }

  interface TimezoneParser {
    parse(): Record<string, never>;
    getInfo(): Promise<{
      timezone: string;
    }>
  }

  type InfoParserMap = {
    browser: BrowserParser;
    system: SystemParser;
    device: DeviceParser;
    gpu: GpuParser;
    network: NetworkParser;
    battery: BatteryParser;
    screen: ScreenParser;
    language: LanguageParser;
    timezone: TimezoneParser;
  }

  type FingerprintList = 'webgl' | 'canvas' | 'font' | 'audio' | 'mime';

  interface BrowserTool {
    parse(ua: string): ReturnType<BrowserParser['parse']> & ReturnType<SystemParser['parse']> & ReturnType<DeviceParser['parse']>;
    getInfo(): Promise<UnionToIntersection<{
      [K in keyof InfoParserMap]: Awaited<ReturnType<InfoParserMap[K]['getInfo']>>
    }[keyof InfoParserMap]>>;
    getInfo<T extends (keyof InfoParserMap)[]>(list: [...T]): Promise<UnionToIntersection<{
      [K in T[number]]: Awaited<ReturnType<InfoParserMap[K]['getInfo']>>
    }[T[number]]>>;
    getFingerprint(): Promise<{
      value: string;
    } &{

      [K in FingerprintList]: string;
    }>
    getFingerprint<T extends FingerprintList>(list: T[]): Promise<{
      value: string;
    } &{
      [K in T]: string;
    }>;
    isSupport(name: string, value: string): boolean;
  }

  const browserTool: BrowserTool;

  export default browserTool;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions