@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>
41 lines (36 loc) • 1.56 kB
text/typescript
import { BrowserBreadcrumbTypes, BrowserEventTypes } from '@sdc-monitor/shared'
import { isExistProperty, on, parseUrlToObj, _global } from '@sdc-monitor/utils'
import { BasePluginType, RouteChangeCollectType } from '@sdc-monitor/types'
import { BrowserClient } from '../browserClient'
import { addBreadcrumbInBrowser } from '../utils'
const hashRoutePlugin: BasePluginType<BrowserEventTypes, BrowserClient> = {
name: BrowserEventTypes.HASHCHANGE,
monitor(notify) {
if (!isExistProperty(_global, 'onpopstate')) {
on(_global, BrowserEventTypes.HASHCHANGE, function (e: HashChangeEvent) {
const { oldURL: from, newURL: to } = e
notify(BrowserEventTypes.HASHCHANGE, { from, to })
})
}
},
transform(collectedData: RouteChangeCollectType) {
return routeTransform(collectedData)
},
consumer(transformedData: RouteChangeCollectType) {
routeTransformedConsumer.call(this, transformedData)
}
}
export function routeTransform(collectedData: RouteChangeCollectType): RouteChangeCollectType {
const { from, to } = collectedData
const { relative: parsedFrom } = parseUrlToObj(from)
const { relative: parsedTo } = parseUrlToObj(to)
return {
from: parsedFrom ? parsedFrom : '/',
to: parsedTo ? parsedTo : '/'
}
}
export function routeTransformedConsumer(this: BrowserClient, transformedData: RouteChangeCollectType) {
if (transformedData.from === transformedData.to) return
addBreadcrumbInBrowser.call(this, transformedData, BrowserBreadcrumbTypes.ROUTE)
}
export default hashRoutePlugin