@openobserve/browser-core 0.3.4 → 0.4.0-beta.2
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.
- package/README.md +1 -1
- package/cjs/boot/displayAlreadyInitializedError.js +6 -7
- package/cjs/boot/displayAlreadyInitializedError.js.map +1 -1
- package/cjs/boot/init.js +26 -34
- package/cjs/boot/init.js.map +1 -1
- package/cjs/browser/addEventListener.d.ts +10 -8
- package/cjs/browser/addEventListener.js +107 -50
- package/cjs/browser/addEventListener.js.map +1 -1
- package/cjs/browser/browser.types.d.ts +91 -4
- package/cjs/browser/cookie.d.ts +0 -1
- package/cjs/browser/cookie.js +65 -92
- package/cjs/browser/cookie.js.map +1 -1
- package/cjs/browser/cookieAccess.d.ts +16 -0
- package/cjs/browser/cookieAccess.js +114 -0
- package/cjs/browser/cookieAccess.js.map +1 -0
- package/cjs/browser/fetch.d.ts +9 -0
- package/cjs/browser/fetch.js +18 -0
- package/cjs/browser/fetch.js.map +1 -0
- package/cjs/browser/fetchObservable.d.ts +3 -3
- package/cjs/browser/fetchObservable.js +80 -92
- package/cjs/browser/fetchObservable.js.map +1 -1
- package/cjs/browser/pageMayExitObservable.d.ts +1 -2
- package/cjs/browser/pageMayExitObservable.js +41 -40
- package/cjs/browser/pageMayExitObservable.js.map +1 -1
- package/cjs/browser/runOnReadyState.d.ts +2 -3
- package/cjs/browser/runOnReadyState.js +18 -17
- package/cjs/browser/runOnReadyState.js.map +1 -1
- package/cjs/browser/xhrObservable.d.ts +8 -3
- package/cjs/browser/xhrObservable.js +65 -77
- package/cjs/browser/xhrObservable.js.map +1 -1
- package/cjs/domain/allowedTrackingOrigins.d.ts +1 -1
- package/cjs/domain/allowedTrackingOrigins.js +25 -23
- package/cjs/domain/allowedTrackingOrigins.js.map +1 -1
- package/cjs/domain/bufferedData.d.ts +20 -6
- package/cjs/domain/bufferedData.js +41 -19
- package/cjs/domain/bufferedData.js.map +1 -1
- package/cjs/domain/configuration/configuration.d.ts +44 -43
- package/cjs/domain/configuration/configuration.js +122 -125
- package/cjs/domain/configuration/configuration.js.map +1 -1
- package/cjs/domain/configuration/endpointBuilder.d.ts +42 -7
- package/cjs/domain/configuration/endpointBuilder.js +67 -74
- package/cjs/domain/configuration/endpointBuilder.js.map +1 -1
- package/cjs/domain/configuration/index.d.ts +2 -3
- package/cjs/domain/connectivity/connectivity.d.ts +1 -7
- package/cjs/domain/connectivity/connectivity.js +11 -11
- package/cjs/domain/connectivity/connectivity.js.map +1 -1
- package/cjs/domain/console/consoleObservable.d.ts +1 -1
- package/cjs/domain/console/consoleObservable.js +59 -74
- package/cjs/domain/console/consoleObservable.js.map +1 -1
- package/cjs/domain/context/contextConstants.js +24 -15
- package/cjs/domain/context/contextConstants.js.map +1 -1
- package/cjs/domain/context/contextManager.js +49 -54
- package/cjs/domain/context/contextManager.js.map +1 -1
- package/cjs/domain/context/contextUtils.js +11 -12
- package/cjs/domain/context/contextUtils.js.map +1 -1
- package/cjs/domain/context/defineContextMethod.d.ts +2 -2
- package/cjs/domain/context/defineContextMethod.js +15 -16
- package/cjs/domain/context/defineContextMethod.js.map +1 -1
- package/cjs/domain/context/storeContextManager.d.ts +1 -2
- package/cjs/domain/context/storeContextManager.js +30 -33
- package/cjs/domain/context/storeContextManager.js.map +1 -1
- package/cjs/domain/contexts/accountContext.d.ts +2 -2
- package/cjs/domain/contexts/accountContext.js +26 -29
- package/cjs/domain/contexts/accountContext.js.map +1 -1
- package/cjs/domain/contexts/globalContext.d.ts +2 -2
- package/cjs/domain/contexts/globalContext.js +17 -17
- package/cjs/domain/contexts/globalContext.js.map +1 -1
- package/cjs/domain/contexts/tabContext.d.ts +4 -0
- package/cjs/domain/contexts/tabContext.js +27 -0
- package/cjs/domain/contexts/tabContext.js.map +1 -0
- package/cjs/domain/contexts/telemetrySessionContext.d.ts +4 -0
- package/cjs/domain/contexts/telemetrySessionContext.js +17 -0
- package/cjs/domain/contexts/telemetrySessionContext.js.map +1 -0
- package/cjs/domain/contexts/userContext.d.ts +8 -3
- package/cjs/domain/contexts/userContext.js +29 -41
- package/cjs/domain/contexts/userContext.js.map +1 -1
- package/cjs/domain/deflate/deflate.types.js +11 -2
- package/cjs/domain/deflate/deflate.types.js.map +1 -1
- package/cjs/domain/error/error.d.ts +1 -1
- package/cjs/domain/error/error.js +62 -60
- package/cjs/domain/error/error.js.map +1 -1
- package/cjs/domain/error/error.types.d.ts +1 -1
- package/cjs/domain/error/error.types.js +24 -11
- package/cjs/domain/error/error.types.js.map +1 -1
- package/cjs/domain/error/trackRuntimeError.d.ts +3 -2
- package/cjs/domain/error/trackRuntimeError.js +41 -41
- package/cjs/domain/error/trackRuntimeError.js.map +1 -1
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +33 -38
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -1
- package/cjs/domain/extension/extensionUtils.js +18 -25
- package/cjs/domain/extension/extensionUtils.js.map +1 -1
- package/cjs/domain/intakeSites.d.ts +3 -3
- package/cjs/domain/intakeSites.js +23 -10
- package/cjs/domain/intakeSites.js.map +1 -1
- package/cjs/domain/report/reportObservable.d.ts +1 -2
- package/cjs/domain/report/reportObservable.js +73 -85
- package/cjs/domain/report/reportObservable.js.map +1 -1
- package/cjs/domain/resourceUtils.js +19 -17
- package/cjs/domain/resourceUtils.js.map +1 -1
- package/cjs/domain/sampler.d.ts +11 -0
- package/cjs/domain/sampler.js +40 -0
- package/cjs/domain/sampler.js.map +1 -0
- package/cjs/domain/session/sessionConstants.d.ts +1 -0
- package/cjs/domain/session/sessionConstants.js +19 -13
- package/cjs/domain/session/sessionConstants.js.map +1 -1
- package/cjs/domain/session/sessionManager.d.ts +13 -13
- package/cjs/domain/session/sessionManager.js +219 -193
- package/cjs/domain/session/sessionManager.js.map +1 -1
- package/cjs/domain/session/sessionState.d.ts +10 -1
- package/cjs/domain/session/sessionState.js +70 -55
- package/cjs/domain/session/sessionState.js.map +1 -1
- package/cjs/domain/session/sessionStateValidation.js +7 -8
- package/cjs/domain/session/sessionStateValidation.js.map +1 -1
- package/cjs/domain/session/sessionStore.d.ts +4 -33
- package/cjs/domain/session/sessionStore.js +42 -180
- package/cjs/domain/session/sessionStore.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +7 -11
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +89 -95
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +1 -4
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +39 -38
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInMemory.d.ts +12 -0
- package/cjs/domain/session/storeStrategies/sessionInMemory.js +35 -0
- package/cjs/domain/session/storeStrategies/sessionInMemory.js.map +1 -0
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -7
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +7 -4
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -1
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +9 -3
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +33 -25
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
- package/cjs/domain/tags.d.ts +0 -1
- package/cjs/domain/tags.js +22 -58
- package/cjs/domain/tags.js.map +1 -1
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js +8 -7
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -1
- package/cjs/domain/telemetry/telemetry.d.ts +8 -8
- package/cjs/domain/telemetry/telemetry.js +196 -211
- package/cjs/domain/telemetry/telemetry.js.map +1 -1
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +97 -17
- package/cjs/domain/trackingConsent.d.ts +1 -0
- package/cjs/domain/trackingConsent.js +35 -24
- package/cjs/domain/trackingConsent.js.map +1 -1
- package/cjs/index.d.ts +25 -22
- package/cjs/index.js +281 -194
- package/cjs/tools/abstractLifeCycle.js +19 -26
- package/cjs/tools/abstractLifeCycle.js.map +1 -1
- package/cjs/tools/catchUserErrors.js +12 -12
- package/cjs/tools/catchUserErrors.js.map +1 -1
- package/cjs/tools/display.d.ts +1 -35
- package/cjs/tools/display.js +11 -43
- package/cjs/tools/display.js.map +1 -1
- package/cjs/tools/encoder.js +36 -37
- package/cjs/tools/encoder.js.map +1 -1
- package/cjs/tools/experimentalFeatures.d.ts +1 -4
- package/cjs/tools/experimentalFeatures.js +29 -40
- package/cjs/tools/experimentalFeatures.js.map +1 -1
- package/cjs/tools/getZoneJsOriginalValue.d.ts +1 -1
- package/cjs/tools/getZoneJsOriginalValue.js +22 -25
- package/cjs/tools/getZoneJsOriginalValue.js.map +1 -1
- package/cjs/tools/globalObject.d.ts +16 -15
- package/cjs/tools/globalObject.js +7 -43
- package/cjs/tools/globalObject.js.map +1 -1
- package/cjs/tools/instrumentMethod.d.ts +58 -1
- package/cjs/tools/instrumentMethod.js +174 -112
- package/cjs/tools/instrumentMethod.js.map +1 -1
- package/cjs/tools/matchOption.js +25 -29
- package/cjs/tools/matchOption.js.map +1 -1
- package/cjs/tools/mockable.d.ts +22 -0
- package/cjs/tools/mockable.js +28 -0
- package/cjs/tools/mockable.js.map +1 -0
- package/cjs/tools/monitor.d.ts +5 -7
- package/cjs/tools/monitor.js +13 -58
- package/cjs/tools/monitor.js.map +1 -1
- package/cjs/tools/observable.d.ts +3 -1
- package/cjs/tools/observable.js +75 -85
- package/cjs/tools/observable.js.map +1 -1
- package/cjs/tools/queueMicrotask.js +9 -14
- package/cjs/tools/queueMicrotask.js.map +1 -1
- package/cjs/tools/readBytesFromStream.d.ts +1 -6
- package/cjs/tools/readBytesFromStream.js +18 -25
- package/cjs/tools/readBytesFromStream.js.map +1 -1
- package/cjs/tools/requestIdleCallback.js +22 -29
- package/cjs/tools/requestIdleCallback.js.map +1 -1
- package/cjs/tools/sendToExtension.js +10 -8
- package/cjs/tools/sendToExtension.js.map +1 -1
- package/cjs/tools/serialisation/jsonStringify.js +37 -42
- package/cjs/tools/serialisation/jsonStringify.js.map +1 -1
- package/cjs/tools/serialisation/sanitize.d.ts +1 -0
- package/cjs/tools/serialisation/sanitize.js +111 -167
- package/cjs/tools/serialisation/sanitize.js.map +1 -1
- package/cjs/tools/serialisation/stringify.d.ts +2 -0
- package/cjs/tools/serialisation/stringify.js +18 -0
- package/cjs/tools/serialisation/stringify.js.map +1 -0
- package/cjs/tools/stackTrace/computeStackTrace.js +121 -159
- package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -1
- package/cjs/tools/stackTrace/handlingStack.d.ts +1 -1
- package/cjs/tools/stackTrace/handlingStack.js +39 -38
- package/cjs/tools/stackTrace/handlingStack.js.map +1 -1
- package/cjs/tools/taskQueue.js +40 -49
- package/cjs/tools/taskQueue.js.map +1 -1
- package/cjs/tools/timer.d.ts +2 -1
- package/cjs/tools/timer.js +14 -13
- package/cjs/tools/timer.js.map +1 -1
- package/cjs/tools/utils/arrayUtils.d.ts +1 -0
- package/cjs/tools/utils/arrayUtils.js +17 -13
- package/cjs/tools/utils/arrayUtils.js.map +1 -1
- package/cjs/tools/utils/browserDetection.d.ts +1 -0
- package/cjs/tools/utils/browserDetection.js +25 -23
- package/cjs/tools/utils/browserDetection.js.map +1 -1
- package/cjs/tools/utils/byteUtils.js +20 -28
- package/cjs/tools/utils/byteUtils.js.map +1 -1
- package/cjs/tools/utils/functionUtils.js +33 -40
- package/cjs/tools/utils/functionUtils.js.map +1 -1
- package/cjs/tools/utils/numberUtils.js +15 -14
- package/cjs/tools/utils/numberUtils.js.map +1 -1
- package/cjs/tools/utils/objectUtils.d.ts +2 -0
- package/cjs/tools/utils/objectUtils.js +27 -14
- package/cjs/tools/utils/objectUtils.js.map +1 -1
- package/cjs/tools/utils/polyfills.js +12 -16
- package/cjs/tools/utils/polyfills.js.map +1 -1
- package/cjs/tools/utils/responseUtils.js +11 -12
- package/cjs/tools/utils/responseUtils.js.map +1 -1
- package/cjs/tools/utils/stringUtils.js +56 -77
- package/cjs/tools/utils/stringUtils.js.map +1 -1
- package/cjs/tools/utils/timezone.js +9 -10
- package/cjs/tools/utils/timezone.js.map +1 -1
- package/cjs/tools/utils/urlPolyfill.js +42 -46
- package/cjs/tools/utils/urlPolyfill.js.map +1 -1
- package/cjs/tools/valueHistory.d.ts +9 -1
- package/cjs/tools/valueHistory.js +110 -99
- package/cjs/tools/valueHistory.js.map +1 -1
- package/cjs/transport/batch.js +73 -106
- package/cjs/transport/batch.js.map +1 -1
- package/cjs/transport/eventBridge.d.ts +6 -2
- package/cjs/transport/eventBridge.js +53 -38
- package/cjs/transport/eventBridge.js.map +1 -1
- package/cjs/transport/flushController.d.ts +2 -12
- package/cjs/transport/flushController.js +98 -117
- package/cjs/transport/flushController.js.map +1 -1
- package/cjs/transport/httpRequest.d.ts +0 -1
- package/cjs/transport/httpRequest.js +51 -85
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/index.d.ts +1 -0
- package/cjs/transport/sendWithRetryStrategy.js +133 -146
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
- package/esm/boot/displayAlreadyInitializedError.mjs +9 -0
- package/esm/boot/displayAlreadyInitializedError.mjs.map +1 -0
- package/esm/boot/init.mjs +30 -0
- package/esm/boot/init.mjs.map +1 -0
- package/esm/browser/addEventListener.mjs +107 -0
- package/esm/browser/addEventListener.mjs.map +1 -0
- package/esm/browser/cookie.mjs +81 -0
- package/esm/browser/cookie.mjs.map +1 -0
- package/esm/browser/cookieAccess.mjs +111 -0
- package/esm/browser/cookieAccess.mjs.map +1 -0
- package/esm/browser/fetch.mjs +18 -0
- package/esm/browser/fetch.mjs.map +1 -0
- package/esm/browser/fetchObservable.mjs +90 -0
- package/esm/browser/fetchObservable.mjs.map +1 -0
- package/esm/browser/pageMayExitObservable.mjs +44 -0
- package/esm/browser/pageMayExitObservable.mjs.map +1 -0
- package/esm/browser/runOnReadyState.mjs +19 -0
- package/esm/browser/runOnReadyState.mjs.map +1 -0
- package/esm/browser/xhrObservable.mjs +74 -0
- package/esm/browser/xhrObservable.mjs.map +1 -0
- package/esm/domain/allowedTrackingOrigins.mjs +27 -0
- package/esm/domain/allowedTrackingOrigins.mjs.map +1 -0
- package/esm/domain/bufferedData.mjs +43 -0
- package/esm/domain/bufferedData.mjs.map +1 -0
- package/esm/domain/configuration/configuration.mjs +131 -0
- package/esm/domain/configuration/configuration.mjs.map +1 -0
- package/esm/domain/configuration/endpointBuilder.mjs +72 -0
- package/esm/domain/configuration/endpointBuilder.mjs.map +1 -0
- package/esm/domain/connectivity/connectivity.mjs +14 -0
- package/esm/domain/connectivity/connectivity.mjs.map +1 -0
- package/esm/domain/console/consoleObservable.mjs +69 -0
- package/esm/domain/console/consoleObservable.mjs.map +1 -0
- package/esm/domain/context/contextConstants.mjs +25 -0
- package/esm/domain/context/contextConstants.mjs.map +1 -0
- package/esm/domain/context/contextManager.mjs +55 -0
- package/esm/domain/context/contextManager.mjs.map +1 -0
- package/esm/domain/context/contextUtils.mjs +15 -0
- package/esm/domain/context/contextUtils.mjs.map +1 -0
- package/esm/domain/context/defineContextMethod.mjs +19 -0
- package/esm/domain/context/defineContextMethod.mjs.map +1 -0
- package/esm/domain/context/storeContextManager.mjs +36 -0
- package/esm/domain/context/storeContextManager.mjs.map +1 -0
- package/esm/domain/contexts/accountContext.mjs +29 -0
- package/esm/domain/contexts/accountContext.mjs.map +1 -0
- package/esm/domain/contexts/globalContext.mjs +20 -0
- package/esm/domain/contexts/globalContext.mjs.map +1 -0
- package/esm/domain/contexts/tabContext.mjs +27 -0
- package/esm/domain/contexts/tabContext.mjs.map +1 -0
- package/esm/domain/contexts/telemetrySessionContext.mjs +17 -0
- package/esm/domain/contexts/telemetrySessionContext.mjs.map +1 -0
- package/esm/domain/contexts/userContext.mjs +32 -0
- package/esm/domain/contexts/userContext.mjs.map +1 -0
- package/esm/domain/deflate/deflate.types.mjs +12 -0
- package/esm/domain/deflate/deflate.types.mjs.map +1 -0
- package/esm/domain/error/error.mjs +73 -0
- package/esm/domain/error/error.mjs.map +1 -0
- package/esm/domain/error/error.types.mjs +24 -0
- package/esm/domain/error/error.types.mjs.map +1 -0
- package/esm/domain/error/trackRuntimeError.mjs +48 -0
- package/esm/domain/error/trackRuntimeError.mjs.map +1 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs +36 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs.map +1 -0
- package/esm/domain/extension/extensionUtils.mjs +23 -0
- package/esm/domain/extension/extensionUtils.mjs.map +1 -0
- package/esm/domain/intakeSites.mjs +18 -0
- package/esm/domain/intakeSites.mjs.map +1 -0
- package/esm/domain/report/reportObservable.mjs +86 -0
- package/esm/domain/report/reportObservable.mjs.map +1 -0
- package/esm/domain/resourceUtils.mjs +21 -0
- package/esm/domain/resourceUtils.mjs.map +1 -0
- package/esm/domain/sampler.mjs +37 -0
- package/esm/domain/sampler.mjs.map +1 -0
- package/esm/domain/session/sessionConstants.mjs +18 -0
- package/esm/domain/session/sessionConstants.mjs.map +1 -0
- package/esm/domain/session/sessionManager.mjs +225 -0
- package/esm/domain/session/sessionManager.mjs.map +1 -0
- package/esm/domain/session/sessionState.mjs +76 -0
- package/esm/domain/session/sessionState.mjs.map +1 -0
- package/esm/domain/session/sessionStateValidation.mjs +9 -0
- package/esm/domain/session/sessionStateValidation.mjs.map +1 -0
- package/esm/domain/session/sessionStore.mjs +46 -0
- package/esm/domain/session/sessionStore.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.mjs +97 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs +42 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInMemory.mjs +33 -0
- package/esm/domain/session/storeStrategies/sessionInMemory.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs +7 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs.map +1 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.mjs +37 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.mjs.map +1 -0
- package/esm/domain/tags.mjs +28 -0
- package/esm/domain/tags.mjs.map +1 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.mjs +10 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.mjs.map +1 -0
- package/esm/domain/telemetry/telemetry.mjs +219 -0
- package/esm/domain/telemetry/telemetry.mjs.map +1 -0
- package/esm/domain/trackingConsent.mjs +38 -0
- package/esm/domain/trackingConsent.mjs.map +1 -0
- package/esm/index.mjs +81 -0
- package/esm/tools/abstractLifeCycle.mjs +21 -0
- package/esm/tools/abstractLifeCycle.mjs.map +1 -0
- package/esm/tools/catchUserErrors.mjs +15 -0
- package/esm/tools/catchUserErrors.mjs.map +1 -0
- package/esm/tools/display.mjs +10 -0
- package/esm/tools/display.mjs.map +1 -0
- package/esm/tools/encoder.mjs +39 -0
- package/esm/tools/encoder.mjs.map +1 -0
- package/esm/tools/experimentalFeatures.mjs +35 -0
- package/esm/tools/experimentalFeatures.mjs.map +1 -0
- package/esm/tools/getZoneJsOriginalValue.mjs +26 -0
- package/esm/tools/getZoneJsOriginalValue.mjs.map +1 -0
- package/esm/tools/globalObject.mjs +7 -0
- package/esm/tools/globalObject.mjs.map +1 -0
- package/esm/tools/instrumentMethod.mjs +178 -0
- package/esm/tools/instrumentMethod.mjs.map +1 -0
- package/esm/tools/matchOption.mjs +30 -0
- package/esm/tools/matchOption.mjs.map +1 -0
- package/esm/tools/mockable.mjs +28 -0
- package/esm/tools/mockable.mjs.map +1 -0
- package/esm/tools/monitor.mjs +13 -0
- package/esm/tools/monitor.mjs.map +1 -0
- package/esm/tools/observable.mjs +77 -0
- package/esm/tools/observable.mjs.map +1 -0
- package/esm/tools/queueMicrotask.mjs +12 -0
- package/esm/tools/queueMicrotask.mjs.map +1 -0
- package/esm/tools/readBytesFromStream.mjs +21 -0
- package/esm/tools/readBytesFromStream.mjs.map +1 -0
- package/esm/tools/requestIdleCallback.mjs +28 -0
- package/esm/tools/requestIdleCallback.mjs.map +1 -0
- package/esm/tools/sendToExtension.mjs +13 -0
- package/esm/tools/sendToExtension.mjs.map +1 -0
- package/esm/tools/serialisation/jsonStringify.mjs +42 -0
- package/esm/tools/serialisation/jsonStringify.mjs.map +1 -0
- package/esm/tools/serialisation/sanitize.mjs +131 -0
- package/esm/tools/serialisation/sanitize.mjs.map +1 -0
- package/esm/tools/serialisation/stringify.mjs +17 -0
- package/esm/tools/serialisation/stringify.mjs.map +1 -0
- package/esm/tools/stackTrace/computeStackTrace.mjs +148 -0
- package/esm/tools/stackTrace/computeStackTrace.mjs.map +1 -0
- package/esm/tools/stackTrace/handlingStack.mjs +45 -0
- package/esm/tools/stackTrace/handlingStack.mjs.map +1 -0
- package/esm/tools/taskQueue.mjs +45 -0
- package/esm/tools/taskQueue.mjs.map +1 -0
- package/esm/tools/timer.mjs +20 -0
- package/esm/tools/timer.mjs.map +1 -0
- package/esm/tools/utils/arrayUtils.mjs +21 -0
- package/esm/tools/utils/arrayUtils.mjs.map +1 -0
- package/esm/tools/utils/browserDetection.mjs +31 -0
- package/esm/tools/utils/browserDetection.mjs.map +1 -0
- package/esm/tools/utils/byteUtils.mjs +23 -0
- package/esm/tools/utils/byteUtils.mjs.map +1 -0
- package/esm/tools/utils/functionUtils.mjs +35 -0
- package/esm/tools/utils/functionUtils.mjs.map +1 -0
- package/esm/tools/utils/numberUtils.mjs +22 -0
- package/esm/tools/utils/numberUtils.mjs.map +1 -0
- package/esm/tools/utils/objectUtils.mjs +31 -0
- package/esm/tools/utils/objectUtils.mjs.map +1 -0
- package/esm/tools/utils/polyfills.mjs +17 -0
- package/esm/tools/utils/polyfills.mjs.map +1 -0
- package/esm/tools/utils/responseUtils.mjs +15 -0
- package/esm/tools/utils/responseUtils.mjs.map +1 -0
- package/esm/tools/utils/stringUtils.mjs +66 -0
- package/esm/tools/utils/stringUtils.mjs.map +1 -0
- package/esm/tools/utils/timezone.mjs +12 -0
- package/esm/tools/utils/timezone.mjs.map +1 -0
- package/esm/tools/utils/urlPolyfill.mjs +51 -0
- package/esm/tools/utils/urlPolyfill.mjs.map +1 -0
- package/esm/tools/valueHistory.mjs +114 -0
- package/esm/tools/valueHistory.mjs.map +1 -0
- package/esm/transport/batch.mjs +77 -0
- package/esm/transport/batch.mjs.map +1 -0
- package/esm/transport/eventBridge.mjs +58 -0
- package/esm/transport/eventBridge.mjs.map +1 -0
- package/esm/transport/flushController.mjs +104 -0
- package/esm/transport/flushController.mjs.map +1 -0
- package/esm/transport/httpRequest.mjs +60 -0
- package/esm/transport/httpRequest.mjs.map +1 -0
- package/esm/transport/sendWithRetryStrategy.mjs +149 -0
- package/esm/transport/sendWithRetryStrategy.mjs.map +1 -0
- package/package.json +15 -4
- package/src/boot/init.ts +2 -2
- package/src/browser/addEventListener.ts +37 -5
- package/src/browser/browser.types.ts +127 -13
- package/src/browser/cookie.ts +21 -27
- package/src/browser/cookieAccess.ts +150 -0
- package/src/browser/fetch.ts +14 -0
- package/src/browser/fetchObservable.ts +22 -22
- package/src/browser/pageMayExitObservable.ts +7 -4
- package/src/browser/runOnReadyState.ts +3 -8
- package/src/browser/xhrObservable.ts +22 -12
- package/src/domain/allowedTrackingOrigins.ts +5 -5
- package/src/domain/bufferedData.ts +41 -14
- package/src/domain/configuration/configuration.ts +87 -72
- package/src/domain/configuration/endpointBuilder.ts +82 -52
- package/src/domain/configuration/index.ts +2 -2
- package/src/domain/connectivity/connectivity.ts +3 -15
- package/src/domain/console/consoleObservable.ts +3 -3
- package/src/domain/context/contextManager.ts +1 -1
- package/src/domain/context/contextUtils.ts +1 -1
- package/src/domain/context/defineContextMethod.ts +3 -3
- package/src/domain/context/storeContextManager.ts +9 -6
- package/src/domain/contexts/accountContext.ts +5 -5
- package/src/domain/contexts/globalContext.ts +4 -5
- package/src/domain/contexts/tabContext.ts +43 -0
- package/src/domain/contexts/telemetrySessionContext.ts +26 -0
- package/src/domain/contexts/userContext.ts +7 -11
- package/src/domain/error/error.ts +53 -23
- package/src/domain/error/error.types.ts +1 -1
- package/src/domain/error/trackRuntimeError.ts +11 -4
- package/src/domain/eventRateLimiter/createEventRateLimiter.ts +1 -1
- package/src/domain/intakeSites.ts +8 -3
- package/src/domain/report/reportObservable.ts +11 -7
- package/src/domain/sampler.ts +64 -0
- package/src/domain/session/sessionConstants.ts +2 -1
- package/src/domain/session/sessionManager.ts +281 -176
- package/src/domain/session/sessionState.ts +64 -8
- package/src/domain/session/sessionStore.ts +57 -223
- package/src/domain/session/storeStrategies/sessionInCookie.ts +121 -107
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +33 -21
- package/src/domain/session/storeStrategies/sessionInMemory.ts +55 -0
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +28 -6
- package/src/domain/synthetics/syntheticsWorkerValues.ts +44 -13
- package/src/domain/tags.ts +0 -16
- package/src/domain/telemetry/telemetry.ts +38 -34
- package/src/domain/telemetry/telemetryEvent.types.ts +116 -20
- package/src/domain/trackingConsent.ts +18 -3
- package/src/index.ts +51 -31
- package/src/tools/display.ts +2 -50
- package/src/tools/experimentalFeatures.ts +1 -4
- package/src/tools/getZoneJsOriginalValue.ts +3 -3
- package/src/tools/globalObject.ts +27 -41
- package/src/tools/instrumentMethod.ts +230 -20
- package/src/tools/matchOption.ts +3 -1
- package/src/tools/mockable.ts +32 -0
- package/src/tools/monitor.ts +14 -62
- package/src/tools/observable.ts +9 -1
- package/src/tools/queueMicrotask.ts +6 -1
- package/src/tools/readBytesFromStream.ts +3 -12
- package/src/tools/requestIdleCallback.ts +1 -1
- package/src/tools/serialisation/sanitize.ts +67 -65
- package/src/tools/serialisation/stringify.ts +18 -0
- package/src/tools/stackTrace/computeStackTrace.ts +15 -13
- package/src/tools/stackTrace/handlingStack.ts +14 -1
- package/src/tools/taskQueue.ts +5 -3
- package/src/tools/timer.ts +7 -6
- package/src/tools/utils/arrayUtils.ts +7 -0
- package/src/tools/utils/browserDetection.ts +8 -0
- package/src/tools/utils/byteUtils.ts +1 -5
- package/src/tools/utils/functionUtils.ts +2 -2
- package/src/tools/utils/objectUtils.ts +20 -0
- package/src/tools/utils/stringUtils.ts +4 -1
- package/src/tools/utils/urlPolyfill.ts +5 -4
- package/src/tools/valueHistory.ts +39 -6
- package/src/transport/batch.ts +9 -18
- package/src/transport/eventBridge.ts +23 -10
- package/src/transport/flushController.ts +17 -24
- package/src/transport/httpRequest.ts +4 -36
- package/src/transport/index.ts +1 -0
- package/src/transport/sendWithRetryStrategy.ts +1 -1
- package/cjs/browser/browser.types.js +0 -6
- package/cjs/browser/browser.types.js.map +0 -1
- package/cjs/domain/configuration/index.js +0 -16
- package/cjs/domain/configuration/index.js.map +0 -1
- package/cjs/domain/configuration/transportConfiguration.d.ts +0 -20
- package/cjs/domain/configuration/transportConfiguration.js +0 -54
- package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
- package/cjs/domain/connectivity/index.js +0 -18
- package/cjs/domain/connectivity/index.js.map +0 -1
- package/cjs/domain/contexts/rumInternalContext.type.js +0 -3
- package/cjs/domain/contexts/rumInternalContext.type.js.map +0 -1
- package/cjs/domain/deflate/index.js +0 -18
- package/cjs/domain/deflate/index.js.map +0 -1
- package/cjs/domain/report/browser.types.js +0 -3
- package/cjs/domain/report/browser.types.js.map +0 -1
- package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
- package/cjs/domain/session/oldCookiesMigration.js +0 -40
- package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
- package/cjs/domain/session/sessionStoreOperations.d.ts +0 -12
- package/cjs/domain/session/sessionStoreOperations.js +0 -119
- package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
- package/cjs/domain/telemetry/index.js +0 -28
- package/cjs/domain/telemetry/index.js.map +0 -1
- package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
- package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/tools/abstractHooks.d.ts +0 -24
- package/cjs/tools/abstractHooks.js +0 -41
- package/cjs/tools/abstractHooks.js.map +0 -1
- package/cjs/tools/boundedBuffer.d.ts +0 -16
- package/cjs/tools/boundedBuffer.js +0 -32
- package/cjs/tools/boundedBuffer.js.map +0 -1
- package/cjs/tools/mergeInto.d.ts +0 -25
- package/cjs/tools/mergeInto.js +0 -98
- package/cjs/tools/mergeInto.js.map +0 -1
- package/cjs/tools/serialisation/context.js +0 -3
- package/cjs/tools/serialisation/context.js.map +0 -1
- package/cjs/tools/utils/timeUtils.d.ts +0 -53
- package/cjs/tools/utils/timeUtils.js +0 -101
- package/cjs/tools/utils/timeUtils.js.map +0 -1
- package/cjs/tools/utils/typeUtils.d.ts +0 -4
- package/cjs/tools/utils/typeUtils.js +0 -16
- package/cjs/tools/utils/typeUtils.js.map +0 -1
- package/cjs/transport/index.js +0 -15
- package/cjs/transport/index.js.map +0 -1
- package/esm/boot/displayAlreadyInitializedError.d.ts +0 -2
- package/esm/boot/displayAlreadyInitializedError.js +0 -7
- package/esm/boot/displayAlreadyInitializedError.js.map +0 -1
- package/esm/boot/init.d.ts +0 -14
- package/esm/boot/init.js +0 -35
- package/esm/boot/init.js.map +0 -1
- package/esm/browser/addEventListener.d.ts +0 -87
- package/esm/browser/addEventListener.js +0 -51
- package/esm/browser/addEventListener.js.map +0 -1
- package/esm/browser/browser.types.d.ts +0 -51
- package/esm/browser/browser.types.js +0 -5
- package/esm/browser/browser.types.js.map +0 -1
- package/esm/browser/cookie.d.ts +0 -28
- package/esm/browser/cookie.js +0 -103
- package/esm/browser/cookie.js.map +0 -1
- package/esm/browser/fetchObservable.d.ts +0 -38
- package/esm/browser/fetchObservable.js +0 -99
- package/esm/browser/fetchObservable.js.map +0 -1
- package/esm/browser/pageMayExitObservable.d.ts +0 -14
- package/esm/browser/pageMayExitObservable.js +0 -40
- package/esm/browser/pageMayExitObservable.js.map +0 -1
- package/esm/browser/runOnReadyState.d.ts +0 -5
- package/esm/browser/runOnReadyState.js +0 -16
- package/esm/browser/runOnReadyState.js.map +0 -1
- package/esm/browser/xhrObservable.d.ts +0 -24
- package/esm/browser/xhrObservable.js +0 -83
- package/esm/browser/xhrObservable.js.map +0 -1
- package/esm/domain/allowedTrackingOrigins.d.ts +0 -4
- package/esm/domain/allowedTrackingOrigins.js +0 -21
- package/esm/domain/allowedTrackingOrigins.js.map +0 -1
- package/esm/domain/bufferedData.d.ts +0 -14
- package/esm/domain/bufferedData.js +0 -19
- package/esm/domain/bufferedData.js.map +0 -1
- package/esm/domain/configuration/configuration.d.ts +0 -312
- package/esm/domain/configuration/configuration.js +0 -132
- package/esm/domain/configuration/configuration.js.map +0 -1
- package/esm/domain/configuration/endpointBuilder.d.ts +0 -12
- package/esm/domain/configuration/endpointBuilder.js +0 -77
- package/esm/domain/configuration/endpointBuilder.js.map +0 -1
- package/esm/domain/configuration/index.d.ts +0 -5
- package/esm/domain/configuration/index.js +0 -4
- package/esm/domain/configuration/index.js.map +0 -1
- package/esm/domain/configuration/transportConfiguration.d.ts +0 -20
- package/esm/domain/configuration/transportConfiguration.js +0 -50
- package/esm/domain/configuration/transportConfiguration.js.map +0 -1
- package/esm/domain/connectivity/connectivity.d.ts +0 -14
- package/esm/domain/connectivity/connectivity.js +0 -11
- package/esm/domain/connectivity/connectivity.js.map +0 -1
- package/esm/domain/connectivity/index.d.ts +0 -1
- package/esm/domain/connectivity/index.js +0 -2
- package/esm/domain/connectivity/index.js.map +0 -1
- package/esm/domain/console/consoleObservable.d.ts +0 -21
- package/esm/domain/console/consoleObservable.js +0 -80
- package/esm/domain/console/consoleObservable.js.map +0 -1
- package/esm/domain/context/contextConstants.d.ts +0 -21
- package/esm/domain/context/contextConstants.js +0 -15
- package/esm/domain/context/contextConstants.js.map +0 -1
- package/esm/domain/context/contextManager.d.ts +0 -19
- package/esm/domain/context/contextManager.js +0 -57
- package/esm/domain/context/contextManager.js.map +0 -1
- package/esm/domain/context/contextUtils.d.ts +0 -5
- package/esm/domain/context/contextUtils.js +0 -13
- package/esm/domain/context/contextUtils.js.map +0 -1
- package/esm/domain/context/defineContextMethod.d.ts +0 -6
- package/esm/domain/context/defineContextMethod.js +0 -17
- package/esm/domain/context/defineContextMethod.js.map +0 -1
- package/esm/domain/context/storeContextManager.d.ts +0 -6
- package/esm/domain/context/storeContextManager.js +0 -35
- package/esm/domain/context/storeContextManager.js.map +0 -1
- package/esm/domain/contexts/accountContext.d.ts +0 -26
- package/esm/domain/contexts/accountContext.js +0 -29
- package/esm/domain/contexts/accountContext.js.map +0 -1
- package/esm/domain/contexts/globalContext.d.ts +0 -18
- package/esm/domain/contexts/globalContext.js +0 -17
- package/esm/domain/contexts/globalContext.js.map +0 -1
- package/esm/domain/contexts/rumInternalContext.type.d.ts +0 -14
- package/esm/domain/contexts/rumInternalContext.type.js +0 -2
- package/esm/domain/contexts/rumInternalContext.type.js.map +0 -1
- package/esm/domain/contexts/userContext.d.ts +0 -29
- package/esm/domain/contexts/userContext.js +0 -41
- package/esm/domain/contexts/userContext.js.map +0 -1
- package/esm/domain/deflate/deflate.types.d.ts +0 -40
- package/esm/domain/deflate/deflate.types.js +0 -2
- package/esm/domain/deflate/deflate.types.js.map +0 -1
- package/esm/domain/deflate/index.d.ts +0 -1
- package/esm/domain/deflate/index.js +0 -2
- package/esm/domain/deflate/index.js.map +0 -1
- package/esm/domain/error/error.d.ts +0 -23
- package/esm/domain/error/error.js +0 -65
- package/esm/domain/error/error.js.map +0 -1
- package/esm/domain/error/error.types.d.ts +0 -47
- package/esm/domain/error/error.types.js +0 -10
- package/esm/domain/error/error.types.js.map +0 -1
- package/esm/domain/error/trackRuntimeError.d.ts +0 -11
- package/esm/domain/error/trackRuntimeError.js +0 -43
- package/esm/domain/error/trackRuntimeError.js.map +0 -1
- package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -38
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
- package/esm/domain/extension/extensionUtils.d.ts +0 -10
- package/esm/domain/extension/extensionUtils.js +0 -25
- package/esm/domain/extension/extensionUtils.js.map +0 -1
- package/esm/domain/intakeSites.d.ts +0 -8
- package/esm/domain/intakeSites.js +0 -8
- package/esm/domain/intakeSites.js.map +0 -1
- package/esm/domain/report/browser.types.d.ts +0 -34
- package/esm/domain/report/browser.types.js +0 -2
- package/esm/domain/report/browser.types.js.map +0 -1
- package/esm/domain/report/reportObservable.d.ts +0 -14
- package/esm/domain/report/reportObservable.js +0 -95
- package/esm/domain/report/reportObservable.js.map +0 -1
- package/esm/domain/resourceUtils.d.ts +0 -18
- package/esm/domain/resourceUtils.js +0 -17
- package/esm/domain/resourceUtils.js.map +0 -1
- package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
- package/esm/domain/session/oldCookiesMigration.js +0 -36
- package/esm/domain/session/oldCookiesMigration.js.map +0 -1
- package/esm/domain/session/sessionConstants.d.ts +0 -15
- package/esm/domain/session/sessionConstants.js +0 -13
- package/esm/domain/session/sessionConstants.js.map +0 -1
- package/esm/domain/session/sessionManager.d.ts +0 -28
- package/esm/domain/session/sessionManager.js +0 -196
- package/esm/domain/session/sessionManager.js.map +0 -1
- package/esm/domain/session/sessionState.d.ts +0 -16
- package/esm/domain/session/sessionState.js +0 -60
- package/esm/domain/session/sessionState.js.map +0 -1
- package/esm/domain/session/sessionStateValidation.d.ts +0 -3
- package/esm/domain/session/sessionStateValidation.js +0 -7
- package/esm/domain/session/sessionStateValidation.js.map +0 -1
- package/esm/domain/session/sessionStore.d.ts +0 -38
- package/esm/domain/session/sessionStore.js +0 -179
- package/esm/domain/session/sessionStore.js.map +0 -1
- package/esm/domain/session/sessionStoreOperations.d.ts +0 -12
- package/esm/domain/session/sessionStoreOperations.js +0 -114
- package/esm/domain/session/sessionStoreOperations.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -12
- package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -98
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -6
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -37
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -16
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
- package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -12
- package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -24
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/esm/domain/tags.d.ts +0 -6
- package/esm/domain/tags.js +0 -60
- package/esm/domain/tags.js.map +0 -1
- package/esm/domain/telemetry/index.d.ts +0 -4
- package/esm/domain/telemetry/index.js +0 -3
- package/esm/domain/telemetry/index.js.map +0 -1
- package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -18
- package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/esm/domain/telemetry/telemetry.d.ts +0 -56
- package/esm/domain/telemetry/telemetry.js +0 -228
- package/esm/domain/telemetry/telemetry.js.map +0 -1
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -866
- package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/esm/domain/trackingConsent.d.ts +0 -13
- package/esm/domain/trackingConsent.js +0 -24
- package/esm/domain/trackingConsent.js.map +0 -1
- package/esm/index.d.ts +0 -100
- package/esm/index.js +0 -76
- package/esm/index.js.map +0 -1
- package/esm/tools/abstractHooks.d.ts +0 -24
- package/esm/tools/abstractHooks.js +0 -37
- package/esm/tools/abstractHooks.js.map +0 -1
- package/esm/tools/abstractLifeCycle.d.ts +0 -23
- package/esm/tools/abstractLifeCycle.js +0 -24
- package/esm/tools/abstractLifeCycle.js.map +0 -1
- package/esm/tools/boundedBuffer.d.ts +0 -16
- package/esm/tools/boundedBuffer.js +0 -29
- package/esm/tools/boundedBuffer.js.map +0 -1
- package/esm/tools/catchUserErrors.d.ts +0 -1
- package/esm/tools/catchUserErrors.js +0 -12
- package/esm/tools/catchUserErrors.js.map +0 -1
- package/esm/tools/display.d.ts +0 -38
- package/esm/tools/display.js +0 -41
- package/esm/tools/display.js.map +0 -1
- package/esm/tools/encoder.d.ts +0 -54
- package/esm/tools/encoder.js +0 -37
- package/esm/tools/encoder.js.map +0 -1
- package/esm/tools/experimentalFeatures.d.ts +0 -21
- package/esm/tools/experimentalFeatures.js +0 -42
- package/esm/tools/experimentalFeatures.js.map +0 -1
- package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
- package/esm/tools/getZoneJsOriginalValue.js +0 -26
- package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
- package/esm/tools/globalObject.d.ts +0 -19
- package/esm/tools/globalObject.js +0 -40
- package/esm/tools/globalObject.js.map +0 -1
- package/esm/tools/instrumentMethod.d.ts +0 -75
- package/esm/tools/instrumentMethod.js +0 -114
- package/esm/tools/instrumentMethod.js.map +0 -1
- package/esm/tools/matchOption.d.ts +0 -8
- package/esm/tools/matchOption.js +0 -31
- package/esm/tools/matchOption.js.map +0 -1
- package/esm/tools/mergeInto.d.ts +0 -25
- package/esm/tools/mergeInto.js +0 -93
- package/esm/tools/mergeInto.js.map +0 -1
- package/esm/tools/monitor.d.ts +0 -9
- package/esm/tools/monitor.js +0 -52
- package/esm/tools/monitor.js.map +0 -1
- package/esm/tools/observable.d.ts +0 -30
- package/esm/tools/observable.js +0 -83
- package/esm/tools/observable.js.map +0 -1
- package/esm/tools/queueMicrotask.d.ts +0 -1
- package/esm/tools/queueMicrotask.js +0 -14
- package/esm/tools/queueMicrotask.js.map +0 -1
- package/esm/tools/readBytesFromStream.d.ts +0 -10
- package/esm/tools/readBytesFromStream.js +0 -25
- package/esm/tools/readBytesFromStream.js.map +0 -1
- package/esm/tools/requestIdleCallback.d.ts +0 -12
- package/esm/tools/requestIdleCallback.js +0 -30
- package/esm/tools/requestIdleCallback.js.map +0 -1
- package/esm/tools/sendToExtension.d.ts +0 -3
- package/esm/tools/sendToExtension.js +0 -8
- package/esm/tools/sendToExtension.js.map +0 -1
- package/esm/tools/serialisation/context.d.ts +0 -9
- package/esm/tools/serialisation/context.js +0 -2
- package/esm/tools/serialisation/context.js.map +0 -1
- package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
- package/esm/tools/serialisation/jsonStringify.js +0 -44
- package/esm/tools/serialisation/jsonStringify.js.map +0 -1
- package/esm/tools/serialisation/sanitize.d.ts +0 -18
- package/esm/tools/serialisation/sanitize.js +0 -185
- package/esm/tools/serialisation/sanitize.js.map +0 -1
- package/esm/tools/stackTrace/computeStackTrace.d.ts +0 -25
- package/esm/tools/stackTrace/computeStackTrace.js +0 -183
- package/esm/tools/stackTrace/computeStackTrace.js.map +0 -1
- package/esm/tools/stackTrace/handlingStack.d.ts +0 -10
- package/esm/tools/stackTrace/handlingStack.js +0 -41
- package/esm/tools/stackTrace/handlingStack.js.map +0 -1
- package/esm/tools/taskQueue.d.ts +0 -15
- package/esm/tools/taskQueue.js +0 -50
- package/esm/tools/taskQueue.js.map +0 -1
- package/esm/tools/timer.d.ts +0 -5
- package/esm/tools/timer.js +0 -16
- package/esm/tools/timer.js.map +0 -1
- package/esm/tools/utils/arrayUtils.d.ts +0 -3
- package/esm/tools/utils/arrayUtils.js +0 -15
- package/esm/tools/utils/arrayUtils.js.map +0 -1
- package/esm/tools/utils/browserDetection.d.ts +0 -8
- package/esm/tools/utils/browserDetection.js +0 -28
- package/esm/tools/utils/browserDetection.js.map +0 -1
- package/esm/tools/utils/byteUtils.d.ts +0 -8
- package/esm/tools/utils/byteUtils.js +0 -29
- package/esm/tools/utils/byteUtils.js.map +0 -1
- package/esm/tools/utils/functionUtils.d.ts +0 -8
- package/esm/tools/utils/functionUtils.js +0 -39
- package/esm/tools/utils/functionUtils.js.map +0 -1
- package/esm/tools/utils/numberUtils.d.ts +0 -9
- package/esm/tools/utils/numberUtils.js +0 -18
- package/esm/tools/utils/numberUtils.js.map +0 -1
- package/esm/tools/utils/objectUtils.d.ts +0 -10
- package/esm/tools/utils/objectUtils.js +0 -17
- package/esm/tools/utils/objectUtils.js.map +0 -1
- package/esm/tools/utils/polyfills.d.ts +0 -7
- package/esm/tools/utils/polyfills.js +0 -18
- package/esm/tools/utils/polyfills.js.map +0 -1
- package/esm/tools/utils/responseUtils.d.ts +0 -2
- package/esm/tools/utils/responseUtils.js +0 -13
- package/esm/tools/utils/responseUtils.js.map +0 -1
- package/esm/tools/utils/stringUtils.d.ts +0 -23
- package/esm/tools/utils/stringUtils.js +0 -84
- package/esm/tools/utils/stringUtils.js.map +0 -1
- package/esm/tools/utils/timeUtils.d.ts +0 -53
- package/esm/tools/utils/timeUtils.js +0 -84
- package/esm/tools/utils/timeUtils.js.map +0 -1
- package/esm/tools/utils/timezone.d.ts +0 -1
- package/esm/tools/utils/timezone.js +0 -10
- package/esm/tools/utils/timezone.js.map +0 -1
- package/esm/tools/utils/typeUtils.d.ts +0 -4
- package/esm/tools/utils/typeUtils.js +0 -13
- package/esm/tools/utils/typeUtils.js.map +0 -1
- package/esm/tools/utils/urlPolyfill.d.ts +0 -5
- package/esm/tools/utils/urlPolyfill.js +0 -52
- package/esm/tools/utils/urlPolyfill.js.map +0 -1
- package/esm/tools/valueHistory.d.ts +0 -27
- package/esm/tools/valueHistory.js +0 -100
- package/esm/tools/valueHistory.js.map +0 -1
- package/esm/transport/batch.d.ts +0 -16
- package/esm/transport/batch.js +0 -106
- package/esm/transport/batch.js.map +0 -1
- package/esm/transport/eventBridge.d.ts +0 -21
- package/esm/transport/eventBridge.js +0 -41
- package/esm/transport/eventBridge.js.map +0 -1
- package/esm/transport/flushController.d.ts +0 -65
- package/esm/transport/flushController.js +0 -119
- package/esm/transport/flushController.js.map +0 -1
- package/esm/transport/httpRequest.d.ts +0 -56
- package/esm/transport/httpRequest.js +0 -89
- package/esm/transport/httpRequest.js.map +0 -1
- package/esm/transport/index.d.ts +0 -7
- package/esm/transport/index.js +0 -5
- package/esm/transport/index.js.map +0 -1
- package/esm/transport/sendWithRetryStrategy.d.ts +0 -41
- package/esm/transport/sendWithRetryStrategy.js +0 -158
- package/esm/transport/sendWithRetryStrategy.js.map +0 -1
- package/src/boot/displayAlreadyInitializedError.spec.ts +0 -18
- package/src/boot/init.spec.ts +0 -50
- package/src/browser/addEventListener.spec.ts +0 -141
- package/src/browser/cookie.spec.ts +0 -53
- package/src/browser/fetchObservable.spec.ts +0 -334
- package/src/browser/pageMayExitObservable.spec.ts +0 -56
- package/src/browser/xhrObservable.spec.ts +0 -405
- package/src/domain/allowedTrackingOrigins.spec.ts +0 -210
- package/src/domain/bufferedData.spec.ts +0 -34
- package/src/domain/configuration/configuration.spec.ts +0 -236
- package/src/domain/configuration/endpointBuilder.spec.ts +0 -173
- package/src/domain/configuration/transportConfiguration.spec.ts +0 -130
- package/src/domain/configuration/transportConfiguration.ts +0 -78
- package/src/domain/connectivity/connectivity.spec.ts +0 -50
- package/src/domain/console/consoleObservable.spec.ts +0 -151
- package/src/domain/context/contextManager.spec.ts +0 -152
- package/src/domain/context/contextUtils.spec.ts +0 -26
- package/src/domain/context/storeContextManager.spec.ts +0 -103
- package/src/domain/contexts/accountContext.spec.ts +0 -99
- package/src/domain/contexts/globalContext.spec.ts +0 -88
- package/src/domain/contexts/userContext.spec.ts +0 -156
- package/src/domain/error/error.spec.ts +0 -294
- package/src/domain/error/trackRuntimeError.spec.ts +0 -343
- package/src/domain/eventRateLimiter/createEventRateLimiter.spec.ts +0 -119
- package/src/domain/extension/extensionUtils.spec.ts +0 -47
- package/src/domain/report/reportObservable.spec.ts +0 -71
- package/src/domain/session/oldCookiesMigration.spec.ts +0 -76
- package/src/domain/session/oldCookiesMigration.ts +0 -42
- package/src/domain/session/sessionManager.spec.ts +0 -684
- package/src/domain/session/sessionState.spec.ts +0 -88
- package/src/domain/session/sessionStore.spec.ts +0 -647
- package/src/domain/session/sessionStoreOperations.spec.ts +0 -234
- package/src/domain/session/sessionStoreOperations.ts +0 -131
- package/src/domain/session/storeStrategies/sessionInCookie.spec.ts +0 -228
- package/src/domain/session/storeStrategies/sessionInLocalStorage.spec.ts +0 -75
- package/src/domain/synthetics/syntheticsWorkerValues.spec.ts +0 -82
- package/src/domain/tags.spec.ts +0 -74
- package/src/domain/telemetry/telemetry.spec.ts +0 -494
- package/src/domain/trackingConsent.spec.ts +0 -44
- package/src/tools/abstractHooks.spec.ts +0 -76
- package/src/tools/abstractHooks.ts +0 -72
- package/src/tools/abstractLifeCycle.spec.ts +0 -46
- package/src/tools/boundedBuffer.spec.ts +0 -40
- package/src/tools/boundedBuffer.ts +0 -45
- package/src/tools/catchUserErrors.spec.ts +0 -20
- package/src/tools/encoder.spec.ts +0 -112
- package/src/tools/experimentalFeatures.spec.ts +0 -60
- package/src/tools/getZoneJsOriginalValue.spec.ts +0 -36
- package/src/tools/instrumentMethod.spec.ts +0 -381
- package/src/tools/matchOption.spec.ts +0 -41
- package/src/tools/mergeInto.spec.ts +0 -198
- package/src/tools/mergeInto.ts +0 -177
- package/src/tools/monitor.spec.ts +0 -172
- package/src/tools/observable.spec.ts +0 -259
- package/src/tools/queueMicrotask.spec.ts +0 -24
- package/src/tools/readBytesFromStream.spec.ts +0 -62
- package/src/tools/requestIdleCallback.spec.ts +0 -65
- package/src/tools/serialisation/jsonStringify.spec.ts +0 -76
- package/src/tools/serialisation/sanitize.spec.ts +0 -284
- package/src/tools/stackTrace/capturedExceptions.specHelper.ts +0 -316
- package/src/tools/stackTrace/computeStackTrace.spec.ts +0 -1007
- package/src/tools/stackTrace/handlingStack.spec.ts +0 -20
- package/src/tools/taskQueue.spec.ts +0 -60
- package/src/tools/timer.spec.ts +0 -76
- package/src/tools/utils/browserDetection.spec.ts +0 -120
- package/src/tools/utils/byteUtils.spec.ts +0 -29
- package/src/tools/utils/functionUtils.spec.ts +0 -229
- package/src/tools/utils/numberUtils.spec.ts +0 -27
- package/src/tools/utils/stringUtils.spec.ts +0 -74
- package/src/tools/utils/timeUtils.ts +0 -117
- package/src/tools/utils/typeUtils.spec.ts +0 -25
- package/src/tools/utils/typeUtils.ts +0 -12
- package/src/tools/utils/urlPolyfill.spec.ts +0 -55
- package/src/tools/valueHistory.spec.ts +0 -180
- package/src/transport/batch.spec.ts +0 -261
- package/src/transport/eventBridge.spec.ts +0 -90
- package/src/transport/flushController.spec.ts +0 -267
- package/src/transport/httpRequest.spec.ts +0 -400
- package/src/transport/sendWithRetryStrategy.spec.ts +0 -393
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { objectHasValue } from "./utils/objectUtils.mjs";
|
|
2
|
+
//#region src/tools/experimentalFeatures.ts
|
|
3
|
+
/**
|
|
4
|
+
* LIMITATION:
|
|
5
|
+
* For NPM setup, this feature flag singleton is shared between RUM and Logs product.
|
|
6
|
+
* This means that an experimental flag set on the RUM product will be set on the Logs product.
|
|
7
|
+
* So keep in mind that in certain configurations, your experimental feature flag may affect other products.
|
|
8
|
+
*
|
|
9
|
+
* FORMAT:
|
|
10
|
+
* All feature flags should be snake_cased
|
|
11
|
+
*/
|
|
12
|
+
let ExperimentalFeature = /* @__PURE__ */ function(ExperimentalFeature) {
|
|
13
|
+
ExperimentalFeature["TRACK_INTAKE_REQUESTS"] = "track_intake_requests";
|
|
14
|
+
ExperimentalFeature["PARTIAL_VIEW_UPDATES"] = "partial_view_updates";
|
|
15
|
+
return ExperimentalFeature;
|
|
16
|
+
}({});
|
|
17
|
+
const enabledExperimentalFeatures = /* @__PURE__ */ new Set();
|
|
18
|
+
function initFeatureFlags(enableExperimentalFeatures) {
|
|
19
|
+
if (Array.isArray(enableExperimentalFeatures)) addExperimentalFeatures(enableExperimentalFeatures.filter((flag) => objectHasValue(ExperimentalFeature, flag)));
|
|
20
|
+
}
|
|
21
|
+
function addExperimentalFeatures(enabledFeatures) {
|
|
22
|
+
enabledFeatures.forEach((flag) => {
|
|
23
|
+
enabledExperimentalFeatures.add(flag);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function isExperimentalFeatureEnabled(featureName) {
|
|
27
|
+
return enabledExperimentalFeatures.has(featureName);
|
|
28
|
+
}
|
|
29
|
+
function getExperimentalFeatures() {
|
|
30
|
+
return enabledExperimentalFeatures;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { ExperimentalFeature, addExperimentalFeatures, getExperimentalFeatures, initFeatureFlags, isExperimentalFeatureEnabled };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=experimentalFeatures.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experimentalFeatures.mjs","names":[],"sources":["../../src/tools/experimentalFeatures.ts"],"sourcesContent":["/**\n * LIMITATION:\n * For NPM setup, this feature flag singleton is shared between RUM and Logs product.\n * This means that an experimental flag set on the RUM product will be set on the Logs product.\n * So keep in mind that in certain configurations, your experimental feature flag may affect other products.\n *\n * FORMAT:\n * All feature flags should be snake_cased\n */\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected feature flag\n\nimport { objectHasValue } from './utils/objectUtils'\n\n// eslint-disable-next-line no-restricted-syntax\nexport enum ExperimentalFeature {\n TRACK_INTAKE_REQUESTS = 'track_intake_requests',\n PARTIAL_VIEW_UPDATES = 'partial_view_updates',\n}\n\nconst enabledExperimentalFeatures: Set<ExperimentalFeature> = new Set()\n\nexport function initFeatureFlags(enableExperimentalFeatures: string[] | undefined) {\n if (Array.isArray(enableExperimentalFeatures)) {\n addExperimentalFeatures(\n enableExperimentalFeatures.filter((flag): flag is ExperimentalFeature =>\n objectHasValue(ExperimentalFeature, flag)\n )\n )\n }\n}\n\nexport function addExperimentalFeatures(enabledFeatures: ExperimentalFeature[]): void {\n enabledFeatures.forEach((flag) => {\n enabledExperimentalFeatures.add(flag)\n })\n}\n\nexport function isExperimentalFeatureEnabled(featureName: ExperimentalFeature): boolean {\n return enabledExperimentalFeatures.has(featureName)\n}\n\nexport function resetExperimentalFeatures(): void {\n enabledExperimentalFeatures.clear()\n}\n\nexport function getExperimentalFeatures(): Set<ExperimentalFeature> {\n return enabledExperimentalFeatures\n}\n"],"mappings":";;;;;;;;;;;AAeA,IAAY,sBAAL,yBAAA,qBAAA;CACL,oBAAA,2BAAA;CACA,oBAAA,0BAAA;;AACF,EAAA,CAAA,CAAA;AAEA,MAAM,8CAAwD,IAAI,IAAI;AAEtE,SAAgB,iBAAiB,4BAAkD;CACjF,IAAI,MAAM,QAAQ,0BAA0B,GAC1C,wBACE,2BAA2B,QAAQ,SACjC,eAAe,qBAAqB,IAAI,CAC1C,CACF;AAEJ;AAEA,SAAgB,wBAAwB,iBAA8C;CACpF,gBAAgB,SAAS,SAAS;EAChC,4BAA4B,IAAI,IAAI;CACtC,CAAC;AACH;AAEA,SAAgB,6BAA6B,aAA2C;CACtF,OAAO,4BAA4B,IAAI,WAAW;AACpD;AAMA,SAAgB,0BAAoD;CAClE,OAAO;AACT"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { globalObject } from "./globalObject.mjs";
|
|
2
|
+
//#region src/tools/getZoneJsOriginalValue.ts
|
|
3
|
+
/**
|
|
4
|
+
* Gets the original value for a DOM API that was potentially patched by Zone.js.
|
|
5
|
+
*
|
|
6
|
+
* Zone.js[1] is a library that patches a bunch of JS and DOM APIs. It usually stores the original
|
|
7
|
+
* value of the patched functions/constructors/methods in a hidden property prefixed by
|
|
8
|
+
* __zone_symbol__.
|
|
9
|
+
*
|
|
10
|
+
* In multiple occasions, we observed that Zone.js is the culprit of important issues leading to
|
|
11
|
+
* browser resource exhaustion (memory leak, high CPU usage). This method is used as a workaround to
|
|
12
|
+
* use the original DOM API instead of the one patched by Zone.js.
|
|
13
|
+
*
|
|
14
|
+
* [1]: https://github.com/angular/angular/tree/main/packages/zone.js
|
|
15
|
+
*/
|
|
16
|
+
function getZoneJsOriginalValue(target, name) {
|
|
17
|
+
const browserWindow = globalObject;
|
|
18
|
+
let original;
|
|
19
|
+
if (browserWindow.Zone && typeof browserWindow.Zone.__symbol__ === "function") original = target[browserWindow.Zone.__symbol__(name)];
|
|
20
|
+
if (!original) original = target[name];
|
|
21
|
+
return original;
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { getZoneJsOriginalValue };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=getZoneJsOriginalValue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getZoneJsOriginalValue.mjs","names":[],"sources":["../../src/tools/getZoneJsOriginalValue.ts"],"sourcesContent":["import { globalObject } from './globalObject'\n\nexport interface BrowserWindowWithZoneJs {\n Zone?: {\n // All Zone.js versions expose the __symbol__ method, but we observed that some website have a\n // 'Zone' global variable unrelated to Zone.js, so let's consider this method optional\n // nonetheless.\n __symbol__?: (name: string) => string\n }\n}\n\n/**\n * Gets the original value for a DOM API that was potentially patched by Zone.js.\n *\n * Zone.js[1] is a library that patches a bunch of JS and DOM APIs. It usually stores the original\n * value of the patched functions/constructors/methods in a hidden property prefixed by\n * __zone_symbol__.\n *\n * In multiple occasions, we observed that Zone.js is the culprit of important issues leading to\n * browser resource exhaustion (memory leak, high CPU usage). This method is used as a workaround to\n * use the original DOM API instead of the one patched by Zone.js.\n *\n * [1]: https://github.com/angular/angular/tree/main/packages/zone.js\n */\nexport function getZoneJsOriginalValue<Target, Name extends keyof Target & string>(\n target: Target,\n name: Name\n): Target[Name] {\n const browserWindow = globalObject as BrowserWindowWithZoneJs\n let original: Target[Name] | undefined\n if (browserWindow.Zone && typeof browserWindow.Zone.__symbol__ === 'function') {\n original = (target as any)[browserWindow.Zone.__symbol__(name)]\n }\n if (!original) {\n original = target[name]\n }\n return original\n}\n"],"mappings":";;;;;;;;;;;;;;;AAwBA,SAAgB,uBACd,QACA,MACc;CACd,MAAM,gBAAgB;CACtB,IAAI;CACJ,IAAI,cAAc,QAAQ,OAAO,cAAc,KAAK,eAAe,YACjE,WAAY,OAAe,cAAc,KAAK,WAAW,IAAI;CAE/D,IAAI,CAAC,UACH,WAAW,OAAO;CAEpB,OAAO;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalObject.mjs","names":[],"sources":["../../src/tools/globalObject.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport type { BrowserNavigator, CookieStore, ProfilerConstructor } from '../browser/browser.types'\n\n/**\n * Reflects values available in the global object (e.g. window or self). We use our own type to\n * adjust the expectations across the codebase when the native types offered by TypeScript aren't\n * sufficient.\n *\n * For example, we can mark a property as optional when it is not available in all browsers, or add\n * new browser APIs that are not yet typed properly in the typescript lib.\n *\n * Feel free to add more properties as needed, or mark some properties as optional when they are.\n */\nexport interface GlobalObject extends Omit<\n // eslint-disable-next-line no-restricted-syntax\n typeof globalThis,\n 'queueMicrotask' | 'cookieStore' | 'Profiler' | 'window'\n> {\n navigator: BrowserNavigator\n\n // cookieStore is not available in all browsers yet\n cookieStore?: CookieStore\n\n // queueMicrotask is not available in all browsers yet\n queueMicrotask?: typeof queueMicrotask\n\n // Profiler is not available in all browsers yet\n Profiler?: ProfilerConstructor\n\n // window is not available in SSR environments\n window?: Window\n}\n\n// eslint-disable-next-line no-restricted-syntax\nexport const globalObject = globalThis as GlobalObject\n\nexport const isWorkerEnvironment = 'WorkerGlobalScope' in globalObject\n"],"mappings":";AAkCA,MAAa,eAAe;AAE5B,MAAa,sBAAsB,uBAAuB"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { callMonitored } from "./monitor.mjs";
|
|
2
|
+
import { setTimeout } from "./timer.mjs";
|
|
3
|
+
import { noop } from "./utils/functionUtils.mjs";
|
|
4
|
+
import { createHandlingStack } from "./stackTrace/handlingStack.mjs";
|
|
5
|
+
//#region src/tools/instrumentMethod.ts
|
|
6
|
+
/**
|
|
7
|
+
* Instruments a method on a object, calling the given callback before the original method is
|
|
8
|
+
* invoked. The callback receives an object with information about the method call.
|
|
9
|
+
*
|
|
10
|
+
* This function makes sure that we are "good citizens" regarding third party instrumentations: when
|
|
11
|
+
* removing the instrumentation, the original method is usually restored, but if a third party
|
|
12
|
+
* instrumentation was set after ours, we keep it in place and just replace our instrumentation with
|
|
13
|
+
* a noop.
|
|
14
|
+
*
|
|
15
|
+
* Note: it is generally better to instrument methods that are "owned" by the object instead of ones
|
|
16
|
+
* that are inherited from the prototype chain. Example:
|
|
17
|
+
* * do: `instrumentMethod(Array.prototype, 'push', ...)`
|
|
18
|
+
* * don't: `instrumentMethod([], 'push', ...)`
|
|
19
|
+
*
|
|
20
|
+
* This method is also used to set event handler properties (ex: window.onerror = ...), as it has
|
|
21
|
+
* the same requirements as instrumenting a method:
|
|
22
|
+
* * if the event handler is already set by a third party, we need to call it and not just blindly
|
|
23
|
+
* override it.
|
|
24
|
+
* * if the event handler is set by a third party after us, we need to keep it in place when
|
|
25
|
+
* removing ours.
|
|
26
|
+
*
|
|
27
|
+
* To instrument a constructor @see {@link instrumentConstructor}.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
*
|
|
31
|
+
* instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {
|
|
32
|
+
* console.log('Before calling fetch on', target, 'with parameters', parameters)
|
|
33
|
+
*
|
|
34
|
+
* onPostCall((result) => {
|
|
35
|
+
* console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)
|
|
36
|
+
* })
|
|
37
|
+
* })
|
|
38
|
+
*/
|
|
39
|
+
function instrumentMethod(targetPrototype, method, onPreCall, { computeHandlingStack } = {}) {
|
|
40
|
+
let original = targetPrototype[method];
|
|
41
|
+
if (typeof original !== "function") if (method in targetPrototype && typeof method === "string" && method.startsWith("on")) original = noop;
|
|
42
|
+
else return { stop: noop };
|
|
43
|
+
let stopped = false;
|
|
44
|
+
const instrumentation = function() {
|
|
45
|
+
if (stopped) return original.apply(this, arguments);
|
|
46
|
+
const parameters = Array.from(arguments);
|
|
47
|
+
return notifyInstrumentation(onPreCall, {
|
|
48
|
+
target: this,
|
|
49
|
+
parameters,
|
|
50
|
+
handlingStack: computeHandlingStack ? createHandlingStack("instrumented method") : void 0
|
|
51
|
+
}, () => original.apply(this, parameters));
|
|
52
|
+
};
|
|
53
|
+
const { stop: restoreOriginal } = replaceWithInstrumentation(targetPrototype, method, original, instrumentation);
|
|
54
|
+
return { stop: () => {
|
|
55
|
+
stopped = true;
|
|
56
|
+
restoreOriginal();
|
|
57
|
+
} };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Instruments a constructor on an object (typically a global, e.g. `window.WebSocket`), calling the
|
|
61
|
+
* given callback before the original constructor is invoked. The callback receives an object with
|
|
62
|
+
* information about the constructor call, and can register an `onPostCall` callback to be notified
|
|
63
|
+
* with the constructed instance.
|
|
64
|
+
*
|
|
65
|
+
* Like `instrumentMethod`, this is a "good citizen" regarding third party instrumentations: stopping
|
|
66
|
+
* restores the original constructor unless a third party replaced it afterwards.
|
|
67
|
+
*
|
|
68
|
+
* The wrapper preserves the original prototype (so `instanceof` keeps working), the original
|
|
69
|
+
* `new.target` (so constructors that inspect it behave as if not instrumented), the original
|
|
70
|
+
* static members (e.g. `WebSocket.OPEN`), and `instance.constructor ===` so checks like
|
|
71
|
+
* `new WebSocket(url).constructor === WebSocket` stay true.
|
|
72
|
+
*
|
|
73
|
+
* @see {@link preserveConstructorShape} for limitations on static members preservation.
|
|
74
|
+
* @example
|
|
75
|
+
*
|
|
76
|
+
* instrumentConstructor(window, 'WebSocket', ({ parameters, onPostCall }) => {
|
|
77
|
+
* console.log('Before constructing WebSocket with parameters', parameters)
|
|
78
|
+
*
|
|
79
|
+
* onPostCall((instance) => {
|
|
80
|
+
* console.log('Constructed WebSocket instance', instance)
|
|
81
|
+
* })
|
|
82
|
+
* })
|
|
83
|
+
*/
|
|
84
|
+
function instrumentConstructor(container, constructor, onPreCall, { computeHandlingStack } = {}) {
|
|
85
|
+
const original = container[constructor];
|
|
86
|
+
if (typeof original !== "function") return { stop: noop };
|
|
87
|
+
let stopped = false;
|
|
88
|
+
const instrumentation = function() {
|
|
89
|
+
if (!new.target) return Reflect.apply(original, this, Array.from(arguments));
|
|
90
|
+
const newTarget = new.target === instrumentation ? original : new.target;
|
|
91
|
+
if (stopped) return Reflect.construct(original, arguments, newTarget);
|
|
92
|
+
const parameters = Array.from(arguments);
|
|
93
|
+
return notifyInstrumentation(onPreCall, {
|
|
94
|
+
parameters,
|
|
95
|
+
handlingStack: computeHandlingStack ? createHandlingStack("instrumented constructor") : void 0
|
|
96
|
+
}, () => Reflect.construct(original, parameters, newTarget));
|
|
97
|
+
};
|
|
98
|
+
const restorePrototypeConstructor = preserveConstructorShape(instrumentation, original);
|
|
99
|
+
const { stop: restoreOriginal } = replaceWithInstrumentation(container, constructor, original, instrumentation);
|
|
100
|
+
return { stop: () => {
|
|
101
|
+
stopped = true;
|
|
102
|
+
restorePrototypeConstructor();
|
|
103
|
+
restoreOriginal();
|
|
104
|
+
} };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Replaces `targetPrototype[method]` with the provided instrumentation and
|
|
108
|
+
* returns a `stop` function restoring the original (unless a third party replaced us afterwards).
|
|
109
|
+
*/
|
|
110
|
+
function replaceWithInstrumentation(targetPrototype, method, original, instrumentation) {
|
|
111
|
+
targetPrototype[method] = instrumentation;
|
|
112
|
+
return { stop: () => {
|
|
113
|
+
if (targetPrototype[method] === instrumentation) targetPrototype[method] = original;
|
|
114
|
+
} };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Runs the pre-call callback (injecting the `onPostCall` registration), invokes the original
|
|
118
|
+
* method/constructor, then runs the registered post-call callback with the result.
|
|
119
|
+
*
|
|
120
|
+
* Note: the handling stack must be computed by the caller (at the topmost position of the call
|
|
121
|
+
* stack), so it is part of `baseCallInfo` rather than computed here.
|
|
122
|
+
*/
|
|
123
|
+
function notifyInstrumentation(onPreCall, baseCallInfo, invokeOriginal) {
|
|
124
|
+
let postCallCallback;
|
|
125
|
+
callMonitored(onPreCall, null, [{
|
|
126
|
+
...baseCallInfo,
|
|
127
|
+
onPostCall: (callback) => {
|
|
128
|
+
postCallCallback = callback;
|
|
129
|
+
}
|
|
130
|
+
}]);
|
|
131
|
+
const result = invokeOriginal();
|
|
132
|
+
if (postCallCallback) callMonitored(postCallCallback, null, [result]);
|
|
133
|
+
return result;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Copies the original constructor prototype and other static members onto the instrumentation, so that
|
|
137
|
+
* `instanceof` checks keep working and statics such as `WebSocket.OPEN` remain available while
|
|
138
|
+
* instrumented.
|
|
139
|
+
*
|
|
140
|
+
* Returns a function that restores `prototype.constructor` to its prior descriptor; call it
|
|
141
|
+
* before restoring the global property in `stop()`.
|
|
142
|
+
*/
|
|
143
|
+
function preserveConstructorShape(instrumentation, original) {
|
|
144
|
+
/**
|
|
145
|
+
* Limitation: Only the original's *own* static members are copied. Statics inherited through the
|
|
146
|
+
* constructor's prototype chain (e.g. `class Child extends Parent` where `Parent` defines statics)
|
|
147
|
+
* are not preserved, since the instrumentation still inherits from `Function.prototype`. This is
|
|
148
|
+
* acceptable for the globals we instrument (e.g. `WebSocket`, whose own statics are the only ones
|
|
149
|
+
* that matter), but we would need to delegate the static prototype chain to support subclassed
|
|
150
|
+
* constructors with meaningful inherited statics.
|
|
151
|
+
*/
|
|
152
|
+
for (const key of [].concat(Object.getOwnPropertyNames(original), Object.getOwnPropertySymbols(original))) Object.defineProperty(instrumentation, key, Object.getOwnPropertyDescriptor(original, key));
|
|
153
|
+
const { stop: restoreOriginalConstructor } = replaceWithInstrumentation(original.prototype, "constructor", original.prototype.constructor, instrumentation);
|
|
154
|
+
return restoreOriginalConstructor;
|
|
155
|
+
}
|
|
156
|
+
function instrumentSetter(targetPrototype, property, after) {
|
|
157
|
+
const originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property);
|
|
158
|
+
if (!originalDescriptor?.set || !originalDescriptor.configurable) return { stop: noop };
|
|
159
|
+
const stoppedInstrumentation = noop;
|
|
160
|
+
let instrumentation = (target, value) => {
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
if (instrumentation !== stoppedInstrumentation) after(target, value);
|
|
163
|
+
}, 0);
|
|
164
|
+
};
|
|
165
|
+
const instrumentationWrapper = function(value) {
|
|
166
|
+
originalDescriptor.set.call(this, value);
|
|
167
|
+
instrumentation(this, value);
|
|
168
|
+
};
|
|
169
|
+
Object.defineProperty(targetPrototype, property, { set: instrumentationWrapper });
|
|
170
|
+
return { stop: () => {
|
|
171
|
+
if (Object.getOwnPropertyDescriptor(targetPrototype, property)?.set === instrumentationWrapper) Object.defineProperty(targetPrototype, property, originalDescriptor);
|
|
172
|
+
instrumentation = stoppedInstrumentation;
|
|
173
|
+
} };
|
|
174
|
+
}
|
|
175
|
+
//#endregion
|
|
176
|
+
export { instrumentConstructor, instrumentMethod, instrumentSetter };
|
|
177
|
+
|
|
178
|
+
//# sourceMappingURL=instrumentMethod.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentMethod.mjs","names":[],"sources":["../../src/tools/instrumentMethod.ts"],"sourcesContent":["import { setTimeout } from './timer'\nimport { callMonitored } from './monitor'\nimport { noop } from './utils/functionUtils'\nimport { createHandlingStack } from './stackTrace/handlingStack'\n\n/**\n * Object passed to the callback of an instrumented method call. See `instrumentMethod` for more\n * info.\n */\nexport interface InstrumentedMethodCall<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> {\n /**\n * The target object on which the method was called.\n */\n target: TARGET\n\n /**\n * The parameters with which the method was called.\n *\n * Note: if needed, parameters can be mutated by the instrumentation\n */\n parameters: Parameters<TARGET[METHOD]>\n\n /**\n * Registers a callback that will be called after the original method is called, with the method\n * result passed as argument.\n */\n onPostCall: (callback: PostCallCallback<TARGET, METHOD>) => void\n\n /**\n * The stack trace of the method call.\n */\n handlingStack?: string\n}\n\ntype PostCallCallback<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> = (\n result: ReturnType<TARGET[METHOD]>\n) => void\n\ntype ConstructorParametersOf<CONSTRUCTOR> = CONSTRUCTOR extends new (...args: infer P) => any ? P : never\ntype ConstructorInstanceOf<CONSTRUCTOR> = CONSTRUCTOR extends new (...args: any[]) => infer R ? R : never\n\ntype AnyConstructor = abstract new (...args: any[]) => any\n\n/**\n * Object passed to the callback of an instrumented constructor call. See `instrumentConstructor`\n * for more info.\n */\nexport interface InstrumentedConstructorCall<CONSTRUCTOR> {\n /**\n * The parameters with which the constructor was called.\n *\n * Note: if needed, parameters can be mutated by the instrumentation\n */\n parameters: ConstructorParametersOf<CONSTRUCTOR>\n\n /**\n * Registers a callback that will be called after the original constructor is called, with the\n * constructed instance passed as argument.\n */\n onPostCall: (callback: (result: ConstructorInstanceOf<CONSTRUCTOR>) => void) => void\n\n /**\n * The stack trace of the constructor call.\n */\n handlingStack?: string\n}\n\n/**\n * Instruments a method on a object, calling the given callback before the original method is\n * invoked. The callback receives an object with information about the method call.\n *\n * This function makes sure that we are \"good citizens\" regarding third party instrumentations: when\n * removing the instrumentation, the original method is usually restored, but if a third party\n * instrumentation was set after ours, we keep it in place and just replace our instrumentation with\n * a noop.\n *\n * Note: it is generally better to instrument methods that are \"owned\" by the object instead of ones\n * that are inherited from the prototype chain. Example:\n * * do: `instrumentMethod(Array.prototype, 'push', ...)`\n * * don't: `instrumentMethod([], 'push', ...)`\n *\n * This method is also used to set event handler properties (ex: window.onerror = ...), as it has\n * the same requirements as instrumenting a method:\n * * if the event handler is already set by a third party, we need to call it and not just blindly\n * override it.\n * * if the event handler is set by a third party after us, we need to keep it in place when\n * removing ours.\n *\n * To instrument a constructor @see {@link instrumentConstructor}.\n *\n * @example\n *\n * instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {\n * console.log('Before calling fetch on', target, 'with parameters', parameters)\n *\n * onPostCall((result) => {\n * console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)\n * })\n * })\n */\nexport function instrumentMethod<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET>(\n targetPrototype: TARGET,\n method: METHOD,\n onPreCall: (this: null, callInfos: InstrumentedMethodCall<TARGET, METHOD>) => void,\n { computeHandlingStack }: { computeHandlingStack?: boolean } = {}\n) {\n let original = targetPrototype[method]\n\n if (typeof original !== 'function') {\n if (method in targetPrototype && typeof method === 'string' && method.startsWith('on')) {\n original = noop as TARGET[METHOD]\n } else {\n return { stop: noop }\n }\n }\n\n let stopped = false\n\n const instrumentation = function (this: TARGET): ReturnType<TARGET[METHOD]> {\n if (stopped) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return original.apply(this, arguments)\n }\n\n const parameters = Array.from(arguments) as Parameters<TARGET[METHOD]>\n\n return notifyInstrumentation<InstrumentedMethodCall<TARGET, METHOD>, ReturnType<TARGET[METHOD]>>(\n onPreCall,\n {\n target: this,\n parameters,\n handlingStack: computeHandlingStack ? createHandlingStack('instrumented method') : undefined,\n },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call -- TARGET[METHOD] is any under the index signature; value is verified as a function above\n () => original.apply(this, parameters)\n )\n } as TARGET[METHOD]\n\n const { stop: restoreOriginal } = replaceWithInstrumentation(targetPrototype, method, original, instrumentation)\n\n return {\n stop: () => {\n stopped = true\n restoreOriginal()\n },\n }\n}\n\n/**\n * Instruments a constructor on an object (typically a global, e.g. `window.WebSocket`), calling the\n * given callback before the original constructor is invoked. The callback receives an object with\n * information about the constructor call, and can register an `onPostCall` callback to be notified\n * with the constructed instance.\n *\n * Like `instrumentMethod`, this is a \"good citizen\" regarding third party instrumentations: stopping\n * restores the original constructor unless a third party replaced it afterwards.\n *\n * The wrapper preserves the original prototype (so `instanceof` keeps working), the original\n * `new.target` (so constructors that inspect it behave as if not instrumented), the original\n * static members (e.g. `WebSocket.OPEN`), and `instance.constructor ===` so checks like\n * `new WebSocket(url).constructor === WebSocket` stay true.\n *\n * @see {@link preserveConstructorShape} for limitations on static members preservation.\n * @example\n *\n * instrumentConstructor(window, 'WebSocket', ({ parameters, onPostCall }) => {\n * console.log('Before constructing WebSocket with parameters', parameters)\n *\n * onPostCall((instance) => {\n * console.log('Constructed WebSocket instance', instance)\n * })\n * })\n */\nexport function instrumentConstructor<CONTAINER extends { [key: string]: any }, CONSTRUCTOR extends keyof CONTAINER>(\n container: CONTAINER,\n constructor: CONSTRUCTOR,\n onPreCall: (this: null, callInfos: InstrumentedConstructorCall<CONTAINER[CONSTRUCTOR]>) => void,\n { computeHandlingStack }: { computeHandlingStack?: boolean } = {}\n) {\n const original = container[constructor]\n\n if (typeof original !== 'function') {\n return { stop: noop }\n }\n\n let stopped = false\n\n const instrumentation = function (this: unknown): ConstructorInstanceOf<CONTAINER[CONSTRUCTOR]> {\n // Bare `[[Call]]` (no `new`): delegate through `[[Call]]` and skip `onPreCall`. Otherwise we\n // would notify instrumentation before the original rejects or returns, unlike the native\n // constructor (e.g. `WebSocket(url)` or `class {}()` without `new`).\n if (!new.target) {\n return Reflect.apply(original, this, Array.from(arguments)) as ConstructorInstanceOf<CONTAINER[CONSTRUCTOR]>\n }\n\n // When `new` is used on this instrumented property, `new.target` is this wrapper. Passing\n // it through to Reflect.construct would expose the wrong new.target inside the original\n // body. If a subclass extends the wrapper, or a third party wraps us and their class is\n // instantiated, `new.target` is that outer constructor and must be preserved.\n const newTarget = new.target === instrumentation ? original : new.target\n\n if (stopped) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return Reflect.construct(\n original,\n arguments as unknown as ConstructorParametersOf<CONTAINER[CONSTRUCTOR]>,\n newTarget\n )\n }\n\n const parameters = Array.from(arguments) as ConstructorParametersOf<CONTAINER[CONSTRUCTOR]>\n\n return notifyInstrumentation<\n InstrumentedConstructorCall<CONTAINER[CONSTRUCTOR]>,\n ConstructorInstanceOf<CONTAINER[CONSTRUCTOR]>\n >(\n onPreCall,\n {\n parameters,\n handlingStack: computeHandlingStack ? createHandlingStack('instrumented constructor') : undefined,\n },\n () =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n Reflect.construct(original, parameters, newTarget)\n )\n } as CONTAINER[CONSTRUCTOR]\n\n const restorePrototypeConstructor = preserveConstructorShape(instrumentation, original)\n const { stop: restoreOriginal } = replaceWithInstrumentation(container, constructor, original, instrumentation)\n\n return {\n stop: () => {\n stopped = true\n restorePrototypeConstructor()\n restoreOriginal()\n },\n }\n}\n\n/**\n * Replaces `targetPrototype[method]` with the provided instrumentation and\n * returns a `stop` function restoring the original (unless a third party replaced us afterwards).\n */\nfunction replaceWithInstrumentation<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET>(\n targetPrototype: TARGET,\n method: METHOD,\n original: TARGET[METHOD],\n instrumentation: TARGET[METHOD]\n) {\n targetPrototype[method] = instrumentation\n\n return {\n stop: () => {\n // If the instrumentation has been removed by a third party, keep the last one\n if (targetPrototype[method] === instrumentation) {\n targetPrototype[method] = original\n }\n },\n }\n}\n\n/**\n * Runs the pre-call callback (injecting the `onPostCall` registration), invokes the original\n * method/constructor, then runs the registered post-call callback with the result.\n *\n * Note: the handling stack must be computed by the caller (at the topmost position of the call\n * stack), so it is part of `baseCallInfo` rather than computed here.\n */\nfunction notifyInstrumentation<CALL_INFO extends InstrumentationCallbacks<RESULT>, RESULT>(\n onPreCall: (this: null, callInfo: CALL_INFO) => void,\n baseCallInfo: Omit<CALL_INFO, 'onPostCall'>,\n invokeOriginal: () => RESULT\n): RESULT {\n let postCallCallback: ((result: RESULT) => void) | undefined\n\n callMonitored(onPreCall, null, [\n {\n ...baseCallInfo,\n onPostCall: (callback: (result: RESULT) => void) => {\n postCallCallback = callback\n },\n } as CALL_INFO,\n ])\n\n const result = invokeOriginal()\n\n if (postCallCallback) {\n callMonitored(postCallCallback, null, [result])\n }\n\n return result\n}\n\ninterface InstrumentationCallbacks<RESULT> {\n onPostCall: (callback: (result: RESULT) => void) => void\n handlingStack?: string\n}\n\n/**\n * Copies the original constructor prototype and other static members onto the instrumentation, so that\n * `instanceof` checks keep working and statics such as `WebSocket.OPEN` remain available while\n * instrumented.\n *\n * Returns a function that restores `prototype.constructor` to its prior descriptor; call it\n * before restoring the global property in `stop()`.\n */\nfunction preserveConstructorShape(instrumentation: AnyConstructor, original: AnyConstructor): () => void {\n /**\n * Limitation: Only the original's *own* static members are copied. Statics inherited through the\n * constructor's prototype chain (e.g. `class Child extends Parent` where `Parent` defines statics)\n * are not preserved, since the instrumentation still inherits from `Function.prototype`. This is\n * acceptable for the globals we instrument (e.g. `WebSocket`, whose own statics are the only ones\n * that matter), but we would need to delegate the static prototype chain to support subclassed\n * constructors with meaningful inherited statics.\n */\n for (const key of ([] as PropertyKey[]).concat(\n Object.getOwnPropertyNames(original),\n Object.getOwnPropertySymbols(original)\n )) {\n const descriptor = Object.getOwnPropertyDescriptor(original, key) as PropertyDescriptor\n Object.defineProperty(instrumentation, key, descriptor)\n }\n\n /*\n * Limitation: Repointing `constructor` on this shared prototype affects every instance whose\n * `[[Prototype]]` is this object, including instances created before instrumentation, because\n * `constructor` is inherited rather than snapshotted per instance. Code that held `original` (or\n * whatever was in `prototype.constructor` before) as the canonical constructor and expects reference\n * equality to that value for the lifetime of the page can observe a behavior change while RUM is\n * active; restoring on `stop()` fixes this. In practice the SDK initializes as early as possible,\n * which narrows the window where pre-instrument instances exist.\n */\n const { stop: restoreOriginalConstructor } = replaceWithInstrumentation(\n original.prototype,\n 'constructor',\n original.prototype.constructor,\n instrumentation\n )\n\n return restoreOriginalConstructor\n}\n\nexport function instrumentSetter<TARGET extends { [key: string]: any }, PROPERTY extends keyof TARGET>(\n targetPrototype: TARGET,\n property: PROPERTY,\n after: (target: TARGET, value: TARGET[PROPERTY]) => void\n) {\n const originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property)\n if (!originalDescriptor?.set || !originalDescriptor.configurable) {\n return { stop: noop }\n }\n\n const stoppedInstrumentation = noop\n let instrumentation = (target: TARGET, value: TARGET[PROPERTY]) => {\n // put hooked setter into event loop to avoid of set latency\n setTimeout(() => {\n if (instrumentation !== stoppedInstrumentation) {\n after(target, value)\n }\n }, 0)\n }\n\n const instrumentationWrapper = function (this: TARGET, value: TARGET[PROPERTY]) {\n originalDescriptor.set!.call(this, value)\n instrumentation(this, value)\n }\n\n Object.defineProperty(targetPrototype, property, {\n set: instrumentationWrapper,\n })\n\n return {\n stop: () => {\n if (Object.getOwnPropertyDescriptor(targetPrototype, property)?.set === instrumentationWrapper) {\n Object.defineProperty(targetPrototype, property, originalDescriptor)\n }\n instrumentation = stoppedInstrumentation\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoGA,SAAgB,iBACd,iBACA,QACA,WACA,EAAE,yBAA6D,CAAC,GAChE;CACA,IAAI,WAAW,gBAAgB;CAE/B,IAAI,OAAO,aAAa,YACtB,IAAI,UAAU,mBAAmB,OAAO,WAAW,YAAY,OAAO,WAAW,IAAI,GACnF,WAAW;MAEX,OAAO,EAAE,MAAM,KAAK;CAIxB,IAAI,UAAU;CAEd,MAAM,kBAAkB,WAAoD;EAC1E,IAAI,SAEF,OAAO,SAAS,MAAM,MAAM,SAAS;EAGvC,MAAM,aAAa,MAAM,KAAK,SAAS;EAEvC,OAAO,sBACL,WACA;GACE,QAAQ;GACR;GACA,eAAe,uBAAuB,oBAAoB,qBAAqB,IAAI,KAAA;EACrF,SAEM,SAAS,MAAM,MAAM,UAAU,CACvC;CACF;CAEA,MAAM,EAAE,MAAM,oBAAoB,2BAA2B,iBAAiB,QAAQ,UAAU,eAAe;CAE/G,OAAO,EACL,YAAY;EACV,UAAU;EACV,gBAAgB;CAClB,EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,sBACd,WACA,aACA,WACA,EAAE,yBAA6D,CAAC,GAChE;CACA,MAAM,WAAW,UAAU;CAE3B,IAAI,OAAO,aAAa,YACtB,OAAO,EAAE,MAAM,KAAK;CAGtB,IAAI,UAAU;CAEd,MAAM,kBAAkB,WAAwE;EAI9F,IAAI,CAAC,IAAI,QACP,OAAO,QAAQ,MAAM,UAAU,MAAM,MAAM,KAAK,SAAS,CAAC;EAO5D,MAAM,YAAY,IAAI,WAAW,kBAAkB,WAAW,IAAI;EAElE,IAAI,SAEF,OAAO,QAAQ,UACb,UACA,WACA,SACF;EAGF,MAAM,aAAa,MAAM,KAAK,SAAS;EAEvC,OAAO,sBAIL,WACA;GACE;GACA,eAAe,uBAAuB,oBAAoB,0BAA0B,IAAI,KAAA;EAC1F,SAGE,QAAQ,UAAU,UAAU,YAAY,SAAS,CACrD;CACF;CAEA,MAAM,8BAA8B,yBAAyB,iBAAiB,QAAQ;CACtF,MAAM,EAAE,MAAM,oBAAoB,2BAA2B,WAAW,aAAa,UAAU,eAAe;CAE9G,OAAO,EACL,YAAY;EACV,UAAU;EACV,4BAA4B;EAC5B,gBAAgB;CAClB,EACF;AACF;;;;;AAMA,SAAS,2BACP,iBACA,QACA,UACA,iBACA;CACA,gBAAgB,UAAU;CAE1B,OAAO,EACL,YAAY;EAEV,IAAI,gBAAgB,YAAY,iBAC9B,gBAAgB,UAAU;CAE9B,EACF;AACF;;;;;;;;AASA,SAAS,sBACP,WACA,cACA,gBACQ;CACR,IAAI;CAEJ,cAAc,WAAW,MAAM,CAC7B;EACE,GAAG;EACH,aAAa,aAAuC;GAClD,mBAAmB;EACrB;CACF,CACF,CAAC;CAED,MAAM,SAAS,eAAe;CAE9B,IAAI,kBACF,cAAc,kBAAkB,MAAM,CAAC,MAAM,CAAC;CAGhD,OAAO;AACT;;;;;;;;;AAeA,SAAS,yBAAyB,iBAAiC,UAAsC;;;;;;;;;CASvG,KAAK,MAAM,OAAQ,CAAC,CAAC,CAAmB,OACtC,OAAO,oBAAoB,QAAQ,GACnC,OAAO,sBAAsB,QAAQ,CACvC,GAEE,OAAO,eAAe,iBAAiB,KADpB,OAAO,yBAAyB,UAAU,GACR,CAAC;CAYxD,MAAM,EAAE,MAAM,+BAA+B,2BAC3C,SAAS,WACT,eACA,SAAS,UAAU,aACnB,eACF;CAEA,OAAO;AACT;AAEA,SAAgB,iBACd,iBACA,UACA,OACA;CACA,MAAM,qBAAqB,OAAO,yBAAyB,iBAAiB,QAAQ;CACpF,IAAI,CAAC,oBAAoB,OAAO,CAAC,mBAAmB,cAClD,OAAO,EAAE,MAAM,KAAK;CAGtB,MAAM,yBAAyB;CAC/B,IAAI,mBAAmB,QAAgB,UAA4B;EAEjE,iBAAiB;GACf,IAAI,oBAAoB,wBACtB,MAAM,QAAQ,KAAK;EAEvB,GAAG,CAAC;CACN;CAEA,MAAM,yBAAyB,SAAwB,OAAyB;EAC9E,mBAAmB,IAAK,KAAK,MAAM,KAAK;EACxC,gBAAgB,MAAM,KAAK;CAC7B;CAEA,OAAO,eAAe,iBAAiB,UAAU,EAC/C,KAAK,uBACP,CAAC;CAED,OAAO,EACL,YAAY;EACV,IAAI,OAAO,yBAAyB,iBAAiB,QAAQ,CAAC,EAAE,QAAQ,wBACtE,OAAO,eAAe,iBAAiB,UAAU,kBAAkB;EAErE,kBAAkB;CACpB,EACF;AACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { display } from "./display.mjs";
|
|
2
|
+
import { getType } from "@openobserve/js-core/util";
|
|
3
|
+
//#region src/tools/matchOption.ts
|
|
4
|
+
function isMatchOption(item) {
|
|
5
|
+
const itemType = getType(item);
|
|
6
|
+
return itemType === "string" || itemType === "function" || item instanceof RegExp;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if value can be matched by at least one of the provided MatchOptions.
|
|
10
|
+
* When comparing strings, setting useStartsWith to true will compare the value with the start of
|
|
11
|
+
* the option, instead of requiring an exact match.
|
|
12
|
+
*/
|
|
13
|
+
function matchList(list, value, useStartsWith = false) {
|
|
14
|
+
return list.some((item) => {
|
|
15
|
+
try {
|
|
16
|
+
if (typeof item === "function") return item(value);
|
|
17
|
+
else if (item instanceof RegExp) {
|
|
18
|
+
item.lastIndex = 0;
|
|
19
|
+
return item.test(value);
|
|
20
|
+
} else if (typeof item === "string") return useStartsWith ? value.startsWith(item) : item === value;
|
|
21
|
+
} catch (e) {
|
|
22
|
+
display.error(e);
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { isMatchOption, matchList };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=matchOption.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchOption.mjs","names":[],"sources":["../../src/tools/matchOption.ts"],"sourcesContent":["import { getType } from '@openobserve/js-core/util'\nimport { display } from './display'\n\nexport type MatchOption = string | RegExp | ((value: string) => boolean)\n\nexport function isMatchOption(item: unknown): item is MatchOption {\n const itemType = getType(item)\n return itemType === 'string' || itemType === 'function' || item instanceof RegExp\n}\n\n/**\n * Returns true if value can be matched by at least one of the provided MatchOptions.\n * When comparing strings, setting useStartsWith to true will compare the value with the start of\n * the option, instead of requiring an exact match.\n */\nexport function matchList(list: MatchOption[], value: string, useStartsWith = false): boolean {\n return list.some((item) => {\n try {\n if (typeof item === 'function') {\n return item(value)\n } else if (item instanceof RegExp) {\n // Prevent stateful matching\n item.lastIndex = 0\n return item.test(value)\n } else if (typeof item === 'string') {\n return useStartsWith ? value.startsWith(item) : item === value\n }\n } catch (e) {\n display.error(e)\n }\n return false\n })\n}\n"],"mappings":";;;AAKA,SAAgB,cAAc,MAAoC;CAChE,MAAM,WAAW,QAAQ,IAAI;CAC7B,OAAO,aAAa,YAAY,aAAa,cAAc,gBAAgB;AAC7E;;;;;;AAOA,SAAgB,UAAU,MAAqB,OAAe,gBAAgB,OAAgB;CAC5F,OAAO,KAAK,MAAM,SAAS;EACzB,IAAI;GACF,IAAI,OAAO,SAAS,YAClB,OAAO,KAAK,KAAK;QACZ,IAAI,gBAAgB,QAAQ;IAEjC,KAAK,YAAY;IACjB,OAAO,KAAK,KAAK,KAAK;GACxB,OAAO,IAAI,OAAO,SAAS,UACzB,OAAO,gBAAgB,MAAM,WAAW,IAAI,IAAI,SAAS;EAE7D,SAAS,GAAG;GACV,QAAQ,MAAM,CAAC;EACjB;EACA,OAAO;CACT,CAAC;AACH"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/tools/mockable.ts
|
|
2
|
+
/**
|
|
3
|
+
* Wraps a value to make it mockable in tests. In production builds, this is a no-op
|
|
4
|
+
* that returns the value as-is. In test builds, it checks if a mock replacement has
|
|
5
|
+
* been registered and returns that instead.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // In source file:
|
|
9
|
+
* import { mockable } from '../tools/mockable'
|
|
10
|
+
* export function formatNavigationEntry(): string {
|
|
11
|
+
* const navigationEntry = mockable(getNavigationEntry)()
|
|
12
|
+
* ...
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // In test file:
|
|
16
|
+
* import { replaceMockable } from '@openobserve/browser-core/test'
|
|
17
|
+
* it('...', () => {
|
|
18
|
+
* replaceMockable(getNavigationEntry, () => FAKE_NAVIGATION_ENTRY)
|
|
19
|
+
* expect(formatNavigationEntry()).toEqual(...)
|
|
20
|
+
* })
|
|
21
|
+
*/
|
|
22
|
+
function mockable(value) {
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { mockable };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=mockable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockable.mjs","names":[],"sources":["../../src/tools/mockable.ts"],"sourcesContent":["declare const __BUILD_ENV__SDK_VERSION__: string\n\nexport const mockableReplacements = new Map<unknown, unknown>()\n\n/**\n * Wraps a value to make it mockable in tests. In production builds, this is a no-op\n * that returns the value as-is. In test builds, it checks if a mock replacement has\n * been registered and returns that instead.\n *\n * @example\n * // In source file:\n * import { mockable } from '../tools/mockable'\n * export function formatNavigationEntry(): string {\n * const navigationEntry = mockable(getNavigationEntry)()\n * ...\n * }\n *\n * // In test file:\n * import { replaceMockable } from '@openobserve/browser-core/test'\n * it('...', () => {\n * replaceMockable(getNavigationEntry, () => FAKE_NAVIGATION_ENTRY)\n * expect(formatNavigationEntry()).toEqual(...)\n * })\n */\nexport function mockable<T>(value: T): T {\n // In test builds, return a wrapper that checks for mocks at call time\n if (__BUILD_ENV__SDK_VERSION__ === 'test' && mockableReplacements.has(value)) {\n return mockableReplacements.get(value)! as T\n }\n // In production, return the value as-is\n return value\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,SAAY,OAAa;CAMvC,OAAO;AACT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { display } from "./display.mjs";
|
|
2
|
+
import "@openobserve/js-core/util";
|
|
3
|
+
import { createMonitor } from "@openobserve/js-core/monitor";
|
|
4
|
+
//#region src/tools/monitor.ts
|
|
5
|
+
let onMonitorErrorCollected;
|
|
6
|
+
const { monitored, monitor, callMonitored, monitorError } = createMonitor(display, (error) => onMonitorErrorCollected?.(error));
|
|
7
|
+
function startMonitorErrorCollection(newOnMonitorErrorCollected) {
|
|
8
|
+
onMonitorErrorCollected = newOnMonitorErrorCollected;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { callMonitored, monitor, monitorError, monitored, startMonitorErrorCollection };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=monitor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.mjs","names":[],"sources":["../../src/tools/monitor.ts"],"sourcesContent":["/* eslint-disable local-rules/disallow-side-effects */\nimport { createMonitor } from '@openobserve/js-core/monitor'\nimport { setDebugMode } from '@openobserve/js-core/util'\nimport { display } from './display'\n\n// The error-collection callback is wired lazily (via `startMonitorErrorCollection`, during telemetry\n// init), so we pass a stable forwarding function to `createMonitor` and keep the real callback in a\n// mutable holder.\nlet onMonitorErrorCollected: ((error: unknown) => void) | undefined\n\nconst { monitored, monitor, callMonitored, monitorError } = createMonitor(display, (error) =>\n onMonitorErrorCollected?.(error)\n)\n\nexport { monitored, monitor, callMonitored, monitorError }\n\nexport function startMonitorErrorCollection(newOnMonitorErrorCollected: (error: unknown) => void) {\n onMonitorErrorCollected = newOnMonitorErrorCollected\n}\n\nexport function resetMonitor() {\n onMonitorErrorCollected = undefined\n setDebugMode(false)\n}\n"],"mappings":";;;;AAQA,IAAI;AAEJ,MAAM,EAAE,WAAW,SAAS,eAAe,iBAAiB,cAAc,UAAU,UAClF,0BAA0B,KAAK,CACjC;AAIA,SAAgB,4BAA4B,4BAAsD;CAChG,0BAA0B;AAC5B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { queueMicrotask } from "./queueMicrotask.mjs";
|
|
2
|
+
//#region src/tools/observable.ts
|
|
3
|
+
var Observable = class {
|
|
4
|
+
constructor(onFirstSubscribe) {
|
|
5
|
+
this.onFirstSubscribe = onFirstSubscribe;
|
|
6
|
+
this.observers = [];
|
|
7
|
+
}
|
|
8
|
+
subscribe(observer) {
|
|
9
|
+
this.addObserver(observer);
|
|
10
|
+
return { unsubscribe: () => this.removeObserver(observer) };
|
|
11
|
+
}
|
|
12
|
+
notify(data) {
|
|
13
|
+
this.observers.forEach((observer) => observer(data));
|
|
14
|
+
}
|
|
15
|
+
addObserver(observer) {
|
|
16
|
+
this.observers.push(observer);
|
|
17
|
+
if (this.observers.length === 1 && this.onFirstSubscribe) this.onLastUnsubscribe = this.onFirstSubscribe(this) || void 0;
|
|
18
|
+
}
|
|
19
|
+
removeObserver(observer) {
|
|
20
|
+
this.observers = this.observers.filter((other) => observer !== other);
|
|
21
|
+
if (!this.observers.length && this.onLastUnsubscribe) this.onLastUnsubscribe();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
function mergeObservables(...observables) {
|
|
25
|
+
return new Observable((globalObservable) => {
|
|
26
|
+
const subscriptions = observables.map((observable) => observable.subscribe((data) => globalObservable.notify(data)));
|
|
27
|
+
return () => subscriptions.forEach((subscription) => subscription.unsubscribe());
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
var BufferedObservable = class extends Observable {
|
|
31
|
+
constructor(maxBufferSize, onDrop) {
|
|
32
|
+
super();
|
|
33
|
+
this.maxBufferSize = maxBufferSize;
|
|
34
|
+
this.onDrop = onDrop;
|
|
35
|
+
this.buffer = [];
|
|
36
|
+
this.droppedCount = 0;
|
|
37
|
+
}
|
|
38
|
+
notify(data) {
|
|
39
|
+
this.buffer.push(data);
|
|
40
|
+
if (this.buffer.length > this.maxBufferSize) {
|
|
41
|
+
this.buffer.shift();
|
|
42
|
+
this.droppedCount++;
|
|
43
|
+
}
|
|
44
|
+
super.notify(data);
|
|
45
|
+
}
|
|
46
|
+
subscribe(observer) {
|
|
47
|
+
let closed = false;
|
|
48
|
+
const subscription = { unsubscribe: () => {
|
|
49
|
+
closed = true;
|
|
50
|
+
this.removeObserver(observer);
|
|
51
|
+
} };
|
|
52
|
+
queueMicrotask(() => {
|
|
53
|
+
for (const data of this.buffer) {
|
|
54
|
+
if (closed) return;
|
|
55
|
+
observer(data);
|
|
56
|
+
}
|
|
57
|
+
if (!closed) this.addObserver(observer);
|
|
58
|
+
});
|
|
59
|
+
return subscription;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Drop buffered data and don't buffer future data. This is to avoid leaking memory when it's not
|
|
63
|
+
* needed anymore. This can be seen as a performance optimization, and things will work probably
|
|
64
|
+
* even if this method isn't called, but still useful to clarify our intent and lowering our
|
|
65
|
+
* memory impact.
|
|
66
|
+
*/
|
|
67
|
+
unbuffer() {
|
|
68
|
+
queueMicrotask(() => {
|
|
69
|
+
if (this.droppedCount > 0 && this.onDrop) this.onDrop(this.droppedCount);
|
|
70
|
+
this.maxBufferSize = this.buffer.length = 0;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
//#endregion
|
|
75
|
+
export { BufferedObservable, Observable, mergeObservables };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=observable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.mjs","names":[],"sources":["../../src/tools/observable.ts"],"sourcesContent":["import { queueMicrotask } from './queueMicrotask'\n\nexport interface Subscription {\n unsubscribe: () => void\n}\n\ntype Observer<T> = (data: T) => void\n\n// eslint-disable-next-line no-restricted-syntax\nexport class Observable<T> {\n protected observers: Array<Observer<T>> = []\n private onLastUnsubscribe?: () => void\n\n constructor(private onFirstSubscribe?: (observable: Observable<T>) => (() => void) | void) {}\n\n subscribe(observer: Observer<T>): Subscription {\n this.addObserver(observer)\n return {\n unsubscribe: () => this.removeObserver(observer),\n }\n }\n\n notify(data: T) {\n this.observers.forEach((observer) => observer(data))\n }\n\n protected addObserver(observer: Observer<T>) {\n this.observers.push(observer)\n if (this.observers.length === 1 && this.onFirstSubscribe) {\n this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined\n }\n }\n\n protected removeObserver(observer: Observer<T>) {\n this.observers = this.observers.filter((other) => observer !== other)\n if (!this.observers.length && this.onLastUnsubscribe) {\n this.onLastUnsubscribe()\n }\n }\n}\n\nexport function mergeObservables<T>(...observables: Array<Observable<T>>) {\n return new Observable<T>((globalObservable) => {\n const subscriptions: Subscription[] = observables.map((observable) =>\n observable.subscribe((data) => globalObservable.notify(data))\n )\n return () => subscriptions.forEach((subscription) => subscription.unsubscribe())\n })\n}\n\n// eslint-disable-next-line no-restricted-syntax\nexport class BufferedObservable<T> extends Observable<T> {\n private buffer: T[] = []\n private droppedCount = 0\n\n constructor(\n private maxBufferSize: number,\n private onDrop?: (count: number) => void\n ) {\n super()\n }\n\n notify(data: T) {\n this.buffer.push(data)\n if (this.buffer.length > this.maxBufferSize) {\n this.buffer.shift()\n this.droppedCount++\n }\n super.notify(data)\n }\n\n subscribe(observer: Observer<T>): Subscription {\n let closed = false\n\n const subscription = {\n unsubscribe: () => {\n closed = true\n this.removeObserver(observer)\n },\n }\n\n queueMicrotask(() => {\n for (const data of this.buffer) {\n if (closed) {\n return\n }\n observer(data)\n }\n\n if (!closed) {\n this.addObserver(observer)\n }\n })\n\n return subscription\n }\n\n /**\n * Drop buffered data and don't buffer future data. This is to avoid leaking memory when it's not\n * needed anymore. This can be seen as a performance optimization, and things will work probably\n * even if this method isn't called, but still useful to clarify our intent and lowering our\n * memory impact.\n */\n unbuffer() {\n queueMicrotask(() => {\n if (this.droppedCount > 0 && this.onDrop) {\n this.onDrop(this.droppedCount)\n }\n this.maxBufferSize = this.buffer.length = 0\n })\n }\n}\n"],"mappings":";;AASA,IAAa,aAAb,MAA2B;CAIzB,YAAY,kBAA+E;EAAvE,KAAA,mBAAA;mBAHsB,CAAC;CAGiD;CAE5F,UAAU,UAAqC;EAC7C,KAAK,YAAY,QAAQ;EACzB,OAAO,EACL,mBAAmB,KAAK,eAAe,QAAQ,EACjD;CACF;CAEA,OAAO,MAAS;EACd,KAAK,UAAU,SAAS,aAAa,SAAS,IAAI,CAAC;CACrD;CAEA,YAAsB,UAAuB;EAC3C,KAAK,UAAU,KAAK,QAAQ;EAC5B,IAAI,KAAK,UAAU,WAAW,KAAK,KAAK,kBACtC,KAAK,oBAAoB,KAAK,iBAAiB,IAAI,KAAK,KAAA;CAE5D;CAEA,eAAyB,UAAuB;EAC9C,KAAK,YAAY,KAAK,UAAU,QAAQ,UAAU,aAAa,KAAK;EACpE,IAAI,CAAC,KAAK,UAAU,UAAU,KAAK,mBACjC,KAAK,kBAAkB;CAE3B;AACF;AAEA,SAAgB,iBAAoB,GAAG,aAAmC;CACxE,OAAO,IAAI,YAAe,qBAAqB;EAC7C,MAAM,gBAAgC,YAAY,KAAK,eACrD,WAAW,WAAW,SAAS,iBAAiB,OAAO,IAAI,CAAC,CAC9D;EACA,aAAa,cAAc,SAAS,iBAAiB,aAAa,YAAY,CAAC;CACjF,CAAC;AACH;AAGA,IAAa,qBAAb,cAA2C,WAAc;CAIvD,YACE,eACA,QACA;EACA,MAAM;EAHE,KAAA,gBAAA;EACA,KAAA,SAAA;gBALY,CAAC;sBACA;CAOvB;CAEA,OAAO,MAAS;EACd,KAAK,OAAO,KAAK,IAAI;EACrB,IAAI,KAAK,OAAO,SAAS,KAAK,eAAe;GAC3C,KAAK,OAAO,MAAM;GAClB,KAAK;EACP;EACA,MAAM,OAAO,IAAI;CACnB;CAEA,UAAU,UAAqC;EAC7C,IAAI,SAAS;EAEb,MAAM,eAAe,EACnB,mBAAmB;GACjB,SAAS;GACT,KAAK,eAAe,QAAQ;EAC9B,EACF;EAEA,qBAAqB;GACnB,KAAK,MAAM,QAAQ,KAAK,QAAQ;IAC9B,IAAI,QACF;IAEF,SAAS,IAAI;GACf;GAEA,IAAI,CAAC,QACH,KAAK,YAAY,QAAQ;EAE7B,CAAC;EAED,OAAO;CACT;;;;;;;CAQA,WAAW;EACT,qBAAqB;GACnB,IAAI,KAAK,eAAe,KAAK,KAAK,QAChC,KAAK,OAAO,KAAK,YAAY;GAE/B,KAAK,gBAAgB,KAAK,OAAO,SAAS;EAC5C,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { globalObject } from "./globalObject.mjs";
|
|
2
|
+
import { monitor } from "./monitor.mjs";
|
|
3
|
+
//#region src/tools/queueMicrotask.ts
|
|
4
|
+
function queueMicrotask(callback) {
|
|
5
|
+
const nativeImplementation = globalObject.queueMicrotask;
|
|
6
|
+
if (typeof nativeImplementation === "function") nativeImplementation(monitor(callback));
|
|
7
|
+
else Promise.resolve().then(monitor(callback));
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { queueMicrotask };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=queueMicrotask.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queueMicrotask.mjs","names":[],"sources":["../../src/tools/queueMicrotask.ts"],"sourcesContent":["import { monitor } from './monitor'\nimport { globalObject } from './globalObject'\n\nexport function queueMicrotask(callback: () => void) {\n // Intentionally avoid .bind(globalObject): in some environments (e.g. Selenium GeckoDriver's\n // executeScript), globalThis is not a proper global object, so calling the bound function throws\n // 'queueMicrotask called on an object that does not implement interface Window'. Calling it as an\n // unbound method is fine, as the proper global object will be used implicitly.\n // See https://github.com/mozilla/geckodriver/issues/1798\n const nativeImplementation = globalObject.queueMicrotask\n\n if (typeof nativeImplementation === 'function') {\n nativeImplementation(monitor(callback))\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- the callback is monitored, so it'll never throw\n Promise.resolve().then(monitor(callback))\n }\n}\n"],"mappings":";;;AAGA,SAAgB,eAAe,UAAsB;CAMnD,MAAM,uBAAuB,aAAa;CAE1C,IAAI,OAAO,yBAAyB,YAClC,qBAAqB,QAAQ,QAAQ,CAAC;MAGtC,QAAQ,QAAQ,CAAC,CAAC,KAAK,QAAQ,QAAQ,CAAC;AAE5C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { noop } from "./utils/functionUtils.mjs";
|
|
2
|
+
import { concatBuffers } from "./utils/byteUtils.mjs";
|
|
3
|
+
//#region src/tools/readBytesFromStream.ts
|
|
4
|
+
/**
|
|
5
|
+
* Read bytes from a ReadableStream until the end of the stream.
|
|
6
|
+
*/
|
|
7
|
+
async function readBytesFromStream(stream) {
|
|
8
|
+
const reader = stream.getReader();
|
|
9
|
+
const chunks = [];
|
|
10
|
+
while (true) {
|
|
11
|
+
const result = await reader.read();
|
|
12
|
+
if (result.done) break;
|
|
13
|
+
chunks.push(result.value);
|
|
14
|
+
}
|
|
15
|
+
reader.cancel().catch(noop);
|
|
16
|
+
return concatBuffers(chunks);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { readBytesFromStream };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=readBytesFromStream.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readBytesFromStream.mjs","names":[],"sources":["../../src/tools/readBytesFromStream.ts"],"sourcesContent":["import type { Uint8ArrayBuffer } from './utils/byteUtils'\nimport { concatBuffers } from './utils/byteUtils'\nimport { noop } from './utils/functionUtils'\n\n/**\n * Read bytes from a ReadableStream until the end of the stream.\n */\nexport async function readBytesFromStream(stream: ReadableStream<Uint8ArrayBuffer>) {\n const reader = stream.getReader()\n const chunks: Uint8ArrayBuffer[] = []\n\n while (true) {\n const result = await reader.read()\n if (result.done) {\n break\n }\n\n chunks.push(result.value)\n }\n\n reader.cancel().catch(\n // we don't care if cancel fails, but we still need to catch the error to avoid reporting it\n // as an unhandled rejection\n noop\n )\n\n return concatBuffers(chunks)\n}\n"],"mappings":";;;;;;AAOA,eAAsB,oBAAoB,QAA0C;CAClF,MAAM,SAAS,OAAO,UAAU;CAChC,MAAM,SAA6B,CAAC;CAEpC,OAAO,MAAM;EACX,MAAM,SAAS,MAAM,OAAO,KAAK;EACjC,IAAI,OAAO,MACT;EAGF,OAAO,KAAK,OAAO,KAAK;CAC1B;CAEA,OAAO,OAAO,CAAC,CAAC,MAGd,IACF;CAEA,OAAO,cAAc,MAAM;AAC7B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { monitor } from "./monitor.mjs";
|
|
2
|
+
import { clearTimeout, setTimeout } from "./timer.mjs";
|
|
3
|
+
import { dateNow } from "@openobserve/js-core/time";
|
|
4
|
+
//#region src/tools/requestIdleCallback.ts
|
|
5
|
+
/**
|
|
6
|
+
* 'requestIdleCallback' with a shim.
|
|
7
|
+
*/
|
|
8
|
+
function requestIdleCallback(callback, opts) {
|
|
9
|
+
if (window.requestIdleCallback && window.cancelIdleCallback) {
|
|
10
|
+
const id = window.requestIdleCallback(monitor(callback), opts);
|
|
11
|
+
return () => window.cancelIdleCallback(id);
|
|
12
|
+
}
|
|
13
|
+
return requestIdleCallbackShim(callback);
|
|
14
|
+
}
|
|
15
|
+
function requestIdleCallbackShim(callback) {
|
|
16
|
+
const start = dateNow();
|
|
17
|
+
const timeoutId = setTimeout(() => {
|
|
18
|
+
callback({
|
|
19
|
+
didTimeout: false,
|
|
20
|
+
timeRemaining: () => Math.max(0, 50 - (dateNow() - start))
|
|
21
|
+
});
|
|
22
|
+
}, 0);
|
|
23
|
+
return () => clearTimeout(timeoutId);
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { requestIdleCallback };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=requestIdleCallback.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestIdleCallback.mjs","names":[],"sources":["../../src/tools/requestIdleCallback.ts"],"sourcesContent":["import { dateNow } from '@openobserve/js-core/time'\nimport { setTimeout, clearTimeout } from './timer'\nimport { monitor } from './monitor'\n\n// This type is not yet supported in TS 3.8. Imported from the TS source until we upgrade the\n// minimum supported TS version.\n// https://github.com/microsoft/TypeScript/blob/13c374a868c926f6a907666a5599992c1351b773/src/lib/dom.generated.d.ts#L9513-L9516\nexport interface IdleDeadline {\n readonly didTimeout: boolean\n timeRemaining(): DOMHighResTimeStamp\n}\n\n/**\n * 'requestIdleCallback' with a shim.\n */\nexport function requestIdleCallback(callback: (deadline: IdleDeadline) => void, opts?: { timeout?: number }) {\n // Note: check both 'requestIdleCallback' and 'cancelIdleCallback' existence because some polyfills only implement 'requestIdleCallback'.\n if (window.requestIdleCallback && window.cancelIdleCallback) {\n const id = window.requestIdleCallback(monitor(callback), opts)\n return () => window.cancelIdleCallback(id)\n }\n return requestIdleCallbackShim(callback)\n}\n\nexport const MAX_TASK_TIME = 50\n\n/*\n * Shim from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback\n * Note: there is no simple way to support the \"timeout\" option, so we ignore it.\n */\nexport function requestIdleCallbackShim(callback: (deadline: IdleDeadline) => void) {\n const start = dateNow()\n const timeoutId = setTimeout(() => {\n callback({\n didTimeout: false,\n timeRemaining: () => Math.max(0, MAX_TASK_TIME - (dateNow() - start)),\n })\n }, 0)\n return () => clearTimeout(timeoutId)\n}\n"],"mappings":";;;;;;;AAeA,SAAgB,oBAAoB,UAA4C,MAA6B;CAE3G,IAAI,OAAO,uBAAuB,OAAO,oBAAoB;EAC3D,MAAM,KAAK,OAAO,oBAAoB,QAAQ,QAAQ,GAAG,IAAI;EAC7D,aAAa,OAAO,mBAAmB,EAAE;CAC3C;CACA,OAAO,wBAAwB,QAAQ;AACzC;AAQA,SAAgB,wBAAwB,UAA4C;CAClF,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,iBAAiB;EACjC,SAAS;GACP,YAAY;GACZ,qBAAqB,KAAK,IAAI,GAAA,MAAoB,QAAQ,IAAI,MAAM;EACtE,CAAC;CACH,GAAG,CAAC;CACJ,aAAa,aAAa,SAAS;AACrC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { globalObject } from "./globalObject.mjs";
|
|
2
|
+
//#region src/tools/sendToExtension.ts
|
|
3
|
+
function sendToExtension(type, payload) {
|
|
4
|
+
const callback = globalObject.__ooBrowserSdkExtensionCallback;
|
|
5
|
+
if (callback) callback({
|
|
6
|
+
type,
|
|
7
|
+
payload
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { sendToExtension };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=sendToExtension.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendToExtension.mjs","names":[],"sources":["../../src/tools/sendToExtension.ts"],"sourcesContent":["import { globalObject } from './globalObject'\n\ninterface BrowserWindow {\n __ooBrowserSdkExtensionCallback?: (message: unknown) => void\n}\n\ntype ExtensionMessageType = 'logs' | 'record' | 'rum' | 'telemetry'\n\nexport function sendToExtension(type: ExtensionMessageType, payload: unknown) {\n const callback = (globalObject as BrowserWindow).__ooBrowserSdkExtensionCallback\n if (callback) {\n callback({ type, payload })\n }\n}\n"],"mappings":";;AAQA,SAAgB,gBAAgB,MAA4B,SAAkB;CAC5E,MAAM,WAAY,aAA+B;CACjD,IAAI,UACF,SAAS;EAAE;EAAM;CAAQ,CAAC;AAE9B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { noop } from "../utils/functionUtils.mjs";
|
|
2
|
+
//#region src/tools/serialisation/jsonStringify.ts
|
|
3
|
+
/**
|
|
4
|
+
* Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that
|
|
5
|
+
* because some sites badly override toJSON on certain objects. Removing all toJSON methods from
|
|
6
|
+
* nested values would be too costly, so we just detach them from the root value, and native classes
|
|
7
|
+
* used to build JSON values (Array and Object).
|
|
8
|
+
*
|
|
9
|
+
* Note: this still assumes that JSON.stringify is correct.
|
|
10
|
+
*/
|
|
11
|
+
function jsonStringify(value, replacer, space) {
|
|
12
|
+
if (typeof value !== "object" || value === null) return JSON.stringify(value);
|
|
13
|
+
const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);
|
|
14
|
+
const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);
|
|
15
|
+
const restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value));
|
|
16
|
+
const restoreValueToJson = detachToJsonMethod(value);
|
|
17
|
+
try {
|
|
18
|
+
return JSON.stringify(value, replacer, space);
|
|
19
|
+
} catch {
|
|
20
|
+
return "<error: unable to serialize object>";
|
|
21
|
+
} finally {
|
|
22
|
+
restoreObjectPrototypeToJson();
|
|
23
|
+
restoreArrayPrototypeToJson();
|
|
24
|
+
restoreValuePrototypeToJson();
|
|
25
|
+
restoreValueToJson();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function detachToJsonMethod(value) {
|
|
29
|
+
const object = value;
|
|
30
|
+
const objectToJson = object.toJSON;
|
|
31
|
+
if (objectToJson) {
|
|
32
|
+
delete object.toJSON;
|
|
33
|
+
return () => {
|
|
34
|
+
object.toJSON = objectToJson;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return noop;
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { detachToJsonMethod, jsonStringify };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=jsonStringify.mjs.map
|