@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
text/typescript
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)
}
}