@mdn/fred 0.1.0 → 0.2.0

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 (640) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/build/render.js +3 -3
  3. package/build/server-worker.js +2 -2
  4. package/build/types.d.ts +2 -2
  5. package/components/a11y-menu/server.css +1 -1
  6. package/components/about-tabs/element.css +3 -1
  7. package/components/about-tabs/element.js +8 -0
  8. package/components/advertising/server.css +1 -1
  9. package/components/article-footer/server.css +0 -4
  10. package/components/article-footer/server.js +13 -16
  11. package/components/baseline-indicator/server.css +5 -6
  12. package/components/baseline-indicator/server.js +1 -6
  13. package/components/blog-index/server.css +2 -2
  14. package/components/blog-post/server.css +3 -3
  15. package/components/breadcrumbs-bar/server.js +26 -7
  16. package/components/button/pure.js +6 -3
  17. package/components/code-example/common.css +47 -3
  18. package/components/code-example/element.js +4 -5
  19. package/components/code-example/prism.css +62 -59
  20. package/components/color/area.css +11 -0
  21. package/components/color/border.css +1 -1
  22. package/components/color/global.css +5 -4
  23. package/components/color-theme/element.css +4 -0
  24. package/components/color-theme/element.js +19 -30
  25. package/components/compat-table/index-common.css +4 -2
  26. package/components/content-section/server.css +137 -23
  27. package/components/contributor-spotlight/server.css +4 -4
  28. package/components/curriculum/assets/curriculum-landing-top.svg +1 -1
  29. package/components/curriculum/layout.css +81 -13
  30. package/components/curriculum/module-list.css +5 -5
  31. package/components/curriculum/module.css +3 -3
  32. package/components/curriculum/shared.css +14 -47
  33. package/components/curriculum/sidebar.css +66 -294
  34. package/components/curriculum/toc.css +9 -23
  35. package/components/curriculum/utils.js +47 -58
  36. package/components/curriculum/vars.css +68 -39
  37. package/components/curriculum-about/server.css +17 -3
  38. package/components/curriculum-about/server.js +18 -15
  39. package/components/curriculum-default/server.css +11 -0
  40. package/components/curriculum-default/server.js +17 -14
  41. package/components/curriculum-landing/server.css +7 -7
  42. package/components/curriculum-module/server.css +75 -73
  43. package/components/curriculum-module/server.js +19 -17
  44. package/components/curriculum-overview/server.css +11 -0
  45. package/components/curriculum-overview/server.js +60 -24
  46. package/components/dropdown/element.js +3 -1
  47. package/components/featured-articles/server.css +1 -1
  48. package/components/font/README.md +11 -0
  49. package/components/font/fonts/jetbrains-mono-cyrillic.woff2 +0 -0
  50. package/components/font/fonts/jetbrains-mono-italic-cyrillic.woff2 +0 -0
  51. package/components/font/fonts/jetbrains-mono-italic-latin-extended.woff2 +0 -0
  52. package/components/font/fonts/jetbrains-mono-italic-latin.woff2 +0 -0
  53. package/components/font/fonts/jetbrains-mono-latin-extended.woff2 +0 -0
  54. package/components/font/fonts/jetbrains-mono-latin.woff2 +0 -0
  55. package/components/font/fonts/jetbrains-mono-nl.patch +4758 -0
  56. package/components/font/fonts/source/jetbrains-mono-italic.ttf +0 -0
  57. package/components/font/fonts/source/jetbrains-mono.ttf +0 -0
  58. package/components/font/global.css +3 -0
  59. package/components/font/inter.css +6 -0
  60. package/components/footer/server.css +20 -3
  61. package/components/footer/server.js +3 -0
  62. package/components/generic-about/server.css +16 -14
  63. package/components/generic-community/server.css +16 -16
  64. package/components/generic-community/server.js +11 -4
  65. package/components/generic-content/server.css +1 -1
  66. package/components/generic-sidebar/server.css +2 -2
  67. package/components/generic-sidebar/server.js +14 -5
  68. package/components/generic-toc/server.css +2 -2
  69. package/components/homepage-search/element.css +14 -17
  70. package/components/html/global.css +3 -0
  71. package/components/icon/chart-no-axes-combined.svg +1 -0
  72. package/components/icon/circle-play.svg +1 -0
  73. package/components/icon/log-in.svg +1 -0
  74. package/components/icon/mdn-m.svg +1 -0
  75. package/components/icon/shield-check.svg +1 -0
  76. package/components/icon/users.svg +1 -0
  77. package/components/interactive-example/element.css +3 -1
  78. package/components/issues-table/element.css +2 -2
  79. package/components/ix-tab/element.css +1 -1
  80. package/components/language-switcher/element.css +2 -1
  81. package/components/language-switcher/element.js +1 -0
  82. package/components/latest-news/server.css +1 -1
  83. package/components/left-sidebar/server.css +12 -15
  84. package/components/live-sample-result/element.css +1 -0
  85. package/components/live-sample-result/element.js +10 -2
  86. package/components/logo/server.css +5 -0
  87. package/components/mandala/server.css +2 -2
  88. package/components/media/index.css +3 -0
  89. package/components/menu/base.css +40 -11
  90. package/components/menu/desktop.css +1 -1
  91. package/components/menu/mobile.css +1 -1
  92. package/components/menu/server.js +34 -45
  93. package/components/modal/element.js +1 -1
  94. package/components/navigation/base.css +0 -8
  95. package/components/navigation/desktop.css +22 -5
  96. package/components/navigation/mobile.css +25 -6
  97. package/components/navigation/server.js +5 -2
  98. package/components/not-found/element.css +1 -0
  99. package/components/not-found/element.js +1 -1
  100. package/components/observatory/colors.css +64 -0
  101. package/components/observatory/common.css +5 -0
  102. package/components/observatory-comparison-table/element.css +6 -6
  103. package/components/observatory-form/element.css +6 -11
  104. package/components/observatory-header-link/element.css +1 -9
  105. package/components/observatory-human-duration/element.css +1 -0
  106. package/components/observatory-human-duration/element.js +4 -3
  107. package/components/observatory-landing/server.css +208 -1
  108. package/components/observatory-landing/server.js +76 -66
  109. package/components/observatory-rescan-button/element.css +1 -0
  110. package/components/observatory-rescan-button/element.js +11 -3
  111. package/components/observatory-results/element.css +38 -42
  112. package/components/observatory-results/server.css +119 -1
  113. package/components/observatory-results/server.js +47 -43
  114. package/components/observatory-tests-and-scores/element.css +3 -1
  115. package/components/outer-layout/server.js +8 -2
  116. package/components/placement-sidebar/element.css +1 -1
  117. package/components/play-console/element.css +1 -1
  118. package/components/play-runner/element.css +3 -0
  119. package/components/playground/element.css +35 -9
  120. package/components/playground/element.js +63 -3
  121. package/components/prev-next/index.css +32 -3
  122. package/components/radius/global.css +6 -0
  123. package/components/reference-layout/server.css +4 -4
  124. package/components/reference-layout/server.js +6 -3
  125. package/components/reference-toc/server.css +2 -2
  126. package/components/scrim-inline/element.css +2 -2
  127. package/components/scrim-inline/global.css +1 -1
  128. package/components/search-button/element.css +7 -1
  129. package/components/search-modal/element.css +61 -27
  130. package/components/search-modal/element.js +14 -0
  131. package/components/sidebar-filter/element.css +1 -1
  132. package/components/site-search/element.css +6 -7
  133. package/components/specifications-list/index.js +18 -26
  134. package/components/switch/element.css +1 -1
  135. package/components/user-menu/base.css +0 -7
  136. package/components/user-menu/desktop.css +15 -3
  137. package/components/user-menu/element.js +10 -2
  138. package/components/user-menu/mobile.css +2 -14
  139. package/components/utils/index.js +9 -0
  140. package/components/vars/global.css +1 -1
  141. package/components/writer-open-editor/element.js +31 -0
  142. package/components/writer-toolbar/server.css +11 -0
  143. package/components/writer-toolbar/server.js +27 -0
  144. package/dist/client/{1048.7f6f1de50a1fda0d.js → 1048.9db1491a9a9f26c3.js} +2 -2
  145. package/dist/client/{1048.7f6f1de50a1fda0d.js.map → 1048.9db1491a9a9f26c3.js.map} +1 -1
  146. package/dist/client/1197.65020044d7ef7add.css +32 -0
  147. package/dist/client/1197.65020044d7ef7add.css.map +1 -0
  148. package/dist/client/1241.691b26f66d52ce68.css +2 -0
  149. package/dist/client/1241.691b26f66d52ce68.css.map +1 -0
  150. package/dist/client/{1342.b05de4cd80d4c221.js → 1342.a66390274e8adda1.js} +8 -8
  151. package/dist/client/{1342.b05de4cd80d4c221.js.map → 1342.a66390274e8adda1.js.map} +1 -1
  152. package/dist/client/1624.98ead28526f7a6a1.js +69 -0
  153. package/dist/client/{1624.5694c64f5e45232c.js.map → 1624.98ead28526f7a6a1.js.map} +1 -1
  154. package/dist/client/1739.8793c189d4f57b38.js +8 -0
  155. package/dist/client/{1739.505aa54ed62222c8.js.map → 1739.8793c189d4f57b38.js.map} +1 -1
  156. package/dist/client/{1916.bc7551ab839d52f8.js → 1916.53595bf8d5201723.js} +3 -3
  157. package/dist/client/{1916.bc7551ab839d52f8.js.map → 1916.53595bf8d5201723.js.map} +1 -1
  158. package/dist/client/2254.85c84b41fe477e9f.css +2 -0
  159. package/dist/client/2254.85c84b41fe477e9f.css.map +1 -0
  160. package/dist/client/2299.15bde599f83bc9f8.js +2 -0
  161. package/dist/client/2299.15bde599f83bc9f8.js.map +1 -0
  162. package/dist/client/{2448.92286b4e96ad1c02.js → 2448.34e8a46d8ac913b9.js} +7 -7
  163. package/dist/client/2448.34e8a46d8ac913b9.js.map +1 -0
  164. package/dist/client/{2656.0009ef5e53d43860.js → 2656.9ffeb69f976e1ada.js} +3 -3
  165. package/dist/client/{2656.0009ef5e53d43860.js.map → 2656.9ffeb69f976e1ada.js.map} +1 -1
  166. package/dist/client/268.5b8cf50cd9481947.js +50 -0
  167. package/dist/client/268.5b8cf50cd9481947.js.map +1 -0
  168. package/dist/client/2826.d61ca617ff379ad4.js +29 -0
  169. package/dist/client/2826.d61ca617ff379ad4.js.map +1 -0
  170. package/dist/client/{9632.b317ca4ae5930b4a.js → 3536.38f4b1a8002b53e2.js} +30 -2
  171. package/dist/client/3536.38f4b1a8002b53e2.js.map +1 -0
  172. package/dist/client/{3580.bf3f2a7896833bd8.js → 3580.92db5b07a85b0961.js} +2 -2
  173. package/dist/client/{3580.bf3f2a7896833bd8.js.map → 3580.92db5b07a85b0961.js.map} +1 -1
  174. package/dist/client/37.d890a50de1313ae7.js +120 -0
  175. package/dist/client/37.d890a50de1313ae7.js.map +1 -0
  176. package/dist/client/{3769.d1f1fcf335099c33.js → 3769.f46716bd58921c06.js} +6 -5
  177. package/dist/client/3769.f46716bd58921c06.js.map +1 -0
  178. package/dist/client/3892.db79ccfcc2e8b5a2.js +5 -0
  179. package/dist/client/3892.db79ccfcc2e8b5a2.js.map +1 -0
  180. package/dist/client/391.947b429ccac6ca45.js +8 -0
  181. package/dist/client/391.947b429ccac6ca45.js.map +1 -0
  182. package/dist/client/{4036.5ca9997e4c034473.js → 4036.4aa9a690073ccbac.js} +11 -7
  183. package/dist/client/4036.4aa9a690073ccbac.js.map +1 -0
  184. package/dist/client/4045.ec4c143648ab2280.js +8 -0
  185. package/dist/client/4045.ec4c143648ab2280.js.map +1 -0
  186. package/dist/client/4531.5f4701b319065b2b.js +34 -0
  187. package/dist/client/4531.5f4701b319065b2b.js.map +1 -0
  188. package/dist/client/{476.0de6391161b814ad.js → 476.67faa1bd02f2479c.js} +3 -3
  189. package/dist/client/{476.0de6391161b814ad.js.map → 476.67faa1bd02f2479c.js.map} +1 -1
  190. package/dist/client/{4849.4da5f274175b7cc7.js → 4849.2d0d91db57dc6419.js} +2 -2
  191. package/dist/client/{4849.4da5f274175b7cc7.js.map → 4849.2d0d91db57dc6419.js.map} +1 -1
  192. package/dist/client/{5066.31235bae47282d5a.js → 5066.c3b69e4601465269.js} +9 -9
  193. package/dist/client/{5066.31235bae47282d5a.js.map → 5066.c3b69e4601465269.js.map} +1 -1
  194. package/dist/client/{533.518751bfb02cbcee.js → 533.43be64a8c12d5411.js} +2 -2
  195. package/dist/client/{533.518751bfb02cbcee.js.map → 533.43be64a8c12d5411.js.map} +1 -1
  196. package/dist/client/5531.ff59053d35a9ebc5.js +387 -0
  197. package/dist/client/{5531.3f07c9b4290520c7.js.map → 5531.ff59053d35a9ebc5.js.map} +1 -1
  198. package/dist/client/{5557.247c4c4c61d91b4d.js → 5557.3923ba7ade67d4c8.js} +4 -4
  199. package/dist/client/{5557.247c4c4c61d91b4d.js.map → 5557.3923ba7ade67d4c8.js.map} +1 -1
  200. package/dist/client/{5837.52bd8ccde0085adc.js → 5837.2173cfac5b28fb95.js} +2 -2
  201. package/dist/client/5837.2173cfac5b28fb95.js.map +1 -0
  202. package/dist/client/5911.7dd68675e0a4ff43.js +2 -0
  203. package/dist/client/5911.7dd68675e0a4ff43.js.map +1 -0
  204. package/dist/client/614.b7c7bcd4ee6e4f7d.css +2 -0
  205. package/dist/client/614.b7c7bcd4ee6e4f7d.css.map +1 -0
  206. package/dist/client/6213.ba167b80474036f0.js +20 -0
  207. package/dist/client/6213.ba167b80474036f0.js.map +1 -0
  208. package/dist/client/665.7d96ffb19066da27.js +34 -0
  209. package/dist/client/665.7d96ffb19066da27.js.map +1 -0
  210. package/dist/client/6681.51b917ef9762ead2.js +6 -0
  211. package/dist/client/{6681.4bc549fb34f3fd5c.js.map → 6681.51b917ef9762ead2.js.map} +1 -1
  212. package/dist/client/6955.3de7286d9ee3c36f.js +33 -0
  213. package/dist/client/6955.3de7286d9ee3c36f.js.map +1 -0
  214. package/dist/client/{7326.b1ad5a6bece08bb2.js → 7326.9d0d137e939223ba.js} +2 -2
  215. package/dist/client/7326.9d0d137e939223ba.js.map +1 -0
  216. package/dist/client/{736.c130ba990b1ed252.js → 736.0fa146c2a494e88c.js} +5 -5
  217. package/dist/client/{736.c130ba990b1ed252.js.map → 736.0fa146c2a494e88c.js.map} +1 -1
  218. package/dist/client/7461.7d6383069ad3bded.js +35 -0
  219. package/dist/client/7461.7d6383069ad3bded.js.map +1 -0
  220. package/dist/client/7509.c7697df525e5b425.js +9 -0
  221. package/dist/client/7509.c7697df525e5b425.js.map +1 -0
  222. package/dist/client/{7731.401da89d94c0e064.js → 7731.dab635045f8c8801.js} +2 -2
  223. package/dist/client/{7731.401da89d94c0e064.js.map → 7731.dab635045f8c8801.js.map} +1 -1
  224. package/dist/client/{7816.086a6f46f1339f10.js → 7816.fcae90f472f6a101.js} +2 -2
  225. package/dist/client/{7816.086a6f46f1339f10.js.map → 7816.fcae90f472f6a101.js.map} +1 -1
  226. package/dist/client/833.a99cc1ff95a9361c.js +5 -0
  227. package/dist/client/833.a99cc1ff95a9361c.js.map +1 -0
  228. package/dist/client/{8468.add3c4feb6c9e926.js → 8468.f45cbbf88e617172.js} +3 -3
  229. package/dist/client/{8468.add3c4feb6c9e926.js.map → 8468.f45cbbf88e617172.js.map} +1 -1
  230. package/dist/client/{8483.e69da156837fde23.js → 8483.42cb8809ffb7c809.js} +3 -3
  231. package/dist/client/{8483.e69da156837fde23.js.map → 8483.42cb8809ffb7c809.js.map} +1 -1
  232. package/dist/client/{8551.4cf05a456e8b9b36.js → 8551.88765e00cf64cda8.js} +2 -2
  233. package/dist/client/{8551.4cf05a456e8b9b36.js.map → 8551.88765e00cf64cda8.js.map} +1 -1
  234. package/dist/client/{8684.538d49e436a77c37.js → 8684.9d7a1ac15f75f143.js} +5 -5
  235. package/dist/client/{8684.538d49e436a77c37.js.map → 8684.9d7a1ac15f75f143.js.map} +1 -1
  236. package/dist/client/8896.c876205851967073.js +9 -0
  237. package/dist/client/8896.c876205851967073.js.map +1 -0
  238. package/dist/client/{8911.e1fd0ac2f979c2ea.js → 8911.74685697a6189123.js} +7 -7
  239. package/dist/client/8911.74685697a6189123.js.map +1 -0
  240. package/dist/client/9021.3d43ecdc365948b8.js +16 -0
  241. package/dist/client/9021.3d43ecdc365948b8.js.map +1 -0
  242. package/dist/client/917.f2551a4b63ec4d86.js +17 -0
  243. package/dist/client/917.f2551a4b63ec4d86.js.map +1 -0
  244. package/dist/client/9222.a2d629b05b5c3c7e.js +104 -0
  245. package/dist/client/9222.a2d629b05b5c3c7e.js.LICENSE.txt +5 -0
  246. package/dist/client/9222.a2d629b05b5c3c7e.js.map +1 -0
  247. package/dist/client/chart-no-axes-combined.aee09a7064cb8b35.svg +1 -0
  248. package/dist/client/{circle-alert.4199b283585ef0bb.svg → circle-play.6ed4ac1fb3c93a04.svg} +1 -1
  249. package/dist/client/{curriculum-about-covered.74e453cf7e1a86c2.svg → curriculum-about-covered.a0e620d9fa0a96bb.svg} +1 -1
  250. package/dist/client/{curriculum-about-detail.515f645950e2300b.svg → curriculum-about-detail.73feb705e269ebbe.svg} +1 -1
  251. package/dist/client/{curriculum-about-educators.91685cbbd58c65fb.svg → curriculum-about-educators.03744c34dabd5fe7.svg} +1 -1
  252. package/dist/client/{curriculum-about-not.42caac16e07477b5.svg → curriculum-about-not.aa3c2baa11be115d.svg} +1 -1
  253. package/dist/client/{curriculum-about-students.36ca88cba5f00272.svg → curriculum-about-students.842af9608002c05a.svg} +1 -1
  254. package/dist/client/{curriculum-bullet.934e76f0055c7737.svg → curriculum-bullet.ae8de1d4f7e37953.svg} +1 -1
  255. package/dist/client/{curriculum-landing-about-beginner.c283306531a0a760.svg → curriculum-landing-about-beginner.9603b098f49dfb52.svg} +1 -1
  256. package/dist/client/{curriculum-landing-about-bullet.329a46667f2b7b1c.svg → curriculum-landing-about-bullet.1a31ffce2d5917cb.svg} +1 -1
  257. package/dist/client/{curriculum-landing-about-free.860c02f993720011.svg → curriculum-landing-about-free.1ff3ec55692670ba.svg} +1 -1
  258. package/dist/client/{curriculum-landing-about-pace.caf53bc7642d2d9e.svg → curriculum-landing-about-pace.04fd0a480b4ef342.svg} +1 -1
  259. package/dist/client/{curriculum-landing-arrow.37d9469e2da628fb.svg → curriculum-landing-arrow.b4d5ba21e3dc087e.svg} +1 -1
  260. package/dist/client/{curriculum-landing-started-advanced.6aa084114d4a009d.svg → curriculum-landing-started-advanced.bd07b9246e350d6f.svg} +1 -1
  261. package/dist/client/{curriculum-landing-started-beginner.684ee16fbad28594.svg → curriculum-landing-started-beginner.62cf58049310b5c1.svg} +1 -1
  262. package/dist/client/{curriculum-landing-started-educator.1fc04ca1f8ce8d38.svg → curriculum-landing-started-educator.779ce85811a81d19.svg} +1 -1
  263. package/dist/client/{curriculum-landing-started-employment.ad9634ce6c19f3ba.svg → curriculum-landing-started-employment.4e7b977d45493058.svg} +1 -1
  264. package/dist/client/{curriculum-mdn-resource.f452724542f874b8.svg → curriculum-mdn-resource.335ee2e480d302fb.svg} +1 -1
  265. package/dist/client/{curriculum-partner-bg.247900de90ec7d1e.svg → curriculum-partner-bg.70de155df588311a.svg} +1 -1
  266. package/dist/client/{curriculum-scrim-bg.66afaab49246fbd9.svg → curriculum-scrim-bg.29a27117721ff3e9.svg} +1 -1
  267. package/dist/client/index.31463704d14e154c.js +260 -0
  268. package/dist/client/index.31463704d14e154c.js.LICENSE.txt +25 -0
  269. package/dist/client/index.31463704d14e154c.js.map +1 -0
  270. package/dist/client/jetbrains-mono-cyrillic.577e793cdf179ae1.woff2 +0 -0
  271. package/dist/client/jetbrains-mono-italic-cyrillic.8d00711fdb1702e0.woff2 +0 -0
  272. package/dist/client/jetbrains-mono-italic-latin-extended.c25d5e1f309ed948.woff2 +0 -0
  273. package/dist/client/jetbrains-mono-italic-latin.55b330522e5e3ed9.woff2 +0 -0
  274. package/dist/client/jetbrains-mono-latin-extended.01c891f9c832ce28.woff2 +0 -0
  275. package/dist/client/jetbrains-mono-latin.119994ed445212c7.woff2 +0 -0
  276. package/dist/client/mdn-m.70aac857e4a908d0.svg +1 -0
  277. package/dist/client/{runtime.51020603a07b972d.js → runtime.ee03d594ff24ae70.js} +2 -2
  278. package/dist/client/runtime.ee03d594ff24ae70.js.map +1 -0
  279. package/dist/client/shield-check.07bdc37f20ac5cc6.svg +1 -0
  280. package/dist/client/stats.json +1096 -1024
  281. package/dist/client/styles-a11y-menu.5796ee87cb69f93f.css +2 -0
  282. package/dist/client/styles-a11y-menu.5796ee87cb69f93f.css.map +1 -0
  283. package/dist/client/styles-a11y-menu.c408da1c50de7848.js +1 -0
  284. package/dist/client/styles-advertising.4c00484729f959ad.js +1 -0
  285. package/dist/client/{styles-advertising.c54670419b34708a.css → styles-advertising.c4692f68b3c61df1.css} +2 -2
  286. package/dist/client/{styles-advertising.c54670419b34708a.css.map → styles-advertising.c4692f68b3c61df1.css.map} +1 -1
  287. package/dist/client/styles-article-footer.81ae18c89fc527dc.css +2 -0
  288. package/dist/client/styles-article-footer.81ae18c89fc527dc.css.map +1 -0
  289. package/dist/client/styles-article-footer.f591a23b879db7bc.js +1 -0
  290. package/dist/client/styles-banner.cce5a46592f9ae9c.js +1 -0
  291. package/dist/client/{styles-baseline-indicator.32a52f7b51085fbb.css → styles-baseline-indicator.083aba7301c6f745.css} +2 -2
  292. package/dist/client/styles-baseline-indicator.083aba7301c6f745.css.map +1 -0
  293. package/dist/client/styles-baseline-indicator.35315666a6ff6562.js +1 -0
  294. package/dist/client/styles-blog-index.65525134178d64fd.js +1 -0
  295. package/dist/client/styles-blog-index.acbe792e1ec96930.css +2 -0
  296. package/dist/client/styles-blog-index.acbe792e1ec96930.css.map +1 -0
  297. package/dist/client/styles-blog-post.0cc5813f0a44aff0.js +1 -0
  298. package/dist/client/styles-blog-post.5085aa38dc1ab3a3.css +2 -0
  299. package/dist/client/styles-blog-post.5085aa38dc1ab3a3.css.map +1 -0
  300. package/dist/client/styles-breadcrumbs-bar.740212452ad4a93e.js +1 -0
  301. package/dist/client/{styles-breadcrumbs-bar.b7a94abe36578bab.css → styles-breadcrumbs-bar.e2fa6dfb04a38166.css} +2 -2
  302. package/dist/client/{styles-breadcrumbs-bar.b7a94abe36578bab.css.map → styles-breadcrumbs-bar.e2fa6dfb04a38166.css.map} +1 -1
  303. package/dist/client/{styles-breadcrumbs.d07ccd5520eeea01.css → styles-breadcrumbs.0afde562052673c5.css} +2 -2
  304. package/dist/client/{styles-breadcrumbs.d07ccd5520eeea01.css.map → styles-breadcrumbs.0afde562052673c5.css.map} +1 -1
  305. package/dist/client/styles-breadcrumbs.3b39fd6a3c2edb2e.js +1 -0
  306. package/dist/client/styles-button.a58118f8ded7e527.js +1 -0
  307. package/dist/client/styles-content-section.06ab08df9b9e047e.js +1 -0
  308. package/dist/client/styles-content-section.ffa19ece6d4fa70f.css +2 -0
  309. package/dist/client/styles-content-section.ffa19ece6d4fa70f.css.map +1 -0
  310. package/dist/client/styles-contributor-spotlight.38657357f29e301d.css +2 -0
  311. package/dist/client/styles-contributor-spotlight.38657357f29e301d.css.map +1 -0
  312. package/dist/client/styles-contributor-spotlight.5303aa09b91c2b0f.js +1 -0
  313. package/dist/client/styles-curriculum-about.75e3406bfe012d87.css +2 -0
  314. package/dist/client/styles-curriculum-about.75e3406bfe012d87.css.map +1 -0
  315. package/dist/client/styles-curriculum-about.c7d034c5eb1cedfc.js +1 -0
  316. package/dist/client/styles-curriculum-default.425c715d690a611c.js +1 -0
  317. package/dist/client/styles-curriculum-default.ceb6f07d1ba3a1fe.css +2 -0
  318. package/dist/client/styles-curriculum-default.ceb6f07d1ba3a1fe.css.map +1 -0
  319. package/dist/client/styles-curriculum-landing.1558840404f90c97.js +1 -0
  320. package/dist/client/styles-curriculum-landing.4c266be210279754.css +2 -0
  321. package/dist/client/styles-curriculum-landing.4c266be210279754.css.map +1 -0
  322. package/dist/client/styles-curriculum-module.7e5cd517e846d594.js +1 -0
  323. package/dist/client/styles-curriculum-module.986c101af5734725.css +2 -0
  324. package/dist/client/styles-curriculum-module.986c101af5734725.css.map +1 -0
  325. package/dist/client/styles-curriculum-overview.4c7cb02c1ddc853e.js +1 -0
  326. package/dist/client/styles-curriculum-overview.5e1cf930403c07b3.css +2 -0
  327. package/dist/client/styles-curriculum-overview.5e1cf930403c07b3.css.map +1 -0
  328. package/dist/client/styles-featured-articles.b4ecc71ab736bd5b.css +2 -0
  329. package/dist/client/styles-featured-articles.b4ecc71ab736bd5b.css.map +1 -0
  330. package/dist/client/styles-featured-articles.e307bb8142f33739.js +1 -0
  331. package/dist/client/styles-footer.a2850e459e2d290b.css +2 -0
  332. package/dist/client/{styles-footer.c1a53f0a58f04928.css.map → styles-footer.a2850e459e2d290b.css.map} +1 -1
  333. package/dist/client/styles-footer.c29033543af832fb.js +1 -0
  334. package/dist/client/styles-generic-about.2d4dc610496035b0.js +1 -0
  335. package/dist/client/styles-generic-about.766241910cf1bfdf.css +2 -0
  336. package/dist/client/styles-generic-about.766241910cf1bfdf.css.map +1 -0
  337. package/dist/client/styles-generic-community.76b2cea1e9b36907.js +1 -0
  338. package/dist/client/styles-generic-community.aa93fe32626f89a4.css +2 -0
  339. package/dist/client/styles-generic-community.aa93fe32626f89a4.css.map +1 -0
  340. package/dist/client/{styles-generic-content.7960b980b98f1d3d.css → styles-generic-content.3c8089706edb022d.css} +2 -2
  341. package/dist/client/{styles-generic-content.7960b980b98f1d3d.css.map → styles-generic-content.3c8089706edb022d.css.map} +1 -1
  342. package/dist/client/styles-generic-content.95822f3a7d72b2af.js +1 -0
  343. package/dist/client/styles-generic-layout.42a5e62407bd0066.css +2 -0
  344. package/dist/client/{styles-generic-layout.55441b1a560f5c9f.css.map → styles-generic-layout.42a5e62407bd0066.css.map} +1 -1
  345. package/dist/client/styles-generic-layout.e3b1cbc7db109acc.js +1 -0
  346. package/dist/client/styles-generic-sidebar.2e998de436f774c4.css +2 -0
  347. package/dist/client/styles-generic-sidebar.2e998de436f774c4.css.map +1 -0
  348. package/dist/client/styles-generic-sidebar.9767d319bbbde061.js +1 -0
  349. package/dist/client/styles-generic-toc.109e07ffeb20bc67.css +2 -0
  350. package/dist/client/styles-generic-toc.109e07ffeb20bc67.css.map +1 -0
  351. package/dist/client/styles-generic-toc.56e46052fca1042a.js +1 -0
  352. package/dist/client/styles-global.50c705928b5966d2.css +2 -0
  353. package/dist/client/styles-global.50c705928b5966d2.css.map +1 -0
  354. package/dist/client/styles-global.5928df920ab8d790.js +1 -0
  355. package/dist/client/styles-heading-anchor.0eec5185ab9425b7.css +2 -0
  356. package/dist/client/{styles-heading-anchor.f2760897211efe98.css.map → styles-heading-anchor.0eec5185ab9425b7.css.map} +1 -1
  357. package/dist/client/styles-heading-anchor.69440b0832b0c7b6.js +1 -0
  358. package/dist/client/styles-homepage-body.a1dd591dfd38a0e2.js +1 -0
  359. package/dist/client/{styles-homepage-contributor-spotlight.f02bdd82c7536b72.css → styles-homepage-contributor-spotlight.38935642cba8718d.css} +2 -2
  360. package/dist/client/{styles-homepage-contributor-spotlight.f02bdd82c7536b72.css.map → styles-homepage-contributor-spotlight.38935642cba8718d.css.map} +1 -1
  361. package/dist/client/styles-homepage-contributor-spotlight.a872f7a5144621ce.js +1 -0
  362. package/dist/client/styles-homepage-footer.56ccee76430fb4b6.js +1 -0
  363. package/dist/client/styles-homepage-header.ef7007190d01e72b.js +1 -0
  364. package/dist/client/styles-homepage-hero.db4057884586bcc0.js +1 -0
  365. package/dist/client/styles-homepage.643e215e9b541f48.js +1 -0
  366. package/dist/client/styles-latest-news.b28826e707e5a793.js +1 -0
  367. package/dist/client/styles-latest-news.ef3b9e57333a87bc.css +2 -0
  368. package/dist/client/styles-latest-news.ef3b9e57333a87bc.css.map +1 -0
  369. package/dist/client/styles-left-sidebar.07f68fb381233e5e.css +2 -0
  370. package/dist/client/styles-left-sidebar.07f68fb381233e5e.css.map +1 -0
  371. package/dist/client/styles-left-sidebar.689072b681b6085c.js +1 -0
  372. package/dist/client/styles-logo.5fe2004c01665043.js +1 -0
  373. package/dist/client/styles-logo.f9c13d56f40d50b6.css +2 -0
  374. package/dist/client/styles-logo.f9c13d56f40d50b6.css.map +1 -0
  375. package/dist/client/styles-mandala.39843b917e3341c1.js +1 -0
  376. package/dist/client/styles-mandala.8fbfeb0567dbde40.css +2 -0
  377. package/dist/client/styles-mandala.8fbfeb0567dbde40.css.map +1 -0
  378. package/dist/client/styles-menu.0df94f3d4546f4e2.js +1 -0
  379. package/dist/client/styles-menu.5193bf2642ae7d64.css +2 -0
  380. package/dist/client/styles-menu.5193bf2642ae7d64.css.map +1 -0
  381. package/dist/client/styles-navigation.013b4a4ed330892a.css +2 -0
  382. package/dist/client/styles-navigation.013b4a4ed330892a.css.map +1 -0
  383. package/dist/client/styles-navigation.f10f27bc66c78348.js +1 -0
  384. package/dist/client/styles-not-found.db6d6367152f676d.js +1 -0
  385. package/dist/client/styles-observatory-landing.28dd60cf0de05bec.js +1 -0
  386. package/dist/client/styles-observatory-landing.7b47ee0004877825.css +2 -0
  387. package/dist/client/styles-observatory-landing.7b47ee0004877825.css.map +1 -0
  388. package/dist/client/styles-observatory-results.36b6175e7444ec4e.css +2 -0
  389. package/dist/client/styles-observatory-results.36b6175e7444ec4e.css.map +1 -0
  390. package/dist/client/styles-observatory-results.7ce6d37475f9cf58.js +1 -0
  391. package/dist/client/styles-page-layout.0d53ebc97d7b7bf1.js +1 -0
  392. package/dist/client/styles-page-layout.e52a43c97f04cf90.css +2 -0
  393. package/dist/client/{styles-page-layout.5db9be57df19de0c.css.map → styles-page-layout.e52a43c97f04cf90.css.map} +1 -1
  394. package/dist/client/styles-pagination.19bf90db76d7d8d3.css +2 -0
  395. package/dist/client/{styles-pagination.0b3aa3fd6f6d3808.css.map → styles-pagination.19bf90db76d7d8d3.css.map} +1 -1
  396. package/dist/client/styles-pagination.e6fa33b9eadd8ab2.js +1 -0
  397. package/dist/client/styles-playground.59775225856ba2c6.js +1 -0
  398. package/dist/client/styles-recent-contributions.c51e066b59d22fca.js +1 -0
  399. package/dist/client/styles-reference-layout.0ab1a4d92d4a0966.css +2 -0
  400. package/dist/client/styles-reference-layout.0ab1a4d92d4a0966.css.map +1 -0
  401. package/dist/client/styles-reference-layout.218edbd3288fad71.js +1 -0
  402. package/dist/client/styles-reference-toc.67439c41e5f07bef.js +1 -0
  403. package/dist/client/{styles-reference-toc.5ce4f97dbe6e3ed0.css → styles-reference-toc.9b9bd019efd16b86.css} +2 -2
  404. package/dist/client/{styles-reference-toc.5ce4f97dbe6e3ed0.css.map → styles-reference-toc.9b9bd019efd16b86.css.map} +1 -1
  405. package/dist/client/styles-sandbox.22c29067838f22d9.js +1 -0
  406. package/dist/client/styles-site-search.5d4b622a11b82915.js +1 -0
  407. package/dist/client/styles-site-search.ec3b6780533a8750.css +2 -0
  408. package/dist/client/{styles-site-search.cf345ef99e0d06b5.css.map → styles-site-search.ec3b6780533a8750.css.map} +1 -1
  409. package/dist/client/styles-translation-banner.b923aed537f60120.js +1 -0
  410. package/dist/client/styles-writer-toolbar.00468688f6144393.js +1 -0
  411. package/dist/client/styles-writer-toolbar.70bdeddd3734ab11.css +2 -0
  412. package/dist/client/styles-writer-toolbar.70bdeddd3734ab11.css.map +1 -0
  413. package/dist/client/styles.7fb7069c86aa338c.js +2 -0
  414. package/dist/client/styles.7fb7069c86aa338c.js.map +1 -0
  415. package/dist/client/users.f7e6f1f213744762.svg +1 -0
  416. package/dist/legacy/{1284.0939e1a7de12c23c.js → 1284.9609d9ed70761e2f.js} +3 -3
  417. package/dist/legacy/{1284.0939e1a7de12c23c.js.map → 1284.9609d9ed70761e2f.js.map} +1 -1
  418. package/dist/legacy/3957.798f0651121f0fa7.js.map +1 -1
  419. package/dist/legacy/{7664.eee0fe67e04785f4.js → 7664.7bf14ff753e36b72.js} +3 -3
  420. package/dist/legacy/7664.7bf14ff753e36b72.js.map +1 -0
  421. package/dist/legacy/{8716.9fde41ad50c3078d.js → 8716.0a9d049bf166f65a.js} +7 -7
  422. package/dist/legacy/{8716.9fde41ad50c3078d.js.map → 8716.0a9d049bf166f65a.js.map} +1 -1
  423. package/dist/legacy/afree.da56b83d257902e0.png +0 -0
  424. package/dist/legacy/{index.9db2264bb6151226.css → index.92ea4d5b7af91171.css} +2 -2
  425. package/dist/legacy/index.92ea4d5b7af91171.css.map +1 -0
  426. package/dist/legacy/{index.b760891bfcc63977.js → index.dd25b33b92ab6c72.js} +5 -5
  427. package/dist/legacy/index.dd25b33b92ab6c72.js.map +1 -0
  428. package/dist/legacy/stats.json +12 -12
  429. package/dist/ssr/index.js +483 -485
  430. package/dist/ssr/index.js.map +1 -1
  431. package/dist/ssr/results-icon.b469eb939df034e7.svg +1 -0
  432. package/dist/ssr/stats.json +54 -46
  433. package/dist/ssr/summary-icon.eff7a61e59b7e02f.svg +1 -0
  434. package/entry.client.js +1 -1
  435. package/entry.ssr.js +3 -4
  436. package/hooks/dialog-closedby.js +42 -0
  437. package/l10n/de.ftl +2 -2
  438. package/l10n/en-US.ftl +10 -10
  439. package/legacy/index.tsx +1 -0
  440. package/legacy/legacy.css +5 -0
  441. package/package.json +22 -21
  442. package/rspack.config.js +27 -11
  443. package/server.js +37 -3
  444. package/svgo.config.js +22 -11
  445. package/types/element-map.d.ts +1 -0
  446. package/types/fred.ts +5 -1
  447. package/components/css-formal-syntax/index.css +0 -10
  448. package/components/observatory/index.css +0 -406
  449. package/components/observatory-landing/faq.js +0 -16
  450. package/components/observatory-landing/feedback.js +0 -16
  451. package/dist/client/1197.25090f81ab4208bc.css +0 -32
  452. package/dist/client/1197.25090f81ab4208bc.css.map +0 -1
  453. package/dist/client/1624.5694c64f5e45232c.js +0 -69
  454. package/dist/client/1739.505aa54ed62222c8.js +0 -8
  455. package/dist/client/2254.5fbfe2d0124ff3ba.css +0 -2
  456. package/dist/client/2254.5fbfe2d0124ff3ba.css.map +0 -1
  457. package/dist/client/2448.92286b4e96ad1c02.js.map +0 -1
  458. package/dist/client/2826.2162e19b0f72cf75.js +0 -29
  459. package/dist/client/2826.2162e19b0f72cf75.js.map +0 -1
  460. package/dist/client/3536.d17eba9caa4089c1.js +0 -30
  461. package/dist/client/3536.d17eba9caa4089c1.js.map +0 -1
  462. package/dist/client/37.feff9590370f461a.js +0 -102
  463. package/dist/client/37.feff9590370f461a.js.map +0 -1
  464. package/dist/client/3769.d1f1fcf335099c33.js.map +0 -1
  465. package/dist/client/3892.62b28110dbb3645e.js +0 -5
  466. package/dist/client/3892.62b28110dbb3645e.js.map +0 -1
  467. package/dist/client/391.ead0b358d96c9c13.js +0 -8
  468. package/dist/client/391.ead0b358d96c9c13.js.map +0 -1
  469. package/dist/client/4036.5ca9997e4c034473.js.map +0 -1
  470. package/dist/client/4045.c0fd898eab0b2a5c.js +0 -8
  471. package/dist/client/4045.c0fd898eab0b2a5c.js.map +0 -1
  472. package/dist/client/4531.4ae011f8a64a2b27.js +0 -34
  473. package/dist/client/4531.4ae011f8a64a2b27.js.map +0 -1
  474. package/dist/client/5531.3f07c9b4290520c7.js +0 -387
  475. package/dist/client/5837.52bd8ccde0085adc.js.map +0 -1
  476. package/dist/client/614.01075c8e848f77c4.css +0 -2
  477. package/dist/client/614.01075c8e848f77c4.css.map +0 -1
  478. package/dist/client/6213.32f53c1c3ef65496.js +0 -20
  479. package/dist/client/6213.32f53c1c3ef65496.js.map +0 -1
  480. package/dist/client/665.bfa5abb72f818c34.js +0 -34
  481. package/dist/client/665.bfa5abb72f818c34.js.map +0 -1
  482. package/dist/client/6681.4bc549fb34f3fd5c.js +0 -6
  483. package/dist/client/6955.90a316f179d37d80.js +0 -52
  484. package/dist/client/6955.90a316f179d37d80.js.map +0 -1
  485. package/dist/client/7326.b1ad5a6bece08bb2.js.map +0 -1
  486. package/dist/client/7345.6d89013575f169db.js +0 -16
  487. package/dist/client/7345.6d89013575f169db.js.map +0 -1
  488. package/dist/client/7461.c7551ade83fa6056.js +0 -35
  489. package/dist/client/7461.c7551ade83fa6056.js.map +0 -1
  490. package/dist/client/7509.780e429ccb3e9290.js +0 -9
  491. package/dist/client/7509.780e429ccb3e9290.js.map +0 -1
  492. package/dist/client/781.389e02e257b52721.css +0 -2
  493. package/dist/client/781.389e02e257b52721.css.map +0 -1
  494. package/dist/client/7898.7fd3ac2396a8dd7b.js +0 -45
  495. package/dist/client/7898.7fd3ac2396a8dd7b.js.map +0 -1
  496. package/dist/client/8877.6b7cc9370ff77f02.js +0 -2
  497. package/dist/client/8877.6b7cc9370ff77f02.js.map +0 -1
  498. package/dist/client/8896.85df788778cc02ca.js +0 -9
  499. package/dist/client/8896.85df788778cc02ca.js.map +0 -1
  500. package/dist/client/8911.e1fd0ac2f979c2ea.js.map +0 -1
  501. package/dist/client/917.f2371f7a8ef08c84.js +0 -17
  502. package/dist/client/917.f2371f7a8ef08c84.js.map +0 -1
  503. package/dist/client/9222.f3820fec7e0a91be.js +0 -104
  504. package/dist/client/9222.f3820fec7e0a91be.js.map +0 -1
  505. package/dist/client/9632.b317ca4ae5930b4a.js.map +0 -1
  506. package/dist/client/index.e36c34deca671725.js +0 -251
  507. package/dist/client/index.e36c34deca671725.js.map +0 -1
  508. package/dist/client/jetbrains-mono-cyrillic.4be0050294dbaee4.woff2 +0 -0
  509. package/dist/client/jetbrains-mono-italic-cyrillic.789710e9fe5a2b03.woff2 +0 -0
  510. package/dist/client/jetbrains-mono-italic-latin-extended.58430489c22fda09.woff2 +0 -0
  511. package/dist/client/jetbrains-mono-italic-latin.80ad93ea1dcec528.woff2 +0 -0
  512. package/dist/client/jetbrains-mono-latin-extended.2b8ab8f35e622fdb.woff2 +0 -0
  513. package/dist/client/jetbrains-mono-latin.eaa3472268346b6c.woff2 +0 -0
  514. package/dist/client/runtime.51020603a07b972d.js.map +0 -1
  515. package/dist/client/styles-a11y-menu.53797029a4c05806.css +0 -2
  516. package/dist/client/styles-a11y-menu.53797029a4c05806.css.map +0 -1
  517. package/dist/client/styles-a11y-menu.8c2ae6bc250fdde3.js +0 -1
  518. package/dist/client/styles-advertising.f01a816ffb81826d.js +0 -1
  519. package/dist/client/styles-article-footer.3bc45ecc7223c0ee.css +0 -2
  520. package/dist/client/styles-article-footer.3bc45ecc7223c0ee.css.map +0 -1
  521. package/dist/client/styles-article-footer.abc86d1bc28dbbea.js +0 -1
  522. package/dist/client/styles-banner.dd24262bb896879a.js +0 -1
  523. package/dist/client/styles-baseline-indicator.26595fbb926e3339.js +0 -1
  524. package/dist/client/styles-baseline-indicator.32a52f7b51085fbb.css.map +0 -1
  525. package/dist/client/styles-blog-index.7af1563c6077a7be.css +0 -2
  526. package/dist/client/styles-blog-index.7af1563c6077a7be.css.map +0 -1
  527. package/dist/client/styles-blog-index.805cf1995d84466a.js +0 -1
  528. package/dist/client/styles-blog-post.5824db4f15723a68.css +0 -2
  529. package/dist/client/styles-blog-post.5824db4f15723a68.css.map +0 -1
  530. package/dist/client/styles-blog-post.87f4fe5450147ce8.js +0 -1
  531. package/dist/client/styles-breadcrumbs-bar.474628c11d128ace.js +0 -1
  532. package/dist/client/styles-breadcrumbs.b0241eed8398fe84.js +0 -1
  533. package/dist/client/styles-button.bd90715982da863b.js +0 -1
  534. package/dist/client/styles-content-section.a1f8a5f77270d1dc.js +0 -1
  535. package/dist/client/styles-content-section.f47b61c45a723af0.css +0 -2
  536. package/dist/client/styles-content-section.f47b61c45a723af0.css.map +0 -1
  537. package/dist/client/styles-contributor-spotlight.a77d55cfef159e66.css +0 -2
  538. package/dist/client/styles-contributor-spotlight.a77d55cfef159e66.css.map +0 -1
  539. package/dist/client/styles-contributor-spotlight.a992b1d366637c5d.js +0 -1
  540. package/dist/client/styles-curriculum-about.4b80aa2f2b88e8e4.js +0 -1
  541. package/dist/client/styles-curriculum-about.b8d113b14323c909.css +0 -2
  542. package/dist/client/styles-curriculum-about.b8d113b14323c909.css.map +0 -1
  543. package/dist/client/styles-curriculum-default.190eba828fd99e0a.js +0 -1
  544. package/dist/client/styles-curriculum-default.ef46db3751d8e999.css +0 -0
  545. package/dist/client/styles-curriculum-landing.56209b30561d82e0.css +0 -2
  546. package/dist/client/styles-curriculum-landing.56209b30561d82e0.css.map +0 -1
  547. package/dist/client/styles-curriculum-landing.e73c9557dd2057aa.js +0 -1
  548. package/dist/client/styles-curriculum-module.7fc982bc6793fa48.js +0 -1
  549. package/dist/client/styles-curriculum-module.c7271eb90af85eba.css +0 -2
  550. package/dist/client/styles-curriculum-module.c7271eb90af85eba.css.map +0 -1
  551. package/dist/client/styles-curriculum-overview.d00ecdc305f40125.js +0 -1
  552. package/dist/client/styles-curriculum-overview.ef46db3751d8e999.css +0 -0
  553. package/dist/client/styles-featured-articles.27e767c8b538f066.js +0 -1
  554. package/dist/client/styles-featured-articles.c518f93ad0470cdf.css +0 -2
  555. package/dist/client/styles-featured-articles.c518f93ad0470cdf.css.map +0 -1
  556. package/dist/client/styles-footer.c1a53f0a58f04928.css +0 -2
  557. package/dist/client/styles-footer.e86ec0a935d5937f.js +0 -1
  558. package/dist/client/styles-generic-about.27a13c39db15963c.js +0 -1
  559. package/dist/client/styles-generic-about.481f176f22ba0def.css +0 -2
  560. package/dist/client/styles-generic-about.481f176f22ba0def.css.map +0 -1
  561. package/dist/client/styles-generic-community.44405e7e3938a4b6.js +0 -1
  562. package/dist/client/styles-generic-community.ddbcb9e0488bf017.css +0 -2
  563. package/dist/client/styles-generic-community.ddbcb9e0488bf017.css.map +0 -1
  564. package/dist/client/styles-generic-content.a2ddd6aac780a65f.js +0 -1
  565. package/dist/client/styles-generic-layout.55441b1a560f5c9f.css +0 -2
  566. package/dist/client/styles-generic-layout.670f75c4f806be84.js +0 -1
  567. package/dist/client/styles-generic-sidebar.515ed6dc89aec542.css +0 -2
  568. package/dist/client/styles-generic-sidebar.515ed6dc89aec542.css.map +0 -1
  569. package/dist/client/styles-generic-sidebar.d1528b01acb49222.js +0 -1
  570. package/dist/client/styles-generic-toc.88e45e1e72c77b73.css +0 -2
  571. package/dist/client/styles-generic-toc.88e45e1e72c77b73.css.map +0 -1
  572. package/dist/client/styles-generic-toc.db854e6e0376fb6b.js +0 -1
  573. package/dist/client/styles-global.698ebe57a5418ca2.css +0 -2
  574. package/dist/client/styles-global.698ebe57a5418ca2.css.map +0 -1
  575. package/dist/client/styles-global.cb63a51fc1146957.js +0 -1
  576. package/dist/client/styles-heading-anchor.6ffff34f5421dc9f.js +0 -1
  577. package/dist/client/styles-heading-anchor.f2760897211efe98.css +0 -2
  578. package/dist/client/styles-homepage-body.4a9eaf99a6d5a434.js +0 -1
  579. package/dist/client/styles-homepage-contributor-spotlight.a91a262ee949a587.js +0 -1
  580. package/dist/client/styles-homepage-footer.cddd4004e597dbdf.js +0 -1
  581. package/dist/client/styles-homepage-header.6fc6295b2124ce59.js +0 -1
  582. package/dist/client/styles-homepage-hero.d56f468fb0364b60.js +0 -1
  583. package/dist/client/styles-homepage.be456abdb86e4bd2.js +0 -1
  584. package/dist/client/styles-latest-news.1b5fd7a95688fea4.css +0 -2
  585. package/dist/client/styles-latest-news.1b5fd7a95688fea4.css.map +0 -1
  586. package/dist/client/styles-latest-news.f725dd4127faabc2.js +0 -1
  587. package/dist/client/styles-left-sidebar.135a5bc6ad04c4f0.css +0 -2
  588. package/dist/client/styles-left-sidebar.135a5bc6ad04c4f0.css.map +0 -1
  589. package/dist/client/styles-left-sidebar.6cdadac4a1db951d.js +0 -1
  590. package/dist/client/styles-logo.8e7830628a9d7ef5.js +0 -1
  591. package/dist/client/styles-logo.a89a79f82f933ef6.css +0 -2
  592. package/dist/client/styles-logo.a89a79f82f933ef6.css.map +0 -1
  593. package/dist/client/styles-mandala.41af6b0b37aa7987.js +0 -1
  594. package/dist/client/styles-mandala.96281d90e09ea84c.css +0 -2
  595. package/dist/client/styles-mandala.96281d90e09ea84c.css.map +0 -1
  596. package/dist/client/styles-menu.786218f8a3e51b45.js +0 -1
  597. package/dist/client/styles-menu.d6b6e63ef2bff0d6.css +0 -2
  598. package/dist/client/styles-menu.d6b6e63ef2bff0d6.css.map +0 -1
  599. package/dist/client/styles-navigation.94adc2be697cca49.css +0 -2
  600. package/dist/client/styles-navigation.94adc2be697cca49.css.map +0 -1
  601. package/dist/client/styles-navigation.fac8722caf14abc8.js +0 -1
  602. package/dist/client/styles-not-found.f42949546ffd210c.js +0 -1
  603. package/dist/client/styles-observatory-landing.994044845e174ebc.js +0 -1
  604. package/dist/client/styles-observatory-landing.ef46db3751d8e999.css +0 -0
  605. package/dist/client/styles-observatory-results.2ebe1e1263bf9901.js +0 -1
  606. package/dist/client/styles-observatory-results.ef46db3751d8e999.css +0 -0
  607. package/dist/client/styles-page-layout.17e57aa7087c3c14.js +0 -1
  608. package/dist/client/styles-page-layout.5db9be57df19de0c.css +0 -2
  609. package/dist/client/styles-pagination.0b3aa3fd6f6d3808.css +0 -2
  610. package/dist/client/styles-pagination.8e0e077c056abb08.js +0 -1
  611. package/dist/client/styles-playground.6ba82a762ed428cd.js +0 -1
  612. package/dist/client/styles-recent-contributions.049ea82f38aea973.js +0 -1
  613. package/dist/client/styles-reference-layout.3fdc304c65153216.css +0 -2
  614. package/dist/client/styles-reference-layout.3fdc304c65153216.css.map +0 -1
  615. package/dist/client/styles-reference-layout.dffb8a58fa542929.js +0 -1
  616. package/dist/client/styles-reference-toc.885940cc1b62f05f.js +0 -1
  617. package/dist/client/styles-sandbox.28b391e75fd280b4.js +0 -1
  618. package/dist/client/styles-site-search.442cfc8fc77298a8.js +0 -1
  619. package/dist/client/styles-site-search.cf345ef99e0d06b5.css +0 -2
  620. package/dist/client/styles-translation-banner.ddf203bc7bb2e1bc.js +0 -1
  621. package/dist/client/styles.23fb47137258e781.js +0 -2
  622. package/dist/client/styles.23fb47137258e781.js.map +0 -1
  623. package/dist/legacy/7664.eee0fe67e04785f4.js.map +0 -1
  624. package/dist/legacy/afree.23e42bd4c44a110f.png +0 -0
  625. package/dist/legacy/index.9db2264bb6151226.css.map +0 -1
  626. package/dist/legacy/index.b760891bfcc63977.js.map +0 -1
  627. package/hooks/css-formal-syntax.js +0 -21
  628. /package/dist/client/{1342.b05de4cd80d4c221.js.LICENSE.txt → 1342.a66390274e8adda1.js.LICENSE.txt} +0 -0
  629. /package/dist/client/{2448.92286b4e96ad1c02.js.LICENSE.txt → 2448.34e8a46d8ac913b9.js.LICENSE.txt} +0 -0
  630. /package/dist/client/{4036.5ca9997e4c034473.js.LICENSE.txt → 4036.4aa9a690073ccbac.js.LICENSE.txt} +0 -0
  631. /package/dist/client/{4045.c0fd898eab0b2a5c.js.LICENSE.txt → 4045.ec4c143648ab2280.js.LICENSE.txt} +0 -0
  632. /package/dist/client/{4531.4ae011f8a64a2b27.js.LICENSE.txt → 4531.5f4701b319065b2b.js.LICENSE.txt} +0 -0
  633. /package/dist/client/{5557.247c4c4c61d91b4d.js.LICENSE.txt → 5557.3923ba7ade67d4c8.js.LICENSE.txt} +0 -0
  634. /package/dist/client/{8468.add3c4feb6c9e926.js.LICENSE.txt → 833.a99cc1ff95a9361c.js.LICENSE.txt} +0 -0
  635. /package/dist/client/{917.f2371f7a8ef08c84.js.LICENSE.txt → 8468.f45cbbf88e617172.js.LICENSE.txt} +0 -0
  636. /package/dist/client/{9222.f3820fec7e0a91be.js.LICENSE.txt → 917.f2551a4b63ec4d86.js.LICENSE.txt} +0 -0
  637. /package/dist/legacy/{1284.0939e1a7de12c23c.js.LICENSE.txt → 1284.9609d9ed70761e2f.js.LICENSE.txt} +0 -0
  638. /package/dist/legacy/{7664.eee0fe67e04785f4.js.LICENSE.txt → 7664.7bf14ff753e36b72.js.LICENSE.txt} +0 -0
  639. /package/dist/legacy/{8716.9fde41ad50c3078d.js.LICENSE.txt → 8716.0a9d049bf166f65a.js.LICENSE.txt} +0 -0
  640. /package/dist/legacy/{index.b760891bfcc63977.js.LICENSE.txt → index.dd25b33b92ab6c72.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"7326.9d0d137e939223ba.js","sources":["webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/constants.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/context.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/error/error_type.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/glean_metrics.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/log.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/events_database/recorded_event.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/index.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/metric.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/event.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/labeled.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/uuid.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/utils.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/node_modules/uuid/dist/esm-browser/rng.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/utils.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/node_modules/uuid/dist/esm-browser/native.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/node_modules/uuid/dist/esm-browser/stringify.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/node_modules/uuid/dist/esm-browser/v4.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/entry/base.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/uploader.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/rate_limiter.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/task.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/time_unit.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/glean.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/fetch_uploader.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/sendbeacon_uploader.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/sendbeacon_fallback_uploader.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/web/storage.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/storage.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/config.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/pings/database.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/policy.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/ping_body_overflow_error.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/ping_request.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/worker.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/upload/manager.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/datetime.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/string.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/types/counter.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/internal_metrics.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/sessions.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/pings/maker.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/pings/ping_type.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/internal_pings.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/database.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/metrics/events_database/index.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/core/error/index.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/entry/web.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/web/index.js","webpack://@mdn/fred/./node_modules/@mozilla/glean/dist/platform/browser/web/platform_info.js"],"sourcesContent":["export const GLEAN_SCHEMA_VERSION = 1;\nexport const GLEAN_VERSION = \"5.0.5\";\nexport const PING_INFO_STORAGE = \"glean_ping_info\";\nexport const CLIENT_INFO_STORAGE = \"glean_client_info\";\nexport const KNOWN_CLIENT_ID = \"c0ffeec0-ffee-c0ff-eec0-ffeec0ffeec0\";\nexport const DEFAULT_TELEMETRY_ENDPOINT = \"https://incoming.telemetry.mozilla.org\";\nexport const DELETION_REQUEST_PING_NAME = \"deletion-request\";\nexport const EVENTS_PING_NAME = \"events\";\nexport const GLEAN_MAX_SOURCE_TAGS = 5;\nexport const GLEAN_REFERENCE_TIME_EXTRA_KEY = \"#glean_reference_time\";\nexport const GLEAN_EXECUTION_COUNTER_EXTRA_KEY = \"#glean_execution_counter\";\nexport const GLEAN_RESERVED_EXTRA_KEYS = [\n GLEAN_EXECUTION_COUNTER_EXTRA_KEY,\n GLEAN_REFERENCE_TIME_EXTRA_KEY\n];\n","import log, { LoggingLevel } from \"./log.js\";\nconst LOG_TAG = \"core.Context\";\nexport class Context {\n constructor() {\n this.initialized = false;\n this.testing = false;\n this.supportedMetrics = {};\n this.startTime = new Date();\n }\n static get instance() {\n if (!Context._instance) {\n Context._instance = new Context();\n }\n return Context._instance;\n }\n static testUninitialize() {\n Context._instance = undefined;\n }\n static get uploadEnabled() {\n if (typeof Context.instance.uploadEnabled === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.uploadEnabled before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.uploadEnabled;\n }\n static set uploadEnabled(upload) {\n Context.instance.uploadEnabled = upload;\n }\n static get metricsDatabase() {\n if (typeof Context.instance.metricsDatabase === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.metricsDatabase before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.metricsDatabase;\n }\n static set metricsDatabase(db) {\n Context.instance.metricsDatabase = db;\n }\n static get eventsDatabase() {\n if (typeof Context.instance.eventsDatabase === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.eventsDatabase before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.eventsDatabase;\n }\n static set eventsDatabase(db) {\n Context.instance.eventsDatabase = db;\n }\n static get pingsDatabase() {\n if (typeof Context.instance.pingsDatabase === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.pingsDatabase before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.pingsDatabase;\n }\n static set pingsDatabase(db) {\n Context.instance.pingsDatabase = db;\n }\n static get errorManager() {\n if (typeof Context.instance.errorManager === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.errorManager before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.errorManager;\n }\n static set errorManager(db) {\n Context.instance.errorManager = db;\n }\n static get applicationId() {\n if (typeof Context.instance.applicationId === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.applicationId before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.applicationId;\n }\n static set applicationId(id) {\n Context.instance.applicationId = id;\n }\n static get initialized() {\n return Context.instance.initialized;\n }\n static set initialized(init) {\n Context.instance.initialized = init;\n }\n static get config() {\n if (typeof Context.instance.config === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.config before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.config;\n }\n static set config(config) {\n Context.instance.config = config;\n }\n static get startTime() {\n return Context.instance.startTime;\n }\n static get testing() {\n return Context.instance.testing;\n }\n static set testing(flag) {\n Context.instance.testing = flag;\n }\n static get corePings() {\n return Context.instance.corePings;\n }\n static set corePings(pings) {\n Context.instance.corePings = pings;\n }\n static get coreMetrics() {\n return Context.instance.coreMetrics;\n }\n static set coreMetrics(metrics) {\n Context.instance.coreMetrics = metrics;\n }\n static set platform(platform) {\n Context.instance.platform = platform;\n }\n static get platform() {\n if (typeof Context.instance.platform === \"undefined\") {\n log(LOG_TAG, [\n \"Attempted to access Context.platform before it was set. This may cause unexpected behaviour.\"\n ], LoggingLevel.Trace);\n }\n return Context.instance.platform;\n }\n static isPlatformSet() {\n return !!Context.instance.platform;\n }\n static getSupportedMetric(type) {\n return Context.instance.supportedMetrics[type];\n }\n static addSupportedMetric(type, ctor) {\n if (type in Context.instance.supportedMetrics) {\n return;\n }\n Context.instance.supportedMetrics[type] = ctor;\n }\n}\n","export var ErrorType;\n(function (ErrorType) {\n ErrorType[\"InvalidValue\"] = \"invalid_value\";\n ErrorType[\"InvalidLabel\"] = \"invalid_label\";\n ErrorType[\"InvalidState\"] = \"invalid_state\";\n ErrorType[\"InvalidOverflow\"] = \"invalid_overflow\";\n ErrorType[\"InvalidType\"] = \"invalid_type\";\n})(ErrorType || (ErrorType = {}));\n","import { Context } from \"./context.js\";\nimport UUIDMetric from \"./metrics/types/uuid.js\";\nimport EventMetricType from \"./metrics/types/event.js\";\nimport { EVENTS_PING_NAME } from \"./constants.js\";\nimport log, { LoggingLevel } from \"./log.js\";\nconst LOG_TAG = \"core.glean_metrics\";\nvar GleanMetrics;\n(function (GleanMetrics) {\n const metrics = {\n pageLoad: new EventMetricType({\n category: \"glean\",\n name: \"page_load\",\n sendInPings: [EVENTS_PING_NAME],\n lifetime: \"ping\",\n disabled: false,\n }, [\"url\", \"referrer\", \"title\"]),\n elementClick: new EventMetricType({\n category: \"glean\",\n name: \"element_click\",\n sendInPings: [EVENTS_PING_NAME],\n lifetime: \"ping\",\n disabled: false,\n }, [\"id\", \"type\", \"label\"]),\n pageId: new UUIDMetric({\n category: \"glean\",\n name: \"page_id\",\n sendInPings: [EVENTS_PING_NAME],\n lifetime: \"application\",\n disabled: false,\n })\n };\n function pageLoad(overrides) {\n var _a, _b, _c;\n if (!Context.initialized) {\n log(LOG_TAG, \"Attempted to record a page load event before Glean was initialized. This is a no-op.\", LoggingLevel.Warn);\n return;\n }\n metrics.pageId.generateAndSet();\n metrics.pageLoad.record({\n url: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.url) !== null && _a !== void 0 ? _a : (typeof window !== \"undefined\"\n ? window.location.href\n : \"URL_NOT_PROVIDED_OR_AVAILABLE\"),\n referrer: (_b = overrides === null || overrides === void 0 ? void 0 : overrides.referrer) !== null && _b !== void 0 ? _b : (typeof document !== \"undefined\"\n ? document.referrer\n : \"REFERRER_NOT_PROVIDED_OR_AVAILABLE\"),\n title: (_c = overrides === null || overrides === void 0 ? void 0 : overrides.title) !== null && _c !== void 0 ? _c : (typeof document !== \"undefined\"\n ? document.title\n : \"TITLE_NOT_PROVIDED_OR_AVAILABLE\"),\n });\n }\n GleanMetrics.pageLoad = pageLoad;\n function constructClickEventContextForElement(element) {\n const dataset = element.dataset;\n const elementClickEventContext = {\n ...(dataset.gleanId && { id: dataset.gleanId }),\n ...(dataset.gleanType && { type: dataset.gleanType }),\n ...(dataset.gleanLabel && { label: dataset.gleanLabel })\n };\n return elementClickEventContext;\n }\n function handleClickEvent(event) {\n const clickedElement = event.target;\n const closestElementWithClickAttributes = clickedElement.closest(\"[data-glean-id], [data-glean-type], [data-glean-label]\");\n if (!closestElementWithClickAttributes) {\n return;\n }\n const elementClickEventContext = constructClickEventContextForElement(closestElementWithClickAttributes);\n recordElementClick(elementClickEventContext);\n }\n GleanMetrics.handleClickEvent = handleClickEvent;\n function recordElementClick(elementClickEventContext) {\n if (!Context.initialized) {\n log(LOG_TAG, \"Attempted to record element click event before Glean was initialized. This is a no-op.\", LoggingLevel.Warn);\n return;\n }\n metrics.elementClick.record(elementClickEventContext);\n }\n GleanMetrics.recordElementClick = recordElementClick;\n})(GleanMetrics || (GleanMetrics = {}));\nexport default GleanMetrics;\n","export var LoggingLevel;\n(function (LoggingLevel) {\n LoggingLevel[\"Debug\"] = \"debug\";\n LoggingLevel[\"Info\"] = \"info\";\n LoggingLevel[\"Warn\"] = \"warn\";\n LoggingLevel[\"Error\"] = \"error\";\n LoggingLevel[\"Trace\"] = \"trace\";\n})(LoggingLevel || (LoggingLevel = {}));\nexport default function log(modulePath, message, level = LoggingLevel.Debug) {\n const prefix = `(Glean.${modulePath})`;\n if (Array.isArray(message)) {\n console[level](prefix, ...message);\n }\n else {\n console[level](prefix, message);\n }\n}\n","import { GLEAN_RESERVED_EXTRA_KEYS } from \"../../constants.js\";\nimport { isBoolean, isNumber, isString, isInteger, isObject } from \"../../utils.js\";\nimport { MetricValidation, Metric } from \"../metric.js\";\nimport { validateString } from \"../utils.js\";\nexport class RecordedEvent extends Metric {\n constructor(v) {\n super(v);\n }\n static withTransformedExtras(e, transformFn) {\n const extras = e.extra || {};\n const transformedExtras = transformFn(extras);\n return {\n category: e.category,\n name: e.name,\n timestamp: e.timestamp,\n extra: (transformedExtras && Object.keys(transformedExtras).length > 0)\n ? transformedExtras : undefined\n };\n }\n addExtra(key, value) {\n if (!this.inner.extra) {\n this.inner.extra = {};\n }\n this.inner.extra[key] = value;\n }\n withoutReservedExtras() {\n return RecordedEvent.withTransformedExtras(this.get(), (extras) => {\n return Object.keys(extras)\n .filter(key => !GLEAN_RESERVED_EXTRA_KEYS.includes(key))\n .reduce((obj, key) => {\n obj[key] = extras[key];\n return obj;\n }, {});\n });\n }\n validate(v) {\n if (!isObject(v)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected Glean event object, got ${typeof v}`\n };\n }\n const categoryValidation = \"category\" in v && isString(v.category);\n const nameValidation = \"name\" in v && isString(v.name);\n if (!categoryValidation || !nameValidation) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Unexpected value for \"category\" or \"name\" in event object: ${JSON.stringify(v)}`\n };\n }\n const timestampValidation = \"timestamp\" in v && isInteger(v.timestamp) && v.timestamp >= 0;\n if (!timestampValidation) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Event timestamp must be a positive integer, got ${JSON.stringify(v)}`\n };\n }\n if (v.extra) {\n if (!isObject(v.extra)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected Glean extras object, got ${typeof v}`\n };\n }\n for (const [key, value] of Object.entries(v.extra)) {\n const validation = validateString(key);\n if (validation.type === MetricValidation.Error) {\n return validation;\n }\n if (!isString(value) && !isNumber(value) && !isBoolean(value)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Unexpected value for extra key ${key}: ${JSON.stringify(value)}`\n };\n }\n }\n }\n return { type: MetricValidation.Success };\n }\n payload() {\n return RecordedEvent.withTransformedExtras(this.withoutReservedExtras(), (extras) => {\n return Object.keys(extras)\n .reduce((extra, key) => {\n extra[key] = extras[key].toString();\n return extra;\n }, {});\n });\n }\n}\n","import { Context } from \"../context.js\";\nimport { isUndefined, testOnlyCheck } from \"../utils.js\";\nimport { getValidDynamicLabel } from \"./types/labeled.js\";\nexport class MetricType {\n constructor(type, meta, metricCtor) {\n if (metricCtor) {\n Context.addSupportedMetric(type, metricCtor);\n }\n this.type = type;\n this.name = meta.name;\n this.category = meta.category;\n this.sendInPings = meta.sendInPings;\n this.lifetime = meta.lifetime;\n this.disabled = meta.disabled;\n this.dynamicLabel = meta.dynamicLabel;\n }\n baseIdentifier() {\n if (this.category.length > 0) {\n return `${this.category}.${this.name}`;\n }\n else {\n return this.name;\n }\n }\n identifier() {\n const baseIdentifier = this.baseIdentifier();\n if (!isUndefined(this.dynamicLabel)) {\n return getValidDynamicLabel(this);\n }\n else {\n return baseIdentifier;\n }\n }\n shouldRecord(uploadEnabled) {\n return uploadEnabled && !this.disabled;\n }\n testGetNumRecordedErrors(errorType, ping = this.sendInPings[0]) {\n if (testOnlyCheck(\"testGetNumRecordedErrors\")) {\n return Context.errorManager.testGetNumRecordedErrors(this, errorType, ping);\n }\n return 0;\n }\n}\n","import { Context } from \"../context.js\";\nimport { ErrorType } from \"../error/error_type.js\";\nexport var MetricValidation;\n(function (MetricValidation) {\n MetricValidation[MetricValidation[\"Success\"] = 0] = \"Success\";\n MetricValidation[MetricValidation[\"Error\"] = 1] = \"Error\";\n})(MetricValidation || (MetricValidation = {}));\nexport class MetricValidationError extends Error {\n constructor(message, type = ErrorType.InvalidType) {\n super(message);\n this.type = type;\n this.name = \"MetricValidationError\";\n }\n recordError(metric) {\n Context.errorManager.record(metric, this.type, this.message);\n }\n}\nexport class Metric {\n constructor(v) {\n this.inner = this.validateOrThrow(v);\n }\n get() {\n return this.inner;\n }\n set(v) {\n this.inner = v;\n }\n validateOrThrow(v) {\n const validation = this.validate(v);\n if (validation.type === MetricValidation.Error) {\n throw new MetricValidationError(validation.errorMessage, validation.errorType);\n }\n return v;\n }\n}\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EventMetricType_inner;\nimport { RecordedEvent } from \"../events_database/recorded_event.js\";\nimport { MetricType } from \"../index.js\";\nimport { getMonotonicNow, isString, testOnlyCheck, truncateStringAtBytesBoundaryWithError } from \"../../utils.js\";\nimport { Context } from \"../../context.js\";\nimport { ErrorType } from \"../../error/error_type.js\";\nimport { MetricValidationError } from \"../metric.js\";\nconst LOG_TAG = \"core.metrics.EventMetricType\";\nconst MAX_BYTES_EXTRA_KEY_VALUE = 500;\nexport class InternalEventMetricType extends MetricType {\n constructor(meta, allowedExtraKeys) {\n super(\"event\", meta);\n this.allowedExtraKeys = allowedExtraKeys;\n }\n record(extra, timestamp = getMonotonicNow()) {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n const ts = Date.now();\n try {\n const metric = new RecordedEvent({\n category: this.category,\n name: this.name,\n timestamp,\n extra\n });\n const truncatedExtra = {};\n if (extra && this.allowedExtraKeys) {\n for (const [name, value] of Object.entries(extra)) {\n if (this.allowedExtraKeys.includes(name)) {\n if (isString(value)) {\n truncatedExtra[name] = truncateStringAtBytesBoundaryWithError(this, value, MAX_BYTES_EXTRA_KEY_VALUE);\n }\n else {\n truncatedExtra[name] = value;\n }\n }\n else {\n Context.errorManager.record(this, ErrorType.InvalidValue, `Invalid key index: ${name}`);\n continue;\n }\n }\n }\n truncatedExtra[\"glean_timestamp\"] = ts.toString();\n metric.set({\n ...metric.get(),\n extra: truncatedExtra\n });\n Context.eventsDatabase.record(this, metric);\n }\n catch (e) {\n if (e instanceof MetricValidationError) {\n e.recordError(this);\n }\n }\n }\n testGetValue(ping = this.sendInPings[0]) {\n if (testOnlyCheck(\"testGetValue\", LOG_TAG)) {\n const events = Context.eventsDatabase.getEvents(ping, this);\n if (!events)\n return events;\n events.forEach((ev) => {\n if (ev.extra) {\n delete ev.extra[\"glean_timestamp\"];\n if (Object.keys(ev.extra).length == 0) {\n ev.extra = undefined;\n }\n }\n });\n return events;\n }\n }\n}\nexport default class EventMetricType {\n constructor(meta, allowedExtraKeys) {\n _EventMetricType_inner.set(this, void 0);\n __classPrivateFieldSet(this, _EventMetricType_inner, new InternalEventMetricType(meta, allowedExtraKeys), \"f\");\n }\n record(extra) {\n __classPrivateFieldGet(this, _EventMetricType_inner, \"f\").record(extra);\n }\n testGetValue(ping = __classPrivateFieldGet(this, _EventMetricType_inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _EventMetricType_inner, \"f\").testGetValue(ping);\n }\n testGetNumRecordedErrors(errorType, ping = __classPrivateFieldGet(this, _EventMetricType_inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _EventMetricType_inner, \"f\").testGetNumRecordedErrors(errorType, ping);\n }\n}\n_EventMetricType_inner = new WeakMap();\n","import { Metric, MetricValidation } from \"../metric.js\";\nimport { Context } from \"../../context.js\";\nimport { ErrorType } from \"../../error/error_type.js\";\nexport class LabeledMetric extends Metric {\n constructor(v) {\n super(v);\n }\n validate(_v) {\n return { type: MetricValidation.Success };\n }\n payload() {\n return this.inner;\n }\n}\nconst MAX_LABELS = 16;\nconst MAX_LABEL_LENGTH = 61;\nexport const OTHER_LABEL = \"__other__\";\nconst LABEL_REGEX = /^[a-z_][a-z0-9_-]{0,29}(\\.[a-z_][a-z0-9_-]{0,29})*$/;\nexport function combineIdentifierAndLabel(metricName, label) {\n return `${metricName}/${label}`;\n}\nexport function stripLabel(identifier) {\n return identifier.split(\"/\")[0];\n}\nexport function getValidDynamicLabel(metric) {\n if (metric.dynamicLabel === undefined) {\n throw new Error(\"This point should never be reached.\");\n }\n const key = combineIdentifierAndLabel(metric.baseIdentifier(), metric.dynamicLabel);\n for (const ping of metric.sendInPings) {\n if (Context.metricsDatabase.hasMetric(metric.lifetime, ping, metric.type, key)) {\n return key;\n }\n }\n let numUsedKeys = 0;\n for (const ping of metric.sendInPings) {\n numUsedKeys += Context.metricsDatabase.countByBaseIdentifier(metric.lifetime, ping, metric.type, metric.baseIdentifier());\n }\n let hitError = false;\n if (numUsedKeys >= MAX_LABELS) {\n hitError = true;\n }\n else if (metric.dynamicLabel.length > MAX_LABEL_LENGTH) {\n hitError = true;\n Context.errorManager.record(metric, ErrorType.InvalidLabel, `Label length ${metric.dynamicLabel.length} exceeds maximum of ${MAX_LABEL_LENGTH}.`);\n }\n else if (!LABEL_REGEX.test(metric.dynamicLabel)) {\n hitError = true;\n Context.errorManager.record(metric, ErrorType.InvalidLabel, `Label must be snake_case, got '${metric.dynamicLabel}'.`);\n }\n return hitError ? combineIdentifierAndLabel(metric.baseIdentifier(), OTHER_LABEL) : key;\n}\nclass LabeledMetricType {\n constructor(meta, submetric, labels) {\n return new Proxy(this, {\n get: (_target, label) => {\n if (labels) {\n return LabeledMetricType.createFromStaticLabel(meta, submetric, labels, label);\n }\n return LabeledMetricType.createFromDynamicLabel(meta, submetric, label);\n }\n });\n }\n static createFromStaticLabel(meta, submetricClass, allowedLabels, label) {\n const adjustedLabel = allowedLabels.includes(label) ? label : OTHER_LABEL;\n const newMeta = {\n ...meta,\n name: combineIdentifierAndLabel(meta.name, adjustedLabel)\n };\n return new submetricClass(newMeta);\n }\n static createFromDynamicLabel(meta, submetricClass, label) {\n const newMeta = {\n ...meta,\n dynamicLabel: label\n };\n return new submetricClass(newMeta);\n }\n}\nexport default LabeledMetricType;\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _inner;\nimport { MetricType } from \"../index.js\";\nimport { generateUUIDv4, testOnlyCheck } from \"../../utils.js\";\nimport { Context } from \"../../context.js\";\nimport { MetricValidationError, MetricValidation, Metric } from \"../metric.js\";\nimport { ErrorType } from \"../../error/error_type.js\";\nimport { validateString } from \"../utils.js\";\nconst LOG_TAG = \"core.metrics.UUIDMetricType\";\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nexport class UUIDMetric extends Metric {\n constructor(v) {\n super(v);\n }\n validate(v) {\n const validation = validateString(v);\n if (validation.type === MetricValidation.Error) {\n return validation;\n }\n const str = v;\n if (!UUID_REGEX.test(str)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `\"${str}\" is not a valid UUID`,\n errorType: ErrorType.InvalidValue\n };\n }\n return { type: MetricValidation.Success };\n }\n payload() {\n return this.inner;\n }\n}\nexport class InternalUUIDMetricType extends MetricType {\n constructor(meta) {\n super(\"uuid\", meta, UUIDMetric);\n }\n set(value) {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n if (!value) {\n value = generateUUIDv4();\n }\n let metric;\n try {\n metric = new UUIDMetric(value);\n Context.metricsDatabase.record(this, metric);\n }\n catch (e) {\n if (e instanceof MetricValidationError) {\n e.recordError(this);\n }\n }\n }\n generateAndSet() {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n const value = generateUUIDv4();\n this.set(value);\n return value;\n }\n testGetValue(ping = this.sendInPings[0]) {\n if (testOnlyCheck(\"testGetValue\", LOG_TAG)) {\n return Context.metricsDatabase.getMetric(ping, this);\n }\n }\n}\nexport default class {\n constructor(meta) {\n _inner.set(this, void 0);\n __classPrivateFieldSet(this, _inner, new InternalUUIDMetricType(meta), \"f\");\n }\n set(value) {\n __classPrivateFieldGet(this, _inner, \"f\").set(value);\n }\n generateAndSet() {\n return __classPrivateFieldGet(this, _inner, \"f\").generateAndSet();\n }\n testGetValue(ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetValue(ping);\n }\n testGetNumRecordedErrors(errorType, ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetNumRecordedErrors(errorType, ping);\n }\n}\n_inner = new WeakMap();\n","import { MetricValidation } from \"./metric.js\";\nimport { isInteger, isString } from \"../utils.js\";\nimport { LabeledMetric } from \"./types/labeled.js\";\nimport { Context } from \"../context.js\";\nimport { ErrorType } from \"../error/error_type.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nconst LOG_TAG = \"Glean.core.Metrics.utils\";\nexport function createMetric(type, v) {\n if (type.startsWith(\"labeled_\")) {\n Context.addSupportedMetric(type, LabeledMetric);\n }\n const ctor = Context.getSupportedMetric(type);\n if (!ctor) {\n throw new Error(`Unable to create metric of unknown type \"${type}\".`);\n }\n return new ctor(v);\n}\nexport function validateMetricInternalRepresentation(type, v) {\n try {\n createMetric(type, v);\n return true;\n }\n catch (e) {\n log(LOG_TAG, e.message, LoggingLevel.Error);\n return false;\n }\n}\nexport function validatePositiveInteger(v, zeroIsValid = true) {\n if (!isInteger(v)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected integer value, got ${JSON.stringify(v)}`\n };\n }\n const validation = zeroIsValid ? v < 0 : v <= 0;\n if (validation) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected positive value, got ${JSON.stringify(v)}`,\n errorType: ErrorType.InvalidValue\n };\n }\n return { type: MetricValidation.Success };\n}\nexport function validateString(v) {\n if (!isString(v)) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected string value, got ${JSON.stringify(v)}`\n };\n }\n return { type: MetricValidation.Success };\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import { v4 as UUIDv4 } from \"uuid\";\nimport { Context } from \"./context.js\";\nimport { ErrorType } from \"./error/error_type.js\";\nimport log, { LoggingLevel } from \"./log.js\";\nimport { MetricValidationError } from \"./metrics/metric.js\";\nconst LOG_TAG = \"core.utils\";\nexport function isJSONValue(v) {\n if (isString(v) || isBoolean(v) || isNumber(v)) {\n return true;\n }\n if (isObject(v)) {\n if (Object.keys(v).length === 0) {\n return true;\n }\n for (const key in v) {\n return isJSONValue(v[key]);\n }\n }\n if (Array.isArray(v)) {\n return v.every((e) => isJSONValue(e));\n }\n return false;\n}\nexport function isObject(v) {\n return (typeof v === \"object\" && v !== null && v.constructor === Object);\n}\nexport function isEmptyObject(v) {\n return Object.keys(v || {}).length === 0;\n}\nexport function isUndefined(v) {\n return typeof v === \"undefined\";\n}\nexport function isString(v) {\n return typeof v === \"string\";\n}\nexport function isBoolean(v) {\n return typeof v === \"boolean\";\n}\nexport function isNumber(v) {\n return typeof v === \"number\" && !isNaN(v);\n}\nexport function isInteger(v) {\n return isNumber(v) && Number.isInteger(v);\n}\nexport function extractBooleanFromString(v) {\n if (v.toLowerCase() === \"true\") {\n return true;\n }\n else if (v.toLowerCase() === \"false\") {\n return false;\n }\n return undefined;\n}\nexport function sanitizeApplicationId(applicationId) {\n return applicationId.replace(/[^a-z0-9]+/gi, \"-\").toLowerCase();\n}\nexport function validateURL(v) {\n const urlPattern = /^(http|https):\\/\\/[a-zA-Z0-9._-]+(:\\d+){0,1}(\\/{0,1})$/i;\n return urlPattern.test(v);\n}\nexport function validateHeader(v) {\n return /^[a-z0-9-]{1,20}$/i.test(v);\n}\nexport function generateUUIDv4() {\n if (typeof crypto !== \"undefined\") {\n return UUIDv4();\n }\n else {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n}\nexport function getMonotonicNow() {\n const now = typeof performance === \"undefined\"\n ? Date.now()\n : performance.now();\n return Math.round(now);\n}\nexport function truncateStringAtBoundaryWithError(metric, value, length) {\n if (!isString(value)) {\n throw new MetricValidationError(`Expected string, got ${JSON.stringify(value)}`);\n }\n const truncated = value.substring(0, length);\n if (truncated !== value) {\n Context.errorManager.record(metric, ErrorType.InvalidOverflow, `Value length ${value.length} exceeds maximum of ${length}.`);\n }\n return truncated;\n}\nexport function truncateStringAtBytesBoundaryWithError(metric, value, maxBytes) {\n if (!isString(value)) {\n throw new MetricValidationError(`Expected string, got ${JSON.stringify(value)}`);\n }\n const encoder = new TextEncoder();\n const decoder = new TextDecoder(\"utf-8\");\n const uint8 = encoder.encode(value);\n const section = uint8.slice(0, maxBytes);\n const truncated = decoder.decode(section);\n if (truncated !== value) {\n Context.errorManager.record(metric, ErrorType.InvalidOverflow, `Value length ${new Blob([value]).size} exceeds maximum of ${value.length} bytes.`);\n }\n return truncated;\n}\nexport function testOnlyCheck(name, logTag = LOG_TAG) {\n if (!Context.testing) {\n log(logTag, [\n `Attempted to access test only method \\`${name || \"unknown\"}\\`,`,\n \"but Glean is not in testing mode. Ignoring. Make sure to put Glean in testing mode\",\n \"before accessing such methods, by calling `testResetGlean`.\"\n ], LoggingLevel.Error);\n return false;\n }\n return true;\n}\nexport function saturatingAdd(...args) {\n let result = args.reduce((sum, item) => sum + item, 0);\n if (result > Number.MAX_SAFE_INTEGER) {\n result = Number.MAX_SAFE_INTEGER;\n }\n return result;\n}\nexport function getCurrentTimeInNanoSeconds() {\n let now;\n if (typeof process === \"undefined\") {\n now = getMonotonicNow();\n }\n else {\n const hrTime = process.hrtime();\n now = hrTime[0] * 1000000000 + hrTime[1];\n }\n return now;\n}\nexport function isWindowObjectUnavailable() {\n return typeof window === \"undefined\";\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import Glean from \"../core/glean.js\";\nexport const base = (platform) => {\n return {\n initialize(applicationId, uploadEnabled, config) {\n Glean.setPlatform(platform);\n Glean.initialize(applicationId, uploadEnabled, config);\n },\n setUploadEnabled(flag) {\n Glean.setUploadEnabled(flag);\n },\n setLogPings(flag) {\n Glean.setLogPings(flag);\n },\n setDebugViewTag(value) {\n Glean.setDebugViewTag(value);\n },\n setSourceTags(value) {\n Glean.setSourceTags(value);\n }\n };\n};\n","export const DEFAULT_UPLOAD_TIMEOUT_MS = 10000;\nexport var UploadResultStatus;\n(function (UploadResultStatus) {\n UploadResultStatus[UploadResultStatus[\"RecoverableFailure\"] = 0] = \"RecoverableFailure\";\n UploadResultStatus[UploadResultStatus[\"UnrecoverableFailure\"] = 1] = \"UnrecoverableFailure\";\n UploadResultStatus[UploadResultStatus[\"Success\"] = 2] = \"Success\";\n})(UploadResultStatus || (UploadResultStatus = {}));\nexport class UploadResult {\n constructor(result, status) {\n this.result = result;\n this.status = status;\n }\n}\nexport class Uploader {\n}\nexport default Uploader;\n","import { isUndefined, getMonotonicNow } from \"../utils.js\";\nexport const RATE_LIMITER_INTERVAL_MS = 60 * 1000;\nexport const MAX_PINGS_PER_INTERVAL = 40;\nexport var RateLimiterState;\n(function (RateLimiterState) {\n RateLimiterState[RateLimiterState[\"Incrementing\"] = 0] = \"Incrementing\";\n RateLimiterState[RateLimiterState[\"Throttled\"] = 1] = \"Throttled\";\n})(RateLimiterState || (RateLimiterState = {}));\nclass RateLimiter {\n constructor(interval = RATE_LIMITER_INTERVAL_MS, maxCount = MAX_PINGS_PER_INTERVAL, count = 0, started) {\n this.interval = interval;\n this.maxCount = maxCount;\n this.count = count;\n this.started = started;\n }\n get elapsed() {\n if (isUndefined(this.started)) {\n return NaN;\n }\n const now = getMonotonicNow();\n const result = now - this.started;\n if (result < 0) {\n return NaN;\n }\n return result;\n }\n reset() {\n this.started = getMonotonicNow();\n this.count = 0;\n }\n shouldReset() {\n if (isUndefined(this.started)) {\n return true;\n }\n if (isNaN(this.elapsed) || this.elapsed > this.interval) {\n return true;\n }\n return false;\n }\n getState() {\n if (this.shouldReset()) {\n this.reset();\n }\n const remainingTime = this.interval - this.elapsed;\n if (this.count >= this.maxCount) {\n return {\n state: 1,\n remainingTime,\n };\n }\n this.count++;\n return {\n state: 0\n };\n }\n}\nexport default RateLimiter;\n","export var UploadTaskTypes;\n(function (UploadTaskTypes) {\n UploadTaskTypes[\"Done\"] = \"done\";\n UploadTaskTypes[\"Wait\"] = \"wait\";\n UploadTaskTypes[\"Upload\"] = \"upload\";\n})(UploadTaskTypes || (UploadTaskTypes = {}));\nexport default {\n done: () => ({\n type: \"done\"\n }),\n wait: (remainingTime) => ({\n type: \"wait\",\n remainingTime,\n }),\n upload: (ping) => ({\n type: \"upload\",\n ping,\n }),\n};\n","var TimeUnit;\n(function (TimeUnit) {\n TimeUnit[\"Nanosecond\"] = \"nanosecond\";\n TimeUnit[\"Microsecond\"] = \"microsecond\";\n TimeUnit[\"Millisecond\"] = \"millisecond\";\n TimeUnit[\"Second\"] = \"second\";\n TimeUnit[\"Minute\"] = \"minute\";\n TimeUnit[\"Hour\"] = \"hour\";\n TimeUnit[\"Day\"] = \"day\";\n})(TimeUnit || (TimeUnit = {}));\nexport function convertTimeUnitToNanos(duration, timeUnit) {\n switch (timeUnit) {\n case TimeUnit.Nanosecond:\n return duration;\n case TimeUnit.Microsecond:\n return duration * 10 ** 3;\n case TimeUnit.Millisecond:\n return duration * 10 ** 6;\n case TimeUnit.Second:\n return duration * 10 ** 9;\n case TimeUnit.Minute:\n return duration * 10 ** 9 * 60;\n case TimeUnit.Hour:\n return duration * 10 ** 9 * 60 * 60;\n case TimeUnit.Day:\n return duration * 10 ** 9 * 60 * 60 * 24;\n }\n}\nexport default TimeUnit;\n","import { CLIENT_INFO_STORAGE, KNOWN_CLIENT_ID } from \"./constants.js\";\nimport { Configuration } from \"./config.js\";\nimport PingUploadManager from \"./upload/manager.js\";\nimport { extractBooleanFromString, isBoolean, isString, sanitizeApplicationId, } from \"./utils.js\";\nimport { CoreMetrics } from \"./internal_metrics.js\";\nimport { DatetimeMetric } from \"./metrics/types/datetime.js\";\nimport CorePings from \"./internal_pings.js\";\nimport { Context } from \"./context.js\";\nimport log, { LoggingLevel } from \"./log.js\";\nimport MetricsDatabase from \"./metrics/database.js\";\nimport EventsDatabase from \"./metrics/events_database/index.js\";\nimport PingsDatabase from \"./pings/database.js\";\nimport ErrorManager from \"./error/index.js\";\nimport GleanMetrics from \"./glean_metrics.js\";\nconst LOG_TAG = \"core.Glean\";\nvar DebugOption;\n(function (DebugOption) {\n DebugOption[\"DebugTag\"] = \"DebugTag\";\n DebugOption[\"SourceTags\"] = \"SourceTags\";\n DebugOption[\"LogPings\"] = \"LogPings\";\n})(DebugOption || (DebugOption = {}));\nconst setDebugOptionInSessionStorage = (option, value) => {\n const key = `Glean.${option.toString()}`;\n try {\n switch (option) {\n case DebugOption.DebugTag:\n sessionStorage.setItem(key, value);\n break;\n case DebugOption.LogPings:\n sessionStorage.setItem(key, value.toString());\n break;\n case DebugOption.SourceTags:\n sessionStorage.setItem(key, value.join(\",\"));\n break;\n }\n }\n catch (e) {\n console.warn(e);\n }\n};\nconst getDebugOptionFromSessionStorage = (option) => {\n try {\n return sessionStorage.getItem(`Glean.${option.toString()}`) || undefined;\n }\n catch (e) {\n console.warn(e);\n return undefined;\n }\n};\nvar Glean;\n(function (Glean) {\n function onUploadEnabled() {\n Context.uploadEnabled = true;\n Glean.pingUploader.resumeUploads();\n }\n function onUploadDisabled(at_init) {\n let reason;\n if (at_init) {\n reason = \"at_init\";\n }\n else {\n reason = \"set_upload_enabled\";\n }\n Context.uploadEnabled = false;\n Context.corePings.deletionRequest.submit(reason);\n clearMetrics();\n }\n function clearMetrics() {\n Glean.pingUploader.clearPendingPingsQueue();\n let firstRunDate;\n try {\n firstRunDate = new DatetimeMetric(Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, Context.coreMetrics.firstRunDate)).date;\n }\n catch (_a) {\n firstRunDate = new Date();\n }\n Context.eventsDatabase.clearAll();\n Context.metricsDatabase.clearAll();\n Context.pingsDatabase.clearAll();\n Context.uploadEnabled = true;\n Context.coreMetrics.clientId.set(KNOWN_CLIENT_ID);\n Context.coreMetrics.firstRunDate.set(firstRunDate);\n Context.uploadEnabled = false;\n }\n function setDebugOptionsFromSessionStorage() {\n if (typeof window === \"undefined\" ||\n typeof window.sessionStorage === \"undefined\") {\n return;\n }\n const logPings = getDebugOptionFromSessionStorage(DebugOption.LogPings);\n if (logPings) {\n Glean.preInitLogPings = extractBooleanFromString(logPings);\n }\n const debugViewTag = getDebugOptionFromSessionStorage(DebugOption.DebugTag);\n if (debugViewTag) {\n Glean.preInitDebugViewTag = debugViewTag;\n }\n const sourceTags = getDebugOptionFromSessionStorage(DebugOption.SourceTags);\n if (sourceTags) {\n Glean.preInitSourceTags = sourceTags.split(\",\");\n }\n }\n function initialize(applicationId, uploadEnabled, config) {\n if (Context.initialized) {\n log(LOG_TAG, \"Attempted to initialize Glean, but it has already been initialized. Ignoring.\", LoggingLevel.Warn);\n return;\n }\n if (!isString(applicationId)) {\n log(LOG_TAG, \"Unable to initialize Glean, applicationId must be a string.\", LoggingLevel.Error);\n return;\n }\n if (!isBoolean(uploadEnabled)) {\n log(LOG_TAG, \"Unable to initialize Glean, uploadEnabled must be a boolean.\", LoggingLevel.Error);\n return;\n }\n if (applicationId.length === 0) {\n log(LOG_TAG, \"Unable to initialize Glean, applicationId cannot be an empty string.\", LoggingLevel.Error);\n return;\n }\n if (!Context.platform) {\n log(LOG_TAG, \"Unable to initialize Glean, platform has not been set.\", LoggingLevel.Error);\n return;\n }\n Context.coreMetrics = new CoreMetrics();\n Context.corePings = new CorePings();\n Context.applicationId = sanitizeApplicationId(applicationId);\n Context.config = new Configuration(config);\n setDebugOptionsFromSessionStorage();\n if (Glean.preInitLogPings)\n Context.config.logPings = Glean.preInitLogPings;\n if (Glean.preInitDebugViewTag)\n Context.config.debugViewTag = Glean.preInitDebugViewTag;\n if (Glean.preInitSourceTags)\n Context.config.sourceTags = Glean.preInitSourceTags;\n Context.metricsDatabase = new MetricsDatabase();\n Context.eventsDatabase = new EventsDatabase();\n Context.pingsDatabase = new PingsDatabase();\n Context.errorManager = new ErrorManager();\n Glean.pingUploader = new PingUploadManager(Context.config, Context.pingsDatabase);\n Context.initialized = true;\n Context.uploadEnabled = uploadEnabled;\n Context.eventsDatabase.initialize();\n if (uploadEnabled) {\n Context.metricsDatabase.clear(\"application\");\n onUploadEnabled();\n Context.coreMetrics.initialize();\n if (config === null || config === void 0 ? void 0 : config.enableAutoPageLoadEvents) {\n GleanMetrics.pageLoad();\n }\n if (config === null || config === void 0 ? void 0 : config.enableAutoElementClickEvents) {\n document.addEventListener(\"click\", (event) => {\n GleanMetrics.handleClickEvent(event);\n });\n }\n }\n else {\n const clientId = Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, Context.coreMetrics.clientId);\n if (clientId) {\n if (clientId !== KNOWN_CLIENT_ID) {\n onUploadDisabled(true);\n }\n }\n else {\n clearMetrics();\n }\n }\n Context.pingsDatabase.scanPendingPings();\n }\n Glean.initialize = initialize;\n function setUploadEnabled(flag) {\n if (!Context.initialized) {\n log(LOG_TAG, [\n \"Changing upload enabled before Glean is initialized is not supported.\\n\",\n \"Pass the correct state into `initialize`.\\n\",\n \"See documentation at https://mozilla.github.io/glean/book/user/general-api.html#initializing-the-glean-sdk`\",\n ], LoggingLevel.Error);\n return;\n }\n if (!isBoolean(flag)) {\n log(LOG_TAG, \"Unable to change upload state, new value must be a boolean. Ignoring.\", LoggingLevel.Error);\n return;\n }\n if (Context.uploadEnabled !== flag) {\n if (flag) {\n onUploadEnabled();\n Context.coreMetrics.initialize();\n }\n else {\n onUploadDisabled(false);\n }\n }\n }\n Glean.setUploadEnabled = setUploadEnabled;\n function setExperimentationId(experimentationId) {\n Context.config.experimentationId = experimentationId;\n }\n Glean.setExperimentationId = setExperimentationId;\n function setLogPings(flag) {\n if (!Context.initialized) {\n Glean.preInitLogPings = flag;\n }\n else {\n Context.config.logPings = flag;\n }\n }\n Glean.setLogPings = setLogPings;\n function setDebugViewTag(value) {\n if (!Context.initialized) {\n Glean.preInitDebugViewTag = value;\n }\n else {\n Context.config.debugViewTag = value;\n }\n }\n Glean.setDebugViewTag = setDebugViewTag;\n function setSourceTags(value) {\n if (!Context.initialized) {\n Glean.preInitSourceTags = value;\n }\n else {\n Context.config.sourceTags = value;\n }\n }\n Glean.setSourceTags = setSourceTags;\n function setPlatform(platform) {\n if (Context.initialized) {\n return;\n }\n if (Context.isPlatformSet() &&\n Context.platform.name !== platform.name &&\n !Context.testing) {\n log(LOG_TAG, [\n `IMPOSSIBLE: Attempted to change Glean's targeted platform\",\n \"from \"${Context.platform.name}\" to \"${platform.name}\". Ignoring.`,\n ], LoggingLevel.Error);\n }\n Context.platform = platform;\n }\n Glean.setPlatform = setPlatform;\n})(Glean || (Glean = {}));\nlet hasStorage = false;\ntry {\n hasStorage = typeof window !== \"undefined\" &&\n typeof window.sessionStorage !== \"undefined\";\n}\ncatch (e) {\n console.error(\"No session storage available\", e);\n}\nif (hasStorage) {\n window.Glean = {\n setLogPings: (flag) => {\n setDebugOptionInSessionStorage(DebugOption.LogPings, flag);\n Glean.setLogPings(flag);\n console.log(\"Pings will be logged to the console until this tab is closed.\");\n },\n setDebugViewTag: (value) => {\n setDebugOptionInSessionStorage(DebugOption.DebugTag, value);\n Glean.setDebugViewTag(value);\n console.log(\"Pings will be sent to the Debug Ping Viewer until this tab is closed. Pings can be found here: https://debug-ping-preview.firebaseapp.com/.\");\n },\n setSourceTags: (value) => {\n setDebugOptionInSessionStorage(DebugOption.SourceTags, value);\n Glean.setSourceTags(value);\n console.log(\"Pings will be given the specified tags until the tab is closed.\");\n },\n debugSession: () => {\n const sessionId = Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, Context.coreMetrics.sessionId);\n if (!!sessionId && typeof sessionId === \"string\" && !!Context.config.debugViewTag) {\n window.open(`https://debug-ping-preview.firebaseapp.com/stream/${Context.config.debugViewTag}#${sessionId}`, \"_blank\");\n }\n else {\n console.info(\"You must set a debug tag via `window.Glean.setDebugViewTag` before debugging your session.\");\n }\n }\n };\n}\nexport default Glean;\n","import log, { LoggingLevel } from \"../../core/log.js\";\nimport Uploader from \"../../core/upload/uploader.js\";\nimport { DEFAULT_UPLOAD_TIMEOUT_MS, UploadResult } from \"../../core/upload/uploader.js\";\nconst LOG_TAG = \"platform.browser.FetchUploader\";\nclass BrowserFetchUploader extends Uploader {\n constructor() {\n super(...arguments);\n this.timeoutMs = DEFAULT_UPLOAD_TIMEOUT_MS;\n }\n async post(url, pingRequest, keepalive = true) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n const gzipRequest = pingRequest.asCompressedPayload();\n let response;\n try {\n response = await fetch(url.toString(), {\n headers: gzipRequest.headers,\n method: \"POST\",\n body: gzipRequest.payload,\n keepalive,\n credentials: \"omit\",\n signal: controller.signal,\n redirect: \"error\",\n });\n }\n catch (e) {\n if (e instanceof DOMException) {\n log(LOG_TAG, [\"Timeout while attempting to upload ping.\\n\", e], LoggingLevel.Error);\n }\n else if (e instanceof TypeError) {\n if (keepalive) {\n return this.post(url, gzipRequest, false);\n }\n log(LOG_TAG, [\"Network error while attempting to upload ping.\\n\", e], LoggingLevel.Error);\n }\n else {\n log(LOG_TAG, [\"Unknown error while attempting to upload ping.\\n\", e], LoggingLevel.Error);\n }\n clearTimeout(timeout);\n return new UploadResult(0);\n }\n clearTimeout(timeout);\n return new UploadResult(2, response.status);\n }\n supportsCustomHeaders() {\n return true;\n }\n}\nexport default new BrowserFetchUploader();\n","import log, { LoggingLevel } from \"../../core/log.js\";\nimport Uploader from \"../../core/upload/uploader.js\";\nimport { DEFAULT_UPLOAD_TIMEOUT_MS, UploadResult } from \"../../core/upload/uploader.js\";\nconst LOG_TAG = \"platform.browser.SendBeaconUploader\";\nclass BrowserSendBeaconUploader extends Uploader {\n constructor() {\n super(...arguments);\n this.timeoutMs = DEFAULT_UPLOAD_TIMEOUT_MS;\n }\n async post(url, pingRequest, errorLog = true) {\n const wasQueued = navigator.sendBeacon(url, pingRequest.payload);\n if (wasQueued) {\n return new UploadResult(2, 200);\n }\n if (errorLog) {\n log(LOG_TAG, \"The `sendBeacon` call was not serviced by the browser. Deleting data.\", LoggingLevel.Error);\n }\n return new UploadResult(1);\n }\n supportsCustomHeaders() {\n return false;\n }\n}\nexport default new BrowserSendBeaconUploader();\n","import log, { LoggingLevel } from \"../../core/log.js\";\nimport Uploader from \"../../core/upload/uploader.js\";\nimport BrowserFetchUploader from \"./fetch_uploader.js\";\nimport BrowserSendBeaconUploader from \"./sendbeacon_uploader.js\";\nimport { Context } from \"../../core/context.js\";\nconst LOG_TAG = \"platform.browser.SendBeaconFallbackUploader\";\nclass BrowserSendBeaconFallbackUploader extends Uploader {\n constructor() {\n super(...arguments);\n this.fetchUploader = BrowserFetchUploader;\n this.sendBeaconUploader = BrowserSendBeaconUploader;\n }\n async post(url, pingRequest) {\n var _a, _b;\n const hasNoCustomHeaders = !((_a = Context.config) === null || _a === void 0 ? void 0 : _a.sourceTags) && !((_b = Context.config) === null || _b === void 0 ? void 0 : _b.debugViewTag);\n if (hasNoCustomHeaders && !!navigator && !!navigator.sendBeacon) {\n const beaconStatus = await this.sendBeaconUploader.post(url, pingRequest, false);\n if (beaconStatus.result == 2) {\n return beaconStatus;\n }\n log(LOG_TAG, \"The `sendBeacon` call was not serviced by the browser. Falling back to the `fetch` uploader.\", LoggingLevel.Warn);\n }\n else {\n log(LOG_TAG, \"`sendBeacon` is not available. Falling back to the `fetch` uploader.\", LoggingLevel.Warn);\n }\n return this.fetchUploader.post(url, pingRequest);\n }\n supportsCustomHeaders() {\n return false;\n }\n}\nexport default new BrowserSendBeaconFallbackUploader();\n","import { Context } from \"../../../core/context.js\";\nimport log, { LoggingLevel } from \"../../../core/log.js\";\nimport { deleteKeyFromNestedObject, getValueFromNestedObject, updateNestedObject } from \"../../../core/storage.js\";\nimport { isWindowObjectUnavailable } from \"../../../core/utils.js\";\nconst LOG_TAG = \"platform.web.Storage\";\nclass WebStore {\n constructor(rootKey) {\n this.rootKey = rootKey;\n this.logTag = `${LOG_TAG}.${rootKey}`;\n }\n get(index = []) {\n if (isWindowObjectUnavailable()) {\n return;\n }\n let result;\n try {\n const json = localStorage.getItem(this.rootKey) || \"{}\";\n const obj = JSON.parse(json);\n if (index.length > 0) {\n result = getValueFromNestedObject(obj, index);\n }\n else {\n result = Object.keys(obj).length === 0 ? undefined : obj;\n }\n }\n catch (err) {\n log(LOG_TAG, [\"Unable to fetch value from local storage.\", err], LoggingLevel.Error);\n }\n if (this.shouldUpdateSession(index)) {\n Context.coreMetrics.updateSessionInfo();\n }\n return result;\n }\n update(index, transformFn) {\n if (isWindowObjectUnavailable()) {\n return;\n }\n try {\n const json = localStorage.getItem(this.rootKey) || \"{}\";\n const obj = JSON.parse(json);\n const updatedObj = updateNestedObject(obj, index, transformFn);\n localStorage.setItem(this.rootKey, JSON.stringify(updatedObj));\n }\n catch (err) {\n log(LOG_TAG, [\"Unable to update value from local storage.\", err], LoggingLevel.Error);\n }\n if (this.shouldUpdateSession(index)) {\n Context.coreMetrics.updateSessionInfo();\n }\n }\n delete(index) {\n if (isWindowObjectUnavailable()) {\n return;\n }\n try {\n const json = localStorage.getItem(this.rootKey) || \"{}\";\n const obj = JSON.parse(json);\n if (index.length === 0) {\n localStorage.removeItem(this.rootKey);\n }\n else {\n try {\n const updatedObj = deleteKeyFromNestedObject(obj, index);\n localStorage.setItem(this.rootKey, JSON.stringify(updatedObj));\n }\n catch (e) {\n log(this.logTag, [`Error attempting to delete key ${index.toString()} from storage. Ignoring.`, e], LoggingLevel.Warn);\n }\n }\n }\n catch (err) {\n log(LOG_TAG, [\"Unable to delete value from storage.\", err], LoggingLevel.Error);\n }\n if (this.shouldUpdateSession(index)) {\n Context.coreMetrics.updateSessionInfo();\n }\n }\n shouldUpdateSession(index) {\n return !index.includes(\"session_id\") && !index.includes(\"session_count\");\n }\n}\nexport default WebStore;\n","import { isJSONValue, isObject } from \"./utils.js\";\nexport function getValueFromNestedObject(obj, index) {\n if (index.length === 0) {\n throw Error(\"The index must contain at least one property to get.\");\n }\n let target = obj;\n for (const key of index) {\n if (isObject(target) && key in target) {\n const temp = target[key];\n if (isJSONValue(temp)) {\n target = temp;\n }\n }\n else {\n return;\n }\n }\n return target;\n}\nexport function updateNestedObject(obj, index, transformFn) {\n if (index.length === 0) {\n throw Error(\"The index must contain at least one property to update.\");\n }\n const returnObject = { ...obj };\n let target = returnObject;\n for (const key of index.slice(0, index.length - 1)) {\n if (!isObject(target[key])) {\n target[key] = {};\n }\n target = target[key];\n }\n const finalKey = index[index.length - 1];\n const current = target[finalKey];\n const value = transformFn(current);\n target[finalKey] = value;\n return returnObject;\n}\nexport function deleteKeyFromNestedObject(obj, index) {\n if (index.length === 0) {\n return {};\n }\n const returnObject = { ...obj };\n let target = returnObject;\n for (const key of index.slice(0, index.length - 1)) {\n const value = target[key];\n if (!isObject(value)) {\n throw Error(`Attempted to delete an entry from an inexistent index: ${JSON.stringify(index)}.`);\n }\n else {\n target = value;\n }\n }\n const finalKey = index[index.length - 1];\n delete target[finalKey];\n return returnObject;\n}\n","import { DEFAULT_TELEMETRY_ENDPOINT, GLEAN_MAX_SOURCE_TAGS } from \"./constants.js\";\nimport { validateHeader, validateURL } from \"./utils.js\";\nimport log, { LoggingLevel } from \"./log.js\";\nimport { Context } from \"./context.js\";\nconst LOG_TAG = \"core.Config\";\nconst DEFAULT_MAX_EVENTS = 1;\nexport class Configuration {\n constructor(config) {\n var _a;\n this.channel = config === null || config === void 0 ? void 0 : config.channel;\n this.appBuild = config === null || config === void 0 ? void 0 : config.appBuild;\n this.appDisplayVersion = config === null || config === void 0 ? void 0 : config.appDisplayVersion;\n this.buildDate = config === null || config === void 0 ? void 0 : config.buildDate;\n this.maxEvents = (config === null || config === void 0 ? void 0 : config.maxEvents) || DEFAULT_MAX_EVENTS;\n this.enableAutoPageLoadEvents = config === null || config === void 0 ? void 0 : config.enableAutoPageLoadEvents;\n this.enableAutoElementClickEvents = config === null || config === void 0 ? void 0 : config.enableAutoElementClickEvents;\n this.experimentationId = config === null || config === void 0 ? void 0 : config.experimentationId;\n this.sessionLengthInMinutesOverride = config === null || config === void 0 ? void 0 : config.sessionLengthInMinutesOverride;\n this.debug = {};\n if ((config === null || config === void 0 ? void 0 : config.serverEndpoint) && !validateURL(config.serverEndpoint)) {\n throw new Error(`Unable to initialize Glean, serverEndpoint ${config.serverEndpoint} is an invalid URL.`);\n }\n if (!Context.testing && ((_a = config === null || config === void 0 ? void 0 : config.serverEndpoint) === null || _a === void 0 ? void 0 : _a.startsWith(\"http:\"))) {\n throw new Error(`Unable to initialize Glean, serverEndpoint ${config.serverEndpoint} must use the HTTPS protocol.`);\n }\n this.serverEndpoint = (config && config.serverEndpoint)\n ? config.serverEndpoint : DEFAULT_TELEMETRY_ENDPOINT;\n this.httpClient = config === null || config === void 0 ? void 0 : config.httpClient;\n }\n get logPings() {\n return this.debug.logPings || false;\n }\n set logPings(flag) {\n this.debug.logPings = flag;\n }\n get debugViewTag() {\n return this.debug.debugViewTag;\n }\n set debugViewTag(tag) {\n if (!validateHeader(tag || \"\")) {\n log(LOG_TAG, [\n `\"${tag || \"\"}\" is not a valid \\`debugViewTag\\` value.`,\n \"Please make sure the value passed satisfies the regex `^[a-zA-Z0-9-]{1,20}$`.\"\n ], LoggingLevel.Error);\n return;\n }\n this.debug.debugViewTag = tag;\n }\n get sourceTags() {\n return this.debug.sourceTags;\n }\n set sourceTags(tags) {\n if (!tags || tags.length < 1 || tags.length > GLEAN_MAX_SOURCE_TAGS) {\n log(LOG_TAG, `A list of tags cannot contain more than ${GLEAN_MAX_SOURCE_TAGS} elements or less than one.`, LoggingLevel.Error);\n return;\n }\n for (const tag of tags) {\n if (tag.startsWith(\"glean\")) {\n log(LOG_TAG, \"Tags starting with `glean` are reserved and must not be used.\", LoggingLevel.Error);\n return;\n }\n if (!validateHeader(tag)) {\n return;\n }\n }\n this.debug.sourceTags = tags;\n }\n}\n","import { strToU8 } from \"fflate\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport { Context } from \"../context.js\";\nimport { DELETION_REQUEST_PING_NAME } from \"../constants.js\";\nimport { isJSONValue, isNumber, isObject, isString } from \"../utils.js\";\nexport const PINGS_DATABASE_LOG_TAG = \"core.Pings.Database\";\nclass PingsDatabase {\n constructor() {\n this.store = new Context.platform.Storage(\"pings\");\n }\n attachObserver(observer) {\n this.observer = observer;\n }\n recordPing(path, identifier, payload, headers) {\n const ping = {\n collectionDate: new Date().toISOString(),\n path,\n payload\n };\n if (headers) {\n ping.headers = headers;\n }\n this.store.update([identifier], () => ping);\n this.observer && this.observer.update(identifier, ping);\n }\n deletePing(identifier) {\n this.store.delete([identifier]);\n }\n getAllPings() {\n const allStoredPings = this.store.get();\n const finalPings = {};\n if (isObject(allStoredPings)) {\n for (const identifier in allStoredPings) {\n const ping = allStoredPings[identifier];\n if (isValidPingInternalRepresentation(ping)) {\n finalPings[identifier] = ping;\n }\n else {\n log(PINGS_DATABASE_LOG_TAG, `Unexpected data found in pings database: ${JSON.stringify(ping, null, 2)}. Deleting.`, LoggingLevel.Warn);\n this.store.delete([identifier]);\n }\n }\n }\n return sortPings(finalPings);\n }\n scanPendingPings() {\n if (!this.observer) {\n return;\n }\n const pings = this.getAllPingsWithoutSurplus();\n for (const [identifier, ping] of pings) {\n this.observer.update(identifier, ping);\n }\n }\n clearAll() {\n this.store.delete([]);\n }\n getAllPingsWithoutSurplus(maxCount = 250, maxSize = 10 * 1024 * 1024) {\n const allPings = this.getAllPings();\n const pings = allPings\n .filter(([_, ping]) => !isDeletionRequest(ping))\n .reverse();\n const deletionRequestPings = allPings.filter(([_, ping]) => isDeletionRequest(ping));\n const total = pings.length;\n if (total > maxCount) {\n log(PINGS_DATABASE_LOG_TAG, [\n `More than ${maxCount} pending pings in the pings database,`,\n `will delete ${total - maxCount} old pings.`\n ], LoggingLevel.Warn);\n }\n let deleting = false;\n let pendingPingsCount = 0;\n let pendingPingsDatabaseSize = 0;\n const remainingPings = [];\n for (const [identifier, ping] of pings) {\n pendingPingsCount++;\n pendingPingsDatabaseSize += getPingSize(ping);\n if (!deleting && pendingPingsDatabaseSize > maxSize) {\n log(PINGS_DATABASE_LOG_TAG, [\n `Pending pings database has reached the size quota of ${maxSize} bytes,`,\n \"outstanding pings will be deleted.\"\n ], LoggingLevel.Warn);\n deleting = true;\n }\n if (pendingPingsCount > maxCount) {\n deleting = true;\n }\n if (deleting) {\n this.deletePing(identifier);\n }\n else {\n remainingPings.unshift([identifier, ping]);\n }\n }\n return [...deletionRequestPings, ...remainingPings];\n }\n}\nexport function isDeletionRequest(ping) {\n return ping.path.split(\"/\")[3] === DELETION_REQUEST_PING_NAME;\n}\nexport function getPingSize(ping) {\n return strToU8(JSON.stringify(ping)).length;\n}\nexport function isValidPingInternalRepresentation(v) {\n if (isObject(v)) {\n const hasValidCollectionDate = \"collectionDate\" in v &&\n isString(v.collectionDate) &&\n isNumber(new Date(v.collectionDate).getTime());\n const hasValidPath = \"path\" in v && isString(v.path);\n const hasValidPayload = \"payload\" in v && isJSONValue(v.payload) && isObject(v.payload);\n const hasValidHeaders = !(\"headers\" in v) || (isJSONValue(v.headers) && isObject(v.headers));\n if (!hasValidCollectionDate || !hasValidPath || !hasValidPayload || !hasValidHeaders) {\n return false;\n }\n return true;\n }\n return false;\n}\nexport function sortPings(pings) {\n return Object.entries(pings).sort(([_idA, { collectionDate: dateA }], [_idB, { collectionDate: dateB }]) => {\n const timeA = new Date(dateA).getTime();\n const timeB = new Date(dateB).getTime();\n return timeA - timeB;\n });\n}\nexport default PingsDatabase;\n","export default class Policy {\n constructor(maxWaitAttempts = 3, maxRecoverableFailures = 3, maxPingBodySize = 1024 * 1024) {\n this.maxWaitAttempts = maxWaitAttempts;\n this.maxRecoverableFailures = maxRecoverableFailures;\n this.maxPingBodySize = maxPingBodySize;\n }\n}\n","export class PingBodyOverflowError extends Error {\n constructor(message) {\n super(message);\n this.name = \"PingBodyOverflow\";\n }\n}\n","import { gzipSync, strToU8 } from \"fflate\";\nimport { PingBodyOverflowError } from \"./ping_body_overflow_error.js\";\nexport default class PingRequest {\n constructor(identifier, headers, payload, maxBodySize) {\n this.identifier = identifier;\n this.headers = headers;\n this.payload = payload;\n this.maxBodySize = maxBodySize;\n }\n asCompressedPayload() {\n if (this.headers[\"Content-Encoding\"] == \"gzip\") {\n return this;\n }\n const encodedBody = strToU8(this.payload);\n let finalBody;\n const headers = this.headers;\n try {\n finalBody = gzipSync(encodedBody);\n headers[\"Content-Encoding\"] = \"gzip\";\n headers[\"Content-Length\"] = finalBody.length.toString();\n }\n catch (_a) {\n return this;\n }\n if (finalBody.length > this.maxBodySize) {\n throw new PingBodyOverflowError(`Body for ping ${this.identifier} exceeds ${this.maxBodySize} bytes. Discarding.`);\n }\n return new PingRequest(this.identifier, headers, finalBody, this.maxBodySize);\n }\n}\n","import { Context } from \"../context.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport Policy from \"./policy.js\";\nimport { UploadResult } from \"./uploader.js\";\nimport { GLEAN_VERSION } from \"../constants.js\";\nimport { PingBodyOverflowError } from \"./ping_body_overflow_error.js\";\nimport PingRequest from \"./ping_request.js\";\nconst PING_UPLOAD_WORKER_LOG_TAG = \"core.Upload.PingUploadWorker\";\nclass PingUploadWorker {\n constructor(uploader, serverEndpoint, policy = new Policy()) {\n this.uploader = uploader;\n this.serverEndpoint = serverEndpoint;\n this.policy = policy;\n this.isBlocking = false;\n }\n buildPingRequest(ping) {\n let headers = ping.headers || {};\n headers = {\n ...ping.headers,\n \"Content-Type\": \"application/json; charset=utf-8\",\n Date: new Date().toISOString(),\n \"X-Telemetry-Agent\": `Glean/${GLEAN_VERSION} (JS on ${(Context.platform).info.os()})`\n };\n const stringifiedBody = JSON.stringify(ping.payload);\n if (stringifiedBody.length > this.policy.maxPingBodySize) {\n throw new PingBodyOverflowError(`Body for ping ${ping.identifier} exceeds ${this.policy.maxPingBodySize}bytes. Discarding.`);\n }\n headers[\"Content-Length\"] = stringifiedBody.length.toString();\n return new PingRequest(ping.identifier, headers, stringifiedBody, this.policy.maxPingBodySize);\n }\n async attemptPingUpload(ping) {\n try {\n const finalPing = this.buildPingRequest(ping);\n return this.uploader.post(`${this.serverEndpoint}${ping.path}`, finalPing);\n }\n catch (e) {\n log(PING_UPLOAD_WORKER_LOG_TAG, [\"Error trying to build or post ping request:\", e], LoggingLevel.Warn);\n return new UploadResult(1);\n }\n }\n work(getUploadTask, processUploadResponse) {\n while (true) {\n try {\n const task = getUploadTask();\n switch (task.type) {\n case \"upload\": {\n if (this.isBlocking) {\n return;\n }\n this.attemptPingUpload(task.ping)\n .then((result) => {\n processUploadResponse(task.ping, result);\n })\n .catch((error) => {\n console.log(error);\n });\n continue;\n }\n case \"done\":\n return;\n }\n }\n catch (error) {\n log(PING_UPLOAD_WORKER_LOG_TAG, [\"IMPOSSIBLE: Something went wrong while processing ping upload tasks.\", error], LoggingLevel.Error);\n }\n }\n }\n blockUploading() {\n this.isBlocking = true;\n }\n resumeUploading() {\n this.isBlocking = false;\n }\n}\nexport default PingUploadWorker;\n","import { Context } from \"../context.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport { isDeletionRequest } from \"../pings/database.js\";\nimport RateLimiter from \"./rate_limiter.js\";\nimport PingUploadWorker from \"./worker.js\";\nimport Policy from \"./policy.js\";\nimport uploadTaskFactory from \"./task.js\";\nconst UPLOAD_MANAGER_LOG_TAG = \"core.Upload.PingUploadManager\";\nclass PingUploadManager {\n constructor(config, pingsDatabase, policy = new Policy(), rateLimiter = new RateLimiter()) {\n this.pingsDatabase = pingsDatabase;\n this.policy = policy;\n this.rateLimiter = rateLimiter;\n this.recoverableFailureCount = 0;\n this.waitAttemptCount = 0;\n this.queue = [];\n this.processing = new Set();\n this.worker = new PingUploadWorker(config.httpClient ? config.httpClient : Context.platform.uploader, config.serverEndpoint, policy);\n pingsDatabase.attachObserver(this);\n }\n getUploadTask() {\n const nextTask = this.getUploadTaskInternal();\n if (nextTask.type !== \"wait\" && this.waitAttemptCount > 0) {\n this.waitAttemptCount = 0;\n }\n if (nextTask.type !== \"upload\" && this.recoverableFailureCount > 0) {\n this.recoverableFailureCount = 0;\n }\n return nextTask;\n }\n processPingUploadResponse(ping, response) {\n const { identifier } = ping;\n if (this.processing.has(identifier)) {\n this.processing.delete(identifier);\n }\n const { status, result } = response;\n if (status && status >= 200 && status < 300) {\n log(UPLOAD_MANAGER_LOG_TAG, `Ping ${identifier} successfully sent ${status}.`, LoggingLevel.Info);\n this.pingsDatabase.deletePing(identifier);\n return;\n }\n if (result === 1 ||\n (status && status >= 400 && status < 500)) {\n log(UPLOAD_MANAGER_LOG_TAG, `Unrecoverable upload failure while attempting to send ping ${identifier}. Error was: ${status !== null && status !== void 0 ? status : \"no status\"}.`, LoggingLevel.Warn);\n this.pingsDatabase.deletePing(identifier);\n return;\n }\n log(UPLOAD_MANAGER_LOG_TAG, [\n `Recoverable upload failure while attempting to send ping ${identifier}, will retry.`,\n `Error was: ${status !== null && status !== void 0 ? status : \"no status\"}.`\n ], LoggingLevel.Warn);\n this.recoverableFailureCount++;\n this.enqueuePing(ping);\n }\n clearPendingPingsQueue() {\n this.queue = this.queue.filter((ping) => isDeletionRequest(ping));\n }\n blockUploads() {\n this.worker.blockUploading();\n }\n resumeUploads() {\n this.worker.resumeUploading();\n }\n update(identifier, ping) {\n this.enqueuePing({ identifier, ...ping });\n if (!this.worker.isBlocking) {\n this.processing.delete(identifier);\n this.pingsDatabase.deletePing(identifier);\n }\n this.worker.work(() => this.getUploadTask(), (ping, result) => this.processPingUploadResponse(ping, result));\n }\n enqueuePing(ping) {\n if (this.processing.has(ping.identifier)) {\n return;\n }\n for (const queuedPing of this.queue) {\n if (queuedPing.identifier === ping.identifier) {\n return;\n }\n }\n this.queue.push(ping);\n }\n getUploadTaskInternal() {\n if (this.recoverableFailureCount >= this.policy.maxRecoverableFailures) {\n log(UPLOAD_MANAGER_LOG_TAG, \"Glean has reached maximum recoverable upload failures for the current uploading window.\", LoggingLevel.Debug);\n return uploadTaskFactory.done();\n }\n if (this.queue.length > 0) {\n const { state, remainingTime } = this.rateLimiter.getState();\n if (state === 1) {\n log(UPLOAD_MANAGER_LOG_TAG, [\n \"Glean is currently throttled.\",\n `Pending pings may be uploaded in ${(remainingTime || 0) / 1000}s.`\n ], LoggingLevel.Debug);\n this.waitAttemptCount++;\n if (this.waitAttemptCount > this.policy.maxWaitAttempts) {\n return uploadTaskFactory.done();\n }\n return uploadTaskFactory.wait(remainingTime || 0);\n }\n const nextPing = this.queue.shift();\n this.processing.add(nextPing.identifier);\n return uploadTaskFactory.upload(nextPing);\n }\n return uploadTaskFactory.done();\n }\n}\nexport default PingUploadManager;\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _inner;\nimport { MetricType } from \"../index.js\";\nimport TimeUnit from \"../../metrics/time_unit.js\";\nimport { Context } from \"../../context.js\";\nimport { MetricValidationError } from \"../metric.js\";\nimport { Metric, MetricValidation } from \"../metric.js\";\nimport { isNumber, isObject, isString, testOnlyCheck } from \"../../utils.js\";\nconst LOG_TAG = \"core.metrics.DatetimeMetricType\";\nexport function formatTimezoneOffset(timezone) {\n const offset = (timezone / 60) * -1;\n const sign = offset > 0 ? \"+\" : \"-\";\n const hours = Math.abs(offset).toString().padStart(2, \"0\");\n return `${sign}${hours}:00`;\n}\nexport class DatetimeMetric extends Metric {\n constructor(v) {\n super(v);\n }\n static fromDate(v, timeUnit) {\n if (!(v instanceof Date)) {\n throw new MetricValidationError(`Expected Date object, got ${JSON.stringify(v)}`);\n }\n return new DatetimeMetric({\n timeUnit,\n timezone: v.getTimezoneOffset(),\n date: v.toISOString()\n });\n }\n get date() {\n return new Date(this.inner.date);\n }\n get timezone() {\n return this.inner.timezone;\n }\n get timeUnit() {\n return this.inner.timeUnit;\n }\n get dateISOString() {\n return this.inner.date;\n }\n validate(v) {\n if (!isObject(v) || Object.keys(v).length !== 3) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Expected Glean datetime metric object, got ${JSON.stringify(v)}`\n };\n }\n const timeUnitVerification = \"timeUnit\" in v &&\n isString(v.timeUnit) &&\n Object.values(TimeUnit).includes(v.timeUnit);\n const timezoneVerification = \"timezone\" in v && isNumber(v.timezone);\n const dateVerification = \"date\" in v && isString(v.date) && v.date.length === 24 && !isNaN(Date.parse(v.date));\n if (!timeUnitVerification || !timezoneVerification || !dateVerification) {\n return {\n type: MetricValidation.Error,\n errorMessage: `Invalid property on datetime metric, got ${JSON.stringify(v)}`\n };\n }\n return { type: MetricValidation.Success };\n }\n payload() {\n const extractedDateInfo = this.dateISOString.match(/\\d+/g);\n if (!extractedDateInfo || extractedDateInfo.length < 0) {\n throw new Error(\"IMPOSSIBLE: Unable to extract date information from DatetimeMetric.\");\n }\n const correctedDate = new Date(parseInt(extractedDateInfo[0]), parseInt(extractedDateInfo[1]) - 1, parseInt(extractedDateInfo[2]), parseInt(extractedDateInfo[3]) - this.timezone / 60, parseInt(extractedDateInfo[4]), parseInt(extractedDateInfo[5]), parseInt(extractedDateInfo[6]));\n const timezone = formatTimezoneOffset(this.timezone);\n const year = correctedDate.getFullYear().toString().padStart(2, \"0\");\n const month = (correctedDate.getMonth() + 1).toString().padStart(2, \"0\");\n const day = correctedDate.getDate().toString().padStart(2, \"0\");\n if (this.timeUnit === TimeUnit.Day) {\n return `${year}-${month}-${day}${timezone}`;\n }\n const hours = correctedDate.getHours().toString().padStart(2, \"0\");\n if (this.timeUnit === TimeUnit.Hour) {\n return `${year}-${month}-${day}T${hours}${timezone}`;\n }\n const minutes = correctedDate.getMinutes().toString().padStart(2, \"0\");\n if (this.timeUnit === TimeUnit.Minute) {\n return `${year}-${month}-${day}T${hours}:${minutes}${timezone}`;\n }\n const seconds = correctedDate.getSeconds().toString().padStart(2, \"0\");\n if (this.timeUnit === TimeUnit.Second) {\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}${timezone}`;\n }\n const milliseconds = correctedDate.getMilliseconds().toString().padStart(3, \"0\");\n if (this.timeUnit === TimeUnit.Millisecond) {\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}${timezone}`;\n }\n if (this.timeUnit === TimeUnit.Microsecond) {\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}000${timezone}`;\n }\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}000000${timezone}`;\n }\n}\nexport class InternalDatetimeMetricType extends MetricType {\n constructor(meta, timeUnit) {\n super(\"datetime\", meta, DatetimeMetric);\n this.timeUnit = timeUnit;\n }\n set(value) {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n const truncatedDate = this.truncateDate(value);\n try {\n const metric = DatetimeMetric.fromDate(truncatedDate, this.timeUnit);\n Context.metricsDatabase.record(this, metric);\n }\n catch (e) {\n if (e instanceof MetricValidationError) {\n e.recordError(this);\n }\n }\n }\n truncateDate(value) {\n if (!value) {\n value = new Date();\n }\n const truncatedDate = value;\n switch (this.timeUnit) {\n case TimeUnit.Day:\n truncatedDate.setMilliseconds(0);\n truncatedDate.setSeconds(0);\n truncatedDate.setMinutes(0);\n truncatedDate.setMilliseconds(0);\n case TimeUnit.Hour:\n truncatedDate.setMilliseconds(0);\n truncatedDate.setSeconds(0);\n truncatedDate.setMinutes(0);\n case TimeUnit.Minute:\n truncatedDate.setMilliseconds(0);\n truncatedDate.setSeconds(0);\n case TimeUnit.Second:\n truncatedDate.setMilliseconds(0);\n default:\n break;\n }\n return truncatedDate;\n }\n testGetValueAsDatetimeMetric(ping, fn) {\n if (testOnlyCheck(fn, LOG_TAG)) {\n const value = Context.metricsDatabase.getMetric(ping, this);\n if (value) {\n return new DatetimeMetric(value);\n }\n }\n }\n testGetValueAsString(ping = this.sendInPings[0]) {\n const metric = this.testGetValueAsDatetimeMetric(ping, \"testGetValueAsString\");\n return metric ? metric.payload() : undefined;\n }\n testGetValue(ping = this.sendInPings[0]) {\n const metric = this.testGetValueAsDatetimeMetric(ping, \"testGetValue\");\n return metric ? metric.date : undefined;\n }\n}\nexport default class {\n constructor(meta, timeUnit) {\n _inner.set(this, void 0);\n __classPrivateFieldSet(this, _inner, new InternalDatetimeMetricType(meta, timeUnit), \"f\");\n }\n set(value) {\n __classPrivateFieldGet(this, _inner, \"f\").set(value);\n }\n testGetValueAsString(ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetValueAsString(ping);\n }\n testGetValue(ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetValue(ping);\n }\n testGetNumRecordedErrors(errorType, ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetNumRecordedErrors(errorType, ping);\n }\n}\n_inner = new WeakMap();\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _inner;\nimport { Context } from \"../../context.js\";\nimport { MetricType } from \"../index.js\";\nimport { Metric, MetricValidationError } from \"../metric.js\";\nimport { validateString } from \"../utils.js\";\nimport { testOnlyCheck, truncateStringAtBytesBoundaryWithError } from \"../../utils.js\";\nconst LOG_TAG = \"core.metrics.StringMetricType\";\nexport const MAX_STRING_LENGTH_IN_BYTES = 100;\nexport class StringMetric extends Metric {\n constructor(v) {\n super(v);\n }\n validate(v) {\n return validateString(v);\n }\n payload() {\n return this.inner;\n }\n}\nexport class InternalStringMetricType extends MetricType {\n constructor(meta) {\n super(\"string\", meta, StringMetric);\n }\n set(value) {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n try {\n const truncatedValue = truncateStringAtBytesBoundaryWithError(this, value, MAX_STRING_LENGTH_IN_BYTES);\n const metric = new StringMetric(truncatedValue);\n Context.metricsDatabase.record(this, metric);\n }\n catch (e) {\n if (e instanceof MetricValidationError) {\n e.recordError(this);\n }\n }\n }\n testGetValue(ping = this.sendInPings[0]) {\n if (testOnlyCheck(\"testGetValue\", LOG_TAG)) {\n return Context.metricsDatabase.getMetric(ping, this);\n }\n }\n}\nexport default class {\n constructor(meta) {\n _inner.set(this, void 0);\n __classPrivateFieldSet(this, _inner, new InternalStringMetricType(meta), \"f\");\n }\n set(value) {\n __classPrivateFieldGet(this, _inner, \"f\").set(value);\n }\n testGetValue(ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetValue(ping);\n }\n testGetNumRecordedErrors(errorType, ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetNumRecordedErrors(errorType, ping);\n }\n}\n_inner = new WeakMap();\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _inner;\nimport { saturatingAdd, isUndefined, testOnlyCheck } from \"../../utils.js\";\nimport { MetricType } from \"../index.js\";\nimport { Context } from \"../../context.js\";\nimport { Metric, MetricValidationError } from \"../metric.js\";\nimport log from \"../../log.js\";\nimport { validatePositiveInteger } from \"../utils.js\";\nconst LOG_TAG = \"core.metrics.CounterMetricType\";\nexport class CounterMetric extends Metric {\n constructor(v) {\n super(v);\n }\n validate(v) {\n return validatePositiveInteger(v, false);\n }\n payload() {\n return this.inner;\n }\n saturatingAdd(amount) {\n const correctAmount = this.validateOrThrow(amount);\n this.inner = saturatingAdd(this.inner, correctAmount);\n }\n}\nexport class InternalCounterMetricType extends MetricType {\n constructor(meta) {\n super(\"counter\", meta, CounterMetric);\n }\n add(amount) {\n if (!this.shouldRecord(Context.uploadEnabled)) {\n return;\n }\n if (isUndefined(amount)) {\n amount = 1;\n }\n try {\n Context.metricsDatabase.transform(this, this.transformFn(amount));\n }\n catch (e) {\n if (e instanceof MetricValidationError) {\n e.recordError(this);\n }\n }\n }\n transformFn(amount) {\n return (v) => {\n const metric = new CounterMetric(amount);\n if (v) {\n try {\n metric.saturatingAdd(v);\n }\n catch (_a) {\n log(LOG_TAG, `Unexpected value found in storage for metric ${this.name}: ${JSON.stringify(v)}. Overwriting.`);\n }\n }\n return metric;\n };\n }\n testGetValue(ping = this.sendInPings[0]) {\n if (testOnlyCheck(\"testGetValue\", LOG_TAG)) {\n return Context.metricsDatabase.getMetric(ping, this);\n }\n }\n}\nexport default class {\n constructor(meta) {\n _inner.set(this, void 0);\n __classPrivateFieldSet(this, _inner, new InternalCounterMetricType(meta), \"f\");\n }\n add(amount) {\n __classPrivateFieldGet(this, _inner, \"f\").add(amount);\n }\n testGetValue(ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetValue(ping);\n }\n testGetNumRecordedErrors(errorType, ping = __classPrivateFieldGet(this, _inner, \"f\").sendInPings[0]) {\n return __classPrivateFieldGet(this, _inner, \"f\").testGetNumRecordedErrors(errorType, ping);\n }\n}\n_inner = new WeakMap();\n","import { KNOWN_CLIENT_ID, CLIENT_INFO_STORAGE } from \"./constants.js\";\nimport { InternalUUIDMetricType as UUIDMetricType } from \"./metrics/types/uuid.js\";\nimport { InternalDatetimeMetricType as DatetimeMetricType } from \"./metrics/types/datetime.js\";\nimport { InternalStringMetricType as StringMetricType } from \"./metrics/types/string.js\";\nimport { InternalCounterMetricType as CounterMetricType } from \"./metrics/types/counter.js\";\nimport { createMetric } from \"./metrics/utils.js\";\nimport TimeUnit from \"./metrics/time_unit.js\";\nimport { generateUUIDv4, isWindowObjectUnavailable } from \"./utils.js\";\nimport log, { LoggingLevel } from \"./log.js\";\nimport { Context } from \"./context.js\";\nimport { isSessionInactive } from \"./sessions.js\";\nconst LOG_TAG = \"core.InternalMetrics\";\nexport class CoreMetrics {\n constructor() {\n this.clientId = new UUIDMetricType({\n name: \"client_id\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"user\",\n disabled: false\n });\n this.firstRunDate = new DatetimeMetricType({\n name: \"first_run_date\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"user\",\n disabled: false\n }, TimeUnit.Day);\n this.os = new StringMetricType({\n name: \"os\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.osVersion = new StringMetricType({\n name: \"os_version\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.architecture = new StringMetricType({\n name: \"architecture\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.locale = new StringMetricType({\n name: \"locale\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.appChannel = new StringMetricType({\n name: \"app_channel\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.appBuild = new StringMetricType({\n name: \"app_build\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.appDisplayVersion = new StringMetricType({\n name: \"app_display_version\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n });\n this.buildDate = new DatetimeMetricType({\n name: \"build_date\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"application\",\n disabled: false\n }, \"second\");\n this.sessionId = new UUIDMetricType({\n name: \"session_id\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"user\",\n disabled: false\n });\n this.sessionCount = new CounterMetricType({\n name: \"session_count\",\n category: \"\",\n sendInPings: [\"glean_client_info\"],\n lifetime: \"user\",\n disabled: false\n });\n }\n initialize() {\n if (!Context.testing && isWindowObjectUnavailable()) {\n return;\n }\n this.initializeClientId();\n this.initializeFirstRunDate();\n this.updateSessionInfo();\n this.os.set(Context.platform.info.os());\n this.osVersion.set(Context.platform.info.osVersion());\n this.architecture.set(Context.platform.info.arch());\n this.locale.set(Context.platform.info.locale());\n this.appBuild.set(Context.config.appBuild || \"Unknown\");\n this.appDisplayVersion.set(Context.config.appDisplayVersion || \"Unknown\");\n if (Context.config.channel) {\n this.appChannel.set(Context.config.channel);\n }\n if (Context.config.buildDate) {\n this.buildDate.set();\n }\n }\n updateSessionInfo() {\n if (isWindowObjectUnavailable()) {\n return;\n }\n const existingSessionId = Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, this.sessionId);\n if (existingSessionId) {\n try {\n if (isSessionInactive(Context.config.sessionLengthInMinutesOverride)) {\n this.generateNewSession();\n }\n }\n catch (e) {\n this.generateNewSession();\n }\n }\n else {\n this.generateNewSession();\n }\n try {\n localStorage.setItem(\"glean_session_last_active\", Date.now().toString());\n }\n catch (e) {\n console.warn(e);\n }\n }\n initializeClientId() {\n let needNewClientId = false;\n const clientIdData = Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, this.clientId);\n if (clientIdData) {\n try {\n const currentClientId = createMetric(\"uuid\", clientIdData);\n if (currentClientId.payload() === KNOWN_CLIENT_ID) {\n needNewClientId = true;\n }\n }\n catch (_a) {\n log(LOG_TAG, \"Unexpected value found for Glean clientId. Ignoring.\", LoggingLevel.Warn);\n needNewClientId = true;\n }\n }\n else {\n needNewClientId = true;\n }\n if (needNewClientId) {\n this.clientId.set(generateUUIDv4());\n }\n }\n initializeFirstRunDate() {\n const firstRunDate = Context.metricsDatabase.getMetric(CLIENT_INFO_STORAGE, this.firstRunDate);\n if (!firstRunDate) {\n this.firstRunDate.set();\n }\n }\n generateNewSession() {\n this.sessionId.generateAndSet();\n this.sessionCount.add();\n }\n}\n","export function isSessionInactive(sessionLengthInMinutes = 30) {\n let lastActive = null;\n try {\n lastActive = localStorage.getItem(\"glean_session_last_active\");\n }\n catch (e) {\n console.warn(e);\n }\n const lastActiveDate = new Date(Number(lastActive));\n const inactiveThreshold = new Date();\n inactiveThreshold.setMinutes(inactiveThreshold.getMinutes() - sessionLengthInMinutes);\n return inactiveThreshold > lastActiveDate;\n}\n","import { Context } from \"../context.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport TimeUnit from \"../metrics/time_unit.js\";\nimport { CounterMetric } from \"../metrics/types/counter.js\";\nimport { InternalCounterMetricType as CounterMetricType } from \"../metrics/types/counter.js\";\nimport { DatetimeMetric } from \"../metrics/types/datetime.js\";\nimport { InternalDatetimeMetricType as DatetimeMetricType } from \"../metrics/types/datetime.js\";\nimport { GLEAN_VERSION, PING_INFO_STORAGE, CLIENT_INFO_STORAGE, GLEAN_SCHEMA_VERSION } from \"../constants.js\";\nconst PINGS_MAKER_LOG_TAG = \"core.Pings.Maker\";\nexport function makePath(identifier, ping) {\n return `/submit/${Context.applicationId}/${ping.name}/${GLEAN_SCHEMA_VERSION}/${identifier}`;\n}\nexport function getPingHeaders() {\n const headers = {};\n if (Context.config.debugViewTag) {\n headers[\"X-Debug-ID\"] = Context.config.debugViewTag;\n }\n if (Context.config.sourceTags) {\n headers[\"X-Source-Tags\"] = Context.config.sourceTags.toString();\n }\n if (Object.keys(headers).length > 0) {\n return headers;\n }\n}\nfunction getStartTimeMetricAndData(ping) {\n const startTimeMetric = new DatetimeMetricType({\n category: \"\",\n name: `${ping.name}#start`,\n sendInPings: [PING_INFO_STORAGE],\n lifetime: \"user\",\n disabled: false\n }, TimeUnit.Minute);\n const startTimeData = Context.metricsDatabase.getMetric(PING_INFO_STORAGE, startTimeMetric);\n let startTime;\n if (startTimeData) {\n startTime = new DatetimeMetric(startTimeData);\n }\n else {\n startTime = DatetimeMetric.fromDate(Context.startTime, TimeUnit.Minute);\n }\n return {\n startTimeMetric,\n startTime\n };\n}\nexport function getSequenceNumber(ping) {\n const seq = new CounterMetricType({\n category: \"\",\n name: `${ping.name}#sequence`,\n sendInPings: [PING_INFO_STORAGE],\n lifetime: \"user\",\n disabled: false\n });\n const currentSeqData = Context.metricsDatabase.getMetric(PING_INFO_STORAGE, seq);\n seq.add(1);\n if (currentSeqData) {\n try {\n const metric = new CounterMetric(currentSeqData);\n return metric.payload();\n }\n catch (e) {\n log(PINGS_MAKER_LOG_TAG, `Unexpected value found for sequence number in ping ${ping.name}. Ignoring.`, LoggingLevel.Warn);\n }\n }\n return 0;\n}\nexport function getStartEndTimes(ping) {\n const { startTimeMetric, startTime } = getStartTimeMetricAndData(ping);\n const endTimeData = new Date();\n startTimeMetric.set(endTimeData);\n const endTime = DatetimeMetric.fromDate(endTimeData, TimeUnit.Minute);\n return {\n startTime: startTime.payload(),\n endTime: endTime.payload()\n };\n}\nexport function buildPingInfoSection(ping, reason) {\n const seq = getSequenceNumber(ping);\n const { startTime, endTime } = getStartEndTimes(ping);\n const pingInfo = {\n seq,\n start_time: startTime,\n end_time: endTime\n };\n if (reason) {\n pingInfo.reason = reason;\n }\n return pingInfo;\n}\nexport function buildClientInfoSection(ping) {\n let clientInfo = Context.metricsDatabase.getPingMetrics(CLIENT_INFO_STORAGE, true);\n if (!clientInfo) {\n log(PINGS_MAKER_LOG_TAG, \"Empty client info data. Will submit anyways.\", LoggingLevel.Warn);\n clientInfo = {};\n }\n let finalClientInfo = {\n telemetry_sdk_build: GLEAN_VERSION\n };\n for (const metricType in clientInfo) {\n finalClientInfo = { ...finalClientInfo, ...clientInfo[metricType] };\n }\n if (!ping.includeClientId) {\n delete finalClientInfo[\"client_id\"];\n delete finalClientInfo[\"session_id\"];\n }\n return finalClientInfo;\n}\nexport function collectPing(ping, reason) {\n const eventsData = Context.eventsDatabase.getPingEvents(ping.name, true);\n let metricsData = Context.metricsDatabase.getPingMetrics(ping.name, true);\n if (!metricsData && !eventsData) {\n if (!ping.sendIfEmpty) {\n log(PINGS_MAKER_LOG_TAG, `Storage for ${ping.name} empty. Bailing out.`, LoggingLevel.Info);\n return;\n }\n log(PINGS_MAKER_LOG_TAG, `Storage for ${ping.name} empty. Ping will still be sent.`, LoggingLevel.Info);\n }\n if (ping.includeClientId && Context.config.experimentationId) {\n if (metricsData !== undefined) {\n metricsData = {\n ...metricsData,\n string: {\n ...(metricsData === null || metricsData === void 0 ? void 0 : metricsData.string) || undefined,\n \"glean.client.annotation.experimentation_id\": Context.config.experimentationId\n }\n };\n }\n else {\n metricsData = {\n \"string\": {\n \"glean.client.annotation.experimentation_id\": Context.config.experimentationId\n }\n };\n }\n }\n const metrics = metricsData ? { metrics: metricsData } : {};\n const events = eventsData ? { events: eventsData } : {};\n const pingInfo = buildPingInfoSection(ping, reason);\n const clientInfo = buildClientInfoSection(ping);\n return {\n ...metrics,\n ...events,\n ping_info: pingInfo,\n client_info: clientInfo\n };\n}\nexport function collectAndStorePing(identifier, ping, reason) {\n const collectedPayload = collectPing(ping, reason);\n if (!collectedPayload) {\n return;\n }\n if (Context.config.logPings) {\n log(PINGS_MAKER_LOG_TAG, JSON.stringify(collectedPayload, null, 2), LoggingLevel.Info);\n }\n const headers = getPingHeaders();\n Context.pingsDatabase.recordPing(makePath(identifier, ping), identifier, collectedPayload, headers);\n}\nexport default collectAndStorePing;\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _inner;\nimport { Context } from \"../context.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport { DELETION_REQUEST_PING_NAME } from \"../constants.js\";\nimport { generateUUIDv4, testOnlyCheck } from \"../utils.js\";\nimport collectAndStorePing from \"../pings/maker.js\";\nconst LOG_TAG = \"core.Pings.PingType\";\nfunction isDeletionRequest(name) {\n return name === DELETION_REQUEST_PING_NAME;\n}\nexport class InternalPingType {\n constructor(meta) {\n var _a;\n this.name = meta.name;\n this.includeClientId = meta.includeClientId;\n this.sendIfEmpty = meta.sendIfEmpty;\n this.reasonCodes = (_a = meta.reasonCodes) !== null && _a !== void 0 ? _a : [];\n this.preciseTimestamps = meta.preciseTimestamps;\n }\n submit(reason) {\n if (this.testCallback) {\n this.testCallback(reason)\n .then(() => {\n this.internalSubmit(reason, this.resolveTestPromiseFunction);\n })\n .catch((e) => {\n log(LOG_TAG, [`There was an error validating \"${this.name}\" (${reason !== null && reason !== void 0 ? reason : \"no reason\"}):`, e], LoggingLevel.Error);\n this.internalSubmit(reason, this.rejectTestPromiseFunction);\n });\n }\n else {\n this.internalSubmit(reason);\n }\n }\n internalSubmit(reason, testResolver) {\n if (!Context.initialized) {\n log(LOG_TAG, \"Glean must be initialized before submitting pings.\", LoggingLevel.Info);\n return;\n }\n if (!Context.uploadEnabled && !isDeletionRequest(this.name)) {\n log(LOG_TAG, \"Glean disabled: not submitting pings. Glean may still submit the deletion-request ping.\", LoggingLevel.Info);\n return;\n }\n let correctedReason = reason;\n if (reason && !this.reasonCodes.includes(reason)) {\n log(LOG_TAG, `Invalid reason code ${reason} from ${this.name}. Ignoring.`, LoggingLevel.Warn);\n correctedReason = undefined;\n }\n const identifier = generateUUIDv4();\n collectAndStorePing(identifier, this, correctedReason);\n if (testResolver) {\n testResolver();\n this.resolveTestPromiseFunction = undefined;\n this.rejectTestPromiseFunction = undefined;\n this.testCallback = undefined;\n }\n }\n async testBeforeNextSubmit(callbackFn) {\n if (testOnlyCheck(\"testBeforeNextSubmit\", LOG_TAG)) {\n if (this.testCallback) {\n log(LOG_TAG, `There is an existing test call for ping \"${this.name}\". Ignoring.`, LoggingLevel.Error);\n return;\n }\n return new Promise((resolve, reject) => {\n this.resolveTestPromiseFunction = resolve;\n this.rejectTestPromiseFunction = reject;\n this.testCallback = callbackFn;\n });\n }\n }\n}\nexport default class {\n constructor(meta) {\n _inner.set(this, void 0);\n __classPrivateFieldSet(this, _inner, new InternalPingType(meta), \"f\");\n }\n submit(reason) {\n __classPrivateFieldGet(this, _inner, \"f\").submit(reason);\n }\n testBeforeNextSubmit(callbackFn) {\n return __classPrivateFieldGet(this, _inner, \"f\").testBeforeNextSubmit(callbackFn);\n }\n}\n_inner = new WeakMap();\n","import { DELETION_REQUEST_PING_NAME, EVENTS_PING_NAME } from \"./constants.js\";\nimport { InternalPingType as PingType } from \"./pings/ping_type.js\";\nclass CorePings {\n constructor() {\n this.deletionRequest = new PingType({\n name: DELETION_REQUEST_PING_NAME,\n includeClientId: true,\n sendIfEmpty: true,\n reasonCodes: [\"at_init\", \"set_upload_enabled\"],\n });\n this.events = new PingType({\n name: EVENTS_PING_NAME,\n includeClientId: true,\n sendIfEmpty: false,\n reasonCodes: [\"startup\", \"max_capacity\"]\n });\n }\n}\nexport default CorePings;\n","import { createMetric, validateMetricInternalRepresentation } from \"./utils.js\";\nimport { isObject, isUndefined } from \"../utils.js\";\nimport log, { LoggingLevel } from \"../log.js\";\nimport { Context } from \"../context.js\";\nconst METRICS_DATABASE_LOG_TAG = \"core.Metrics.Database\";\nconst RESERVED_METRIC_NAME_PREFIX = \"reserved#\";\nexport const RESERVED_METRIC_IDENTIFIER_PREFIX = `glean.${RESERVED_METRIC_NAME_PREFIX}`;\nexport function generateReservedMetricIdentifiers(name) {\n return {\n category: \"glean\",\n name: `${RESERVED_METRIC_NAME_PREFIX}${name}`\n };\n}\nexport function createMetricsPayload(v) {\n const result = {};\n for (const metricType in v) {\n const metrics = v[metricType];\n result[metricType] = {};\n for (const metricIdentifier in metrics) {\n const metric = createMetric(metricType, metrics[metricIdentifier]);\n result[metricType][metricIdentifier] = metric.payload();\n }\n }\n return result;\n}\nclass MetricsDatabase {\n constructor() {\n this.userStore = new Context.platform.Storage(\"userLifetimeMetrics\");\n this.pingStore = new Context.platform.Storage(\"pingLifetimeMetrics\");\n this.appStore = new Context.platform.Storage(\"appLifetimeMetrics\");\n }\n record(metric, value) {\n this.transform(metric, () => value);\n }\n transform(metric, transformFn) {\n if (metric.disabled) {\n return;\n }\n const store = this.chooseStore(metric.lifetime);\n const storageKey = metric.identifier();\n for (const ping of metric.sendInPings) {\n const finalTransformFn = (v) => transformFn(v).get();\n store.update([ping, metric.type, storageKey], finalTransformFn);\n }\n }\n hasMetric(lifetime, ping, metricType, metricIdentifier) {\n const store = this.chooseStore(lifetime);\n const value = store.get([ping, metricType, metricIdentifier]);\n return !isUndefined(value);\n }\n countByBaseIdentifier(lifetime, ping, metricType, metricIdentifier) {\n const store = this.chooseStore(lifetime);\n const pingStorage = store.get([ping, metricType]);\n if (isUndefined(pingStorage)) {\n return 0;\n }\n return Object.keys(pingStorage).filter((n) => n.startsWith(metricIdentifier)).length;\n }\n getMetric(ping, metric) {\n const store = this.chooseStore(metric.lifetime);\n const storageKey = metric.identifier();\n const value = store.get([ping, metric.type, storageKey]);\n if (!isUndefined(value) && !validateMetricInternalRepresentation(metric.type, value)) {\n log(METRICS_DATABASE_LOG_TAG, `Unexpected value found for metric ${storageKey}: ${JSON.stringify(value)}. Clearing.`, LoggingLevel.Error);\n store.delete([ping, metric.type, storageKey]);\n return;\n }\n else {\n return value;\n }\n }\n getPingMetrics(ping, clearPingLifetimeData) {\n const userData = this.getCorrectedPingData(ping, \"user\");\n const pingData = this.getCorrectedPingData(ping, \"ping\");\n const appData = this.getCorrectedPingData(ping, \"application\");\n if (clearPingLifetimeData && Object.keys(pingData).length > 0) {\n this.clear(\"ping\", ping);\n }\n const response = {};\n for (const data of [userData, pingData, appData]) {\n for (const metricType in data) {\n for (const metricId in data[metricType]) {\n if (!metricId.startsWith(RESERVED_METRIC_IDENTIFIER_PREFIX)) {\n if (metricId.includes(\"/\")) {\n this.processLabeledMetric(response, metricType, metricId, data[metricType][metricId]);\n }\n else {\n response[metricType] = {\n ...response[metricType],\n [metricId]: data[metricType][metricId]\n };\n }\n }\n }\n }\n }\n if (Object.keys(response).length === 0) {\n return;\n }\n else {\n return createMetricsPayload(response);\n }\n }\n clear(lifetime, ping) {\n const store = this.chooseStore(lifetime);\n const storageIndex = ping ? [ping] : [];\n store.delete(storageIndex);\n }\n clearAll() {\n this.userStore.delete([]);\n this.pingStore.delete([]);\n this.appStore.delete([]);\n }\n chooseStore(lifetime) {\n switch (lifetime) {\n case \"user\":\n return this.userStore;\n case \"ping\":\n return this.pingStore;\n case \"application\":\n return this.appStore;\n }\n }\n getCorrectedPingData(ping, lifetime) {\n const store = this.chooseStore(lifetime);\n const data = store.get([ping]);\n if (isUndefined(data)) {\n return {};\n }\n if (!isObject(data)) {\n log(METRICS_DATABASE_LOG_TAG, `Invalid value found in storage for ping \"${ping}\". Deleting.`, LoggingLevel.Debug);\n store.delete([ping]);\n return {};\n }\n const correctedData = {};\n for (const metricType in data) {\n const metrics = data[metricType];\n if (!isObject(metrics)) {\n log(METRICS_DATABASE_LOG_TAG, `Unexpected data found in storage for metrics of type \"${metricType}\" in ping \"${ping}\". Deleting.`, LoggingLevel.Debug);\n store.delete([ping, metricType]);\n continue;\n }\n for (const metricIdentifier in metrics) {\n if (!validateMetricInternalRepresentation(metricType, metrics[metricIdentifier])) {\n log(METRICS_DATABASE_LOG_TAG, `Invalid value \"${JSON.stringify(metrics[metricIdentifier])}\" found in storage for metric \"${metricIdentifier}\". Deleting.`, LoggingLevel.Debug);\n store.delete([ping, metricType, metricIdentifier]);\n continue;\n }\n if (!correctedData[metricType]) {\n correctedData[metricType] = {};\n }\n correctedData[metricType][metricIdentifier] = metrics[metricIdentifier];\n }\n }\n return correctedData;\n }\n processLabeledMetric(snapshot, metricType, metricId, metricData) {\n const newType = `labeled_${metricType}`;\n const idLabelSplit = metricId.split(\"/\", 2);\n const newId = idLabelSplit[0];\n const label = idLabelSplit[1];\n if (newType in snapshot && newId in snapshot[newType]) {\n const existingData = snapshot[newType][newId];\n snapshot[newType][newId] = {\n ...existingData,\n [label]: metricData\n };\n }\n else {\n snapshot[newType] = {\n ...snapshot[newType],\n [newId]: {\n [label]: metricData\n }\n };\n }\n }\n}\nexport default MetricsDatabase;\n","import { Context } from \"../../context.js\";\nimport { EVENTS_PING_NAME, GLEAN_EXECUTION_COUNTER_EXTRA_KEY, GLEAN_REFERENCE_TIME_EXTRA_KEY } from \"../../constants.js\";\nimport { ErrorType } from \"../../error/error_type.js\";\nimport log, { LoggingLevel } from \"../../log.js\";\nimport { InternalEventMetricType as EventMetricType } from \"../types/event.js\";\nimport { InternalCounterMetricType as CounterMetricType } from \"../types/counter.js\";\nimport { RecordedEvent } from \"./recorded_event.js\";\nimport { generateReservedMetricIdentifiers } from \"../database.js\";\nimport { isString, isUndefined } from \"../../utils.js\";\nconst EVENT_DATABASE_LOG_TAG = \"core.Metric.EventsDatabase\";\nfunction recordGleanRestartedEvent(sendInPings, time = Context.startTime) {\n const metric = getGleanRestartedEventMetric(sendInPings);\n metric.record({\n [GLEAN_REFERENCE_TIME_EXTRA_KEY]: time.toISOString()\n }, 0);\n}\nexport function createDateObject(str) {\n if (!isString(str)) {\n str = \"\";\n }\n const date = new Date(str);\n if (isNaN(date.getTime())) {\n throw new Error(`Error attempting to generate Date object from string: ${str}`);\n }\n return date;\n}\nexport function getExecutionCounterMetric(sendInPings) {\n return new CounterMetricType({\n ...generateReservedMetricIdentifiers(\"execution_counter\"),\n sendInPings: sendInPings.filter((name) => name !== EVENTS_PING_NAME),\n lifetime: \"ping\",\n disabled: false\n });\n}\nexport function getGleanRestartedEventMetric(sendInPings) {\n return new EventMetricType({\n category: \"glean\",\n name: \"restarted\",\n sendInPings: sendInPings.filter((name) => name !== EVENTS_PING_NAME),\n lifetime: \"ping\",\n disabled: false\n }, [GLEAN_REFERENCE_TIME_EXTRA_KEY]);\n}\nexport function isRestartedEvent(event) {\n var _a, _b;\n return !!((_b = (_a = event === null || event === void 0 ? void 0 : event.get()) === null || _a === void 0 ? void 0 : _a.extra) === null || _b === void 0 ? void 0 : _b[GLEAN_REFERENCE_TIME_EXTRA_KEY]);\n}\nexport function removeTrailingRestartedEvents(sortedEvents) {\n while (!!sortedEvents.length && isRestartedEvent(sortedEvents[sortedEvents.length - 1])) {\n sortedEvents.pop();\n }\n return sortedEvents;\n}\nexport class EventsDatabase {\n constructor() {\n this.initialized = false;\n this.eventsStore = new Context.platform.Storage(\"events\");\n }\n initialize() {\n var _a;\n if (this.initialized) {\n return;\n }\n const storeNames = this.getAvailableStoreNames();\n if (storeNames.includes(EVENTS_PING_NAME)) {\n const storedEvents = (_a = this.eventsStore.get([EVENTS_PING_NAME])) !== null && _a !== void 0 ? _a : [];\n if (storedEvents.length > 0 && storedEvents.length >= Context.config.maxEvents) {\n Context.corePings.events.submit(\"startup\");\n }\n }\n getExecutionCounterMetric(storeNames).add(1);\n recordGleanRestartedEvent(storeNames);\n this.initialized = true;\n }\n record(metric, value) {\n if (metric.disabled) {\n return;\n }\n for (const ping of metric.sendInPings) {\n const executionCounter = getExecutionCounterMetric([ping]);\n let currentExecutionCount = (Context.metricsDatabase).getMetric(ping, executionCounter);\n if (!currentExecutionCount) {\n executionCounter.add(1);\n currentExecutionCount = 1;\n recordGleanRestartedEvent([ping], new Date());\n }\n value.addExtra(GLEAN_EXECUTION_COUNTER_EXTRA_KEY, currentExecutionCount);\n let numEvents = 0;\n const transformFn = (v) => {\n var _a;\n const events = (_a = v) !== null && _a !== void 0 ? _a : [];\n events.push(value.get());\n numEvents = events.length;\n return events;\n };\n this.eventsStore.update([ping], transformFn);\n if (ping === EVENTS_PING_NAME && numEvents >= Context.config.maxEvents) {\n Context.corePings.events.submit(\"max_capacity\");\n }\n }\n }\n getEvents(ping, metric) {\n const events = this.getAndValidatePingData(ping);\n if (events.length === 0) {\n return;\n }\n return (events\n .filter((e) => e.get().category === metric.category && e.get().name === metric.name)\n .map((e) => e.withoutReservedExtras()));\n }\n getPingEvents(ping, clearPingLifetimeData) {\n const pingData = this.getAndValidatePingData(ping);\n if (clearPingLifetimeData && Object.keys(pingData).length > 0) {\n this.eventsStore.delete([ping]);\n }\n if (pingData.length === 0) {\n return;\n }\n const payload = this.prepareEventsPayload(ping, pingData);\n if (payload.length > 0) {\n return payload;\n }\n }\n clearAll() {\n this.eventsStore.delete([]);\n }\n getAvailableStoreNames() {\n const data = this.eventsStore.get([]);\n if (isUndefined(data)) {\n return [];\n }\n return Object.keys(data);\n }\n getAndValidatePingData(ping) {\n const data = this.eventsStore.get([ping]);\n if (isUndefined(data)) {\n return [];\n }\n if (!Array.isArray(data)) {\n log(EVENT_DATABASE_LOG_TAG, `Unexpected value found for ping ${ping}: ${JSON.stringify(data)}. Clearing.`, LoggingLevel.Error);\n this.eventsStore.delete([ping]);\n return [];\n }\n return data.reduce((result, e) => {\n try {\n const event = new RecordedEvent(e);\n return [...result, event];\n }\n catch (_a) {\n log(EVENT_DATABASE_LOG_TAG, `Unexpected data found in events storage: ${JSON.stringify(e)}. Ignoring.`);\n return result;\n }\n }, []);\n }\n prepareEventsPayload(pingName, pingData) {\n var _a, _b, _c, _d;\n let sortedEvents = pingData.sort((a, b) => {\n var _a, _b;\n const executionCounterA = Number((_a = a.get().extra) === null || _a === void 0 ? void 0 : _a[GLEAN_EXECUTION_COUNTER_EXTRA_KEY]);\n const executionCounterB = Number((_b = b.get().extra) === null || _b === void 0 ? void 0 : _b[GLEAN_EXECUTION_COUNTER_EXTRA_KEY]);\n if (executionCounterA !== executionCounterB) {\n return executionCounterA - executionCounterB;\n }\n return a.get().timestamp - b.get().timestamp;\n });\n let lastRestartDate;\n try {\n lastRestartDate = createDateObject((_a = sortedEvents[0].get().extra) === null || _a === void 0 ? void 0 : _a[GLEAN_REFERENCE_TIME_EXTRA_KEY]);\n sortedEvents.shift();\n }\n catch (_e) {\n lastRestartDate = Context.startTime;\n }\n const firstEventOffset = ((_b = sortedEvents[0]) === null || _b === void 0 ? void 0 : _b.get().timestamp) || 0;\n let restartedOffset = 0;\n for (const [index, event] of sortedEvents.entries()) {\n try {\n const nextRestartDate = createDateObject((_c = event.get().extra) === null || _c === void 0 ? void 0 : _c[GLEAN_REFERENCE_TIME_EXTRA_KEY]);\n const dateOffset = nextRestartDate.getTime() - lastRestartDate.getTime();\n lastRestartDate = nextRestartDate;\n const newRestartedOffset = restartedOffset + dateOffset;\n const previousEventTimestamp = sortedEvents[index - 1].get().timestamp;\n if (newRestartedOffset <= previousEventTimestamp) {\n restartedOffset = previousEventTimestamp + 1;\n Context.errorManager.record(getGleanRestartedEventMetric([pingName]), ErrorType.InvalidValue, `Invalid time offset between application sessions found for ping \"${pingName}\". Ignoring.`);\n }\n else {\n restartedOffset = newRestartedOffset;\n }\n }\n catch (_f) {\n }\n const executionCount = Number(((_d = event.get().extra) === null || _d === void 0 ? void 0 : _d[GLEAN_EXECUTION_COUNTER_EXTRA_KEY]) || 1);\n let adjustedTimestamp;\n if (executionCount === 1) {\n adjustedTimestamp = event.get().timestamp - firstEventOffset;\n }\n else {\n adjustedTimestamp = event.get().timestamp + restartedOffset;\n }\n sortedEvents[index] = new RecordedEvent({\n category: event.get().category,\n name: event.get().name,\n timestamp: adjustedTimestamp,\n extra: event.get().extra\n });\n }\n sortedEvents = removeTrailingRestartedEvents(sortedEvents);\n return sortedEvents.map((e) => e.payload());\n }\n}\nexport default EventsDatabase;\n","import log from \"../log.js\";\nimport { InternalCounterMetricType as CounterMetricType } from \"../metrics/types/counter.js\";\nimport { combineIdentifierAndLabel, stripLabel } from \"../metrics/types/labeled.js\";\nexport function createLogTag(metric) {\n const capitalizedType = metric.type.charAt(0).toUpperCase() + metric.type.slice(1);\n return `core.metrics.${capitalizedType}`;\n}\nexport function getErrorMetricForMetric(metric, error) {\n const identifier = metric.baseIdentifier();\n const name = stripLabel(identifier);\n return new CounterMetricType({\n name: combineIdentifierAndLabel(error, name),\n category: \"glean.error\",\n lifetime: \"ping\",\n sendInPings: metric.sendInPings,\n disabled: false\n });\n}\nexport default class ErrorManager {\n record(metric, error, message, numErrors = 1) {\n const errorMetric = getErrorMetricForMetric(metric, error);\n log(createLogTag(metric), [`${metric.baseIdentifier()}:`, message]);\n if (numErrors > 0) {\n errorMetric.add(numErrors);\n }\n }\n testGetNumRecordedErrors(metric, error, ping) {\n const errorMetric = getErrorMetricForMetric(metric, error);\n const numErrors = errorMetric.testGetValue(ping);\n return numErrors || 0;\n }\n}\n","import platform from \"../platform/browser/web/index.js\";\nimport { base } from \"./base.js\";\nexport { default as Uploader, UploadResult, UploadResultStatus } from \"../core/upload/uploader.js\";\nexport { default as BrowserSendBeaconUploader } from \"../platform/browser/sendbeacon_uploader.js\";\nexport { default as BrowserSendBeaconFallbackUploader } from \"../platform/browser/sendbeacon_fallback_uploader.js\";\nexport default base(platform);\n","import uploader from \"../sendbeacon_fallback_uploader.js\";\nimport info from \"./platform_info.js\";\nimport Storage from \"./storage.js\";\nconst WebPlatform = {\n Storage,\n uploader,\n info,\n timer: { setTimeout, clearTimeout },\n name: \"web\"\n};\nexport default WebPlatform;\n","const BrowserPlatformInfo = {\n os() {\n let ua;\n if (!!navigator && !!navigator.userAgent) {\n ua = navigator.userAgent;\n }\n else {\n ua = \"Unknown\";\n }\n if (ua.includes(\"Windows\")) {\n return \"Windows\";\n }\n if (/tvOS/i.test(ua)) {\n return \"TvOS\";\n }\n if (/Watch( OS)?/i.test(ua)) {\n return \"WatchOS\";\n }\n if (/iPhone|iPad|iOS/i.test(ua)) {\n return \"iOS\";\n }\n if (/Mac OS X|macOS/i.test(ua)) {\n return \"Darwin\";\n }\n if (/Android/i.test(ua)) {\n return \"Android\";\n }\n if (/CrOS/i.test(ua)) {\n return \"ChromeOS\";\n }\n if (/WebOS/i.test(ua)) {\n return \"WebOS\";\n }\n if (/Linux/i.test(ua)) {\n return \"Linux\";\n }\n if (/OpenBSD/i.test(ua)) {\n return \"OpenBSD\";\n }\n if (/FreeBSD/i.test(ua)) {\n return \"FreeBSD\";\n }\n if (/NetBSD/i.test(ua)) {\n return \"NetBSD\";\n }\n if (/SunOS/i.test(ua)) {\n return \"SunOS\";\n }\n if (/AIX/i.test(ua)) {\n return \"IBM_AIX\";\n }\n return \"Unknown\";\n },\n osVersion() {\n return \"Unknown\";\n },\n arch() {\n return \"Unknown\";\n },\n locale() {\n if (!!navigator && !!navigator.language) {\n return navigator.language;\n }\n else {\n return \"und\";\n }\n }\n};\nexport default BrowserPlatformInfo;\n"],"names":["Context","Date","e","l","window","document","Array","console","RecordedEvent","t","Object","n","JSON","MetricType","MetricValidationError","Error","Metric","TypeError","InternalEventMetricType","EventMetricType","WeakMap","LabeledMetric","UUIDMetric","InternalUUIDMetricType","c","crypto","Uint8Array","isNaN","Number","Math","performance","TextEncoder","TextDecoder","Blob","UploadResult","Uploader","BrowserFetchUploader","arguments","AbortController","setTimeout","fetch","DOMException","clearTimeout","BrowserSendBeaconUploader","navigator","BrowserSendBeaconFallbackUploader","WebStore","localStorage","Configuration","PingsDatabase","RateLimiter","NaN","Policy","PingBodyOverflowError","PingRequest","PingUploadWorker","U","PingUploadManager","Set","r","DatetimeMetric","parseInt","InternalDatetimeMetricType","StringMetric","InternalStringMetricType","CounterMetric","InternalCounterMetricType","CoreMetrics","i","InternalPingType","Promise","CorePings","MetricsDatabase","EventsDatabase","ErrorManager","sessionStorage"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export const __webpack_ids__=["736"];export const __webpack_modules__={90445:function(a,e,t){t.r(e),t.d(e,{MDNPlacementHpMain:()=>MDNPlacementHpMain});var n=t(14703),o=t(51968),r=t(68688);t(83294),t(43028);var i=t(35281),l=t(61321);let MDNPlacementHpMain=class MDNPlacementHpMain extends(0,i.P)(n.oi){static styles=l.Z;renderComplete(a){let{hpMain:e}=a;if(!e)return n.Ld;let{status:t,click:i,view:l,image:c,alt:m,colors:p,version:s}=e;if("success"!==t)return n.Ld;this._viewedUrl||(this._viewedUrl=l,this._version=s);let{backgroundColor:g,textColor:d}=p||{},h=Object.fromEntries([["--hp-main-background",g],["--hp-main-color",d]].filter(([a,e])=>!!e));return(0,n.dy)`<div
1
+ export const __webpack_ids__=["736"];export const __webpack_modules__={90445:function(a,e,t){t.r(e),t.d(e,{MDNPlacementHpMain:()=>MDNPlacementHpMain});var n=t(14703),o=t(51968),r=t(68688);t(83294),t(43028);var i=t(35281),l=t(61321);let MDNPlacementHpMain=class MDNPlacementHpMain extends(0,i.P)(n.oi){static styles=l.Z;renderComplete(a){let{hpMain:e}=a;if(!e)return n.Ld;let{status:t,click:i,view:l,image:c,alt:p,colors:m,version:s}=e;if("success"!==t)return n.Ld;this._viewedUrl||(this._viewedUrl=l,this._version=s);let{backgroundColor:g,textColor:d}=m||{},h=Object.fromEntries([["--hp-main-background",g],["--hp-main-color",d]].filter(([a,e])=>!!e));return(0,n.dy)`<div
2
2
  ${(0,o.i)(this._placementRef)}
3
3
  class="hp-main-placement"
4
4
  style=${(0,r.V)(h)}
@@ -13,13 +13,13 @@ export const __webpack_ids__=["736"];export const __webpack_modules__={90445:fun
13
13
  >
14
14
  <img
15
15
  src=${this.imgLink(c)}
16
- aria-hidden=${!m}
17
- alt=${m||""}
16
+ aria-hidden=${!p}
17
+ alt=${p||""}
18
18
  width="970"
19
19
  height="250"
20
20
  />
21
21
  </a>
22
22
  <mdn-placement-note></mdn-placement-note>
23
23
  </section>
24
- </div>`}};customElements.define("mdn-placement-hp-main",MDNPlacementHpMain)},61321:function(a,e,t){t.d(e,{Z:()=>c});var n=t(14703),o=t(8081),r=t.n(o),i=t(23645),l=t.n(i)()(r());l.push([a.id,'.hp-main-placement{--hp-main-background-light:var(--color-background-primary);--hp-main-color-light:var(--color-text-primary);--hp-main-background-dark:var(--color-background-primary);--hp-main-color-dark:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light));background-color:var(--hp-main-background);padding-inline:var(--layout-side-padding)}@supports (color:light-dark(red,red)){.hp-main-placement{--hp-main-background:light-dark(var(--hp-main-background-light),var(--hp-main-background-dark));--hp-main-color:light-dark(var(--hp-main-color-light),var(--hp-main-color-dark))}}@supports not (color:light-dark(tan,tan)){.hp-main-placement *{--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light))}}.hp-main-placement .placement-container{column-gap:3rem;display:grid;grid-template-areas:"nope pong note" "nope pong no";grid-template-columns:auto auto auto;margin:0 auto;padding:0 1rem}@media (max-width:1441px){.hp-main-placement .placement-container{grid-template-areas:"pong note" "pong no";grid-template-columns:auto max-content;grid-template-rows:auto 2rem}}@media (max-width:769px){.hp-main-placement .placement-container{grid-template-areas:"pong" "note";grid-template-columns:auto;grid-template-rows:auto 2rem}}:is(.hp-main-placement .placement-container) .placement-link{display:flex;grid-area:pong;justify-content:center}:is(:is(.hp-main-placement .placement-container) .placement-link) img{display:block;height:auto;max-width:100%}:is(.hp-main-placement .placement-container) mdn-placement-note{grid-area:note;margin:0 0 auto auto}',""]);let c=(0,n.iv)([l.toString()])}};
25
- //# sourceMappingURL=736.c130ba990b1ed252.js.map
24
+ </div>`}};customElements.define("mdn-placement-hp-main",MDNPlacementHpMain)},61321:function(a,e,t){t.d(e,{Z:()=>c});var n=t(14703),o=t(8081),r=t.n(o),i=t(23645),l=t.n(i)()(r());l.push([a.id,'.hp-main-placement{--hp-main-background-light:var(--color-background-primary);--hp-main-color-light:var(--color-text-primary);--hp-main-background-dark:var(--color-background-primary);--hp-main-color-dark:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light));background-color:var(--hp-main-background);padding-inline:var(--layout-side-padding)}@supports (color:light-dark(red,red)){.hp-main-placement{--hp-main-background:light-dark(var(--hp-main-background-light),var(--hp-main-background-dark));--hp-main-color:light-dark(var(--hp-main-color-light),var(--hp-main-color-dark))}}@supports not (color:light-dark(tan,tan)){.hp-main-placement *{--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light))}}.hp-main-placement .placement-container{column-gap:3rem;display:grid;grid-template-areas:"nope pong note" "nope pong no";grid-template-columns:auto auto auto;margin:0 auto;padding:0 1rem}@media (width <= 1441px){.hp-main-placement .placement-container{grid-template-areas:"pong note" "pong no";grid-template-columns:auto max-content;grid-template-rows:auto 2rem}}@media (width <= 769px){.hp-main-placement .placement-container{grid-template-areas:"pong" "note";grid-template-columns:auto;grid-template-rows:auto 2rem}}:is(.hp-main-placement .placement-container) .placement-link{display:flex;grid-area:pong;justify-content:center}:is(:is(.hp-main-placement .placement-container) .placement-link) img{display:block;height:auto;max-width:100%}:is(.hp-main-placement .placement-container) mdn-placement-note{grid-area:note;margin:0 0 auto auto}',""]);let c=(0,n.iv)([l.toString()])}};
25
+ //# sourceMappingURL=736.0fa146c2a494e88c.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"736.c130ba990b1ed252.js","sources":["webpack://@mdn/fred/./components/placement-hp-main/element.js","webpack://@mdn/fred/./components/placement-hp-main/element.css"],"sourcesContent":["import { LitElement, html, nothing } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nimport \"../placement-note/element.js\";\nimport \"../placement-no/element.js\";\n\nimport { PlacementMixin } from \"../placement/mixin.js\";\n\nimport styles from \"./element.css?lit\";\n\n/**\n * @import * as Placements from \"../placement/types.js\";\n */\n\nexport class MDNPlacementHpMain extends PlacementMixin(LitElement) {\n static styles = styles;\n\n /**\n *\n * @param {Placements.PlacementContextData} placementContext\n * @returns\n */\n renderComplete(placementContext) {\n const { hpMain: data } = placementContext;\n if (!data) {\n return nothing;\n }\n const { status, click, view, image, alt, colors, version } = data;\n if (status !== \"success\") {\n return nothing;\n }\n if (!this._viewedUrl) {\n this._viewedUrl = view;\n this._version = version;\n }\n const { backgroundColor, textColor } = colors || {};\n const styles = Object.fromEntries(\n [\n [\"--hp-main-background\", backgroundColor],\n [\"--hp-main-color\", textColor],\n ].filter(([_, v]) => Boolean(v)),\n );\n\n return html`<div\n ${ref(this._placementRef)}\n class=\"hp-main-placement\"\n style=${styleMap(styles)}\n >\n <section class=\"placement-container\">\n <a\n class=\"placement-link\"\n data-glean=\"pong: pong-&gt;click top-banner\"\n href=${this.clickLink(click, version)}\n target=\"_blank\"\n rel=\"sponsored noreferrer\"\n >\n <img\n src=${this.imgLink(image)}\n aria-hidden=${!alt}\n alt=${alt || \"\"}\n width=\"970\"\n height=\"250\"\n />\n </a>\n <mdn-placement-note></mdn-placement-note>\n </section>\n </div>`;\n }\n}\n\ncustomElements.define(\"mdn-placement-hp-main\", MDNPlacementHpMain);\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.hp-main-placement{--hp-main-background-light:var(--color-background-primary);--hp-main-color-light:var(--color-text-primary);--hp-main-background-dark:var(--color-background-primary);--hp-main-color-dark:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light));background-color:var(--hp-main-background);padding-inline:var(--layout-side-padding)}@supports (color:light-dark(red,red)){.hp-main-placement{--hp-main-background:light-dark(var(--hp-main-background-light),var(--hp-main-background-dark));--hp-main-color:light-dark(var(--hp-main-color-light),var(--hp-main-color-dark))}}@supports not (color:light-dark(tan,tan)){.hp-main-placement *{--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light))}}.hp-main-placement .placement-container{column-gap:3rem;display:grid;grid-template-areas:\"nope pong note\" \"nope pong no\";grid-template-columns:auto auto auto;margin:0 auto;padding:0 1rem}@media (max-width:1441px){.hp-main-placement .placement-container{grid-template-areas:\"pong note\" \"pong no\";grid-template-columns:auto max-content;grid-template-rows:auto 2rem}}@media (max-width:769px){.hp-main-placement .placement-container{grid-template-areas:\"pong\" \"note\";grid-template-columns:auto;grid-template-rows:auto 2rem}}:is(.hp-main-placement .placement-container) .placement-link{display:flex;grid-area:pong;justify-content:center}:is(:is(.hp-main-placement .placement-container) .placement-link) img{display:block;height:auto;max-width:100%}:is(.hp-main-placement .placement-container) mdn-placement-note{grid-area:note;margin:0 0 auto auto}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["MDNPlacementHpMain","n","Object","customElements"],"mappings":"wOAeO,IAAMA,mBAAN,MAAMA,0BAA2B,QAAe,IAAU,EAC/D,OAAO,OAAS,GAAM,AAAC,AAOvB,gBAAe,CAAgB,CAAE,CAC/B,GAAM,CAAE,OAAQ,CAAI,CAAE,CAAG,EACzB,GAAI,CAAC,EACH,OAAOC,EAAA,EAAO,CAEhB,GAAM,CAAE,QAAM,CAAE,OAAK,CAAE,MAAI,CAAE,OAAK,CAAE,KAAG,CAAE,QAAM,CAAE,SAAO,CAAE,CAAG,EAC7D,GAAI,AAAW,YAAX,EACF,OAAOA,EAAA,EAAO,AAEX,KAAI,CAAC,UAAU,GAClB,IAAI,CAAC,UAAU,CAAG,EAClB,IAAI,CAAC,QAAQ,CAAG,GAElB,GAAM,CAAE,iBAAe,CAAE,WAAS,CAAE,CAAG,GAAU,CAAC,EAC5C,EAASC,OAAO,WAAW,CAC/B,CACE,CAAC,uBAAwB,EAAgB,CACzC,CAAC,kBAAmB,EAAU,CAC/B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,EAAE,GAAK,EAAQ,IAG/B,MAAO,QAAI,CAAC;MACV,EAAE,QAAI,IAAI,CAAC,aAAa,EAAE;;YAEpB,EAAE,QAAS,GAAQ;;;;;;eAMhB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAO,GAAS;;;;;gBAKhC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAO;wBACd,EAAE,CAAC,EAAI;gBACf,EAAE,GAAO,GAAG;;;;;;;UAOlB,CAAC,AACT,CACF,EAEAC,eAAe,MAAM,CAAC,wBAAyBH,mB,sFCnE3C,EAA0B,A,SAA4B,KAE1D,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,2oEAA4oE,GAAG,EAExrE,MAAe,SAAI,CAAC,EAAwB,QAAQ,GAAG,C"}
1
+ {"version":3,"file":"736.0fa146c2a494e88c.js","sources":["webpack://@mdn/fred/./components/placement-hp-main/element.js","webpack://@mdn/fred/./components/placement-hp-main/element.css"],"sourcesContent":["import { LitElement, html, nothing } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nimport \"../placement-note/element.js\";\nimport \"../placement-no/element.js\";\n\nimport { PlacementMixin } from \"../placement/mixin.js\";\n\nimport styles from \"./element.css?lit\";\n\n/**\n * @import * as Placements from \"../placement/types.js\";\n */\n\nexport class MDNPlacementHpMain extends PlacementMixin(LitElement) {\n static styles = styles;\n\n /**\n *\n * @param {Placements.PlacementContextData} placementContext\n * @returns\n */\n renderComplete(placementContext) {\n const { hpMain: data } = placementContext;\n if (!data) {\n return nothing;\n }\n const { status, click, view, image, alt, colors, version } = data;\n if (status !== \"success\") {\n return nothing;\n }\n if (!this._viewedUrl) {\n this._viewedUrl = view;\n this._version = version;\n }\n const { backgroundColor, textColor } = colors || {};\n const styles = Object.fromEntries(\n [\n [\"--hp-main-background\", backgroundColor],\n [\"--hp-main-color\", textColor],\n ].filter(([_, v]) => Boolean(v)),\n );\n\n return html`<div\n ${ref(this._placementRef)}\n class=\"hp-main-placement\"\n style=${styleMap(styles)}\n >\n <section class=\"placement-container\">\n <a\n class=\"placement-link\"\n data-glean=\"pong: pong-&gt;click top-banner\"\n href=${this.clickLink(click, version)}\n target=\"_blank\"\n rel=\"sponsored noreferrer\"\n >\n <img\n src=${this.imgLink(image)}\n aria-hidden=${!alt}\n alt=${alt || \"\"}\n width=\"970\"\n height=\"250\"\n />\n </a>\n <mdn-placement-note></mdn-placement-note>\n </section>\n </div>`;\n }\n}\n\ncustomElements.define(\"mdn-placement-hp-main\", MDNPlacementHpMain);\n","import { css } from \"lit\";\n// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.hp-main-placement{--hp-main-background-light:var(--color-background-primary);--hp-main-color-light:var(--color-text-primary);--hp-main-background-dark:var(--color-background-primary);--hp-main-color-dark:var(--color-text-primary);--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light));background-color:var(--hp-main-background);padding-inline:var(--layout-side-padding)}@supports (color:light-dark(red,red)){.hp-main-placement{--hp-main-background:light-dark(var(--hp-main-background-light),var(--hp-main-background-dark));--hp-main-color:light-dark(var(--hp-main-color-light),var(--hp-main-color-dark))}}@supports not (color:light-dark(tan,tan)){.hp-main-placement *{--csstools-light-dark-toggle--0:var(--csstools-color-scheme--light) var(--hp-main-background-dark);--hp-main-background:var(--csstools-light-dark-toggle--0,var(--hp-main-background-light));--csstools-light-dark-toggle--1:var(--csstools-color-scheme--light) var(--hp-main-color-dark);--hp-main-color:var(--csstools-light-dark-toggle--1,var(--hp-main-color-light))}}.hp-main-placement .placement-container{column-gap:3rem;display:grid;grid-template-areas:\"nope pong note\" \"nope pong no\";grid-template-columns:auto auto auto;margin:0 auto;padding:0 1rem}@media (width <= 1441px){.hp-main-placement .placement-container{grid-template-areas:\"pong note\" \"pong no\";grid-template-columns:auto max-content;grid-template-rows:auto 2rem}}@media (width <= 769px){.hp-main-placement .placement-container{grid-template-areas:\"pong\" \"note\";grid-template-columns:auto;grid-template-rows:auto 2rem}}:is(.hp-main-placement .placement-container) .placement-link{display:flex;grid-area:pong;justify-content:center}:is(:is(.hp-main-placement .placement-container) .placement-link) img{display:block;height:auto;max-width:100%}:is(.hp-main-placement .placement-container) mdn-placement-note{grid-area:note;margin:0 0 auto auto}`, \"\"]);\n// Exports\nexport default css([___CSS_LOADER_EXPORT___.toString()]);\n"],"names":["MDNPlacementHpMain","n","Object","customElements"],"mappings":"wOAeO,IAAMA,mBAAN,MAAMA,0BAA2B,QAAe,IAAU,EAC/D,OAAO,OAAS,GAAM,AAAC,AAOvB,gBAAe,CAAgB,CAAE,CAC/B,GAAM,CAAE,OAAQ,CAAI,CAAE,CAAG,EACzB,GAAI,CAAC,EACH,OAAOC,EAAA,EAAO,CAEhB,GAAM,CAAE,QAAM,CAAE,OAAK,CAAE,MAAI,CAAE,OAAK,CAAE,KAAG,CAAE,QAAM,CAAE,SAAO,CAAE,CAAG,EAC7D,GAAI,AAAW,YAAX,EACF,OAAOA,EAAA,EAAO,AAEX,KAAI,CAAC,UAAU,GAClB,IAAI,CAAC,UAAU,CAAG,EAClB,IAAI,CAAC,QAAQ,CAAG,GAElB,GAAM,CAAE,iBAAe,CAAE,WAAS,CAAE,CAAG,GAAU,CAAC,EAC5C,EAASC,OAAO,WAAW,CAC/B,CACE,CAAC,uBAAwB,EAAgB,CACzC,CAAC,kBAAmB,EAAU,CAC/B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,EAAE,GAAK,EAAQ,IAG/B,MAAO,QAAI,CAAC;MACV,EAAE,QAAI,IAAI,CAAC,aAAa,EAAE;;YAEpB,EAAE,QAAS,GAAQ;;;;;;eAMhB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAO,GAAS;;;;;gBAKhC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAO;wBACd,EAAE,CAAC,EAAI;gBACf,EAAE,GAAO,GAAG;;;;;;;UAOlB,CAAC,AACT,CACF,EAEAC,eAAe,MAAM,CAAC,wBAAyBH,mB,sFCnE3C,EAA0B,A,SAA4B,KAE1D,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,yoEAA0oE,GAAG,EAEtrE,MAAe,SAAI,CAAC,EAAwB,QAAQ,GAAG,C"}