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>

69 lines (62 loc) 2.15 kB
import { ToStringTypes } from '@sdc-monitor/shared' import { logger, getTimestamp, silentConsoleScope, toStringValidateOption } from '@sdc-monitor/utils' import { BaseOptionsFieldsIntegrationType, BreadcrumbPushData } from '@sdc-monitor/types' /** * 用户行为栈存储,实体类 * * @export * @class Breadcrumb * @template O */ export class Breadcrumb<O extends BaseOptionsFieldsIntegrationType = BaseOptionsFieldsIntegrationType> { private maxBreadcrumbs = 10 private beforePushBreadcrumb: unknown = null private stack: BreadcrumbPushData[] = [] constructor(options: Partial<O> = {}) { this.bindOptions(options) } /** * 添加用户行为栈 * * @param {BreadcrumbPushData} data * @memberof Breadcrumb */ push(data: BreadcrumbPushData): BreadcrumbPushData[] { if (typeof this.beforePushBreadcrumb === 'function') { let result: BreadcrumbPushData = null const beforePushBreadcrumb = this.beforePushBreadcrumb silentConsoleScope(() => { result = beforePushBreadcrumb.call(this, this, data) }) if (!result) return this.stack return this.immediatePush(result) } return this.immediatePush(data) } private immediatePush(data: BreadcrumbPushData): BreadcrumbPushData[] { data.time || (data.time = getTimestamp()) if (this.stack.length >= this.maxBreadcrumbs) { this.shift() } this.stack.push(data) // make sure xhr fetch is behind button click this.stack.sort((a, b) => a.time - b.time) logger.log(this.stack) return this.stack } private shift(): boolean { return this.stack.shift() !== undefined } clear(): void { this.stack = [] } getStack(): BreadcrumbPushData[] { return this.stack } bindOptions(options: Partial<O> = {}): void { const { maxBreadcrumbs, beforePushBreadcrumb } = options toStringValidateOption(maxBreadcrumbs, 'maxBreadcrumbs', ToStringTypes.Number) && (this.maxBreadcrumbs = maxBreadcrumbs) toStringValidateOption(beforePushBreadcrumb, 'beforePushBreadcrumb', ToStringTypes.Function) && (this.beforePushBreadcrumb = beforePushBreadcrumb) } }