@zhongxiaobing/monitor-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/createReactMonitor.tsx","../../monitor-shared/src/utils/uuid.ts","../../monitor-shared/src/utils/error.ts","../../monitor-shared/src/utils/browser.ts","../../monitor-transport/src/queue.ts","../../monitor-transport/src/sender.ts","../../monitor-core/src/context.ts","../../monitor-core/src/plugin-system.ts","../../monitor-core/src/monitor.ts","../../monitor-plugin-blank-screen/src/dedupe.ts","../../monitor-plugin-blank-screen/src/root.ts","../../monitor-plugin-blank-screen/src/sampler.ts","../../monitor-plugin-blank-screen/src/score.ts","../../monitor-plugin-blank-screen/src/detect.ts","../../monitor-plugin-blank-screen/src/normalize.ts","../../monitor-plugin-blank-screen/src/route-change.ts","../../monitor-plugin-blank-screen/src/index.ts","../../monitor-plugin-error/src/normalize.ts","../../monitor-plugin-error/src/unhandledrejection.ts","../../monitor-plugin-error/src/onerror.ts","../../monitor-plugin-error/src/index.ts","../../monitor-plugin-network/src/normalize.ts","../../monitor-plugin-network/src/url.ts","../../monitor-plugin-network/src/patch-fetch.ts","../../monitor-plugin-network/src/index.ts","../src/MonitorErrorBoundary.tsx"],"sourcesContent":["import { type ComponentType, type ReactNode, createContext, useContext } from 'react'\nimport { initMonitor } from '@company/monitor-core'\nimport { blankScreenPlugin, type BlankScreenPluginOptions } from '@company/monitor-plugin-blank-screen'\nimport { errorPlugin, type ErrorPluginOptions } from '@company/monitor-plugin-error'\nimport { networkPlugin, type NetworkPluginOptions } from '@company/monitor-plugin-network'\nimport type { MonitorInitOptions, MonitorApi, MonitorPlugin } from '@company/monitor-types'\nimport { MonitorErrorBoundary } from './MonitorErrorBoundary'\n\nexport type DefaultReactMonitorPluginName =\n | 'error'\n | 'network'\n | 'blankScreen'\n\nexport interface CreateReactMonitorOptions\n extends Omit<MonitorInitOptions, 'plugins'> {\n plugins?: MonitorPlugin[]\n disableDefaultPlugins?: DefaultReactMonitorPluginName[]\n error?: ErrorPluginOptions\n network?: NetworkPluginOptions\n blankScreen?: BlankScreenPluginOptions\n fallback?: ReactNode\n}\n\nexport interface MonitorRootProps {\n children: ReactNode\n fallback?: ReactNode\n}\n\nexport interface ReactMonitorInstance {\n monitor: MonitorApi\n MonitorRoot: (props: MonitorRootProps) => ReactNode\n withMonitor: <TProps extends object>(Component: ComponentType<TProps>) => ComponentType<TProps>\n}\n\nconst MonitorContext = createContext<MonitorApi | null>(null)\n\nexport function createReactMonitor(\n options: CreateReactMonitorOptions\n): ReactMonitorInstance {\n const monitor = initMonitor({\n ...options,\n plugins: [\n ...getDefaultPlugins(options),\n ...(options.plugins ?? [])\n ]\n })\n\n function MonitorRoot({ children, fallback }: MonitorRootProps) {\n return (\n <MonitorContext.Provider value={monitor}>\n <MonitorErrorBoundary monitor={monitor} fallback={fallback ?? options.fallback}>\n {children}\n </MonitorErrorBoundary>\n </MonitorContext.Provider>\n )\n }\n\n function withMonitor<TProps extends object>(Component: ComponentType<TProps>) {\n return function WrappedComponent(props: TProps) {\n return (\n <MonitorRoot>\n <Component {...props} />\n </MonitorRoot>\n )\n }\n }\n\n return {\n monitor,\n MonitorRoot,\n withMonitor\n }\n}\n\nexport function useMonitor() {\n const monitor = useContext(MonitorContext)\n\n if (!monitor) {\n throw new Error('useMonitor must be used within MonitorRoot')\n }\n\n return monitor\n}\n\nfunction getDefaultPlugins(options: CreateReactMonitorOptions): MonitorPlugin[] {\n const disabled = new Set(options.disableDefaultPlugins ?? [])\n const plugins: MonitorPlugin[] = []\n\n if (!disabled.has('error')) {\n plugins.push(errorPlugin(options.error))\n }\n\n if (!disabled.has('network')) {\n plugins.push(networkPlugin(options.network))\n }\n\n if (!disabled.has('blankScreen')) {\n plugins.push(blankScreenPlugin(options.blankScreen))\n }\n\n return plugins\n}\n","export function createEventId() {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n\n return `evt_${Date.now()}_${Math.random().toString(16).slice(2)}`\n}\n","interface NormalizedError {\n name?: string\n message: string\n stack?: string\n}\n\nexport function normalizeError(error: unknown): NormalizedError {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack\n }\n }\n\n if (typeof error === 'string') {\n return {\n message: error\n }\n }\n\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as { message?: unknown }).message === 'string'\n ) {\n const maybeError = error as { name?: unknown; message: string; stack?: unknown }\n\n return {\n name: typeof maybeError.name === 'string' ? maybeError.name : undefined,\n message: maybeError.message,\n stack: typeof maybeError.stack === 'string' ? maybeError.stack : undefined\n }\n }\n\n return {\n message: 'Unknown error'\n }\n}\n","export function getLocationInfo() {\n return {\n url: window.location.href,\n pathname: window.location.pathname,\n title: document.title,\n userAgent: navigator.userAgent\n }\n}\n","import type { MonitorEvent } from '@company/monitor-types'\n\nexport class EventQueue {\n private events: MonitorEvent[] = []\n\n add(event: MonitorEvent) {\n this.events.push(event)\n }\n\n drain() {\n const current = [...this.events]\n this.events = []\n return current\n }\n\n size() {\n return this.events.length\n }\n}\n","import type { MonitorEvent } from '@company/monitor-types'\n\nexport async function sendEvents(dsn: string, events: MonitorEvent[]) {\n if (!events.length) return\n\n if (navigator.sendBeacon) {\n const blob = new Blob([JSON.stringify({ events })], {\n type: 'application/json'\n })\n navigator.sendBeacon(dsn, blob)\n return\n }\n\n await fetch(dsn, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ events }),\n keepalive: true\n })\n}\n","import type { MonitorInitOptions } from '@company/monitor-types'\nimport { getLocationInfo } from '@company/monitor-shared'\n\nexport function createBaseContext(options: MonitorInitOptions) {\n const locationInfo = getLocationInfo()\n\n return {\n appId: options.appId,\n appName: options.appName,\n env: options.env,\n release: options.release,\n ...locationInfo\n }\n}\n","import type {\n MonitorApi,\n MonitorInitOptions,\n MonitorPlugin\n} from '@company/monitor-types'\n\nexport function setupPlugins(\n plugins: MonitorPlugin[],\n api: MonitorApi,\n options: MonitorInitOptions\n) {\n const disposers: Array<() => void> = []\n\n for (const plugin of plugins) {\n const disposer = plugin.setup({ api, options })\n if (typeof disposer === 'function') {\n disposers.push(disposer)\n }\n }\n\n return () => {\n for (const dispose of disposers) {\n dispose()\n }\n }\n}\n","import type {\n ExceptionEvent,\n MonitorApi,\n MonitorEvent,\n MonitorInitOptions\n} from '@company/monitor-types'\nimport { createEventId, normalizeError } from '@company/monitor-shared'\nimport { EventQueue, sendEvents } from '@company/monitor-transport'\nimport { createBaseContext } from './context'\nimport { setupPlugins } from './plugin-system'\n\nexport class Monitor implements MonitorApi {\n private queue = new EventQueue()\n private options: MonitorInitOptions\n private context: ReturnType<typeof createBaseContext>\n private disposePlugins: (() => void) | null = null\n\n constructor(options: MonitorInitOptions) {\n this.options = options\n this.context = createBaseContext(options)\n this.disposePlugins = setupPlugins(options.plugins ?? [], this, options)\n }\n\n emit(event: MonitorEvent) {\n const mergedEvent: MonitorEvent = {\n ...this.context,\n ...event,\n appId: event.appId || this.context.appId,\n appName: event.appName || this.context.appName,\n env: event.env || this.context.env,\n release: event.release || this.context.release,\n url: event.url || this.context.url,\n pathname: event.pathname || this.context.pathname,\n title: event.title || this.context.title,\n userAgent: event.userAgent || this.context.userAgent,\n eventId: event.eventId || createEventId(),\n timestamp: event.timestamp || Date.now()\n }\n\n const finalEvent = this.options.beforeSend\n ? this.options.beforeSend(mergedEvent)\n : mergedEvent\n\n if (!finalEvent) return\n\n this.queue.add(finalEvent)\n void this.flush()\n }\n\n captureException(error: unknown, extra?: Record<string, unknown>) {\n const normalized = normalizeError(error)\n\n const event: ExceptionEvent = {\n eventId: '',\n eventType: 'exception',\n appId: '',\n env: '',\n url: '',\n pathname: '',\n title: '',\n timestamp: 0,\n userAgent: '',\n extra,\n error: {\n name: normalized.name,\n message: normalized.message,\n stack: normalized.stack,\n source: 'react'\n }\n }\n\n this.emit(event)\n }\n\n async flush() {\n const events = this.queue.drain()\n await sendEvents(this.options.dsn, events)\n }\n\n destroy() {\n this.disposePlugins?.()\n this.disposePlugins = null\n }\n}\n\nexport function initMonitor(options: MonitorInitOptions) {\n return new Monitor(options)\n}\n","interface BlankScreenDedupeInput {\n pathname: string\n trigger: 'initial' | 'route_change' | 'manual'\n score: number\n}\n\nfunction normalizeScore(score: number) {\n return score.toFixed(1)\n}\n\nfunction createDedupeKey(input: BlankScreenDedupeInput) {\n return [input.pathname, input.trigger, normalizeScore(input.score)].join('|')\n}\n\nexport function createBlankScreenDedupe(windowMs: number) {\n const cache = new Map<string, number>()\n\n function shouldReport(input: BlankScreenDedupeInput) {\n const now = Date.now()\n const key = createDedupeKey(input)\n const lastReportedAt = cache.get(key)\n\n if (!lastReportedAt || now - lastReportedAt > windowMs) {\n cache.set(key, now)\n return true\n }\n\n return false\n }\n\n function cleanup() {\n const now = Date.now()\n\n for (const [key, timestamp] of cache.entries()) {\n if (now - timestamp > windowMs) {\n cache.delete(key)\n }\n }\n }\n\n return {\n shouldReport,\n cleanup\n }\n}\n","export function getRootElement(rootSelector?: string) {\n if (rootSelector) {\n const customRoot = document.querySelector(rootSelector)\n if (customRoot) {\n return customRoot\n }\n }\n\n const appRoot = document.querySelector('#app')\n if (appRoot) {\n return appRoot\n }\n\n const reactRoot = document.querySelector('#root')\n if (reactRoot) {\n return reactRoot\n }\n\n return document.body\n}\n","const DEFAULT_SAMPLE_POINTS: Array<[number, number]> = [\n [0.5, 0.5],\n [0.2, 0.2],\n [0.5, 0.2],\n [0.8, 0.2],\n [0.2, 0.5],\n [0.8, 0.5],\n [0.2, 0.8],\n [0.5, 0.8],\n [0.8, 0.8]\n]\n\nexport function getSamplePoints(samplePoints?: Array<[number, number]>) {\n return samplePoints?.length ? samplePoints : DEFAULT_SAMPLE_POINTS\n}\n\nexport function sampleElements(points: Array<[number, number]>) {\n const width = window.innerWidth\n const height = window.innerHeight\n\n return points.map(([xRatio, yRatio]) => {\n const x = Math.floor(width * xRatio)\n const y = Math.floor(height * yRatio)\n const element = document.elementFromPoint(x, y)\n\n return {\n x,\n y,\n element\n }\n })\n}\n","function matchesIgnoreSelectors(\n element: Element,\n ignoreSelectors: string[]\n) {\n return ignoreSelectors.some((selector) => {\n try {\n return element.matches(selector) || !!element.closest(selector)\n } catch {\n return false\n }\n })\n}\n\nfunction isContainerElement(element: Element, rootElement: Element) {\n const tagName = element.tagName.toLowerCase()\n\n if (tagName === 'html' || tagName === 'body') {\n return true\n }\n\n if (element === rootElement) {\n return true\n }\n\n return false\n}\n\nfunction getElementSummary(element: Element | null) {\n if (!element) return 'null'\n\n const tagName = element.tagName.toLowerCase()\n const id = element.id ? `#${element.id}` : ''\n const className =\n typeof element.className === 'string' && element.className.trim()\n ? `.${element.className.trim().split(/\\s+/).join('.')}`\n : ''\n\n return `${tagName}${id}${className}`\n}\n\nexport function calculateBlankScore(\n sampledElements: Array<{ element: Element | null }>,\n rootElement: Element,\n ignoreSelectors: string[]\n) {\n let blankCount = 0\n\n const domSummary = sampledElements.map(({ element }) => {\n if (!element) {\n blankCount += 1\n return 'null'\n }\n\n if (matchesIgnoreSelectors(element, ignoreSelectors)) {\n blankCount += 1\n return `${getElementSummary(element)}(ignored)`\n }\n\n if (isContainerElement(element, rootElement)) {\n blankCount += 1\n return `${getElementSummary(element)}(container)`\n }\n\n return getElementSummary(element)\n })\n\n return {\n score: sampledElements.length ? blankCount / sampledElements.length : 0,\n domSummary\n }\n}\n","import { getRootElement } from './root'\nimport { getSamplePoints, sampleElements } from './sampler'\nimport { calculateBlankScore } from './score'\nimport type { BlankScreenPluginOptions } from './types'\n\nexport interface BlankScreenDetectionResult {\n score: number\n rootSelector?: string\n domSummary: string[]\n}\n\nexport function runBlankScreenCheck(options: BlankScreenPluginOptions) {\n const {\n rootSelector,\n scoreThreshold = 0.8,\n samplePoints,\n ignoreSelectors = []\n } = options\n\n const rootElement = getRootElement(rootSelector)\n const points = getSamplePoints(samplePoints)\n const sampledElements = sampleElements(points)\n const { score, domSummary } = calculateBlankScore(\n sampledElements,\n rootElement,\n ignoreSelectors\n )\n\n if (score < scoreThreshold) {\n return null\n }\n\n return {\n score,\n rootSelector,\n domSummary\n } satisfies BlankScreenDetectionResult\n}\n","import type { BlankScreenEvent } from '@company/monitor-types'\n\ninterface CreateBlankScreenEventParams {\n score: number\n rootSelector?: string\n domSummary: string[]\n trigger: 'initial' | 'route_change' | 'manual'\n}\n\nexport function createBlankScreenEvent({\n score,\n rootSelector,\n domSummary,\n trigger\n}: CreateBlankScreenEventParams): BlankScreenEvent {\n return {\n eventId: '',\n eventType: 'blank_screen',\n appId: '',\n env: '',\n url: '',\n pathname: '',\n title: '',\n timestamp: 0,\n userAgent: '',\n blankScreen: {\n score,\n rootSelector,\n domSummary,\n readyState: document.readyState,\n trigger\n }\n }\n}\n","export function registerRouteChangeListener(onRouteChange: () => void) {\n const originalPushState = history.pushState\n const originalReplaceState = history.replaceState\n\n const handleRouteChange = () => {\n onRouteChange()\n }\n\n history.pushState = function (...args) {\n const result = originalPushState.apply(this, args)\n handleRouteChange()\n return result\n }\n\n history.replaceState = function (...args) {\n const result = originalReplaceState.apply(this, args)\n handleRouteChange()\n return result\n }\n\n window.addEventListener('popstate', handleRouteChange)\n window.addEventListener('hashchange', handleRouteChange)\n\n return () => {\n history.pushState = originalPushState\n history.replaceState = originalReplaceState\n window.removeEventListener('popstate', handleRouteChange)\n window.removeEventListener('hashchange', handleRouteChange)\n }\n}\n","import type { MonitorPlugin } from '@company/monitor-types'\nimport { createBlankScreenDedupe } from './dedupe'\nimport { runBlankScreenCheck } from './detect'\nimport { createBlankScreenEvent } from './normalize'\nimport { registerRouteChangeListener } from './route-change'\nimport type { BlankScreenPluginOptions } from './types'\n\nexport function blankScreenPlugin(\n options: BlankScreenPluginOptions = {}\n): MonitorPlugin {\n const {\n delayMs = 3000,\n detectOnRouteChange = true,\n routeChangeDelayMs = 2000,\n dedupeWindowMs = 10000\n } = options\n\n return {\n name: 'blank-screen-plugin',\n setup({ api }) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return\n }\n\n const dedupe = createBlankScreenDedupe(dedupeWindowMs)\n\n const emitIfNeeded = (trigger: 'initial' | 'route_change' | 'manual') => {\n dedupe.cleanup()\n\n const result = runBlankScreenCheck(options)\n if (!result) {\n return\n }\n\n const pathname = window.location.pathname\n const shouldReport = dedupe.shouldReport({\n pathname,\n trigger,\n score: result.score\n })\n\n if (!shouldReport) {\n return\n }\n\n api.emit(\n createBlankScreenEvent({\n score: result.score,\n rootSelector: result.rootSelector,\n domSummary: result.domSummary,\n trigger\n })\n )\n }\n\n const initialTimer = window.setTimeout(() => {\n emitIfNeeded('initial')\n }, delayMs)\n\n let routeTimer: number | null = null\n\n const disposeRouteChange = detectOnRouteChange\n ? registerRouteChangeListener(() => {\n if (routeTimer !== null) {\n window.clearTimeout(routeTimer)\n }\n\n routeTimer = window.setTimeout(() => {\n emitIfNeeded('route_change')\n }, routeChangeDelayMs)\n })\n : () => {}\n\n return () => {\n window.clearTimeout(initialTimer)\n\n if (routeTimer !== null) {\n window.clearTimeout(routeTimer)\n }\n\n disposeRouteChange()\n }\n }\n }\n}\n\nexport type { BlankScreenPluginOptions } from './types'\n","import type { ExceptionEvent } from '@company/monitor-types'\nimport { normalizeError } from '@company/monitor-shared'\n\ninterface CreateExceptionEventParams {\n error: unknown\n source: 'window.onerror' | 'unhandledrejection'\n}\n\nexport function createExceptionEvent({\n error,\n source\n}: CreateExceptionEventParams): ExceptionEvent {\n const normalized = normalizeError(error)\n\n return {\n eventId: '',\n eventType: 'exception',\n appId: '',\n env: '',\n url: '',\n pathname: '',\n title: '',\n timestamp: 0,\n userAgent: '',\n error: {\n name: normalized.name,\n message: normalized.message,\n stack: normalized.stack,\n source\n }\n }\n}\n","import type { MonitorApi } from '@company/monitor-types'\nimport { createExceptionEvent } from './normalize'\n\nexport function registerUnhandledRejection(api: MonitorApi) {\n const handler = (event: PromiseRejectionEvent) => {\n const exceptionEvent = createExceptionEvent({\n error: event.reason,\n source: 'unhandledrejection'\n })\n\n api.emit(exceptionEvent)\n }\n\n window.addEventListener('unhandledrejection', handler)\n\n return () => {\n window.removeEventListener('unhandledrejection', handler)\n }\n}\n","import type { MonitorApi } from '@company/monitor-types'\nimport { createExceptionEvent } from './normalize'\n\nexport function registerWindowOnError(api: MonitorApi) {\n const handler = (\n message: Event | string,\n _source?: string,\n _lineno?: number,\n _colno?: number,\n error?: Error\n ) => {\n const targetError = error ?? message\n const event = createExceptionEvent({\n error: targetError,\n source: 'window.onerror'\n })\n\n api.emit(event)\n return false\n }\n\n window.onerror = handler\n\n return () => {\n if (window.onerror === handler) {\n window.onerror = null\n }\n }\n}\n","import type { MonitorPlugin } from '@company/monitor-types'\nimport { registerUnhandledRejection } from './unhandledrejection'\nimport { registerWindowOnError } from './onerror'\nimport type { ErrorPluginOptions } from './types'\n\nexport function errorPlugin(options: ErrorPluginOptions = {}): MonitorPlugin {\n const {\n captureOnError = true,\n captureUnhandledRejection = true\n } = options\n\n return {\n name: 'error-plugin',\n setup({ api }) {\n const disposers: Array<() => void> = []\n\n if (captureOnError) {\n disposers.push(registerWindowOnError(api))\n }\n\n if (captureUnhandledRejection) {\n disposers.push(registerUnhandledRejection(api))\n }\n\n return () => {\n for (const dispose of disposers) {\n dispose()\n }\n }\n }\n }\n}\n\nexport type { ErrorPluginOptions } from './types'\n","import type { HttpErrorEvent } from '@company/monitor-types'\n\ninterface CreateHttpErrorEventParams {\n url: string\n method: string\n status?: number\n duration: number\n responseMessage?: string\n}\n\nexport function createHttpErrorEvent({\n url,\n method,\n status,\n duration,\n responseMessage\n}: CreateHttpErrorEventParams): HttpErrorEvent {\n return {\n eventId: '',\n eventType: 'http_error',\n appId: '',\n env: '',\n url: '',\n pathname: '',\n title: '',\n timestamp: 0,\n userAgent: '',\n request: {\n url,\n method,\n status,\n duration,\n success: false,\n source: 'fetch'\n },\n response: {\n message: responseMessage\n }\n }\n}\n","export function resolveUrlObject(url: string) {\n return new URL(url, window.location.origin)\n}\n\nexport function isMonitorRequest(requestUrl: string, dsn: string) {\n try {\n const request = resolveUrlObject(requestUrl)\n const target = resolveUrlObject(dsn)\n\n return (\n request.origin === target.origin &&\n request.pathname === target.pathname\n )\n } catch {\n return requestUrl === dsn\n }\n}\n","import type { MonitorApi, MonitorInitOptions } from '@company/monitor-types'\nimport { createHttpErrorEvent } from './normalize'\nimport type { NetworkPluginOptions } from './types'\nimport { isMonitorRequest } from './url'\n\nexport function patchFetch(\n api: MonitorApi,\n sdkOptions: MonitorInitOptions,\n options: NetworkPluginOptions\n) {\n if (typeof window === 'undefined' || typeof window.fetch !== 'function') {\n return () => {}\n }\n\n const originalFetch = window.fetch.bind(window)\n const {\n capture5xx = true,\n captureNetworkError = true\n } = options\n\n window.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {\n const method = (init?.method || 'GET').toUpperCase()\n const requestUrl =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.toString()\n : input.url\n\n if (isMonitorRequest(requestUrl, sdkOptions.dsn)) {\n return originalFetch(input, init)\n }\n\n const startedAt = Date.now()\n\n try {\n const response = await originalFetch(input, init)\n const duration = Date.now() - startedAt\n\n if (capture5xx && response.status >= 500) {\n api.emit(\n createHttpErrorEvent({\n url: requestUrl,\n method,\n status: response.status,\n duration,\n responseMessage: response.statusText\n })\n )\n }\n\n return response\n } catch (error) {\n const duration = Date.now() - startedAt\n\n if (captureNetworkError) {\n api.emit(\n createHttpErrorEvent({\n url: requestUrl,\n method,\n duration,\n responseMessage:\n error instanceof Error ? error.message : 'Fetch request failed'\n })\n )\n }\n\n throw error\n }\n }\n\n return () => {\n window.fetch = originalFetch\n }\n}\n","import type { MonitorPlugin } from '@company/monitor-types'\nimport { patchFetch } from './patch-fetch'\nimport type { NetworkPluginOptions } from './types'\n\nexport function networkPlugin(\n options: NetworkPluginOptions = {}\n): MonitorPlugin {\n return {\n name: 'network-plugin',\n setup({ api, options: sdkOptions }) {\n const disposeFetch = patchFetch(api, sdkOptions, options)\n\n return () => {\n disposeFetch()\n }\n }\n }\n}\n\nexport type { NetworkPluginOptions } from './types'\n","import React, { Component, type ErrorInfo } from 'react'\nimport type { MonitorErrorBoundaryProps } from './types'\n\ninterface MonitorErrorBoundaryState {\n hasError: boolean\n}\n\nexport class MonitorErrorBoundary extends Component<\n MonitorErrorBoundaryProps,\n MonitorErrorBoundaryState\n> {\n state: MonitorErrorBoundaryState = {\n hasError: false\n }\n\n static getDerivedStateFromError() {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n this.props.monitor.captureException(error, {\n componentStack: info.componentStack\n })\n }\n\n render() {\n if (this.state.hasError) {\n return this.props.fallback ?? null\n }\n\n return this.props.children\n }\n}\n"],"mappings":";;;;;AAAA,SAA6C,eAAe,kBAAkB;;;ACAvE,SAAS,gBAAgB;AAC9B,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAW;AAAA,EAC3B;AAEA,SAAO,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACjE;;;ACAO,SAAS,eAAe,OAAiC;AAC9D,MAAI,iBAAiB,OAAO;AAC1B,WAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,OAAQ,MAAgC,YAAY,UACpD;AACA,UAAM,aAAa;AAEnB,WAAO;AAAA,MACL,MAAM,OAAO,WAAW,SAAS,WAAW,WAAW,OAAO;AAAA,MAC9D,SAAS,WAAW;AAAA,MACpB,OAAO,OAAO,WAAW,UAAU,WAAW,WAAW,QAAQ;AAAA,IACnE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,EACX;AACF;;;ACvCO,SAAS,kBAAkB;AAChC,SAAO;AAAA,IACL,KAAK,OAAO,SAAS;AAAA,IACrB,UAAU,OAAO,SAAS;AAAA,IAC1B,OAAO,SAAS;AAAA,IAChB,WAAW,UAAU;AAAA,EACvB;AACF;;;ACLO,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,wBAAQ,UAAyB,CAAC;AAAA;AAAA,EAElC,IAAI,OAAqB;AACvB,SAAK,OAAO,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,QAAQ;AACN,UAAM,UAAU,CAAC,GAAG,KAAK,MAAM;AAC/B,SAAK,SAAS,CAAC;AACf,WAAO;AAAA,EACT;AAAA,EAEA,OAAO;AACL,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;;;AChBA,eAAsB,WAAW,KAAa,QAAwB;AACpE,MAAI,CAAC,OAAO,OAAQ;AAEpB,MAAI,UAAU,YAAY;AACxB,UAAM,OAAO,IAAI,KAAK,CAAC,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG;AAAA,MAClD,MAAM;AAAA,IACR,CAAC;AACD,cAAU,WAAW,KAAK,IAAI;AAC9B;AAAA,EACF;AAEA,QAAM,MAAM,KAAK;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC;AAAA,IAC/B,WAAW;AAAA,EACb,CAAC;AACH;;;AClBO,SAAS,kBAAkB,SAA6B;AAC7D,QAAM,eAAe,gBAAgB;AAErC,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,SAAS,QAAQ;AAAA,IACjB,KAAK,QAAQ;AAAA,IACb,SAAS,QAAQ;AAAA,IACjB,GAAG;AAAA,EACL;AACF;;;ACPO,SAAS,aACd,SACA,KACA,SACA;AACA,QAAM,YAA+B,CAAC;AAEtC,aAAW,UAAU,SAAS;AAC5B,UAAM,WAAW,OAAO,MAAM,EAAE,KAAK,QAAQ,CAAC;AAC9C,QAAI,OAAO,aAAa,YAAY;AAClC,gBAAU,KAAK,QAAQ;AAAA,IACzB;AAAA,EACF;AAEA,SAAO,MAAM;AACX,eAAW,WAAW,WAAW;AAC/B,cAAQ;AAAA,IACV;AAAA,EACF;AACF;;;ACdO,IAAM,UAAN,MAAoC;AAAA,EAMzC,YAAY,SAA6B;AALzC,wBAAQ,SAAQ,IAAI,WAAW;AAC/B,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,kBAAsC;AAfhD;AAkBI,SAAK,UAAU;AACf,SAAK,UAAU,kBAAkB,OAAO;AACxC,SAAK,iBAAiB,cAAa,aAAQ,YAAR,YAAmB,CAAC,GAAG,MAAM,OAAO;AAAA,EACzE;AAAA,EAEA,KAAK,OAAqB;AACxB,UAAM,cAA4B;AAAA,MAChC,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,MACH,OAAO,MAAM,SAAS,KAAK,QAAQ;AAAA,MACnC,SAAS,MAAM,WAAW,KAAK,QAAQ;AAAA,MACvC,KAAK,MAAM,OAAO,KAAK,QAAQ;AAAA,MAC/B,SAAS,MAAM,WAAW,KAAK,QAAQ;AAAA,MACvC,KAAK,MAAM,OAAO,KAAK,QAAQ;AAAA,MAC/B,UAAU,MAAM,YAAY,KAAK,QAAQ;AAAA,MACzC,OAAO,MAAM,SAAS,KAAK,QAAQ;AAAA,MACnC,WAAW,MAAM,aAAa,KAAK,QAAQ;AAAA,MAC3C,SAAS,MAAM,WAAW,cAAc;AAAA,MACxC,WAAW,MAAM,aAAa,KAAK,IAAI;AAAA,IACzC;AAEA,UAAM,aAAa,KAAK,QAAQ,aAC5B,KAAK,QAAQ,WAAW,WAAW,IACnC;AAEJ,QAAI,CAAC,WAAY;AAEjB,SAAK,MAAM,IAAI,UAAU;AACzB,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,iBAAiB,OAAgB,OAAiC;AAChE,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,QAAwB;AAAA,MAC5B,SAAS;AAAA,MACT,WAAW;AAAA,MACX,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,MAAM,WAAW;AAAA,QACjB,SAAS,WAAW;AAAA,QACpB,OAAO,WAAW;AAAA,QAClB,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,SAAK,KAAK,KAAK;AAAA,EACjB;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,SAAS,KAAK,MAAM,MAAM;AAChC,UAAM,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,EAC3C;AAAA,EAEA,UAAU;AA/EZ;AAgFI,eAAK,mBAAL;AACA,SAAK,iBAAiB;AAAA,EACxB;AACF;AAEO,SAAS,YAAY,SAA6B;AACvD,SAAO,IAAI,QAAQ,OAAO;AAC5B;;;ACjFA,SAAS,eAAe,OAAe;AACrC,SAAO,MAAM,QAAQ,CAAC;AACxB;AAEA,SAAS,gBAAgB,OAA+B;AACtD,SAAO,CAAC,MAAM,UAAU,MAAM,SAAS,eAAe,MAAM,KAAK,CAAC,EAAE,KAAK,GAAG;AAC9E;AAEO,SAAS,wBAAwB,UAAkB;AACxD,QAAM,QAAQ,oBAAI,IAAoB;AAEtC,WAAS,aAAa,OAA+B;AACnD,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,MAAM,gBAAgB,KAAK;AACjC,UAAM,iBAAiB,MAAM,IAAI,GAAG;AAEpC,QAAI,CAAC,kBAAkB,MAAM,iBAAiB,UAAU;AACtD,YAAM,IAAI,KAAK,GAAG;AAClB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,UAAU;AACjB,UAAM,MAAM,KAAK,IAAI;AAErB,eAAW,CAAC,KAAK,SAAS,KAAK,MAAM,QAAQ,GAAG;AAC9C,UAAI,MAAM,YAAY,UAAU;AAC9B,cAAM,OAAO,GAAG;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AC5CO,SAAS,eAAe,cAAuB;AACpD,MAAI,cAAc;AAChB,UAAM,aAAa,SAAS,cAAc,YAAY;AACtD,QAAI,YAAY;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,UAAU,SAAS,cAAc,MAAM;AAC7C,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,SAAS,cAAc,OAAO;AAChD,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AAEA,SAAO,SAAS;AAClB;;;ACnBA,IAAM,wBAAiD;AAAA,EACrD,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AAAA,EACT,CAAC,KAAK,GAAG;AACX;AAEO,SAAS,gBAAgB,cAAwC;AACtE,UAAO,6CAAc,UAAS,eAAe;AAC/C;AAEO,SAAS,eAAe,QAAiC;AAC9D,QAAM,QAAQ,OAAO;AACrB,QAAM,SAAS,OAAO;AAEtB,SAAO,OAAO,IAAI,CAAC,CAAC,QAAQ,MAAM,MAAM;AACtC,UAAM,IAAI,KAAK,MAAM,QAAQ,MAAM;AACnC,UAAM,IAAI,KAAK,MAAM,SAAS,MAAM;AACpC,UAAM,UAAU,SAAS,iBAAiB,GAAG,CAAC;AAE9C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC/BA,SAAS,uBACP,SACA,iBACA;AACA,SAAO,gBAAgB,KAAK,CAAC,aAAa;AACxC,QAAI;AACF,aAAO,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IAChE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,SAAS,mBAAmB,SAAkB,aAAsB;AAClE,QAAM,UAAU,QAAQ,QAAQ,YAAY;AAE5C,MAAI,YAAY,UAAU,YAAY,QAAQ;AAC5C,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,aAAa;AAC3B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAyB;AAClD,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,UAAU,QAAQ,QAAQ,YAAY;AAC5C,QAAM,KAAK,QAAQ,KAAK,IAAI,QAAQ,EAAE,KAAK;AAC3C,QAAM,YACJ,OAAO,QAAQ,cAAc,YAAY,QAAQ,UAAU,KAAK,IAC5D,IAAI,QAAQ,UAAU,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,GAAG,CAAC,KACnD;AAEN,SAAO,GAAG,OAAO,GAAG,EAAE,GAAG,SAAS;AACpC;AAEO,SAAS,oBACd,iBACA,aACA,iBACA;AACA,MAAI,aAAa;AAEjB,QAAM,aAAa,gBAAgB,IAAI,CAAC,EAAE,QAAQ,MAAM;AACtD,QAAI,CAAC,SAAS;AACZ,oBAAc;AACd,aAAO;AAAA,IACT;AAEA,QAAI,uBAAuB,SAAS,eAAe,GAAG;AACpD,oBAAc;AACd,aAAO,GAAG,kBAAkB,OAAO,CAAC;AAAA,IACtC;AAEA,QAAI,mBAAmB,SAAS,WAAW,GAAG;AAC5C,oBAAc;AACd,aAAO,GAAG,kBAAkB,OAAO,CAAC;AAAA,IACtC;AAEA,WAAO,kBAAkB,OAAO;AAAA,EAClC,CAAC;AAED,SAAO;AAAA,IACL,OAAO,gBAAgB,SAAS,aAAa,gBAAgB,SAAS;AAAA,IACtE;AAAA,EACF;AACF;;;AC3DO,SAAS,oBAAoB,SAAmC;AACrE,QAAM;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,kBAAkB,CAAC;AAAA,EACrB,IAAI;AAEJ,QAAM,cAAc,eAAe,YAAY;AAC/C,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,kBAAkB,eAAe,MAAM;AAC7C,QAAM,EAAE,OAAO,WAAW,IAAI;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,QAAQ,gBAAgB;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5BO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;;;ACjCO,SAAS,4BAA4B,eAA2B;AACrE,QAAM,oBAAoB,QAAQ;AAClC,QAAM,uBAAuB,QAAQ;AAErC,QAAM,oBAAoB,MAAM;AAC9B,kBAAc;AAAA,EAChB;AAEA,UAAQ,YAAY,YAAa,MAAM;AACrC,UAAM,SAAS,kBAAkB,MAAM,MAAM,IAAI;AACjD,sBAAkB;AAClB,WAAO;AAAA,EACT;AAEA,UAAQ,eAAe,YAAa,MAAM;AACxC,UAAM,SAAS,qBAAqB,MAAM,MAAM,IAAI;AACpD,sBAAkB;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,iBAAiB,YAAY,iBAAiB;AACrD,SAAO,iBAAiB,cAAc,iBAAiB;AAEvD,SAAO,MAAM;AACX,YAAQ,YAAY;AACpB,YAAQ,eAAe;AACvB,WAAO,oBAAoB,YAAY,iBAAiB;AACxD,WAAO,oBAAoB,cAAc,iBAAiB;AAAA,EAC5D;AACF;;;ACtBO,SAAS,kBACd,UAAoC,CAAC,GACtB;AACf,QAAM;AAAA,IACJ,UAAU;AAAA,IACV,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,EACnB,IAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,GAAG;AACb,UAAI,OAAO,WAAW,eAAe,OAAO,aAAa,aAAa;AACpE;AAAA,MACF;AAEA,YAAM,SAAS,wBAAwB,cAAc;AAErD,YAAM,eAAe,CAAC,YAAmD;AACvE,eAAO,QAAQ;AAEf,cAAM,SAAS,oBAAoB,OAAO;AAC1C,YAAI,CAAC,QAAQ;AACX;AAAA,QACF;AAEA,cAAM,WAAW,OAAO,SAAS;AACjC,cAAM,eAAe,OAAO,aAAa;AAAA,UACvC;AAAA,UACA;AAAA,UACA,OAAO,OAAO;AAAA,QAChB,CAAC;AAED,YAAI,CAAC,cAAc;AACjB;AAAA,QACF;AAEA,YAAI;AAAA,UACF,uBAAuB;AAAA,YACrB,OAAO,OAAO;AAAA,YACd,cAAc,OAAO;AAAA,YACrB,YAAY,OAAO;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,YAAM,eAAe,OAAO,WAAW,MAAM;AAC3C,qBAAa,SAAS;AAAA,MACxB,GAAG,OAAO;AAEV,UAAI,aAA4B;AAEhC,YAAM,qBAAqB,sBACvB,4BAA4B,MAAM;AAChC,YAAI,eAAe,MAAM;AACvB,iBAAO,aAAa,UAAU;AAAA,QAChC;AAEA,qBAAa,OAAO,WAAW,MAAM;AACnC,uBAAa,cAAc;AAAA,QAC7B,GAAG,kBAAkB;AAAA,MACvB,CAAC,IACD,MAAM;AAAA,MAAC;AAEX,aAAO,MAAM;AACX,eAAO,aAAa,YAAY;AAEhC,YAAI,eAAe,MAAM;AACvB,iBAAO,aAAa,UAAU;AAAA,QAChC;AAEA,2BAAmB;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;;;AC5EO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,aAAa,eAAe,KAAK;AAEvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,SAAS,WAAW;AAAA,MACpB,OAAO,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACF;;;AC5BO,SAAS,2BAA2B,KAAiB;AAC1D,QAAM,UAAU,CAAC,UAAiC;AAChD,UAAM,iBAAiB,qBAAqB;AAAA,MAC1C,OAAO,MAAM;AAAA,MACb,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,KAAK,cAAc;AAAA,EACzB;AAEA,SAAO,iBAAiB,sBAAsB,OAAO;AAErD,SAAO,MAAM;AACX,WAAO,oBAAoB,sBAAsB,OAAO;AAAA,EAC1D;AACF;;;ACfO,SAAS,sBAAsB,KAAiB;AACrD,QAAM,UAAU,CACd,SACA,SACA,SACA,QACA,UACG;AACH,UAAM,cAAc,wBAAS;AAC7B,UAAM,QAAQ,qBAAqB;AAAA,MACjC,OAAO;AAAA,MACP,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,KAAK,KAAK;AACd,WAAO;AAAA,EACT;AAEA,SAAO,UAAU;AAEjB,SAAO,MAAM;AACX,QAAI,OAAO,YAAY,SAAS;AAC9B,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACF;;;ACvBO,SAAS,YAAY,UAA8B,CAAC,GAAkB;AAC3E,QAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,4BAA4B;AAAA,EAC9B,IAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,GAAG;AACb,YAAM,YAA+B,CAAC;AAEtC,UAAI,gBAAgB;AAClB,kBAAU,KAAK,sBAAsB,GAAG,CAAC;AAAA,MAC3C;AAEA,UAAI,2BAA2B;AAC7B,kBAAU,KAAK,2BAA2B,GAAG,CAAC;AAAA,MAChD;AAEA,aAAO,MAAM;AACX,mBAAW,WAAW,WAAW;AAC/B,kBAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACrBO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;ACvCO,SAAS,iBAAiB,KAAa;AAC5C,SAAO,IAAI,IAAI,KAAK,OAAO,SAAS,MAAM;AAC5C;AAEO,SAAS,iBAAiB,YAAoB,KAAa;AAChE,MAAI;AACF,UAAM,UAAU,iBAAiB,UAAU;AAC3C,UAAM,SAAS,iBAAiB,GAAG;AAEnC,WACE,QAAQ,WAAW,OAAO,UAC1B,QAAQ,aAAa,OAAO;AAAA,EAEhC,QAAQ;AACN,WAAO,eAAe;AAAA,EACxB;AACF;;;ACXO,SAAS,WACd,KACA,YACA,SACA;AACA,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,UAAU,YAAY;AACvE,WAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AAEA,QAAM,gBAAgB,OAAO,MAAM,KAAK,MAAM;AAC9C,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,sBAAsB;AAAA,EACxB,IAAI;AAEJ,SAAO,QAAQ,OAAO,OAA0B,SAAuB;AACrE,UAAM,WAAU,6BAAM,WAAU,OAAO,YAAY;AACnD,UAAM,aACJ,OAAO,UAAU,WACb,QACA,iBAAiB,MACf,MAAM,SAAS,IACf,MAAM;AAEd,QAAI,iBAAiB,YAAY,WAAW,GAAG,GAAG;AAChD,aAAO,cAAc,OAAO,IAAI;AAAA,IAClC;AAEA,UAAM,YAAY,KAAK,IAAI;AAE3B,QAAI;AACF,YAAM,WAAW,MAAM,cAAc,OAAO,IAAI;AAChD,YAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,UAAI,cAAc,SAAS,UAAU,KAAK;AACxC,YAAI;AAAA,UACF,qBAAqB;AAAA,YACnB,KAAK;AAAA,YACL;AAAA,YACA,QAAQ,SAAS;AAAA,YACjB;AAAA,YACA,iBAAiB,SAAS;AAAA,UAC5B,CAAC;AAAA,QACH;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,UAAI,qBAAqB;AACvB,YAAI;AAAA,UACF,qBAAqB;AAAA,YACnB,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,iBACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,UAC7C,CAAC;AAAA,QACH;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAEA,SAAO,MAAM;AACX,WAAO,QAAQ;AAAA,EACjB;AACF;;;ACtEO,SAAS,cACd,UAAgC,CAAC,GAClB;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,EAAE,KAAK,SAAS,WAAW,GAAG;AAClC,YAAM,eAAe,WAAW,KAAK,YAAY,OAAO;AAExD,aAAO,MAAM;AACX,qBAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;;;ACjBA,SAAgB,iBAAiC;AAO1C,IAAM,uBAAN,cAAmC,UAGxC;AAAA,EAHK;AAAA;AAIL,iCAAmC;AAAA,MACjC,UAAU;AAAA,IACZ;AAAA;AAAA,EAEA,OAAO,2BAA2B;AAChC,WAAO,EAAE,UAAU,KAAK;AAAA,EAC1B;AAAA,EAEA,kBAAkB,OAAc,MAAiB;AAC/C,SAAK,MAAM,QAAQ,iBAAiB,OAAO;AAAA,MACzC,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,SAAS;AAzBX;AA0BI,QAAI,KAAK,MAAM,UAAU;AACvB,cAAO,UAAK,MAAM,aAAX,YAAuB;AAAA,IAChC;AAEA,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;;;AzBkBQ;AAhBR,IAAM,iBAAiB,cAAiC,IAAI;AAErD,SAAS,mBACd,SACsB;AAtCxB;AAuCE,QAAM,UAAU,YAAY;AAAA,IAC1B,GAAG;AAAA,IACH,SAAS;AAAA,MACP,GAAG,kBAAkB,OAAO;AAAA,MAC5B,IAAI,aAAQ,YAAR,YAAmB,CAAC;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,WAAS,YAAY,EAAE,UAAU,SAAS,GAAqB;AAC7D,WACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,SAC9B,8BAAC,wBAAqB,SAAkB,UAAU,8BAAY,QAAQ,UACnE,UACH,GACF;AAAA,EAEJ;AAEA,WAAS,YAAmCA,YAAkC;AAC5E,WAAO,SAAS,iBAAiB,OAAe;AAC9C,aACE,oBAAC,eACC,8BAACA,YAAA,EAAW,GAAG,OAAO,GACxB;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,aAAa;AAC3B,QAAM,UAAU,WAAW,cAAc;AAEzC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAqD;AApFhF;AAqFE,QAAM,WAAW,IAAI,KAAI,aAAQ,0BAAR,YAAiC,CAAC,CAAC;AAC5D,QAAM,UAA2B,CAAC;AAElC,MAAI,CAAC,SAAS,IAAI,OAAO,GAAG;AAC1B,YAAQ,KAAK,YAAY,QAAQ,KAAK,CAAC;AAAA,EACzC;AAEA,MAAI,CAAC,SAAS,IAAI,SAAS,GAAG;AAC5B,YAAQ,KAAK,cAAc,QAAQ,OAAO,CAAC;AAAA,EAC7C;AAEA,MAAI,CAAC,SAAS,IAAI,aAAa,GAAG;AAChC,YAAQ,KAAK,kBAAkB,QAAQ,WAAW,CAAC;AAAA,EACrD;AAEA,SAAO;AACT;","names":["Component"]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@zhongxiaobing/monitor-react",
3
+ "version": "0.1.0",
4
+ "description": "React bindings for @company/monitor",
5
+ "license": "MIT",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": ["dist"],
17
+ "sideEffects": false,
18
+ "keywords": ["monitor", "react", "frontend", "observability"],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/zhongxiaobing-bs/monitor.git"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "peerDependencies": {
27
+ "react": "^18.0.0 || ^19.0.0",
28
+ "react-dom": "^18.0.0 || ^19.0.0"
29
+ },
30
+ "devDependencies": {
31
+ "@company/monitor-core": "workspace:*",
32
+ "@company/monitor-plugin-blank-screen": "workspace:*",
33
+ "@company/monitor-plugin-error": "workspace:*",
34
+ "@company/monitor-plugin-network": "workspace:*",
35
+ "@company/monitor-types": "workspace:*"
36
+ },
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "test": "vitest run",
40
+ "lint": "tsc --noEmit",
41
+ "typecheck": "tsc --noEmit"
42
+ }
43
+ }