@openobserve/browser-core 0.3.4 → 0.4.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (934) hide show
  1. package/README.md +1 -1
  2. package/cjs/boot/displayAlreadyInitializedError.js +6 -7
  3. package/cjs/boot/displayAlreadyInitializedError.js.map +1 -1
  4. package/cjs/boot/init.js +26 -34
  5. package/cjs/boot/init.js.map +1 -1
  6. package/cjs/browser/addEventListener.d.ts +10 -8
  7. package/cjs/browser/addEventListener.js +107 -50
  8. package/cjs/browser/addEventListener.js.map +1 -1
  9. package/cjs/browser/browser.types.d.ts +91 -4
  10. package/cjs/browser/cookie.d.ts +0 -1
  11. package/cjs/browser/cookie.js +65 -92
  12. package/cjs/browser/cookie.js.map +1 -1
  13. package/cjs/browser/cookieAccess.d.ts +16 -0
  14. package/cjs/browser/cookieAccess.js +114 -0
  15. package/cjs/browser/cookieAccess.js.map +1 -0
  16. package/cjs/browser/fetch.d.ts +9 -0
  17. package/cjs/browser/fetch.js +18 -0
  18. package/cjs/browser/fetch.js.map +1 -0
  19. package/cjs/browser/fetchObservable.d.ts +3 -3
  20. package/cjs/browser/fetchObservable.js +80 -92
  21. package/cjs/browser/fetchObservable.js.map +1 -1
  22. package/cjs/browser/pageMayExitObservable.d.ts +1 -2
  23. package/cjs/browser/pageMayExitObservable.js +41 -40
  24. package/cjs/browser/pageMayExitObservable.js.map +1 -1
  25. package/cjs/browser/runOnReadyState.d.ts +2 -3
  26. package/cjs/browser/runOnReadyState.js +18 -17
  27. package/cjs/browser/runOnReadyState.js.map +1 -1
  28. package/cjs/browser/xhrObservable.d.ts +8 -3
  29. package/cjs/browser/xhrObservable.js +65 -77
  30. package/cjs/browser/xhrObservable.js.map +1 -1
  31. package/cjs/domain/allowedTrackingOrigins.d.ts +1 -1
  32. package/cjs/domain/allowedTrackingOrigins.js +25 -23
  33. package/cjs/domain/allowedTrackingOrigins.js.map +1 -1
  34. package/cjs/domain/bufferedData.d.ts +20 -6
  35. package/cjs/domain/bufferedData.js +41 -19
  36. package/cjs/domain/bufferedData.js.map +1 -1
  37. package/cjs/domain/configuration/configuration.d.ts +44 -43
  38. package/cjs/domain/configuration/configuration.js +122 -125
  39. package/cjs/domain/configuration/configuration.js.map +1 -1
  40. package/cjs/domain/configuration/endpointBuilder.d.ts +42 -7
  41. package/cjs/domain/configuration/endpointBuilder.js +67 -74
  42. package/cjs/domain/configuration/endpointBuilder.js.map +1 -1
  43. package/cjs/domain/configuration/index.d.ts +2 -3
  44. package/cjs/domain/connectivity/connectivity.d.ts +1 -7
  45. package/cjs/domain/connectivity/connectivity.js +11 -11
  46. package/cjs/domain/connectivity/connectivity.js.map +1 -1
  47. package/cjs/domain/console/consoleObservable.d.ts +1 -1
  48. package/cjs/domain/console/consoleObservable.js +59 -74
  49. package/cjs/domain/console/consoleObservable.js.map +1 -1
  50. package/cjs/domain/context/contextConstants.js +24 -15
  51. package/cjs/domain/context/contextConstants.js.map +1 -1
  52. package/cjs/domain/context/contextManager.js +49 -54
  53. package/cjs/domain/context/contextManager.js.map +1 -1
  54. package/cjs/domain/context/contextUtils.js +11 -12
  55. package/cjs/domain/context/contextUtils.js.map +1 -1
  56. package/cjs/domain/context/defineContextMethod.d.ts +2 -2
  57. package/cjs/domain/context/defineContextMethod.js +15 -16
  58. package/cjs/domain/context/defineContextMethod.js.map +1 -1
  59. package/cjs/domain/context/storeContextManager.d.ts +1 -2
  60. package/cjs/domain/context/storeContextManager.js +30 -33
  61. package/cjs/domain/context/storeContextManager.js.map +1 -1
  62. package/cjs/domain/contexts/accountContext.d.ts +2 -2
  63. package/cjs/domain/contexts/accountContext.js +26 -29
  64. package/cjs/domain/contexts/accountContext.js.map +1 -1
  65. package/cjs/domain/contexts/globalContext.d.ts +2 -2
  66. package/cjs/domain/contexts/globalContext.js +17 -17
  67. package/cjs/domain/contexts/globalContext.js.map +1 -1
  68. package/cjs/domain/contexts/tabContext.d.ts +4 -0
  69. package/cjs/domain/contexts/tabContext.js +27 -0
  70. package/cjs/domain/contexts/tabContext.js.map +1 -0
  71. package/cjs/domain/contexts/telemetrySessionContext.d.ts +4 -0
  72. package/cjs/domain/contexts/telemetrySessionContext.js +17 -0
  73. package/cjs/domain/contexts/telemetrySessionContext.js.map +1 -0
  74. package/cjs/domain/contexts/userContext.d.ts +8 -3
  75. package/cjs/domain/contexts/userContext.js +29 -41
  76. package/cjs/domain/contexts/userContext.js.map +1 -1
  77. package/cjs/domain/deflate/deflate.types.js +11 -2
  78. package/cjs/domain/deflate/deflate.types.js.map +1 -1
  79. package/cjs/domain/error/error.d.ts +1 -1
  80. package/cjs/domain/error/error.js +62 -60
  81. package/cjs/domain/error/error.js.map +1 -1
  82. package/cjs/domain/error/error.types.d.ts +1 -1
  83. package/cjs/domain/error/error.types.js +24 -11
  84. package/cjs/domain/error/error.types.js.map +1 -1
  85. package/cjs/domain/error/trackRuntimeError.d.ts +3 -2
  86. package/cjs/domain/error/trackRuntimeError.js +41 -41
  87. package/cjs/domain/error/trackRuntimeError.js.map +1 -1
  88. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +33 -38
  89. package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -1
  90. package/cjs/domain/extension/extensionUtils.js +18 -25
  91. package/cjs/domain/extension/extensionUtils.js.map +1 -1
  92. package/cjs/domain/intakeSites.d.ts +3 -3
  93. package/cjs/domain/intakeSites.js +23 -10
  94. package/cjs/domain/intakeSites.js.map +1 -1
  95. package/cjs/domain/report/reportObservable.d.ts +1 -2
  96. package/cjs/domain/report/reportObservable.js +73 -85
  97. package/cjs/domain/report/reportObservable.js.map +1 -1
  98. package/cjs/domain/resourceUtils.js +19 -17
  99. package/cjs/domain/resourceUtils.js.map +1 -1
  100. package/cjs/domain/sampler.d.ts +11 -0
  101. package/cjs/domain/sampler.js +40 -0
  102. package/cjs/domain/sampler.js.map +1 -0
  103. package/cjs/domain/session/sessionConstants.d.ts +1 -0
  104. package/cjs/domain/session/sessionConstants.js +19 -13
  105. package/cjs/domain/session/sessionConstants.js.map +1 -1
  106. package/cjs/domain/session/sessionManager.d.ts +13 -13
  107. package/cjs/domain/session/sessionManager.js +219 -193
  108. package/cjs/domain/session/sessionManager.js.map +1 -1
  109. package/cjs/domain/session/sessionState.d.ts +10 -1
  110. package/cjs/domain/session/sessionState.js +70 -55
  111. package/cjs/domain/session/sessionState.js.map +1 -1
  112. package/cjs/domain/session/sessionStateValidation.js +7 -8
  113. package/cjs/domain/session/sessionStateValidation.js.map +1 -1
  114. package/cjs/domain/session/sessionStore.d.ts +4 -33
  115. package/cjs/domain/session/sessionStore.js +42 -180
  116. package/cjs/domain/session/sessionStore.js.map +1 -1
  117. package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +7 -11
  118. package/cjs/domain/session/storeStrategies/sessionInCookie.js +89 -95
  119. package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
  120. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +1 -4
  121. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +39 -38
  122. package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
  123. package/cjs/domain/session/storeStrategies/sessionInMemory.d.ts +12 -0
  124. package/cjs/domain/session/storeStrategies/sessionInMemory.js +35 -0
  125. package/cjs/domain/session/storeStrategies/sessionInMemory.js.map +1 -0
  126. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -7
  127. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +7 -4
  128. package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -1
  129. package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +9 -3
  130. package/cjs/domain/synthetics/syntheticsWorkerValues.js +33 -25
  131. package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
  132. package/cjs/domain/tags.d.ts +0 -1
  133. package/cjs/domain/tags.js +22 -58
  134. package/cjs/domain/tags.js.map +1 -1
  135. package/cjs/domain/telemetry/rawTelemetryEvent.types.js +8 -7
  136. package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -1
  137. package/cjs/domain/telemetry/telemetry.d.ts +8 -8
  138. package/cjs/domain/telemetry/telemetry.js +196 -211
  139. package/cjs/domain/telemetry/telemetry.js.map +1 -1
  140. package/cjs/domain/telemetry/telemetryEvent.types.d.ts +97 -17
  141. package/cjs/domain/trackingConsent.d.ts +1 -0
  142. package/cjs/domain/trackingConsent.js +35 -24
  143. package/cjs/domain/trackingConsent.js.map +1 -1
  144. package/cjs/index.d.ts +25 -22
  145. package/cjs/index.js +281 -194
  146. package/cjs/tools/abstractLifeCycle.js +19 -26
  147. package/cjs/tools/abstractLifeCycle.js.map +1 -1
  148. package/cjs/tools/catchUserErrors.js +12 -12
  149. package/cjs/tools/catchUserErrors.js.map +1 -1
  150. package/cjs/tools/display.d.ts +1 -35
  151. package/cjs/tools/display.js +11 -43
  152. package/cjs/tools/display.js.map +1 -1
  153. package/cjs/tools/encoder.js +36 -37
  154. package/cjs/tools/encoder.js.map +1 -1
  155. package/cjs/tools/experimentalFeatures.d.ts +1 -4
  156. package/cjs/tools/experimentalFeatures.js +29 -40
  157. package/cjs/tools/experimentalFeatures.js.map +1 -1
  158. package/cjs/tools/getZoneJsOriginalValue.d.ts +1 -1
  159. package/cjs/tools/getZoneJsOriginalValue.js +22 -25
  160. package/cjs/tools/getZoneJsOriginalValue.js.map +1 -1
  161. package/cjs/tools/globalObject.d.ts +16 -15
  162. package/cjs/tools/globalObject.js +7 -43
  163. package/cjs/tools/globalObject.js.map +1 -1
  164. package/cjs/tools/instrumentMethod.d.ts +58 -1
  165. package/cjs/tools/instrumentMethod.js +174 -112
  166. package/cjs/tools/instrumentMethod.js.map +1 -1
  167. package/cjs/tools/matchOption.js +25 -29
  168. package/cjs/tools/matchOption.js.map +1 -1
  169. package/cjs/tools/mockable.d.ts +22 -0
  170. package/cjs/tools/mockable.js +28 -0
  171. package/cjs/tools/mockable.js.map +1 -0
  172. package/cjs/tools/monitor.d.ts +5 -7
  173. package/cjs/tools/monitor.js +13 -58
  174. package/cjs/tools/monitor.js.map +1 -1
  175. package/cjs/tools/observable.d.ts +3 -1
  176. package/cjs/tools/observable.js +75 -85
  177. package/cjs/tools/observable.js.map +1 -1
  178. package/cjs/tools/queueMicrotask.js +9 -14
  179. package/cjs/tools/queueMicrotask.js.map +1 -1
  180. package/cjs/tools/readBytesFromStream.d.ts +1 -6
  181. package/cjs/tools/readBytesFromStream.js +18 -25
  182. package/cjs/tools/readBytesFromStream.js.map +1 -1
  183. package/cjs/tools/requestIdleCallback.js +22 -29
  184. package/cjs/tools/requestIdleCallback.js.map +1 -1
  185. package/cjs/tools/sendToExtension.js +10 -8
  186. package/cjs/tools/sendToExtension.js.map +1 -1
  187. package/cjs/tools/serialisation/jsonStringify.js +37 -42
  188. package/cjs/tools/serialisation/jsonStringify.js.map +1 -1
  189. package/cjs/tools/serialisation/sanitize.d.ts +1 -0
  190. package/cjs/tools/serialisation/sanitize.js +111 -167
  191. package/cjs/tools/serialisation/sanitize.js.map +1 -1
  192. package/cjs/tools/serialisation/stringify.d.ts +2 -0
  193. package/cjs/tools/serialisation/stringify.js +18 -0
  194. package/cjs/tools/serialisation/stringify.js.map +1 -0
  195. package/cjs/tools/stackTrace/computeStackTrace.js +121 -159
  196. package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -1
  197. package/cjs/tools/stackTrace/handlingStack.d.ts +1 -1
  198. package/cjs/tools/stackTrace/handlingStack.js +39 -38
  199. package/cjs/tools/stackTrace/handlingStack.js.map +1 -1
  200. package/cjs/tools/taskQueue.js +40 -49
  201. package/cjs/tools/taskQueue.js.map +1 -1
  202. package/cjs/tools/timer.d.ts +2 -1
  203. package/cjs/tools/timer.js +14 -13
  204. package/cjs/tools/timer.js.map +1 -1
  205. package/cjs/tools/utils/arrayUtils.d.ts +1 -0
  206. package/cjs/tools/utils/arrayUtils.js +17 -13
  207. package/cjs/tools/utils/arrayUtils.js.map +1 -1
  208. package/cjs/tools/utils/browserDetection.d.ts +1 -0
  209. package/cjs/tools/utils/browserDetection.js +25 -23
  210. package/cjs/tools/utils/browserDetection.js.map +1 -1
  211. package/cjs/tools/utils/byteUtils.js +20 -28
  212. package/cjs/tools/utils/byteUtils.js.map +1 -1
  213. package/cjs/tools/utils/functionUtils.js +33 -40
  214. package/cjs/tools/utils/functionUtils.js.map +1 -1
  215. package/cjs/tools/utils/numberUtils.js +15 -14
  216. package/cjs/tools/utils/numberUtils.js.map +1 -1
  217. package/cjs/tools/utils/objectUtils.d.ts +2 -0
  218. package/cjs/tools/utils/objectUtils.js +27 -14
  219. package/cjs/tools/utils/objectUtils.js.map +1 -1
  220. package/cjs/tools/utils/polyfills.js +12 -16
  221. package/cjs/tools/utils/polyfills.js.map +1 -1
  222. package/cjs/tools/utils/responseUtils.js +11 -12
  223. package/cjs/tools/utils/responseUtils.js.map +1 -1
  224. package/cjs/tools/utils/stringUtils.js +56 -77
  225. package/cjs/tools/utils/stringUtils.js.map +1 -1
  226. package/cjs/tools/utils/timezone.js +9 -10
  227. package/cjs/tools/utils/timezone.js.map +1 -1
  228. package/cjs/tools/utils/urlPolyfill.js +42 -46
  229. package/cjs/tools/utils/urlPolyfill.js.map +1 -1
  230. package/cjs/tools/valueHistory.d.ts +9 -1
  231. package/cjs/tools/valueHistory.js +110 -99
  232. package/cjs/tools/valueHistory.js.map +1 -1
  233. package/cjs/transport/batch.js +73 -106
  234. package/cjs/transport/batch.js.map +1 -1
  235. package/cjs/transport/eventBridge.d.ts +6 -2
  236. package/cjs/transport/eventBridge.js +53 -38
  237. package/cjs/transport/eventBridge.js.map +1 -1
  238. package/cjs/transport/flushController.d.ts +2 -12
  239. package/cjs/transport/flushController.js +98 -117
  240. package/cjs/transport/flushController.js.map +1 -1
  241. package/cjs/transport/httpRequest.d.ts +0 -1
  242. package/cjs/transport/httpRequest.js +51 -85
  243. package/cjs/transport/httpRequest.js.map +1 -1
  244. package/cjs/transport/index.d.ts +1 -0
  245. package/cjs/transport/sendWithRetryStrategy.js +133 -146
  246. package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
  247. package/esm/boot/displayAlreadyInitializedError.mjs +9 -0
  248. package/esm/boot/displayAlreadyInitializedError.mjs.map +1 -0
  249. package/esm/boot/init.mjs +30 -0
  250. package/esm/boot/init.mjs.map +1 -0
  251. package/esm/browser/addEventListener.mjs +107 -0
  252. package/esm/browser/addEventListener.mjs.map +1 -0
  253. package/esm/browser/cookie.mjs +81 -0
  254. package/esm/browser/cookie.mjs.map +1 -0
  255. package/esm/browser/cookieAccess.mjs +111 -0
  256. package/esm/browser/cookieAccess.mjs.map +1 -0
  257. package/esm/browser/fetch.mjs +18 -0
  258. package/esm/browser/fetch.mjs.map +1 -0
  259. package/esm/browser/fetchObservable.mjs +90 -0
  260. package/esm/browser/fetchObservable.mjs.map +1 -0
  261. package/esm/browser/pageMayExitObservable.mjs +44 -0
  262. package/esm/browser/pageMayExitObservable.mjs.map +1 -0
  263. package/esm/browser/runOnReadyState.mjs +19 -0
  264. package/esm/browser/runOnReadyState.mjs.map +1 -0
  265. package/esm/browser/xhrObservable.mjs +74 -0
  266. package/esm/browser/xhrObservable.mjs.map +1 -0
  267. package/esm/domain/allowedTrackingOrigins.mjs +27 -0
  268. package/esm/domain/allowedTrackingOrigins.mjs.map +1 -0
  269. package/esm/domain/bufferedData.mjs +43 -0
  270. package/esm/domain/bufferedData.mjs.map +1 -0
  271. package/esm/domain/configuration/configuration.mjs +131 -0
  272. package/esm/domain/configuration/configuration.mjs.map +1 -0
  273. package/esm/domain/configuration/endpointBuilder.mjs +72 -0
  274. package/esm/domain/configuration/endpointBuilder.mjs.map +1 -0
  275. package/esm/domain/connectivity/connectivity.mjs +14 -0
  276. package/esm/domain/connectivity/connectivity.mjs.map +1 -0
  277. package/esm/domain/console/consoleObservable.mjs +69 -0
  278. package/esm/domain/console/consoleObservable.mjs.map +1 -0
  279. package/esm/domain/context/contextConstants.mjs +25 -0
  280. package/esm/domain/context/contextConstants.mjs.map +1 -0
  281. package/esm/domain/context/contextManager.mjs +55 -0
  282. package/esm/domain/context/contextManager.mjs.map +1 -0
  283. package/esm/domain/context/contextUtils.mjs +15 -0
  284. package/esm/domain/context/contextUtils.mjs.map +1 -0
  285. package/esm/domain/context/defineContextMethod.mjs +19 -0
  286. package/esm/domain/context/defineContextMethod.mjs.map +1 -0
  287. package/esm/domain/context/storeContextManager.mjs +36 -0
  288. package/esm/domain/context/storeContextManager.mjs.map +1 -0
  289. package/esm/domain/contexts/accountContext.mjs +29 -0
  290. package/esm/domain/contexts/accountContext.mjs.map +1 -0
  291. package/esm/domain/contexts/globalContext.mjs +20 -0
  292. package/esm/domain/contexts/globalContext.mjs.map +1 -0
  293. package/esm/domain/contexts/tabContext.mjs +27 -0
  294. package/esm/domain/contexts/tabContext.mjs.map +1 -0
  295. package/esm/domain/contexts/telemetrySessionContext.mjs +17 -0
  296. package/esm/domain/contexts/telemetrySessionContext.mjs.map +1 -0
  297. package/esm/domain/contexts/userContext.mjs +32 -0
  298. package/esm/domain/contexts/userContext.mjs.map +1 -0
  299. package/esm/domain/deflate/deflate.types.mjs +12 -0
  300. package/esm/domain/deflate/deflate.types.mjs.map +1 -0
  301. package/esm/domain/error/error.mjs +73 -0
  302. package/esm/domain/error/error.mjs.map +1 -0
  303. package/esm/domain/error/error.types.mjs +24 -0
  304. package/esm/domain/error/error.types.mjs.map +1 -0
  305. package/esm/domain/error/trackRuntimeError.mjs +48 -0
  306. package/esm/domain/error/trackRuntimeError.mjs.map +1 -0
  307. package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs +36 -0
  308. package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs.map +1 -0
  309. package/esm/domain/extension/extensionUtils.mjs +23 -0
  310. package/esm/domain/extension/extensionUtils.mjs.map +1 -0
  311. package/esm/domain/intakeSites.mjs +18 -0
  312. package/esm/domain/intakeSites.mjs.map +1 -0
  313. package/esm/domain/report/reportObservable.mjs +86 -0
  314. package/esm/domain/report/reportObservable.mjs.map +1 -0
  315. package/esm/domain/resourceUtils.mjs +21 -0
  316. package/esm/domain/resourceUtils.mjs.map +1 -0
  317. package/esm/domain/sampler.mjs +37 -0
  318. package/esm/domain/sampler.mjs.map +1 -0
  319. package/esm/domain/session/sessionConstants.mjs +18 -0
  320. package/esm/domain/session/sessionConstants.mjs.map +1 -0
  321. package/esm/domain/session/sessionManager.mjs +225 -0
  322. package/esm/domain/session/sessionManager.mjs.map +1 -0
  323. package/esm/domain/session/sessionState.mjs +76 -0
  324. package/esm/domain/session/sessionState.mjs.map +1 -0
  325. package/esm/domain/session/sessionStateValidation.mjs +9 -0
  326. package/esm/domain/session/sessionStateValidation.mjs.map +1 -0
  327. package/esm/domain/session/sessionStore.mjs +46 -0
  328. package/esm/domain/session/sessionStore.mjs.map +1 -0
  329. package/esm/domain/session/storeStrategies/sessionInCookie.mjs +97 -0
  330. package/esm/domain/session/storeStrategies/sessionInCookie.mjs.map +1 -0
  331. package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs +42 -0
  332. package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs.map +1 -0
  333. package/esm/domain/session/storeStrategies/sessionInMemory.mjs +33 -0
  334. package/esm/domain/session/storeStrategies/sessionInMemory.mjs.map +1 -0
  335. package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs +7 -0
  336. package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs.map +1 -0
  337. package/esm/domain/synthetics/syntheticsWorkerValues.mjs +37 -0
  338. package/esm/domain/synthetics/syntheticsWorkerValues.mjs.map +1 -0
  339. package/esm/domain/tags.mjs +28 -0
  340. package/esm/domain/tags.mjs.map +1 -0
  341. package/esm/domain/telemetry/rawTelemetryEvent.types.mjs +10 -0
  342. package/esm/domain/telemetry/rawTelemetryEvent.types.mjs.map +1 -0
  343. package/esm/domain/telemetry/telemetry.mjs +219 -0
  344. package/esm/domain/telemetry/telemetry.mjs.map +1 -0
  345. package/esm/domain/trackingConsent.mjs +38 -0
  346. package/esm/domain/trackingConsent.mjs.map +1 -0
  347. package/esm/index.mjs +81 -0
  348. package/esm/tools/abstractLifeCycle.mjs +21 -0
  349. package/esm/tools/abstractLifeCycle.mjs.map +1 -0
  350. package/esm/tools/catchUserErrors.mjs +15 -0
  351. package/esm/tools/catchUserErrors.mjs.map +1 -0
  352. package/esm/tools/display.mjs +10 -0
  353. package/esm/tools/display.mjs.map +1 -0
  354. package/esm/tools/encoder.mjs +39 -0
  355. package/esm/tools/encoder.mjs.map +1 -0
  356. package/esm/tools/experimentalFeatures.mjs +35 -0
  357. package/esm/tools/experimentalFeatures.mjs.map +1 -0
  358. package/esm/tools/getZoneJsOriginalValue.mjs +26 -0
  359. package/esm/tools/getZoneJsOriginalValue.mjs.map +1 -0
  360. package/esm/tools/globalObject.mjs +7 -0
  361. package/esm/tools/globalObject.mjs.map +1 -0
  362. package/esm/tools/instrumentMethod.mjs +178 -0
  363. package/esm/tools/instrumentMethod.mjs.map +1 -0
  364. package/esm/tools/matchOption.mjs +30 -0
  365. package/esm/tools/matchOption.mjs.map +1 -0
  366. package/esm/tools/mockable.mjs +28 -0
  367. package/esm/tools/mockable.mjs.map +1 -0
  368. package/esm/tools/monitor.mjs +13 -0
  369. package/esm/tools/monitor.mjs.map +1 -0
  370. package/esm/tools/observable.mjs +77 -0
  371. package/esm/tools/observable.mjs.map +1 -0
  372. package/esm/tools/queueMicrotask.mjs +12 -0
  373. package/esm/tools/queueMicrotask.mjs.map +1 -0
  374. package/esm/tools/readBytesFromStream.mjs +21 -0
  375. package/esm/tools/readBytesFromStream.mjs.map +1 -0
  376. package/esm/tools/requestIdleCallback.mjs +28 -0
  377. package/esm/tools/requestIdleCallback.mjs.map +1 -0
  378. package/esm/tools/sendToExtension.mjs +13 -0
  379. package/esm/tools/sendToExtension.mjs.map +1 -0
  380. package/esm/tools/serialisation/jsonStringify.mjs +42 -0
  381. package/esm/tools/serialisation/jsonStringify.mjs.map +1 -0
  382. package/esm/tools/serialisation/sanitize.mjs +131 -0
  383. package/esm/tools/serialisation/sanitize.mjs.map +1 -0
  384. package/esm/tools/serialisation/stringify.mjs +17 -0
  385. package/esm/tools/serialisation/stringify.mjs.map +1 -0
  386. package/esm/tools/stackTrace/computeStackTrace.mjs +148 -0
  387. package/esm/tools/stackTrace/computeStackTrace.mjs.map +1 -0
  388. package/esm/tools/stackTrace/handlingStack.mjs +45 -0
  389. package/esm/tools/stackTrace/handlingStack.mjs.map +1 -0
  390. package/esm/tools/taskQueue.mjs +45 -0
  391. package/esm/tools/taskQueue.mjs.map +1 -0
  392. package/esm/tools/timer.mjs +20 -0
  393. package/esm/tools/timer.mjs.map +1 -0
  394. package/esm/tools/utils/arrayUtils.mjs +21 -0
  395. package/esm/tools/utils/arrayUtils.mjs.map +1 -0
  396. package/esm/tools/utils/browserDetection.mjs +31 -0
  397. package/esm/tools/utils/browserDetection.mjs.map +1 -0
  398. package/esm/tools/utils/byteUtils.mjs +23 -0
  399. package/esm/tools/utils/byteUtils.mjs.map +1 -0
  400. package/esm/tools/utils/functionUtils.mjs +35 -0
  401. package/esm/tools/utils/functionUtils.mjs.map +1 -0
  402. package/esm/tools/utils/numberUtils.mjs +22 -0
  403. package/esm/tools/utils/numberUtils.mjs.map +1 -0
  404. package/esm/tools/utils/objectUtils.mjs +31 -0
  405. package/esm/tools/utils/objectUtils.mjs.map +1 -0
  406. package/esm/tools/utils/polyfills.mjs +17 -0
  407. package/esm/tools/utils/polyfills.mjs.map +1 -0
  408. package/esm/tools/utils/responseUtils.mjs +15 -0
  409. package/esm/tools/utils/responseUtils.mjs.map +1 -0
  410. package/esm/tools/utils/stringUtils.mjs +66 -0
  411. package/esm/tools/utils/stringUtils.mjs.map +1 -0
  412. package/esm/tools/utils/timezone.mjs +12 -0
  413. package/esm/tools/utils/timezone.mjs.map +1 -0
  414. package/esm/tools/utils/urlPolyfill.mjs +51 -0
  415. package/esm/tools/utils/urlPolyfill.mjs.map +1 -0
  416. package/esm/tools/valueHistory.mjs +114 -0
  417. package/esm/tools/valueHistory.mjs.map +1 -0
  418. package/esm/transport/batch.mjs +77 -0
  419. package/esm/transport/batch.mjs.map +1 -0
  420. package/esm/transport/eventBridge.mjs +58 -0
  421. package/esm/transport/eventBridge.mjs.map +1 -0
  422. package/esm/transport/flushController.mjs +104 -0
  423. package/esm/transport/flushController.mjs.map +1 -0
  424. package/esm/transport/httpRequest.mjs +60 -0
  425. package/esm/transport/httpRequest.mjs.map +1 -0
  426. package/esm/transport/sendWithRetryStrategy.mjs +149 -0
  427. package/esm/transport/sendWithRetryStrategy.mjs.map +1 -0
  428. package/package.json +15 -4
  429. package/src/boot/init.ts +2 -2
  430. package/src/browser/addEventListener.ts +37 -5
  431. package/src/browser/browser.types.ts +127 -13
  432. package/src/browser/cookie.ts +21 -27
  433. package/src/browser/cookieAccess.ts +150 -0
  434. package/src/browser/fetch.ts +14 -0
  435. package/src/browser/fetchObservable.ts +22 -22
  436. package/src/browser/pageMayExitObservable.ts +7 -4
  437. package/src/browser/runOnReadyState.ts +3 -8
  438. package/src/browser/xhrObservable.ts +22 -12
  439. package/src/domain/allowedTrackingOrigins.ts +5 -5
  440. package/src/domain/bufferedData.ts +41 -14
  441. package/src/domain/configuration/configuration.ts +87 -72
  442. package/src/domain/configuration/endpointBuilder.ts +82 -52
  443. package/src/domain/configuration/index.ts +2 -2
  444. package/src/domain/connectivity/connectivity.ts +3 -15
  445. package/src/domain/console/consoleObservable.ts +3 -3
  446. package/src/domain/context/contextManager.ts +1 -1
  447. package/src/domain/context/contextUtils.ts +1 -1
  448. package/src/domain/context/defineContextMethod.ts +3 -3
  449. package/src/domain/context/storeContextManager.ts +9 -6
  450. package/src/domain/contexts/accountContext.ts +5 -5
  451. package/src/domain/contexts/globalContext.ts +4 -5
  452. package/src/domain/contexts/tabContext.ts +43 -0
  453. package/src/domain/contexts/telemetrySessionContext.ts +26 -0
  454. package/src/domain/contexts/userContext.ts +7 -11
  455. package/src/domain/error/error.ts +53 -23
  456. package/src/domain/error/error.types.ts +1 -1
  457. package/src/domain/error/trackRuntimeError.ts +11 -4
  458. package/src/domain/eventRateLimiter/createEventRateLimiter.ts +1 -1
  459. package/src/domain/intakeSites.ts +8 -3
  460. package/src/domain/report/reportObservable.ts +11 -7
  461. package/src/domain/sampler.ts +64 -0
  462. package/src/domain/session/sessionConstants.ts +2 -1
  463. package/src/domain/session/sessionManager.ts +281 -176
  464. package/src/domain/session/sessionState.ts +64 -8
  465. package/src/domain/session/sessionStore.ts +57 -223
  466. package/src/domain/session/storeStrategies/sessionInCookie.ts +121 -107
  467. package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +33 -21
  468. package/src/domain/session/storeStrategies/sessionInMemory.ts +55 -0
  469. package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +28 -6
  470. package/src/domain/synthetics/syntheticsWorkerValues.ts +44 -13
  471. package/src/domain/tags.ts +0 -16
  472. package/src/domain/telemetry/telemetry.ts +38 -34
  473. package/src/domain/telemetry/telemetryEvent.types.ts +116 -20
  474. package/src/domain/trackingConsent.ts +18 -3
  475. package/src/index.ts +51 -31
  476. package/src/tools/display.ts +2 -50
  477. package/src/tools/experimentalFeatures.ts +1 -4
  478. package/src/tools/getZoneJsOriginalValue.ts +3 -3
  479. package/src/tools/globalObject.ts +27 -41
  480. package/src/tools/instrumentMethod.ts +230 -20
  481. package/src/tools/matchOption.ts +3 -1
  482. package/src/tools/mockable.ts +32 -0
  483. package/src/tools/monitor.ts +14 -62
  484. package/src/tools/observable.ts +9 -1
  485. package/src/tools/queueMicrotask.ts +6 -1
  486. package/src/tools/readBytesFromStream.ts +3 -12
  487. package/src/tools/requestIdleCallback.ts +1 -1
  488. package/src/tools/serialisation/sanitize.ts +67 -65
  489. package/src/tools/serialisation/stringify.ts +18 -0
  490. package/src/tools/stackTrace/computeStackTrace.ts +15 -13
  491. package/src/tools/stackTrace/handlingStack.ts +14 -1
  492. package/src/tools/taskQueue.ts +5 -3
  493. package/src/tools/timer.ts +7 -6
  494. package/src/tools/utils/arrayUtils.ts +7 -0
  495. package/src/tools/utils/browserDetection.ts +8 -0
  496. package/src/tools/utils/byteUtils.ts +1 -5
  497. package/src/tools/utils/functionUtils.ts +2 -2
  498. package/src/tools/utils/objectUtils.ts +20 -0
  499. package/src/tools/utils/stringUtils.ts +4 -1
  500. package/src/tools/utils/urlPolyfill.ts +5 -4
  501. package/src/tools/valueHistory.ts +39 -6
  502. package/src/transport/batch.ts +9 -18
  503. package/src/transport/eventBridge.ts +23 -10
  504. package/src/transport/flushController.ts +17 -24
  505. package/src/transport/httpRequest.ts +4 -36
  506. package/src/transport/index.ts +1 -0
  507. package/src/transport/sendWithRetryStrategy.ts +1 -1
  508. package/cjs/browser/browser.types.js +0 -6
  509. package/cjs/browser/browser.types.js.map +0 -1
  510. package/cjs/domain/configuration/index.js +0 -16
  511. package/cjs/domain/configuration/index.js.map +0 -1
  512. package/cjs/domain/configuration/transportConfiguration.d.ts +0 -20
  513. package/cjs/domain/configuration/transportConfiguration.js +0 -54
  514. package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
  515. package/cjs/domain/connectivity/index.js +0 -18
  516. package/cjs/domain/connectivity/index.js.map +0 -1
  517. package/cjs/domain/contexts/rumInternalContext.type.js +0 -3
  518. package/cjs/domain/contexts/rumInternalContext.type.js.map +0 -1
  519. package/cjs/domain/deflate/index.js +0 -18
  520. package/cjs/domain/deflate/index.js.map +0 -1
  521. package/cjs/domain/report/browser.types.js +0 -3
  522. package/cjs/domain/report/browser.types.js.map +0 -1
  523. package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
  524. package/cjs/domain/session/oldCookiesMigration.js +0 -40
  525. package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
  526. package/cjs/domain/session/sessionStoreOperations.d.ts +0 -12
  527. package/cjs/domain/session/sessionStoreOperations.js +0 -119
  528. package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
  529. package/cjs/domain/telemetry/index.js +0 -28
  530. package/cjs/domain/telemetry/index.js.map +0 -1
  531. package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
  532. package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
  533. package/cjs/index.js.map +0 -1
  534. package/cjs/tools/abstractHooks.d.ts +0 -24
  535. package/cjs/tools/abstractHooks.js +0 -41
  536. package/cjs/tools/abstractHooks.js.map +0 -1
  537. package/cjs/tools/boundedBuffer.d.ts +0 -16
  538. package/cjs/tools/boundedBuffer.js +0 -32
  539. package/cjs/tools/boundedBuffer.js.map +0 -1
  540. package/cjs/tools/mergeInto.d.ts +0 -25
  541. package/cjs/tools/mergeInto.js +0 -98
  542. package/cjs/tools/mergeInto.js.map +0 -1
  543. package/cjs/tools/serialisation/context.js +0 -3
  544. package/cjs/tools/serialisation/context.js.map +0 -1
  545. package/cjs/tools/utils/timeUtils.d.ts +0 -53
  546. package/cjs/tools/utils/timeUtils.js +0 -101
  547. package/cjs/tools/utils/timeUtils.js.map +0 -1
  548. package/cjs/tools/utils/typeUtils.d.ts +0 -4
  549. package/cjs/tools/utils/typeUtils.js +0 -16
  550. package/cjs/tools/utils/typeUtils.js.map +0 -1
  551. package/cjs/transport/index.js +0 -15
  552. package/cjs/transport/index.js.map +0 -1
  553. package/esm/boot/displayAlreadyInitializedError.d.ts +0 -2
  554. package/esm/boot/displayAlreadyInitializedError.js +0 -7
  555. package/esm/boot/displayAlreadyInitializedError.js.map +0 -1
  556. package/esm/boot/init.d.ts +0 -14
  557. package/esm/boot/init.js +0 -35
  558. package/esm/boot/init.js.map +0 -1
  559. package/esm/browser/addEventListener.d.ts +0 -87
  560. package/esm/browser/addEventListener.js +0 -51
  561. package/esm/browser/addEventListener.js.map +0 -1
  562. package/esm/browser/browser.types.d.ts +0 -51
  563. package/esm/browser/browser.types.js +0 -5
  564. package/esm/browser/browser.types.js.map +0 -1
  565. package/esm/browser/cookie.d.ts +0 -28
  566. package/esm/browser/cookie.js +0 -103
  567. package/esm/browser/cookie.js.map +0 -1
  568. package/esm/browser/fetchObservable.d.ts +0 -38
  569. package/esm/browser/fetchObservable.js +0 -99
  570. package/esm/browser/fetchObservable.js.map +0 -1
  571. package/esm/browser/pageMayExitObservable.d.ts +0 -14
  572. package/esm/browser/pageMayExitObservable.js +0 -40
  573. package/esm/browser/pageMayExitObservable.js.map +0 -1
  574. package/esm/browser/runOnReadyState.d.ts +0 -5
  575. package/esm/browser/runOnReadyState.js +0 -16
  576. package/esm/browser/runOnReadyState.js.map +0 -1
  577. package/esm/browser/xhrObservable.d.ts +0 -24
  578. package/esm/browser/xhrObservable.js +0 -83
  579. package/esm/browser/xhrObservable.js.map +0 -1
  580. package/esm/domain/allowedTrackingOrigins.d.ts +0 -4
  581. package/esm/domain/allowedTrackingOrigins.js +0 -21
  582. package/esm/domain/allowedTrackingOrigins.js.map +0 -1
  583. package/esm/domain/bufferedData.d.ts +0 -14
  584. package/esm/domain/bufferedData.js +0 -19
  585. package/esm/domain/bufferedData.js.map +0 -1
  586. package/esm/domain/configuration/configuration.d.ts +0 -312
  587. package/esm/domain/configuration/configuration.js +0 -132
  588. package/esm/domain/configuration/configuration.js.map +0 -1
  589. package/esm/domain/configuration/endpointBuilder.d.ts +0 -12
  590. package/esm/domain/configuration/endpointBuilder.js +0 -77
  591. package/esm/domain/configuration/endpointBuilder.js.map +0 -1
  592. package/esm/domain/configuration/index.d.ts +0 -5
  593. package/esm/domain/configuration/index.js +0 -4
  594. package/esm/domain/configuration/index.js.map +0 -1
  595. package/esm/domain/configuration/transportConfiguration.d.ts +0 -20
  596. package/esm/domain/configuration/transportConfiguration.js +0 -50
  597. package/esm/domain/configuration/transportConfiguration.js.map +0 -1
  598. package/esm/domain/connectivity/connectivity.d.ts +0 -14
  599. package/esm/domain/connectivity/connectivity.js +0 -11
  600. package/esm/domain/connectivity/connectivity.js.map +0 -1
  601. package/esm/domain/connectivity/index.d.ts +0 -1
  602. package/esm/domain/connectivity/index.js +0 -2
  603. package/esm/domain/connectivity/index.js.map +0 -1
  604. package/esm/domain/console/consoleObservable.d.ts +0 -21
  605. package/esm/domain/console/consoleObservable.js +0 -80
  606. package/esm/domain/console/consoleObservable.js.map +0 -1
  607. package/esm/domain/context/contextConstants.d.ts +0 -21
  608. package/esm/domain/context/contextConstants.js +0 -15
  609. package/esm/domain/context/contextConstants.js.map +0 -1
  610. package/esm/domain/context/contextManager.d.ts +0 -19
  611. package/esm/domain/context/contextManager.js +0 -57
  612. package/esm/domain/context/contextManager.js.map +0 -1
  613. package/esm/domain/context/contextUtils.d.ts +0 -5
  614. package/esm/domain/context/contextUtils.js +0 -13
  615. package/esm/domain/context/contextUtils.js.map +0 -1
  616. package/esm/domain/context/defineContextMethod.d.ts +0 -6
  617. package/esm/domain/context/defineContextMethod.js +0 -17
  618. package/esm/domain/context/defineContextMethod.js.map +0 -1
  619. package/esm/domain/context/storeContextManager.d.ts +0 -6
  620. package/esm/domain/context/storeContextManager.js +0 -35
  621. package/esm/domain/context/storeContextManager.js.map +0 -1
  622. package/esm/domain/contexts/accountContext.d.ts +0 -26
  623. package/esm/domain/contexts/accountContext.js +0 -29
  624. package/esm/domain/contexts/accountContext.js.map +0 -1
  625. package/esm/domain/contexts/globalContext.d.ts +0 -18
  626. package/esm/domain/contexts/globalContext.js +0 -17
  627. package/esm/domain/contexts/globalContext.js.map +0 -1
  628. package/esm/domain/contexts/rumInternalContext.type.d.ts +0 -14
  629. package/esm/domain/contexts/rumInternalContext.type.js +0 -2
  630. package/esm/domain/contexts/rumInternalContext.type.js.map +0 -1
  631. package/esm/domain/contexts/userContext.d.ts +0 -29
  632. package/esm/domain/contexts/userContext.js +0 -41
  633. package/esm/domain/contexts/userContext.js.map +0 -1
  634. package/esm/domain/deflate/deflate.types.d.ts +0 -40
  635. package/esm/domain/deflate/deflate.types.js +0 -2
  636. package/esm/domain/deflate/deflate.types.js.map +0 -1
  637. package/esm/domain/deflate/index.d.ts +0 -1
  638. package/esm/domain/deflate/index.js +0 -2
  639. package/esm/domain/deflate/index.js.map +0 -1
  640. package/esm/domain/error/error.d.ts +0 -23
  641. package/esm/domain/error/error.js +0 -65
  642. package/esm/domain/error/error.js.map +0 -1
  643. package/esm/domain/error/error.types.d.ts +0 -47
  644. package/esm/domain/error/error.types.js +0 -10
  645. package/esm/domain/error/error.types.js.map +0 -1
  646. package/esm/domain/error/trackRuntimeError.d.ts +0 -11
  647. package/esm/domain/error/trackRuntimeError.js +0 -43
  648. package/esm/domain/error/trackRuntimeError.js.map +0 -1
  649. package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
  650. package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -38
  651. package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
  652. package/esm/domain/extension/extensionUtils.d.ts +0 -10
  653. package/esm/domain/extension/extensionUtils.js +0 -25
  654. package/esm/domain/extension/extensionUtils.js.map +0 -1
  655. package/esm/domain/intakeSites.d.ts +0 -8
  656. package/esm/domain/intakeSites.js +0 -8
  657. package/esm/domain/intakeSites.js.map +0 -1
  658. package/esm/domain/report/browser.types.d.ts +0 -34
  659. package/esm/domain/report/browser.types.js +0 -2
  660. package/esm/domain/report/browser.types.js.map +0 -1
  661. package/esm/domain/report/reportObservable.d.ts +0 -14
  662. package/esm/domain/report/reportObservable.js +0 -95
  663. package/esm/domain/report/reportObservable.js.map +0 -1
  664. package/esm/domain/resourceUtils.d.ts +0 -18
  665. package/esm/domain/resourceUtils.js +0 -17
  666. package/esm/domain/resourceUtils.js.map +0 -1
  667. package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
  668. package/esm/domain/session/oldCookiesMigration.js +0 -36
  669. package/esm/domain/session/oldCookiesMigration.js.map +0 -1
  670. package/esm/domain/session/sessionConstants.d.ts +0 -15
  671. package/esm/domain/session/sessionConstants.js +0 -13
  672. package/esm/domain/session/sessionConstants.js.map +0 -1
  673. package/esm/domain/session/sessionManager.d.ts +0 -28
  674. package/esm/domain/session/sessionManager.js +0 -196
  675. package/esm/domain/session/sessionManager.js.map +0 -1
  676. package/esm/domain/session/sessionState.d.ts +0 -16
  677. package/esm/domain/session/sessionState.js +0 -60
  678. package/esm/domain/session/sessionState.js.map +0 -1
  679. package/esm/domain/session/sessionStateValidation.d.ts +0 -3
  680. package/esm/domain/session/sessionStateValidation.js +0 -7
  681. package/esm/domain/session/sessionStateValidation.js.map +0 -1
  682. package/esm/domain/session/sessionStore.d.ts +0 -38
  683. package/esm/domain/session/sessionStore.js +0 -179
  684. package/esm/domain/session/sessionStore.js.map +0 -1
  685. package/esm/domain/session/sessionStoreOperations.d.ts +0 -12
  686. package/esm/domain/session/sessionStoreOperations.js +0 -114
  687. package/esm/domain/session/sessionStoreOperations.js.map +0 -1
  688. package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -12
  689. package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -98
  690. package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
  691. package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -6
  692. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -37
  693. package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
  694. package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -16
  695. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
  696. package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
  697. package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -12
  698. package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -24
  699. package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
  700. package/esm/domain/tags.d.ts +0 -6
  701. package/esm/domain/tags.js +0 -60
  702. package/esm/domain/tags.js.map +0 -1
  703. package/esm/domain/telemetry/index.d.ts +0 -4
  704. package/esm/domain/telemetry/index.js +0 -3
  705. package/esm/domain/telemetry/index.js.map +0 -1
  706. package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -18
  707. package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -6
  708. package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
  709. package/esm/domain/telemetry/telemetry.d.ts +0 -56
  710. package/esm/domain/telemetry/telemetry.js +0 -228
  711. package/esm/domain/telemetry/telemetry.js.map +0 -1
  712. package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -866
  713. package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
  714. package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
  715. package/esm/domain/trackingConsent.d.ts +0 -13
  716. package/esm/domain/trackingConsent.js +0 -24
  717. package/esm/domain/trackingConsent.js.map +0 -1
  718. package/esm/index.d.ts +0 -100
  719. package/esm/index.js +0 -76
  720. package/esm/index.js.map +0 -1
  721. package/esm/tools/abstractHooks.d.ts +0 -24
  722. package/esm/tools/abstractHooks.js +0 -37
  723. package/esm/tools/abstractHooks.js.map +0 -1
  724. package/esm/tools/abstractLifeCycle.d.ts +0 -23
  725. package/esm/tools/abstractLifeCycle.js +0 -24
  726. package/esm/tools/abstractLifeCycle.js.map +0 -1
  727. package/esm/tools/boundedBuffer.d.ts +0 -16
  728. package/esm/tools/boundedBuffer.js +0 -29
  729. package/esm/tools/boundedBuffer.js.map +0 -1
  730. package/esm/tools/catchUserErrors.d.ts +0 -1
  731. package/esm/tools/catchUserErrors.js +0 -12
  732. package/esm/tools/catchUserErrors.js.map +0 -1
  733. package/esm/tools/display.d.ts +0 -38
  734. package/esm/tools/display.js +0 -41
  735. package/esm/tools/display.js.map +0 -1
  736. package/esm/tools/encoder.d.ts +0 -54
  737. package/esm/tools/encoder.js +0 -37
  738. package/esm/tools/encoder.js.map +0 -1
  739. package/esm/tools/experimentalFeatures.d.ts +0 -21
  740. package/esm/tools/experimentalFeatures.js +0 -42
  741. package/esm/tools/experimentalFeatures.js.map +0 -1
  742. package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
  743. package/esm/tools/getZoneJsOriginalValue.js +0 -26
  744. package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
  745. package/esm/tools/globalObject.d.ts +0 -19
  746. package/esm/tools/globalObject.js +0 -40
  747. package/esm/tools/globalObject.js.map +0 -1
  748. package/esm/tools/instrumentMethod.d.ts +0 -75
  749. package/esm/tools/instrumentMethod.js +0 -114
  750. package/esm/tools/instrumentMethod.js.map +0 -1
  751. package/esm/tools/matchOption.d.ts +0 -8
  752. package/esm/tools/matchOption.js +0 -31
  753. package/esm/tools/matchOption.js.map +0 -1
  754. package/esm/tools/mergeInto.d.ts +0 -25
  755. package/esm/tools/mergeInto.js +0 -93
  756. package/esm/tools/mergeInto.js.map +0 -1
  757. package/esm/tools/monitor.d.ts +0 -9
  758. package/esm/tools/monitor.js +0 -52
  759. package/esm/tools/monitor.js.map +0 -1
  760. package/esm/tools/observable.d.ts +0 -30
  761. package/esm/tools/observable.js +0 -83
  762. package/esm/tools/observable.js.map +0 -1
  763. package/esm/tools/queueMicrotask.d.ts +0 -1
  764. package/esm/tools/queueMicrotask.js +0 -14
  765. package/esm/tools/queueMicrotask.js.map +0 -1
  766. package/esm/tools/readBytesFromStream.d.ts +0 -10
  767. package/esm/tools/readBytesFromStream.js +0 -25
  768. package/esm/tools/readBytesFromStream.js.map +0 -1
  769. package/esm/tools/requestIdleCallback.d.ts +0 -12
  770. package/esm/tools/requestIdleCallback.js +0 -30
  771. package/esm/tools/requestIdleCallback.js.map +0 -1
  772. package/esm/tools/sendToExtension.d.ts +0 -3
  773. package/esm/tools/sendToExtension.js +0 -8
  774. package/esm/tools/sendToExtension.js.map +0 -1
  775. package/esm/tools/serialisation/context.d.ts +0 -9
  776. package/esm/tools/serialisation/context.js +0 -2
  777. package/esm/tools/serialisation/context.js.map +0 -1
  778. package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
  779. package/esm/tools/serialisation/jsonStringify.js +0 -44
  780. package/esm/tools/serialisation/jsonStringify.js.map +0 -1
  781. package/esm/tools/serialisation/sanitize.d.ts +0 -18
  782. package/esm/tools/serialisation/sanitize.js +0 -185
  783. package/esm/tools/serialisation/sanitize.js.map +0 -1
  784. package/esm/tools/stackTrace/computeStackTrace.d.ts +0 -25
  785. package/esm/tools/stackTrace/computeStackTrace.js +0 -183
  786. package/esm/tools/stackTrace/computeStackTrace.js.map +0 -1
  787. package/esm/tools/stackTrace/handlingStack.d.ts +0 -10
  788. package/esm/tools/stackTrace/handlingStack.js +0 -41
  789. package/esm/tools/stackTrace/handlingStack.js.map +0 -1
  790. package/esm/tools/taskQueue.d.ts +0 -15
  791. package/esm/tools/taskQueue.js +0 -50
  792. package/esm/tools/taskQueue.js.map +0 -1
  793. package/esm/tools/timer.d.ts +0 -5
  794. package/esm/tools/timer.js +0 -16
  795. package/esm/tools/timer.js.map +0 -1
  796. package/esm/tools/utils/arrayUtils.d.ts +0 -3
  797. package/esm/tools/utils/arrayUtils.js +0 -15
  798. package/esm/tools/utils/arrayUtils.js.map +0 -1
  799. package/esm/tools/utils/browserDetection.d.ts +0 -8
  800. package/esm/tools/utils/browserDetection.js +0 -28
  801. package/esm/tools/utils/browserDetection.js.map +0 -1
  802. package/esm/tools/utils/byteUtils.d.ts +0 -8
  803. package/esm/tools/utils/byteUtils.js +0 -29
  804. package/esm/tools/utils/byteUtils.js.map +0 -1
  805. package/esm/tools/utils/functionUtils.d.ts +0 -8
  806. package/esm/tools/utils/functionUtils.js +0 -39
  807. package/esm/tools/utils/functionUtils.js.map +0 -1
  808. package/esm/tools/utils/numberUtils.d.ts +0 -9
  809. package/esm/tools/utils/numberUtils.js +0 -18
  810. package/esm/tools/utils/numberUtils.js.map +0 -1
  811. package/esm/tools/utils/objectUtils.d.ts +0 -10
  812. package/esm/tools/utils/objectUtils.js +0 -17
  813. package/esm/tools/utils/objectUtils.js.map +0 -1
  814. package/esm/tools/utils/polyfills.d.ts +0 -7
  815. package/esm/tools/utils/polyfills.js +0 -18
  816. package/esm/tools/utils/polyfills.js.map +0 -1
  817. package/esm/tools/utils/responseUtils.d.ts +0 -2
  818. package/esm/tools/utils/responseUtils.js +0 -13
  819. package/esm/tools/utils/responseUtils.js.map +0 -1
  820. package/esm/tools/utils/stringUtils.d.ts +0 -23
  821. package/esm/tools/utils/stringUtils.js +0 -84
  822. package/esm/tools/utils/stringUtils.js.map +0 -1
  823. package/esm/tools/utils/timeUtils.d.ts +0 -53
  824. package/esm/tools/utils/timeUtils.js +0 -84
  825. package/esm/tools/utils/timeUtils.js.map +0 -1
  826. package/esm/tools/utils/timezone.d.ts +0 -1
  827. package/esm/tools/utils/timezone.js +0 -10
  828. package/esm/tools/utils/timezone.js.map +0 -1
  829. package/esm/tools/utils/typeUtils.d.ts +0 -4
  830. package/esm/tools/utils/typeUtils.js +0 -13
  831. package/esm/tools/utils/typeUtils.js.map +0 -1
  832. package/esm/tools/utils/urlPolyfill.d.ts +0 -5
  833. package/esm/tools/utils/urlPolyfill.js +0 -52
  834. package/esm/tools/utils/urlPolyfill.js.map +0 -1
  835. package/esm/tools/valueHistory.d.ts +0 -27
  836. package/esm/tools/valueHistory.js +0 -100
  837. package/esm/tools/valueHistory.js.map +0 -1
  838. package/esm/transport/batch.d.ts +0 -16
  839. package/esm/transport/batch.js +0 -106
  840. package/esm/transport/batch.js.map +0 -1
  841. package/esm/transport/eventBridge.d.ts +0 -21
  842. package/esm/transport/eventBridge.js +0 -41
  843. package/esm/transport/eventBridge.js.map +0 -1
  844. package/esm/transport/flushController.d.ts +0 -65
  845. package/esm/transport/flushController.js +0 -119
  846. package/esm/transport/flushController.js.map +0 -1
  847. package/esm/transport/httpRequest.d.ts +0 -56
  848. package/esm/transport/httpRequest.js +0 -89
  849. package/esm/transport/httpRequest.js.map +0 -1
  850. package/esm/transport/index.d.ts +0 -7
  851. package/esm/transport/index.js +0 -5
  852. package/esm/transport/index.js.map +0 -1
  853. package/esm/transport/sendWithRetryStrategy.d.ts +0 -41
  854. package/esm/transport/sendWithRetryStrategy.js +0 -158
  855. package/esm/transport/sendWithRetryStrategy.js.map +0 -1
  856. package/src/boot/displayAlreadyInitializedError.spec.ts +0 -18
  857. package/src/boot/init.spec.ts +0 -50
  858. package/src/browser/addEventListener.spec.ts +0 -141
  859. package/src/browser/cookie.spec.ts +0 -53
  860. package/src/browser/fetchObservable.spec.ts +0 -334
  861. package/src/browser/pageMayExitObservable.spec.ts +0 -56
  862. package/src/browser/xhrObservable.spec.ts +0 -405
  863. package/src/domain/allowedTrackingOrigins.spec.ts +0 -210
  864. package/src/domain/bufferedData.spec.ts +0 -34
  865. package/src/domain/configuration/configuration.spec.ts +0 -236
  866. package/src/domain/configuration/endpointBuilder.spec.ts +0 -173
  867. package/src/domain/configuration/transportConfiguration.spec.ts +0 -130
  868. package/src/domain/configuration/transportConfiguration.ts +0 -78
  869. package/src/domain/connectivity/connectivity.spec.ts +0 -50
  870. package/src/domain/console/consoleObservable.spec.ts +0 -151
  871. package/src/domain/context/contextManager.spec.ts +0 -152
  872. package/src/domain/context/contextUtils.spec.ts +0 -26
  873. package/src/domain/context/storeContextManager.spec.ts +0 -103
  874. package/src/domain/contexts/accountContext.spec.ts +0 -99
  875. package/src/domain/contexts/globalContext.spec.ts +0 -88
  876. package/src/domain/contexts/userContext.spec.ts +0 -156
  877. package/src/domain/error/error.spec.ts +0 -294
  878. package/src/domain/error/trackRuntimeError.spec.ts +0 -343
  879. package/src/domain/eventRateLimiter/createEventRateLimiter.spec.ts +0 -119
  880. package/src/domain/extension/extensionUtils.spec.ts +0 -47
  881. package/src/domain/report/reportObservable.spec.ts +0 -71
  882. package/src/domain/session/oldCookiesMigration.spec.ts +0 -76
  883. package/src/domain/session/oldCookiesMigration.ts +0 -42
  884. package/src/domain/session/sessionManager.spec.ts +0 -684
  885. package/src/domain/session/sessionState.spec.ts +0 -88
  886. package/src/domain/session/sessionStore.spec.ts +0 -647
  887. package/src/domain/session/sessionStoreOperations.spec.ts +0 -234
  888. package/src/domain/session/sessionStoreOperations.ts +0 -131
  889. package/src/domain/session/storeStrategies/sessionInCookie.spec.ts +0 -228
  890. package/src/domain/session/storeStrategies/sessionInLocalStorage.spec.ts +0 -75
  891. package/src/domain/synthetics/syntheticsWorkerValues.spec.ts +0 -82
  892. package/src/domain/tags.spec.ts +0 -74
  893. package/src/domain/telemetry/telemetry.spec.ts +0 -494
  894. package/src/domain/trackingConsent.spec.ts +0 -44
  895. package/src/tools/abstractHooks.spec.ts +0 -76
  896. package/src/tools/abstractHooks.ts +0 -72
  897. package/src/tools/abstractLifeCycle.spec.ts +0 -46
  898. package/src/tools/boundedBuffer.spec.ts +0 -40
  899. package/src/tools/boundedBuffer.ts +0 -45
  900. package/src/tools/catchUserErrors.spec.ts +0 -20
  901. package/src/tools/encoder.spec.ts +0 -112
  902. package/src/tools/experimentalFeatures.spec.ts +0 -60
  903. package/src/tools/getZoneJsOriginalValue.spec.ts +0 -36
  904. package/src/tools/instrumentMethod.spec.ts +0 -381
  905. package/src/tools/matchOption.spec.ts +0 -41
  906. package/src/tools/mergeInto.spec.ts +0 -198
  907. package/src/tools/mergeInto.ts +0 -177
  908. package/src/tools/monitor.spec.ts +0 -172
  909. package/src/tools/observable.spec.ts +0 -259
  910. package/src/tools/queueMicrotask.spec.ts +0 -24
  911. package/src/tools/readBytesFromStream.spec.ts +0 -62
  912. package/src/tools/requestIdleCallback.spec.ts +0 -65
  913. package/src/tools/serialisation/jsonStringify.spec.ts +0 -76
  914. package/src/tools/serialisation/sanitize.spec.ts +0 -284
  915. package/src/tools/stackTrace/capturedExceptions.specHelper.ts +0 -316
  916. package/src/tools/stackTrace/computeStackTrace.spec.ts +0 -1007
  917. package/src/tools/stackTrace/handlingStack.spec.ts +0 -20
  918. package/src/tools/taskQueue.spec.ts +0 -60
  919. package/src/tools/timer.spec.ts +0 -76
  920. package/src/tools/utils/browserDetection.spec.ts +0 -120
  921. package/src/tools/utils/byteUtils.spec.ts +0 -29
  922. package/src/tools/utils/functionUtils.spec.ts +0 -229
  923. package/src/tools/utils/numberUtils.spec.ts +0 -27
  924. package/src/tools/utils/stringUtils.spec.ts +0 -74
  925. package/src/tools/utils/timeUtils.ts +0 -117
  926. package/src/tools/utils/typeUtils.spec.ts +0 -25
  927. package/src/tools/utils/typeUtils.ts +0 -12
  928. package/src/tools/utils/urlPolyfill.spec.ts +0 -55
  929. package/src/tools/valueHistory.spec.ts +0 -180
  930. package/src/transport/batch.spec.ts +0 -261
  931. package/src/transport/eventBridge.spec.ts +0 -90
  932. package/src/transport/flushController.spec.ts +0 -267
  933. package/src/transport/httpRequest.spec.ts +0 -400
  934. package/src/transport/sendWithRetryStrategy.spec.ts +0 -393
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonStringify.mjs","names":[],"sources":["../../../src/tools/serialisation/jsonStringify.ts"],"sourcesContent":["import { noop } from '../utils/functionUtils'\n\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(\n value: unknown,\n replacer?: Array<string | number>,\n space?: string | number\n): string | undefined {\n if (typeof value !== 'object' || value === null) {\n return JSON.stringify(value)\n }\n\n // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n // subclasses.\n const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n const restoreValuePrototypeToJson = detachToJsonMethod(Object.getPrototypeOf(value))\n const restoreValueToJson = detachToJsonMethod(value)\n\n try {\n return JSON.stringify(value, replacer, space)\n } catch {\n return '<error: unable to serialize object>'\n } finally {\n restoreObjectPrototypeToJson()\n restoreArrayPrototypeToJson()\n restoreValuePrototypeToJson()\n restoreValueToJson()\n }\n}\n\nexport interface ObjectWithToJsonMethod {\n toJSON?: () => unknown\n}\n\nexport function detachToJsonMethod(value: object) {\n const object = value as ObjectWithToJsonMethod\n const objectToJson = object.toJSON\n if (objectToJson) {\n delete object.toJSON\n return () => {\n object.toJSON = objectToJson\n }\n }\n return noop\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,cACd,OACA,UACA,OACoB;CACpB,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO,KAAK,UAAU,KAAK;CAK7B,MAAM,+BAA+B,mBAAmB,OAAO,SAAS;CACxE,MAAM,8BAA8B,mBAAmB,MAAM,SAAS;CACtE,MAAM,8BAA8B,mBAAmB,OAAO,eAAe,KAAK,CAAC;CACnF,MAAM,qBAAqB,mBAAmB,KAAK;CAEnD,IAAI;EACF,OAAO,KAAK,UAAU,OAAO,UAAU,KAAK;CAC9C,QAAQ;EACN,OAAO;CACT,UAAU;EACR,6BAA6B;EAC7B,4BAA4B;EAC5B,4BAA4B;EAC5B,mBAAmB;CACrB;AACF;AAMA,SAAgB,mBAAmB,OAAe;CAChD,MAAM,SAAS;CACf,MAAM,eAAe,OAAO;CAC5B,IAAI,cAAc;EAChB,OAAO,OAAO;EACd,aAAa;GACX,OAAO,SAAS;EAClB;CACF;CACA,OAAO;AACT"}
@@ -0,0 +1,131 @@
1
+ import { display } from "../display.mjs";
2
+ import { ONE_KIBI_BYTE } from "../utils/byteUtils.mjs";
3
+ import { detachToJsonMethod } from "./jsonStringify.mjs";
4
+ //#region src/tools/serialisation/sanitize.ts
5
+ const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE;
6
+ const JSON_PATH_ROOT_ELEMENT = "$";
7
+ const KEY_DECORATION_LENGTH = 3;
8
+ function sanitize(source, maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT) {
9
+ const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype);
10
+ const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype);
11
+ try {
12
+ const containerQueue = [];
13
+ const visitedObjectsWithPath = /* @__PURE__ */ new WeakMap();
14
+ const sanitizedData = sanitizeProcessor(source, JSON_PATH_ROOT_ELEMENT, void 0, containerQueue, visitedObjectsWithPath);
15
+ const serializedSanitizedData = JSON.stringify(sanitizedData);
16
+ let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0;
17
+ if (accumulatedCharacterCount > maxCharacterCount) {
18
+ warnOverCharacterLimit(maxCharacterCount, "discarded", source);
19
+ return;
20
+ }
21
+ while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {
22
+ const containerToProcess = containerQueue.shift();
23
+ let separatorLength = 0;
24
+ if (Array.isArray(containerToProcess.source)) for (let key = 0; key < containerToProcess.source.length; key++) {
25
+ const targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);
26
+ if (targetData !== void 0) accumulatedCharacterCount += JSON.stringify(targetData).length;
27
+ else accumulatedCharacterCount += 4;
28
+ accumulatedCharacterCount += separatorLength;
29
+ separatorLength = 1;
30
+ if (accumulatedCharacterCount > maxCharacterCount) {
31
+ warnOverCharacterLimit(maxCharacterCount, "truncated", source);
32
+ break;
33
+ }
34
+ containerToProcess.target[key] = targetData;
35
+ }
36
+ else for (const key in containerToProcess.source) if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {
37
+ const targetData = sanitizeProcessor(containerToProcess.source[key], containerToProcess.path, key, containerQueue, visitedObjectsWithPath);
38
+ if (targetData !== void 0) {
39
+ accumulatedCharacterCount += JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH;
40
+ separatorLength = 1;
41
+ }
42
+ if (accumulatedCharacterCount > maxCharacterCount) {
43
+ warnOverCharacterLimit(maxCharacterCount, "truncated", source);
44
+ break;
45
+ }
46
+ containerToProcess.target[key] = targetData;
47
+ }
48
+ }
49
+ return sanitizedData;
50
+ } finally {
51
+ restoreObjectPrototypeToJson();
52
+ restoreArrayPrototypeToJson();
53
+ }
54
+ }
55
+ /**
56
+ * Internal function to factorize the process common to the
57
+ * initial call to sanitize, and iterations for Arrays and Objects
58
+ *
59
+ */
60
+ function sanitizeProcessor(source, parentPath, key, queue, visitedObjectsWithPath) {
61
+ const sourceToSanitize = tryToApplyToJSON(source);
62
+ if (!sourceToSanitize || typeof sourceToSanitize !== "object") return sanitizePrimitivesAndFunctions(sourceToSanitize);
63
+ const sanitizedSource = sanitizeObjects(sourceToSanitize);
64
+ if (sanitizedSource !== "[Object]" && sanitizedSource !== "[Array]" && sanitizedSource !== "[Error]") return sanitizedSource;
65
+ const sourceAsObject = source;
66
+ if (visitedObjectsWithPath.has(sourceAsObject)) return `[Reference seen at ${visitedObjectsWithPath.get(sourceAsObject)}]`;
67
+ const currentPath = key !== void 0 ? `${parentPath}.${key}` : parentPath;
68
+ const target = Array.isArray(sourceToSanitize) ? [] : {};
69
+ visitedObjectsWithPath.set(sourceAsObject, currentPath);
70
+ queue.push({
71
+ source: sourceToSanitize,
72
+ target,
73
+ path: currentPath
74
+ });
75
+ return target;
76
+ }
77
+ /**
78
+ * Handles sanitization of simple, non-object types
79
+ *
80
+ */
81
+ function sanitizePrimitivesAndFunctions(value) {
82
+ if (typeof value === "bigint") return `[BigInt] ${value.toString()}`;
83
+ if (typeof value === "function") return `[Function] ${value.name || "unknown"}`;
84
+ if (typeof value === "symbol") return `[Symbol] ${value.description || value.toString()}`;
85
+ return value;
86
+ }
87
+ /**
88
+ * Handles sanitization of object types
89
+ *
90
+ * LIMITATIONS
91
+ * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.
92
+ * To avoid this, a toJSON method can be defined.
93
+ */
94
+ function sanitizeObjects(value) {
95
+ try {
96
+ if (value instanceof Event) return sanitizeEvent(value);
97
+ if (value instanceof RegExp) return `[RegExp] ${value.toString()}`;
98
+ const match = Object.prototype.toString.call(value).match(/\[object (.*)\]/);
99
+ if (match?.[1]) return `[${match[1]}]`;
100
+ } catch {}
101
+ return "[Unserializable]";
102
+ }
103
+ function sanitizeEvent(event) {
104
+ return {
105
+ type: event.type,
106
+ isTrusted: event.isTrusted,
107
+ currentTarget: event.currentTarget ? sanitizeObjects(event.currentTarget) : null,
108
+ target: event.target ? sanitizeObjects(event.target) : null
109
+ };
110
+ }
111
+ /**
112
+ * Checks if a toJSON function exists and tries to execute it
113
+ *
114
+ */
115
+ function tryToApplyToJSON(value) {
116
+ const object = value;
117
+ if (object && typeof object.toJSON === "function") try {
118
+ return object.toJSON();
119
+ } catch {}
120
+ return value;
121
+ }
122
+ /**
123
+ * Helper function to display the warning when the accumulated character count is over the limit
124
+ */
125
+ function warnOverCharacterLimit(maxCharacterCount, changeType, source) {
126
+ display.warn(`The data provided has been ${changeType} as it is over the limit of ${maxCharacterCount} characters:`, source);
127
+ }
128
+ //#endregion
129
+ export { SANITIZE_DEFAULT_MAX_CHARACTER_COUNT, sanitize };
130
+
131
+ //# sourceMappingURL=sanitize.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.mjs","names":[],"sources":["../../../src/tools/serialisation/sanitize.ts"],"sourcesContent":["import { display } from '../display'\nimport { ONE_KIBI_BYTE } from '../utils/byteUtils'\nimport type { Context, ContextArray, ContextValue } from './context'\nimport type { ObjectWithToJsonMethod } from './jsonStringify'\nimport { detachToJsonMethod } from './jsonStringify'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\ntype PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function\ntype ExtendedContextValue = PrimitivesAndFunctions | ExtendedContext | ExtendedContextArray\ninterface ExtendedContext {\n [key: string]: ExtendedContextValue\n}\ntype ExtendedContextArray = ExtendedContextValue[]\n\ninterface ContainerElementToProcess {\n source: ExtendedContextArray | ExtendedContext\n target: ContextArray | Context\n path: string\n}\n\ninterface SanitizedEvent extends Context {\n type: string\n isTrusted: boolean\n currentTarget: string | null | undefined\n target: string | null | undefined\n}\n\n// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data\n// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...\nexport const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE\n\n// Symbol for the root element of the JSONPath used for visited objects\nconst JSON_PATH_ROOT_ELEMENT = '$'\n\n// When serializing (using JSON.stringify) a key of an object, { key: 42 } gets wrapped in quotes as \"key\".\n// With the separator (:), we need to add 3 characters to the count.\nconst KEY_DECORATION_LENGTH = 3\n\n/**\n * Ensures user-provided data is 'safe' for the SDK\n * - Deep clones data\n * - Removes cyclic references\n * - Transforms unserializable types to a string representation\n *\n * LIMITATIONS:\n * - Size is in characters, not byte count (may differ according to character encoding)\n * - Size does not take into account indentation that can be applied to JSON.stringify\n * - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify\n *\n * @param source - User-provided data meant to be serialized using JSON.stringify\n * @param maxCharacterCount - Maximum number of characters allowed in serialized form\n */\nexport function sanitize(source: string, maxCharacterCount?: number): string | undefined\nexport function sanitize(source: Context, maxCharacterCount?: number): Context\nexport function sanitize(source: unknown, maxCharacterCount?: number): ContextValue\nexport function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_MAX_CHARACTER_COUNT) {\n // Unbind any toJSON function we may have on [] or {} prototypes\n const restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n const restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n\n try {\n // Initial call to sanitizeProcessor - will populate containerQueue if source is an Array or a plain Object\n const containerQueue: ContainerElementToProcess[] = []\n const visitedObjectsWithPath = new WeakMap<object, string>()\n const sanitizedData = sanitizeProcessor(\n source as ExtendedContextValue,\n JSON_PATH_ROOT_ELEMENT,\n undefined,\n containerQueue,\n visitedObjectsWithPath\n )\n const serializedSanitizedData = JSON.stringify(sanitizedData)\n let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0\n\n if (accumulatedCharacterCount > maxCharacterCount) {\n warnOverCharacterLimit(maxCharacterCount, 'discarded', source)\n return undefined\n }\n\n while (containerQueue.length > 0 && accumulatedCharacterCount < maxCharacterCount) {\n const containerToProcess = containerQueue.shift()!\n let separatorLength = 0 // 0 for the first element, 1 for subsequent elements\n\n // Arrays and Objects have to be handled distinctly to ensure\n // we do not pick up non-numerical properties from Arrays\n if (Array.isArray(containerToProcess.source)) {\n for (let key = 0; key < containerToProcess.source.length; key++) {\n const targetData = sanitizeProcessor(\n containerToProcess.source[key],\n containerToProcess.path,\n key,\n containerQueue,\n visitedObjectsWithPath\n )\n\n if (targetData !== undefined) {\n accumulatedCharacterCount += JSON.stringify(targetData).length\n } else {\n // When an element of an Array (targetData) is undefined, it is serialized as null:\n // JSON.stringify([undefined]) => '[null]' - This accounts for 4 characters\n accumulatedCharacterCount += 4\n }\n accumulatedCharacterCount += separatorLength\n separatorLength = 1\n if (accumulatedCharacterCount > maxCharacterCount) {\n warnOverCharacterLimit(maxCharacterCount, 'truncated', source)\n break\n }\n ;(containerToProcess.target as ContextArray)[key] = targetData\n }\n } else {\n for (const key in containerToProcess.source) {\n if (Object.prototype.hasOwnProperty.call(containerToProcess.source, key)) {\n const targetData = sanitizeProcessor(\n containerToProcess.source[key],\n containerToProcess.path,\n key,\n containerQueue,\n visitedObjectsWithPath\n )\n // When a property of an object has an undefined value, it will be dropped during serialization:\n // JSON.stringify({a:undefined}) => '{}'\n if (targetData !== undefined) {\n accumulatedCharacterCount +=\n JSON.stringify(targetData).length + separatorLength + key.length + KEY_DECORATION_LENGTH\n separatorLength = 1\n }\n if (accumulatedCharacterCount > maxCharacterCount) {\n warnOverCharacterLimit(maxCharacterCount, 'truncated', source)\n break\n }\n ;(containerToProcess.target as Context)[key] = targetData\n }\n }\n }\n }\n\n return sanitizedData\n } finally {\n // Rebind detached toJSON functions\n restoreObjectPrototypeToJson()\n restoreArrayPrototypeToJson()\n }\n}\n\n/**\n * Internal function to factorize the process common to the\n * initial call to sanitize, and iterations for Arrays and Objects\n *\n */\nfunction sanitizeProcessor(\n source: ExtendedContextValue,\n parentPath: string,\n key: string | number | undefined,\n queue: ContainerElementToProcess[],\n visitedObjectsWithPath: WeakMap<object, string>\n) {\n // Start by handling toJSON, as we want to sanitize its output\n const sourceToSanitize = tryToApplyToJSON(source)\n\n if (!sourceToSanitize || typeof sourceToSanitize !== 'object') {\n return sanitizePrimitivesAndFunctions(sourceToSanitize)\n }\n\n const sanitizedSource = sanitizeObjects(sourceToSanitize)\n if (sanitizedSource !== '[Object]' && sanitizedSource !== '[Array]' && sanitizedSource !== '[Error]') {\n return sanitizedSource\n }\n\n // Handle potential cyclic references\n // We need to use source as sourceToSanitize could be a reference to a new object\n // At this stage, we know the source is an object type\n const sourceAsObject = source as object\n if (visitedObjectsWithPath.has(sourceAsObject)) {\n return `[Reference seen at ${visitedObjectsWithPath.get(sourceAsObject)!}]`\n }\n\n // Add processed source to queue\n const currentPath = key !== undefined ? `${parentPath}.${key}` : parentPath\n const target = Array.isArray(sourceToSanitize) ? ([] as ContextArray) : ({} as Context)\n visitedObjectsWithPath.set(sourceAsObject, currentPath)\n queue.push({ source: sourceToSanitize, target, path: currentPath })\n\n return target\n}\n\n/**\n * Handles sanitization of simple, non-object types\n *\n */\nfunction sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {\n // BigInt cannot be serialized by JSON.stringify(), convert it to a string representation\n if (typeof value === 'bigint') {\n return `[BigInt] ${value.toString()}`\n }\n // Functions cannot be serialized by JSON.stringify(). Moreover, if a faulty toJSON is present, it needs to be converted\n // so it won't prevent stringify from serializing later\n if (typeof value === 'function') {\n return `[Function] ${value.name || 'unknown'}`\n }\n // JSON.stringify() does not serialize symbols.\n if (typeof value === 'symbol') {\n // symbol.description is part of ES2019+\n type symbolWithDescription = symbol & { description: string }\n return `[Symbol] ${(value as symbolWithDescription).description || value.toString()}`\n }\n\n return value\n}\n\n/**\n * Handles sanitization of object types\n *\n * LIMITATIONS\n * - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.\n * To avoid this, a toJSON method can be defined.\n */\nfunction sanitizeObjects(value: object): string | SanitizedEvent {\n try {\n if (value instanceof Event) {\n return sanitizeEvent(value)\n }\n\n if (value instanceof RegExp) {\n return `[RegExp] ${value.toString()}`\n }\n\n // Handle all remaining object types in a generic way\n const result = Object.prototype.toString.call(value)\n const match = result.match(/\\[object (.*)\\]/)\n if (match?.[1]) {\n return `[${match[1]}]`\n }\n } catch {\n // If the previous serialization attempts failed, and we cannot convert using\n // Object.prototype.toString, declare the value unserializable\n }\n return '[Unserializable]'\n}\n\nfunction sanitizeEvent(event: Event): SanitizedEvent {\n return {\n type: event.type,\n isTrusted: event.isTrusted,\n currentTarget: event.currentTarget ? (sanitizeObjects(event.currentTarget) as string) : null,\n target: event.target ? (sanitizeObjects(event.target) as string) : null,\n }\n}\n\n/**\n * Checks if a toJSON function exists and tries to execute it\n *\n */\nfunction tryToApplyToJSON(value: ExtendedContextValue) {\n const object = value as ObjectWithToJsonMethod\n if (object && typeof object.toJSON === 'function') {\n try {\n return object.toJSON() as ExtendedContextValue\n } catch {\n // If toJSON fails, we continue by trying to serialize the value manually\n }\n }\n\n return value\n}\n\n/**\n * Helper function to display the warning when the accumulated character count is over the limit\n */\nfunction warnOverCharacterLimit(maxCharacterCount: number, changeType: 'discarded' | 'truncated', source: unknown) {\n display.warn(\n `The data provided has been ${changeType} as it is over the limit of ${maxCharacterCount} characters:`,\n source\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { jsonStringify } from "./jsonStringify.mjs";
2
+ import { sanitize } from "./sanitize.mjs";
3
+ //#region src/tools/serialisation/stringify.ts
4
+ function safeToString(value) {
5
+ try {
6
+ return String(value);
7
+ } catch {}
8
+ }
9
+ function safeStringify(value) {
10
+ try {
11
+ return jsonStringify(sanitize(value));
12
+ } catch {}
13
+ }
14
+ //#endregion
15
+ export { safeStringify, safeToString };
16
+
17
+ //# sourceMappingURL=stringify.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify.mjs","names":[],"sources":["../../../src/tools/serialisation/stringify.ts"],"sourcesContent":["import { jsonStringify } from './jsonStringify'\nimport { sanitize } from './sanitize'\n\nexport function safeToString(value: unknown): string | undefined {\n try {\n return String(value)\n } catch {\n // ignore\n }\n}\n\nexport function safeStringify(value: unknown): string | undefined {\n try {\n return jsonStringify(sanitize(value))\n } catch {\n // ignore\n }\n}\n"],"mappings":";;;AAGA,SAAgB,aAAa,OAAoC;CAC/D,IAAI;EACF,OAAO,OAAO,KAAK;CACrB,QAAQ,CAER;AACF;AAEA,SAAgB,cAAc,OAAoC;CAChE,IAAI;EACF,OAAO,cAAc,SAAS,KAAK,CAAC;CACtC,QAAQ,CAER;AACF"}
@@ -0,0 +1,148 @@
1
+ import { isIndexableObject } from "@openobserve/js-core/util";
2
+ //#region src/tools/stackTrace/computeStackTrace.ts
3
+ /**
4
+ * Cross-browser stack trace computation.
5
+ *
6
+ * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js
7
+ */
8
+ const UNKNOWN_FUNCTION = "?";
9
+ function computeStackTrace(ex) {
10
+ const stack = [];
11
+ let stackProperty = tryToGetString(ex, "stack");
12
+ const exString = String(ex);
13
+ if (stackProperty?.startsWith(exString)) stackProperty = stackProperty.slice(exString.length);
14
+ if (stackProperty) stackProperty.split("\n").forEach((line) => {
15
+ const stackFrame = parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line);
16
+ if (stackFrame) {
17
+ if (!stackFrame.func && stackFrame.line) stackFrame.func = UNKNOWN_FUNCTION;
18
+ stack.push(stackFrame);
19
+ }
20
+ });
21
+ if (stack.length > 0 && isWronglyReportingCustomErrors() && ex instanceof Error) {
22
+ const constructors = [];
23
+ let currentPrototype = ex;
24
+ while ((currentPrototype = Object.getPrototypeOf(currentPrototype)) && isNonNativeClassPrototype(currentPrototype)) {
25
+ const constructorName = currentPrototype.constructor?.name || UNKNOWN_FUNCTION;
26
+ constructors.push(constructorName);
27
+ }
28
+ for (let i = constructors.length - 1; i >= 0 && stack[0]?.func === constructors[i]; i--) stack.shift();
29
+ }
30
+ return {
31
+ message: tryToGetString(ex, "message"),
32
+ name: tryToGetString(ex, "name"),
33
+ stack
34
+ };
35
+ }
36
+ const fileUrl = "((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)";
37
+ const filePosition = "(?::(\\d+))";
38
+ const CHROME_LINE_RE = new RegExp(`^\\s*at (.*?) ?\\(${fileUrl}${filePosition}?${filePosition}?\\)?\\s*$`, "i");
39
+ const CHROME_EVAL_RE = new RegExp(`\\((\\S*)${filePosition}${filePosition}\\)`);
40
+ function parseChromeLine(line) {
41
+ const parts = CHROME_LINE_RE.exec(line);
42
+ if (!parts) return;
43
+ const isNative = parts[2]?.indexOf("native") === 0;
44
+ const isEval = parts[2]?.indexOf("eval") === 0;
45
+ const submatch = CHROME_EVAL_RE.exec(parts[2]);
46
+ if (isEval && submatch) {
47
+ parts[2] = submatch[1];
48
+ parts[3] = submatch[2];
49
+ parts[4] = submatch[3];
50
+ }
51
+ return {
52
+ args: isNative ? [parts[2]] : [],
53
+ column: parts[4] ? +parts[4] : void 0,
54
+ func: parts[1] || UNKNOWN_FUNCTION,
55
+ line: parts[3] ? +parts[3] : void 0,
56
+ url: !isNative ? parts[2] : void 0
57
+ };
58
+ }
59
+ const CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(`^\\s*at\\s*(?:(.*)?(?: @))?\\s*${fileUrl}${filePosition}?${filePosition}??\\s*$`, "i");
60
+ function parseChromeAnonymousLine(line) {
61
+ const parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line);
62
+ if (!parts) return;
63
+ return {
64
+ args: [],
65
+ column: parts[4] ? +parts[4] : void 0,
66
+ func: parts[1] || UNKNOWN_FUNCTION,
67
+ line: parts[3] ? +parts[3] : void 0,
68
+ url: parts[2]
69
+ };
70
+ }
71
+ const WINJS_LINE_RE = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
72
+ function parseWinLine(line) {
73
+ const parts = WINJS_LINE_RE.exec(line);
74
+ if (!parts) return;
75
+ return {
76
+ args: [],
77
+ column: parts[4] ? +parts[4] : void 0,
78
+ func: parts[1] || UNKNOWN_FUNCTION,
79
+ line: +parts[3],
80
+ url: parts[2]
81
+ };
82
+ }
83
+ const GECKO_LINE_RE = /^\s*(.*?)(?:\((.*?)\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle|\[wasm code\])(?::(\d+))?(?::(\d+))?)|@)\s*$/i;
84
+ const GECKO_EVAL_RE = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
85
+ function parseGeckoLine(line) {
86
+ const parts = GECKO_LINE_RE.exec(line);
87
+ if (!parts) return;
88
+ const isEval = parts[3] && parts[3].indexOf(" > eval") > -1;
89
+ const submatch = GECKO_EVAL_RE.exec(parts[3]);
90
+ if (isEval && submatch) {
91
+ parts[3] = submatch[1];
92
+ parts[4] = submatch[2];
93
+ parts[5] = void 0;
94
+ }
95
+ return {
96
+ args: parts[2] ? parts[2].split(",") : [],
97
+ column: parts[5] ? +parts[5] : void 0,
98
+ func: parts[1] || UNKNOWN_FUNCTION,
99
+ line: parts[4] ? +parts[4] : void 0,
100
+ url: parts[3]
101
+ };
102
+ }
103
+ function tryToGetString(candidate, property) {
104
+ return isIndexableObject(candidate) && typeof candidate[property] === "string" ? candidate[property] : void 0;
105
+ }
106
+ function computeStackTraceFromOnErrorMessage(messageObj, url, line, column) {
107
+ if (url === void 0) return;
108
+ const { name, message } = tryToParseMessage(messageObj);
109
+ return {
110
+ name,
111
+ message,
112
+ stack: [{
113
+ url,
114
+ column,
115
+ line
116
+ }]
117
+ };
118
+ }
119
+ const ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\s\S]*)$/;
120
+ function tryToParseMessage(messageObj) {
121
+ let name;
122
+ let message;
123
+ if ({}.toString.call(messageObj) === "[object String]") [, name, message] = ERROR_TYPES_RE.exec(messageObj);
124
+ return {
125
+ name,
126
+ message
127
+ };
128
+ }
129
+ function isNonNativeClassPrototype(prototype) {
130
+ return String(prototype.constructor).startsWith("class ");
131
+ }
132
+ let isWronglyReportingCustomErrorsCache;
133
+ function isWronglyReportingCustomErrors() {
134
+ if (isWronglyReportingCustomErrorsCache !== void 0) return isWronglyReportingCustomErrorsCache;
135
+ class DatadogTestCustomError extends Error {
136
+ constructor() {
137
+ super();
138
+ this.name = "Error";
139
+ }
140
+ }
141
+ const [customError, nativeError] = [DatadogTestCustomError, Error].map((errConstructor) => new errConstructor());
142
+ isWronglyReportingCustomErrorsCache = isNonNativeClassPrototype(Object.getPrototypeOf(customError)) && nativeError.stack !== customError.stack;
143
+ return isWronglyReportingCustomErrorsCache;
144
+ }
145
+ //#endregion
146
+ export { computeStackTrace, computeStackTraceFromOnErrorMessage };
147
+
148
+ //# sourceMappingURL=computeStackTrace.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeStackTrace.mjs","names":[],"sources":["../../../src/tools/stackTrace/computeStackTrace.ts"],"sourcesContent":["/**\n * Cross-browser stack trace computation.\n *\n * Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js\n */\n\nimport { isIndexableObject } from '@openobserve/js-core/util'\n\nexport interface StackFrame {\n url?: string\n func?: string\n /** The arguments passed to the function, if known. */\n args?: string[]\n line?: number\n column?: number\n /** An array of source code lines; the middle element corresponds to the correct line. */\n context?: string[]\n}\n\nexport interface StackTrace {\n name?: string\n message?: string\n url?: string\n stack: StackFrame[]\n incomplete?: boolean\n partial?: boolean\n}\n\nconst UNKNOWN_FUNCTION = '?'\n\nexport function computeStackTrace(ex: unknown): StackTrace {\n const stack: StackFrame[] = []\n\n let stackProperty = tryToGetString(ex, 'stack')\n const exString = String(ex)\n if (stackProperty?.startsWith(exString)) {\n stackProperty = stackProperty.slice(exString.length)\n }\n if (stackProperty) {\n stackProperty.split('\\n').forEach((line) => {\n const stackFrame =\n parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line)\n if (stackFrame) {\n if (!stackFrame.func && stackFrame.line) {\n stackFrame.func = UNKNOWN_FUNCTION\n }\n\n stack.push(stackFrame)\n }\n })\n }\n\n if (stack.length > 0 && isWronglyReportingCustomErrors() && ex instanceof Error) {\n // if we are wrongly reporting custom errors\n const constructors: string[] = []\n\n // go through each inherited constructor\n let currentPrototype: object | undefined = ex\n while (\n (currentPrototype = Object.getPrototypeOf(currentPrototype)) &&\n isNonNativeClassPrototype(currentPrototype)\n ) {\n const constructorName = currentPrototype.constructor?.name || UNKNOWN_FUNCTION\n constructors.push(constructorName)\n }\n\n // traverse the stacktrace in reverse order because the stacktrace starts with the last inherited constructor\n // we check constructor names to ensure we remove the correct frame (and there isn't a weird unsupported environment behavior)\n for (let i = constructors.length - 1; i >= 0 && stack[0]?.func === constructors[i]; i--) {\n // if the first stack frame is the custom error constructor\n // null stack frames may represent frames that failed to be parsed because the error class did not have a constructor\n stack.shift() // remove it\n }\n }\n\n return {\n message: tryToGetString(ex, 'message'),\n name: tryToGetString(ex, 'name'),\n stack,\n }\n}\nconst fileUrl =\n '((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\\\w+\\\\.|\\\\/).*?)'\nconst filePosition = '(?::(\\\\d+))'\nconst CHROME_LINE_RE = new RegExp(`^\\\\s*at (.*?) ?\\\\(${fileUrl}${filePosition}?${filePosition}?\\\\)?\\\\s*$`, 'i')\n\nconst CHROME_EVAL_RE = new RegExp(`\\\\((\\\\S*)${filePosition}${filePosition}\\\\)`)\n\nfunction parseChromeLine(line: string): StackFrame | undefined {\n const parts = CHROME_LINE_RE.exec(line)\n\n if (!parts) {\n return\n }\n\n const isNative = parts[2]?.indexOf('native') === 0 // start of line\n const isEval = parts[2]?.indexOf('eval') === 0 // start of line\n const submatch = CHROME_EVAL_RE.exec(parts[2])\n\n if (isEval && submatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1] // url\n parts[3] = submatch[2] // line\n parts[4] = submatch[3] // column\n }\n\n return {\n args: isNative ? [parts[2]] : [],\n column: parts[4] ? +parts[4] : undefined,\n func: parts[1] || UNKNOWN_FUNCTION,\n line: parts[3] ? +parts[3] : undefined,\n url: !isNative ? parts[2] : undefined,\n }\n}\n\nconst htmlAnonymousPart = '(?:(.*)?(?: @))'\nconst CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(\n `^\\\\s*at\\\\s*${htmlAnonymousPart}?\\\\s*${fileUrl}${filePosition}?${filePosition}??\\\\s*$`,\n 'i'\n)\n\nfunction parseChromeAnonymousLine(line: string): StackFrame | undefined {\n const parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line)\n\n if (!parts) {\n return\n }\n\n return {\n args: [],\n column: parts[4] ? +parts[4] : undefined,\n func: parts[1] || UNKNOWN_FUNCTION,\n line: parts[3] ? +parts[3] : undefined,\n url: parts[2],\n }\n}\n\nconst WINJS_LINE_RE =\n /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i\n\nfunction parseWinLine(line: string): StackFrame | undefined {\n const parts = WINJS_LINE_RE.exec(line)\n if (!parts) {\n return\n }\n\n return {\n args: [],\n column: parts[4] ? +parts[4] : undefined,\n func: parts[1] || UNKNOWN_FUNCTION,\n line: +parts[3],\n url: parts[2],\n }\n}\n\nconst GECKO_LINE_RE =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\\[native).*?|[^@]*bundle|\\[wasm code\\])(?::(\\d+))?(?::(\\d+))?)|@)\\s*$/i\nconst GECKO_EVAL_RE = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i\n\nfunction parseGeckoLine(line: string): StackFrame | undefined {\n const parts = GECKO_LINE_RE.exec(line)\n if (!parts) {\n return\n }\n\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1\n const submatch = GECKO_EVAL_RE.exec(parts[3])\n\n if (isEval && submatch) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1]\n parts[4] = submatch[2]\n parts[5] = undefined! // no column when eval\n }\n\n return {\n args: parts[2] ? parts[2].split(',') : [],\n column: parts[5] ? +parts[5] : undefined,\n func: parts[1] || UNKNOWN_FUNCTION,\n line: parts[4] ? +parts[4] : undefined,\n url: parts[3],\n }\n}\n\nfunction tryToGetString(candidate: unknown, property: string) {\n return isIndexableObject(candidate) && typeof candidate[property] === 'string' ? candidate[property] : undefined\n}\n\nexport function computeStackTraceFromOnErrorMessage(\n messageObj: unknown,\n url?: string,\n line?: number,\n column?: number\n): StackTrace | undefined {\n if (url === undefined) {\n return\n }\n const { name, message } = tryToParseMessage(messageObj)\n return {\n name,\n message,\n stack: [{ url, column, line }],\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nconst ERROR_TYPES_RE =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\\s\\S]*)$/\n\nfunction tryToParseMessage(messageObj: unknown) {\n let name\n let message\n if ({}.toString.call(messageObj) === '[object String]') {\n ;[, name, message] = ERROR_TYPES_RE.exec(messageObj as string)!\n }\n return { name, message }\n}\n\n// Custom error stacktrace fix\n// Some browsers (safari/firefox) add the error constructor as a frame in the stacktrace\n// In order to normalize the stacktrace, we need to remove it\n\nfunction isNonNativeClassPrototype(prototype: object) {\n return String(prototype.constructor).startsWith('class ')\n}\n\nlet isWronglyReportingCustomErrorsCache: boolean | undefined\n\nfunction isWronglyReportingCustomErrors() {\n if (isWronglyReportingCustomErrorsCache !== undefined) {\n return isWronglyReportingCustomErrorsCache\n }\n\n /* eslint-disable no-restricted-syntax */\n class DatadogTestCustomError extends Error {\n constructor() {\n super()\n this.name = 'Error' // set name to Error so that no browser would default to the constructor name\n }\n }\n\n const [customError, nativeError] = [DatadogTestCustomError, Error].map((errConstructor) => new errConstructor()) // so that both errors should exactly have the same stacktrace\n\n isWronglyReportingCustomErrorsCache =\n // If customError is not a class, it means that this was built with ES5 as target, converting the class to a normal object.\n // Thus, error constructors will be reported on all browsers, which is the expected behavior.\n isNonNativeClassPrototype(Object.getPrototypeOf(customError)) &&\n // If the browser is correctly reporting the stacktrace, the normal error stacktrace should be the same as the custom error stacktrace\n nativeError.stack !== customError.stack\n\n return isWronglyReportingCustomErrorsCache\n}\n"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { callMonitored } from "../monitor.mjs";
2
+ import { computeStackTrace } from "./computeStackTrace.mjs";
3
+ //#region src/tools/stackTrace/handlingStack.ts
4
+ /**
5
+ * Creates a stacktrace without SDK internal frames.
6
+ * Constraints:
7
+ * - Has to be called at the utmost position of the call stack.
8
+ * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.
9
+ */
10
+ function createHandlingStack(type) {
11
+ /**
12
+ * Skip the two internal frames:
13
+ * - SDK API (console.error, ...)
14
+ * - this function
15
+ * in order to keep only the user calls
16
+ */
17
+ const internalFramesToSkip = 2;
18
+ const error = new Error(type);
19
+ error.name = "HandlingStack";
20
+ let formattedStack;
21
+ callMonitored(() => {
22
+ const stackTrace = computeStackTrace(error);
23
+ stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip);
24
+ formattedStack = toStackTraceString(stackTrace);
25
+ });
26
+ return formattedStack;
27
+ }
28
+ function toStackTraceString(stack) {
29
+ let result = formatErrorMessage(stack);
30
+ stack.stack.forEach((frame) => {
31
+ const func = frame.func === "?" ? "<anonymous>" : frame.func;
32
+ const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(", ")})` : "";
33
+ const line = frame.line ? `:${frame.line}` : "";
34
+ const column = frame.line && frame.column ? `:${frame.column}` : "";
35
+ result += `\n at ${func}${args} @ ${frame.url}${line}${column}`;
36
+ });
37
+ return result;
38
+ }
39
+ function formatErrorMessage(stack) {
40
+ return `${stack.name || "Error"}: ${stack.message}`;
41
+ }
42
+ //#endregion
43
+ export { createHandlingStack, formatErrorMessage, toStackTraceString };
44
+
45
+ //# sourceMappingURL=handlingStack.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlingStack.mjs","names":[],"sources":["../../../src/tools/stackTrace/handlingStack.ts"],"sourcesContent":["import { callMonitored } from '../monitor'\nimport type { StackTrace } from './computeStackTrace'\nimport { computeStackTrace } from './computeStackTrace'\n\n/**\n * Creates a stacktrace without SDK internal frames.\n * Constraints:\n * - Has to be called at the utmost position of the call stack.\n * - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.\n */\nexport function createHandlingStack(\n type:\n | 'console error'\n | 'action'\n | 'error'\n | 'instrumented method'\n | 'instrumented constructor'\n | 'log'\n | 'nuxt error'\n | 'react error'\n | 'nextjs error'\n | 'vue error'\n | 'angular error'\n | 'view'\n | 'vital'\n): string {\n /**\n * Skip the two internal frames:\n * - SDK API (console.error, ...)\n * - this function\n * in order to keep only the user calls\n */\n const internalFramesToSkip = 2\n const error = new Error(type)\n error.name = 'HandlingStack'\n let formattedStack: string\n\n callMonitored(() => {\n const stackTrace = computeStackTrace(error)\n stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)\n formattedStack = toStackTraceString(stackTrace)\n })\n\n return formattedStack!\n}\n\nexport function toStackTraceString(stack: StackTrace) {\n let result = formatErrorMessage(stack)\n stack.stack.forEach((frame) => {\n const func = frame.func === '?' ? '<anonymous>' : frame.func\n const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(', ')})` : ''\n const line = frame.line ? `:${frame.line}` : ''\n const column = frame.line && frame.column ? `:${frame.column}` : ''\n result += `\\n at ${func!}${args} @ ${frame.url!}${line}${column}`\n })\n return result\n}\n\nexport function formatErrorMessage(stack: StackTrace) {\n return `${stack.name || 'Error'}: ${stack.message!}`\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,oBACd,MAcQ;;;;;;;CAOR,MAAM,uBAAuB;CAC7B,MAAM,QAAQ,IAAI,MAAM,IAAI;CAC5B,MAAM,OAAO;CACb,IAAI;CAEJ,oBAAoB;EAClB,MAAM,aAAa,kBAAkB,KAAK;EAC1C,WAAW,QAAQ,WAAW,MAAM,MAAM,oBAAoB;EAC9D,iBAAiB,mBAAmB,UAAU;CAChD,CAAC;CAED,OAAO;AACT;AAEA,SAAgB,mBAAmB,OAAmB;CACpD,IAAI,SAAS,mBAAmB,KAAK;CACrC,MAAM,MAAM,SAAS,UAAU;EAC7B,MAAM,OAAO,MAAM,SAAS,MAAM,gBAAgB,MAAM;EACxD,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,SAAS,IAAI,IAAI,MAAM,KAAK,KAAK,IAAI,EAAE,KAAK;EAClF,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM,SAAS;EAC7C,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,IAAI,MAAM,WAAW;EACjE,UAAU,UAAU,OAAQ,KAAK,KAAK,MAAM,MAAO,OAAO;CAC5D,CAAC;CACD,OAAO;AACT;AAEA,SAAgB,mBAAmB,OAAmB;CACpD,OAAO,GAAG,MAAM,QAAQ,QAAQ,IAAI,MAAM;AAC5C"}
@@ -0,0 +1,45 @@
1
+ import { requestIdleCallback } from "./requestIdleCallback.mjs";
2
+ import { ONE_SECOND } from "@openobserve/js-core/time";
3
+ //#region src/tools/taskQueue.ts
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
+ * Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is
13
+ * reached. We should not run tasks for too long as it will hurt performance, but we should still
14
+ * run some tasks to avoid postponing them forever.
15
+ *
16
+ * Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.
17
+ */
18
+ const MAX_EXECUTION_TIME_ON_TIMEOUT = 30;
19
+ function createTaskQueue() {
20
+ const pendingTasks = [];
21
+ function run(deadline) {
22
+ let executionTimeRemaining;
23
+ if (!deadline || deadline.didTimeout) {
24
+ const start = performance.now();
25
+ executionTimeRemaining = () => 30 - (performance.now() - start);
26
+ } else executionTimeRemaining = deadline.timeRemaining.bind(deadline);
27
+ while (executionTimeRemaining() > 0 && pendingTasks.length) pendingTasks.shift()();
28
+ if (pendingTasks.length) scheduleNextRun();
29
+ }
30
+ function scheduleNextRun() {
31
+ requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT });
32
+ }
33
+ return {
34
+ push(task) {
35
+ if (pendingTasks.push(task) === 1) scheduleNextRun();
36
+ },
37
+ stop() {
38
+ pendingTasks.length = 0;
39
+ }
40
+ };
41
+ }
42
+ //#endregion
43
+ export { MAX_EXECUTION_TIME_ON_TIMEOUT, createTaskQueue };
44
+
45
+ //# sourceMappingURL=taskQueue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskQueue.mjs","names":[],"sources":["../../src/tools/taskQueue.ts"],"sourcesContent":["import { ONE_SECOND } from '@openobserve/js-core/time'\nimport { requestIdleCallback } from './requestIdleCallback'\n\n/**\n * Maximum delay before starting to execute tasks in the queue. We don't want to wait too long\n * before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose\n * the opportunity to send some data). We also don't want to run tasks too often, as it might hurt\n * performance.\n */\nconst IDLE_CALLBACK_TIMEOUT = ONE_SECOND\n\n/**\n * Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is\n * reached. We should not run tasks for too long as it will hurt performance, but we should still\n * run some tasks to avoid postponing them forever.\n *\n * Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.\n */\nexport const MAX_EXECUTION_TIME_ON_TIMEOUT = 30\n\nexport interface TaskQueue {\n push(task: Task): void\n stop(): void\n}\n\ntype Task = () => void\n\nexport function createTaskQueue(): TaskQueue {\n const pendingTasks: Task[] = []\n\n function run(deadline: IdleDeadline | null) {\n let executionTimeRemaining: () => number\n // `deadline` can be null when `requestIdleCallback` is replaced by a page-injected polyfill\n // (e.g. `setTimeout(cb, 0)` in some WKWebViews) that invokes the callback with no argument.\n if (!deadline || deadline.didTimeout) {\n const start = performance.now()\n executionTimeRemaining = () => MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start)\n } else {\n executionTimeRemaining = deadline.timeRemaining.bind(deadline)\n }\n\n while (executionTimeRemaining() > 0 && pendingTasks.length) {\n pendingTasks.shift()!()\n }\n\n if (pendingTasks.length) {\n scheduleNextRun()\n }\n }\n\n function scheduleNextRun() {\n requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT })\n }\n\n return {\n push(task) {\n if (pendingTasks.push(task) === 1) {\n scheduleNextRun()\n }\n },\n stop() {\n pendingTasks.length = 0\n },\n }\n}\n"],"mappings":";;;;;;;;;AASA,MAAM,wBAAwB;;;;;;;;AAS9B,MAAa,gCAAgC;AAS7C,SAAgB,kBAA6B;CAC3C,MAAM,eAAuB,CAAC;CAE9B,SAAS,IAAI,UAA+B;EAC1C,IAAI;EAGJ,IAAI,CAAC,YAAY,SAAS,YAAY;GACpC,MAAM,QAAQ,YAAY,IAAI;GAC9B,+BAAA,MAAgE,YAAY,IAAI,IAAI;EACtF,OACE,yBAAyB,SAAS,cAAc,KAAK,QAAQ;EAG/D,OAAO,uBAAuB,IAAI,KAAK,aAAa,QAClD,aAAa,MAAM,CAAC,CAAE;EAGxB,IAAI,aAAa,QACf,gBAAgB;CAEpB;CAEA,SAAS,kBAAkB;EACzB,oBAAoB,KAAK,EAAE,SAAS,sBAAsB,CAAC;CAC7D;CAEA,OAAO;EACL,KAAK,MAAM;GACT,IAAI,aAAa,KAAK,IAAI,MAAM,GAC9B,gBAAgB;EAEpB;EACA,OAAO;GACL,aAAa,SAAS;EACxB;CACF;AACF"}
@@ -0,0 +1,20 @@
1
+ import { globalObject } from "./globalObject.mjs";
2
+ import { monitor } from "./monitor.mjs";
3
+ import { getZoneJsOriginalValue } from "./getZoneJsOriginalValue.mjs";
4
+ //#region src/tools/timer.ts
5
+ function setTimeout(callback, delay) {
6
+ return getZoneJsOriginalValue(globalObject, "setTimeout")(monitor(callback), delay);
7
+ }
8
+ function clearTimeout(timeoutId) {
9
+ getZoneJsOriginalValue(globalObject, "clearTimeout")(timeoutId);
10
+ }
11
+ function setInterval(callback, delay) {
12
+ return getZoneJsOriginalValue(globalObject, "setInterval")(monitor(callback), delay);
13
+ }
14
+ function clearInterval(timeoutId) {
15
+ getZoneJsOriginalValue(globalObject, "clearInterval")(timeoutId);
16
+ }
17
+ //#endregion
18
+ export { clearInterval, clearTimeout, setInterval, setTimeout };
19
+
20
+ //# sourceMappingURL=timer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer.mjs","names":[],"sources":["../../src/tools/timer.ts"],"sourcesContent":["import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'\nimport { monitor } from './monitor'\nimport type { GlobalObject } from './globalObject'\nimport { globalObject } from './globalObject'\n\nexport type TimeoutId = ReturnType<GlobalObject['setTimeout']>\n\nexport function setTimeout(callback: () => void, delay?: number): TimeoutId {\n return getZoneJsOriginalValue(globalObject, 'setTimeout')(monitor(callback), delay)\n}\n\nexport function clearTimeout(timeoutId: TimeoutId | undefined) {\n getZoneJsOriginalValue(globalObject, 'clearTimeout')(timeoutId)\n}\n\nexport function setInterval(callback: () => void, delay?: number): TimeoutId {\n return getZoneJsOriginalValue(globalObject, 'setInterval')(monitor(callback), delay)\n}\n\nexport function clearInterval(timeoutId: TimeoutId | undefined) {\n getZoneJsOriginalValue(globalObject, 'clearInterval')(timeoutId)\n}\n"],"mappings":";;;;AAOA,SAAgB,WAAW,UAAsB,OAA2B;CAC1E,OAAO,uBAAuB,cAAc,YAAY,CAAC,CAAC,QAAQ,QAAQ,GAAG,KAAK;AACpF;AAEA,SAAgB,aAAa,WAAkC;CAC7D,uBAAuB,cAAc,cAAc,CAAC,CAAC,SAAS;AAChE;AAEA,SAAgB,YAAY,UAAsB,OAA2B;CAC3E,OAAO,uBAAuB,cAAc,aAAa,CAAC,CAAC,QAAQ,QAAQ,GAAG,KAAK;AACrF;AAEA,SAAgB,cAAc,WAAkC;CAC9D,uBAAuB,cAAc,eAAe,CAAC,CAAC,SAAS;AACjE"}
@@ -0,0 +1,21 @@
1
+ //#region src/tools/utils/arrayUtils.ts
2
+ function removeDuplicates(array) {
3
+ const set = /* @__PURE__ */ new Set();
4
+ array.forEach((item) => set.add(item));
5
+ return Array.from(set);
6
+ }
7
+ function removeItem(array, item) {
8
+ const index = array.indexOf(item);
9
+ if (index >= 0) array.splice(index, 1);
10
+ }
11
+ function isNonEmptyArray(value) {
12
+ return Array.isArray(value) && value.length > 0;
13
+ }
14
+ function mergeArrays(current, next) {
15
+ if (!next?.length) return current;
16
+ return current ? current.concat(next) : next;
17
+ }
18
+ //#endregion
19
+ export { isNonEmptyArray, mergeArrays, removeDuplicates, removeItem };
20
+
21
+ //# sourceMappingURL=arrayUtils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayUtils.mjs","names":[],"sources":["../../../src/tools/utils/arrayUtils.ts"],"sourcesContent":["export function removeDuplicates<T>(array: T[]) {\n const set = new Set<T>()\n array.forEach((item) => set.add(item))\n return Array.from(set)\n}\n\nexport function removeItem<T>(array: T[], item: T) {\n const index = array.indexOf(item)\n if (index >= 0) {\n array.splice(index, 1)\n }\n}\nexport function isNonEmptyArray<T>(value: unknown): value is T[] {\n return Array.isArray(value) && value.length > 0\n}\n\nexport function mergeArrays<T>(current: T[] | undefined, next: T[] | undefined): T[] | undefined {\n if (!next?.length) {\n return current\n }\n return current ? current.concat(next) : next\n}\n"],"mappings":";AAAA,SAAgB,iBAAoB,OAAY;CAC9C,MAAM,sBAAM,IAAI,IAAO;CACvB,MAAM,SAAS,SAAS,IAAI,IAAI,IAAI,CAAC;CACrC,OAAO,MAAM,KAAK,GAAG;AACvB;AAEA,SAAgB,WAAc,OAAY,MAAS;CACjD,MAAM,QAAQ,MAAM,QAAQ,IAAI;CAChC,IAAI,SAAS,GACX,MAAM,OAAO,OAAO,CAAC;AAEzB;AACA,SAAgB,gBAAmB,OAA8B;CAC/D,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS;AAChD;AAEA,SAAgB,YAAe,SAA0B,MAAwC;CAC/F,IAAI,CAAC,MAAM,QACT,OAAO;CAET,OAAO,UAAU,QAAQ,OAAO,IAAI,IAAI;AAC1C"}
@@ -0,0 +1,31 @@
1
+ //#region src/tools/utils/browserDetection.ts
2
+ let Browser = /* @__PURE__ */ function(Browser) {
3
+ Browser[Browser["CHROMIUM"] = 0] = "CHROMIUM";
4
+ Browser[Browser["SAFARI"] = 1] = "SAFARI";
5
+ Browser[Browser["OTHER"] = 2] = "OTHER";
6
+ return Browser;
7
+ }({});
8
+ function isChromium() {
9
+ return detectBrowserCached() === 0;
10
+ }
11
+ function isSafari() {
12
+ return detectBrowserCached() === 1;
13
+ }
14
+ let browserCache;
15
+ function detectBrowserCached() {
16
+ return browserCache ?? (browserCache = detectBrowser());
17
+ }
18
+ function detectBrowser(browserWindow = window) {
19
+ const userAgent = browserWindow.navigator.userAgent;
20
+ if (browserWindow.chrome || /HeadlessChrome/.test(userAgent)) return 0;
21
+ if (browserWindow.navigator.vendor?.indexOf("Apple") === 0 || /safari/i.test(userAgent) && !/chrome|android/i.test(userAgent)) return 1;
22
+ return 2;
23
+ }
24
+ function detectVersion() {
25
+ const match = window.navigator.userAgent.match(/(?:chrome|headlesschrome|version)\/(\d+)/i);
26
+ if (match) return parseInt(match[1], 10);
27
+ }
28
+ //#endregion
29
+ export { Browser, detectBrowser, detectVersion, isChromium, isSafari };
30
+
31
+ //# sourceMappingURL=browserDetection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserDetection.mjs","names":[],"sources":["../../../src/tools/utils/browserDetection.ts"],"sourcesContent":["// Exported only for tests\nexport const enum Browser {\n CHROMIUM,\n SAFARI,\n OTHER,\n}\n\nexport function isChromium() {\n return detectBrowserCached() === Browser.CHROMIUM\n}\n\nexport function isSafari() {\n return detectBrowserCached() === Browser.SAFARI\n}\n\nlet browserCache: Browser | undefined\nfunction detectBrowserCached() {\n return browserCache ?? (browserCache = detectBrowser())\n}\n\n// Exported only for tests\nexport function detectBrowser(browserWindow: Window = window) {\n const userAgent = browserWindow.navigator.userAgent\n if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {\n return Browser.CHROMIUM\n }\n\n if (\n // navigator.vendor is deprecated, but it is the most resilient way we found to detect\n // \"Apple maintained browsers\" (AKA Safari). If one day it gets removed, we still have the\n // useragent test as a semi-working fallback.\n browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||\n (/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))\n ) {\n return Browser.SAFARI\n }\n\n return Browser.OTHER\n}\n\nexport function detectVersion() {\n const userAgent = window.navigator.userAgent\n const match = userAgent.match(/(?:chrome|headlesschrome|version)\\/(\\d+)/i)\n if (match) {\n return parseInt(match[1], 10)\n }\n}\n"],"mappings":";AACA,IAAkB,UAAX,yBAAA,SAAA;CACL,QAAA,QAAA,cAAA,KAAA;CACA,QAAA,QAAA,YAAA,KAAA;CACA,QAAA,QAAA,WAAA,KAAA;;AACF,EAAA,CAAA,CAAA;AAEA,SAAgB,aAAa;CAC3B,OAAO,oBAAoB,MAAA;AAC7B;AAEA,SAAgB,WAAW;CACzB,OAAO,oBAAoB,MAAA;AAC7B;AAEA,IAAI;AACJ,SAAS,sBAAsB;CAC7B,OAAO,iBAAiB,eAAe,cAAc;AACvD;AAGA,SAAgB,cAAc,gBAAwB,QAAQ;CAC5D,MAAM,YAAY,cAAc,UAAU;CAC1C,IAAK,cAAsB,UAAU,iBAAiB,KAAK,SAAS,GAClE,OAAA;CAGF,IAIE,cAAc,UAAU,QAAQ,QAAQ,OAAO,MAAM,KACpD,UAAU,KAAK,SAAS,KAAK,CAAC,kBAAkB,KAAK,SAAS,GAE/D,OAAA;CAGF,OAAA;AACF;AAEA,SAAgB,gBAAgB;CAE9B,MAAM,QADY,OAAO,UAAU,UACX,MAAM,2CAA2C;CACzE,IAAI,OACF,OAAO,SAAS,MAAM,IAAI,EAAE;AAEhC"}
@@ -0,0 +1,23 @@
1
+ //#region src/tools/utils/byteUtils.ts
2
+ const ONE_KIBI_BYTE = 1024;
3
+ const ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE;
4
+ const HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
5
+ function computeBytesCount(candidate) {
6
+ if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) return candidate.length;
7
+ return new TextEncoder().encode(candidate).length;
8
+ }
9
+ function concatBuffers(buffers) {
10
+ if (buffers.length === 1) return buffers[0];
11
+ const length = buffers.reduce((total, buffer) => total + buffer.length, 0);
12
+ const result = new Uint8Array(length);
13
+ let offset = 0;
14
+ for (const buffer of buffers) {
15
+ result.set(buffer, offset);
16
+ offset += buffer.length;
17
+ }
18
+ return result;
19
+ }
20
+ //#endregion
21
+ export { ONE_KIBI_BYTE, ONE_MEBI_BYTE, computeBytesCount, concatBuffers };
22
+
23
+ //# sourceMappingURL=byteUtils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byteUtils.mjs","names":[],"sources":["../../../src/tools/utils/byteUtils.ts"],"sourcesContent":["export const ONE_KIBI_BYTE = 1024\nexport const ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE\n\n// eslint-disable-next-line no-control-regex\nconst HAS_MULTI_BYTES_CHARACTERS = /[^\\u0000-\\u007F]/\n\nexport interface Uint8ArrayBuffer extends Uint8Array {\n readonly buffer: ArrayBuffer\n\n subarray(begin?: number, end?: number): Uint8ArrayBuffer\n}\n\nexport function computeBytesCount(candidate: string): number {\n // Accurate bytes count computations can degrade performances when there is a lot of events to process\n if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {\n return candidate.length\n }\n\n return new TextEncoder().encode(candidate).length\n}\n\nexport function concatBuffers(buffers: Uint8ArrayBuffer[]): Uint8ArrayBuffer {\n // Optimization: if there is a single buffer, no need to copy it\n if (buffers.length === 1) {\n return buffers[0]\n }\n\n const length = buffers.reduce((total, buffer) => total + buffer.length, 0)\n const result: Uint8ArrayBuffer = new Uint8Array(length)\n let offset = 0\n for (const buffer of buffers) {\n result.set(buffer, offset)\n offset += buffer.length\n }\n return result\n}\n"],"mappings":";AAAA,MAAa,gBAAgB;AAC7B,MAAa,gBAAgB,OAAO;AAGpC,MAAM,6BAA6B;AAQnC,SAAgB,kBAAkB,WAA2B;CAE3D,IAAI,CAAC,2BAA2B,KAAK,SAAS,GAC5C,OAAO,UAAU;CAGnB,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC;AAC7C;AAEA,SAAgB,cAAc,SAA+C;CAE3E,IAAI,QAAQ,WAAW,GACrB,OAAO,QAAQ;CAGjB,MAAM,SAAS,QAAQ,QAAQ,OAAO,WAAW,QAAQ,OAAO,QAAQ,CAAC;CACzE,MAAM,SAA2B,IAAI,WAAW,MAAM;CACtD,IAAI,SAAS;CACb,KAAK,MAAM,UAAU,SAAS;EAC5B,OAAO,IAAI,QAAQ,MAAM;EACzB,UAAU,OAAO;CACnB;CACA,OAAO;AACT"}
@@ -0,0 +1,35 @@
1
+ import { clearTimeout, setTimeout } from "../timer.mjs";
2
+ //#region src/tools/utils/functionUtils.ts
3
+ function throttle(fn, wait, options) {
4
+ const needLeadingExecution = options?.leading !== void 0 ? options.leading : true;
5
+ const needTrailingExecution = options?.trailing !== void 0 ? options.trailing : true;
6
+ let inWaitPeriod = false;
7
+ let pendingExecutionWithParameters;
8
+ let pendingTimeoutId;
9
+ return {
10
+ throttled: (...parameters) => {
11
+ if (inWaitPeriod) {
12
+ pendingExecutionWithParameters = parameters;
13
+ return;
14
+ }
15
+ if (needLeadingExecution) fn(...parameters);
16
+ else pendingExecutionWithParameters = parameters;
17
+ inWaitPeriod = true;
18
+ pendingTimeoutId = setTimeout(() => {
19
+ if (needTrailingExecution && pendingExecutionWithParameters) fn(...pendingExecutionWithParameters);
20
+ inWaitPeriod = false;
21
+ pendingExecutionWithParameters = void 0;
22
+ }, wait);
23
+ },
24
+ cancel: () => {
25
+ clearTimeout(pendingTimeoutId);
26
+ inWaitPeriod = false;
27
+ pendingExecutionWithParameters = void 0;
28
+ }
29
+ };
30
+ }
31
+ function noop() {}
32
+ //#endregion
33
+ export { noop, throttle };
34
+
35
+ //# sourceMappingURL=functionUtils.mjs.map