@pratham.raval/browser-core 6.22.3
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 +3 -0
- package/cjs/boot/displayAlreadyInitializedError.d.ts +2 -0
- package/cjs/boot/displayAlreadyInitializedError.js +10 -0
- package/cjs/boot/displayAlreadyInitializedError.js.map +1 -0
- package/cjs/boot/init.d.ts +14 -0
- package/cjs/boot/init.js +39 -0
- package/cjs/boot/init.js.map +1 -0
- package/cjs/browser/addEventListener.d.ts +87 -0
- package/cjs/browser/addEventListener.js +55 -0
- package/cjs/browser/addEventListener.js.map +1 -0
- package/cjs/browser/browser.types.d.ts +51 -0
- package/cjs/browser/browser.types.js +6 -0
- package/cjs/browser/browser.types.js.map +1 -0
- package/cjs/browser/cookie.d.ts +18 -0
- package/cjs/browser/cookie.js +101 -0
- package/cjs/browser/cookie.js.map +1 -0
- package/cjs/browser/fetchObservable.d.ts +25 -0
- package/cjs/browser/fetchObservable.js +79 -0
- package/cjs/browser/fetchObservable.js.map +1 -0
- package/cjs/browser/pageMayExitObservable.d.ts +14 -0
- package/cjs/browser/pageMayExitObservable.js +45 -0
- package/cjs/browser/pageMayExitObservable.js.map +1 -0
- package/cjs/browser/runOnReadyState.d.ts +5 -0
- package/cjs/browser/runOnReadyState.js +20 -0
- package/cjs/browser/runOnReadyState.js.map +1 -0
- package/cjs/browser/xhrObservable.d.ts +23 -0
- package/cjs/browser/xhrObservable.js +83 -0
- package/cjs/browser/xhrObservable.js.map +1 -0
- package/cjs/domain/allowedTrackingOrigins.d.ts +4 -0
- package/cjs/domain/allowedTrackingOrigins.js +25 -0
- package/cjs/domain/allowedTrackingOrigins.js.map +1 -0
- package/cjs/domain/bufferedData.d.ts +14 -0
- package/cjs/domain/bufferedData.js +22 -0
- package/cjs/domain/bufferedData.js.map +1 -0
- package/cjs/domain/configuration/configuration.d.ts +303 -0
- package/cjs/domain/configuration/configuration.js +152 -0
- package/cjs/domain/configuration/configuration.js.map +1 -0
- package/cjs/domain/configuration/endpointBuilder.d.ts +12 -0
- package/cjs/domain/configuration/endpointBuilder.js +78 -0
- package/cjs/domain/configuration/endpointBuilder.js.map +1 -0
- package/cjs/domain/configuration/index.d.ts +5 -0
- package/cjs/domain/configuration/index.js +16 -0
- package/cjs/domain/configuration/index.js.map +1 -0
- package/cjs/domain/configuration/transportConfiguration.d.ts +20 -0
- package/cjs/domain/configuration/transportConfiguration.js +54 -0
- package/cjs/domain/configuration/transportConfiguration.js.map +1 -0
- package/cjs/domain/connectivity/connectivity.d.ts +14 -0
- package/cjs/domain/connectivity/connectivity.js +14 -0
- package/cjs/domain/connectivity/connectivity.js.map +1 -0
- package/cjs/domain/connectivity/index.d.ts +1 -0
- package/cjs/domain/connectivity/index.js +18 -0
- package/cjs/domain/connectivity/index.js.map +1 -0
- package/cjs/domain/console/consoleObservable.d.ts +21 -0
- package/cjs/domain/console/consoleObservable.js +84 -0
- package/cjs/domain/console/consoleObservable.js.map +1 -0
- package/cjs/domain/context/contextConstants.d.ts +21 -0
- package/cjs/domain/context/contextConstants.js +18 -0
- package/cjs/domain/context/contextConstants.js.map +1 -0
- package/cjs/domain/context/contextManager.d.ts +19 -0
- package/cjs/domain/context/contextManager.js +60 -0
- package/cjs/domain/context/contextManager.js.map +1 -0
- package/cjs/domain/context/contextUtils.d.ts +5 -0
- package/cjs/domain/context/contextUtils.js +16 -0
- package/cjs/domain/context/contextUtils.js.map +1 -0
- package/cjs/domain/context/defineContextMethod.d.ts +6 -0
- package/cjs/domain/context/defineContextMethod.js +21 -0
- package/cjs/domain/context/defineContextMethod.js.map +1 -0
- package/cjs/domain/context/storeContextManager.d.ts +6 -0
- package/cjs/domain/context/storeContextManager.js +40 -0
- package/cjs/domain/context/storeContextManager.js.map +1 -0
- package/cjs/domain/contexts/accountContext.d.ts +26 -0
- package/cjs/domain/contexts/accountContext.js +33 -0
- package/cjs/domain/contexts/accountContext.js.map +1 -0
- package/cjs/domain/contexts/globalContext.d.ts +18 -0
- package/cjs/domain/contexts/globalContext.js +21 -0
- package/cjs/domain/contexts/globalContext.js.map +1 -0
- package/cjs/domain/contexts/rumInternalContext.type.d.ts +14 -0
- package/cjs/domain/contexts/rumInternalContext.type.js +3 -0
- package/cjs/domain/contexts/rumInternalContext.type.js.map +1 -0
- package/cjs/domain/contexts/userContext.d.ts +29 -0
- package/cjs/domain/contexts/userContext.js +45 -0
- package/cjs/domain/contexts/userContext.js.map +1 -0
- package/cjs/domain/deflate/deflate.types.d.ts +40 -0
- package/cjs/domain/deflate/deflate.types.js +3 -0
- package/cjs/domain/deflate/deflate.types.js.map +1 -0
- package/cjs/domain/deflate/index.d.ts +1 -0
- package/cjs/domain/deflate/index.js +18 -0
- package/cjs/domain/deflate/index.js.map +1 -0
- package/cjs/domain/error/error.d.ts +23 -0
- package/cjs/domain/error/error.js +74 -0
- package/cjs/domain/error/error.js.map +1 -0
- package/cjs/domain/error/error.types.d.ts +47 -0
- package/cjs/domain/error/error.types.js +13 -0
- package/cjs/domain/error/error.types.js.map +1 -0
- package/cjs/domain/error/trackRuntimeError.d.ts +11 -0
- package/cjs/domain/error/trackRuntimeError.js +48 -0
- package/cjs/domain/error/trackRuntimeError.js.map +1 -0
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +39 -0
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
- package/cjs/domain/extension/extensionUtils.d.ts +10 -0
- package/cjs/domain/extension/extensionUtils.js +30 -0
- package/cjs/domain/extension/extensionUtils.js.map +1 -0
- package/cjs/domain/intakeSites.d.ts +8 -0
- package/cjs/domain/intakeSites.js +11 -0
- package/cjs/domain/intakeSites.js.map +1 -0
- package/cjs/domain/report/browser.types.d.ts +34 -0
- package/cjs/domain/report/browser.types.js +3 -0
- package/cjs/domain/report/browser.types.js.map +1 -0
- package/cjs/domain/report/reportObservable.d.ts +14 -0
- package/cjs/domain/report/reportObservable.js +99 -0
- package/cjs/domain/report/reportObservable.js.map +1 -0
- package/cjs/domain/resourceUtils.d.ts +18 -0
- package/cjs/domain/resourceUtils.js +20 -0
- package/cjs/domain/resourceUtils.js.map +1 -0
- package/cjs/domain/session/oldCookiesMigration.d.ts +11 -0
- package/cjs/domain/session/oldCookiesMigration.js +40 -0
- package/cjs/domain/session/oldCookiesMigration.js.map +1 -0
- package/cjs/domain/session/sessionConstants.d.ts +15 -0
- package/cjs/domain/session/sessionConstants.js +16 -0
- package/cjs/domain/session/sessionConstants.js.map +1 -0
- package/cjs/domain/session/sessionManager.d.ts +28 -0
- package/cjs/domain/session/sessionManager.js +185 -0
- package/cjs/domain/session/sessionManager.js.map +1 -0
- package/cjs/domain/session/sessionState.d.ts +16 -0
- package/cjs/domain/session/sessionState.js +76 -0
- package/cjs/domain/session/sessionState.js.map +1 -0
- package/cjs/domain/session/sessionStateValidation.d.ts +3 -0
- package/cjs/domain/session/sessionStateValidation.js +11 -0
- package/cjs/domain/session/sessionStateValidation.js.map +1 -0
- package/cjs/domain/session/sessionStore.d.ts +38 -0
- package/cjs/domain/session/sessionStore.js +181 -0
- package/cjs/domain/session/sessionStore.js.map +1 -0
- package/cjs/domain/session/sessionStoreOperations.d.ts +12 -0
- package/cjs/domain/session/sessionStoreOperations.js +119 -0
- package/cjs/domain/session/sessionStoreOperations.js.map +1 -0
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +8 -0
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +56 -0
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +4 -0
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +41 -0
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +5 -0
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +31 -0
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
- package/cjs/domain/tags.d.ts +6 -0
- package/cjs/domain/tags.js +67 -0
- package/cjs/domain/tags.js.map +1 -0
- package/cjs/domain/telemetry/index.d.ts +4 -0
- package/cjs/domain/telemetry/index.js +28 -0
- package/cjs/domain/telemetry/index.js.map +1 -0
- package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js +9 -0
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
- package/cjs/domain/telemetry/telemetry.d.ts +56 -0
- package/cjs/domain/telemetry/telemetry.js +248 -0
- package/cjs/domain/telemetry/telemetry.js.map +1 -0
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +858 -0
- package/cjs/domain/telemetry/telemetryEvent.types.js +7 -0
- package/cjs/domain/telemetry/telemetryEvent.types.js.map +1 -0
- package/cjs/domain/trackingConsent.d.ts +13 -0
- package/cjs/domain/trackingConsent.js +28 -0
- package/cjs/domain/trackingConsent.js.map +1 -0
- package/cjs/index.d.ts +100 -0
- package/cjs/index.js +193 -0
- package/cjs/index.js.map +1 -0
- package/cjs/tools/abstractHooks.d.ts +24 -0
- package/cjs/tools/abstractHooks.js +41 -0
- package/cjs/tools/abstractHooks.js.map +1 -0
- package/cjs/tools/abstractLifeCycle.d.ts +23 -0
- package/cjs/tools/abstractLifeCycle.js +28 -0
- package/cjs/tools/abstractLifeCycle.js.map +1 -0
- package/cjs/tools/boundedBuffer.d.ts +16 -0
- package/cjs/tools/boundedBuffer.js +32 -0
- package/cjs/tools/boundedBuffer.js.map +1 -0
- package/cjs/tools/catchUserErrors.d.ts +1 -0
- package/cjs/tools/catchUserErrors.js +15 -0
- package/cjs/tools/catchUserErrors.js.map +1 -0
- package/cjs/tools/display.d.ts +38 -0
- package/cjs/tools/display.js +44 -0
- package/cjs/tools/display.js.map +1 -0
- package/cjs/tools/encoder.d.ts +54 -0
- package/cjs/tools/encoder.js +40 -0
- package/cjs/tools/encoder.js.map +1 -0
- package/cjs/tools/experimentalFeatures.d.ts +20 -0
- package/cjs/tools/experimentalFeatures.js +49 -0
- package/cjs/tools/experimentalFeatures.js.map +1 -0
- package/cjs/tools/getZoneJsOriginalValue.d.ts +19 -0
- package/cjs/tools/getZoneJsOriginalValue.js +29 -0
- package/cjs/tools/getZoneJsOriginalValue.js.map +1 -0
- package/cjs/tools/globalObject.d.ts +19 -0
- package/cjs/tools/globalObject.js +44 -0
- package/cjs/tools/globalObject.js.map +1 -0
- package/cjs/tools/instrumentMethod.d.ts +75 -0
- package/cjs/tools/instrumentMethod.js +118 -0
- package/cjs/tools/instrumentMethod.js.map +1 -0
- package/cjs/tools/matchOption.d.ts +8 -0
- package/cjs/tools/matchOption.js +35 -0
- package/cjs/tools/matchOption.js.map +1 -0
- package/cjs/tools/mergeInto.d.ts +25 -0
- package/cjs/tools/mergeInto.js +98 -0
- package/cjs/tools/mergeInto.js.map +1 -0
- package/cjs/tools/monitor.d.ts +9 -0
- package/cjs/tools/monitor.js +62 -0
- package/cjs/tools/monitor.js.map +1 -0
- package/cjs/tools/observable.d.ts +30 -0
- package/cjs/tools/observable.js +89 -0
- package/cjs/tools/observable.js.map +1 -0
- package/cjs/tools/queueMicrotask.d.ts +1 -0
- package/cjs/tools/queueMicrotask.js +17 -0
- package/cjs/tools/queueMicrotask.js.map +1 -0
- package/cjs/tools/readBytesFromStream.d.ts +11 -0
- package/cjs/tools/readBytesFromStream.js +63 -0
- package/cjs/tools/readBytesFromStream.js.map +1 -0
- package/cjs/tools/requestIdleCallback.d.ts +12 -0
- package/cjs/tools/requestIdleCallback.js +35 -0
- package/cjs/tools/requestIdleCallback.js.map +1 -0
- package/cjs/tools/sendToExtension.d.ts +3 -0
- package/cjs/tools/sendToExtension.js +11 -0
- package/cjs/tools/sendToExtension.js.map +1 -0
- package/cjs/tools/serialisation/context.d.ts +9 -0
- package/cjs/tools/serialisation/context.js +3 -0
- package/cjs/tools/serialisation/context.js.map +1 -0
- package/cjs/tools/serialisation/jsonStringify.d.ts +13 -0
- package/cjs/tools/serialisation/jsonStringify.js +48 -0
- package/cjs/tools/serialisation/jsonStringify.js.map +1 -0
- package/cjs/tools/serialisation/sanitize.d.ts +18 -0
- package/cjs/tools/serialisation/sanitize.js +188 -0
- package/cjs/tools/serialisation/sanitize.js.map +1 -0
- package/cjs/tools/stackTrace/computeStackTrace.d.ts +25 -0
- package/cjs/tools/stackTrace/computeStackTrace.js +187 -0
- package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -0
- package/cjs/tools/stackTrace/handlingStack.d.ts +10 -0
- package/cjs/tools/stackTrace/handlingStack.js +46 -0
- package/cjs/tools/stackTrace/handlingStack.js.map +1 -0
- package/cjs/tools/taskQueue.d.ts +15 -0
- package/cjs/tools/taskQueue.js +54 -0
- package/cjs/tools/taskQueue.js.map +1 -0
- package/cjs/tools/timer.d.ts +5 -0
- package/cjs/tools/timer.js +22 -0
- package/cjs/tools/timer.js.map +1 -0
- package/cjs/tools/utils/arrayUtils.d.ts +3 -0
- package/cjs/tools/utils/arrayUtils.js +20 -0
- package/cjs/tools/utils/arrayUtils.js.map +1 -0
- package/cjs/tools/utils/browserDetection.d.ts +8 -0
- package/cjs/tools/utils/browserDetection.js +33 -0
- package/cjs/tools/utils/browserDetection.js.map +1 -0
- package/cjs/tools/utils/byteUtils.d.ts +8 -0
- package/cjs/tools/utils/byteUtils.js +30 -0
- package/cjs/tools/utils/byteUtils.js.map +1 -0
- package/cjs/tools/utils/functionUtils.d.ts +8 -0
- package/cjs/tools/utils/functionUtils.js +43 -0
- package/cjs/tools/utils/functionUtils.js.map +1 -0
- package/cjs/tools/utils/numberUtils.d.ts +9 -0
- package/cjs/tools/utils/numberUtils.js +24 -0
- package/cjs/tools/utils/numberUtils.js.map +1 -0
- package/cjs/tools/utils/objectUtils.d.ts +10 -0
- package/cjs/tools/utils/objectUtils.js +23 -0
- package/cjs/tools/utils/objectUtils.js.map +1 -0
- package/cjs/tools/utils/polyfills.d.ts +7 -0
- package/cjs/tools/utils/polyfills.js +23 -0
- package/cjs/tools/utils/polyfills.js.map +1 -0
- package/cjs/tools/utils/responseUtils.d.ts +2 -0
- package/cjs/tools/utils/responseUtils.js +17 -0
- package/cjs/tools/utils/responseUtils.js.map +1 -0
- package/cjs/tools/utils/stringUtils.d.ts +8 -0
- package/cjs/tools/utils/stringUtils.js +55 -0
- package/cjs/tools/utils/stringUtils.js.map +1 -0
- package/cjs/tools/utils/timeUtils.d.ts +53 -0
- package/cjs/tools/utils/timeUtils.js +101 -0
- package/cjs/tools/utils/timeUtils.js.map +1 -0
- package/cjs/tools/utils/timezone.d.ts +1 -0
- package/cjs/tools/utils/timezone.js +13 -0
- package/cjs/tools/utils/timezone.js.map +1 -0
- package/cjs/tools/utils/typeUtils.d.ts +4 -0
- package/cjs/tools/utils/typeUtils.js +16 -0
- package/cjs/tools/utils/typeUtils.js.map +1 -0
- package/cjs/tools/utils/urlPolyfill.d.ts +5 -0
- package/cjs/tools/utils/urlPolyfill.js +59 -0
- package/cjs/tools/utils/urlPolyfill.js.map +1 -0
- package/cjs/tools/valueHistory.d.ts +27 -0
- package/cjs/tools/valueHistory.js +104 -0
- package/cjs/tools/valueHistory.js.map +1 -0
- package/cjs/transport/batch.d.ts +16 -0
- package/cjs/transport/batch.js +108 -0
- package/cjs/transport/batch.js.map +1 -0
- package/cjs/transport/eventBridge.d.ts +21 -0
- package/cjs/transport/eventBridge.js +46 -0
- package/cjs/transport/eventBridge.js.map +1 -0
- package/cjs/transport/flushController.d.ts +58 -0
- package/cjs/transport/flushController.js +109 -0
- package/cjs/transport/flushController.js.map +1 -0
- package/cjs/transport/httpRequest.d.ts +51 -0
- package/cjs/transport/httpRequest.js +80 -0
- package/cjs/transport/httpRequest.js.map +1 -0
- package/cjs/transport/index.d.ts +7 -0
- package/cjs/transport/index.js +14 -0
- package/cjs/transport/index.js.map +1 -0
- package/cjs/transport/sendWithRetryStrategy.d.ts +41 -0
- package/cjs/transport/sendWithRetryStrategy.js +163 -0
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -0
- package/esm/boot/displayAlreadyInitializedError.d.ts +2 -0
- package/esm/boot/displayAlreadyInitializedError.js +7 -0
- package/esm/boot/displayAlreadyInitializedError.js.map +1 -0
- package/esm/boot/init.d.ts +14 -0
- package/esm/boot/init.js +35 -0
- package/esm/boot/init.js.map +1 -0
- package/esm/browser/addEventListener.d.ts +87 -0
- package/esm/browser/addEventListener.js +51 -0
- package/esm/browser/addEventListener.js.map +1 -0
- package/esm/browser/browser.types.d.ts +51 -0
- package/esm/browser/browser.types.js +5 -0
- package/esm/browser/browser.types.js.map +1 -0
- package/esm/browser/cookie.d.ts +18 -0
- package/esm/browser/cookie.js +91 -0
- package/esm/browser/cookie.js.map +1 -0
- package/esm/browser/fetchObservable.d.ts +25 -0
- package/esm/browser/fetchObservable.js +75 -0
- package/esm/browser/fetchObservable.js.map +1 -0
- package/esm/browser/pageMayExitObservable.d.ts +14 -0
- package/esm/browser/pageMayExitObservable.js +40 -0
- package/esm/browser/pageMayExitObservable.js.map +1 -0
- package/esm/browser/runOnReadyState.d.ts +5 -0
- package/esm/browser/runOnReadyState.js +16 -0
- package/esm/browser/runOnReadyState.js.map +1 -0
- package/esm/browser/xhrObservable.d.ts +23 -0
- package/esm/browser/xhrObservable.js +80 -0
- package/esm/browser/xhrObservable.js.map +1 -0
- package/esm/domain/allowedTrackingOrigins.d.ts +4 -0
- package/esm/domain/allowedTrackingOrigins.js +21 -0
- package/esm/domain/allowedTrackingOrigins.js.map +1 -0
- package/esm/domain/bufferedData.d.ts +14 -0
- package/esm/domain/bufferedData.js +19 -0
- package/esm/domain/bufferedData.js.map +1 -0
- package/esm/domain/configuration/configuration.d.ts +303 -0
- package/esm/domain/configuration/configuration.js +146 -0
- package/esm/domain/configuration/configuration.js.map +1 -0
- package/esm/domain/configuration/endpointBuilder.d.ts +12 -0
- package/esm/domain/configuration/endpointBuilder.js +74 -0
- package/esm/domain/configuration/endpointBuilder.js.map +1 -0
- package/esm/domain/configuration/index.d.ts +5 -0
- package/esm/domain/configuration/index.js +4 -0
- package/esm/domain/configuration/index.js.map +1 -0
- package/esm/domain/configuration/transportConfiguration.d.ts +20 -0
- package/esm/domain/configuration/transportConfiguration.js +50 -0
- package/esm/domain/configuration/transportConfiguration.js.map +1 -0
- package/esm/domain/connectivity/connectivity.d.ts +14 -0
- package/esm/domain/connectivity/connectivity.js +11 -0
- package/esm/domain/connectivity/connectivity.js.map +1 -0
- package/esm/domain/connectivity/index.d.ts +1 -0
- package/esm/domain/connectivity/index.js +2 -0
- package/esm/domain/connectivity/index.js.map +1 -0
- package/esm/domain/console/consoleObservable.d.ts +21 -0
- package/esm/domain/console/consoleObservable.js +80 -0
- package/esm/domain/console/consoleObservable.js.map +1 -0
- package/esm/domain/context/contextConstants.d.ts +21 -0
- package/esm/domain/context/contextConstants.js +15 -0
- package/esm/domain/context/contextConstants.js.map +1 -0
- package/esm/domain/context/contextManager.d.ts +19 -0
- package/esm/domain/context/contextManager.js +57 -0
- package/esm/domain/context/contextManager.js.map +1 -0
- package/esm/domain/context/contextUtils.d.ts +5 -0
- package/esm/domain/context/contextUtils.js +13 -0
- package/esm/domain/context/contextUtils.js.map +1 -0
- package/esm/domain/context/defineContextMethod.d.ts +6 -0
- package/esm/domain/context/defineContextMethod.js +17 -0
- package/esm/domain/context/defineContextMethod.js.map +1 -0
- package/esm/domain/context/storeContextManager.d.ts +6 -0
- package/esm/domain/context/storeContextManager.js +35 -0
- package/esm/domain/context/storeContextManager.js.map +1 -0
- package/esm/domain/contexts/accountContext.d.ts +26 -0
- package/esm/domain/contexts/accountContext.js +29 -0
- package/esm/domain/contexts/accountContext.js.map +1 -0
- package/esm/domain/contexts/globalContext.d.ts +18 -0
- package/esm/domain/contexts/globalContext.js +17 -0
- package/esm/domain/contexts/globalContext.js.map +1 -0
- package/esm/domain/contexts/rumInternalContext.type.d.ts +14 -0
- package/esm/domain/contexts/rumInternalContext.type.js +2 -0
- package/esm/domain/contexts/rumInternalContext.type.js.map +1 -0
- package/esm/domain/contexts/userContext.d.ts +29 -0
- package/esm/domain/contexts/userContext.js +41 -0
- package/esm/domain/contexts/userContext.js.map +1 -0
- package/esm/domain/deflate/deflate.types.d.ts +40 -0
- package/esm/domain/deflate/deflate.types.js +2 -0
- package/esm/domain/deflate/deflate.types.js.map +1 -0
- package/esm/domain/deflate/index.d.ts +1 -0
- package/esm/domain/deflate/index.js +2 -0
- package/esm/domain/deflate/index.js.map +1 -0
- package/esm/domain/error/error.d.ts +23 -0
- package/esm/domain/error/error.js +65 -0
- package/esm/domain/error/error.js.map +1 -0
- package/esm/domain/error/error.types.d.ts +47 -0
- package/esm/domain/error/error.types.js +10 -0
- package/esm/domain/error/error.types.js.map +1 -0
- package/esm/domain/error/trackRuntimeError.d.ts +11 -0
- package/esm/domain/error/trackRuntimeError.js +43 -0
- package/esm/domain/error/trackRuntimeError.js.map +1 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +5 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js +36 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -0
- package/esm/domain/extension/extensionUtils.d.ts +10 -0
- package/esm/domain/extension/extensionUtils.js +25 -0
- package/esm/domain/extension/extensionUtils.js.map +1 -0
- package/esm/domain/intakeSites.d.ts +8 -0
- package/esm/domain/intakeSites.js +8 -0
- package/esm/domain/intakeSites.js.map +1 -0
- package/esm/domain/report/browser.types.d.ts +34 -0
- package/esm/domain/report/browser.types.js +2 -0
- package/esm/domain/report/browser.types.js.map +1 -0
- package/esm/domain/report/reportObservable.d.ts +14 -0
- package/esm/domain/report/reportObservable.js +95 -0
- package/esm/domain/report/reportObservable.js.map +1 -0
- package/esm/domain/resourceUtils.d.ts +18 -0
- package/esm/domain/resourceUtils.js +17 -0
- package/esm/domain/resourceUtils.js.map +1 -0
- package/esm/domain/session/oldCookiesMigration.d.ts +11 -0
- package/esm/domain/session/oldCookiesMigration.js +36 -0
- package/esm/domain/session/oldCookiesMigration.js.map +1 -0
- package/esm/domain/session/sessionConstants.d.ts +15 -0
- package/esm/domain/session/sessionConstants.js +13 -0
- package/esm/domain/session/sessionConstants.js.map +1 -0
- package/esm/domain/session/sessionManager.d.ts +28 -0
- package/esm/domain/session/sessionManager.js +180 -0
- package/esm/domain/session/sessionManager.js.map +1 -0
- package/esm/domain/session/sessionState.d.ts +16 -0
- package/esm/domain/session/sessionState.js +66 -0
- package/esm/domain/session/sessionState.js.map +1 -0
- package/esm/domain/session/sessionStateValidation.d.ts +3 -0
- package/esm/domain/session/sessionStateValidation.js +7 -0
- package/esm/domain/session/sessionStateValidation.js.map +1 -0
- package/esm/domain/session/sessionStore.d.ts +38 -0
- package/esm/domain/session/sessionStore.js +175 -0
- package/esm/domain/session/sessionStore.js.map +1 -0
- package/esm/domain/session/sessionStoreOperations.d.ts +12 -0
- package/esm/domain/session/sessionStoreOperations.js +114 -0
- package/esm/domain/session/sessionStoreOperations.js.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +8 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.js +50 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +4 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +37 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +2 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +12 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.js +24 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +1 -0
- package/esm/domain/tags.d.ts +6 -0
- package/esm/domain/tags.js +60 -0
- package/esm/domain/tags.js.map +1 -0
- package/esm/domain/telemetry/index.d.ts +4 -0
- package/esm/domain/telemetry/index.js +3 -0
- package/esm/domain/telemetry/index.js.map +1 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +18 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.js +6 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +1 -0
- package/esm/domain/telemetry/telemetry.d.ts +56 -0
- package/esm/domain/telemetry/telemetry.js +235 -0
- package/esm/domain/telemetry/telemetry.js.map +1 -0
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +858 -0
- package/esm/domain/telemetry/telemetryEvent.types.js +6 -0
- package/esm/domain/telemetry/telemetryEvent.types.js.map +1 -0
- package/esm/domain/trackingConsent.d.ts +13 -0
- package/esm/domain/trackingConsent.js +24 -0
- package/esm/domain/trackingConsent.js.map +1 -0
- package/esm/index.d.ts +100 -0
- package/esm/index.js +76 -0
- package/esm/index.js.map +1 -0
- package/esm/tools/abstractHooks.d.ts +24 -0
- package/esm/tools/abstractHooks.js +37 -0
- package/esm/tools/abstractHooks.js.map +1 -0
- package/esm/tools/abstractLifeCycle.d.ts +23 -0
- package/esm/tools/abstractLifeCycle.js +24 -0
- package/esm/tools/abstractLifeCycle.js.map +1 -0
- package/esm/tools/boundedBuffer.d.ts +16 -0
- package/esm/tools/boundedBuffer.js +29 -0
- package/esm/tools/boundedBuffer.js.map +1 -0
- package/esm/tools/catchUserErrors.d.ts +1 -0
- package/esm/tools/catchUserErrors.js +12 -0
- package/esm/tools/catchUserErrors.js.map +1 -0
- package/esm/tools/display.d.ts +38 -0
- package/esm/tools/display.js +41 -0
- package/esm/tools/display.js.map +1 -0
- package/esm/tools/encoder.d.ts +54 -0
- package/esm/tools/encoder.js +37 -0
- package/esm/tools/encoder.js.map +1 -0
- package/esm/tools/experimentalFeatures.d.ts +20 -0
- package/esm/tools/experimentalFeatures.js +41 -0
- package/esm/tools/experimentalFeatures.js.map +1 -0
- package/esm/tools/getZoneJsOriginalValue.d.ts +19 -0
- package/esm/tools/getZoneJsOriginalValue.js +26 -0
- package/esm/tools/getZoneJsOriginalValue.js.map +1 -0
- package/esm/tools/globalObject.d.ts +19 -0
- package/esm/tools/globalObject.js +40 -0
- package/esm/tools/globalObject.js.map +1 -0
- package/esm/tools/instrumentMethod.d.ts +75 -0
- package/esm/tools/instrumentMethod.js +114 -0
- package/esm/tools/instrumentMethod.js.map +1 -0
- package/esm/tools/matchOption.d.ts +8 -0
- package/esm/tools/matchOption.js +31 -0
- package/esm/tools/matchOption.js.map +1 -0
- package/esm/tools/mergeInto.d.ts +25 -0
- package/esm/tools/mergeInto.js +93 -0
- package/esm/tools/mergeInto.js.map +1 -0
- package/esm/tools/monitor.d.ts +9 -0
- package/esm/tools/monitor.js +52 -0
- package/esm/tools/monitor.js.map +1 -0
- package/esm/tools/observable.d.ts +30 -0
- package/esm/tools/observable.js +83 -0
- package/esm/tools/observable.js.map +1 -0
- package/esm/tools/queueMicrotask.d.ts +1 -0
- package/esm/tools/queueMicrotask.js +14 -0
- package/esm/tools/queueMicrotask.js.map +1 -0
- package/esm/tools/readBytesFromStream.d.ts +11 -0
- package/esm/tools/readBytesFromStream.js +60 -0
- package/esm/tools/readBytesFromStream.js.map +1 -0
- package/esm/tools/requestIdleCallback.d.ts +12 -0
- package/esm/tools/requestIdleCallback.js +30 -0
- package/esm/tools/requestIdleCallback.js.map +1 -0
- package/esm/tools/sendToExtension.d.ts +3 -0
- package/esm/tools/sendToExtension.js +8 -0
- package/esm/tools/sendToExtension.js.map +1 -0
- package/esm/tools/serialisation/context.d.ts +9 -0
- package/esm/tools/serialisation/context.js +2 -0
- package/esm/tools/serialisation/context.js.map +1 -0
- package/esm/tools/serialisation/jsonStringify.d.ts +13 -0
- package/esm/tools/serialisation/jsonStringify.js +44 -0
- package/esm/tools/serialisation/jsonStringify.js.map +1 -0
- package/esm/tools/serialisation/sanitize.d.ts +18 -0
- package/esm/tools/serialisation/sanitize.js +185 -0
- package/esm/tools/serialisation/sanitize.js.map +1 -0
- package/esm/tools/stackTrace/computeStackTrace.d.ts +25 -0
- package/esm/tools/stackTrace/computeStackTrace.js +183 -0
- package/esm/tools/stackTrace/computeStackTrace.js.map +1 -0
- package/esm/tools/stackTrace/handlingStack.d.ts +10 -0
- package/esm/tools/stackTrace/handlingStack.js +41 -0
- package/esm/tools/stackTrace/handlingStack.js.map +1 -0
- package/esm/tools/taskQueue.d.ts +15 -0
- package/esm/tools/taskQueue.js +50 -0
- package/esm/tools/taskQueue.js.map +1 -0
- package/esm/tools/timer.d.ts +5 -0
- package/esm/tools/timer.js +16 -0
- package/esm/tools/timer.js.map +1 -0
- package/esm/tools/utils/arrayUtils.d.ts +3 -0
- package/esm/tools/utils/arrayUtils.js +15 -0
- package/esm/tools/utils/arrayUtils.js.map +1 -0
- package/esm/tools/utils/browserDetection.d.ts +8 -0
- package/esm/tools/utils/browserDetection.js +28 -0
- package/esm/tools/utils/browserDetection.js.map +1 -0
- package/esm/tools/utils/byteUtils.d.ts +8 -0
- package/esm/tools/utils/byteUtils.js +25 -0
- package/esm/tools/utils/byteUtils.js.map +1 -0
- package/esm/tools/utils/functionUtils.d.ts +8 -0
- package/esm/tools/utils/functionUtils.js +39 -0
- package/esm/tools/utils/functionUtils.js.map +1 -0
- package/esm/tools/utils/numberUtils.d.ts +9 -0
- package/esm/tools/utils/numberUtils.js +18 -0
- package/esm/tools/utils/numberUtils.js.map +1 -0
- package/esm/tools/utils/objectUtils.d.ts +10 -0
- package/esm/tools/utils/objectUtils.js +17 -0
- package/esm/tools/utils/objectUtils.js.map +1 -0
- package/esm/tools/utils/polyfills.d.ts +7 -0
- package/esm/tools/utils/polyfills.js +18 -0
- package/esm/tools/utils/polyfills.js.map +1 -0
- package/esm/tools/utils/responseUtils.d.ts +2 -0
- package/esm/tools/utils/responseUtils.js +13 -0
- package/esm/tools/utils/responseUtils.js.map +1 -0
- package/esm/tools/utils/stringUtils.d.ts +8 -0
- package/esm/tools/utils/stringUtils.js +49 -0
- package/esm/tools/utils/stringUtils.js.map +1 -0
- package/esm/tools/utils/timeUtils.d.ts +53 -0
- package/esm/tools/utils/timeUtils.js +84 -0
- package/esm/tools/utils/timeUtils.js.map +1 -0
- package/esm/tools/utils/timezone.d.ts +1 -0
- package/esm/tools/utils/timezone.js +10 -0
- package/esm/tools/utils/timezone.js.map +1 -0
- package/esm/tools/utils/typeUtils.d.ts +4 -0
- package/esm/tools/utils/typeUtils.js +13 -0
- package/esm/tools/utils/typeUtils.js.map +1 -0
- package/esm/tools/utils/urlPolyfill.d.ts +5 -0
- package/esm/tools/utils/urlPolyfill.js +52 -0
- package/esm/tools/utils/urlPolyfill.js.map +1 -0
- package/esm/tools/valueHistory.d.ts +27 -0
- package/esm/tools/valueHistory.js +100 -0
- package/esm/tools/valueHistory.js.map +1 -0
- package/esm/transport/batch.d.ts +16 -0
- package/esm/transport/batch.js +105 -0
- package/esm/transport/batch.js.map +1 -0
- package/esm/transport/eventBridge.d.ts +21 -0
- package/esm/transport/eventBridge.js +41 -0
- package/esm/transport/eventBridge.js.map +1 -0
- package/esm/transport/flushController.d.ts +58 -0
- package/esm/transport/flushController.js +106 -0
- package/esm/transport/flushController.js.map +1 -0
- package/esm/transport/httpRequest.d.ts +51 -0
- package/esm/transport/httpRequest.js +75 -0
- package/esm/transport/httpRequest.js.map +1 -0
- package/esm/transport/index.d.ts +7 -0
- package/esm/transport/index.js +5 -0
- package/esm/transport/index.js.map +1 -0
- package/esm/transport/sendWithRetryStrategy.d.ts +41 -0
- package/esm/transport/sendWithRetryStrategy.js +158 -0
- package/esm/transport/sendWithRetryStrategy.js.map +1 -0
- package/package.json +31 -0
- package/src/boot/displayAlreadyInitializedError.ts +8 -0
- package/src/boot/init.ts +55 -0
- package/src/browser/addEventListener.ts +145 -0
- package/src/browser/browser.types.ts +82 -0
- package/src/browser/cookie.ts +107 -0
- package/src/browser/fetchObservable.ts +127 -0
- package/src/browser/pageMayExitObservable.ts +56 -0
- package/src/browser/runOnReadyState.ts +25 -0
- package/src/browser/xhrObservable.ts +130 -0
- package/src/domain/allowedTrackingOrigins.ts +30 -0
- package/src/domain/bufferedData.ts +32 -0
- package/src/domain/configuration/configuration.ts +472 -0
- package/src/domain/configuration/endpointBuilder.ts +119 -0
- package/src/domain/configuration/index.ts +11 -0
- package/src/domain/configuration/transportConfiguration.ts +78 -0
- package/src/domain/connectivity/connectivity.ts +31 -0
- package/src/domain/connectivity/index.ts +1 -0
- package/src/domain/console/consoleObservable.ts +118 -0
- package/src/domain/context/contextConstants.ts +27 -0
- package/src/domain/context/contextManager.ts +85 -0
- package/src/domain/context/contextUtils.ts +14 -0
- package/src/domain/context/defineContextMethod.ts +31 -0
- package/src/domain/context/storeContextManager.ts +55 -0
- package/src/domain/contexts/accountContext.ts +47 -0
- package/src/domain/contexts/globalContext.ts +30 -0
- package/src/domain/contexts/rumInternalContext.type.ts +15 -0
- package/src/domain/contexts/userContext.ts +64 -0
- package/src/domain/deflate/deflate.types.ts +57 -0
- package/src/domain/deflate/index.ts +1 -0
- package/src/domain/error/error.ts +103 -0
- package/src/domain/error/error.types.ts +64 -0
- package/src/domain/error/trackRuntimeError.ts +50 -0
- package/src/domain/eventRateLimiter/createEventRateLimiter.ts +46 -0
- package/src/domain/extension/extensionUtils.ts +28 -0
- package/src/domain/intakeSites.ts +17 -0
- package/src/domain/report/browser.types.ts +38 -0
- package/src/domain/report/reportObservable.ts +133 -0
- package/src/domain/resourceUtils.ts +21 -0
- package/src/domain/session/README.md +193 -0
- package/src/domain/session/oldCookiesMigration.ts +42 -0
- package/src/domain/session/sessionConstants.ts +19 -0
- package/src/domain/session/sessionManager.ts +244 -0
- package/src/domain/session/sessionState.ts +88 -0
- package/src/domain/session/sessionStateValidation.ts +9 -0
- package/src/domain/session/sessionStore.ts +244 -0
- package/src/domain/session/sessionStoreOperations.ts +131 -0
- package/src/domain/session/storeStrategies/sessionInCookie.ts +85 -0
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +44 -0
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +16 -0
- package/src/domain/synthetics/syntheticsWorkerValues.ts +38 -0
- package/src/domain/tags.ts +76 -0
- package/src/domain/telemetry/index.ts +22 -0
- package/src/domain/telemetry/rawTelemetryEvent.types.ts +22 -0
- package/src/domain/telemetry/telemetry.ts +345 -0
- package/src/domain/telemetry/telemetryEvent.types.ts +899 -0
- package/src/domain/trackingConsent.ts +34 -0
- package/src/index.ts +164 -0
- package/src/tools/abstractHooks.ts +72 -0
- package/src/tools/abstractLifeCycle.ts +46 -0
- package/src/tools/boundedBuffer.ts +45 -0
- package/src/tools/catchUserErrors.ts +11 -0
- package/src/tools/display.ts +56 -0
- package/src/tools/encoder.ts +103 -0
- package/src/tools/experimentalFeatures.ts +51 -0
- package/src/tools/getZoneJsOriginalValue.ts +38 -0
- package/src/tools/globalObject.ts +51 -0
- package/src/tools/instrumentMethod.ts +170 -0
- package/src/tools/matchOption.ts +31 -0
- package/src/tools/mergeInto.ts +177 -0
- package/src/tools/monitor.ts +72 -0
- package/src/tools/observable.ts +104 -0
- package/src/tools/queueMicrotask.ts +13 -0
- package/src/tools/readBytesFromStream.ts +77 -0
- package/src/tools/requestIdleCallback.ts +40 -0
- package/src/tools/sendToExtension.ts +14 -0
- package/src/tools/serialisation/context.ts +11 -0
- package/src/tools/serialisation/jsonStringify.ts +53 -0
- package/src/tools/serialisation/sanitize.ts +273 -0
- package/src/tools/stackTrace/computeStackTrace.ts +250 -0
- package/src/tools/stackTrace/handlingStack.ts +48 -0
- package/src/tools/taskQueue.ts +63 -0
- package/src/tools/timer.ts +21 -0
- package/src/tools/utils/arrayUtils.ts +15 -0
- package/src/tools/utils/browserDetection.ts +39 -0
- package/src/tools/utils/byteUtils.ts +35 -0
- package/src/tools/utils/functionUtils.ts +45 -0
- package/src/tools/utils/numberUtils.ts +20 -0
- package/src/tools/utils/objectUtils.ts +19 -0
- package/src/tools/utils/polyfills.ts +23 -0
- package/src/tools/utils/responseUtils.ts +12 -0
- package/src/tools/utils/stringUtils.ts +52 -0
- package/src/tools/utils/timeUtils.ts +117 -0
- package/src/tools/utils/timezone.ts +9 -0
- package/src/tools/utils/typeUtils.ts +12 -0
- package/src/tools/utils/urlPolyfill.ts +56 -0
- package/src/tools/valueHistory.ts +151 -0
- package/src/transport/batch.ts +144 -0
- package/src/transport/eventBridge.ts +61 -0
- package/src/transport/flushController.ts +144 -0
- package/src/transport/httpRequest.ts +164 -0
- package/src/transport/index.ts +7 -0
- package/src/transport/sendWithRetryStrategy.ts +222 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'
|
|
2
|
+
import { monitor } from './monitor'
|
|
3
|
+
import { getGlobalObject } from './globalObject'
|
|
4
|
+
|
|
5
|
+
export type TimeoutId = ReturnType<typeof globalThis.setTimeout>
|
|
6
|
+
|
|
7
|
+
export function setTimeout(callback: () => void, delay?: number): TimeoutId {
|
|
8
|
+
return getZoneJsOriginalValue(getGlobalObject(), 'setTimeout')(monitor(callback), delay)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function clearTimeout(timeoutId: TimeoutId | undefined) {
|
|
12
|
+
getZoneJsOriginalValue(getGlobalObject(), 'clearTimeout')(timeoutId)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function setInterval(callback: () => void, delay?: number): TimeoutId {
|
|
16
|
+
return getZoneJsOriginalValue(getGlobalObject(), 'setInterval')(monitor(callback), delay)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function clearInterval(timeoutId: TimeoutId | undefined) {
|
|
20
|
+
getZoneJsOriginalValue(getGlobalObject(), 'clearInterval')(timeoutId)
|
|
21
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function removeDuplicates<T>(array: T[]) {
|
|
2
|
+
const set = new Set<T>()
|
|
3
|
+
array.forEach((item) => set.add(item))
|
|
4
|
+
return Array.from(set)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function removeItem<T>(array: T[], item: T) {
|
|
8
|
+
const index = array.indexOf(item)
|
|
9
|
+
if (index >= 0) {
|
|
10
|
+
array.splice(index, 1)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function isNonEmptyArray<T>(value: unknown): value is T[] {
|
|
14
|
+
return Array.isArray(value) && value.length > 0
|
|
15
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Exported only for tests
|
|
2
|
+
export const enum Browser {
|
|
3
|
+
CHROMIUM,
|
|
4
|
+
SAFARI,
|
|
5
|
+
OTHER,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function isChromium() {
|
|
9
|
+
return detectBrowserCached() === Browser.CHROMIUM
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function isSafari() {
|
|
13
|
+
return detectBrowserCached() === Browser.SAFARI
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let browserCache: Browser | undefined
|
|
17
|
+
function detectBrowserCached() {
|
|
18
|
+
return browserCache ?? (browserCache = detectBrowser())
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Exported only for tests
|
|
22
|
+
export function detectBrowser(browserWindow: Window = window) {
|
|
23
|
+
const userAgent = browserWindow.navigator.userAgent
|
|
24
|
+
if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
25
|
+
return Browser.CHROMIUM
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (
|
|
29
|
+
// navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
30
|
+
// "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
31
|
+
// useragent test as a semi-working fallback.
|
|
32
|
+
browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
33
|
+
(/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
34
|
+
) {
|
|
35
|
+
return Browser.SAFARI
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return Browser.OTHER
|
|
39
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const ONE_KIBI_BYTE = 1024
|
|
2
|
+
export const ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE
|
|
3
|
+
|
|
4
|
+
// eslint-disable-next-line no-control-regex
|
|
5
|
+
const HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/
|
|
6
|
+
|
|
7
|
+
export interface Uint8ArrayBuffer extends Uint8Array {
|
|
8
|
+
readonly buffer: ArrayBuffer
|
|
9
|
+
|
|
10
|
+
subarray(begin?: number, end?: number): Uint8ArrayBuffer
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function computeBytesCount(candidate: string): number {
|
|
14
|
+
// Accurate bytes count computations can degrade performances when there is a lot of events to process
|
|
15
|
+
if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {
|
|
16
|
+
return candidate.length
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (window.TextEncoder !== undefined) {
|
|
20
|
+
return new TextEncoder().encode(candidate).length
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return new Blob([candidate]).size
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function concatBuffers(buffers: Uint8ArrayBuffer[]): Uint8ArrayBuffer {
|
|
27
|
+
const length = buffers.reduce((total, buffer) => total + buffer.length, 0)
|
|
28
|
+
const result: Uint8ArrayBuffer = new Uint8Array(length)
|
|
29
|
+
let offset = 0
|
|
30
|
+
for (const buffer of buffers) {
|
|
31
|
+
result.set(buffer, offset)
|
|
32
|
+
offset += buffer.length
|
|
33
|
+
}
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TimeoutId } from '../timer'
|
|
2
|
+
import { setTimeout, clearTimeout } from '../timer'
|
|
3
|
+
|
|
4
|
+
// use lodash API
|
|
5
|
+
export function throttle<T extends (...args: any[]) => void>(
|
|
6
|
+
fn: T,
|
|
7
|
+
wait: number,
|
|
8
|
+
options?: { leading?: boolean; trailing?: boolean }
|
|
9
|
+
) {
|
|
10
|
+
const needLeadingExecution = options && options.leading !== undefined ? options.leading : true
|
|
11
|
+
const needTrailingExecution = options && options.trailing !== undefined ? options.trailing : true
|
|
12
|
+
let inWaitPeriod = false
|
|
13
|
+
let pendingExecutionWithParameters: Parameters<T> | undefined
|
|
14
|
+
let pendingTimeoutId: TimeoutId
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
throttled: (...parameters: Parameters<T>) => {
|
|
18
|
+
if (inWaitPeriod) {
|
|
19
|
+
pendingExecutionWithParameters = parameters
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
if (needLeadingExecution) {
|
|
23
|
+
fn(...parameters)
|
|
24
|
+
} else {
|
|
25
|
+
pendingExecutionWithParameters = parameters
|
|
26
|
+
}
|
|
27
|
+
inWaitPeriod = true
|
|
28
|
+
pendingTimeoutId = setTimeout(() => {
|
|
29
|
+
if (needTrailingExecution && pendingExecutionWithParameters) {
|
|
30
|
+
fn(...pendingExecutionWithParameters)
|
|
31
|
+
}
|
|
32
|
+
inWaitPeriod = false
|
|
33
|
+
pendingExecutionWithParameters = undefined
|
|
34
|
+
}, wait)
|
|
35
|
+
},
|
|
36
|
+
cancel: () => {
|
|
37
|
+
clearTimeout(pendingTimeoutId)
|
|
38
|
+
inWaitPeriod = false
|
|
39
|
+
pendingExecutionWithParameters = undefined
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
45
|
+
export function noop() {}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return true if the draw is successful
|
|
3
|
+
*
|
|
4
|
+
* @param threshold - Threshold between 0 and 100
|
|
5
|
+
*/
|
|
6
|
+
export function performDraw(threshold: number): boolean {
|
|
7
|
+
return threshold !== 0 && Math.random() * 100 <= threshold
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function round(num: number, decimals: 0 | 1 | 2 | 3 | 4) {
|
|
11
|
+
return +num.toFixed(decimals)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function isPercentage(value: unknown) {
|
|
15
|
+
return isNumber(value) && value >= 0 && value <= 100
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function isNumber(value: unknown): value is number {
|
|
19
|
+
return typeof value === 'number'
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function shallowClone<T>(object: T): T & Record<string, never> {
|
|
2
|
+
return { ...object } as T & Record<string, never>
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function objectHasValue<T extends { [key: string]: unknown }>(object: T, value: unknown): value is T[keyof T] {
|
|
6
|
+
return Object.keys(object).some((key) => object[key] === value)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isEmptyObject(object: object) {
|
|
10
|
+
return Object.keys(object).length === 0
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function mapValues<A, B>(object: { [key: string]: A }, fn: (arg: A) => B) {
|
|
14
|
+
const newObject: { [key: string]: B } = {}
|
|
15
|
+
for (const key of Object.keys(object)) {
|
|
16
|
+
newObject[key] = fn(object[key])
|
|
17
|
+
}
|
|
18
|
+
return newObject
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function findLast<T, S extends T>(
|
|
2
|
+
array: readonly T[],
|
|
3
|
+
predicate: (item: T, index: number, array: readonly T[]) => item is S
|
|
4
|
+
): S | undefined {
|
|
5
|
+
for (let i = array.length - 1; i >= 0; i -= 1) {
|
|
6
|
+
const item = array[i]
|
|
7
|
+
if (predicate(item, i, array)) {
|
|
8
|
+
return item
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return undefined
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Keep the following wrapper functions as it can be mangled and will result in smaller bundle size that using
|
|
15
|
+
// the native Object.values and Object.entries directly
|
|
16
|
+
|
|
17
|
+
export function objectValues<T = unknown>(object: { [key: string]: T }) {
|
|
18
|
+
return Object.values(object)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function objectEntries<T = unknown>(object: { [key: string]: T }): Array<[string, T]> {
|
|
22
|
+
return Object.entries(object)
|
|
23
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function isServerError(status: number) {
|
|
2
|
+
return status >= 500
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function tryToClone(response: Response): Response | undefined {
|
|
6
|
+
try {
|
|
7
|
+
return response.clone()
|
|
8
|
+
} catch {
|
|
9
|
+
// clone can throw if the response has already been used by another instrumentation or is disturbed
|
|
10
|
+
return
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UUID v4
|
|
3
|
+
* from https://gist.github.com/jed/982883
|
|
4
|
+
*/
|
|
5
|
+
export function generateUUID(placeholder?: string): string {
|
|
6
|
+
return placeholder
|
|
7
|
+
? // eslint-disable-next-line no-bitwise
|
|
8
|
+
(parseInt(placeholder, 10) ^ ((Math.random() * 16) >> (parseInt(placeholder, 10) / 4))).toString(16)
|
|
9
|
+
: `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, generateUUID)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const COMMA_SEPARATED_KEY_VALUE = /([\w-]+)\s*=\s*([^;]+)/g
|
|
13
|
+
|
|
14
|
+
export function findCommaSeparatedValue(rawString: string, name: string): string | undefined {
|
|
15
|
+
COMMA_SEPARATED_KEY_VALUE.lastIndex = 0
|
|
16
|
+
while (true) {
|
|
17
|
+
const match = COMMA_SEPARATED_KEY_VALUE.exec(rawString)
|
|
18
|
+
if (match) {
|
|
19
|
+
if (match[1] === name) {
|
|
20
|
+
return match[2]
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
break
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function findCommaSeparatedValues(rawString: string): Map<string, string> {
|
|
29
|
+
const result = new Map<string, string>()
|
|
30
|
+
COMMA_SEPARATED_KEY_VALUE.lastIndex = 0
|
|
31
|
+
while (true) {
|
|
32
|
+
const match = COMMA_SEPARATED_KEY_VALUE.exec(rawString)
|
|
33
|
+
if (match) {
|
|
34
|
+
result.set(match[1], match[2])
|
|
35
|
+
} else {
|
|
36
|
+
break
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function safeTruncate(candidate: string, length: number, suffix = '') {
|
|
43
|
+
const lastChar = candidate.charCodeAt(length - 1)
|
|
44
|
+
const isLastCharSurrogatePair = lastChar >= 0xd800 && lastChar <= 0xdbff
|
|
45
|
+
const correctedLength = isLastCharSurrogatePair ? length + 1 : length
|
|
46
|
+
|
|
47
|
+
if (candidate.length <= correctedLength) {
|
|
48
|
+
return candidate
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return `${candidate.slice(0, correctedLength)}${suffix}`
|
|
52
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { isNumber, round } from './numberUtils'
|
|
2
|
+
|
|
3
|
+
export const ONE_SECOND = 1000
|
|
4
|
+
export const ONE_MINUTE = 60 * ONE_SECOND
|
|
5
|
+
export const ONE_HOUR = 60 * ONE_MINUTE
|
|
6
|
+
export const ONE_DAY = 24 * ONE_HOUR
|
|
7
|
+
export const ONE_YEAR = 365 * ONE_DAY
|
|
8
|
+
|
|
9
|
+
export type Duration = number & { d: 'Duration in ms' }
|
|
10
|
+
export type ServerDuration = number & { s: 'Duration in ns' }
|
|
11
|
+
export type TimeStamp = number & { t: 'Epoch time' }
|
|
12
|
+
export type RelativeTime = number & { r: 'Time relative to navigation start' } & { d: 'Duration in ms' }
|
|
13
|
+
export interface ClocksState {
|
|
14
|
+
relative: RelativeTime
|
|
15
|
+
timeStamp: TimeStamp
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function relativeToClocks(relative: RelativeTime) {
|
|
19
|
+
return { relative, timeStamp: getCorrectedTimeStamp(relative) }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function timeStampToClocks(timeStamp: TimeStamp) {
|
|
23
|
+
return { relative: getRelativeTime(timeStamp), timeStamp }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getCorrectedTimeStamp(relativeTime: RelativeTime) {
|
|
27
|
+
const correctedOrigin = (dateNow() - performance.now()) as TimeStamp
|
|
28
|
+
// apply correction only for positive drift
|
|
29
|
+
if (correctedOrigin > getNavigationStart()) {
|
|
30
|
+
return Math.round(addDuration(correctedOrigin, relativeTime)) as TimeStamp
|
|
31
|
+
}
|
|
32
|
+
return getTimeStamp(relativeTime)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function currentDrift() {
|
|
36
|
+
return Math.round(dateNow() - addDuration(getNavigationStart(), performance.now() as Duration))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function toServerDuration(duration: Duration): ServerDuration
|
|
40
|
+
export function toServerDuration(duration: Duration | undefined): ServerDuration | undefined
|
|
41
|
+
export function toServerDuration(duration: Duration | undefined) {
|
|
42
|
+
if (!isNumber(duration)) {
|
|
43
|
+
return duration
|
|
44
|
+
}
|
|
45
|
+
return round(duration * 1e6, 0) as ServerDuration
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function dateNow() {
|
|
49
|
+
// Do not use `Date.now` because sometimes websites are wrongly "polyfilling" it. For example, we
|
|
50
|
+
// had some users using a very old version of `datejs`, which patched `Date.now` to return a Date
|
|
51
|
+
// instance instead of a timestamp[1]. Those users are unlikely to fix this, so let's handle this
|
|
52
|
+
// case ourselves.
|
|
53
|
+
// [1]: https://github.com/datejs/Datejs/blob/97f5c7c58c5bc5accdab8aa7602b6ac56462d778/src/core-debug.js#L14-L16
|
|
54
|
+
return new Date().getTime()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function timeStampNow() {
|
|
58
|
+
return dateNow() as TimeStamp
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function relativeNow() {
|
|
62
|
+
return performance.now() as RelativeTime
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function clocksNow() {
|
|
66
|
+
return { relative: relativeNow(), timeStamp: timeStampNow() }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function clocksOrigin() {
|
|
70
|
+
return { relative: 0 as RelativeTime, timeStamp: getNavigationStart() }
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function elapsed(start: TimeStamp, end: TimeStamp): Duration
|
|
74
|
+
export function elapsed(start: RelativeTime, end: RelativeTime): Duration
|
|
75
|
+
export function elapsed(start: number, end: number) {
|
|
76
|
+
return (end - start) as Duration
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function addDuration(a: TimeStamp, b: Duration): TimeStamp
|
|
80
|
+
export function addDuration(a: RelativeTime, b: Duration): RelativeTime
|
|
81
|
+
export function addDuration(a: Duration, b: Duration): Duration
|
|
82
|
+
export function addDuration(a: number, b: number) {
|
|
83
|
+
return a + b
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Get the time since the navigation was started.
|
|
87
|
+
export function getRelativeTime(timestamp: TimeStamp) {
|
|
88
|
+
return (timestamp - getNavigationStart()) as RelativeTime
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function getTimeStamp(relativeTime: RelativeTime) {
|
|
92
|
+
return Math.round(addDuration(getNavigationStart(), relativeTime)) as TimeStamp
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function looksLikeRelativeTime(time: RelativeTime | TimeStamp): time is RelativeTime {
|
|
96
|
+
return time < ONE_YEAR
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Navigation start slightly change on some rare cases
|
|
101
|
+
*/
|
|
102
|
+
let navigationStart: TimeStamp | undefined
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Notes: this does not use `performance.timeOrigin` because:
|
|
106
|
+
* - It doesn't seem to reflect the actual time on which the navigation has started: it may be much farther in the past,
|
|
107
|
+
* at least in Firefox 71. (see: https://bugzilla.mozilla.org/show_bug.cgi?id=1429926)
|
|
108
|
+
* - It is not supported in Safari <15
|
|
109
|
+
*/
|
|
110
|
+
function getNavigationStart() {
|
|
111
|
+
if (navigationStart === undefined) {
|
|
112
|
+
// ServiceWorkers do not support navigationStart (it's deprecated), so we fallback to timeOrigin
|
|
113
|
+
navigationStart = (performance.timing?.navigationStart ?? performance.timeOrigin) as TimeStamp
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return navigationStart
|
|
117
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { globalObject } from '../globalObject'
|
|
2
|
+
|
|
3
|
+
export function normalizeUrl(url: string) {
|
|
4
|
+
return buildUrl(url, location.href).href
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function isValidUrl(url: string) {
|
|
8
|
+
try {
|
|
9
|
+
return !!buildUrl(url)
|
|
10
|
+
} catch {
|
|
11
|
+
return false
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getPathName(url: string) {
|
|
16
|
+
const pathname = buildUrl(url).pathname
|
|
17
|
+
return pathname[0] === '/' ? pathname : `/${pathname}`
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function buildUrl(url: string, base?: string) {
|
|
21
|
+
const { URL } = getPristineWindow()
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
return base !== undefined ? new URL(url, base) : new URL(url)
|
|
25
|
+
} catch (error) {
|
|
26
|
+
throw new Error(`Failed to construct URL: ${String(error)}`)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get native URL constructor from a clean iframe
|
|
32
|
+
* This avoids polyfill issues by getting the native implementation from a fresh iframe context
|
|
33
|
+
* Falls back to the original URL constructor if iframe approach fails
|
|
34
|
+
*/
|
|
35
|
+
let getPristineGlobalObjectCache: Pick<typeof window, 'URL'> | undefined
|
|
36
|
+
|
|
37
|
+
export function getPristineWindow() {
|
|
38
|
+
if (!getPristineGlobalObjectCache) {
|
|
39
|
+
let iframe: HTMLIFrameElement | undefined
|
|
40
|
+
let pristineWindow: Window & typeof globalThis
|
|
41
|
+
try {
|
|
42
|
+
iframe = document.createElement('iframe')
|
|
43
|
+
iframe.style.display = 'none'
|
|
44
|
+
document.body.appendChild(iframe)
|
|
45
|
+
pristineWindow = iframe.contentWindow as Window & typeof globalThis
|
|
46
|
+
} catch {
|
|
47
|
+
pristineWindow = globalObject as unknown as Window & typeof globalThis
|
|
48
|
+
}
|
|
49
|
+
getPristineGlobalObjectCache = {
|
|
50
|
+
URL: pristineWindow.URL,
|
|
51
|
+
}
|
|
52
|
+
iframe?.remove()
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return getPristineGlobalObjectCache
|
|
56
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { setInterval, clearInterval } from './timer'
|
|
2
|
+
import type { TimeoutId } from './timer'
|
|
3
|
+
import { removeItem } from './utils/arrayUtils'
|
|
4
|
+
import type { Duration, RelativeTime } from './utils/timeUtils'
|
|
5
|
+
import { addDuration, relativeNow, ONE_MINUTE } from './utils/timeUtils'
|
|
6
|
+
|
|
7
|
+
const END_OF_TIMES = Infinity as RelativeTime
|
|
8
|
+
|
|
9
|
+
export interface ValueHistoryEntry<T> {
|
|
10
|
+
startTime: RelativeTime
|
|
11
|
+
endTime: RelativeTime
|
|
12
|
+
value: T
|
|
13
|
+
remove(): void
|
|
14
|
+
close(endTime: RelativeTime): void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const CLEAR_OLD_VALUES_INTERVAL = ONE_MINUTE
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Store and keep track of values spans. This whole cache assumes that values are added in
|
|
21
|
+
* chronological order (i.e. all entries have an increasing start time).
|
|
22
|
+
*/
|
|
23
|
+
export interface ValueHistory<Value> {
|
|
24
|
+
add: (value: Value, startTime: RelativeTime) => ValueHistoryEntry<Value>
|
|
25
|
+
find: (startTime?: RelativeTime, options?: { returnInactive: boolean }) => Value | undefined
|
|
26
|
+
|
|
27
|
+
closeActive: (endTime: RelativeTime) => void
|
|
28
|
+
findAll: (startTime?: RelativeTime, duration?: Duration) => Value[]
|
|
29
|
+
reset: () => void
|
|
30
|
+
stop: () => void
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let cleanupHistoriesInterval: TimeoutId | null = null
|
|
34
|
+
|
|
35
|
+
const cleanupTasks: Set<() => void> = new Set()
|
|
36
|
+
|
|
37
|
+
function cleanupHistories() {
|
|
38
|
+
cleanupTasks.forEach((task) => task())
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function createValueHistory<Value>({
|
|
42
|
+
expireDelay,
|
|
43
|
+
maxEntries,
|
|
44
|
+
}: {
|
|
45
|
+
expireDelay: number
|
|
46
|
+
maxEntries?: number
|
|
47
|
+
}): ValueHistory<Value> {
|
|
48
|
+
let entries: Array<ValueHistoryEntry<Value>> = []
|
|
49
|
+
|
|
50
|
+
if (!cleanupHistoriesInterval) {
|
|
51
|
+
cleanupHistoriesInterval = setInterval(() => cleanupHistories(), CLEAR_OLD_VALUES_INTERVAL)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const clearExpiredValues = () => {
|
|
55
|
+
const oldTimeThreshold = relativeNow() - expireDelay
|
|
56
|
+
while (entries.length > 0 && entries[entries.length - 1].endTime < oldTimeThreshold) {
|
|
57
|
+
entries.pop()
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
cleanupTasks.add(clearExpiredValues)
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Add a value to the history associated with a start time. Returns a reference to this newly
|
|
65
|
+
* added entry that can be removed or closed.
|
|
66
|
+
*/
|
|
67
|
+
function add(value: Value, startTime: RelativeTime): ValueHistoryEntry<Value> {
|
|
68
|
+
const entry: ValueHistoryEntry<Value> = {
|
|
69
|
+
value,
|
|
70
|
+
startTime,
|
|
71
|
+
endTime: END_OF_TIMES,
|
|
72
|
+
remove: () => {
|
|
73
|
+
removeItem(entries, entry)
|
|
74
|
+
},
|
|
75
|
+
close: (endTime: RelativeTime) => {
|
|
76
|
+
entry.endTime = endTime
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (maxEntries && entries.length >= maxEntries) {
|
|
81
|
+
entries.pop()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
entries.unshift(entry)
|
|
85
|
+
|
|
86
|
+
return entry
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Return the latest value that was active during `startTime`, or the currently active value
|
|
91
|
+
* if no `startTime` is provided. This method assumes that entries are not overlapping.
|
|
92
|
+
*
|
|
93
|
+
* If `option.returnInactive` is true, returns the value at `startTime` (active or not).
|
|
94
|
+
*/
|
|
95
|
+
function find(
|
|
96
|
+
startTime: RelativeTime = END_OF_TIMES,
|
|
97
|
+
options: { returnInactive: boolean } = { returnInactive: false }
|
|
98
|
+
): Value | undefined {
|
|
99
|
+
for (const entry of entries) {
|
|
100
|
+
if (entry.startTime <= startTime) {
|
|
101
|
+
if (options.returnInactive || startTime <= entry.endTime) {
|
|
102
|
+
return entry.value
|
|
103
|
+
}
|
|
104
|
+
break
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Helper function to close the currently active value, if any. This method assumes that entries
|
|
111
|
+
* are not overlapping.
|
|
112
|
+
*/
|
|
113
|
+
function closeActive(endTime: RelativeTime) {
|
|
114
|
+
const latestEntry = entries[0]
|
|
115
|
+
if (latestEntry && latestEntry.endTime === END_OF_TIMES) {
|
|
116
|
+
latestEntry.close(endTime)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Return all values with an active period overlapping with the duration,
|
|
122
|
+
* or all values that were active during `startTime` if no duration is provided,
|
|
123
|
+
* or all currently active values if no `startTime` is provided.
|
|
124
|
+
*/
|
|
125
|
+
function findAll(startTime: RelativeTime = END_OF_TIMES, duration = 0 as Duration): Value[] {
|
|
126
|
+
const endTime = addDuration(startTime, duration)
|
|
127
|
+
return entries
|
|
128
|
+
.filter((entry) => entry.startTime <= endTime && startTime <= entry.endTime)
|
|
129
|
+
.map((entry) => entry.value)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Remove all entries from this collection.
|
|
134
|
+
*/
|
|
135
|
+
function reset() {
|
|
136
|
+
entries = []
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Stop internal garbage collection of past entries.
|
|
141
|
+
*/
|
|
142
|
+
function stop() {
|
|
143
|
+
cleanupTasks.delete(clearExpiredValues)
|
|
144
|
+
if (cleanupTasks.size === 0 && cleanupHistoriesInterval) {
|
|
145
|
+
clearInterval(cleanupHistoriesInterval)
|
|
146
|
+
cleanupHistoriesInterval = null
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return { add, find, closeActive, findAll, reset, stop }
|
|
151
|
+
}
|