@newrelic/browser-agent 0.0.9 → 0.1.230

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 (743) hide show
  1. package/README.md +113 -197
  2. package/dist/cjs/cdn/lite.js +14 -0
  3. package/dist/cjs/cdn/polyfills/lite.js +4 -0
  4. package/dist/cjs/cdn/polyfills/pro.js +4 -0
  5. package/dist/cjs/cdn/polyfills/spa.js +4 -0
  6. package/dist/cjs/cdn/polyfills.js +14 -0
  7. package/dist/cjs/cdn/pro.js +19 -0
  8. package/dist/cjs/cdn/spa.js +19 -0
  9. package/dist/cjs/cdn/worker.js +16 -0
  10. package/dist/cjs/common/aggregate/aggregator.js +168 -0
  11. package/dist/cjs/common/browser-version/firefox-version.js +17 -0
  12. package/dist/cjs/common/browser-version/ios-version.js +18 -0
  13. package/dist/cjs/common/config/config.js +76 -0
  14. package/dist/cjs/common/config/state/configurable.js +33 -0
  15. package/dist/cjs/common/config/state/info.js +50 -0
  16. package/dist/cjs/common/config/state/init.js +86 -0
  17. package/dist/cjs/common/config/state/loader-config.js +28 -0
  18. package/dist/cjs/common/config/state/originals.js +9 -0
  19. package/dist/cjs/common/config/state/runtime.js +51 -0
  20. package/dist/cjs/common/constants/environment-variables.js +20 -0
  21. package/dist/cjs/common/context/shared-context.js +26 -0
  22. package/dist/cjs/common/deny-list/deny-list.js +108 -0
  23. package/dist/cjs/common/drain/drain.js +132 -0
  24. package/dist/cjs/common/event-emitter/contextual-ee.js +149 -0
  25. package/dist/cjs/common/event-emitter/handle.js +24 -0
  26. package/dist/cjs/common/event-emitter/register-handler.js +24 -0
  27. package/dist/cjs/common/event-listener/event-listener-opts.js +48 -0
  28. package/dist/cjs/common/harvest/harvest-scheduler.js +112 -0
  29. package/dist/cjs/common/harvest/harvest.js +247 -0
  30. package/dist/cjs/common/ids/id.js +30 -0
  31. package/dist/cjs/common/ids/unique-id.js +84 -0
  32. package/dist/cjs/common/metrics/framework-detection.js +72 -0
  33. package/dist/cjs/common/metrics/paint-metrics.js +13 -0
  34. package/dist/cjs/common/serialize/bel-serializer.js +89 -0
  35. package/dist/cjs/common/timing/nav-timing.js +77 -0
  36. package/dist/cjs/common/timing/now.js +15 -0
  37. package/dist/cjs/common/unload/eol.js +69 -0
  38. package/dist/cjs/common/url/clean-url.js +16 -0
  39. package/dist/cjs/common/url/encode.js +79 -0
  40. package/dist/cjs/common/url/location.js +14 -0
  41. package/dist/cjs/common/url/parse-url.js +66 -0
  42. package/dist/cjs/common/url/protocol.js +25 -0
  43. package/dist/cjs/common/util/console.js +17 -0
  44. package/dist/cjs/common/util/data-size.js +25 -0
  45. package/dist/cjs/common/util/feature-flags.js +42 -0
  46. package/dist/cjs/common/util/get-or-set.js +39 -0
  47. package/dist/cjs/common/util/global-scope.js +56 -0
  48. package/dist/cjs/common/util/map-own.js +31 -0
  49. package/dist/cjs/common/util/map-own.test.js +49 -0
  50. package/dist/cjs/common/util/obfuscate.js +76 -0
  51. package/dist/cjs/common/util/s-hash.js +19 -0
  52. package/dist/cjs/common/util/single.js +23 -0
  53. package/dist/cjs/common/util/stringify.js +47 -0
  54. package/dist/cjs/common/util/submit-data.js +107 -0
  55. package/dist/cjs/common/util/traverse.js +41 -0
  56. package/dist/cjs/common/util/user-agent.js +57 -0
  57. package/dist/cjs/common/window/load.js +19 -0
  58. package/dist/cjs/common/window/nreum.js +107 -0
  59. package/dist/cjs/common/window/page-visibility.js +29 -0
  60. package/dist/cjs/common/window/session-storage.js +87 -0
  61. package/dist/cjs/common/window/supports-performance-observer.js +15 -0
  62. package/dist/cjs/common/wrap/index.js +75 -0
  63. package/dist/cjs/common/wrap/wrap-console.js +54 -0
  64. package/dist/cjs/common/wrap/wrap-events.js +108 -0
  65. package/dist/cjs/common/wrap/wrap-fetch.js +112 -0
  66. package/dist/cjs/common/wrap/wrap-function.js +255 -0
  67. package/dist/cjs/common/wrap/wrap-history.js +56 -0
  68. package/dist/cjs/common/wrap/wrap-jsonp.js +129 -0
  69. package/dist/cjs/common/wrap/wrap-mutation.js +61 -0
  70. package/dist/cjs/common/wrap/wrap-promise.js +163 -0
  71. package/dist/cjs/common/wrap/wrap-raf.js +55 -0
  72. package/dist/cjs/common/wrap/wrap-timer.js +70 -0
  73. package/dist/cjs/common/wrap/wrap-xhr.js +206 -0
  74. package/dist/cjs/features/ajax/aggregate/index.js +226 -0
  75. package/dist/cjs/features/ajax/constants.js +9 -0
  76. package/dist/cjs/features/ajax/index.js +12 -0
  77. package/dist/cjs/features/ajax/instrument/distributed-tracing.js +145 -0
  78. package/dist/cjs/features/ajax/instrument/index.js +339 -0
  79. package/dist/cjs/features/ajax/instrument/response-size.js +26 -0
  80. package/dist/cjs/features/jserrors/aggregate/canonical-function-name.js +18 -0
  81. package/dist/cjs/features/jserrors/aggregate/canonical-function-name.test.js +31 -0
  82. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.js +215 -0
  83. package/dist/cjs/features/jserrors/aggregate/compute-stack-trace.test.js +257 -0
  84. package/dist/cjs/features/jserrors/aggregate/format-stack-trace.js +36 -0
  85. package/dist/cjs/features/jserrors/aggregate/format-stack-trace.test.js +40 -0
  86. package/dist/cjs/features/jserrors/aggregate/index.js +288 -0
  87. package/dist/cjs/features/jserrors/aggregate/string-hash-code.js +23 -0
  88. package/dist/cjs/features/jserrors/aggregate/string-hash-code.test.js +27 -0
  89. package/dist/cjs/features/jserrors/constants.js +11 -0
  90. package/dist/cjs/features/jserrors/index.js +12 -0
  91. package/dist/cjs/features/jserrors/instrument/debug.js +40 -0
  92. package/dist/cjs/features/jserrors/instrument/index.js +155 -0
  93. package/dist/cjs/features/metrics/aggregate/index.js +147 -0
  94. package/dist/cjs/features/metrics/constants.js +17 -0
  95. package/dist/cjs/features/metrics/index.js +12 -0
  96. package/dist/cjs/features/metrics/instrument/index.js +46 -0
  97. package/dist/cjs/features/metrics/instrument/workers-helper.js +124 -0
  98. package/dist/cjs/features/page_action/aggregate/index.js +120 -0
  99. package/dist/cjs/features/page_action/constants.js +9 -0
  100. package/dist/cjs/features/page_action/index.js +12 -0
  101. package/dist/cjs/features/page_action/instrument/index.js +22 -0
  102. package/dist/cjs/features/page_view_event/aggregate/index.js +137 -0
  103. package/dist/cjs/features/page_view_event/aggregate/initialized-features.js +39 -0
  104. package/dist/cjs/features/page_view_event/constants.js +15 -0
  105. package/dist/cjs/features/page_view_event/index.js +12 -0
  106. package/dist/cjs/features/page_view_event/instrument/index.js +39 -0
  107. package/dist/cjs/features/page_view_timing/aggregate/index.js +284 -0
  108. package/dist/cjs/features/page_view_timing/constants.js +9 -0
  109. package/dist/cjs/features/page_view_timing/first-paint.js +50 -0
  110. package/dist/cjs/features/page_view_timing/index.js +12 -0
  111. package/dist/cjs/features/page_view_timing/instrument/index.js +37 -0
  112. package/dist/cjs/features/page_view_timing/long-tasks.js +75 -0
  113. package/dist/cjs/features/session_trace/aggregate/index.js +415 -0
  114. package/dist/cjs/features/session_trace/constants.js +32 -0
  115. package/dist/cjs/features/session_trace/index.js +12 -0
  116. package/dist/cjs/features/session_trace/instrument/index.js +134 -0
  117. package/dist/cjs/features/spa/aggregate/index.js +684 -0
  118. package/dist/cjs/features/spa/aggregate/interaction-node.js +84 -0
  119. package/dist/cjs/features/spa/aggregate/interaction-node.test.js +16 -0
  120. package/dist/cjs/features/spa/aggregate/interaction.js +98 -0
  121. package/dist/cjs/features/spa/aggregate/serializer.js +147 -0
  122. package/dist/cjs/features/spa/constants.js +53 -0
  123. package/dist/cjs/features/spa/index.js +12 -0
  124. package/dist/cjs/features/spa/instrument/index.js +115 -0
  125. package/dist/cjs/features/utils/aggregate-base.js +13 -0
  126. package/dist/cjs/features/utils/feature-base.js +58 -0
  127. package/dist/cjs/features/utils/handler-cache.js +64 -0
  128. package/dist/cjs/features/utils/instrument-base.js +72 -0
  129. package/dist/cjs/features/utils/lazy-loader.js +44 -0
  130. package/dist/cjs/index.js +81 -58
  131. package/dist/cjs/loaders/agent.js +87 -0
  132. package/dist/cjs/loaders/api/api.js +174 -0
  133. package/dist/cjs/loaders/api/apiAsync.js +94 -0
  134. package/dist/cjs/loaders/browser-agent.js +29 -0
  135. package/dist/cjs/loaders/configure/configure.js +53 -0
  136. package/dist/cjs/loaders/features/enabled-features.js +19 -0
  137. package/dist/cjs/loaders/features/featureDependencies.js +32 -0
  138. package/dist/cjs/loaders/features/features.js +33 -0
  139. package/dist/cjs/loaders/micro-agent.js +98 -0
  140. package/dist/cjs/loaders/worker-agent.js +24 -0
  141. package/dist/esm/cdn/lite.js +12 -0
  142. package/dist/esm/cdn/polyfills/lite.js +7 -0
  143. package/dist/esm/cdn/polyfills/pro.js +7 -0
  144. package/dist/esm/cdn/polyfills/spa.js +7 -0
  145. package/dist/esm/cdn/polyfills.js +17 -0
  146. package/dist/esm/cdn/pro.js +17 -0
  147. package/dist/esm/cdn/spa.js +17 -0
  148. package/dist/esm/cdn/worker.js +14 -0
  149. package/dist/esm/common/aggregate/aggregator.js +161 -0
  150. package/dist/esm/common/browser-version/firefox-version.js +10 -0
  151. package/dist/esm/common/browser-version/ios-version.js +10 -0
  152. package/dist/esm/common/config/config.js +11 -0
  153. package/dist/esm/common/config/state/configurable.js +26 -0
  154. package/dist/esm/common/config/state/info.js +42 -0
  155. package/dist/esm/common/config/state/init.js +78 -0
  156. package/dist/esm/common/config/state/loader-config.js +21 -0
  157. package/dist/esm/common/config/state/originals.js +2 -0
  158. package/dist/esm/common/config/state/runtime.js +42 -0
  159. package/dist/esm/common/constants/environment-variables.js +11 -0
  160. package/dist/esm/common/context/shared-context.js +19 -0
  161. package/dist/esm/common/deny-list/deny-list.js +101 -0
  162. package/dist/esm/common/drain/drain.js +125 -0
  163. package/dist/esm/common/event-emitter/contextual-ee.js +142 -0
  164. package/dist/esm/common/event-emitter/handle.js +16 -0
  165. package/dist/esm/common/event-emitter/register-handler.js +19 -0
  166. package/dist/esm/common/event-listener/event-listener-opts.js +41 -0
  167. package/dist/esm/common/harvest/harvest-scheduler.js +106 -0
  168. package/dist/esm/common/harvest/harvest.js +239 -0
  169. package/dist/esm/common/ids/id.js +23 -0
  170. package/dist/esm/common/ids/unique-id.js +75 -0
  171. package/dist/esm/common/metrics/framework-detection.js +66 -0
  172. package/dist/esm/common/metrics/paint-metrics.js +6 -0
  173. package/dist/esm/common/serialize/bel-serializer.js +80 -0
  174. package/dist/esm/common/timing/nav-timing.js +67 -0
  175. package/dist/esm/common/timing/now.js +9 -0
  176. package/dist/esm/common/unload/eol.js +62 -0
  177. package/dist/esm/common/url/clean-url.js +10 -0
  178. package/dist/esm/common/url/encode.js +71 -0
  179. package/dist/esm/common/url/location.js +8 -0
  180. package/dist/esm/common/url/parse-url.js +60 -0
  181. package/dist/esm/common/url/protocol.js +17 -0
  182. package/dist/esm/common/util/console.js +11 -0
  183. package/dist/esm/common/util/data-size.js +19 -0
  184. package/dist/esm/common/util/feature-flags.js +33 -0
  185. package/dist/esm/common/util/get-or-set.js +33 -0
  186. package/dist/esm/common/util/global-scope.js +44 -0
  187. package/dist/esm/common/util/map-own.js +24 -0
  188. package/dist/esm/common/util/map-own.test.js +47 -0
  189. package/dist/esm/common/util/obfuscate.js +67 -0
  190. package/dist/esm/common/util/s-hash.js +13 -0
  191. package/dist/esm/common/util/single.js +16 -0
  192. package/dist/esm/common/util/stringify.js +42 -0
  193. package/dist/esm/common/util/submit-data.js +99 -0
  194. package/dist/esm/common/util/traverse.js +35 -0
  195. package/dist/esm/common/util/user-agent.js +48 -0
  196. package/dist/esm/common/window/load.js +12 -0
  197. package/dist/esm/common/window/nreum.js +91 -0
  198. package/dist/esm/common/window/page-visibility.js +24 -0
  199. package/dist/esm/common/window/session-storage.js +77 -0
  200. package/dist/esm/common/window/supports-performance-observer.js +9 -0
  201. package/dist/esm/common/wrap/index.js +15 -0
  202. package/dist/esm/common/wrap/wrap-console.js +46 -0
  203. package/dist/esm/common/wrap/wrap-events.js +100 -0
  204. package/dist/esm/common/wrap/wrap-fetch.js +103 -0
  205. package/dist/esm/common/wrap/wrap-function.js +244 -0
  206. package/dist/esm/common/wrap/wrap-history.js +48 -0
  207. package/dist/esm/common/wrap/wrap-jsonp.js +122 -0
  208. package/dist/esm/common/wrap/wrap-mutation.js +54 -0
  209. package/dist/esm/common/wrap/wrap-promise.js +156 -0
  210. package/dist/esm/common/wrap/wrap-raf.js +48 -0
  211. package/dist/esm/common/wrap/wrap-timer.js +63 -0
  212. package/dist/esm/common/wrap/wrap-xhr.js +199 -0
  213. package/dist/esm/features/ajax/aggregate/index.js +218 -0
  214. package/dist/esm/features/ajax/constants.js +2 -0
  215. package/dist/esm/features/ajax/index.js +1 -0
  216. package/dist/esm/features/ajax/instrument/distributed-tracing.js +137 -0
  217. package/dist/esm/features/ajax/instrument/index.js +331 -0
  218. package/dist/esm/features/ajax/instrument/response-size.js +19 -0
  219. package/dist/esm/features/jserrors/aggregate/canonical-function-name.js +12 -0
  220. package/dist/esm/features/jserrors/aggregate/canonical-function-name.test.js +29 -0
  221. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.js +208 -0
  222. package/dist/esm/features/jserrors/aggregate/compute-stack-trace.test.js +255 -0
  223. package/dist/esm/features/jserrors/aggregate/format-stack-trace.js +29 -0
  224. package/dist/esm/features/jserrors/aggregate/format-stack-trace.test.js +38 -0
  225. package/dist/esm/features/jserrors/aggregate/index.js +281 -0
  226. package/dist/esm/features/jserrors/aggregate/string-hash-code.js +17 -0
  227. package/dist/esm/features/jserrors/aggregate/string-hash-code.test.js +25 -0
  228. package/dist/esm/features/jserrors/constants.js +3 -0
  229. package/dist/esm/features/jserrors/index.js +1 -0
  230. package/dist/esm/features/jserrors/instrument/debug.js +38 -0
  231. package/dist/esm/features/jserrors/instrument/index.js +147 -0
  232. package/dist/esm/features/metrics/aggregate/index.js +140 -0
  233. package/dist/esm/features/metrics/constants.js +6 -0
  234. package/dist/esm/features/metrics/index.js +1 -0
  235. package/dist/esm/features/metrics/instrument/index.js +39 -0
  236. package/dist/esm/features/metrics/instrument/workers-helper.js +119 -0
  237. package/dist/esm/features/page_action/aggregate/index.js +113 -0
  238. package/dist/esm/features/page_action/constants.js +2 -0
  239. package/dist/esm/features/page_action/index.js +1 -0
  240. package/dist/esm/features/page_action/instrument/index.js +15 -0
  241. package/dist/esm/features/page_view_event/aggregate/index.js +128 -0
  242. package/dist/esm/features/page_view_event/aggregate/initialized-features.js +34 -0
  243. package/dist/esm/features/page_view_event/constants.js +5 -0
  244. package/dist/esm/features/page_view_event/index.js +1 -0
  245. package/dist/esm/features/page_view_event/instrument/index.js +30 -0
  246. package/dist/esm/features/page_view_timing/aggregate/index.js +277 -0
  247. package/dist/esm/features/page_view_timing/constants.js +2 -0
  248. package/dist/esm/features/page_view_timing/first-paint.js +43 -0
  249. package/dist/esm/features/page_view_timing/index.js +1 -0
  250. package/dist/esm/features/page_view_timing/instrument/index.js +29 -0
  251. package/dist/esm/features/page_view_timing/long-tasks.js +69 -0
  252. package/dist/esm/features/session_trace/aggregate/index.js +406 -0
  253. package/dist/esm/features/session_trace/constants.js +14 -0
  254. package/dist/esm/features/session_trace/index.js +1 -0
  255. package/dist/esm/features/session_trace/instrument/index.js +124 -0
  256. package/dist/esm/features/spa/aggregate/index.js +674 -0
  257. package/dist/esm/features/spa/aggregate/interaction-node.js +78 -0
  258. package/dist/esm/features/spa/aggregate/interaction-node.test.js +14 -0
  259. package/dist/esm/features/spa/aggregate/interaction.js +92 -0
  260. package/dist/esm/features/spa/aggregate/serializer.js +139 -0
  261. package/dist/esm/features/spa/constants.js +25 -0
  262. package/dist/esm/features/spa/index.js +1 -0
  263. package/dist/esm/features/spa/instrument/index.js +105 -0
  264. package/dist/esm/features/utils/aggregate-base.js +6 -0
  265. package/dist/esm/features/utils/feature-base.js +51 -0
  266. package/dist/esm/features/utils/handler-cache.js +57 -0
  267. package/dist/esm/features/utils/instrument-base.js +70 -0
  268. package/dist/esm/features/utils/lazy-loader.js +37 -0
  269. package/dist/esm/index.js +15 -0
  270. package/dist/esm/loaders/agent.js +78 -0
  271. package/dist/esm/loaders/api/api.js +168 -0
  272. package/dist/esm/loaders/api/apiAsync.js +88 -0
  273. package/dist/esm/loaders/browser-agent.js +23 -0
  274. package/dist/esm/loaders/configure/configure.js +47 -0
  275. package/dist/esm/loaders/features/enabled-features.js +13 -0
  276. package/dist/esm/loaders/features/featureDependencies.js +25 -0
  277. package/dist/esm/loaders/features/features.js +25 -0
  278. package/dist/esm/loaders/micro-agent.js +91 -0
  279. package/dist/esm/loaders/worker-agent.js +18 -0
  280. package/dist/types/cdn/lite.d.ts +2 -0
  281. package/dist/types/cdn/lite.d.ts.map +1 -0
  282. package/dist/types/cdn/polyfills/lite.d.ts +2 -0
  283. package/dist/types/cdn/polyfills/lite.d.ts.map +1 -0
  284. package/dist/types/cdn/polyfills/pro.d.ts +2 -0
  285. package/dist/types/cdn/polyfills/pro.d.ts.map +1 -0
  286. package/dist/types/cdn/polyfills/spa.d.ts +2 -0
  287. package/dist/types/cdn/polyfills/spa.d.ts.map +1 -0
  288. package/dist/types/cdn/polyfills.d.ts +2 -0
  289. package/dist/types/cdn/polyfills.d.ts.map +1 -0
  290. package/dist/types/cdn/pro.d.ts +2 -0
  291. package/dist/types/cdn/pro.d.ts.map +1 -0
  292. package/dist/types/cdn/spa.d.ts +2 -0
  293. package/dist/types/cdn/spa.d.ts.map +1 -0
  294. package/dist/types/cdn/worker.d.ts +2 -0
  295. package/dist/types/cdn/worker.d.ts.map +1 -0
  296. package/dist/types/common/aggregate/aggregator.d.ts +11 -0
  297. package/dist/types/common/aggregate/aggregator.d.ts.map +1 -0
  298. package/dist/types/common/browser-version/firefox-version.d.ts +2 -0
  299. package/dist/types/common/browser-version/firefox-version.d.ts.map +1 -0
  300. package/dist/types/common/browser-version/ios-version.d.ts +3 -0
  301. package/dist/types/common/browser-version/ios-version.d.ts.map +1 -0
  302. package/dist/types/common/config/config.d.ts +13 -0
  303. package/dist/types/common/config/config.d.ts.map +1 -0
  304. package/dist/types/common/config/state/configurable.d.ts +4 -0
  305. package/dist/types/common/config/state/configurable.d.ts.map +1 -0
  306. package/dist/types/common/config/state/info.d.ts +4 -0
  307. package/dist/types/common/config/state/info.d.ts.map +1 -0
  308. package/dist/types/common/config/state/init.d.ts +4 -0
  309. package/dist/types/common/config/state/init.d.ts.map +1 -0
  310. package/dist/types/common/config/state/loader-config.d.ts +3 -0
  311. package/dist/types/common/config/state/loader-config.d.ts.map +1 -0
  312. package/dist/types/common/config/state/originals.d.ts +2 -0
  313. package/dist/types/common/config/state/originals.d.ts.map +1 -0
  314. package/dist/types/common/config/state/runtime.d.ts +3 -0
  315. package/dist/types/common/config/state/runtime.d.ts.map +1 -0
  316. package/dist/types/common/constants/environment-variables.d.ts +4 -0
  317. package/dist/types/common/constants/environment-variables.d.ts.map +1 -0
  318. package/dist/types/common/context/shared-context.d.ts +5 -0
  319. package/dist/types/common/context/shared-context.d.ts.map +1 -0
  320. package/dist/types/common/deny-list/deny-list.d.ts +12 -0
  321. package/dist/types/common/deny-list/deny-list.d.ts.map +1 -0
  322. package/dist/types/common/drain/drain.d.ts +17 -0
  323. package/dist/types/common/drain/drain.d.ts.map +1 -0
  324. package/dist/types/common/event-emitter/contextual-ee.d.ts +4 -0
  325. package/dist/types/common/event-emitter/contextual-ee.d.ts.map +1 -0
  326. package/dist/types/common/event-emitter/handle.d.ts +3 -0
  327. package/dist/types/common/event-emitter/handle.d.ts.map +1 -0
  328. package/dist/types/common/event-emitter/register-handler.d.ts +8 -0
  329. package/dist/types/common/event-emitter/register-handler.d.ts.map +1 -0
  330. package/dist/types/common/event-listener/event-listener-opts.d.ts +10 -0
  331. package/dist/types/common/event-listener/event-listener-opts.d.ts.map +1 -0
  332. package/dist/types/common/harvest/harvest-scheduler.d.ts +21 -0
  333. package/dist/types/common/harvest/harvest-scheduler.d.ts.map +1 -0
  334. package/dist/types/common/harvest/harvest.d.ts +58 -0
  335. package/dist/types/common/harvest/harvest.d.ts.map +1 -0
  336. package/dist/types/common/ids/id.d.ts +2 -0
  337. package/dist/types/common/ids/id.d.ts.map +1 -0
  338. package/dist/types/common/ids/unique-id.d.ts +5 -0
  339. package/dist/types/common/ids/unique-id.d.ts.map +1 -0
  340. package/dist/types/common/metrics/framework-detection.d.ts +2 -0
  341. package/dist/types/common/metrics/framework-detection.d.ts.map +1 -0
  342. package/dist/types/common/metrics/paint-metrics.d.ts +2 -0
  343. package/dist/types/common/metrics/paint-metrics.d.ts.map +1 -0
  344. package/dist/types/common/serialize/bel-serializer.d.ts +5 -0
  345. package/dist/types/common/serialize/bel-serializer.d.ts.map +1 -0
  346. package/dist/types/common/timing/nav-timing.d.ts +5 -0
  347. package/dist/types/common/timing/nav-timing.d.ts.map +1 -0
  348. package/dist/types/common/timing/now.d.ts +2 -0
  349. package/dist/types/common/timing/now.d.ts.map +1 -0
  350. package/dist/types/common/unload/eol.d.ts +8 -0
  351. package/dist/types/common/unload/eol.d.ts.map +1 -0
  352. package/dist/types/common/url/clean-url.d.ts +2 -0
  353. package/dist/types/common/url/clean-url.d.ts.map +1 -0
  354. package/dist/types/common/url/encode.d.ts +5 -0
  355. package/dist/types/common/url/encode.d.ts.map +1 -0
  356. package/dist/types/common/url/location.d.ts +2 -0
  357. package/dist/types/common/url/location.d.ts.map +1 -0
  358. package/dist/types/common/url/parse-url.d.ts +2 -0
  359. package/dist/types/common/url/parse-url.d.ts.map +1 -0
  360. package/dist/types/common/url/protocol.d.ts +7 -0
  361. package/dist/types/common/url/protocol.d.ts.map +1 -0
  362. package/dist/types/common/util/console.d.ts +8 -0
  363. package/dist/types/common/util/console.d.ts.map +1 -0
  364. package/dist/types/common/util/data-size.d.ts +2 -0
  365. package/dist/types/common/util/data-size.d.ts.map +1 -0
  366. package/dist/types/common/util/feature-flags.d.ts +3 -0
  367. package/dist/types/common/util/feature-flags.d.ts.map +1 -0
  368. package/dist/types/common/util/get-or-set.d.ts +2 -0
  369. package/dist/types/common/util/get-or-set.d.ts.map +1 -0
  370. package/dist/types/common/util/global-scope.d.ts +13 -0
  371. package/dist/types/common/util/global-scope.d.ts.map +1 -0
  372. package/dist/types/common/util/map-own.d.ts +3 -0
  373. package/dist/types/common/util/map-own.d.ts.map +1 -0
  374. package/dist/types/common/util/obfuscate.d.ts +8 -0
  375. package/dist/types/common/util/obfuscate.d.ts.map +1 -0
  376. package/dist/types/common/util/s-hash.d.ts +2 -0
  377. package/dist/types/common/util/s-hash.d.ts.map +1 -0
  378. package/dist/types/common/util/single.d.ts +2 -0
  379. package/dist/types/common/util/single.d.ts.map +1 -0
  380. package/dist/types/common/util/stringify.d.ts +8 -0
  381. package/dist/types/common/util/stringify.d.ts.map +1 -0
  382. package/dist/types/common/util/submit-data.d.ts +35 -0
  383. package/dist/types/common/util/submit-data.d.ts.map +1 -0
  384. package/dist/types/common/util/traverse.d.ts +2 -0
  385. package/dist/types/common/util/traverse.d.ts.map +1 -0
  386. package/dist/types/common/util/user-agent.d.ts +5 -0
  387. package/dist/types/common/util/user-agent.d.ts.map +1 -0
  388. package/dist/types/common/window/load.d.ts +3 -0
  389. package/dist/types/common/window/load.d.ts.map +1 -0
  390. package/dist/types/common/window/nreum.d.ts +14 -0
  391. package/dist/types/common/window/nreum.d.ts.map +1 -0
  392. package/dist/types/common/window/page-visibility.d.ts +7 -0
  393. package/dist/types/common/window/page-visibility.d.ts.map +1 -0
  394. package/dist/types/common/window/session-storage.d.ts +18 -0
  395. package/dist/types/common/window/session-storage.d.ts.map +1 -0
  396. package/dist/types/common/window/supports-performance-observer.d.ts +2 -0
  397. package/dist/types/common/window/supports-performance-observer.d.ts.map +1 -0
  398. package/dist/types/common/wrap/index.d.ts +12 -0
  399. package/dist/types/common/wrap/index.d.ts.map +1 -0
  400. package/dist/types/common/wrap/wrap-console.d.ts +16 -0
  401. package/dist/types/common/wrap/wrap-console.d.ts.map +1 -0
  402. package/dist/types/common/wrap/wrap-events.d.ts +17 -0
  403. package/dist/types/common/wrap/wrap-events.d.ts.map +1 -0
  404. package/dist/types/common/wrap/wrap-fetch.d.ts +18 -0
  405. package/dist/types/common/wrap/wrap-fetch.d.ts.map +1 -0
  406. package/dist/types/common/wrap/wrap-function.d.ts +28 -0
  407. package/dist/types/common/wrap/wrap-function.d.ts.map +1 -0
  408. package/dist/types/common/wrap/wrap-history.d.ts +16 -0
  409. package/dist/types/common/wrap/wrap-history.d.ts.map +1 -0
  410. package/dist/types/common/wrap/wrap-jsonp.d.ts +16 -0
  411. package/dist/types/common/wrap/wrap-jsonp.d.ts.map +1 -0
  412. package/dist/types/common/wrap/wrap-mutation.d.ts +16 -0
  413. package/dist/types/common/wrap/wrap-mutation.d.ts.map +1 -0
  414. package/dist/types/common/wrap/wrap-promise.d.ts +17 -0
  415. package/dist/types/common/wrap/wrap-promise.d.ts.map +1 -0
  416. package/dist/types/common/wrap/wrap-raf.d.ts +16 -0
  417. package/dist/types/common/wrap/wrap-raf.d.ts.map +1 -0
  418. package/dist/types/common/wrap/wrap-timer.d.ts +17 -0
  419. package/dist/types/common/wrap/wrap-timer.d.ts.map +1 -0
  420. package/dist/types/common/wrap/wrap-xhr.d.ts +16 -0
  421. package/dist/types/common/wrap/wrap-xhr.d.ts.map +1 -0
  422. package/dist/types/features/ajax/aggregate/index.d.ts +16 -0
  423. package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -0
  424. package/dist/types/features/ajax/constants.d.ts +2 -0
  425. package/dist/types/features/ajax/constants.d.ts.map +1 -0
  426. package/dist/types/features/ajax/index.d.ts +2 -0
  427. package/dist/types/features/ajax/index.d.ts.map +1 -0
  428. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts +19 -0
  429. package/dist/types/features/ajax/instrument/distributed-tracing.d.ts.map +1 -0
  430. package/dist/types/features/ajax/instrument/index.d.ts +9 -0
  431. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -0
  432. package/dist/types/features/ajax/instrument/response-size.d.ts +2 -0
  433. package/dist/types/features/ajax/instrument/response-size.d.ts.map +1 -0
  434. package/dist/types/features/jserrors/aggregate/canonical-function-name.d.ts +2 -0
  435. package/dist/types/features/jserrors/aggregate/canonical-function-name.d.ts.map +1 -0
  436. package/dist/types/features/jserrors/aggregate/compute-stack-trace.d.ts +22 -0
  437. package/dist/types/features/jserrors/aggregate/compute-stack-trace.d.ts.map +1 -0
  438. package/dist/types/features/jserrors/aggregate/format-stack-trace.d.ts +3 -0
  439. package/dist/types/features/jserrors/aggregate/format-stack-trace.d.ts.map +1 -0
  440. package/dist/types/features/jserrors/aggregate/index.d.ts +24 -0
  441. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -0
  442. package/dist/types/features/jserrors/aggregate/string-hash-code.d.ts +2 -0
  443. package/dist/types/features/jserrors/aggregate/string-hash-code.d.ts.map +1 -0
  444. package/dist/types/features/jserrors/constants.d.ts +3 -0
  445. package/dist/types/features/jserrors/constants.d.ts.map +1 -0
  446. package/dist/types/features/jserrors/index.d.ts +2 -0
  447. package/dist/types/features/jserrors/index.d.ts.map +1 -0
  448. package/dist/types/features/jserrors/instrument/debug.d.ts +2 -0
  449. package/dist/types/features/jserrors/instrument/debug.d.ts.map +1 -0
  450. package/dist/types/features/jserrors/instrument/index.d.ts +22 -0
  451. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -0
  452. package/dist/types/features/metrics/aggregate/index.d.ts +12 -0
  453. package/dist/types/features/metrics/aggregate/index.d.ts.map +1 -0
  454. package/dist/types/features/metrics/constants.d.ts +6 -0
  455. package/dist/types/features/metrics/constants.d.ts.map +1 -0
  456. package/dist/types/features/metrics/index.d.ts +2 -0
  457. package/dist/types/features/metrics/index.d.ts.map +1 -0
  458. package/dist/types/features/metrics/instrument/index.d.ts +7 -0
  459. package/dist/types/features/metrics/instrument/index.d.ts.map +1 -0
  460. package/dist/types/features/metrics/instrument/workers-helper.d.ts +7 -0
  461. package/dist/types/features/metrics/instrument/workers-helper.d.ts.map +1 -0
  462. package/dist/types/features/page_action/aggregate/index.d.ts +24 -0
  463. package/dist/types/features/page_action/aggregate/index.d.ts.map +1 -0
  464. package/dist/types/features/page_action/constants.d.ts +2 -0
  465. package/dist/types/features/page_action/constants.d.ts.map +1 -0
  466. package/dist/types/features/page_action/index.d.ts +2 -0
  467. package/dist/types/features/page_action/index.d.ts.map +1 -0
  468. package/dist/types/features/page_action/instrument/index.d.ts +6 -0
  469. package/dist/types/features/page_action/instrument/index.d.ts.map +1 -0
  470. package/dist/types/features/page_view_event/aggregate/index.d.ts +9 -0
  471. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -0
  472. package/dist/types/features/page_view_event/aggregate/initialized-features.d.ts +8 -0
  473. package/dist/types/features/page_view_event/aggregate/initialized-features.d.ts.map +1 -0
  474. package/dist/types/features/page_view_event/constants.d.ts +5 -0
  475. package/dist/types/features/page_view_event/constants.d.ts.map +1 -0
  476. package/dist/types/features/page_view_event/index.d.ts +2 -0
  477. package/dist/types/features/page_view_event/index.d.ts.map +1 -0
  478. package/dist/types/features/page_view_event/instrument/index.d.ts +6 -0
  479. package/dist/types/features/page_view_event/instrument/index.d.ts.map +1 -0
  480. package/dist/types/features/page_view_timing/aggregate/index.d.ts +33 -0
  481. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -0
  482. package/dist/types/features/page_view_timing/constants.d.ts +2 -0
  483. package/dist/types/features/page_view_timing/constants.d.ts.map +1 -0
  484. package/dist/types/features/page_view_timing/first-paint.d.ts +2 -0
  485. package/dist/types/features/page_view_timing/first-paint.d.ts.map +1 -0
  486. package/dist/types/features/page_view_timing/index.d.ts +2 -0
  487. package/dist/types/features/page_view_timing/index.d.ts.map +1 -0
  488. package/dist/types/features/page_view_timing/instrument/index.d.ts +6 -0
  489. package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -0
  490. package/dist/types/features/page_view_timing/long-tasks.d.ts +2 -0
  491. package/dist/types/features/page_view_timing/long-tasks.d.ts.map +1 -0
  492. package/dist/types/features/session_trace/aggregate/index.d.ts +77 -0
  493. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -0
  494. package/dist/types/features/session_trace/constants.d.ts +13 -0
  495. package/dist/types/features/session_trace/constants.d.ts.map +1 -0
  496. package/dist/types/features/session_trace/index.d.ts +2 -0
  497. package/dist/types/features/session_trace/index.d.ts.map +1 -0
  498. package/dist/types/features/session_trace/instrument/index.d.ts +11 -0
  499. package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -0
  500. package/dist/types/features/spa/aggregate/index.d.ts +25 -0
  501. package/dist/types/features/spa/aggregate/index.d.ts.map +1 -0
  502. package/dist/types/features/spa/aggregate/interaction-node.d.ts +15 -0
  503. package/dist/types/features/spa/aggregate/interaction-node.d.ts.map +1 -0
  504. package/dist/types/features/spa/aggregate/interaction.d.ts +20 -0
  505. package/dist/types/features/spa/aggregate/interaction.d.ts.map +1 -0
  506. package/dist/types/features/spa/aggregate/serializer.d.ts +15 -0
  507. package/dist/types/features/spa/aggregate/serializer.d.ts.map +1 -0
  508. package/dist/types/features/spa/constants.d.ts +23 -0
  509. package/dist/types/features/spa/constants.d.ts.map +1 -0
  510. package/dist/types/features/spa/index.d.ts +2 -0
  511. package/dist/types/features/spa/index.d.ts.map +1 -0
  512. package/dist/types/features/spa/instrument/index.d.ts +8 -0
  513. package/dist/types/features/spa/instrument/index.d.ts.map +1 -0
  514. package/dist/types/features/utils/aggregate-base.d.ts +4 -0
  515. package/dist/types/features/utils/aggregate-base.d.ts.map +1 -0
  516. package/dist/types/features/utils/feature-base.d.ts +23 -0
  517. package/dist/types/features/utils/feature-base.d.ts.map +1 -0
  518. package/dist/types/features/utils/handler-cache.d.ts +22 -0
  519. package/dist/types/features/utils/handler-cache.d.ts.map +1 -0
  520. package/dist/types/features/utils/instrument-base.d.ts +27 -0
  521. package/dist/types/features/utils/instrument-base.d.ts.map +1 -0
  522. package/dist/types/features/utils/lazy-loader.d.ts +13 -0
  523. package/dist/types/features/utils/lazy-loader.d.ts.map +1 -0
  524. package/dist/types/index.d.ts +12 -0
  525. package/dist/types/index.d.ts.map +1 -0
  526. package/dist/types/loaders/agent.d.ts +20 -0
  527. package/dist/types/loaders/agent.d.ts.map +1 -0
  528. package/dist/types/loaders/api/api.d.ts +17 -0
  529. package/dist/types/loaders/api/api.d.ts.map +1 -0
  530. package/dist/types/loaders/api/apiAsync.d.ts +2 -0
  531. package/dist/types/loaders/api/apiAsync.d.ts.map +1 -0
  532. package/dist/types/loaders/browser-agent.d.ts +9 -0
  533. package/dist/types/loaders/browser-agent.d.ts.map +1 -0
  534. package/dist/types/loaders/configure/configure.d.ts +10 -0
  535. package/dist/types/loaders/configure/configure.d.ts.map +1 -0
  536. package/dist/types/loaders/features/enabled-features.d.ts +2 -0
  537. package/dist/types/loaders/features/enabled-features.d.ts.map +1 -0
  538. package/dist/types/loaders/features/featureDependencies.d.ts +3 -0
  539. package/dist/types/loaders/features/featureDependencies.d.ts.map +1 -0
  540. package/dist/types/loaders/features/features.d.ts +18 -0
  541. package/dist/types/loaders/features/features.d.ts.map +1 -0
  542. package/dist/types/loaders/micro-agent.d.ts +25 -0
  543. package/dist/types/loaders/micro-agent.d.ts.map +1 -0
  544. package/dist/types/loaders/worker-agent.d.ts +8 -0
  545. package/dist/types/loaders/worker-agent.d.ts.map +1 -0
  546. package/package.json +231 -69
  547. package/src/cdn/lite.js +18 -0
  548. package/src/cdn/polyfills/lite.js +7 -0
  549. package/src/cdn/polyfills/pro.js +7 -0
  550. package/src/cdn/polyfills/spa.js +7 -0
  551. package/src/cdn/polyfills.js +17 -0
  552. package/src/cdn/pro.js +27 -0
  553. package/src/cdn/spa.js +28 -0
  554. package/src/cdn/worker.js +21 -0
  555. package/src/common/aggregate/aggregator.js +171 -0
  556. package/src/common/browser-version/firefox-version.js +10 -0
  557. package/src/common/browser-version/ios-version.js +10 -0
  558. package/src/common/config/config.js +12 -0
  559. package/src/common/config/state/configurable.js +26 -0
  560. package/src/common/config/state/info.js +49 -0
  561. package/src/common/config/state/init.js +56 -0
  562. package/src/common/config/state/loader-config.js +25 -0
  563. package/src/common/config/state/originals.js +3 -0
  564. package/src/common/config/state/runtime.js +45 -0
  565. package/src/common/constants/environment-variables.js +11 -0
  566. package/src/common/context/shared-context.js +21 -0
  567. package/src/common/deny-list/deny-list.js +116 -0
  568. package/src/common/drain/drain.js +119 -0
  569. package/src/common/event-emitter/contextual-ee.js +159 -0
  570. package/src/common/event-emitter/handle.js +17 -0
  571. package/src/common/event-emitter/register-handler.js +25 -0
  572. package/src/common/event-listener/event-listener-opts.js +41 -0
  573. package/src/common/harvest/harvest-scheduler.js +112 -0
  574. package/src/common/harvest/harvest.js +248 -0
  575. package/src/common/ids/id.js +23 -0
  576. package/src/common/ids/unique-id.js +81 -0
  577. package/src/common/metrics/framework-detection.js +71 -0
  578. package/src/common/metrics/paint-metrics.js +6 -0
  579. package/src/common/serialize/bel-serializer.js +93 -0
  580. package/src/common/timing/nav-timing.js +70 -0
  581. package/src/common/timing/now.js +9 -0
  582. package/src/common/unload/eol.js +63 -0
  583. package/src/common/url/clean-url.js +10 -0
  584. package/src/common/url/encode.js +75 -0
  585. package/src/common/url/location.js +8 -0
  586. package/src/common/url/parse-url.js +71 -0
  587. package/src/common/url/protocol.js +19 -0
  588. package/src/common/util/console.js +11 -0
  589. package/src/common/util/data-size.js +21 -0
  590. package/src/common/util/feature-flags.js +38 -0
  591. package/src/common/util/get-or-set.js +34 -0
  592. package/src/common/util/global-scope.js +48 -0
  593. package/src/common/util/map-own.js +22 -0
  594. package/src/common/util/map-own.test.js +52 -0
  595. package/src/common/util/obfuscate.js +73 -0
  596. package/src/common/util/s-hash.js +14 -0
  597. package/src/common/util/single.js +18 -0
  598. package/src/common/util/stringify.js +42 -0
  599. package/src/common/util/submit-data.js +101 -0
  600. package/src/common/util/traverse.js +36 -0
  601. package/src/common/util/user-agent.js +56 -0
  602. package/src/common/window/load.js +15 -0
  603. package/src/common/window/nreum.js +110 -0
  604. package/src/common/window/page-visibility.js +24 -0
  605. package/src/common/window/session-storage.js +75 -0
  606. package/src/common/window/supports-performance-observer.js +10 -0
  607. package/src/common/wrap/index.js +18 -0
  608. package/src/common/wrap/wrap-console.js +47 -0
  609. package/src/common/wrap/wrap-events.js +106 -0
  610. package/src/common/wrap/wrap-fetch.js +109 -0
  611. package/src/common/wrap/wrap-function.js +248 -0
  612. package/src/common/wrap/wrap-history.js +48 -0
  613. package/src/common/wrap/wrap-jsonp.js +134 -0
  614. package/src/common/wrap/wrap-mutation.js +55 -0
  615. package/src/common/wrap/wrap-promise.js +165 -0
  616. package/src/common/wrap/wrap-raf.js +50 -0
  617. package/src/common/wrap/wrap-timer.js +67 -0
  618. package/src/common/wrap/wrap-xhr.js +213 -0
  619. package/src/features/ajax/aggregate/index.js +248 -0
  620. package/src/features/ajax/constants.js +3 -0
  621. package/src/features/ajax/index.js +1 -0
  622. package/src/features/ajax/instrument/distributed-tracing.js +166 -0
  623. package/src/features/ajax/instrument/index.js +380 -0
  624. package/src/features/ajax/instrument/response-size.js +18 -0
  625. package/src/features/jserrors/aggregate/canonical-function-name.js +14 -0
  626. package/src/features/jserrors/aggregate/canonical-function-name.test.js +13 -0
  627. package/src/features/jserrors/aggregate/compute-stack-trace.js +231 -0
  628. package/src/features/jserrors/aggregate/compute-stack-trace.test.js +297 -0
  629. package/src/features/jserrors/aggregate/format-stack-trace.js +30 -0
  630. package/src/features/jserrors/aggregate/format-stack-trace.test.js +39 -0
  631. package/src/features/jserrors/aggregate/index.js +310 -0
  632. package/src/features/jserrors/aggregate/string-hash-code.js +17 -0
  633. package/src/features/jserrors/aggregate/string-hash-code.test.js +12 -0
  634. package/src/features/jserrors/constants.js +4 -0
  635. package/src/features/jserrors/index.js +1 -0
  636. package/src/features/jserrors/instrument/debug.js +36 -0
  637. package/src/features/jserrors/instrument/index.js +149 -0
  638. package/src/features/metrics/aggregate/index.js +134 -0
  639. package/src/features/metrics/constants.js +7 -0
  640. package/src/features/metrics/index.js +1 -0
  641. package/src/features/metrics/instrument/index.js +44 -0
  642. package/src/features/metrics/instrument/workers-helper.js +110 -0
  643. package/src/features/page_action/aggregate/index.js +113 -0
  644. package/src/features/page_action/constants.js +3 -0
  645. package/src/features/page_action/index.js +1 -0
  646. package/src/features/page_action/instrument/index.js +15 -0
  647. package/src/features/page_view_event/aggregate/index.js +134 -0
  648. package/src/features/page_view_event/aggregate/initialized-features.js +31 -0
  649. package/src/features/page_view_event/constants.js +6 -0
  650. package/src/features/page_view_event/index.js +1 -0
  651. package/src/features/page_view_event/instrument/index.js +33 -0
  652. package/src/features/page_view_timing/aggregate/index.js +246 -0
  653. package/src/features/page_view_timing/constants.js +3 -0
  654. package/src/features/page_view_timing/first-paint.js +41 -0
  655. package/src/features/page_view_timing/index.js +1 -0
  656. package/src/features/page_view_timing/instrument/index.js +30 -0
  657. package/src/features/page_view_timing/long-tasks.js +60 -0
  658. package/src/features/session_trace/aggregate/index.js +410 -0
  659. package/src/features/session_trace/constants.js +15 -0
  660. package/src/features/session_trace/index.js +1 -0
  661. package/src/features/session_trace/instrument/index.js +126 -0
  662. package/src/features/spa/aggregate/index.js +738 -0
  663. package/src/features/spa/aggregate/interaction-node.js +85 -0
  664. package/src/features/spa/aggregate/interaction-node.test.js +17 -0
  665. package/src/features/spa/aggregate/interaction.js +112 -0
  666. package/src/features/spa/aggregate/serializer.js +198 -0
  667. package/src/features/spa/constants.js +36 -0
  668. package/src/features/spa/index.js +1 -0
  669. package/src/features/spa/instrument/index.js +112 -0
  670. package/src/features/utils/aggregate-base.js +7 -0
  671. package/src/features/utils/feature-base.js +51 -0
  672. package/src/features/utils/handler-cache.js +60 -0
  673. package/src/features/utils/instrument-base.js +68 -0
  674. package/src/features/utils/lazy-loader.js +37 -0
  675. package/src/index.js +15 -0
  676. package/src/loaders/agent.js +80 -0
  677. package/src/loaders/api/api.js +175 -0
  678. package/src/loaders/api/apiAsync.js +92 -0
  679. package/src/loaders/browser-agent.js +33 -0
  680. package/src/loaders/configure/configure.js +39 -0
  681. package/src/loaders/features/enabled-features.js +16 -0
  682. package/src/loaders/features/featureDependencies.js +26 -0
  683. package/src/loaders/features/features.js +25 -0
  684. package/src/loaders/micro-agent.js +84 -0
  685. package/src/loaders/worker-agent.js +24 -0
  686. package/dist/bundled/es5/index.js +0 -2
  687. package/dist/bundled/es5/index.js.map +0 -1
  688. package/dist/bundled/es6/index.js +0 -2
  689. package/dist/bundled/es6/index.js.map +0 -1
  690. package/dist/cjs/index.d.ts +0 -19
  691. package/dist/cjs/index.js.map +0 -1
  692. package/dist/cjs/types.d.ts +0 -94
  693. package/dist/cjs/types.js +0 -28
  694. package/dist/cjs/types.js.map +0 -1
  695. package/dist/cjs/utils/api/api.d.ts +0 -10
  696. package/dist/cjs/utils/api/api.js +0 -40
  697. package/dist/cjs/utils/api/api.js.map +0 -1
  698. package/dist/cjs/utils/config/build-configs.d.ts +0 -6
  699. package/dist/cjs/utils/config/build-configs.js +0 -68
  700. package/dist/cjs/utils/config/build-configs.js.map +0 -1
  701. package/dist/cjs/utils/features/features.d.ts +0 -5
  702. package/dist/cjs/utils/features/features.js +0 -14
  703. package/dist/cjs/utils/features/features.js.map +0 -1
  704. package/dist/cjs/utils/features/initialize.d.ts +0 -5
  705. package/dist/cjs/utils/features/initialize.js +0 -51
  706. package/dist/cjs/utils/features/initialize.js.map +0 -1
  707. package/dist/es/index.d.ts +0 -19
  708. package/dist/es/index.js +0 -55
  709. package/dist/es/index.js.map +0 -1
  710. package/dist/es/types.d.ts +0 -94
  711. package/dist/es/types.js +0 -24
  712. package/dist/es/types.js.map +0 -1
  713. package/dist/es/utils/api/api.d.ts +0 -10
  714. package/dist/es/utils/api/api.js +0 -36
  715. package/dist/es/utils/api/api.js.map +0 -1
  716. package/dist/es/utils/config/build-configs.d.ts +0 -6
  717. package/dist/es/utils/config/build-configs.js +0 -64
  718. package/dist/es/utils/config/build-configs.js.map +0 -1
  719. package/dist/es/utils/features/features.d.ts +0 -5
  720. package/dist/es/utils/features/features.js +0 -10
  721. package/dist/es/utils/features/features.js.map +0 -1
  722. package/dist/es/utils/features/initialize.d.ts +0 -5
  723. package/dist/es/utils/features/initialize.js +0 -24
  724. package/dist/es/utils/features/initialize.js.map +0 -1
  725. package/dist/umd/index.d.ts +0 -19
  726. package/dist/umd/index.js +0 -69
  727. package/dist/umd/index.js.map +0 -1
  728. package/dist/umd/types.d.ts +0 -94
  729. package/dist/umd/types.js +0 -38
  730. package/dist/umd/types.js.map +0 -1
  731. package/dist/umd/utils/api/api.d.ts +0 -10
  732. package/dist/umd/utils/api/api.js +0 -50
  733. package/dist/umd/utils/api/api.js.map +0 -1
  734. package/dist/umd/utils/config/build-configs.d.ts +0 -6
  735. package/dist/umd/utils/config/build-configs.js +0 -78
  736. package/dist/umd/utils/config/build-configs.js.map +0 -1
  737. package/dist/umd/utils/features/features.d.ts +0 -5
  738. package/dist/umd/utils/features/features.js +0 -24
  739. package/dist/umd/utils/features/features.js.map +0 -1
  740. package/dist/umd/utils/features/initialize.d.ts +0 -5
  741. package/dist/umd/utils/features/initialize.js +0 -63
  742. package/dist/umd/utils/features/initialize.js.map +0 -1
  743. package/dist/webpack-analysis.html +0 -38
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createWrapperWithEmitter = createWrapperWithEmitter;
7
+ exports.flag = exports.default = void 0;
8
+ exports.wrapFunction = wrapFunction;
9
+ exports.wrapInPlace = wrapInPlace;
10
+ var _contextualEe = require("../event-emitter/contextual-ee");
11
+ var _lodash = _interopRequireDefault(require("lodash._slice"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ /*
14
+ * Copyright 2020 New Relic Corporation. All rights reserved.
15
+ * SPDX-License-Identifier: Apache-2.0
16
+ */
17
+ /**
18
+ * @file Provides helper functions for wrapping functions in various scenarios.
19
+ */
20
+
21
+ const flag = 'nr@original';
22
+
23
+ /**
24
+ * A convenience alias of `hasOwnProperty`.
25
+ * @type {function}
26
+ */
27
+ exports.flag = flag;
28
+ var has = Object.prototype.hasOwnProperty;
29
+
30
+ /**
31
+ * For tracking whether an event is already being emitted inside the wrapper.
32
+ * @type {boolean}
33
+ */
34
+ var inWrapper = false;
35
+
36
+ // eslint-disable-next-line
37
+ var _default = createWrapperWithEmitter;
38
+ /**
39
+ * Wraps a function in order to emit events on start, end, and error.
40
+ * @param {Object} [emitter] - The desired emitter for events emitted by the wrapper. Defaults to the global emitter.
41
+ * @param {boolean} always - If `true`, emit events even if already emitting an event.
42
+ * @returns {function} The wrapped function.
43
+ */
44
+ exports.default = _default;
45
+ function createWrapperWithEmitter(emitter, always) {
46
+ emitter || (emitter = _contextualEe.ee);
47
+ wrapFn.inPlace = inPlace;
48
+
49
+ /**
50
+ * A flag used to determine if a native function has already been wrapped.
51
+ * As a property on a wrapped function, contains the original function.
52
+ * @type {string}
53
+ */
54
+ wrapFn.flag = flag;
55
+ return wrapFn;
56
+
57
+ /**
58
+ * Wraps a function with event emitting functionality.
59
+ * @param {function} fn - The function to wrap.
60
+ * @param {string} prefix - A prefix for the names of emitted events.
61
+ * @param {function|object} getContext - The function or object that will serve as the 'this' context for handlers of events emitted by this wrapper.
62
+ * @param {string} methodName - The name of the method being wrapped.
63
+ * @param {boolean} bubble - If true, emitted events should also bubble up to the old emitter upon which the `emitter` in the current scope was based (if it defines one).
64
+ * @returns {function} The wrapped function.
65
+ */
66
+ function wrapFn(fn, prefix, getContext, methodName, bubble) {
67
+ // Unless fn is both wrappable and unwrapped, return it unchanged.
68
+ if (notWrappable(fn)) return fn;
69
+ if (!prefix) prefix = '';
70
+ nrWrapper[flag] = fn;
71
+ copy(fn, nrWrapper, emitter);
72
+ return nrWrapper;
73
+
74
+ /**
75
+ * A wrapper function that emits events before and after calling the wrapped function.
76
+ * Any arguments will be passed along to the original function.
77
+ * @returns {any} The return value of the wrapped function.
78
+ */
79
+ function nrWrapper() {
80
+ var args;
81
+ var originalThis;
82
+ var ctx;
83
+ var result;
84
+ try {
85
+ originalThis = this;
86
+ args = (0, _lodash.default)(arguments);
87
+ if (typeof getContext === 'function') {
88
+ ctx = getContext(args, originalThis);
89
+ } else {
90
+ ctx = getContext || {};
91
+ }
92
+ } catch (e) {
93
+ report([e, '', [args, originalThis, methodName], ctx], emitter);
94
+ }
95
+
96
+ // Warning: start events may mutate args!
97
+ safeEmit(prefix + 'start', [args, originalThis, methodName], ctx, bubble);
98
+ try {
99
+ result = fn.apply(originalThis, args);
100
+ return result;
101
+ } catch (err) {
102
+ safeEmit(prefix + 'err', [args, originalThis, err], ctx, bubble);
103
+
104
+ // rethrow error so we don't effect execution by observing.
105
+ throw err;
106
+ } finally {
107
+ // happens no matter what.
108
+ safeEmit(prefix + 'end', [args, originalThis, result], ctx, bubble);
109
+ }
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Creates wrapper functions around each of an array of methods on a specified object.
115
+ * @param {Object} obj - The object to which the specified methods belong.
116
+ * @param {string[]} methods - An array of method names to be wrapped.
117
+ * @param {string} [prefix=''] - A prefix to add to the names of emitted events. If `-` is the first character, also
118
+ * adds the method name before the prefix.
119
+ * @param {function|object} [getContext] - The function or object that will serve as the 'this' context for handlers
120
+ * of events emitted by this wrapper.
121
+ * @param {boolean} [bubble=false] - If `true`, emitted events should also bubble up to the old emitter upon which
122
+ * the `emitter` in the current scope was based (if it defines one).
123
+ */
124
+ function inPlace(obj, methods, prefix, getContext, bubble) {
125
+ if (!prefix) prefix = '';
126
+ // If prefix starts with '-' set this boolean to add the method name to the prefix before passing each one to wrap.
127
+ var prependMethodPrefix = prefix.charAt(0) === '-';
128
+ var fn;
129
+ var method;
130
+ var i;
131
+ for (i = 0; i < methods.length; i++) {
132
+ method = methods[i];
133
+ fn = obj[method];
134
+
135
+ // Unless fn is both wrappable and unwrapped, bail so we don't add extra properties with undefined values.
136
+ if (notWrappable(fn)) continue;
137
+ obj[method] = wrapFn(fn, prependMethodPrefix ? method + prefix : prefix, getContext, method, bubble);
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Emits an event using the `emit` method of the `emitter` object in the executing scope, but only if an event is not
143
+ * already being emitted (except when the executing scope defines `always` as `true`).
144
+ * @param {string} evt - The name of the event to be emitted.
145
+ * @param {array} arr - An array of arguments to pass with the event.
146
+ * @param {Object} store - The function or object that will serve as the 'this'
147
+ * context when applying handler functions for this event.
148
+ * @param {boolean} bubble - If `true`, emitted events should also
149
+ * bubble up to the old emitter upon which the `emitter` in the
150
+ * executing scope was based (if it defines one).
151
+ */
152
+ function safeEmit(evt, arr, store, bubble) {
153
+ if (inWrapper && !always) return;
154
+ var prev = inWrapper;
155
+ inWrapper = true;
156
+ try {
157
+ emitter.emit(evt, arr, store, always, bubble);
158
+ } catch (e) {
159
+ report([e, evt, arr, store], emitter);
160
+ }
161
+ inWrapper = prev;
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Emits an "internal-error" event. Used to report errors encountered when emitting events using `safeEmit`.
167
+ * @param {array} args - Arguments to be passed to the "internal-error" event.
168
+ * @param {Object} [emitter] - The (optional) desired event emitter. Defaults to the global event emitter.
169
+ */
170
+ function report(args, emitter) {
171
+ emitter || (emitter = _contextualEe.ee);
172
+ try {
173
+ emitter.emit('internal-error', args);
174
+ } catch (err) {
175
+ // do nothing
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Copies properties from one object to another. Used for creating a wrapper function from an original function and for
181
+ * copying an original function to a property of a wrapper function named by `flag` in the executing context.
182
+ * @param {Object} from - The source function or object.
183
+ * @param {Object} to - The destination function or object.
184
+ * @param {Object} [emitter] - The (optional) desired event emitter if errors are encountered while copying.
185
+ * Defaults to the global event emitter.
186
+ * @returns {object} - The destination founction or object with copied properties.
187
+ */
188
+ function copy(from, to, emitter) {
189
+ if (Object.defineProperty && Object.keys) {
190
+ // Create accessors that proxy to actual function
191
+ try {
192
+ var keys = Object.keys(from);
193
+ // eslint-disable-next-line
194
+ keys.forEach(function (key) {
195
+ Object.defineProperty(to, key, {
196
+ get: function () {
197
+ return from[key];
198
+ },
199
+ // eslint-disable-next-line
200
+ set: function (val) {
201
+ from[key] = val;
202
+ return val;
203
+ }
204
+ });
205
+ });
206
+ return to;
207
+ } catch (e) {
208
+ report([e], emitter);
209
+ }
210
+ }
211
+ // fall back to copying properties
212
+ for (var i in from) {
213
+ if (has.call(from, i)) {
214
+ to[i] = from[i];
215
+ }
216
+ }
217
+ return to;
218
+ }
219
+
220
+ /**
221
+ * Determines whether a function is eligible to be wrapped in part based on whether it has already been wrapped.
222
+ * @param {function} fn - The function in question.
223
+ * @returns {boolean} Whether the passed function is ineligible to be wrapped.
224
+ */
225
+ function notWrappable(fn) {
226
+ return !(fn && fn instanceof Function && fn.apply && !fn[flag]);
227
+ }
228
+
229
+ /**
230
+ * Creates a wrapped version of a function using a specified wrapper function. The new wrapped function references the
231
+ * original function. Also copies the properties of the original function to the wrapped function.
232
+ * @param {function} fn - A function to be wrapped.
233
+ * @param {function} wrapper - A higher order function that returns a new function, which executes the function passed
234
+ * to the higher order function as an argument.
235
+ * @returns {function} A wrapped function with an internal reference to the original function.
236
+ */
237
+ function wrapFunction(fn, wrapper) {
238
+ var wrapped = wrapper(fn);
239
+ wrapped[flag] = fn;
240
+ copy(fn, wrapped, _contextualEe.ee);
241
+ return wrapped;
242
+ }
243
+
244
+ /**
245
+ * Replaces a function with a wrapped version of itself. To preserve object references, rather than taking the function
246
+ * itself as an argument, takes the object on which the particular named function is a property.
247
+ * @param {Object} obj - The object on which the named function is a property.
248
+ * @param {string} fnName - The name of the function to be wrapped.
249
+ * @param {function} wrapper - A higher order function that returns a new function, which executes the function passed
250
+ * to the higher order function as an argument.
251
+ */
252
+ function wrapInPlace(obj, fnName, wrapper) {
253
+ var fn = obj[fnName];
254
+ obj[fnName] = wrapFunction(fn, wrapper);
255
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scopedEE = scopedEE;
7
+ exports.wrapHistory = wrapHistory;
8
+ var _contextualEe = require("../event-emitter/contextual-ee");
9
+ var _wrapFunction = require("./wrap-function");
10
+ var _globalScope = require("../util/global-scope");
11
+ /*
12
+ * Copyright 2020 New Relic Corporation. All rights reserved.
13
+ * SPDX-License-Identifier: Apache-2.0
14
+ */
15
+ /**
16
+ * @file Wraps `pushState` and `replaceState` methods of `window.history` object for instrumentation.
17
+ * This module is used by: session_trace, spa.
18
+ */
19
+
20
+ const wrapped = {};
21
+ const HISTORY_FNS = ['pushState', 'replaceState'];
22
+
23
+ /**
24
+ * Wraps the `pushState` and `replaceState` methods of `window.history` and returns a corresponding event emitter
25
+ * scoped to the history object.
26
+ * @param {Object} sharedEE - The shared event emitter on which a new scoped event emitter will be based.
27
+ * @returns {Object} Scoped event emitter with a debug ID of `history`.
28
+ */
29
+ function wrapHistory(sharedEE) {
30
+ const ee = scopedEE(sharedEE);
31
+ if (!_globalScope.isBrowserScope || wrapped[ee.debugId]++)
32
+ // Notice if our wrapping never ran yet, the falsey NaN will not early return; but if it has,
33
+ {
34
+ return ee;
35
+ } // then we increment the count to track # of feats using this at runtime. (History API is only avail in browser DOM context.)
36
+ wrapped[ee.debugId] = 1;
37
+ var wrapFn = (0, _wrapFunction.createWrapperWithEmitter)(ee);
38
+ /*
39
+ * For objects that will be instantiated more than once, we wrap the object's prototype methods. The history object
40
+ * is instantiated only once, so we can wrap its methods directly--and we must wrap the history methods directly as
41
+ * long as [Chromium issue 783382](https://bugs.chromium.org/p/chromium/issues/detail?id=783382) remains unresolved.
42
+ */
43
+ wrapFn.inPlace(window.history, HISTORY_FNS, '-');
44
+ return ee;
45
+ }
46
+
47
+ /**
48
+ * Returns an event emitter scoped specifically for the `history` context. This scoping is a remnant from when all the
49
+ * features shared the same group in the event, to isolate events between features. It will likely be revisited.
50
+ * @param {Object} sharedEE - Optional event emitter on which to base the scoped emitter.
51
+ * Uses `ee` on the global scope if undefined).
52
+ * @returns {Object} Scoped event emitter with a debug ID of 'history'.
53
+ */
54
+ function scopedEE(sharedEE) {
55
+ return (sharedEE || _contextualEe.ee).get('history');
56
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scopedEE = scopedEE;
7
+ exports.wrapJsonP = wrapJsonP;
8
+ var _eventListenerOpts = require("../event-listener/event-listener-opts");
9
+ var _contextualEe = require("../event-emitter/contextual-ee");
10
+ var _wrapFunction = require("./wrap-function");
11
+ var _globalScope = require("../util/global-scope");
12
+ /*
13
+ * Copyright 2020 New Relic Corporation. All rights reserved.
14
+ * SPDX-License-Identifier: Apache-2.0
15
+ */
16
+ /**
17
+ * @file Wraps DOM insertion methods which in turn wrap JSONP functions that show up in the DOM.
18
+ * This module is used by: spa.
19
+ */
20
+
21
+ const wrapped = {};
22
+ const domInsertMethods = ['appendChild', 'insertBefore', 'replaceChild'];
23
+
24
+ /**
25
+ * Wraps DOM insertion methods to identify script elements containing JSONP callback functions and instruments those
26
+ * functions with custom events in the context of a new event emitter scoped only to JSONP.
27
+ * @param {Object} sharedEE - The shared event emitter on which a new scoped event emitter will be based.
28
+ * @returns {Object} Scoped event emitter with a debug ID of `jsonp`.
29
+ */
30
+ function wrapJsonP(sharedEE) {
31
+ const ee = scopedEE(sharedEE);
32
+ if (!_globalScope.isBrowserScope || wrapped[ee.debugId])
33
+ // JSONP deals with DOM tags so browser window env is req'd
34
+ {
35
+ return ee;
36
+ }
37
+ wrapped[ee.debugId] = true;
38
+ var wrapFn = (0, _wrapFunction.createWrapperWithEmitter)(ee);
39
+ var CALLBACK_REGEX = /[?&](?:callback|cb)=([^&#]+)/;
40
+ var PARENT_REGEX = /(.*)\.([^.]+)/;
41
+ var VALUE_REGEX = /^(\w+)(\.|$)(.*)$/;
42
+
43
+ // JSONP works by dynamically inserting <script> elements - wrap DOM methods for
44
+ // inserting elements to detect insertion of JSONP-specific elements.
45
+ wrapFn.inPlace(Node.prototype, domInsertMethods, 'dom-');
46
+ ee.on('dom-start', function (args) {
47
+ wrapElement(args[0]);
48
+ });
49
+
50
+ // subscribe to events on the JSONP <script> element and wrap the JSONP callback
51
+ // in order to track start and end of the interaction node
52
+ function wrapElement(el) {
53
+ var isScript = el && typeof el.nodeName === 'string' && el.nodeName.toLowerCase() === 'script';
54
+ if (!isScript) return;
55
+ var isValidElement = typeof el.addEventListener === 'function';
56
+ if (!isValidElement) return;
57
+ var callbackName = extractCallbackName(el.src);
58
+ if (!callbackName) return;
59
+ var callback = discoverParent(callbackName);
60
+ var validCallback = typeof callback.parent[callback.key] === 'function';
61
+ if (!validCallback) return;
62
+
63
+ // At this point we know that the element is a valid JSONP script element.
64
+ // The following events are emitted during the lifetime of a JSONP call:
65
+ // * immediately emit `new-jsonp` to notify start of the JSONP work
66
+ // * the wrapped callback will emit `cb-start` and `cb-end` during the execution
67
+ // of the callback, here we can inspect the response
68
+ // * when the element emits the `load` event (script loaded and executed),
69
+ // emit `jsonp-end` to notify end of the JSONP work
70
+ // * if the element emits the `error` event, in response emit `jsonp-error`
71
+ // (and `jsonp-end`). Note that the callback in this case will likely not get
72
+ // called.
73
+
74
+ var context = {};
75
+ wrapFn.inPlace(callback.parent, [callback.key], 'cb-', context);
76
+ el.addEventListener('load', onLoad, (0, _eventListenerOpts.eventListenerOpts)(false));
77
+ el.addEventListener('error', onError, (0, _eventListenerOpts.eventListenerOpts)(false));
78
+ ee.emit('new-jsonp', [el.src], context);
79
+ function onLoad() {
80
+ ee.emit('jsonp-end', [], context);
81
+ el.removeEventListener('load', onLoad, (0, _eventListenerOpts.eventListenerOpts)(false));
82
+ el.removeEventListener('error', onError, (0, _eventListenerOpts.eventListenerOpts)(false));
83
+ }
84
+ function onError() {
85
+ ee.emit('jsonp-error', [], context);
86
+ ee.emit('jsonp-end', [], context);
87
+ el.removeEventListener('load', onLoad, (0, _eventListenerOpts.eventListenerOpts)(false));
88
+ el.removeEventListener('error', onError, (0, _eventListenerOpts.eventListenerOpts)(false));
89
+ }
90
+ }
91
+ function extractCallbackName(src) {
92
+ var matches = src.match(CALLBACK_REGEX);
93
+ return matches ? matches[1] : null;
94
+ }
95
+ function discoverValue(longKey, obj) {
96
+ var matches = longKey.match(VALUE_REGEX);
97
+ var key = matches[1];
98
+ var remaining = matches[3];
99
+ if (!remaining) {
100
+ return obj[key];
101
+ }
102
+ return discoverValue(remaining, obj[key]);
103
+ }
104
+ function discoverParent(key) {
105
+ var matches = key.match(PARENT_REGEX);
106
+ if (matches && matches.length >= 3) {
107
+ return {
108
+ key: matches[2],
109
+ parent: discoverValue(matches[1], window)
110
+ };
111
+ }
112
+ return {
113
+ key: key,
114
+ parent: window
115
+ };
116
+ }
117
+ return ee;
118
+ }
119
+
120
+ /**
121
+ * Returns an event emitter scoped specifically for the `jsonp` context. This scoping is a remnant from when all the
122
+ * features shared the same group in the event, to isolate events between features. It will likely be revisited.
123
+ * @param {Object} sharedEE - Optional event emitter on which to base the scoped emitter.
124
+ * Uses `ee` on the global scope if undefined).
125
+ * @returns {Object} Scoped event emitter with a debug ID of 'jsonp'.
126
+ */
127
+ function scopedEE(sharedEE) {
128
+ return (sharedEE || _contextualEe.ee).get('jsonp');
129
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scopedEE = scopedEE;
7
+ exports.wrapMutation = wrapMutation;
8
+ var _contextualEe = require("../event-emitter/contextual-ee");
9
+ var _wrapFunction = require("./wrap-function");
10
+ var _config = require("../config/config");
11
+ var _globalScope = require("../util/global-scope");
12
+ /*
13
+ * Copyright 2020 New Relic Corporation. All rights reserved.
14
+ * SPDX-License-Identifier: Apache-2.0
15
+ */
16
+ /**
17
+ * @file Wraps the window's DOM mutation observer for instrumentation.
18
+ * This module is used by: spa.
19
+ */
20
+
21
+ const wrapped = {};
22
+
23
+ /**
24
+ * In web environments only, wraps the `window.MutationObserver` function to emit events on start, end, and error, in
25
+ * the context of a new event emitter scoped only to mutations.
26
+ * @param {Object} sharedEE - The shared event emitter on which a new scoped event emitter will be based.
27
+ * @returns {Object} Scoped event emitter with a debug ID of `mutation`.
28
+ */
29
+ function wrapMutation(sharedEE) {
30
+ const ee = scopedEE(sharedEE);
31
+ if (!_globalScope.isBrowserScope || wrapped[ee.debugId])
32
+ // relates to the DOM tree (web env only)
33
+ {
34
+ return ee;
35
+ }
36
+ wrapped[ee.debugId] = true;
37
+ var wrapFn = (0, _wrapFunction.createWrapperWithEmitter)(ee);
38
+ var OriginalObserver = _config.originals.MO;
39
+ if (OriginalObserver) {
40
+ window.MutationObserver = function WrappedMutationObserver(cb) {
41
+ if (this instanceof OriginalObserver) {
42
+ return new OriginalObserver(wrapFn(cb, 'fn-'));
43
+ } else {
44
+ return OriginalObserver.apply(this, arguments);
45
+ }
46
+ };
47
+ MutationObserver.prototype = OriginalObserver.prototype;
48
+ }
49
+ return ee;
50
+ }
51
+
52
+ /**
53
+ * Returns an event emitter scoped specifically for the `mutation` context. This scoping is a remnant from when all the
54
+ * features shared the same group in the event, to isolate events between features. It will likely be revisited.
55
+ * @param {Object} sharedEE - Optional event emitter on which to base the scoped emitter.
56
+ * Uses `ee` on the global scope if undefined).
57
+ * @returns {Object} Scoped event emitter with a debug ID of 'mutation'.
58
+ */
59
+ function scopedEE(sharedEE) {
60
+ return (sharedEE || _contextualEe.ee).get('mutation');
61
+ }
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scopedEE = scopedEE;
7
+ exports.wrapPromise = wrapPromise;
8
+ var _wrapFunction = require("./wrap-function");
9
+ var _contextualEe = require("../event-emitter/contextual-ee");
10
+ var _config = require("../config/config");
11
+ var _globalScope = require("../util/global-scope");
12
+ /*
13
+ * Copyright 2020 New Relic Corporation. All rights reserved.
14
+ * SPDX-License-Identifier: Apache-2.0
15
+ */
16
+ /**
17
+ * @file Wraps the native Promise object for instrumentation.
18
+ * This module is used by: spa.
19
+ */
20
+
21
+ const wrapped = {};
22
+
23
+ /**
24
+ * Wraps the native Promise object so that it will emit events for start, end and error in the context of a new event
25
+ * emitter scoped only to promise methods. Also instruments various methods, such as `all`, `race`, `resolve`,
26
+ * `reject`, `then`, and `catch`.
27
+ * @param {Object} sharedEE - The shared event emitter on which a new scoped event emitter will be based.
28
+ * @returns {Object} Scoped event emitter with a debug ID of `promise`.
29
+ */
30
+ function wrapPromise(sharedEE) {
31
+ const promiseEE = scopedEE(sharedEE);
32
+ if (wrapped[promiseEE.debugId]) {
33
+ return promiseEE;
34
+ }
35
+ wrapped[promiseEE.debugId] = true;
36
+ var getContext = _contextualEe.getOrSetContext;
37
+ var promiseWrapper = (0, _wrapFunction.createWrapperWithEmitter)(promiseEE);
38
+ var prevPromiseObj = _config.originals.PR;
39
+ if (prevPromiseObj) {
40
+ // ensure there's a Promise API (native or otherwise) to even wrap
41
+ wrap();
42
+ }
43
+ function wrap() {
44
+ _globalScope.globalScope.Promise = WrappedPromise;
45
+
46
+ // Renamed from "WrappedPromise" back to "Promise" & toString() so that we appear "native" to TP libraries...
47
+ Object.defineProperty(WrappedPromise, 'name', {
48
+ value: 'Promise'
49
+ });
50
+ WrappedPromise.toString = function () {
51
+ return prevPromiseObj.toString();
52
+ };
53
+
54
+ /**
55
+ * This constitutes the global used when calling "Promise.staticMethod" or chaining off a "new Promise()" object.
56
+ * @param {Function} executor - to be executed by the original Promise constructor
57
+ * @returns A new WrappedPromise object prototyped off the original.
58
+ */
59
+ function WrappedPromise(executor) {
60
+ var ctx = promiseEE.context();
61
+ var wrappedExecutor = promiseWrapper(executor, 'executor-', ctx, null, false);
62
+ const newCustomPromiseInst = Reflect.construct(prevPromiseObj, [wrappedExecutor], WrappedPromise); // new Promises will use WrappedPromise.prototype as theirs prototype
63
+
64
+ promiseEE.context(newCustomPromiseInst).getCtx = function () {
65
+ return ctx;
66
+ };
67
+ return newCustomPromiseInst;
68
+ }
69
+
70
+ // Make WrappedPromise inherit statics from the orig Promise.
71
+ Object.setPrototypeOf(WrappedPromise, prevPromiseObj);
72
+ ['all', 'race'].forEach(function (method) {
73
+ const prevStaticFn = prevPromiseObj[method];
74
+ WrappedPromise[method] = function (subPromises) {
75
+ // use our own wrapped version of "Promise.all" and ".race" static fns
76
+ let finalized = false;
77
+ subPromises?.forEach(sub => {
78
+ // eslint-disable-next-line
79
+ this.resolve(sub).then(setNrId(method === 'all'), setNrId(false));
80
+ });
81
+ const origFnCallWithThis = prevStaticFn.apply(this, arguments);
82
+ return origFnCallWithThis;
83
+ function setNrId(overwrite) {
84
+ return function () {
85
+ promiseEE.emit('propagate', [null, !finalized], origFnCallWithThis, false, false);
86
+ finalized = finalized || !overwrite;
87
+ };
88
+ }
89
+ };
90
+ });
91
+ ['resolve', 'reject'].forEach(function (method) {
92
+ const prevStaticFn = prevPromiseObj[method];
93
+ WrappedPromise[method] = function (val) {
94
+ // and the same for ".resolve" and ".reject"
95
+ const origFnCallWithThis = prevStaticFn.apply(this, arguments);
96
+ if (val !== origFnCallWithThis) {
97
+ promiseEE.emit('propagate', [val, true], origFnCallWithThis, false, false);
98
+ }
99
+ return origFnCallWithThis;
100
+ };
101
+ });
102
+
103
+ /*
104
+ * Ideally, we create a new WrappedPromise.prototype chained off the original Promise's so that we don't alter it.
105
+ * However, there's no way to make the (native) promise returned from async functions use our WrappedPromise,
106
+ * so we have to modify the original prototype. This ensures that promises returned from async functions execute
107
+ * the same instance methods as promises created with "new Promise()", and also that instanceof async() is
108
+ * the global Promise (see GH issue #409). This also affects the promise returned from fetch().
109
+ */
110
+ WrappedPromise.prototype = prevPromiseObj.prototype;
111
+
112
+ // Note that this wrapping affects the same originals.PR (prototype) object.
113
+ const prevPromiseOrigThen = prevPromiseObj.prototype.then;
114
+ prevPromiseObj.prototype.then = function wrappedThen() {
115
+ var originalThis = this;
116
+ var ctx = getContext(originalThis);
117
+ ctx.promise = originalThis;
118
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
119
+ args[_key] = arguments[_key];
120
+ }
121
+ args[0] = promiseWrapper(args[0], 'cb-', ctx, null, false);
122
+ args[1] = promiseWrapper(args[1], 'cb-', ctx, null, false);
123
+ const origFnCallWithThis = prevPromiseOrigThen.apply(this, args);
124
+ ctx.nextPromise = origFnCallWithThis;
125
+ promiseEE.emit('propagate', [originalThis, true], origFnCallWithThis, false, false);
126
+ return origFnCallWithThis;
127
+ };
128
+ prevPromiseObj.prototype.then[_wrapFunction.flag] = prevPromiseOrigThen;
129
+ promiseEE.on('executor-start', function (args) {
130
+ args[0] = promiseWrapper(args[0], 'resolve-', this, null, false);
131
+ args[1] = promiseWrapper(args[1], 'resolve-', this, null, false);
132
+ });
133
+ promiseEE.on('executor-err', function (args, originalThis, err) {
134
+ args[1](err);
135
+ });
136
+ promiseEE.on('cb-end', function (args, originalThis, result) {
137
+ promiseEE.emit('propagate', [result, true], this.nextPromise, false, false);
138
+ });
139
+ promiseEE.on('propagate', function (val, overwrite, trigger) {
140
+ if (!this.getCtx || overwrite) {
141
+ this.getCtx = function () {
142
+ // eslint-disable-next-line
143
+ if (val instanceof Promise) {
144
+ var store = promiseEE.context(val);
145
+ }
146
+ return store && store.getCtx ? store.getCtx() : this;
147
+ };
148
+ }
149
+ });
150
+ }
151
+ return promiseEE;
152
+ }
153
+
154
+ /**
155
+ * Returns an event emitter scoped specifically for the `promise` context. This scoping is a remnant from when all the
156
+ * features shared the same group in the event, to isolate events between features. It will likely be revisited.
157
+ * @param {Object} sharedEE - Optional event emitter on which to base the scoped emitter.
158
+ * Uses `ee` on the global scope if undefined).
159
+ * @returns {Object} Scoped event emitter with a debug ID of 'promise'.
160
+ */
161
+ function scopedEE(sharedEE) {
162
+ return (sharedEE || _contextualEe.ee).get('promise');
163
+ }