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>

41 lines (36 loc) 1.56 kB
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