import './errors'; import { createCommands, isObject, isString, EventEmitter, EProject, EventType } from '@jolibox/common'; export * from '../../common/report/types'; import { createTracks, ReportHandler } from '@/common/report'; import { context } from '@/common/context'; import { NativeTaskTracker } from './task-tracker'; import { invokeNative } from '@jolibox/native-bridge'; const reportNative: ReportHandler = (event, data, webviewId) => { const _data = data as Record; const originExtra = isObject(_data.extra) ? _data.extra : isString(_data.extra) ? JSON.parse(_data.extra) : {}; const { mpName, mpVersion } = context.mpInfo ?? {}; // const extra = { ...originExtra, mp_id: (_data.mp_id as string) ?? '', mp_version: (_data.mp_version as string) ?? '', session_id: context.sessionId, user_id: context.hostUserInfo?.uid ?? '', ...(mpName ? { mp_name: mpName } : {}), ...(mpVersion ? { mp_info_version: mpVersion } : {}) }; const eventType = (_data.eventType ?? EventType.Other) as number; invokeNative('trackAsync', { event: data.tag ?? event, data: extra, webviewId, eventType }); }; const { track, trackPerformance } = createTracks(reportNative, { type: EProject.AppSDK, platform: 'native', jssdk_version: context.sdkInfo?.jssdkVersion ?? '1.0.0', mp_id: context.mpId, mp_version: context.mpVersion }); export { track, trackPerformance }; const commands = createCommands(); commands.registerCommand('ReportSDK.traceSystemTimeline', ({ event, duration, extra }) => { trackPerformance(event, duration, extra); }); commands.registerCommand('ReportSDK.traceSystem', ({ event, info }) => { track(event, info); }); // 任务上报 export const nativeTaskEmitter = new EventEmitter<{ visible: [boolean] }>(); export const taskTracker = new NativeTaskTracker(track, nativeTaskEmitter);