-
Notifications
You must be signed in to change notification settings - Fork 353
Open
Description
定义了一下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
Labels
No labels