UNPKG

highlight.run

Version:

Open source, fullstack monitoring. Capture frontend errors, record server side logs, and visualize what broke with session replay.

1 lines 3.55 MB
{"version":3,"file":"index.umd.cjs","sources":["../src/client/utils/utils.ts","../node_modules/stackframe/stackframe.js","../node_modules/error-stack-parser/error-stack-parser.js","../src/client/utils/errors.ts","../src/client/listeners/console-listener.tsx","../node_modules/json-stringify-safe/stringify.js","../src/client/listeners/error-listener.tsx","../src/client/constants/errors.ts","../node_modules/@opentelemetry/api/build/esm/platform/browser/globalThis.js","../node_modules/@opentelemetry/api/build/esm/version.js","../node_modules/@opentelemetry/api/build/esm/internal/semver.js","../node_modules/@opentelemetry/api/build/esm/internal/global-utils.js","../node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js","../node_modules/@opentelemetry/api/build/esm/diag/types.js","../node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js","../node_modules/@opentelemetry/api/build/esm/api/diag.js","../node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js","../node_modules/@opentelemetry/api/build/esm/baggage/internal/symbol.js","../node_modules/@opentelemetry/api/build/esm/baggage/utils.js","../node_modules/@opentelemetry/api/build/esm/context/context.js","../node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js","../node_modules/@opentelemetry/api/build/esm/metrics/Metric.js","../node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js","../node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js","../node_modules/@opentelemetry/api/build/esm/api/context.js","../node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js","../node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js","../node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js","../node_modules/@opentelemetry/api/build/esm/trace/context-utils.js","../node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js","../node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js","../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js","../node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js","../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js","../node_modules/@opentelemetry/api/build/esm/trace/SamplingResult.js","../node_modules/@opentelemetry/api/build/esm/trace/span_kind.js","../node_modules/@opentelemetry/api/build/esm/trace/status.js","../node_modules/@opentelemetry/api/build/esm/context-api.js","../node_modules/@opentelemetry/api/build/esm/diag-api.js","../node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js","../node_modules/@opentelemetry/api/build/esm/api/metrics.js","../node_modules/@opentelemetry/api/build/esm/metrics-api.js","../node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js","../node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js","../node_modules/@opentelemetry/api/build/esm/api/propagation.js","../node_modules/@opentelemetry/api/build/esm/propagation-api.js","../node_modules/@opentelemetry/api/build/esm/api/trace.js","../node_modules/@opentelemetry/api/build/esm/trace-api.js","../node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js","../node_modules/@opentelemetry/core/build/esm/baggage/constants.js","../node_modules/@opentelemetry/core/build/esm/baggage/utils.js","../node_modules/@opentelemetry/core/build/esm/baggage/propagation/W3CBaggagePropagator.js","../node_modules/@opentelemetry/core/build/esm/common/attributes.js","../node_modules/@opentelemetry/core/build/esm/common/logging-error-handler.js","../node_modules/@opentelemetry/core/build/esm/common/global-error-handler.js","../node_modules/@opentelemetry/core/build/esm/utils/sampling.js","../node_modules/@opentelemetry/core/build/esm/utils/environment.js","../node_modules/@opentelemetry/core/build/esm/platform/browser/globalThis.js","../node_modules/@opentelemetry/core/build/esm/platform/browser/environment.js","../node_modules/@opentelemetry/core/build/esm/common/hex-to-binary.js","../node_modules/@opentelemetry/core/build/esm/platform/browser/performance.js","../node_modules/@opentelemetry/core/build/esm/version.js","../node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js","../node_modules/@opentelemetry/core/build/esm/platform/browser/sdk-info.js","../node_modules/@opentelemetry/core/build/esm/common/time.js","../node_modules/@opentelemetry/core/build/esm/ExportResult.js","../node_modules/@opentelemetry/core/build/esm/propagation/composite.js","../node_modules/@opentelemetry/core/build/esm/internal/validators.js","../node_modules/@opentelemetry/core/build/esm/trace/TraceState.js","../node_modules/@opentelemetry/core/build/esm/trace/W3CTraceContextPropagator.js","../node_modules/@opentelemetry/core/build/esm/utils/lodash.merge.js","../node_modules/@opentelemetry/core/build/esm/utils/merge.js","../node_modules/@opentelemetry/core/build/esm/utils/url.js","../node_modules/@opentelemetry/core/build/esm/utils/promise.js","../node_modules/@opentelemetry/core/build/esm/utils/callback.js","../node_modules/@opentelemetry/core/build/esm/internal/exporter.js","../node_modules/@opentelemetry/core/build/esm/index.js","../node_modules/@opentelemetry/api-logs/build/esm/NoopLogger.js","../node_modules/@opentelemetry/api-logs/build/esm/NoopLoggerProvider.js","../node_modules/@opentelemetry/api-logs/build/esm/ProxyLogger.js","../node_modules/@opentelemetry/api-logs/build/esm/ProxyLoggerProvider.js","../node_modules/@opentelemetry/api-logs/build/esm/platform/browser/globalThis.js","../node_modules/@opentelemetry/api-logs/build/esm/internal/global-utils.js","../node_modules/@opentelemetry/api-logs/build/esm/api/logs.js","../node_modules/@opentelemetry/api-logs/build/esm/index.js","../node_modules/@opentelemetry/instrumentation/build/esm/autoLoaderUtils.js","../node_modules/@opentelemetry/instrumentation/build/esm/autoLoader.js","../node_modules/shimmer/index.js","../node_modules/@opentelemetry/instrumentation/build/esm/instrumentation.js","../node_modules/@opentelemetry/instrumentation/build/esm/platform/browser/instrumentation.js","../node_modules/@opentelemetry/instrumentation/build/esm/utils.js","../node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/enums.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/Span.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/Sampler.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOffSampler.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOnSampler.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/ParentBasedSampler.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/TraceIdRatioBasedSampler.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/config.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/utility.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/BatchSpanProcessorBase.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/browser/export/BatchSpanProcessor.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/browser/RandomIdGenerator.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/Tracer.js","../node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js","../node_modules/@opentelemetry/resources/build/esm/platform/browser/default-service-name.js","../node_modules/@opentelemetry/resources/build/esm/Resource.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/MultiSpanProcessor.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/NoopSpanProcessor.js","../node_modules/@opentelemetry/sdk-trace-base/build/esm/BasicTracerProvider.js","../node_modules/@opentelemetry/sdk-trace-web/build/esm/StackContextManager.js","../node_modules/@opentelemetry/sdk-trace-web/build/esm/WebTracerProvider.js","../node_modules/@opentelemetry/sdk-trace-web/build/esm/enums/PerformanceTimingNames.js","../node_modules/@opentelemetry/sdk-trace-web/node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../node_modules/@opentelemetry/sdk-trace-web/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-document-load/build/esm/enums/AttributeNames.js","../node_modules/@opentelemetry/instrumentation-document-load/build/esm/version.js","../node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js","../node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js","../node_modules/@opentelemetry/instrumentation-document-load/build/esm/enums/EventNames.js","../node_modules/@opentelemetry/instrumentation-document-load/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-document-load/build/esm/instrumentation.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/NoopLogger.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/NoopLoggerProvider.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/ProxyLogger.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/ProxyLoggerProvider.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/platform/browser/globalThis.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/internal/global-utils.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/api/logs.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/api-logs/build/esm/index.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/instrumentation/build/esm/instrumentation.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/instrumentation/build/esm/platform/browser/instrumentation.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/instrumentation/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-fetch/build/esm/enums/AttributeNames.js","../node_modules/@opentelemetry/instrumentation-fetch/node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../node_modules/@opentelemetry/instrumentation-fetch/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-fetch/build/esm/version.js","../node_modules/@opentelemetry/instrumentation-fetch/build/esm/fetch.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/NoopLogger.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/NoopLoggerProvider.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/ProxyLogger.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/ProxyLoggerProvider.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/platform/browser/globalThis.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/internal/global-utils.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/api/logs.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/api-logs/build/esm/index.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/instrumentation/build/esm/instrumentation.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/instrumentation/build/esm/platform/browser/instrumentation.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/instrumentation/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/build/esm/enums/EventNames.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/build/esm/utils.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/build/esm/version.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/build/esm/enums/AttributeNames.js","../node_modules/@opentelemetry/instrumentation-xml-http-request/build/esm/xhr.js","../node_modules/graphql/jsutils/devAssert.mjs","../node_modules/graphql/jsutils/isObjectLike.mjs","../node_modules/graphql/jsutils/invariant.mjs","../node_modules/graphql/language/location.mjs","../node_modules/graphql/language/printLocation.mjs","../node_modules/graphql/error/GraphQLError.mjs","../node_modules/graphql/error/syntaxError.mjs","../node_modules/graphql/language/ast.mjs","../node_modules/graphql/language/directiveLocation.mjs","../node_modules/graphql/language/kinds.mjs","../node_modules/graphql/language/characterClasses.mjs","../node_modules/graphql/language/blockString.mjs","../node_modules/graphql/language/tokenKind.mjs","../node_modules/graphql/language/lexer.mjs","../node_modules/graphql/jsutils/inspect.mjs","../node_modules/graphql/jsutils/instanceOf.mjs","../node_modules/graphql/language/source.mjs","../node_modules/graphql/language/parser.mjs","../node_modules/graphql/language/printString.mjs","../node_modules/graphql/language/visitor.mjs","../node_modules/graphql/language/printer.mjs","../src/client/constants/sessions.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/client/utils/storage.ts","../src/client/utils/sessionStorage/sessionStorageKeys.ts","../src/client/utils/sessionStorage/highlightSession.ts","../src/client/listeners/network-listener/utils/network-sanitizer.ts","../src/client/listeners/network-listener/utils/utils.ts","../src/client/listeners/network-listener/utils/xhr-listener.ts","../src/client/listeners/network-listener/utils/fetch-listener.ts","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/OTLPExporterBase.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/types.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/shared-configuration.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/bounded-queue-export-promise-handler.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/logging-response-handler.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-export-delegate.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-network-export-delegate.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationTemporality.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricData.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/utils.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/types.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Drop.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/InstrumentDescriptor.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Histogram.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/Buckets.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ieee754.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/util.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/types.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/ExponentMapping.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/LogarithmMapping.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/exponential-histogram/mapping/getMapping.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/ExponentialHistogram.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/LastValue.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/aggregator/Sum.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/view/Aggregation.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/export/AggregationSelector.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/export/MetricReader.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/export/PeriodicExportingMetricReader.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/view/ViewRegistry.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/Instruments.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/Meter.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorage.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/HashMap.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/DeltaMetricProcessor.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/TemporalMetricProcessor.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/AsyncMetricStorage.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/view/RegistrationConflicts.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricStorageRegistry.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MultiWritableMetricStorage.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/ObservableResult.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/ObservableRegistry.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/SyncMetricStorage.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/view/AttributesProcessor.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterSharedState.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MeterProviderSharedState.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/state/MetricCollector.js","../node_modules/@opentelemetry/sdk-metrics/build/esm/MeterProvider.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/metrics/internal.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/metrics/json/metrics.js","../node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/retrying-transport.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/is-export-retryable.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/xhr-transport.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/transport/send-beacon-transport.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/otlp-browser-http-export-delegate.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/util.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/otlp-http-configuration.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/convert-legacy-browser-http-options.js","../node_modules/@opentelemetry/otlp-exporter-base/build/esm/configuration/create-legacy-browser-delegate.js","../node_modules/@opentelemetry/exporter-trace-otlp-http/build/esm/platform/browser/OTLPTraceExporter.js","../node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/OTLPMetricExporterOptions.js","../node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/OTLPMetricExporterBase.js","../node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/platform/browser/OTLPMetricExporter.js","../node_modules/graphql-request/build/esm/defaultJsonSerializer.js","../node_modules/graphql-request/build/esm/helpers.js","../node_modules/graphql-request/build/esm/parseArgs.js","../node_modules/graphql-request/build/esm/resolveRequestDocument.js","../node_modules/graphql-request/build/esm/types.js","../node_modules/cross-fetch/dist/browser-ponyfill.js","../node_modules/graphql-request/build/esm/index.js","../src/client/graph/generated/schemas.ts","../src/client/utils/graph.ts","../src/client/otel/exporter.ts","../src/client/otel/user-interaction.ts","../src/client/otel/index.ts","../src/client/types/client.ts","../src/client/listeners/network-listener/utils/web-socket-listener.ts","../src/client/listeners/network-listener/network-listener.ts","../src/client/listeners/first-load-listeners.tsx","../src/client/utils/secure-id.ts","../src/integrations/amplitude.ts","../src/integrations/mixpanel.ts","../src/__generated/version.ts","../src/browserExtension/extensionListener.ts","../src/environments/electron.ts","../src/integrations/segment.ts","../src/listeners/fetch/index.ts","../src/listeners/web-socket/index.ts","../src/client/otel/utils.ts","../../../rrweb/packages/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.js","../../../rrweb/packages/rrweb/dist/rrweb.js","../node_modules/tslib/tslib.es6.mjs","../node_modules/graphql-tag/lib/index.js","../src/client/graph/generated/operations.ts","../src/client/listeners/path-listener.tsx","../src/client/utils/privacy.ts","../src/client/utils/dom/index.ts","../src/client/listeners/click-listener/click-listener.ts","../src/client/listeners/focus-listener/focus-listener.ts","../src/client/listeners/jank-listener/jank-listener.ts","../src/client/listeners/page-visibility-listener.tsx","../src/client/listeners/performance-listener/performance-listener.ts","../src/client/listeners/segment-integration-listener.tsx","../src/client/listeners/session-shortcut/session-shortcut-listener.tsx","../src/client/listeners/viewport-resize-listener.tsx","../node_modules/web-vitals/dist/web-vitals.js","../src/client/listeners/web-vitals-listener/web-vitals-listener.tsx","../src/client/listeners/network-listener/performance-listener.ts","../src/client/logger.ts","../src/client/types/iframe.ts","../src/client/utils/highlight-logging.ts","../src/client/utils/performance/performance.tsx","../src/client/workers/types.ts","../src/client/index.tsx","../src/integrations/launchdarkly/index.ts","../src/index.tsx"],"sourcesContent":["import { StringifyOptions } from '../listeners/console-listener'\n\nexport function patch(\n\t// tslint:disable-next-line:no-any\n\tsource: { [key: string]: any },\n\tname: string,\n\t// tslint:disable-next-line:no-any\n\treplacement: (...args: any[]) => any,\n): () => void {\n\ttry {\n\t\tif (!(name in source)) {\n\t\t\treturn () => {}\n\t\t}\n\n\t\tconst original = source[name] as () => unknown\n\t\tconst wrapped = replacement(original)\n\n\t\t// Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n\t\t// otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n\t\t// tslint:disable-next-line:strict-type-predicates\n\t\tif (typeof wrapped === 'function') {\n\t\t\twrapped.prototype = wrapped.prototype || {}\n\t\t\tObject.defineProperties(wrapped, {\n\t\t\t\t__rrweb_original__: {\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: original,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tsource[name] = wrapped\n\n\t\treturn () => {\n\t\t\tsource[name] = original\n\t\t}\n\t} catch {\n\t\treturn () => {}\n\t}\n}\n\n/**\n * transfer the node path in Event to string\n * @param node the first node in a node path array\n */\nfunction pathToSelector(node: HTMLElement): string | '' {\n\tif (!node || !node.outerHTML) {\n\t\treturn ''\n\t}\n\n\tlet path = ''\n\twhile (node.parentElement) {\n\t\tlet name = node.localName\n\t\tif (!name) {\n\t\t\tbreak\n\t\t}\n\t\tname = name.toLowerCase()\n\t\tlet parent = node.parentElement\n\n\t\tlet domSiblings = []\n\n\t\tif (parent.children && parent.children.length > 0) {\n\t\t\t// tslint:disable-next-line:prefer-for-of\n\t\t\tfor (let i = 0; i < parent.children.length; i++) {\n\t\t\t\tlet sibling = parent.children[i]\n\t\t\t\tif (sibling.localName && sibling.localName.toLowerCase) {\n\t\t\t\t\tif (sibling.localName.toLowerCase() === name) {\n\t\t\t\t\t\tdomSiblings.push(sibling)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (domSiblings.length > 1) {\n\t\t\tname += ':eq(' + domSiblings.indexOf(node) + ')'\n\t\t}\n\t\tpath = name + (path ? '>' + path : '')\n\t\tnode = parent\n\t}\n\n\treturn path\n}\n\n/**\n * judge is object\n */\nfunction isObject(obj: any): boolean {\n\treturn Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/**\n * judge the object's depth\n */\nfunction isObjTooDeep(obj: any, limit: number): boolean {\n\tif (limit === 0) {\n\t\treturn true\n\t}\n\n\tconst keys = Object.keys(obj)\n\tfor (const key of keys) {\n\t\tif (isObject(obj[key]) && isObjTooDeep(obj[key], limit - 1)) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n/**\n * stringify any js object\n * @param obj the object to stringify\n */\nexport function stringify(\n\tobj: any,\n\tstringifyOptions?: StringifyOptions,\n): string {\n\tconst options: StringifyOptions = {\n\t\tnumOfKeysLimit: 50,\n\t\tdepthOfLimit: 4,\n\t}\n\tObject.assign(options, stringifyOptions)\n\tconst stack: any[] = []\n\tconst keys: any[] = []\n\treturn JSON.stringify(obj, function (key, value) {\n\t\t/**\n\t\t * forked from https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n\t\t * to deCycle the object\n\t\t */\n\t\tif (stack.length > 0) {\n\t\t\tconst thisPos = stack.indexOf(this)\n\t\t\t~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n\t\t\t~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n\t\t\tif (~stack.indexOf(value)) {\n\t\t\t\tif (stack[0] === value) {\n\t\t\t\t\tvalue = '[Circular ~]'\n\t\t\t\t} else {\n\t\t\t\t\tvalue =\n\t\t\t\t\t\t'[Circular ~.' +\n\t\t\t\t\t\tkeys.slice(0, stack.indexOf(value)).join('.') +\n\t\t\t\t\t\t']'\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tstack.push(value)\n\t\t}\n\t\t/* END of the FORK */\n\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value\n\t\t}\n\t\tif (shouldIgnore(value)) {\n\t\t\treturn toString(value)\n\t\t}\n\t\tif (value instanceof Event) {\n\t\t\tconst eventResult: any = {}\n\t\t\tfor (const eventKey in value) {\n\t\t\t\tconst eventValue = (value as any)[eventKey]\n\t\t\t\tif (Array.isArray(eventValue)) {\n\t\t\t\t\teventResult[eventKey] = pathToSelector(\n\t\t\t\t\t\teventValue.length ? eventValue[0] : null,\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\teventResult[eventKey] = eventValue\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn eventResult\n\t\t} else if (value instanceof Node) {\n\t\t\tif (value instanceof HTMLElement) {\n\t\t\t\treturn value ? value.outerHTML : ''\n\t\t\t}\n\t\t\treturn value.nodeName\n\t\t} else if (value instanceof Error) {\n\t\t\treturn value.name + ': ' + value.message\n\t\t}\n\t\treturn value\n\t})\n\n\t/**\n\t * whether we should ignore obj's info and call toString() function instead\n\t */\n\tfunction shouldIgnore(_obj: object): boolean {\n\t\t// outof keys limit\n\t\tif (\n\t\t\tisObject(_obj) &&\n\t\t\tObject.keys(_obj).length > options.numOfKeysLimit\n\t\t) {\n\t\t\treturn true\n\t\t}\n\n\t\t// is function\n\t\tif (typeof _obj === 'function') {\n\t\t\treturn true\n\t\t}\n\n\t\t// if a non-user event with only the `isTrusted` key\n\t\t// We ignore this because some frameworks/library can output these non-stop.\n\t\t// There's no value in recording/showing these to the end user so we ignore.\n\t\tif (_obj instanceof Event && _obj.isTrusted === false) {\n\t\t\tconst eventKeys = Object.keys(_obj)\n\n\t\t\treturn eventKeys.length === 1\n\t\t}\n\n\t\t/**\n\t\t * judge object's depth to avoid browser's OOM\n\t\t *\n\t\t * issues: https://github.com/rrweb-io/rrweb/issues/653\n\t\t */\n\t\tif (isObject(_obj) && isObjTooDeep(_obj, options.depthOfLimit)) {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\t/**\n\t * limit the toString() result according to option\n\t */\n\tfunction toString(_obj: object): string {\n\t\tlet str = _obj.toString()\n\t\tif (\n\t\t\toptions.stringLengthLimit &&\n\t\t\tstr.length > options.stringLengthLimit\n\t\t) {\n\t\t\tstr = `${str.slice(0, options.stringLengthLimit)}...`\n\t\t}\n\t\treturn str\n\t}\n}\n\nfunction supportsWebP(): boolean {\n\tvar elem = document.createElement('canvas')\n\tif (!!(elem.getContext && elem.getContext('2d'))) {\n\t\treturn elem.toDataURL('image/webp').indexOf('data:image/webp') == 0\n\t}\n\treturn false\n}\n\nexport function getDefaultDataURLOptions(): {\n\ttype: string\n\tquality: number\n} {\n\tif (supportsWebP()) {\n\t\treturn {\n\t\t\ttype: 'image/webp',\n\t\t\tquality: 0.9,\n\t\t}\n\t}\n\treturn {\n\t\ttype: 'image/jpeg',\n\t\tquality: 0.6,\n\t}\n}\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(/<anonymous function(: (\\w+))?>/, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","import ErrorStackParser from 'error-stack-parser'\n\nexport function parseError(err: Error) {\n\ttry {\n\t\treturn ErrorStackParser.parse(err)\n\t} catch (originalError) {\n\t\ttry {\n\t\t\treturn ErrorStackParser.parse(new Error())\n\t\t} catch (secondaryError) {\n\t\t\tconsole.warn(`Highlight Warning: failed to parse error`, {\n\t\t\t\toriginalError,\n\t\t\t\tsecondaryError,\n\t\t\t})\n\t\t\treturn []\n\t\t}\n\t}\n}\n","import type { StackFrame } from 'error-stack-parser'\nimport { ConsoleMethods } from '../types/client'\nimport { ConsoleMessage } from '../types/shared-types'\nimport { patch, stringify } from '../utils/utils'\nimport { parseError } from '../utils/errors'\n\nexport type StringifyOptions = {\n\t// limit of string length\n\tstringLengthLimit?: number\n\t/**\n\t * limit of number of keys in an object\n\t * if an object contains more keys than this limit, we would call its toString function directly\n\t */\n\tnumOfKeysLimit: number\n\t/**\n\t * limit number of depth in an object\n\t * if an object is too deep, toString process may cause browser OOM\n\t */\n\tdepthOfLimit: number\n}\n\nexport type LogRecordOptions = {\n\tlevel: ConsoleMethods[]\n\tstringifyOptions: StringifyOptions\n\t/**\n\t * Set to try to serialize console object arguments into the message body.\n\t */\n\tserializeConsoleAttributes?: boolean\n\tlogger: Logger | 'console'\n}\n\nexport type Logger = {\n\tassert?: typeof console.assert\n\tclear?: typeof console.clear\n\tcount?: typeof console.count\n\tcountReset?: typeof console.countReset\n\tdebug?: typeof console.debug\n\tdir?: typeof console.dir\n\tdirxml?: typeof console.dirxml\n\terror?: typeof console.error\n\tgroup?: typeof console.group\n\tgroupCollapsed?: typeof console.groupCollapsed\n\tgroupEnd?: () => void\n\tinfo?: typeof console.info\n\tlog?: typeof console.log\n\ttable?: typeof console.table\n\ttime?: typeof console.time\n\ttimeEnd?: typeof console.timeEnd\n\ttimeLog?: typeof console.timeLog\n\ttrace?: typeof console.trace\n\twarn?: typeof console.warn\n}\n\nexport function ConsoleListener(\n\tcallback: (c: ConsoleMessage) => void,\n\tlogOptions: LogRecordOptions,\n) {\n\tconst loggerType = logOptions.logger\n\tif (!loggerType) {\n\t\treturn () => {}\n\t}\n\tlet logger: Logger\n\tif (typeof loggerType === 'string') {\n\t\tlogger = window[loggerType]\n\t} else {\n\t\tlogger = loggerType\n\t}\n\tconst cancelHandlers: (() => void)[] = []\n\n\t// add listener to thrown errors\n\tif (logOptions.level.includes('error')) {\n\t\tif (window) {\n\t\t\tconst errorHandler = (event: ErrorEvent) => {\n\t\t\t\tconst { message, error } = event\n\t\t\t\tlet trace: StackFrame[] = []\n\t\t\t\tif (error) {\n\t\t\t\t\ttrace = parseError(error)\n\t\t\t\t}\n\t\t\t\tconst payload = [\n\t\t\t\t\tstringify(message, logOptions.stringifyOptions),\n\t\t\t\t]\n\t\t\t\tcallback({\n\t\t\t\t\ttype: 'Error',\n\t\t\t\t\ttrace,\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\tvalue: payload,\n\t\t\t\t})\n\t\t\t}\n\t\t\twindow.addEventListener('error', errorHandler)\n\t\t\tcancelHandlers.push(() => {\n\t\t\t\tif (window) window.removeEventListener('error', errorHandler)\n\t\t\t})\n\t\t}\n\t}\n\n\tfor (const levelType of logOptions.level) {\n\t\tcancelHandlers.push(replace(logger, levelType))\n\t}\n\treturn () => {\n\t\tcancelHandlers.forEach((h) => h())\n\t}\n\n\t/**\n\t * replace the original console function and record logs\n\t * @param logger the logger object such as Console\n\t * @param level the name of log function to be replaced\n\t */\n\tfunction replace(_logger: Logger, level: ConsoleMethods) {\n\t\tif (!_logger[level]) {\n\t\t\treturn () => {}\n\t\t}\n\t\t// replace the logger.{level}. return a restore function\n\t\treturn patch(_logger, level, (original) => {\n\t\t\treturn (...data: Array<any>) => {\n\t\t\t\t// @ts-expect-error\n\t\t\t\toriginal.apply(this, data)\n\t\t\t\ttry {\n\t\t\t\t\tconst trace = parseError(new Error())\n\t\t\t\t\tconst message = logOptions.serializeConsoleAttributes\n\t\t\t\t\t\t? data.map((o) =>\n\t\t\t\t\t\t\t\ttypeof o === 'object'\n\t\t\t\t\t\t\t\t\t? stringify(o, logOptions.stringifyOptions)\n\t\t\t\t\t\t\t\t\t: o,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: data\n\t\t\t\t\t\t\t\t.filter((o) => typeof o !== 'object')\n\t\t\t\t\t\t\t\t.map((o) => `${o}`)\n\t\t\t\t\tcallback({\n\t\t\t\t\t\ttype: level,\n\t\t\t\t\t\ttrace: trace.slice(1),\n\t\t\t\t\t\tvalue: message,\n\t\t\t\t\t\tattributes: stringify(\n\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t.filter((d) => typeof d === 'object')\n\t\t\t\t\t\t\t\t.reduce((a, b) => ({ ...a, ...b }), {}),\n\t\t\t\t\t\t\tlogOptions.stringifyOptions,\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\toriginal('highlight logger error:', error, ...data)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n","exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [], keys = []\n\n if (cycleReplacer == null) cycleReplacer = function(key, value) {\n if (stack[0] === value) return \"[Circular ~]\"\n return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this)\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n }\n else stack.push(value)\n\n return replacer == null ? value : replacer.call(this, key, value)\n }\n}\n","import type { StackFrame } from 'error-stack-parser'\nimport stringify from 'json-stringify-safe'\nimport { ErrorMessage } from '../types/shared-types'\nimport { parseError } from '../utils/errors'\n\ninterface HighlightPromise<T> extends Promise<T> {\n\tpromiseCreationError: Error\n\tgetStack(): Error | undefined\n}\n\nfunction handleError(\n\tcallback: (e: ErrorMessage) => void,\n\tevent: any,\n\tsource: string | undefined,\n\terror?: Error,\n) {\n\tlet res = parseError(error ?? event)\n\tlet payload: Object = {}\n\tif (event instanceof Error) {\n\t\tevent = event.message\n\t\tif (event.cause) {\n\t\t\tpayload = { 'exception.cause': event.cause }\n\t\t}\n\t}\n\tconst framesToUse = removeHighlightFrameIfExists(res)\n\tcallback({\n\t\tevent: stringify(event),\n\t\ttype: 'window.onerror',\n\t\turl: window.location.href,\n\t\tsource: source ?? '',\n\t\tlineNumber: framesToUse[0]?.lineNumber ? framesToUse[0]?.lineNumber : 0,\n\t\tcolumnNumber: fram