/** * 小程序平台 SDK 接口 */ interface SDK { request: Function; httpRequest?: Function; getSystemInfoSync?: Function; canIUse?: Function; getSystemSetting?: Function; getAppAuthorizeSetting?: Function; getDeviceInfo?: Function; getWindowInfo?: Function; getAppBaseInfo?: Function; onError?: Function; onUnhandledRejection?: Function; onPageNotFound?: Function; onMemoryWarning?: Function; onShow?: Function; onHide?: Function; offShow?: Function; offHide?: Function; getLaunchOptionsSync?: Function; getEnvInfoSync?: Function; getAccountInfoSync?: Function; getUpdateManager?: Function; showModal?: Function; URLSearchParams?: Function; getPerformance?: Function; setStorageSync?: Function; getStorageSync?: Function; getStorageInfoSync?: Function; removeStorageSync?: Function; getNetworkType?: Function; onNetworkStatusChange?: Function; offNetworkStatusChange?: Function; offError?: Function; offUnhandledRejection?: Function; offPageNotFound?: Function; offMemoryWarning?: Function; } /** * 小程序平台类型 */ export type AppName = 'wechat' | 'alipay' | 'bytedance' | 'dingtalk' | 'qq' | 'swan' | 'kuaishou' | 'unknown'; /** 可显式配置的小程序宿主平台。`unknown` 仅供自动检测结果使用。 */ export type MiniappPlatform = Exclude; /** * 系统信息接口 */ export interface SystemInfo { brand: string; model: string; pixelRatio: number; screenWidth: number; screenHeight: number; windowWidth: number; windowHeight: number; statusBarHeight: number; language: string; version: string; system: string; platform: string; fontSizeSetting: number; SDKVersion: string; benchmarkLevel?: number; albumAuthorized?: boolean; cameraAuthorized?: boolean; locationAuthorized?: boolean; microphoneAuthorized?: boolean; notificationAuthorized?: boolean; bluetoothEnabled?: boolean; locationEnabled?: boolean; wifiEnabled?: boolean; safeArea?: { left: number; right: number; top: number; bottom: number; width: number; height: number; }; } /** * 获取当前运行时可见的 JS 全局对象候选。 * * 小游戏等宿主里可能出现 `global !== globalThis`,且三方注入器可能写入不同全局对象; * 因此需要返回全部候选而不是只返回一个“主全局”。顺序保留常见注入器的探测顺序。 */ export declare const getGlobalObjectCandidates: () => unknown[]; type DetectedPlatform = { sdk: SDK; name: AppName; }; /** * 检测当前平台。单一命中直接返回;多个平台对象共存时优先采用宿主 API 的明确证据, * 无法判定才回退历史 first-match 顺序,未命中返回 null。 */ export declare const detectPlatform: () => DetectedPlatform | null; declare const getSDK: () => SDK; declare const getSystemInfo: () => SystemInfo | null; /** 小程序账号信息(appId / 版本),一次会话内静态。 */ export interface MiniProgramAccountInfo { appId: string; version: string; } declare const getAccountInfo: () => MiniProgramAccountInfo; /** * 检查是否在小程序环境中 */ declare const isMiniappEnvironment: () => boolean; export declare let _sdk: SDK | null; export declare const sdk: () => SDK; export declare const appName: () => AppName; /** * 解析事件使用的小程序宿主标记。`miniappPlatform` 是公开主选项,旧 `platform` * 仅作兼容别名;非法 JavaScript 入参不会污染 Sentry 顶层平台语义。 */ export declare const resolveMiniappPlatform: (options: { miniappPlatform?: unknown; platform?: unknown; }) => AppName; /** * 判断当前是否运行在「小游戏」环境(微信小游戏 / 抖音小游戏 / QQ 小游戏等)。 * * 小游戏与小程序的运行时差异:小游戏没有 App()/Page()/getCurrentPages() 等 * 页面与路由构造函数,但同样存在平台 sdk(wx/tt/qq…)。因此判定规则为: * 检测到平台 sdk,且不存在 App/Page/getCurrentPages,或存在全局 GameGlobal。 */ export declare const isMinigame: () => boolean; /** 统一重置平台解析及其派生缓存,仅供测试使用。 */ export declare const resetPlatformCache: () => void; /** * 性能指标类型 */ export interface PerformanceEntry { name: string; entryType: string; startTime: number; duration: number; } /** * 导航性能指标 */ export interface NavigationPerformanceEntry extends PerformanceEntry { entryType: 'navigation'; appLaunchTime?: number; pageReadyTime?: number; firstRenderTime?: number; navigationStart?: number; navigationEnd?: number; loadEventStart?: number; loadEventEnd?: number; } /** * 渲染性能指标 */ export interface RenderPerformanceEntry extends PerformanceEntry { entryType: 'render'; renderStart?: number; renderEnd?: number; scriptStart?: number; scriptEnd?: number; } /** * 资源加载性能指标 */ export interface ResourcePerformanceEntry extends PerformanceEntry { entryType: 'resource'; initiatorType?: string; fetchStart?: number; domainLookupStart?: number; domainLookupEnd?: number; connectStart?: number; connectEnd?: number; requestStart?: number; responseStart?: number; responseEnd?: number; transferSize?: number; encodedBodySize?: number; decodedBodySize?: number; } /** * 用户交互性能指标 */ export interface UserTimingPerformanceEntry extends PerformanceEntry { entryType: 'measure' | 'mark'; detail?: any; } /** * Performance Observer 回调 */ export interface PerformanceObserverCallback { (entries: PerformanceEntry[]): void; } /** * Performance API 管理器接口 */ export interface PerformanceManager { now?: () => number; getEntries(): PerformanceEntry[]; getEntriesByType(type: string): PerformanceEntry[]; getEntriesByName(name: string, type?: string): PerformanceEntry[]; mark(name: string): void; measure(name: string, startMark?: string, endMark?: string): void; clearMarks(name?: string): void; clearMeasures(name?: string): void; /** 创建性能观察者;小游戏等宿主可能只提供 `now()`,因此该能力可选。 */ createObserver?(callback: PerformanceObserverCallback): PerformanceObserver; } /** * Performance Observer 接口 */ export interface PerformanceObserver { observe(options: { entryTypes: string[]; }): void; disconnect(): void; } /** * 获取性能管理器 */ export declare const getPerformanceManager: () => PerformanceManager | null; /** * 时长时钟:用于**测量时长 / 间隔**(帧间隔、冷启动 delta 等),返回毫秒。 * * 刻意用 Date.now() 而非平台 Performance.now():后者在小游戏里单位不可靠——同一份代码在 * 微信开发者工具返回毫秒、真机返回微秒(见 issue #167),且官方文档并未明确单位,按平台写死 * 会在某个环境下整体偏差 1000 倍。Date.now() 在所有平台都是无歧义毫秒;这些指标粒度(≥16ms) * 也用不上亚毫秒精度,时钟回拨 / 改表由各采样点自身的「超大 delta 视为断点」兜底。 * * 与 epochNow() 实现相同(均为墙钟 epoch 毫秒),但刻意分成两个函数以区分语义:now() 仅用于 * 差值(时长),epochNow() 用于需要绝对时间点的场景(如 Sentry span 时间戳)。 */ export declare const now: () => number; /** * 墙钟时间戳(Unix epoch 毫秒)。用于需要**绝对时间点**的场景,如 Sentry span 的 * startTime / endTimestamp。与 now() 刻意区分调用语义,避免把时长采样点直接当业务时间点使用。 */ export declare const epochNow: () => number; export { getSDK, getSystemInfo, getAccountInfo, isMiniappEnvironment }; //# sourceMappingURL=crossPlatform.d.ts.map