UNPKG

@sdc-monitor/demo

Version:

<div align="center"> <a href="#" target="_blank"> <img src="https://i.loli.net/2021/07/28/EvPwd4NjVH3tBfO.jpg" alt="mito-logo" height="90"> </a> <p>A Lightweight SDK For Monitor Web</p>

54 lines (52 loc) 2.01 kB
import { MethodTypes, ToStringTypes } from '@sdc-monitor/shared' import { BrowserOptionsFieldsTypes } from './types' import { safeStringify, toStringValidateOption, transformParams } from '@sdc-monitor/utils' import { ReportDataType } from '@sdc-monitor/types' import { BaseTransport } from '@sdc-monitor/core' export class BrowserTransport extends BaseTransport<BrowserOptionsFieldsTypes> { configReportXhr: unknown useImgUpload = false constructor(options: BrowserOptionsFieldsTypes = {}) { super() super.bindOptions(options) this.bindOptions(options) } post(data: any, url: string) { const requestFun = (): void => { const xhr = new XMLHttpRequest() xhr.open(MethodTypes.Post, url) xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8') xhr.withCredentials = true if (typeof this.configReportXhr === 'function') { this.configReportXhr(xhr, data) } xhr.send(safeStringify(data)) } this.queue.addTask(requestFun) } imgRequest(data: any, url: string): void { const requestFun = () => { let img = new Image() const spliceStr = url.indexOf('?') === -1 ? '?' : '&' img.src = `${url}${spliceStr}data=${encodeURIComponent(safeStringify(data))}` img = null } this.queue.addTask(requestFun) } sendToServer(data: any, url: string) { // 此处去修改入参 const params = transformParams(data) return this.useImgUpload ? this.imgRequest(params, url) : this.post(params, url) } getTransportData(data: ReportDataType) { return { authInfo: this.getAuthInfo(), data } } bindOptions(options: BrowserOptionsFieldsTypes = {}) { const { configReportXhr, useImgUpload } = options toStringValidateOption(configReportXhr, 'configReportXhr', ToStringTypes.Function) && (this.configReportXhr = configReportXhr) toStringValidateOption(useImgUpload, 'useImgUpload', ToStringTypes.Boolean) && (this.useImgUpload = useImgUpload) } }