@openobserve/browser-core 0.2.11-rc1 → 0.2.12-beta.1
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/package.json +6 -5
- package/src/boot/displayAlreadyInitializedError.ts +8 -0
- package/src/boot/init.ts +29 -15
- package/src/browser/addEventListener.ts +13 -10
- package/src/browser/{types.ts → browser.types.ts} +42 -0
- package/src/browser/cookie.ts +49 -14
- package/src/browser/fetchObservable.ts +80 -21
- package/src/browser/{pageExitObservable.ts → pageMayExitObservable.ts} +11 -22
- package/src/browser/runOnReadyState.ts +14 -4
- package/src/browser/xhrObservable.ts +17 -4
- package/src/domain/allowedTrackingOrigins.ts +30 -0
- package/src/domain/bufferedData.ts +32 -0
- package/src/domain/configuration/configuration.ts +352 -83
- package/src/domain/configuration/endpointBuilder.ts +29 -32
- package/src/domain/configuration/index.ts +6 -5
- package/src/domain/configuration/transportConfiguration.ts +42 -35
- package/src/domain/connectivity/connectivity.ts +5 -1
- package/src/domain/console/consoleObservable.ts +57 -21
- package/src/domain/context/contextConstants.ts +22 -0
- package/src/domain/context/contextManager.ts +48 -11
- package/src/domain/context/contextUtils.ts +14 -0
- package/src/domain/context/defineContextMethod.ts +31 -0
- package/src/domain/context/storeContextManager.ts +7 -3
- 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/{types.ts → deflate.types.ts} +6 -4
- package/src/domain/deflate/index.ts +1 -1
- package/src/domain/error/error.ts +28 -84
- package/src/domain/error/error.types.ts +10 -2
- package/src/domain/error/trackRuntimeError.ts +29 -32
- package/src/domain/eventRateLimiter/createEventRateLimiter.ts +5 -2
- package/src/domain/extension/extensionUtils.ts +28 -0
- package/src/domain/intakeSites.ts +18 -0
- package/src/domain/report/reportObservable.ts +35 -30
- package/src/domain/resourceUtils.ts +20 -16
- package/src/domain/session/README.md +193 -0
- package/src/domain/session/oldCookiesMigration.ts +2 -2
- package/src/domain/session/sessionConstants.ts +16 -1
- package/src/domain/session/sessionManager.ts +179 -15
- package/src/domain/session/sessionState.ts +49 -17
- package/src/domain/session/sessionStateValidation.ts +9 -0
- package/src/domain/session/sessionStore.ts +118 -55
- package/src/domain/session/sessionStoreOperations.ts +47 -20
- package/src/domain/session/storeStrategies/sessionInCookie.ts +105 -26
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +10 -8
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +5 -2
- package/src/domain/synthetics/syntheticsWorkerValues.ts +13 -2
- package/src/domain/tags.ts +76 -0
- package/src/domain/telemetry/index.ts +12 -4
- package/src/domain/telemetry/rawTelemetryEvent.types.ts +6 -3
- package/src/domain/telemetry/telemetry.ts +235 -106
- package/src/domain/telemetry/telemetryEvent.types.ts +514 -5
- package/src/domain/trackingConsent.ts +34 -0
- package/src/index.ts +90 -59
- package/src/tools/abstractHooks.ts +72 -0
- package/src/tools/abstractLifeCycle.ts +1 -0
- package/src/tools/boundedBuffer.ts +36 -8
- package/src/tools/display.ts +4 -0
- package/src/tools/encoder.ts +3 -2
- package/src/tools/experimentalFeatures.ts +18 -7
- package/src/tools/getZoneJsOriginalValue.ts +1 -1
- package/src/tools/{getGlobalObject.ts → globalObject.ts} +20 -0
- package/src/tools/instrumentMethod.ts +58 -41
- package/src/tools/matchOption.ts +1 -2
- package/src/tools/monitor.ts +11 -7
- package/src/tools/observable.ts +78 -12
- package/src/tools/queueMicrotask.ts +13 -0
- package/src/tools/readBytesFromStream.ts +24 -64
- package/src/tools/requestIdleCallback.ts +40 -0
- package/src/tools/sendToExtension.ts +3 -1
- package/src/tools/serialisation/context.ts +4 -1
- package/src/tools/serialisation/sanitize.ts +32 -14
- package/src/{domain/error → tools/stackTrace}/computeStackTrace.ts +72 -8
- package/src/tools/stackTrace/handlingStack.ts +48 -0
- package/src/tools/taskQueue.ts +63 -0
- package/src/tools/timer.ts +1 -1
- package/src/tools/utils/arrayUtils.ts +11 -3
- package/src/tools/utils/browserDetection.ts +0 -9
- package/src/tools/utils/byteUtils.ts +13 -2
- package/src/tools/utils/functionUtils.ts +0 -2
- package/src/tools/utils/numberUtils.ts +2 -1
- package/src/tools/utils/objectUtils.ts +1 -3
- package/src/tools/utils/polyfills.ts +6 -107
- package/src/tools/utils/responseUtils.ts +1 -1
- package/src/tools/utils/stringUtils.ts +34 -2
- package/src/tools/utils/timeUtils.ts +18 -13
- package/src/tools/utils/timezone.ts +9 -0
- package/src/tools/utils/urlPolyfill.ts +29 -59
- package/src/tools/valueHistory.ts +66 -35
- package/src/transport/batch.ts +77 -80
- package/src/transport/eventBridge.ts +24 -5
- package/src/transport/flushController.ts +27 -21
- package/src/transport/httpRequest.ts +92 -71
- package/src/transport/index.ts +7 -4
- package/src/transport/sendWithRetryStrategy.ts +55 -36
- package/cjs/boot/init.d.ts +0 -5
- package/cjs/boot/init.js +0 -36
- package/cjs/boot/init.js.map +0 -1
- package/cjs/browser/addEventListener.d.ts +0 -84
- package/cjs/browser/addEventListener.js +0 -94
- package/cjs/browser/addEventListener.js.map +0 -1
- package/cjs/browser/cookie.d.ts +0 -17
- package/cjs/browser/cookie.js +0 -86
- package/cjs/browser/cookie.js.map +0 -1
- package/cjs/browser/fetchObservable.d.ts +0 -23
- package/cjs/browser/fetchObservable.js +0 -69
- package/cjs/browser/fetchObservable.js.map +0 -1
- package/cjs/browser/pageExitObservable.d.ts +0 -14
- package/cjs/browser/pageExitObservable.js +0 -57
- package/cjs/browser/pageExitObservable.js.map +0 -1
- package/cjs/browser/runOnReadyState.d.ts +0 -2
- package/cjs/browser/runOnReadyState.js +0 -15
- package/cjs/browser/runOnReadyState.js.map +0 -1
- package/cjs/browser/types.d.ts +0 -19
- package/cjs/browser/types.js +0 -6
- package/cjs/browser/types.js.map +0 -1
- package/cjs/browser/xhrObservable.d.ts +0 -21
- package/cjs/browser/xhrObservable.js +0 -85
- package/cjs/browser/xhrObservable.js.map +0 -1
- package/cjs/domain/configuration/configuration.d.ts +0 -72
- package/cjs/domain/configuration/configuration.js +0 -94
- package/cjs/domain/configuration/configuration.js.map +0 -1
- package/cjs/domain/configuration/endpointBuilder.d.ts +0 -10
- package/cjs/domain/configuration/endpointBuilder.js +0 -84
- package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
- package/cjs/domain/configuration/index.d.ts +0 -4
- package/cjs/domain/configuration/index.js +0 -27
- package/cjs/domain/configuration/index.js.map +0 -1
- package/cjs/domain/configuration/intakeSites.d.ts +0 -5
- package/cjs/domain/configuration/intakeSites.js +0 -9
- package/cjs/domain/configuration/intakeSites.js.map +0 -1
- package/cjs/domain/configuration/tags.d.ts +0 -4
- package/cjs/domain/configuration/tags.js +0 -39
- package/cjs/domain/configuration/tags.js.map +0 -1
- package/cjs/domain/configuration/transportConfiguration.d.ts +0 -16
- package/cjs/domain/configuration/transportConfiguration.js +0 -42
- package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
- package/cjs/domain/connectivity/connectivity.d.ts +0 -13
- package/cjs/domain/connectivity/connectivity.js +0 -14
- package/cjs/domain/connectivity/connectivity.js.map +0 -1
- package/cjs/domain/connectivity/index.d.ts +0 -1
- package/cjs/domain/connectivity/index.js +0 -18
- package/cjs/domain/connectivity/index.js.map +0 -1
- package/cjs/domain/console/consoleObservable.d.ts +0 -11
- package/cjs/domain/console/consoleObservable.js +0 -72
- package/cjs/domain/console/consoleObservable.js.map +0 -1
- package/cjs/domain/context/contextConstants.d.ts +0 -5
- package/cjs/domain/context/contextConstants.js +0 -3
- package/cjs/domain/context/contextConstants.js.map +0 -1
- package/cjs/domain/context/contextManager.d.ts +0 -12
- package/cjs/domain/context/contextManager.js +0 -43
- package/cjs/domain/context/contextManager.js.map +0 -1
- package/cjs/domain/context/customerDataTracker.d.ts +0 -45
- package/cjs/domain/context/customerDataTracker.js +0 -107
- package/cjs/domain/context/customerDataTracker.js.map +0 -1
- package/cjs/domain/context/storeContextManager.d.ts +0 -6
- package/cjs/domain/context/storeContextManager.js +0 -38
- package/cjs/domain/context/storeContextManager.js.map +0 -1
- package/cjs/domain/deflate/types.d.ts +0 -0
- package/cjs/domain/deflate/types.js +0 -3
- package/cjs/domain/deflate/types.js.map +0 -1
- package/cjs/domain/error/computeStackTrace.d.ts +0 -33
- package/cjs/domain/error/computeStackTrace.js +0 -142
- package/cjs/domain/error/computeStackTrace.js.map +0 -1
- package/cjs/domain/error/error.d.ts +0 -28
- package/cjs/domain/error/error.js +0 -131
- package/cjs/domain/error/error.js.map +0 -1
- package/cjs/domain/error/error.types.d.ts +0 -40
- package/cjs/domain/error/error.types.js +0 -13
- package/cjs/domain/error/error.types.js.map +0 -1
- package/cjs/domain/error/trackRuntimeError.d.ts +0 -13
- package/cjs/domain/error/trackRuntimeError.js +0 -54
- package/cjs/domain/error/trackRuntimeError.js.map +0 -1
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +0 -40
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
- package/cjs/domain/report/browser.types.d.ts +0 -34
- package/cjs/domain/report/browser.types.js +0 -3
- package/cjs/domain/report/browser.types.js.map +0 -1
- package/cjs/domain/report/reportObservable.d.ts +0 -17
- package/cjs/domain/report/reportObservable.js +0 -94
- package/cjs/domain/report/reportObservable.js.map +0 -1
- package/cjs/domain/resourceUtils.d.ts +0 -16
- package/cjs/domain/resourceUtils.js +0 -3
- package/cjs/domain/resourceUtils.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/sessionConstants.d.ts +0 -2
- package/cjs/domain/session/sessionConstants.js +0 -7
- package/cjs/domain/session/sessionConstants.js.map +0 -1
- package/cjs/domain/session/sessionManager.d.ts +0 -20
- package/cjs/domain/session/sessionManager.js +0 -65
- package/cjs/domain/session/sessionManager.js.map +0 -1
- package/cjs/domain/session/sessionState.d.ts +0 -11
- package/cjs/domain/session/sessionState.js +0 -45
- package/cjs/domain/session/sessionState.js.map +0 -1
- package/cjs/domain/session/sessionStore.d.ts +0 -34
- package/cjs/domain/session/sessionStore.js +0 -144
- package/cjs/domain/session/sessionStore.js.map +0 -1
- package/cjs/domain/session/sessionStoreOperations.d.ts +0 -10
- package/cjs/domain/session/sessionStoreOperations.js +0 -96
- package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +0 -59
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +0 -41
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +0 -5
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +0 -22
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/cjs/domain/telemetry/index.d.ts +0 -3
- package/cjs/domain/telemetry/index.js +0 -28
- package/cjs/domain/telemetry/index.js.map +0 -1
- package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js +0 -8
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/cjs/domain/telemetry/telemetry.d.ts +0 -116
- package/cjs/domain/telemetry/telemetry.js +0 -157
- package/cjs/domain/telemetry/telemetry.js.map +0 -1
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +0 -391
- package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
- package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/cjs/domain/user/index.d.ts +0 -2
- package/cjs/domain/user/index.js +0 -19
- package/cjs/domain/user/index.js.map +0 -1
- package/cjs/domain/user/user.d.ts +0 -12
- package/cjs/domain/user/user.js +0 -35
- package/cjs/domain/user/user.js.map +0 -1
- package/cjs/domain/user/user.types.d.ts +0 -6
- package/cjs/domain/user/user.types.js +0 -3
- package/cjs/domain/user/user.types.js.map +0 -1
- package/cjs/tools/abstractLifeCycle.d.ts +0 -23
- package/cjs/tools/abstractLifeCycle.js +0 -29
- package/cjs/tools/abstractLifeCycle.js.map +0 -1
- package/cjs/tools/boundedBuffer.d.ts +0 -5
- package/cjs/tools/boundedBuffer.js +0 -22
- package/cjs/tools/boundedBuffer.js.map +0 -1
- package/cjs/tools/catchUserErrors.d.ts +0 -1
- package/cjs/tools/catchUserErrors.js +0 -20
- package/cjs/tools/catchUserErrors.js.map +0 -1
- package/cjs/tools/display.d.ts +0 -35
- package/cjs/tools/display.js +0 -41
- package/cjs/tools/display.js.map +0 -1
- package/cjs/tools/encoder.d.ts +0 -53
- package/cjs/tools/encoder.js +0 -41
- package/cjs/tools/encoder.js.map +0 -1
- package/cjs/tools/experimentalFeatures.d.ts +0 -22
- package/cjs/tools/experimentalFeatures.js +0 -45
- package/cjs/tools/experimentalFeatures.js.map +0 -1
- package/cjs/tools/getGlobalObject.d.ts +0 -4
- package/cjs/tools/getGlobalObject.js +0 -37
- package/cjs/tools/getGlobalObject.js.map +0 -1
- package/cjs/tools/getZoneJsOriginalValue.d.ts +0 -19
- package/cjs/tools/getZoneJsOriginalValue.js +0 -30
- package/cjs/tools/getZoneJsOriginalValue.js.map +0 -1
- package/cjs/tools/instrumentMethod.d.ts +0 -59
- package/cjs/tools/instrumentMethod.js +0 -106
- package/cjs/tools/instrumentMethod.js.map +0 -1
- package/cjs/tools/matchOption.d.ts +0 -8
- package/cjs/tools/matchOption.js +0 -38
- package/cjs/tools/matchOption.js.map +0 -1
- package/cjs/tools/mergeInto.d.ts +0 -25
- package/cjs/tools/mergeInto.js +0 -105
- package/cjs/tools/mergeInto.js.map +0 -1
- package/cjs/tools/monitor.d.ts +0 -8
- package/cjs/tools/monitor.js +0 -76
- package/cjs/tools/monitor.js.map +0 -1
- package/cjs/tools/observable.d.ts +0 -12
- package/cjs/tools/observable.js +0 -43
- package/cjs/tools/observable.js.map +0 -1
- package/cjs/tools/readBytesFromStream.d.ts +0 -11
- package/cjs/tools/readBytesFromStream.js +0 -64
- package/cjs/tools/readBytesFromStream.js.map +0 -1
- package/cjs/tools/sendToExtension.d.ts +0 -3
- package/cjs/tools/sendToExtension.js +0 -11
- package/cjs/tools/sendToExtension.js.map +0 -1
- package/cjs/tools/serialisation/context.d.ts +0 -6
- package/cjs/tools/serialisation/context.js +0 -3
- package/cjs/tools/serialisation/context.js.map +0 -1
- package/cjs/tools/serialisation/jsonStringify.d.ts +0 -13
- package/cjs/tools/serialisation/jsonStringify.js +0 -49
- package/cjs/tools/serialisation/jsonStringify.js.map +0 -1
- package/cjs/tools/serialisation/sanitize.d.ts +0 -18
- package/cjs/tools/serialisation/sanitize.js +0 -185
- package/cjs/tools/serialisation/sanitize.js.map +0 -1
- package/cjs/tools/timer.d.ts +0 -5
- package/cjs/tools/timer.js +0 -23
- package/cjs/tools/timer.js.map +0 -1
- package/cjs/tools/utils/arrayUtils.d.ts +0 -1
- package/cjs/tools/utils/arrayUtils.js +0 -11
- package/cjs/tools/utils/arrayUtils.js.map +0 -1
- package/cjs/tools/utils/browserDetection.d.ts +0 -10
- package/cjs/tools/utils/browserDetection.js +0 -42
- package/cjs/tools/utils/browserDetection.js.map +0 -1
- package/cjs/tools/utils/byteUtils.d.ts +0 -4
- package/cjs/tools/utils/byteUtils.js +0 -31
- package/cjs/tools/utils/byteUtils.js.map +0 -1
- package/cjs/tools/utils/functionUtils.d.ts +0 -9
- package/cjs/tools/utils/functionUtils.js +0 -48
- package/cjs/tools/utils/functionUtils.js.map +0 -1
- package/cjs/tools/utils/numberUtils.d.ts +0 -8
- package/cjs/tools/utils/numberUtils.js +0 -24
- package/cjs/tools/utils/numberUtils.js.map +0 -1
- package/cjs/tools/utils/objectUtils.d.ts +0 -10
- package/cjs/tools/utils/objectUtils.js +0 -26
- package/cjs/tools/utils/objectUtils.js.map +0 -1
- package/cjs/tools/utils/polyfills.d.ts +0 -24
- package/cjs/tools/utils/polyfills.js +0 -110
- package/cjs/tools/utils/polyfills.js.map +0 -1
- package/cjs/tools/utils/responseUtils.d.ts +0 -2
- package/cjs/tools/utils/responseUtils.js +0 -18
- package/cjs/tools/utils/responseUtils.js.map +0 -1
- package/cjs/tools/utils/stringUtils.d.ts +0 -8
- package/cjs/tools/utils/stringUtils.js +0 -59
- package/cjs/tools/utils/stringUtils.js.map +0 -1
- package/cjs/tools/utils/timeUtils.d.ts +0 -57
- package/cjs/tools/utils/timeUtils.js +0 -99
- 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 -17
- package/cjs/tools/utils/typeUtils.js.map +0 -1
- package/cjs/tools/utils/urlPolyfill.d.ts +0 -14
- package/cjs/tools/utils/urlPolyfill.js +0 -92
- package/cjs/tools/utils/urlPolyfill.js.map +0 -1
- package/cjs/tools/valueHistory.d.ts +0 -50
- package/cjs/tools/valueHistory.js +0 -106
- package/cjs/tools/valueHistory.js.map +0 -1
- package/cjs/transport/batch.d.ts +0 -21
- package/cjs/transport/batch.js +0 -123
- package/cjs/transport/batch.js.map +0 -1
- package/cjs/transport/eventBridge.d.ts +0 -12
- package/cjs/transport/eventBridge.js +0 -34
- package/cjs/transport/eventBridge.js.map +0 -1
- package/cjs/transport/flushController.d.ts +0 -58
- package/cjs/transport/flushController.js +0 -112
- package/cjs/transport/flushController.js.map +0 -1
- package/cjs/transport/httpRequest.d.ts +0 -38
- package/cjs/transport/httpRequest.js +0 -95
- package/cjs/transport/httpRequest.js.map +0 -1
- package/cjs/transport/index.d.ts +0 -4
- package/cjs/transport/index.js +0 -13
- package/cjs/transport/index.js.map +0 -1
- package/cjs/transport/sendWithRetryStrategy.d.ts +0 -39
- package/cjs/transport/sendWithRetryStrategy.js +0 -151
- package/cjs/transport/sendWithRetryStrategy.js.map +0 -1
- package/cjs/transport/startBatchWithReplica.d.ts +0 -20
- package/cjs/transport/startBatchWithReplica.js +0 -42
- package/cjs/transport/startBatchWithReplica.js.map +0 -1
- package/esm/boot/init.d.ts +0 -5
- package/esm/boot/init.js +0 -31
- package/esm/boot/init.js.map +0 -1
- package/esm/browser/addEventListener.d.ts +0 -84
- package/esm/browser/addEventListener.js +0 -89
- package/esm/browser/addEventListener.js.map +0 -1
- package/esm/browser/cookie.d.ts +0 -17
- package/esm/browser/cookie.js +0 -76
- package/esm/browser/cookie.js.map +0 -1
- package/esm/browser/fetchObservable.d.ts +0 -23
- package/esm/browser/fetchObservable.js +0 -65
- package/esm/browser/fetchObservable.js.map +0 -1
- package/esm/browser/pageExitObservable.d.ts +0 -14
- package/esm/browser/pageExitObservable.js +0 -52
- package/esm/browser/pageExitObservable.js.map +0 -1
- package/esm/browser/runOnReadyState.d.ts +0 -2
- package/esm/browser/runOnReadyState.js +0 -11
- package/esm/browser/runOnReadyState.js.map +0 -1
- package/esm/browser/types.d.ts +0 -19
- package/esm/browser/types.js +0 -5
- package/esm/browser/types.js.map +0 -1
- package/esm/browser/xhrObservable.d.ts +0 -21
- package/esm/browser/xhrObservable.js +0 -81
- package/esm/browser/xhrObservable.js.map +0 -1
- package/esm/domain/configuration/configuration.d.ts +0 -72
- package/esm/domain/configuration/configuration.js +0 -89
- package/esm/domain/configuration/configuration.js.map +0 -1
- package/esm/domain/configuration/endpointBuilder.d.ts +0 -10
- package/esm/domain/configuration/endpointBuilder.js +0 -80
- package/esm/domain/configuration/endpointBuilder.js.map +0 -1
- package/esm/domain/configuration/index.d.ts +0 -4
- package/esm/domain/configuration/index.js +0 -5
- package/esm/domain/configuration/index.js.map +0 -1
- package/esm/domain/configuration/intakeSites.d.ts +0 -5
- package/esm/domain/configuration/intakeSites.js +0 -6
- package/esm/domain/configuration/intakeSites.js.map +0 -1
- package/esm/domain/configuration/tags.d.ts +0 -4
- package/esm/domain/configuration/tags.js +0 -34
- package/esm/domain/configuration/tags.js.map +0 -1
- package/esm/domain/configuration/transportConfiguration.d.ts +0 -16
- package/esm/domain/configuration/transportConfiguration.js +0 -38
- package/esm/domain/configuration/transportConfiguration.js.map +0 -1
- package/esm/domain/connectivity/connectivity.d.ts +0 -13
- package/esm/domain/connectivity/connectivity.js +0 -10
- 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 -11
- package/esm/domain/console/consoleObservable.js +0 -67
- package/esm/domain/console/consoleObservable.js.map +0 -1
- package/esm/domain/context/contextConstants.d.ts +0 -5
- package/esm/domain/context/contextConstants.js +0 -2
- package/esm/domain/context/contextConstants.js.map +0 -1
- package/esm/domain/context/contextManager.d.ts +0 -12
- package/esm/domain/context/contextManager.js +0 -39
- package/esm/domain/context/contextManager.js.map +0 -1
- package/esm/domain/context/customerDataTracker.d.ts +0 -45
- package/esm/domain/context/customerDataTracker.js +0 -102
- package/esm/domain/context/customerDataTracker.js.map +0 -1
- package/esm/domain/context/storeContextManager.d.ts +0 -6
- package/esm/domain/context/storeContextManager.js +0 -32
- package/esm/domain/context/storeContextManager.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/deflate/types.d.ts +0 -38
- package/esm/domain/deflate/types.js +0 -2
- package/esm/domain/deflate/types.js.map +0 -1
- package/esm/domain/error/computeStackTrace.d.ts +0 -33
- package/esm/domain/error/computeStackTrace.js +0 -137
- package/esm/domain/error/computeStackTrace.js.map +0 -1
- package/esm/domain/error/error.d.ts +0 -28
- package/esm/domain/error/error.js +0 -121
- package/esm/domain/error/error.js.map +0 -1
- package/esm/domain/error/error.types.d.ts +0 -40
- 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 -13
- package/esm/domain/error/trackRuntimeError.js +0 -48
- 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 -36
- package/esm/domain/eventRateLimiter/createEventRateLimiter.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 -17
- package/esm/domain/report/reportObservable.js +0 -90
- package/esm/domain/report/reportObservable.js.map +0 -1
- package/esm/domain/resourceUtils.d.ts +0 -16
- package/esm/domain/resourceUtils.js +0 -2
- 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 -2
- package/esm/domain/session/sessionConstants.js +0 -4
- package/esm/domain/session/sessionConstants.js.map +0 -1
- package/esm/domain/session/sessionManager.d.ts +0 -20
- package/esm/domain/session/sessionManager.js +0 -60
- package/esm/domain/session/sessionManager.js.map +0 -1
- package/esm/domain/session/sessionState.d.ts +0 -11
- package/esm/domain/session/sessionState.js +0 -38
- package/esm/domain/session/sessionState.js.map +0 -1
- package/esm/domain/session/sessionStore.d.ts +0 -34
- package/esm/domain/session/sessionStore.js +0 -139
- package/esm/domain/session/sessionStore.js.map +0 -1
- package/esm/domain/session/sessionStoreOperations.d.ts +0 -10
- package/esm/domain/session/sessionStoreOperations.js +0 -92
- package/esm/domain/session/sessionStoreOperations.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
- package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -53
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -36
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -15
- 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 -11
- package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -16
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/esm/domain/telemetry/index.d.ts +0 -3
- package/esm/domain/telemetry/index.js +0 -4
- package/esm/domain/telemetry/index.js.map +0 -1
- package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -15
- package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -5
- package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/esm/domain/telemetry/telemetry.d.ts +0 -116
- package/esm/domain/telemetry/telemetry.js +0 -145
- package/esm/domain/telemetry/telemetry.js.map +0 -1
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -391
- package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/esm/domain/user/index.d.ts +0 -2
- package/esm/domain/user/index.js +0 -3
- package/esm/domain/user/index.js.map +0 -1
- package/esm/domain/user/user.d.ts +0 -12
- package/esm/domain/user/user.js +0 -30
- package/esm/domain/user/user.js.map +0 -1
- package/esm/domain/user/user.types.d.ts +0 -6
- package/esm/domain/user/user.types.js +0 -2
- package/esm/domain/user/user.types.js.map +0 -1
- package/esm/index.d.ts +0 -67
- package/esm/index.js +0 -64
- package/esm/index.js.map +0 -1
- package/esm/tools/abstractLifeCycle.d.ts +0 -23
- package/esm/tools/abstractLifeCycle.js +0 -26
- package/esm/tools/abstractLifeCycle.js.map +0 -1
- package/esm/tools/boundedBuffer.d.ts +0 -5
- package/esm/tools/boundedBuffer.js +0 -19
- package/esm/tools/boundedBuffer.js.map +0 -1
- package/esm/tools/catchUserErrors.d.ts +0 -1
- package/esm/tools/catchUserErrors.js +0 -16
- package/esm/tools/catchUserErrors.js.map +0 -1
- package/esm/tools/display.d.ts +0 -35
- package/esm/tools/display.js +0 -38
- package/esm/tools/display.js.map +0 -1
- package/esm/tools/encoder.d.ts +0 -53
- package/esm/tools/encoder.js +0 -37
- package/esm/tools/encoder.js.map +0 -1
- package/esm/tools/experimentalFeatures.d.ts +0 -22
- package/esm/tools/experimentalFeatures.js +0 -38
- package/esm/tools/experimentalFeatures.js.map +0 -1
- package/esm/tools/getGlobalObject.d.ts +0 -4
- package/esm/tools/getGlobalObject.js +0 -33
- package/esm/tools/getGlobalObject.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/instrumentMethod.d.ts +0 -59
- package/esm/tools/instrumentMethod.js +0 -101
- package/esm/tools/instrumentMethod.js.map +0 -1
- package/esm/tools/matchOption.d.ts +0 -8
- package/esm/tools/matchOption.js +0 -33
- package/esm/tools/matchOption.js.map +0 -1
- package/esm/tools/mergeInto.d.ts +0 -25
- package/esm/tools/mergeInto.js +0 -99
- package/esm/tools/mergeInto.js.map +0 -1
- package/esm/tools/monitor.d.ts +0 -8
- package/esm/tools/monitor.js +0 -66
- package/esm/tools/monitor.js.map +0 -1
- package/esm/tools/observable.d.ts +0 -12
- package/esm/tools/observable.js +0 -39
- package/esm/tools/observable.js.map +0 -1
- package/esm/tools/readBytesFromStream.d.ts +0 -11
- package/esm/tools/readBytesFromStream.js +0 -60
- package/esm/tools/readBytesFromStream.js.map +0 -1
- package/esm/tools/sendToExtension.d.ts +0 -3
- package/esm/tools/sendToExtension.js +0 -7
- package/esm/tools/sendToExtension.js.map +0 -1
- package/esm/tools/serialisation/context.d.ts +0 -6
- 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 -181
- package/esm/tools/serialisation/sanitize.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 -1
- package/esm/tools/utils/arrayUtils.js +0 -7
- package/esm/tools/utils/arrayUtils.js.map +0 -1
- package/esm/tools/utils/browserDetection.d.ts +0 -10
- package/esm/tools/utils/browserDetection.js +0 -35
- package/esm/tools/utils/browserDetection.js.map +0 -1
- package/esm/tools/utils/byteUtils.d.ts +0 -4
- package/esm/tools/utils/byteUtils.js +0 -26
- package/esm/tools/utils/byteUtils.js.map +0 -1
- package/esm/tools/utils/functionUtils.d.ts +0 -9
- package/esm/tools/utils/functionUtils.js +0 -43
- package/esm/tools/utils/functionUtils.js.map +0 -1
- package/esm/tools/utils/numberUtils.d.ts +0 -8
- package/esm/tools/utils/numberUtils.js +0 -17
- 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 -19
- package/esm/tools/utils/objectUtils.js.map +0 -1
- package/esm/tools/utils/polyfills.d.ts +0 -24
- package/esm/tools/utils/polyfills.js +0 -95
- 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 -8
- package/esm/tools/utils/stringUtils.js +0 -52
- package/esm/tools/utils/stringUtils.js.map +0 -1
- package/esm/tools/utils/timeUtils.d.ts +0 -57
- package/esm/tools/utils/timeUtils.js +0 -82
- package/esm/tools/utils/timeUtils.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 -14
- package/esm/tools/utils/urlPolyfill.js +0 -80
- package/esm/tools/utils/urlPolyfill.js.map +0 -1
- package/esm/tools/valueHistory.d.ts +0 -50
- package/esm/tools/valueHistory.js +0 -103
- package/esm/tools/valueHistory.js.map +0 -1
- package/esm/transport/batch.d.ts +0 -21
- package/esm/transport/batch.js +0 -120
- package/esm/transport/batch.js.map +0 -1
- package/esm/transport/eventBridge.d.ts +0 -12
- package/esm/transport/eventBridge.js +0 -29
- package/esm/transport/eventBridge.js.map +0 -1
- package/esm/transport/flushController.d.ts +0 -58
- package/esm/transport/flushController.js +0 -108
- package/esm/transport/flushController.js.map +0 -1
- package/esm/transport/httpRequest.d.ts +0 -38
- package/esm/transport/httpRequest.js +0 -89
- package/esm/transport/httpRequest.js.map +0 -1
- package/esm/transport/index.d.ts +0 -4
- package/esm/transport/index.js +0 -5
- package/esm/transport/index.js.map +0 -1
- package/esm/transport/sendWithRetryStrategy.d.ts +0 -39
- package/esm/transport/sendWithRetryStrategy.js +0 -146
- package/esm/transport/sendWithRetryStrategy.js.map +0 -1
- package/esm/transport/startBatchWithReplica.d.ts +0 -20
- package/esm/transport/startBatchWithReplica.js +0 -38
- package/esm/transport/startBatchWithReplica.js.map +0 -1
- package/src/domain/configuration/intakeSites.ts +0 -5
- package/src/domain/configuration/tags.ts +0 -43
- package/src/domain/context/customerDataTracker.ts +0 -134
- package/src/domain/user/index.ts +0 -2
- package/src/domain/user/user.ts +0 -33
- package/src/domain/user/user.types.ts +0 -6
- package/src/transport/startBatchWithReplica.ts +0 -68
package/src/tools/monitor.ts
CHANGED
|
@@ -50,13 +50,17 @@ export function callMonitored<T extends (...args: any[]) => any>(
|
|
|
50
50
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
51
51
|
return fn.apply(context, args)
|
|
52
52
|
} catch (e) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
monitorError(e)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function monitorError(e: unknown) {
|
|
58
|
+
displayIfDebugEnabled(e)
|
|
59
|
+
if (onMonitorErrorCollected) {
|
|
60
|
+
try {
|
|
61
|
+
onMonitorErrorCollected(e)
|
|
62
|
+
} catch (e) {
|
|
63
|
+
displayIfDebugEnabled(e)
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
66
|
}
|
package/src/tools/observable.ts
CHANGED
|
@@ -1,31 +1,42 @@
|
|
|
1
|
+
import { queueMicrotask } from './queueMicrotask'
|
|
2
|
+
|
|
1
3
|
export interface Subscription {
|
|
2
4
|
unsubscribe: () => void
|
|
3
5
|
}
|
|
4
6
|
|
|
7
|
+
type Observer<T> = (data: T) => void
|
|
8
|
+
|
|
9
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
5
10
|
export class Observable<T> {
|
|
6
|
-
|
|
11
|
+
protected observers: Array<Observer<T>> = []
|
|
7
12
|
private onLastUnsubscribe?: () => void
|
|
8
13
|
|
|
9
14
|
constructor(private onFirstSubscribe?: (observable: Observable<T>) => (() => void) | void) {}
|
|
10
15
|
|
|
11
|
-
subscribe(
|
|
12
|
-
|
|
13
|
-
this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined
|
|
14
|
-
}
|
|
15
|
-
this.observers.push(f)
|
|
16
|
+
subscribe(observer: Observer<T>): Subscription {
|
|
17
|
+
this.addObserver(observer)
|
|
16
18
|
return {
|
|
17
|
-
unsubscribe: () =>
|
|
18
|
-
this.observers = this.observers.filter((other) => f !== other)
|
|
19
|
-
if (!this.observers.length && this.onLastUnsubscribe) {
|
|
20
|
-
this.onLastUnsubscribe()
|
|
21
|
-
}
|
|
22
|
-
},
|
|
19
|
+
unsubscribe: () => this.removeObserver(observer),
|
|
23
20
|
}
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
notify(data: T) {
|
|
27
24
|
this.observers.forEach((observer) => observer(data))
|
|
28
25
|
}
|
|
26
|
+
|
|
27
|
+
protected addObserver(observer: Observer<T>) {
|
|
28
|
+
this.observers.push(observer)
|
|
29
|
+
if (this.observers.length === 1 && this.onFirstSubscribe) {
|
|
30
|
+
this.onLastUnsubscribe = this.onFirstSubscribe(this) || undefined
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
protected removeObserver(observer: Observer<T>) {
|
|
35
|
+
this.observers = this.observers.filter((other) => observer !== other)
|
|
36
|
+
if (!this.observers.length && this.onLastUnsubscribe) {
|
|
37
|
+
this.onLastUnsubscribe()
|
|
38
|
+
}
|
|
39
|
+
}
|
|
29
40
|
}
|
|
30
41
|
|
|
31
42
|
export function mergeObservables<T>(...observables: Array<Observable<T>>) {
|
|
@@ -36,3 +47,58 @@ export function mergeObservables<T>(...observables: Array<Observable<T>>) {
|
|
|
36
47
|
return () => subscriptions.forEach((subscription) => subscription.unsubscribe())
|
|
37
48
|
})
|
|
38
49
|
}
|
|
50
|
+
|
|
51
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
52
|
+
export class BufferedObservable<T> extends Observable<T> {
|
|
53
|
+
private buffer: T[] = []
|
|
54
|
+
|
|
55
|
+
constructor(private maxBufferSize: number) {
|
|
56
|
+
super()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
notify(data: T) {
|
|
60
|
+
this.buffer.push(data)
|
|
61
|
+
if (this.buffer.length > this.maxBufferSize) {
|
|
62
|
+
this.buffer.shift()
|
|
63
|
+
}
|
|
64
|
+
super.notify(data)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
subscribe(observer: Observer<T>): Subscription {
|
|
68
|
+
let closed = false
|
|
69
|
+
|
|
70
|
+
const subscription = {
|
|
71
|
+
unsubscribe: () => {
|
|
72
|
+
closed = true
|
|
73
|
+
this.removeObserver(observer)
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
queueMicrotask(() => {
|
|
78
|
+
for (const data of this.buffer) {
|
|
79
|
+
if (closed) {
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
observer(data)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!closed) {
|
|
86
|
+
this.addObserver(observer)
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
return subscription
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Drop buffered data and don't buffer future data. This is to avoid leaking memory when it's not
|
|
95
|
+
* needed anymore. This can be seen as a performance optimization, and things will work probably
|
|
96
|
+
* even if this method isn't called, but still useful to clarify our intent and lowering our
|
|
97
|
+
* memory impact.
|
|
98
|
+
*/
|
|
99
|
+
unbuffer() {
|
|
100
|
+
queueMicrotask(() => {
|
|
101
|
+
this.maxBufferSize = this.buffer.length = 0
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { monitor } from './monitor'
|
|
2
|
+
import { globalObject } from './globalObject'
|
|
3
|
+
|
|
4
|
+
export function queueMicrotask(callback: () => void) {
|
|
5
|
+
const nativeImplementation = globalObject.queueMicrotask?.bind(globalObject)
|
|
6
|
+
|
|
7
|
+
if (typeof nativeImplementation === 'function') {
|
|
8
|
+
nativeImplementation(monitor(callback))
|
|
9
|
+
} else {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises -- the callback is monitored, so it'll never throw
|
|
11
|
+
Promise.resolve().then(monitor(callback))
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -1,77 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Uint8ArrayBuffer } from './utils/byteUtils'
|
|
2
|
+
import { concatBuffers } from './utils/byteUtils'
|
|
2
3
|
import { noop } from './utils/functionUtils'
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
interface Options {
|
|
6
|
+
// TODO(next-major): always collect stream body when `trackEarlyRequests` is removed, as we don't
|
|
7
|
+
// need to use this function to just wait for the end of the stream without collecting it
|
|
6
8
|
collectStreamBody?: boolean
|
|
7
9
|
}
|
|
10
|
+
|
|
8
11
|
/**
|
|
9
|
-
* Read bytes from a ReadableStream until
|
|
10
|
-
* the
|
|
11
|
-
* has been exceeded if more bytes were available.
|
|
12
|
+
* Read bytes from a ReadableStream until the end of the stream.
|
|
13
|
+
* Returns the bytes if collectStreamBody is true, otherwise returns undefined.
|
|
12
14
|
*/
|
|
13
|
-
export function readBytesFromStream(
|
|
14
|
-
stream: ReadableStream<Uint8Array>,
|
|
15
|
-
callback: (error?: Error, bytes?: Uint8Array, limitExceeded?: boolean) => void,
|
|
16
|
-
options: Options
|
|
17
|
-
) {
|
|
15
|
+
export async function readBytesFromStream(stream: ReadableStream<Uint8ArrayBuffer>, options: Options) {
|
|
18
16
|
const reader = stream.getReader()
|
|
19
|
-
const chunks:
|
|
20
|
-
let readBytesCount = 0
|
|
21
|
-
|
|
22
|
-
readMore()
|
|
23
|
-
|
|
24
|
-
function readMore() {
|
|
25
|
-
reader.read().then(
|
|
26
|
-
monitor((result: ReadableStreamReadResult<Uint8Array>) => {
|
|
27
|
-
if (result.done) {
|
|
28
|
-
onDone()
|
|
29
|
-
return
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (options.collectStreamBody) {
|
|
33
|
-
chunks.push(result.value)
|
|
34
|
-
}
|
|
35
|
-
readBytesCount += result.value.length
|
|
36
|
-
|
|
37
|
-
if (readBytesCount > options.bytesLimit) {
|
|
38
|
-
onDone()
|
|
39
|
-
} else {
|
|
40
|
-
readMore()
|
|
41
|
-
}
|
|
42
|
-
}),
|
|
43
|
-
monitor((error) => callback(error))
|
|
44
|
-
)
|
|
45
|
-
}
|
|
17
|
+
const chunks: Uint8ArrayBuffer[] = []
|
|
46
18
|
|
|
47
|
-
|
|
48
|
-
reader.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
)
|
|
19
|
+
while (true) {
|
|
20
|
+
const result = await reader.read()
|
|
21
|
+
if (result.done) {
|
|
22
|
+
break
|
|
23
|
+
}
|
|
53
24
|
|
|
54
|
-
let bytes: Uint8Array | undefined
|
|
55
|
-
let limitExceeded: boolean | undefined
|
|
56
25
|
if (options.collectStreamBody) {
|
|
57
|
-
|
|
58
|
-
if (chunks.length === 1) {
|
|
59
|
-
// optimization: if the response is small enough to fit in a single buffer (provided by the browser), just
|
|
60
|
-
// use it directly.
|
|
61
|
-
completeBuffer = chunks[0]
|
|
62
|
-
} else {
|
|
63
|
-
// else, we need to copy buffers into a larger buffer to concatenate them.
|
|
64
|
-
completeBuffer = new Uint8Array(readBytesCount)
|
|
65
|
-
let offset = 0
|
|
66
|
-
chunks.forEach((chunk) => {
|
|
67
|
-
completeBuffer.set(chunk, offset)
|
|
68
|
-
offset += chunk.length
|
|
69
|
-
})
|
|
70
|
-
}
|
|
71
|
-
bytes = completeBuffer.slice(0, options.bytesLimit)
|
|
72
|
-
limitExceeded = completeBuffer.length > options.bytesLimit
|
|
26
|
+
chunks.push(result.value)
|
|
73
27
|
}
|
|
74
|
-
|
|
75
|
-
callback(undefined, bytes, limitExceeded)
|
|
76
28
|
}
|
|
29
|
+
|
|
30
|
+
reader.cancel().catch(
|
|
31
|
+
// we don't care if cancel fails, but we still need to catch the error to avoid reporting it
|
|
32
|
+
// as an unhandled rejection
|
|
33
|
+
noop
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
return options.collectStreamBody ? concatBuffers(chunks) : undefined
|
|
77
37
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { setTimeout, clearTimeout } from './timer'
|
|
2
|
+
import { monitor } from './monitor'
|
|
3
|
+
import { dateNow } from './utils/timeUtils'
|
|
4
|
+
|
|
5
|
+
// This type is not yet supported in TS 3.8. Imported from the TS source until we upgrade the
|
|
6
|
+
// minimum supported TS version.
|
|
7
|
+
// https://github.com/microsoft/TypeScript/blob/13c374a868c926f6a907666a5599992c1351b773/src/lib/dom.generated.d.ts#L9513-L9516
|
|
8
|
+
export interface IdleDeadline {
|
|
9
|
+
readonly didTimeout: boolean
|
|
10
|
+
timeRemaining(): DOMHighResTimeStamp
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 'requestIdleCallback' with a shim.
|
|
15
|
+
*/
|
|
16
|
+
export function requestIdleCallback(callback: (deadline: IdleDeadline) => void, opts?: { timeout?: number }) {
|
|
17
|
+
// Note: check both 'requestIdleCallback' and 'cancelIdleCallback' existence because some polyfills only implement 'requestIdleCallback'.
|
|
18
|
+
if (window.requestIdleCallback && window.cancelIdleCallback) {
|
|
19
|
+
const id = window.requestIdleCallback(monitor(callback), opts)
|
|
20
|
+
return () => window.cancelIdleCallback(id)
|
|
21
|
+
}
|
|
22
|
+
return requestIdleCallbackShim(callback)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const MAX_TASK_TIME = 50
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Shim from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback
|
|
29
|
+
* Note: there is no simple way to support the "timeout" option, so we ignore it.
|
|
30
|
+
*/
|
|
31
|
+
export function requestIdleCallbackShim(callback: (deadline: IdleDeadline) => void) {
|
|
32
|
+
const start = dateNow()
|
|
33
|
+
const timeoutId = setTimeout(() => {
|
|
34
|
+
callback({
|
|
35
|
+
didTimeout: false,
|
|
36
|
+
timeRemaining: () => Math.max(0, MAX_TASK_TIME - (dateNow() - start)),
|
|
37
|
+
})
|
|
38
|
+
}, 0)
|
|
39
|
+
return () => clearTimeout(timeoutId)
|
|
40
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { globalObject } from './globalObject'
|
|
2
|
+
|
|
1
3
|
interface BrowserWindow {
|
|
2
4
|
__ooBrowserSdkExtensionCallback?: (message: unknown) => void
|
|
3
5
|
}
|
|
@@ -5,7 +7,7 @@ interface BrowserWindow {
|
|
|
5
7
|
type ExtensionMessageType = 'logs' | 'record' | 'rum' | 'telemetry'
|
|
6
8
|
|
|
7
9
|
export function sendToExtension(type: ExtensionMessageType, payload: unknown) {
|
|
8
|
-
const callback = (
|
|
10
|
+
const callback = (globalObject as BrowserWindow).__ooBrowserSdkExtensionCallback
|
|
9
11
|
if (callback) {
|
|
10
12
|
callback({ type, payload })
|
|
11
13
|
}
|
|
@@ -4,5 +4,8 @@ export interface Context {
|
|
|
4
4
|
|
|
5
5
|
export type ContextValue = string | number | boolean | Context | ContextArray | undefined | null
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* @hidden
|
|
9
|
+
*/
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
8
11
|
export interface ContextArray extends Array<ContextValue> {}
|
|
@@ -4,18 +4,27 @@ import type { Context, ContextArray, ContextValue } from './context'
|
|
|
4
4
|
import type { ObjectWithToJsonMethod } from './jsonStringify'
|
|
5
5
|
import { detachToJsonMethod } from './jsonStringify'
|
|
6
6
|
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
8
8
|
type PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function
|
|
9
9
|
type ExtendedContextValue = PrimitivesAndFunctions | object | ExtendedContext | ExtendedContextArray
|
|
10
|
-
|
|
10
|
+
interface ExtendedContext {
|
|
11
|
+
[key: string]: ExtendedContextValue
|
|
12
|
+
}
|
|
11
13
|
type ExtendedContextArray = ExtendedContextValue[]
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
interface ContainerElementToProcess {
|
|
14
16
|
source: ExtendedContextArray | ExtendedContext
|
|
15
17
|
target: ContextArray | Context
|
|
16
18
|
path: string
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
interface SanitizedEvent extends Context {
|
|
22
|
+
type: string
|
|
23
|
+
isTrusted: boolean
|
|
24
|
+
currentTarget: string | null | undefined
|
|
25
|
+
target: string | null | undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data
|
|
20
29
|
// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...
|
|
21
30
|
const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE
|
|
@@ -38,8 +47,8 @@ const KEY_DECORATION_LENGTH = 3
|
|
|
38
47
|
* - Size does not take into account indentation that can be applied to JSON.stringify
|
|
39
48
|
* - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify
|
|
40
49
|
*
|
|
41
|
-
* @param source User-provided data meant to be serialized using JSON.stringify
|
|
42
|
-
* @param maxCharacterCount Maximum number of characters allowed in serialized form
|
|
50
|
+
* @param source - User-provided data meant to be serialized using JSON.stringify
|
|
51
|
+
* @param maxCharacterCount - Maximum number of characters allowed in serialized form
|
|
43
52
|
*/
|
|
44
53
|
export function sanitize(source: string, maxCharacterCount?: number): string | undefined
|
|
45
54
|
export function sanitize(source: Context, maxCharacterCount?: number): Context
|
|
@@ -59,7 +68,9 @@ export function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_M
|
|
|
59
68
|
containerQueue,
|
|
60
69
|
visitedObjectsWithPath
|
|
61
70
|
)
|
|
62
|
-
|
|
71
|
+
const serializedSanitizedData = JSON.stringify(sanitizedData)
|
|
72
|
+
let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0
|
|
73
|
+
|
|
63
74
|
if (accumulatedCharacterCount > maxCharacterCount) {
|
|
64
75
|
warnOverCharacterLimit(maxCharacterCount, 'discarded', source)
|
|
65
76
|
return undefined
|
|
@@ -201,17 +212,15 @@ function sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {
|
|
|
201
212
|
* LIMITATIONS
|
|
202
213
|
* - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.
|
|
203
214
|
* To avoid this, a toJSON method can be defined.
|
|
204
|
-
* - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their
|
|
205
|
-
* properties enumerated if any.
|
|
206
|
-
*
|
|
207
215
|
*/
|
|
208
|
-
function sanitizeObjects(value: object) {
|
|
216
|
+
function sanitizeObjects(value: object): string | SanitizedEvent {
|
|
209
217
|
try {
|
|
210
|
-
// Handle events - Keep a simple implementation to avoid breaking changes
|
|
211
218
|
if (value instanceof Event) {
|
|
212
|
-
return
|
|
213
|
-
|
|
214
|
-
|
|
219
|
+
return sanitizeEvent(value)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (value instanceof RegExp) {
|
|
223
|
+
return `[RegExp] ${value.toString()}`
|
|
215
224
|
}
|
|
216
225
|
|
|
217
226
|
// Handle all remaining object types in a generic way
|
|
@@ -227,6 +236,15 @@ function sanitizeObjects(value: object) {
|
|
|
227
236
|
return '[Unserializable]'
|
|
228
237
|
}
|
|
229
238
|
|
|
239
|
+
function sanitizeEvent(event: Event): SanitizedEvent {
|
|
240
|
+
return {
|
|
241
|
+
type: event.type,
|
|
242
|
+
isTrusted: event.isTrusted,
|
|
243
|
+
currentTarget: event.currentTarget ? (sanitizeObjects(event.currentTarget) as string) : null,
|
|
244
|
+
target: event.target ? (sanitizeObjects(event.target) as string) : null,
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
230
248
|
/**
|
|
231
249
|
* Checks if a toJSON function exists and tries to execute it
|
|
232
250
|
*
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { startsWith } from '../../tools/utils/polyfills'
|
|
8
|
-
|
|
9
7
|
export interface StackFrame {
|
|
10
8
|
url?: string
|
|
11
9
|
func?: string
|
|
@@ -33,7 +31,7 @@ export function computeStackTrace(ex: unknown): StackTrace {
|
|
|
33
31
|
|
|
34
32
|
let stackProperty = tryToGetString(ex, 'stack')
|
|
35
33
|
const exString = String(ex)
|
|
36
|
-
if (stackProperty && startsWith(
|
|
34
|
+
if (stackProperty && stackProperty.startsWith(exString)) {
|
|
37
35
|
stackProperty = stackProperty.slice(exString.length)
|
|
38
36
|
}
|
|
39
37
|
if (stackProperty) {
|
|
@@ -50,13 +48,37 @@ export function computeStackTrace(ex: unknown): StackTrace {
|
|
|
50
48
|
})
|
|
51
49
|
}
|
|
52
50
|
|
|
51
|
+
if (stack.length > 0 && isWronglyReportingCustomErrors() && ex instanceof Error) {
|
|
52
|
+
// if we are wrongly reporting custom errors
|
|
53
|
+
const constructors: string[] = []
|
|
54
|
+
|
|
55
|
+
// go through each inherited constructor
|
|
56
|
+
let currentPrototype: object | undefined = ex
|
|
57
|
+
while (
|
|
58
|
+
(currentPrototype = Object.getPrototypeOf(currentPrototype)) &&
|
|
59
|
+
isNonNativeClassPrototype(currentPrototype)
|
|
60
|
+
) {
|
|
61
|
+
const constructorName = currentPrototype.constructor?.name || UNKNOWN_FUNCTION
|
|
62
|
+
constructors.push(constructorName)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// traverse the stacktrace in reverse order because the stacktrace starts with the last inherited constructor
|
|
66
|
+
// we check constructor names to ensure we remove the correct frame (and there isn't a weird unsupported environment behavior)
|
|
67
|
+
for (let i = constructors.length - 1; i >= 0 && stack[0]?.func === constructors[i]; i--) {
|
|
68
|
+
// if the first stack frame is the custom error constructor
|
|
69
|
+
// null stack frames may represent frames that failed to be parsed because the error class did not have a constructor
|
|
70
|
+
stack.shift() // remove it
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
53
74
|
return {
|
|
54
75
|
message: tryToGetString(ex, 'message'),
|
|
55
76
|
name: tryToGetString(ex, 'name'),
|
|
56
77
|
stack,
|
|
57
78
|
}
|
|
58
79
|
}
|
|
59
|
-
const fileUrl =
|
|
80
|
+
const fileUrl =
|
|
81
|
+
'((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)'
|
|
60
82
|
const filePosition = '(?::(\\d+))'
|
|
61
83
|
const CHROME_LINE_RE = new RegExp(`^\\s*at (.*?) ?\\(${fileUrl}${filePosition}?${filePosition}?\\)?\\s*$`, 'i')
|
|
62
84
|
|
|
@@ -126,7 +148,7 @@ function parseWinLine(line: string): StackFrame | undefined {
|
|
|
126
148
|
}
|
|
127
149
|
|
|
128
150
|
const GECKO_LINE_RE =
|
|
129
|
-
/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))
|
|
151
|
+
/^\s*(.*?)(?:\((.*?)\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle|\[wasm code\])(?::(\d+))?(?::(\d+))?)|@)\s*$/i
|
|
130
152
|
const GECKO_EVAL_RE = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i
|
|
131
153
|
|
|
132
154
|
function parseGeckoLine(line: string): StackFrame | undefined {
|
|
@@ -162,13 +184,20 @@ function tryToGetString(candidate: unknown, property: string) {
|
|
|
162
184
|
return typeof value === 'string' ? value : undefined
|
|
163
185
|
}
|
|
164
186
|
|
|
165
|
-
export function computeStackTraceFromOnErrorMessage(
|
|
166
|
-
|
|
187
|
+
export function computeStackTraceFromOnErrorMessage(
|
|
188
|
+
messageObj: unknown,
|
|
189
|
+
url?: string,
|
|
190
|
+
line?: number,
|
|
191
|
+
column?: number
|
|
192
|
+
): StackTrace | undefined {
|
|
193
|
+
if (url === undefined) {
|
|
194
|
+
return
|
|
195
|
+
}
|
|
167
196
|
const { name, message } = tryToParseMessage(messageObj)
|
|
168
197
|
return {
|
|
169
198
|
name,
|
|
170
199
|
message,
|
|
171
|
-
stack,
|
|
200
|
+
stack: [{ url, column, line }],
|
|
172
201
|
}
|
|
173
202
|
}
|
|
174
203
|
|
|
@@ -184,3 +213,38 @@ function tryToParseMessage(messageObj: unknown) {
|
|
|
184
213
|
}
|
|
185
214
|
return { name, message }
|
|
186
215
|
}
|
|
216
|
+
|
|
217
|
+
// Custom error stacktrace fix
|
|
218
|
+
// Some browsers (safari/firefox) add the error constructor as a frame in the stacktrace
|
|
219
|
+
// In order to normalize the stacktrace, we need to remove it
|
|
220
|
+
|
|
221
|
+
function isNonNativeClassPrototype(prototype: object) {
|
|
222
|
+
return String(prototype.constructor).startsWith('class ')
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
let isWronglyReportingCustomErrorsCache: boolean | undefined
|
|
226
|
+
|
|
227
|
+
function isWronglyReportingCustomErrors() {
|
|
228
|
+
if (isWronglyReportingCustomErrorsCache !== undefined) {
|
|
229
|
+
return isWronglyReportingCustomErrorsCache
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* eslint-disable no-restricted-syntax */
|
|
233
|
+
class DatadogTestCustomError extends Error {
|
|
234
|
+
constructor() {
|
|
235
|
+
super()
|
|
236
|
+
this.name = 'Error' // set name to Error so that no browser would default to the constructor name
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const [customError, nativeError] = [DatadogTestCustomError, Error].map((errConstructor) => new errConstructor()) // so that both errors should exactly have the same stacktrace
|
|
241
|
+
|
|
242
|
+
isWronglyReportingCustomErrorsCache =
|
|
243
|
+
// If customError is not a class, it means that this was built with ES5 as target, converting the class to a normal object.
|
|
244
|
+
// Thus, error constructors will be reported on all browsers, which is the expected behavior.
|
|
245
|
+
isNonNativeClassPrototype(Object.getPrototypeOf(customError)) &&
|
|
246
|
+
// If the browser is correctly reporting the stacktrace, the normal error stacktrace should be the same as the custom error stacktrace
|
|
247
|
+
nativeError.stack !== customError.stack
|
|
248
|
+
|
|
249
|
+
return isWronglyReportingCustomErrorsCache
|
|
250
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { callMonitored } from '../monitor'
|
|
2
|
+
import type { StackTrace } from './computeStackTrace'
|
|
3
|
+
import { computeStackTrace } from './computeStackTrace'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a stacktrace without SDK internal frames.
|
|
7
|
+
* Constraints:
|
|
8
|
+
* - Has to be called at the utmost position of the call stack.
|
|
9
|
+
* - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.
|
|
10
|
+
*/
|
|
11
|
+
export function createHandlingStack(
|
|
12
|
+
type: 'console error' | 'action' | 'error' | 'instrumented method' | 'log' | 'react error'
|
|
13
|
+
): string {
|
|
14
|
+
/**
|
|
15
|
+
* Skip the two internal frames:
|
|
16
|
+
* - SDK API (console.error, ...)
|
|
17
|
+
* - this function
|
|
18
|
+
* in order to keep only the user calls
|
|
19
|
+
*/
|
|
20
|
+
const internalFramesToSkip = 2
|
|
21
|
+
const error = new Error(type)
|
|
22
|
+
error.name = 'HandlingStack'
|
|
23
|
+
let formattedStack: string
|
|
24
|
+
|
|
25
|
+
callMonitored(() => {
|
|
26
|
+
const stackTrace = computeStackTrace(error)
|
|
27
|
+
stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)
|
|
28
|
+
formattedStack = toStackTraceString(stackTrace)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return formattedStack!
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function toStackTraceString(stack: StackTrace) {
|
|
35
|
+
let result = formatErrorMessage(stack)
|
|
36
|
+
stack.stack.forEach((frame) => {
|
|
37
|
+
const func = frame.func === '?' ? '<anonymous>' : frame.func
|
|
38
|
+
const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(', ')})` : ''
|
|
39
|
+
const line = frame.line ? `:${frame.line}` : ''
|
|
40
|
+
const column = frame.line && frame.column ? `:${frame.column}` : ''
|
|
41
|
+
result += `\n at ${func!}${args} @ ${frame.url!}${line}${column}`
|
|
42
|
+
})
|
|
43
|
+
return result
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function formatErrorMessage(stack: StackTrace) {
|
|
47
|
+
return `${stack.name || 'Error'}: ${stack.message!}`
|
|
48
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ONE_SECOND } from './utils/timeUtils'
|
|
2
|
+
import { requestIdleCallback } from './requestIdleCallback'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Maximum delay before starting to execute tasks in the queue. We don't want to wait too long
|
|
6
|
+
* before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose
|
|
7
|
+
* the opportunity to send some data). We also don't want to run tasks too often, as it might hurt
|
|
8
|
+
* performance.
|
|
9
|
+
*/
|
|
10
|
+
const IDLE_CALLBACK_TIMEOUT = ONE_SECOND
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is
|
|
14
|
+
* reached. We should not run tasks for too long as it will hurt performance, but we should still
|
|
15
|
+
* run some tasks to avoid postponing them forever.
|
|
16
|
+
*
|
|
17
|
+
* Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.
|
|
18
|
+
*/
|
|
19
|
+
export const MAX_EXECUTION_TIME_ON_TIMEOUT = 30
|
|
20
|
+
|
|
21
|
+
export interface TaskQueue {
|
|
22
|
+
push(task: Task): void
|
|
23
|
+
stop(): void
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type Task = () => void
|
|
27
|
+
|
|
28
|
+
export function createTaskQueue(): TaskQueue {
|
|
29
|
+
const pendingTasks: Task[] = []
|
|
30
|
+
|
|
31
|
+
function run(deadline: IdleDeadline) {
|
|
32
|
+
let executionTimeRemaining: () => number
|
|
33
|
+
if (deadline.didTimeout) {
|
|
34
|
+
const start = performance.now()
|
|
35
|
+
executionTimeRemaining = () => MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start)
|
|
36
|
+
} else {
|
|
37
|
+
executionTimeRemaining = deadline.timeRemaining.bind(deadline)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
while (executionTimeRemaining() > 0 && pendingTasks.length) {
|
|
41
|
+
pendingTasks.shift()!()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (pendingTasks.length) {
|
|
45
|
+
scheduleNextRun()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function scheduleNextRun() {
|
|
50
|
+
requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT })
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
push(task) {
|
|
55
|
+
if (pendingTasks.push(task) === 1) {
|
|
56
|
+
scheduleNextRun()
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
stop() {
|
|
60
|
+
pendingTasks.length = 0
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
}
|
package/src/tools/timer.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'
|
|
2
2
|
import { monitor } from './monitor'
|
|
3
|
-
import { getGlobalObject } from './
|
|
3
|
+
import { getGlobalObject } from './globalObject'
|
|
4
4
|
|
|
5
5
|
export type TimeoutId = ReturnType<typeof globalThis.setTimeout>
|
|
6
6
|
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import { arrayFrom } from './polyfills'
|
|
2
|
-
|
|
3
1
|
export function removeDuplicates<T>(array: T[]) {
|
|
4
2
|
const set = new Set<T>()
|
|
5
3
|
array.forEach((item) => set.add(item))
|
|
6
|
-
return
|
|
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
|
|
7
15
|
}
|