@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,170 @@
|
|
|
1
|
+
import { setTimeout } from './timer'
|
|
2
|
+
import { callMonitored } from './monitor'
|
|
3
|
+
import { noop } from './utils/functionUtils'
|
|
4
|
+
import { createHandlingStack } from './stackTrace/handlingStack'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Object passed to the callback of an instrumented method call. See `instrumentMethod` for more
|
|
8
|
+
* info.
|
|
9
|
+
*/
|
|
10
|
+
export interface InstrumentedMethodCall<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> {
|
|
11
|
+
/**
|
|
12
|
+
* The target object on which the method was called.
|
|
13
|
+
*/
|
|
14
|
+
target: TARGET
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The parameters with which the method was called.
|
|
18
|
+
*
|
|
19
|
+
* Note: if needed, parameters can be mutated by the instrumentation
|
|
20
|
+
*/
|
|
21
|
+
parameters: Parameters<TARGET[METHOD]>
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Registers a callback that will be called after the original method is called, with the method
|
|
25
|
+
* result passed as argument.
|
|
26
|
+
*/
|
|
27
|
+
onPostCall: (callback: PostCallCallback<TARGET, METHOD>) => void
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The stack trace of the method call.
|
|
31
|
+
*/
|
|
32
|
+
handlingStack?: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type PostCallCallback<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET> = (
|
|
36
|
+
result: ReturnType<TARGET[METHOD]>
|
|
37
|
+
) => void
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Instruments a method on a object, calling the given callback before the original method is
|
|
41
|
+
* invoked. The callback receives an object with information about the method call.
|
|
42
|
+
*
|
|
43
|
+
* This function makes sure that we are "good citizens" regarding third party instrumentations: when
|
|
44
|
+
* removing the instrumentation, the original method is usually restored, but if a third party
|
|
45
|
+
* instrumentation was set after ours, we keep it in place and just replace our instrumentation with
|
|
46
|
+
* a noop.
|
|
47
|
+
*
|
|
48
|
+
* Note: it is generally better to instrument methods that are "owned" by the object instead of ones
|
|
49
|
+
* that are inherited from the prototype chain. Example:
|
|
50
|
+
* * do: `instrumentMethod(Array.prototype, 'push', ...)`
|
|
51
|
+
* * don't: `instrumentMethod([], 'push', ...)`
|
|
52
|
+
*
|
|
53
|
+
* This method is also used to set event handler properties (ex: window.onerror = ...), as it has
|
|
54
|
+
* the same requirements as instrumenting a method:
|
|
55
|
+
* * if the event handler is already set by a third party, we need to call it and not just blindly
|
|
56
|
+
* override it.
|
|
57
|
+
* * if the event handler is set by a third party after us, we need to keep it in place when
|
|
58
|
+
* removing ours.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
*
|
|
62
|
+
* instrumentMethod(window, 'fetch', ({ target, parameters, onPostCall }) => {
|
|
63
|
+
* console.log('Before calling fetch on', target, 'with parameters', parameters)
|
|
64
|
+
*
|
|
65
|
+
* onPostCall((result) => {
|
|
66
|
+
* console.log('After fetch calling on', target, 'with parameters', parameters, 'and result', result)
|
|
67
|
+
* })
|
|
68
|
+
* })
|
|
69
|
+
*/
|
|
70
|
+
export function instrumentMethod<TARGET extends { [key: string]: any }, METHOD extends keyof TARGET & string>(
|
|
71
|
+
targetPrototype: TARGET,
|
|
72
|
+
method: METHOD,
|
|
73
|
+
onPreCall: (this: null, callInfos: InstrumentedMethodCall<TARGET, METHOD>) => void,
|
|
74
|
+
{ computeHandlingStack }: { computeHandlingStack?: boolean } = {}
|
|
75
|
+
) {
|
|
76
|
+
let original = targetPrototype[method]
|
|
77
|
+
|
|
78
|
+
if (typeof original !== 'function') {
|
|
79
|
+
if (method in targetPrototype && method.startsWith('on')) {
|
|
80
|
+
original = noop as TARGET[METHOD]
|
|
81
|
+
} else {
|
|
82
|
+
return { stop: noop }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let stopped = false
|
|
87
|
+
|
|
88
|
+
const instrumentation = function (this: TARGET): ReturnType<TARGET[METHOD]> | undefined {
|
|
89
|
+
if (stopped) {
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
|
|
91
|
+
return original.apply(this, arguments as unknown as Parameters<TARGET[METHOD]>)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const parameters = Array.from(arguments) as Parameters<TARGET[METHOD]>
|
|
95
|
+
|
|
96
|
+
let postCallCallback: PostCallCallback<TARGET, METHOD> | undefined
|
|
97
|
+
|
|
98
|
+
callMonitored(onPreCall, null, [
|
|
99
|
+
{
|
|
100
|
+
target: this,
|
|
101
|
+
parameters,
|
|
102
|
+
onPostCall: (callback) => {
|
|
103
|
+
postCallCallback = callback
|
|
104
|
+
},
|
|
105
|
+
handlingStack: computeHandlingStack ? createHandlingStack('instrumented method') : undefined,
|
|
106
|
+
},
|
|
107
|
+
])
|
|
108
|
+
|
|
109
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
110
|
+
const result = original.apply(this, parameters)
|
|
111
|
+
|
|
112
|
+
if (postCallCallback) {
|
|
113
|
+
callMonitored(postCallCallback, null, [result])
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
117
|
+
return result
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
targetPrototype[method] = instrumentation as TARGET[METHOD]
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
stop: () => {
|
|
124
|
+
stopped = true
|
|
125
|
+
// If the instrumentation has been removed by a third party, keep the last one
|
|
126
|
+
if (targetPrototype[method] === instrumentation) {
|
|
127
|
+
targetPrototype[method] = original
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function instrumentSetter<TARGET extends { [key: string]: any }, PROPERTY extends keyof TARGET>(
|
|
134
|
+
targetPrototype: TARGET,
|
|
135
|
+
property: PROPERTY,
|
|
136
|
+
after: (target: TARGET, value: TARGET[PROPERTY]) => void
|
|
137
|
+
) {
|
|
138
|
+
const originalDescriptor = Object.getOwnPropertyDescriptor(targetPrototype, property)
|
|
139
|
+
if (!originalDescriptor || !originalDescriptor.set || !originalDescriptor.configurable) {
|
|
140
|
+
return { stop: noop }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const stoppedInstrumentation = noop
|
|
144
|
+
let instrumentation = (target: TARGET, value: TARGET[PROPERTY]) => {
|
|
145
|
+
// put hooked setter into event loop to avoid of set latency
|
|
146
|
+
setTimeout(() => {
|
|
147
|
+
if (instrumentation !== stoppedInstrumentation) {
|
|
148
|
+
after(target, value)
|
|
149
|
+
}
|
|
150
|
+
}, 0)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const instrumentationWrapper = function (this: TARGET, value: TARGET[PROPERTY]) {
|
|
154
|
+
originalDescriptor.set!.call(this, value)
|
|
155
|
+
instrumentation(this, value)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
Object.defineProperty(targetPrototype, property, {
|
|
159
|
+
set: instrumentationWrapper,
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
stop: () => {
|
|
164
|
+
if (Object.getOwnPropertyDescriptor(targetPrototype, property)?.set === instrumentationWrapper) {
|
|
165
|
+
Object.defineProperty(targetPrototype, property, originalDescriptor)
|
|
166
|
+
}
|
|
167
|
+
instrumentation = stoppedInstrumentation
|
|
168
|
+
},
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { display } from './display'
|
|
2
|
+
import { getType } from './utils/typeUtils'
|
|
3
|
+
|
|
4
|
+
export type MatchOption = string | RegExp | ((value: string) => boolean)
|
|
5
|
+
|
|
6
|
+
export function isMatchOption(item: unknown): item is MatchOption {
|
|
7
|
+
const itemType = getType(item)
|
|
8
|
+
return itemType === 'string' || itemType === 'function' || item instanceof RegExp
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns true if value can be matched by at least one of the provided MatchOptions.
|
|
13
|
+
* When comparing strings, setting useStartsWith to true will compare the value with the start of
|
|
14
|
+
* the option, instead of requiring an exact match.
|
|
15
|
+
*/
|
|
16
|
+
export function matchList(list: MatchOption[], value: string, useStartsWith = false): boolean {
|
|
17
|
+
return list.some((item) => {
|
|
18
|
+
try {
|
|
19
|
+
if (typeof item === 'function') {
|
|
20
|
+
return item(value)
|
|
21
|
+
} else if (item instanceof RegExp) {
|
|
22
|
+
return item.test(value)
|
|
23
|
+
} else if (typeof item === 'string') {
|
|
24
|
+
return useStartsWith ? value.startsWith(item) : item === value
|
|
25
|
+
}
|
|
26
|
+
} catch (e) {
|
|
27
|
+
display.error(e)
|
|
28
|
+
}
|
|
29
|
+
return false
|
|
30
|
+
})
|
|
31
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { getType } from './utils/typeUtils'
|
|
2
|
+
|
|
3
|
+
type Merged<TDestination, TSource> =
|
|
4
|
+
// case 1 - source is undefined - return destination
|
|
5
|
+
TSource extends undefined
|
|
6
|
+
? TDestination
|
|
7
|
+
: // case 2 - destination is undefined - return source
|
|
8
|
+
TDestination extends undefined
|
|
9
|
+
? TSource
|
|
10
|
+
: // case 3 - source is an array - see if it merges or overwrites
|
|
11
|
+
TSource extends any[]
|
|
12
|
+
? TDestination extends any[]
|
|
13
|
+
? TDestination & TSource
|
|
14
|
+
: TSource
|
|
15
|
+
: // case 4 - source is an object - see if it merges or overwrites
|
|
16
|
+
TSource extends object
|
|
17
|
+
? TDestination extends object
|
|
18
|
+
? TDestination extends any[]
|
|
19
|
+
? TSource
|
|
20
|
+
: TDestination & TSource
|
|
21
|
+
: TSource
|
|
22
|
+
: // case 5 - cannot merge - return source
|
|
23
|
+
TSource
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Iterate over source and affect its sub values into destination, recursively.
|
|
27
|
+
* If the source and destination can't be merged, return source.
|
|
28
|
+
*/
|
|
29
|
+
export function mergeInto<D, S>(
|
|
30
|
+
destination: D,
|
|
31
|
+
source: S,
|
|
32
|
+
circularReferenceChecker = createCircularReferenceChecker()
|
|
33
|
+
): Merged<D, S> {
|
|
34
|
+
// ignore the source if it is undefined
|
|
35
|
+
if (source === undefined) {
|
|
36
|
+
return destination as Merged<D, S>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (typeof source !== 'object' || source === null) {
|
|
40
|
+
// primitive values - just return source
|
|
41
|
+
return source as Merged<D, S>
|
|
42
|
+
} else if (source instanceof Date) {
|
|
43
|
+
return new Date(source.getTime()) as unknown as Merged<D, S>
|
|
44
|
+
} else if (source instanceof RegExp) {
|
|
45
|
+
const flags =
|
|
46
|
+
source.flags ||
|
|
47
|
+
// old browsers compatibility
|
|
48
|
+
[
|
|
49
|
+
source.global ? 'g' : '',
|
|
50
|
+
source.ignoreCase ? 'i' : '',
|
|
51
|
+
source.multiline ? 'm' : '',
|
|
52
|
+
source.sticky ? 'y' : '',
|
|
53
|
+
source.unicode ? 'u' : '',
|
|
54
|
+
].join('')
|
|
55
|
+
return new RegExp(source.source, flags) as unknown as Merged<D, S>
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (circularReferenceChecker.hasAlreadyBeenSeen(source)) {
|
|
59
|
+
// remove circular references
|
|
60
|
+
return undefined as unknown as Merged<D, S>
|
|
61
|
+
} else if (Array.isArray(source)) {
|
|
62
|
+
const merged: any[] = Array.isArray(destination) ? destination : []
|
|
63
|
+
for (let i = 0; i < source.length; ++i) {
|
|
64
|
+
merged[i] = mergeInto(merged[i], source[i], circularReferenceChecker)
|
|
65
|
+
}
|
|
66
|
+
return merged as unknown as Merged<D, S>
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const merged = getType(destination) === 'object' ? (destination as Record<any, any>) : {}
|
|
70
|
+
for (const key in source) {
|
|
71
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
72
|
+
merged[key] = mergeInto(merged[key], source[key], circularReferenceChecker)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return merged as unknown as Merged<D, S>
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* A simplistic implementation of a deep clone algorithm.
|
|
80
|
+
* Caveats:
|
|
81
|
+
* - It doesn't maintain prototype chains - don't use with instances of custom classes.
|
|
82
|
+
* - It doesn't handle Map and Set
|
|
83
|
+
*/
|
|
84
|
+
export function deepClone<T>(value: T): T {
|
|
85
|
+
return mergeInto(undefined, value) as T
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
type Combined<A, B> = A extends null ? B : B extends null ? A : Merged<A, B>
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* Performs a deep merge of objects and arrays.
|
|
92
|
+
* - Arguments won't be mutated
|
|
93
|
+
* - Object and arrays in the output value are de-referenced ("deep cloned")
|
|
94
|
+
* - Arrays values are merged index by index
|
|
95
|
+
* - Objects are merged by keys
|
|
96
|
+
* - Values get replaced, unless undefined
|
|
97
|
+
*/
|
|
98
|
+
export function combine<A, B>(a: A, b: B): Combined<A, B>
|
|
99
|
+
export function combine<A, B, C>(a: A, b: B, c: C): Combined<Combined<A, B>, C>
|
|
100
|
+
export function combine<A, B, C, D>(a: A, b: B, c: C, d: D): Combined<Combined<Combined<A, B>, C>, D>
|
|
101
|
+
export function combine<A, B, C, D, E>(
|
|
102
|
+
a: A,
|
|
103
|
+
b: B,
|
|
104
|
+
c: C,
|
|
105
|
+
d: D,
|
|
106
|
+
e: E
|
|
107
|
+
): Combined<Combined<Combined<Combined<A, B>, C>, D>, E>
|
|
108
|
+
export function combine<A, B, C, D, E, F>(
|
|
109
|
+
a: A,
|
|
110
|
+
b: B,
|
|
111
|
+
c: C,
|
|
112
|
+
d: D,
|
|
113
|
+
e: E,
|
|
114
|
+
f: F
|
|
115
|
+
): Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>
|
|
116
|
+
export function combine<A, B, C, D, E, F, G>(
|
|
117
|
+
a: A,
|
|
118
|
+
b: B,
|
|
119
|
+
c: C,
|
|
120
|
+
d: D,
|
|
121
|
+
e: E,
|
|
122
|
+
f: F,
|
|
123
|
+
g: G
|
|
124
|
+
): Combined<Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>, G>
|
|
125
|
+
export function combine<A, B, C, D, E, F, G, H>(
|
|
126
|
+
a: A,
|
|
127
|
+
b: B,
|
|
128
|
+
c: C,
|
|
129
|
+
d: D,
|
|
130
|
+
e: E,
|
|
131
|
+
f: F,
|
|
132
|
+
g: G,
|
|
133
|
+
h: H
|
|
134
|
+
): Combined<Combined<Combined<Combined<Combined<Combined<Combined<A, B>, C>, D>, E>, F>, G>, H>
|
|
135
|
+
export function combine(...sources: any[]): unknown {
|
|
136
|
+
let destination: any
|
|
137
|
+
|
|
138
|
+
for (const source of sources) {
|
|
139
|
+
// Ignore any undefined or null sources.
|
|
140
|
+
if (source === undefined || source === null) {
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
destination = mergeInto(destination, source)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return destination as unknown
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface CircularReferenceChecker {
|
|
151
|
+
hasAlreadyBeenSeen(value: any): boolean
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function createCircularReferenceChecker(): CircularReferenceChecker {
|
|
155
|
+
if (typeof WeakSet !== 'undefined') {
|
|
156
|
+
const set: WeakSet<any> = new WeakSet()
|
|
157
|
+
return {
|
|
158
|
+
hasAlreadyBeenSeen(value) {
|
|
159
|
+
const has = set.has(value)
|
|
160
|
+
if (!has) {
|
|
161
|
+
set.add(value)
|
|
162
|
+
}
|
|
163
|
+
return has
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const array: any[] = []
|
|
168
|
+
return {
|
|
169
|
+
hasAlreadyBeenSeen(value) {
|
|
170
|
+
const has = array.indexOf(value) >= 0
|
|
171
|
+
if (!has) {
|
|
172
|
+
array.push(value)
|
|
173
|
+
}
|
|
174
|
+
return has
|
|
175
|
+
},
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { display } from './display'
|
|
2
|
+
|
|
3
|
+
let onMonitorErrorCollected: undefined | ((error: unknown) => void)
|
|
4
|
+
let debugMode = false
|
|
5
|
+
|
|
6
|
+
export function startMonitorErrorCollection(newOnMonitorErrorCollected: (error: unknown) => void) {
|
|
7
|
+
onMonitorErrorCollected = newOnMonitorErrorCollected
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function setDebugMode(newDebugMode: boolean) {
|
|
11
|
+
debugMode = newDebugMode
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function resetMonitor() {
|
|
15
|
+
onMonitorErrorCollected = undefined
|
|
16
|
+
debugMode = false
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function monitored<T extends (...params: any[]) => unknown>(
|
|
20
|
+
_: any,
|
|
21
|
+
__: string,
|
|
22
|
+
descriptor: TypedPropertyDescriptor<T>
|
|
23
|
+
) {
|
|
24
|
+
const originalMethod = descriptor.value!
|
|
25
|
+
descriptor.value = function (this: any, ...args: Parameters<T>) {
|
|
26
|
+
const decorated = onMonitorErrorCollected ? monitor(originalMethod) : originalMethod
|
|
27
|
+
return decorated.apply(this, args) as ReturnType<T>
|
|
28
|
+
} as T
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function monitor<T extends (...args: any[]) => any>(fn: T): T {
|
|
32
|
+
return function (this: any) {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
34
|
+
return callMonitored(fn, this, arguments as unknown as Parameters<T>)
|
|
35
|
+
} as unknown as T // consider output type has input type
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function callMonitored<T extends (...args: any[]) => any>(
|
|
39
|
+
fn: T,
|
|
40
|
+
context: ThisParameterType<T>,
|
|
41
|
+
args: Parameters<T>
|
|
42
|
+
): ReturnType<T> | undefined
|
|
43
|
+
export function callMonitored<T extends (this: void) => any>(fn: T): ReturnType<T> | undefined
|
|
44
|
+
export function callMonitored<T extends (...args: any[]) => any>(
|
|
45
|
+
fn: T,
|
|
46
|
+
context?: any,
|
|
47
|
+
args?: any
|
|
48
|
+
): ReturnType<T> | undefined {
|
|
49
|
+
try {
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
51
|
+
return fn.apply(context, args)
|
|
52
|
+
} catch (e) {
|
|
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)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function displayIfDebugEnabled(...args: any[]) {
|
|
69
|
+
if (debugMode) {
|
|
70
|
+
display.error('[MONITOR]', ...args)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { queueMicrotask } from './queueMicrotask'
|
|
2
|
+
|
|
3
|
+
export interface Subscription {
|
|
4
|
+
unsubscribe: () => void
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
type Observer<T> = (data: T) => void
|
|
8
|
+
|
|
9
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
10
|
+
export class Observable<T> {
|
|
11
|
+
protected observers: Array<Observer<T>> = []
|
|
12
|
+
private onLastUnsubscribe?: () => void
|
|
13
|
+
|
|
14
|
+
constructor(private onFirstSubscribe?: (observable: Observable<T>) => (() => void) | void) {}
|
|
15
|
+
|
|
16
|
+
subscribe(observer: Observer<T>): Subscription {
|
|
17
|
+
this.addObserver(observer)
|
|
18
|
+
return {
|
|
19
|
+
unsubscribe: () => this.removeObserver(observer),
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
notify(data: T) {
|
|
24
|
+
this.observers.forEach((observer) => observer(data))
|
|
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
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function mergeObservables<T>(...observables: Array<Observable<T>>) {
|
|
43
|
+
return new Observable<T>((globalObservable) => {
|
|
44
|
+
const subscriptions: Subscription[] = observables.map((observable) =>
|
|
45
|
+
observable.subscribe((data) => globalObservable.notify(data))
|
|
46
|
+
)
|
|
47
|
+
return () => subscriptions.forEach((subscription) => subscription.unsubscribe())
|
|
48
|
+
})
|
|
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
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { monitor } from './monitor'
|
|
2
|
+
import { noop } from './utils/functionUtils'
|
|
3
|
+
|
|
4
|
+
interface Options {
|
|
5
|
+
bytesLimit: number
|
|
6
|
+
collectStreamBody?: boolean
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Read bytes from a ReadableStream until at least `limit` bytes have been read (or until the end of
|
|
10
|
+
* the stream). The callback is invoked with the at most `limit` bytes, and indicates that the limit
|
|
11
|
+
* has been exceeded if more bytes were available.
|
|
12
|
+
*/
|
|
13
|
+
export function readBytesFromStream(
|
|
14
|
+
stream: ReadableStream<Uint8Array>,
|
|
15
|
+
callback: (error?: Error, bytes?: Uint8Array, limitExceeded?: boolean) => void,
|
|
16
|
+
options: Options
|
|
17
|
+
) {
|
|
18
|
+
const reader = stream.getReader()
|
|
19
|
+
const chunks: Uint8Array[] = []
|
|
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
|
+
}
|
|
46
|
+
|
|
47
|
+
function onDone() {
|
|
48
|
+
reader.cancel().catch(
|
|
49
|
+
// we don't care if cancel fails, but we still need to catch the error to avoid reporting it
|
|
50
|
+
// as an unhandled rejection
|
|
51
|
+
noop
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
let bytes: Uint8Array | undefined
|
|
55
|
+
let limitExceeded: boolean | undefined
|
|
56
|
+
if (options.collectStreamBody) {
|
|
57
|
+
let completeBuffer: Uint8Array
|
|
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
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
callback(undefined, bytes, limitExceeded)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { globalObject } from './globalObject'
|
|
2
|
+
|
|
3
|
+
interface BrowserWindow {
|
|
4
|
+
__ddBrowserSdkExtensionCallback?: (message: unknown) => void
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
type ExtensionMessageType = 'logs' | 'record' | 'rum' | 'telemetry'
|
|
8
|
+
|
|
9
|
+
export function sendToExtension(type: ExtensionMessageType, payload: unknown) {
|
|
10
|
+
const callback = (globalObject as BrowserWindow).__ddBrowserSdkExtensionCallback
|
|
11
|
+
if (callback) {
|
|
12
|
+
callback({ type, payload })
|
|
13
|
+
}
|
|
14
|
+
}
|