watch-tail 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/README.md +32 -2
  2. package/build/client/_app/immutable/assets/{0.BQQ1YLPc.css → 0.Dfts6BC4.css} +1 -1
  3. package/build/client/_app/immutable/assets/0.Dfts6BC4.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.Dfts6BC4.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{BR7qH0F5.js → 0HQmZBP8.js} +1 -1
  6. package/build/client/_app/immutable/chunks/0HQmZBP8.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/0HQmZBP8.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{DVTgeA2y.js → B5Gt-01T.js} +1 -1
  9. package/build/client/_app/immutable/chunks/B5Gt-01T.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/B5Gt-01T.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{BwntJtbK.js → B7Wrulwc.js} +1 -1
  12. package/build/client/_app/immutable/chunks/B7Wrulwc.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/B7Wrulwc.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BDcZ4Wyi.js +1 -0
  15. package/build/client/_app/immutable/chunks/BDcZ4Wyi.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BDcZ4Wyi.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{Bmk_Voz6.js → BLIhNWn-.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BLIhNWn-.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/BLIhNWn-.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{CoEFQJcr.js → BMAPes50.js} +1 -1
  21. package/build/client/_app/immutable/chunks/BMAPes50.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/BMAPes50.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{PYzEcuyd.js → BMFtpXWH.js} +5 -5
  24. package/build/client/_app/immutable/chunks/BMFtpXWH.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/BMFtpXWH.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/{CYw9ugj1.js → BNZjpNgL.js} +1 -1
  27. package/build/client/_app/immutable/chunks/BNZjpNgL.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/BNZjpNgL.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{DslUcEd-.js → BNe95Eqc.js} +1 -1
  30. package/build/client/_app/immutable/chunks/BNe95Eqc.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BNe95Eqc.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{DJDlf6lC.js → BPnf3PCq.js} +1 -1
  33. package/build/client/_app/immutable/chunks/BPnf3PCq.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/BPnf3PCq.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{DmRhEzIa.js → BQzvXDmX.js} +1 -1
  36. package/build/client/_app/immutable/chunks/BQzvXDmX.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/BQzvXDmX.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/{BkXArOra.js → BS49-HdT.js} +1 -1
  39. package/build/client/_app/immutable/chunks/BS49-HdT.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BS49-HdT.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/{CDbeYGlD.js → BVyebcr0.js} +1 -1
  42. package/build/client/_app/immutable/chunks/BVyebcr0.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BVyebcr0.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{CJFHBop_.js → BZ7frOsj.js} +1 -1
  45. package/build/client/_app/immutable/chunks/BZ7frOsj.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/BZ7frOsj.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BjxZ_neZ.js +5 -0
  48. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{Di37PX72.js → Bpq3-dbO.js} +1 -1
  51. package/build/client/_app/immutable/chunks/Bpq3-dbO.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/Bpq3-dbO.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/{D-JtVVAo.js → ByL_HxfT.js} +1 -1
  54. package/build/client/_app/immutable/chunks/ByL_HxfT.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/ByL_HxfT.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/{B6nyufJR.js → C5DTlk-U.js} +1 -1
  57. package/build/client/_app/immutable/chunks/C5DTlk-U.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/C5DTlk-U.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/{AUlz4-kZ.js → CHWzTWIO.js} +1 -1
  60. package/build/client/_app/immutable/chunks/CHWzTWIO.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/CHWzTWIO.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/{C20WvNRq.js → CIRHUa7o.js} +1 -1
  63. package/build/client/_app/immutable/chunks/CIRHUa7o.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/CIRHUa7o.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{Bp63j1zN.js → CJY9dzlo.js} +1 -1
  66. package/build/client/_app/immutable/chunks/CJY9dzlo.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/CJY9dzlo.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/{Dp8S9ymS.js → CYBzPCyF.js} +1 -1
  69. package/build/client/_app/immutable/chunks/CYBzPCyF.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/CYBzPCyF.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/{DQi7bc16.js → CknPwNsn.js} +1 -1
  72. package/build/client/_app/immutable/chunks/CknPwNsn.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/CknPwNsn.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{B1t8v2wP.js → DBvBFE2b.js} +1 -1
  75. package/build/client/_app/immutable/chunks/DBvBFE2b.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/DBvBFE2b.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{DJLYkl5w.js → DGPOPiag.js} +1 -1
  78. package/build/client/_app/immutable/chunks/DGPOPiag.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/DGPOPiag.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/{UySfXNq7.js → DOY2FQbe.js} +1 -1
  81. package/build/client/_app/immutable/chunks/DOY2FQbe.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/DOY2FQbe.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/{DkyYNO4U.js → DeAq2fo8.js} +1 -1
  84. package/build/client/_app/immutable/chunks/DeAq2fo8.js.br +2 -0
  85. package/build/client/_app/immutable/chunks/DeAq2fo8.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/{DPKdNiYi.js → DsjX0FWg.js} +1 -1
  87. package/build/client/_app/immutable/chunks/DsjX0FWg.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/DsjX0FWg.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/{_Zq76xnA.js → HbGXDNOY.js} +1 -1
  90. package/build/client/_app/immutable/chunks/HbGXDNOY.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/HbGXDNOY.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/{dbhDrJmm.js → MQIJFRGs.js} +1 -1
  93. package/build/client/_app/immutable/chunks/MQIJFRGs.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/MQIJFRGs.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/{Dt_Zd6U2.js → SPw4Pe1k.js} +1 -1
  96. package/build/client/_app/immutable/chunks/SPw4Pe1k.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/SPw4Pe1k.js.gz +0 -0
  98. package/build/client/_app/immutable/entry/{app.vMZB8_Zr.js → app.B1Kx6Gr2.js} +2 -2
  99. package/build/client/_app/immutable/entry/app.B1Kx6Gr2.js.br +0 -0
  100. package/build/client/_app/immutable/entry/app.B1Kx6Gr2.js.gz +0 -0
  101. package/build/client/_app/immutable/entry/start.DUspS8mW.js +1 -0
  102. package/build/client/_app/immutable/entry/start.DUspS8mW.js.br +0 -0
  103. package/build/client/_app/immutable/entry/start.DUspS8mW.js.gz +0 -0
  104. package/build/client/_app/immutable/nodes/{1.zcN3R_zF.js → 1.CjbVqPIj.js} +1 -1
  105. package/build/client/_app/immutable/nodes/1.CjbVqPIj.js.br +0 -0
  106. package/build/client/_app/immutable/nodes/1.CjbVqPIj.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/2.B3li1f44.js +4 -0
  108. package/build/client/_app/immutable/nodes/2.B3li1f44.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/2.B3li1f44.js.gz +0 -0
  110. package/build/client/_app/version.json +1 -1
  111. package/build/client/_app/version.json.br +0 -0
  112. package/build/client/_app/version.json.gz +0 -0
  113. package/build/handler.js +4 -4
  114. package/build/index.js +4 -4
  115. package/build/server/chunks/chunks/{EventScatter.js-DqCMPeHG.js → EventScatter.js-D3Jaw_Cw.js} +7 -3
  116. package/build/server/chunks/chunks/{EventScatter.js-DqCMPeHG.js.map → EventScatter.js-D3Jaw_Cw.js.map} +1 -1
  117. package/build/server/chunks/chunks/{archive.js-C6rz09rJ.js → archive.js-C2D-5edp.js} +258 -19
  118. package/build/server/chunks/chunks/archive.js-C2D-5edp.js.map +1 -0
  119. package/build/server/chunks/chunks/{internal2.js-DDcktblR.js → internal2.js-V-6GgvEA.js} +2 -2
  120. package/build/server/chunks/chunks/{internal2.js-DDcktblR.js.map → internal2.js-V-6GgvEA.js.map} +1 -1
  121. package/build/server/chunks/chunks/{level-filter.js-H_AdNbCw.js → level-filter.js-B3o2hyWD.js} +32 -16
  122. package/build/server/chunks/chunks/level-filter.js-B3o2hyWD.js.map +1 -0
  123. package/build/server/chunks/chunks/{log-buffer.js-CpI7gyom.js → log-buffer.js-BI_gQOls.js} +118 -2
  124. package/build/server/chunks/chunks/log-buffer.js-BI_gQOls.js.map +1 -0
  125. package/build/server/chunks/chunks/series-buckets.js-BjigySff.js +290 -0
  126. package/build/server/chunks/chunks/series-buckets.js-BjigySff.js.map +1 -0
  127. package/build/server/chunks/chunks/{state.js-Dves8H8h.js → state.js-D3IR3OVb.js} +2 -2
  128. package/build/server/chunks/chunks/{state.js-Dves8H8h.js.map → state.js-D3IR3OVb.js.map} +1 -1
  129. package/build/server/chunks/entries/endpoints/api/archive/{_server.ts.js-sNd3lS0y.js → _server.ts.js-83Ch7djd.js} +3 -3
  130. package/build/server/chunks/entries/endpoints/api/archive/{_server.ts.js-sNd3lS0y.js.map → _server.ts.js-83Ch7djd.js.map} +1 -1
  131. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-BGyWbj78.js → _server.ts.js-drLgUdvB.js} +3 -3
  132. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-BGyWbj78.js.map → _server.ts.js-drLgUdvB.js.map} +1 -1
  133. package/build/server/chunks/entries/endpoints/api/series/{_server.ts.js-DjGMqXKo.js → _server.ts.js-DOvBhEDU.js} +39 -8
  134. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DOvBhEDU.js.map +1 -0
  135. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-C-XDemlx.js → _server.ts.js-B9_-4ssJ.js} +40 -5
  136. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-B9_-4ssJ.js.map +1 -0
  137. package/build/server/chunks/entries/fallbacks/{error.svelte.js-DdUYlUJV.js → error.svelte.js-C9F075al.js} +3 -3
  138. package/build/server/chunks/entries/fallbacks/{error.svelte.js-DdUYlUJV.js.map → error.svelte.js-C9F075al.js.map} +1 -1
  139. package/build/server/chunks/entries/pages/{_page.svelte.js-B-kVwiNh.js → _page.svelte.js-NmVMu4KB.js} +191 -28
  140. package/build/server/chunks/entries/pages/_page.svelte.js-NmVMu4KB.js.map +1 -0
  141. package/build/server/chunks/{handler-BHf-eLnl.js → handler-dtYbHuwP.js} +3 -3
  142. package/build/server/chunks/{handler-BHf-eLnl.js.map → handler-dtYbHuwP.js.map} +1 -1
  143. package/build/server/chunks/{index.js-D6Auup1Z.js → index.js-C9CJvnha.js} +2 -2
  144. package/build/server/chunks/{index.js-D6Auup1Z.js.map → index.js-C9CJvnha.js.map} +1 -1
  145. package/build/server/chunks/{manifest.js-B3Q7n9I6.js → manifest.js-C_VOyvDI.js} +9 -9
  146. package/build/server/chunks/{manifest.js-B3Q7n9I6.js.map → manifest.js-C_VOyvDI.js.map} +1 -1
  147. package/build/server/chunks/nodes/{0.js-BMP_Yttt.js → 0.js-CNFDDPj5.js} +3 -3
  148. package/build/server/chunks/nodes/{0.js-BMP_Yttt.js.map → 0.js-CNFDDPj5.js.map} +1 -1
  149. package/build/server/chunks/nodes/{1.js-2HQHUOse.js → 1.js-bsWFfMNd.js} +3 -3
  150. package/build/server/chunks/nodes/{1.js-2HQHUOse.js.map → 1.js-bsWFfMNd.js.map} +1 -1
  151. package/build/server/chunks/nodes/{2.js-7RtHpiHN.js → 2.js-Cq_bF6lW.js} +3 -3
  152. package/build/server/chunks/nodes/{2.js-7RtHpiHN.js.map → 2.js-Cq_bF6lW.js.map} +1 -1
  153. package/dist/cli/index.js +127 -104
  154. package/dist/cli/server.js +10 -0
  155. package/dist/cli/ui.js +18 -3
  156. package/dist/lib/log-buffer.js +129 -0
  157. package/package.json +1 -1
  158. package/build/client/_app/immutable/assets/0.BQQ1YLPc.css.br +0 -0
  159. package/build/client/_app/immutable/assets/0.BQQ1YLPc.css.gz +0 -0
  160. package/build/client/_app/immutable/chunks/AUlz4-kZ.js.br +0 -0
  161. package/build/client/_app/immutable/chunks/AUlz4-kZ.js.gz +0 -0
  162. package/build/client/_app/immutable/chunks/B1t8v2wP.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/B1t8v2wP.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/B6nyufJR.js.br +0 -0
  165. package/build/client/_app/immutable/chunks/B6nyufJR.js.gz +0 -0
  166. package/build/client/_app/immutable/chunks/BR7qH0F5.js.br +0 -0
  167. package/build/client/_app/immutable/chunks/BR7qH0F5.js.gz +0 -0
  168. package/build/client/_app/immutable/chunks/BkXArOra.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/BkXArOra.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/Bmk_Voz6.js.br +0 -0
  171. package/build/client/_app/immutable/chunks/Bmk_Voz6.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/Bp63j1zN.js.br +0 -0
  173. package/build/client/_app/immutable/chunks/Bp63j1zN.js.gz +0 -0
  174. package/build/client/_app/immutable/chunks/BwntJtbK.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/BwntJtbK.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/C20WvNRq.js.br +0 -0
  177. package/build/client/_app/immutable/chunks/C20WvNRq.js.gz +0 -0
  178. package/build/client/_app/immutable/chunks/CDbeYGlD.js.br +0 -0
  179. package/build/client/_app/immutable/chunks/CDbeYGlD.js.gz +0 -0
  180. package/build/client/_app/immutable/chunks/CJFHBop_.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/CJFHBop_.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/CYw9ugj1.js.br +0 -0
  183. package/build/client/_app/immutable/chunks/CYw9ugj1.js.gz +0 -0
  184. package/build/client/_app/immutable/chunks/CjJd0uRB.js +0 -1
  185. package/build/client/_app/immutable/chunks/CjJd0uRB.js.br +0 -1
  186. package/build/client/_app/immutable/chunks/CjJd0uRB.js.gz +0 -0
  187. package/build/client/_app/immutable/chunks/CoEFQJcr.js.br +0 -0
  188. package/build/client/_app/immutable/chunks/CoEFQJcr.js.gz +0 -0
  189. package/build/client/_app/immutable/chunks/D-JtVVAo.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/D-JtVVAo.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/DJDlf6lC.js.br +0 -0
  192. package/build/client/_app/immutable/chunks/DJDlf6lC.js.gz +0 -0
  193. package/build/client/_app/immutable/chunks/DJLYkl5w.js.br +0 -0
  194. package/build/client/_app/immutable/chunks/DJLYkl5w.js.gz +0 -0
  195. package/build/client/_app/immutable/chunks/DPKdNiYi.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/DPKdNiYi.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/DQi7bc16.js.br +0 -0
  198. package/build/client/_app/immutable/chunks/DQi7bc16.js.gz +0 -0
  199. package/build/client/_app/immutable/chunks/DVTgeA2y.js.br +0 -0
  200. package/build/client/_app/immutable/chunks/DVTgeA2y.js.gz +0 -0
  201. package/build/client/_app/immutable/chunks/Di37PX72.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/Di37PX72.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/DkyYNO4U.js.br +0 -0
  204. package/build/client/_app/immutable/chunks/DkyYNO4U.js.gz +0 -0
  205. package/build/client/_app/immutable/chunks/DmRhEzIa.js.br +0 -0
  206. package/build/client/_app/immutable/chunks/DmRhEzIa.js.gz +0 -0
  207. package/build/client/_app/immutable/chunks/Dp8S9ymS.js.br +0 -0
  208. package/build/client/_app/immutable/chunks/Dp8S9ymS.js.gz +0 -0
  209. package/build/client/_app/immutable/chunks/DslUcEd-.js.br +0 -0
  210. package/build/client/_app/immutable/chunks/DslUcEd-.js.gz +0 -0
  211. package/build/client/_app/immutable/chunks/Dt_Zd6U2.js.br +0 -0
  212. package/build/client/_app/immutable/chunks/Dt_Zd6U2.js.gz +0 -0
  213. package/build/client/_app/immutable/chunks/DwezeuNE.js +0 -5
  214. package/build/client/_app/immutable/chunks/DwezeuNE.js.br +0 -0
  215. package/build/client/_app/immutable/chunks/DwezeuNE.js.gz +0 -0
  216. package/build/client/_app/immutable/chunks/PYzEcuyd.js.br +0 -0
  217. package/build/client/_app/immutable/chunks/PYzEcuyd.js.gz +0 -0
  218. package/build/client/_app/immutable/chunks/UySfXNq7.js.br +0 -0
  219. package/build/client/_app/immutable/chunks/UySfXNq7.js.gz +0 -0
  220. package/build/client/_app/immutable/chunks/_Zq76xnA.js.br +0 -0
  221. package/build/client/_app/immutable/chunks/_Zq76xnA.js.gz +0 -0
  222. package/build/client/_app/immutable/chunks/dbhDrJmm.js.br +0 -0
  223. package/build/client/_app/immutable/chunks/dbhDrJmm.js.gz +0 -0
  224. package/build/client/_app/immutable/entry/app.vMZB8_Zr.js.br +0 -0
  225. package/build/client/_app/immutable/entry/app.vMZB8_Zr.js.gz +0 -0
  226. package/build/client/_app/immutable/entry/start.pM5lNk_5.js +0 -1
  227. package/build/client/_app/immutable/entry/start.pM5lNk_5.js.br +0 -0
  228. package/build/client/_app/immutable/entry/start.pM5lNk_5.js.gz +0 -0
  229. package/build/client/_app/immutable/nodes/1.zcN3R_zF.js.br +0 -0
  230. package/build/client/_app/immutable/nodes/1.zcN3R_zF.js.gz +0 -0
  231. package/build/client/_app/immutable/nodes/2.DxevVqut.js +0 -2
  232. package/build/client/_app/immutable/nodes/2.DxevVqut.js.br +0 -0
  233. package/build/client/_app/immutable/nodes/2.DxevVqut.js.gz +0 -0
  234. package/build/server/chunks/chunks/archive.js-C6rz09rJ.js.map +0 -1
  235. package/build/server/chunks/chunks/level-filter.js-H_AdNbCw.js.map +0 -1
  236. package/build/server/chunks/chunks/log-buffer.js-CpI7gyom.js.map +0 -1
  237. package/build/server/chunks/chunks/series-buckets.js-CX_rWCeH.js +0 -123
  238. package/build/server/chunks/chunks/series-buckets.js-CX_rWCeH.js.map +0 -1
  239. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DjGMqXKo.js.map +0 -1
  240. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-C-XDemlx.js.map +0 -1
  241. package/build/server/chunks/entries/pages/_page.svelte.js-B-kVwiNh.js.map +0 -1
  242. /package/build/client/_app/immutable/nodes/{0.CZO0sIxX.js → 0.BN3NguWs.js} +0 -0
  243. /package/build/client/_app/immutable/nodes/{0.CZO0sIxX.js.br → 0.BN3NguWs.js.br} +0 -0
  244. /package/build/client/_app/immutable/nodes/{0.CZO0sIxX.js.gz → 0.BN3NguWs.js.gz} +0 -0
@@ -1 +0,0 @@
1
- import{f as e}from"./PYzEcuyd.js";export{e as default};
@@ -1 +0,0 @@
1
- �import{f as e}from"./PYzEcuyd.js";export{e as default};
@@ -1,5 +0,0 @@
1
- function e(e){if(typeof e!=`string`)return null;let t=e.trim();if(t.length===0)return null;let n=t[0];if(n!==`{`&&n!==`[`)return null;try{let e=JSON.parse(t);return typeof e!=`object`||!e?null:e}catch{return null}}function t(t,n={}){let{prettyJson:r=!0}=n,i=e(t);return i===null||!r?{text:t,isJson:i!==null,value:i}:{text:JSON.stringify(i,null,2),isJson:!0,value:i}}var n=/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?$/;function r(e){let t=[],r=0,i=(e,n)=>{n.length>0&&t.push({type:e,text:n})};for(;r<e.length;){let t=e[r];if(t===` `||t===`
2
- `||t===` `||t===`\r`){let t=r;for(;t<e.length&&`
3
- \r`.includes(e[t]);)t+=1;i(`whitespace`,e.slice(r,t)),r=t;continue}if(t===`"`){let t=r+1;for(;t<e.length;){if(e[t]===`\\`){t+=2;continue}if(e[t]===`"`)break;t+=1}let n=e.slice(r,Math.min(t+1,e.length)),a=r+n.length;for(;a<e.length&&`
4
- \r`.includes(e[a]);)a+=1;i(e[a]===`:`?`key`:`string`,n),r+=n.length;continue}if(t===`{`||t===`}`||t===`[`||t===`]`||t===`,`||t===`:`){i(`punctuation`,t),r+=1;continue}if(e.startsWith(`true`,r)||e.startsWith(`false`,r)){let t=e.startsWith(`true`,r)?`true`:`false`;i(`boolean`,t),r+=t.length;continue}if(e.startsWith(`null`,r)){i(`null`,`null`),r+=4;continue}let a=r;for(;a<e.length&&!`{}[],:"
5
- \r`.includes(e[a]);)a+=1;let o=e.slice(r,Math.max(a,r+1));i(n.test(o)?`number`:`other`,o),r+=o.length}return t}function i(t){if(typeof t!=`string`)return null;let n=e(t);if(n!==null)return n;for(let e=0;e<t.length;e+=1){let n=t[e];if(n!==`{`&&n!==`[`)continue;let r=n===`{`?`}`:`]`,i=0,a=!1,o=!1;for(let s=e;s<t.length;s+=1){let c=t[s];if(a){o?o=!1:c===`\\`?o=!0:c===`"`&&(a=!1);continue}if(c===`"`){a=!0;continue}if(c===n)i+=1;else if(c===r&&(--i,i===0)){let n=t.slice(e,s+1);try{let e=JSON.parse(n);if(typeof e==`object`&&e)return e}catch{}break}}}return null}var a=5e3,o=/\b(ERROR|FATAL|CRITICAL|CRIT|PANIC|EXCEPTION|TRACEBACK|SEVERE|FAILED|FAILURE)\b/,s=/\b(WARN|WARNING)\b/,c=/\b(DEBUG|TRACE|VERBOSE)\b/,l=[`level`,`severity`,`lvl`,`logLevel`,`log_level`],u={trace:`debug`,verbose:`debug`,debug:`debug`,info:`info`,information:`info`,notice:`info`,note:`info`,warn:`warn`,warning:`warn`,error:`error`,err:`error`,exception:`error`,fatal:`error`,critical:`error`,crit:`error`,panic:`error`,severe:`error`,alert:`error`,emergency:`error`},d={10:`debug`,20:`debug`,30:`info`,40:`warn`,50:`error`,60:`error`};function f(e){if(typeof e==`number`&&Number.isFinite(e))return d[e]??null;if(typeof e!=`string`)return null;let t=e.trim().toLowerCase();return t.length===0?null:u[t]??null}function p(e){let t=i(e);if(typeof t!=`object`||!t||Array.isArray(t))return null;let n=t;for(let e of l){let t=f(n[e]);if(t!==null)return t}return null}function m(e){let t=p(e??``);if(t!==null)return{level:t,source:`json`};let n=(e??``).toUpperCase();return o.test(n)?{level:`error`,source:`text`}:s.test(n)?{level:`warn`,source:`text`}:c.test(n)?{level:`debug`,source:`text`}:{level:null,source:null}}function h(e){return m(e).level}function g(e){return e.level===void 0?h(e.message):e.level}function _(e,t){return t===null||g(e)===t}function v(e,t){return t===null?e.slice():e.filter(e=>_(e,t))}function y(e){switch(e){case`error`:return`text-red-400`;case`warn`:return`text-amber-300`;case`debug`:return`text-neutral-500`;default:return`text-neutral-200`}}function b(e,t){return`${e.id??`no-id`}:${e.timestamp}:${t}`}function x(e,t){let n=(t??``).trim().toLowerCase();return n===``||`${e.message??``} ${e.streamName??``}`.toLowerCase().includes(n)}function S(e,t){return(t??``).trim()===``?e.slice():e.filter(e=>x(e,t))}function C(e){return Array.from({length:e})}var w=class{capacity;#e;#t=0;#n=0;#r=0;constructor(e=a){if(!Number.isInteger(e)||e<=0)throw RangeError(`capacity must be a positive integer, received ${e}`);this.capacity=e,this.#e=C(e)}get size(){return this.#n}get dropped(){return this.#r}get full(){return this.#n===this.capacity}push(e){this.#n===this.capacity&&(this.#r+=1,this.#t=(this.#t+1)%this.capacity,--this.#n);let t=(this.#t+this.#n)%this.capacity;this.#e[t]=e,this.#n+=1}pushMany(e){for(let t of e)this.push(t)}toArray(){let e=C(this.#n);for(let t=0;t<this.#n;t+=1)e[t]=this.#e[(this.#t+t)%this.capacity];return e}first(){return this.#n===0?void 0:this.#e[this.#t]}last(){return this.#n===0?void 0:this.#e[(this.#t+this.#n-1)%this.capacity]}clear(){this.#e=C(this.capacity),this.#t=0,this.#n=0,this.#r=0}},T=class{buffer;#e;#t=!1;constructor(e=a){this.buffer=new w(e),this.#e=new w(e)}get paused(){return this.#t}get size(){return this.buffer.size}get pendingCount(){return this.#e.size}get droppedCount(){return this.buffer.dropped}push(e){if(this.#t){this.#e.pushMany(e);return}this.buffer.pushMany(e)}setPaused(e){return e===this.#t?[]:(this.#t=e,e?[]:this.flush())}pause(){this.#t=!0}resume(){return this.#t=!1,this.flush()}flush(){let e=this.#e.toArray();return this.#e.clear(),this.buffer.pushMany(e),e}toArray(){return this.buffer.toArray()}clear(){this.buffer.clear(),this.#e.clear()}},E=[`error`,`warn`,`info`,`debug`,`unknown`],D={error:`Error`,warn:`Warn`,info:`Info`,debug:`Debug`,unknown:`No level`},O={error:`#f87171`,warn:`#fcd34d`,info:`#a3a3a3`,debug:`#737373`,unknown:`#525252`},k=6e4;function A(e){return g(e)??`unknown`}function j(e,t){let n=t.bucketMs??6e4,r=Number.isFinite(n)&&n>0?Math.round(n):k,i=t.level??null,a=t.fallbackGroup??``,o=new Map;for(let n of e){let e=n.timestamp;if(!Number.isFinite(e)||e<t.from||e>=t.to)continue;let s=A(n);if(i!==null&&s!==i)continue;let c=Math.floor(e/r)*r,l=n.group??a,u=`${c}\u0000${l}\u0000${s}`,d=o.get(u);d===void 0?o.set(u,{t:c,group:l,level:s,events:1}):d.events+=1}return[...o.values()].toSorted((e,t)=>e.t===t.t?e.level.localeCompare(t.level):e.t-t.t)}function M(e){let t=new Map;for(let n of e){let e=t.get(n.level);e===void 0?t.set(n.level,[n]):e.push(n)}return E.filter(e=>t.has(e)).map(e=>{let n=(t.get(e)??[]).toSorted((e,t)=>e.t-t.t);return{level:e,label:D[e],points:n,events:n.reduce((e,t)=>e+t.events,0)}})}var N=.98;function P(e,t,n){let r=e.to-e.from;if(!Number.isFinite(r)||r<=0)return!1;let i=t.to-t.from;return!Number.isFinite(i)||i<=0||r<Math.max(3e4,n*2)?!1:r<=i*N}export{a,g as c,S as d,y as f,r as h,P as i,b as l,t as m,j as n,T as o,i as p,M as r,h as s,O as t,v as u};
@@ -1 +0,0 @@
1
- import{a as e,n as t}from"../chunks/Dp8S9ymS.js";export{e as load_css,t as start};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../chunks/PYzEcuyd.js","../chunks/pqiPC7Y8.js","../chunks/HclGiUj8.js","../chunks/xihTtKlq.js","../chunks/DwezeuNE.js","../chunks/CJFHBop_.js","../chunks/Dp8S9ymS.js","../chunks/BR7qH0F5.js","../chunks/Dt_Zd6U2.js","../chunks/DslUcEd-.js","../chunks/AUlz4-kZ.js","../chunks/Db0q5_zr.js","../chunks/CCch3uox.js","../chunks/Di37PX72.js","../chunks/B6nyufJR.js","../chunks/BkXArOra.js","../chunks/BwntJtbK.js","../chunks/DVTgeA2y.js","../chunks/CoEFQJcr.js","../chunks/C58PZtCD.js","../assets/Path.B0wDzTrn.css","../chunks/BR2LaRms.js","../chunks/RobXhXPM.js","../chunks/B1t8v2wP.js","../chunks/Bp63j1zN.js","../chunks/C20WvNRq.js","../assets/Circle.C5MKzgk2.css","../chunks/Dfvzj6n2.js","../assets/EventScatter.DA5sZ1c0.css"])))=>i.map(i=>d[i]);
2
- import{B as e,Et as t,G as n,I as r,J as i,K as a,M as o,N as s,P as c,R as l,Tt as u,U as d,W as f,_ as p,b as m,bt as h,ct as g,ft as _,g as v,h as y,ht as b,i as x,j as S,k as C,l as w,lt as T,m as E,mt as D,n as ee,nt as O,ot as k,p as A,rt as j,s as M,st as N,ut as P,v as F,x as I,y as te,yt as ne,z as L}from"../chunks/pqiPC7Y8.js";import{t as re}from"../chunks/Dp8S9ymS.js";import{t as R}from"../chunks/HclGiUj8.js";import"../chunks/xihTtKlq.js";import{t as z}from"../chunks/DkyYNO4U.js";import{c as B,d as ie,f as V,h as H,i as ae,l as oe,m as se,n as ce,o as U,p as W,r as le,s as ue,t as G,u as de}from"../chunks/DwezeuNE.js";var fe=`--:--:--.---`;function pe(e,t=2){return String(Math.trunc(Math.abs(e))).padStart(t,`0`)}function me(e){if(typeof e!=`number`||!Number.isFinite(e))return fe;let t=new Date(e);return Number.isNaN(t.getTime())?fe:`${`${pe(t.getUTCHours())}:${pe(t.getUTCMinutes())}:${pe(t.getUTCSeconds())}`}.${pe(t.getUTCMilliseconds(),3)}`}function he(e){if(typeof e!=`number`||!Number.isFinite(e))return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toISOString()}function ge(e){let t=e>=100?e.toFixed(0):e.toFixed(1);return t.endsWith(`.0`)?t.slice(0,-2):t}function _e(e){if(typeof e!=`number`||!Number.isFinite(e)||e<0)return`—`;if(e<1024)return`${Math.trunc(e)} B`;let t=[`KiB`,`MiB`,`GiB`,`TiB`],n=e/1024,r=t[0];for(let e=1;e<t.length&&n>=1024;e+=1)n/=1024,r=t[e];return`${ge(n)} ${r}`}function K(e){if(typeof e!=`number`||!Number.isFinite(e))return`0`;let t=Math.trunc(e);return(t<0?`-`:``)+String(Math.abs(t)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}function ve(e){let t=typeof e==`string`?e.trim():``;if(t===``)return null;let n=t.toLowerCase();return n.includes(`floci`)?`floci`:n.includes(`localstack`)?`localstack`:ye(t)===`4566`?`floci`:`local emulator`}function ye(e){return be(e)?.port||null}function be(e){try{return new URL(e)}catch{return null}}function xe(e){let t=typeof e==`string`?e.trim():``;if(t===``)return null;let n=ve(t);return n===null?null:(be(t)?.hostname.toLowerCase()??t.toLowerCase()).startsWith(n)?t:`${n} ${t}`}var q=e(`<span data-testid="credentials-hint" class="text-[0.6875rem] text-neutral-500">dev creds</span>`),J=e(`<span class="inline-flex items-center gap-1.5"><span data-testid="endpoint-badge" class="rounded-full border border-violet-900 bg-violet-950/60 px-2.5 py-1 text-xs font-medium text-violet-300"> </span> <!></span>`);function Se(e,n){h(n,!0);let a=x(n,`endpoint`,3,null),o=x(n,`credentials`,3,null),s=b(()=>xe(a())),u=b(()=>o()===`emulator-default`),d=b(()=>i(u)?`Local emulator endpoint - using floci's throwaway credentials (no ambient AWS credentials found)`:`Local emulator endpoint`);var f=L(),p=N(f),m=e=>{var n=J(),a=k(n),o=g(a,!0),f=T(a,2),p=e=>{var t=q();l(e,t)};c(f,e=>{i(u)&&e(p)}),t(n),O(()=>{E(n,`title`,i(d)),E(a,`title`,i(d)),r(o,i(s))}),l(e,n)};c(p,e=>{i(s)!==null&&e(m)}),l(e,f),ne()}var Ce={sidebarWidth:`watch-stream:sidebar-width`,prefixWidth:`watch-stream:prefix-width`,wrap:`watch-stream:wrap`,jsonView:`watch-stream:json-view`,chartOpen:`watch-stream:chart-open`},Y={defaultRem:22,minRem:16,maxVw:44},we={defaultRem:14,minRem:4,maxRem:40};function X(e,t,n){let r=Math.min(t,n),i=Math.max(t,n);return Number.isNaN(e)?r:Math.min(Math.max(e,r),i)}function Te(e,t,n,r){if(typeof e!=`string`||e.trim()===``)return X(t,n,r);let i=Number(e);return X(Number.isFinite(i)?i:t,n,r)}function Ee(e){let{startWidth:t,startX:n,currentX:r,min:i,max:a}=e;return X(t+(r-n),i,a)}function De(e){let{width:t,key:n,step:r=16,min:i,max:a}=e;return X(n!==`ArrowLeft`&&n!==`ArrowRight`?t:t+(n===`ArrowLeft`?-r:r),i,a)}function Oe(e,t=16){let n=e/t;return`${Number.isInteger(n)?n:Number(n.toFixed(3))}rem`}function Z(e,t=16){return e*t}var ke=e(`<span class="text-neutral-500" data-testid="scatter-groups"> </span>`),Ae=e(`<span class="flex items-center gap-1 text-neutral-400"><span class="inline-block h-2 w-2 rounded-full"></span> <span class="text-neutral-500"> </span></span>`),je=e(`<span class="text-amber-300" data-testid="scatter-loading">counting…</span>`),Me=e(`<span class="ml-auto text-sky-300" data-testid="scatter-brush-preview"> </span>`),Q=e(`<span class="ml-auto text-neutral-500" data-testid="scatter-hint">drag to zoom · click to clear</span>`),Ne=e(`<p class="px-1 py-4 text-xs text-amber-300" data-testid="scatter-error">The chart could not be loaded. The log view is unaffected.</p>`),Pe=e(`<div class="w-full animate-pulse rounded bg-neutral-900/60"></div>`),Fe=e(`<p class="px-1 py-6 text-xs text-neutral-500" data-testid="scatter-empty">No events in this window yet.</p>`),Ie=e(`<section class="flex min-w-0 flex-col gap-1 rounded-lg border border-neutral-800 bg-neutral-950/60 p-2" data-testid="event-scatter" aria-label="Events over time"><div class="flex flex-wrap items-center gap-x-3 gap-y-1 px-1 text-[0.6875rem]"><button type="button" data-testid="scatter-toggle" class="flex items-center gap-1 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-semibold uppercase tracking-wider text-neutral-400 transition-colors hover:border-neutral-700 hover:text-neutral-200"><span aria-hidden="true"> </span> Events over time</button> <span class="text-neutral-400" data-testid="scatter-summary"> </span> <!> <!> <!> <!></div> <!></section>`);function Le(e,a){h(a,!0);let o=()=>R(()=>import(`../chunks/PYzEcuyd.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]),import.meta.url),d=x(a,`points`,19,()=>[]),f=x(a,`from`,3,0),p=x(a,`to`,3,0);x(a,`bucketMs`,3,0);let m=x(a,`groups`,19,()=>[]),v=x(a,`loading`,3,!1),y=x(a,`height`,3,200),w=x(a,`open`,3,!0),ee=x(a,`loadChart`,3,o),A=D(null),M=b(()=>i(A)??w()),P=D(null),F=D(!1),I=D(null),re=D(0);j(()=>{if(typeof localStorage>`u`)return;let e=localStorage.getItem(Ce.chartOpen);e===`0`&&_(A,!1),e===`1`&&_(A,!0)}),j(()=>{if(!i(M)||i(P)!==null||i(F))return;let e=!1;return ee()().then(t=>{e||_(P,t.default,!0)}).catch(()=>{e||_(F,!0)}),()=>{e=!0}});function z(){_(A,!i(M));try{localStorage?.setItem(Ce.chartOpen,i(M)?`1`:`0`)}catch{}}function B(e){return new Date(e).toISOString().slice(11,19)}let ie=b(()=>le(d())),V=b(()=>i(ie).reduce((e,t)=>e+t.events,0)),H=b(()=>new Set(d().map(e=>e.t)).size),ae=b(()=>d().length>0);function oe(){_(re,i(re)+1),a.onBrush?.(null)}var se={reset:oe},ce=Ie(),U=k(ce),W=k(U),ue=k(W),de=g(ue,!0);u(),t(W);var fe=T(W,2),pe=g(fe),me=T(fe,2),he=e=>{var t=ke(),n=g(t);O(()=>r(n,`across ${m().length??``} groups`)),l(e,t)};c(me,e=>{m().length>1&&e(he)});var ge=T(me,2);S(ge,17,()=>i(ie),e=>e.level,(e,n)=>{var a=Ae(),o=k(a),s=T(o),c=T(s),u=g(c,!0);t(a),O(e=>{E(a,`data-testid`,`scatter-legend-${i(n).level??``}`),te(o,`background-color: ${G[i(n).level]??``}`),r(s,` ${i(n).label??``} `),r(u,e)},[()=>K(i(n).events)]),l(e,a)});var _e=T(ge,2),ve=e=>{var t=je();l(e,t)};c(_e,e=>{v()&&i(M)&&e(ve)});var ye=T(_e,2),be=e=>{var t=L(),n=N(t),a=e=>{var t=Me(),n=g(t);O((e,t)=>r(n,`release to zoom to ${e??``} – ${t??``}`),[()=>B(i(I).from),()=>B(i(I).to)]),l(e,t)},o=e=>{var t=Q();l(e,t)};c(n,e=>{i(I)===null?e(o,-1):e(a)}),l(e,t)};c(ye,e=>{i(M)&&e(be)}),t(U);var xe=T(U,2),q=e=>{var t=L(),n=N(t),r=e=>{var t=Ne();l(e,t)},o=e=>{var t=L(),n=N(t),r=e=>{var t=L(),n=N(t);s(n,()=>i(re),e=>{var t=L(),n=N(t);C(n,()=>i(P),(e,t)=>{t(e,{get points(){return d()},get from(){return f()},get to(){return p()},get height(){return y()},onBrush:e=>{_(I,null),a.onBrush?.(e)},onBrushPreview:e=>_(I,e,!0)})}),l(e,t)}),l(e,t)},o=e=>{var t=Pe();O(()=>te(t,`height: ${y()??``}px`)),l(e,t)};c(n,e=>{i(P)===null?e(o,-1):e(r)}),l(e,t)},u=e=>{var t=Fe();l(e,t)};c(n,e=>{i(F)?e(r):i(ae)?e(o,1):v()||e(u,2)}),l(e,t)};return c(xe,e=>{i(M)&&e(q)}),t(ce),O((e,t)=>{E(W,`aria-expanded`,i(M)),E(W,`title`,i(M)?`Hide the chart`:`Show the chart`),r(de,i(M)?`▾`:`▸`),r(pe,`${e??``} events in ${t??``} buckets`)},[()=>K(i(V)),()=>K(i(H))]),n(`click`,W,z),l(e,ce),ne(se)}f([`click`]);var Re=e(`<div role="separator" aria-orientation="vertical" tabindex="0"></div>`);function ze(e,t){h(t,!0);let r=x(t,`class`,3,``),i=x(t,`style`,3,``),o=null;function s(e){o={x:e.clientX,width:t.width},e.currentTarget.setPointerCapture?.(e.pointerId),e.preventDefault()}function c(e){o!==null&&(t.onChange(Ee({startWidth:o.width,startX:o.x,currentX:e.clientX,min:t.min,max:t.max})),e.preventDefault())}function u(e){o!==null&&(o=null,e.currentTarget.releasePointerCapture?.(e.pointerId),t.onCommit?.(t.width))}function d(e){let n=De({width:t.width,key:e.key,min:t.min,max:t.max});n!==t.width&&(e.preventDefault(),t.onChange(n),t.onCommit?.(n))}var f=Re();O(e=>{E(f,`aria-label`,t.label),E(f,`aria-valuemin`,t.min),E(f,`aria-valuemax`,t.max),E(f,`aria-valuenow`,e),E(f,`title`,`${t.label??``} (drag or use the arrow keys)`),E(f,`data-testid`,t.testId),m(f,1,`cursor-col-resize touch-none bg-transparent hover:bg-sky-500/30 focus:bg-sky-500/50 focus:outline-none ${r()??``}`),te(f,i())},[()=>Math.round(t.width)]),n(`pointerdown`,f,s),n(`pointermove`,f,c),n(`pointerup`,f,u),a(`pointercancel`,f,u),n(`keydown`,f,d),l(e,f),ne()}f([`pointerdown`,`pointermove`,`pointerup`,`keydown`]);var Be=[`15m`,`1h`,`3h`,`12h`,`24h`,`5d`],Ve={"15m":`15 min`,"1h":`1 hour`,"3h":`3 hours`,"12h":`12 hours`,"24h":`24 hours`,"5d":`5 days`};function He(e){return Be.includes(e)}function Ue(e){return He(e)?Ve[e]:e}function We(e){return String(e).padStart(2,`0`)}function Ge(e){let t=new Date(e);return`${t.getFullYear()}-${We(t.getMonth()+1)}-${We(t.getDate())}T${We(t.getHours())}:${We(t.getMinutes())}`}function Ke(e){if(typeof e!=`string`||e.trim()===``)return null;let t=Date.parse(e);return Number.isNaN(t)?null:t}function $(e,t){let n=new Date(e),r=`${String(n.getHours()).padStart(2,`0`)}:${String(n.getMinutes()).padStart(2,`0`)}`;return new Date(t).toDateString()===n.toDateString()?r:`${n.toLocaleDateString(void 0,{day:`numeric`,month:`short`})} ${r}`}function qe(e,t){if(e===null||e.startTime===void 0)return{mode:`live`,label:`live`,title:`Tailing new events`,clamped:!1};let n=e.clamped===!0;if(e.mode!==`historic`||e.endTime===null||e.endTime===void 0)return{mode:`live`,label:`live`,title:`Live since ${$(e.startTime,t)}`,clamped:n};let r=$(e.startTime,t),i=$(e.endTime,t),a=e.preset===null||e.preset===void 0?null:Ue(e.preset);return{mode:`historic`,label:a===null?`${r} → ${i}`:`${a} · ${r} → ${i}`,title:n?`Historic window, clamped to the last 14 days that CloudWatch Logs keeps`:`Historic window`,clamped:n}}var Je=e(`<button type="button"> </button>`),Ye=e(`<div class="flex flex-wrap items-center gap-1" role="group" aria-label="Historic range"><!> <button type="button" data-testid="preset-custom"> </button></div>`),Xe=e(`<span class="text-xs text-amber-300" data-testid="range-loading">loading window…</span>`),Ze=e(`<span class="text-xs text-neutral-500"> </span>`),Qe=e(`<span class="text-xs text-red-300" role="alert" data-testid="custom-error"> </span>`),$e=e(`<div class="flex flex-wrap items-center gap-2 rounded-lg border border-neutral-800 bg-neutral-900/70 p-2" data-testid="custom-window"><label class="flex items-center gap-1 text-xs text-neutral-400">From <input type="datetime-local" data-testid="custom-from" class="rounded-md border border-neutral-800 bg-neutral-950 px-2 py-1 text-xs text-neutral-100"/></label> <label class="flex items-center gap-1 text-xs text-neutral-400">To <input type="datetime-local" data-testid="custom-to" class="rounded-md border border-neutral-800 bg-neutral-950 px-2 py-1 text-xs text-neutral-100"/></label> <button type="button" data-testid="custom-apply" class="rounded-md border border-sky-800 bg-sky-950/60 px-2 py-1 text-xs font-medium text-sky-200 hover:border-sky-600">Apply</button> <!></div>`),et=e(`<div class="flex flex-wrap items-center gap-2" data-testid="range-controls"><div class="flex items-center gap-1 rounded-lg border border-neutral-800 bg-neutral-900 p-0.5" role="group" aria-label="Tail mode"><button type="button" data-testid="mode-live">Live</button> <button type="button" data-testid="mode-historic">Historic</button></div> <!> <!> <!></div>`);function tt(e,a){h(a,!0);let o=x(a,`mode`,3,`live`),s=x(a,`range`,3,`15m`),u=x(a,`from`,3,null),d=x(a,`to`,3,null),f=x(a,`disabled`,3,!1),p=x(a,`loading`,3,!1),v=x(a,`liveDisabled`,3,!1),y=D(!1),C=D(``),ee=D(``),M=D(null);j(()=>{let e=u()??(d()??Date.now())-36e5,t=d()??Date.now();_(C,Ge(e),!0),_(ee,Ge(t),!0),_(y,o()===`historic`&&s()===``&&u()!==null&&d()!==null,!0)});function N(e){e!==o()&&(e===`live`&&v()||a.onApply?.({mode:e,range:e===`live`?``:s()===``?`15m`:s(),from:null,to:null}))}function P(e){_(M,null),a.onApply?.({mode:`historic`,range:e,from:null,to:null})}function F(){_(M,null),_(y,!0)}function I(){let e=Ke(i(C)),t=Ke(i(ee));if(e===null||t===null){_(M,`Pick both a start and an end time.`);return}if(t<=e){_(M,`The end must be after the start.`);return}if(t-e>12096e5){_(M,`CloudWatch Logs only keeps 14 days.`);return}_(M,null),a.onApply?.({mode:`historic`,range:``,from:e,to:t})}let te=b(()=>o()===`historic`&&s()===``&&u()!==null&&d()!==null?`${Ge(u()).replace(`T`,` `)} → ${Ge(d()).replace(`T`,` `)}`:`Custom…`);var L=et(),re=k(L),R=k(re),z=T(R,2);t(re);var B=T(re,2),ie=e=>{var a=Ye(),o=k(a);S(o,16,()=>Be,e=>e,(e,t)=>{var i=Je(),a=g(i,!0);O(()=>{E(i,`aria-pressed`,s()===t),E(i,`data-testid`,`preset-${t??``}`),i.disabled=f(),m(i,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${s()===t?`border-amber-700 bg-amber-950/50 text-amber-200`:`border-neutral-800 bg-neutral-900 text-neutral-300 hover:border-neutral-700`} disabled:opacity-40`),r(a,Ve[t])}),n(`click`,i,()=>P(t)),l(e,i)});var c=T(o,2),u=g(c,!0);t(a),O(()=>{E(c,`aria-pressed`,s()===``),c.disabled=f(),m(c,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${s()===``?`border-amber-700 bg-amber-950/50 text-amber-200`:`border-neutral-800 bg-neutral-900 text-neutral-300 hover:border-neutral-700`}`),r(u,i(te))}),n(`click`,c,F),l(e,a)};c(B,e=>{o()===`historic`&&e(ie)});var V=T(B,2),H=e=>{var t=Xe();l(e,t)},ae=e=>{var t=Ze(),n=g(t);O(e=>r(n,`last ${e??``}`),[()=>Ue(s())]),l(e,t)};c(V,e=>{p()?e(H):o()===`historic`&&s()!==``&&e(ae,1)});var oe=T(V,2),se=e=>{var a=$e(),o=k(a),s=T(k(o));A(s),t(o);var u=T(o,2),d=T(k(u));A(d),t(u);var f=T(u,2),p=T(f,2),m=e=>{var t=Qe(),n=g(t,!0);O(()=>r(n,i(M))),l(e,t)};c(p,e=>{i(M)!==null&&e(m)}),t(a),w(s,()=>i(C),e=>_(C,e)),w(d,()=>i(ee),e=>_(ee,e)),n(`click`,f,I),l(e,a)};c(oe,e=>{i(y)&&o()===`historic`&&e(se)}),t(L),O(()=>{E(R,`aria-pressed`,o()===`live`),R.disabled=v(),E(R,`title`,v()?`There is nothing to tail: the local archive holds historic windows`:void 0),m(R,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${o()===`live`?`border-sky-700 bg-sky-950/60 text-sky-300`:`border-transparent text-neutral-400 hover:text-neutral-200`} disabled:opacity-40`),E(z,`aria-pressed`,o()===`historic`),m(z,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${o()===`historic`?`border-amber-700 bg-amber-950/50 text-amber-300`:`border-transparent text-neutral-400 hover:text-neutral-200`}`)}),n(`click`,R,()=>N(`live`)),n(`click`,z,()=>N(`historic`)),l(e,L),ne()}f([`click`]);var nt=`us-east-1.us-east-2.us-west-1.us-west-2.ca-central-1.ca-west-1.mx-central-1.sa-east-1.eu-west-1.eu-west-2.eu-west-3.eu-central-1.eu-central-2.eu-north-1.eu-south-1.eu-south-2.af-south-1.me-south-1.me-central-1.il-central-1.ap-east-1.ap-south-1.ap-south-2.ap-southeast-1.ap-southeast-2.ap-southeast-3.ap-southeast-4.ap-southeast-5.ap-southeast-6.ap-southeast-7.ap-northeast-1.ap-northeast-2.ap-northeast-3`.split(`.`),rt=class extends Error{status;code;details;constructor(e,t={}){super(e,{cause:t.cause}),this.name=`ApiError`,this.status=t.status??0,this.code=t.code,this.details=t.details}};function it(e,t){if(typeof e!=`object`||!e)return;let n=e[t];return typeof n==`string`?n:void 0}function at(e,t=`Unexpected API error`){return it(e,`error`)??t}function ot(e){let t=new URLSearchParams;e.region&&t.set(`region`,e.region),e.source&&t.set(`source`,e.source),e.prefix&&t.set(`prefix`,e.prefix),typeof e.limit==`number`&&Number.isFinite(e.limit)&&t.set(`limit`,String(e.limit));let n=t.toString();return n===``?`/api/log-groups`:`/api/log-groups?${n}`}function st(e){let t=new URLSearchParams;e.region&&t.set(`region`,e.region),t.set(`source`,`archive`);let n=(e.groups??[]).filter(e=>e.length>0);n.length>0&&t.set(`groups`,n.join(`,`)),typeof e.from==`number`&&Number.isFinite(e.from)&&t.set(`from`,String(Math.round(e.from))),typeof e.to==`number`&&Number.isFinite(e.to)&&t.set(`to`,String(Math.round(e.to)));let r=(e.levels??[]).filter(e=>e.length>0);return r.length>0&&t.set(`level`,r.join(`,`)),typeof e.bucketMs==`number`&&Number.isFinite(e.bucketMs)&&e.bucketMs>0&&t.set(`bucket`,String(Math.round(e.bucketMs))),`/api/series?${t.toString()}`}function ct(e){return ut(st(e),e)}function lt(e){return e instanceof Error&&e.name===`AbortError`}async function ut(e,t){let n=t.fetchImpl??fetch,r;try{r=await n(e,{headers:{accept:`application/json`},signal:t.signal})}catch(t){throw lt(t)?t:new rt(`Could not reach ${e}.`,{cause:t})}let i=await r.text(),a=null;if(i.trim()!==``)try{a=JSON.parse(i)}catch{a=null}if(!r.ok)throw new rt(at(a,`Request to ${e} failed with ${r.status}.`),{status:r.status,code:it(a,`code`),details:it(a,`details`)});return a}function dt(e={}){return ut(`/api/regions`,e)}function ft(e={}){return ut(`/api/health`,e)}function pt(e){return ut(ot(e),e)}function mt(e={}){return ut(`/api/archive`,e)}function ht(e){return`No log groups found in ${e}. Start floci and run \`pnpm seed\` to create sample groups.`}var gt=`Locally archived events - read from the local DuckDB file, no CloudWatch credentials, historic windows only.`;function _t(e){let t=typeof e==`string`?e.trim():``,n=`Locally archived events instead of live CloudWatch data`;return t===``?n:`${n} (${t})`}function vt(e){return`Nothing archived for ${e===``?`this region`:e} yet - stream a group from CloudWatch once and it will appear here.`}function yt(e){return e.trim().replace(/\.+$/,``)}function bt(e,t){if(t instanceof rt){let n=t.details?` ${t.details}`:``;return`Could not list log groups in ${e}: ${yt(t.message)}.${n}`}return`Could not reach the watch-stream API for ${e}. ${t instanceof Error&&t.message!==``?t.message:String(t)}`}function xt(e,t,n){return`${n} (${t===null||t===``?e:`${t} in ${e}`})`}var St=e(`<span class="text-xs font-medium text-sky-400" data-testid="selected-count"> </span>`),Ct=e(`<span class="rounded-full border border-teal-900 bg-teal-950/50 px-1.5 py-0.5 text-[0.625rem] font-medium text-teal-300" data-testid="group-source-badge">local</span>`),wt=e(`<p role="alert" data-testid="group-error" class="rounded-md border border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300"> </p>`),Tt=e(`<div class="h-5 animate-pulse rounded bg-neutral-800/80"></div>`),Et=e(`<div class="flex flex-col gap-2" data-testid="group-loading" aria-busy="true"><!> <p class="text-xs text-neutral-500">Loading log groups…</p></div>`),Dt=e(`<p data-testid="group-empty" class="rounded-md border border-neutral-800 bg-neutral-900/60 px-3 py-2 text-xs leading-5 text-neutral-400"> </p>`),Ot=e(`<p data-testid="group-no-match" class="px-1 py-2 text-xs text-neutral-500"> </p>`),kt=e(`<span data-testid="group-archived-count" class="rounded-full border border-teal-900 bg-teal-950/50 px-1.5 py-0.5 text-[0.625rem] font-medium text-teal-300"> </span>`),At=e(`<span class="hidden text-[0.6875rem] text-neutral-500 xl:inline" data-testid="group-archived-span"> </span>`),jt=e(`<span class="flex shrink-0 items-center gap-1.5"><!> <!></span>`),Mt=e(`<span class="shrink-0 text-[0.6875rem] text-neutral-500"> </span>`),Nt=e(`<li class="flex items-center gap-1.5"><input type="checkbox" class="size-3.5 shrink-0 cursor-pointer accent-sky-500"/> <button type="button" data-testid="group-row"><span class="truncate font-mono"> </span> <!></button></li>`),Pt=e(`<p class="text-[0.6875rem] text-neutral-500" data-testid="group-truncated"> </p>`),Ft=e(`<ul class="flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto pr-1"></ul> <!>`,1),It=e(`<section class="flex min-h-0 flex-1 flex-col gap-3"><div class="flex items-center justify-between gap-2"><div class="flex items-baseline gap-2"><h2 class="text-sm font-semibold text-neutral-200"> </h2> <span class="text-xs text-neutral-500" data-testid="group-count"> </span> <!> <!></div> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100 disabled:cursor-not-allowed disabled:opacity-50"> </button></div> <div class="flex flex-col gap-1.5"><label class="sr-only" for="group-search">Search log groups</label> <input id="group-search" type="search" placeholder="Search log groups" class="w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600"/></div> <!></section>`);function Lt(e,a){h(a,!0);let s=x(a,`groups`,19,()=>[]),d=x(a,`source`,3,`cloudwatch`),f=x(a,`region`,3,``),p=x(a,`selected`,19,()=>[]),C=x(a,`loading`,3,!1),w=x(a,`error`,3,null),ee=x(a,`maxRows`,3,500),j=D(``),M=b(()=>d()===`archive`);function P(e){return e.archivedEvents===void 0?null:`${K(e.archivedEvents)} archived`}function F(e){return e.archivedOldest===void 0||e.archivedNewest===void 0?null:`${he(e.archivedOldest)} \u2192 ${he(e.archivedNewest)}`}let I=b(()=>s().filter(e=>e.name.toLowerCase().includes(i(j).trim().toLowerCase()))),te=b(()=>i(I).slice(0,ee())),L=b(()=>i(I).length>i(te).length),re=b(()=>i(j).trim());function R(e){return e==null?[]:Array.isArray(e)?e:[e]}let z=b(()=>R(p()));function B(e){return i(z).includes(e)}function ie(e){return B(e)?`border-sky-800 bg-sky-950/50 text-sky-200`:`border-transparent bg-neutral-900/60 text-neutral-300 hover:border-neutral-800 hover:text-neutral-100`}var V=It(),H=k(V),ae=k(H),oe=k(ae),se=g(oe,!0),ce=T(oe,2),U=g(ce),W=T(ce,2),le=e=>{var t=St(),n=g(t);O(e=>r(n,`${e??``} selected`),[()=>K(i(z).length)]),l(e,t)};c(W,e=>{i(z).length>1&&e(le)});var ue=T(W,2),G=e=>{var t=Ct();l(e,t)};c(ue,e=>{i(M)&&e(G)}),t(ae);var de=T(ae,2),fe=g(de,!0);t(H);var pe=T(H,2),me=T(k(pe),2);A(me),t(pe);var ge=T(pe,2),ve=e=>{var t=wt(),n=g(t,!0);O(()=>r(n,w())),l(e,t)},ye=e=>{var n=Et(),r=k(n);S(r,16,()=>Array.from({length:5}),o,(e,t)=>{var n=Tt();l(e,n)}),u(2),t(n),l(e,n)},be=e=>{var t=Dt(),n=g(t,!0);O(e=>r(n,e),[()=>i(M)?vt(f()):ht(f())]),l(e,t)},xe=e=>{var t=Ot(),n=g(t);O(()=>r(n,`No log groups match “${i(re)??``}”.`)),l(e,t)},q=e=>{var o=Ft(),s=N(o);S(s,21,()=>i(te),e=>e.arn??e.name,(e,o)=>{var s=Nt(),u=k(s);A(u);var d=T(u,2),f=k(d),p=g(f,!0),h=T(f,2),_=e=>{var n=jt(),a=k(n),s=e=>{var t=kt(),n=g(t,!0);O((e,i)=>{E(t,`title`,e),r(n,i)},[()=>F(i(o))??`Events held in the local DuckDB archive`,()=>P(i(o))]),l(e,t)},u=b(()=>P(i(o))!==null);c(a,e=>{i(u)&&e(s)});var d=T(a,2),f=e=>{var t=At(),n=g(t,!0);O(e=>r(n,e),[()=>F(i(o))]),l(e,t)},p=b(()=>F(i(o))!==null);c(d,e=>{i(p)&&e(f)}),t(n),l(e,n)},v=e=>{var t=Mt(),n=g(t,!0);O(e=>r(n,e),[()=>_e(i(o).storedBytes)]),l(e,t)};c(h,e=>{i(M)?e(_):i(o).storedBytes!==void 0&&e(v,1)}),t(d),t(s),O((e,t,n)=>{E(u,`data-testid`,`group-check-${i(o).name??``}`),E(u,`aria-label`,`Include ${i(o).name} in the selection`),y(u,e),E(d,`aria-current`,t),m(d,1,`flex min-w-0 flex-1 items-center justify-between gap-2 rounded-md border px-2.5 py-1.5 text-left text-xs transition-colors ${n??``}`),r(p,i(o).name)},[()=>B(i(o).name),()=>B(i(o).name)?`true`:void 0,()=>ie(i(o).name)]),n(`change`,u,()=>a.onToggle?.(i(o).name)),n(`click`,d,()=>a.onSelect?.(i(o).name)),l(e,s)}),t(s);var u=T(s,2),d=e=>{var t=Pt(),n=g(t);O((e,t)=>r(n,`Showing first ${e??``} of ${t??``} groups.`),[()=>K(ee()),()=>K(i(I).length)]),l(e,t)};c(u,e=>{i(L)&&e(d)}),l(e,o)};c(ge,e=>{w()!==null&&w()!==``?e(ve):C()&&s().length===0?e(ye,1):s().length===0?e(be,2):i(te).length===0?e(xe,3):e(q,-1)}),t(V),O((e,t)=>{r(se,i(M)?`Archived groups`:`Log groups`),r(U,`${e??``} of ${t??``}`),de.disabled=C(),r(fe,C()?`Refreshing…`:`Refresh`),v(me,i(j))},[()=>K(i(I).length),()=>K(s().length)]),n(`click`,de,()=>a.onRefresh?.()),n(`input`,me,e=>_(j,e.currentTarget.value,!0)),l(e,V),ne()}f([`click`,`input`,`change`]);var Rt=e(`<span data-testid="status-badge"><span aria-hidden="true"></span> </span>`);function zt(e,n){let a={idle:`idle`,connecting:`connecting`,live:`live`,reconnecting:`reconnecting`,error:`error`,ended:`ended`},o={idle:`border-neutral-700 bg-neutral-800/60 text-neutral-400`,connecting:`border-sky-900 bg-sky-950/70 text-sky-300`,live:`border-emerald-900 bg-emerald-950/70 text-emerald-300`,reconnecting:`border-amber-900 bg-amber-950/70 text-amber-300`,error:`border-red-900 bg-red-950/70 text-red-300`,ended:`border-neutral-700 bg-neutral-800/60 text-neutral-400`},s={idle:`bg-neutral-500`,connecting:`bg-sky-400 animate-pulse`,live:`bg-emerald-400`,reconnecting:`bg-amber-400 animate-pulse`,error:`bg-red-400`,ended:`bg-neutral-500`},c=b(()=>o[n.status]),u=b(()=>s[n.status]),d=b(()=>a[n.status]);var f=Rt(),p=k(f),h=T(p);t(f),O(()=>{E(f,`data-status`,n.status),m(f,1,`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium ${i(c)??``}`),m(p,1,`size-1.5 rounded-full ${i(u)??``}`),r(h,` ${i(d)??``}`)}),l(e,f)}var Bt=e(`<span data-testid="archive-badge" class="rounded-full border border-teal-900 bg-teal-950/60 px-2 py-0.5 text-[0.6875rem] font-medium text-teal-300">local archive</span>`),Vt=e(`<span class="text-xs text-amber-300" data-testid="pending-count"> </span>`),Ht=e(`<span class="text-xs text-amber-300/80" data-testid="dropped-count"> </span>`),Ut=e(`<span class="text-[0.6875rem] text-amber-400/80" data-testid="window-clamped">14-day limit</span>`),Wt=e(`<span class="text-[0.6875rem] text-emerald-400/80" data-testid="window-complete">window complete</span>`),Gt=e(`<span class="ml-1 opacity-70"> </span>`),Kt=e(`<button type="button"> <!></button>`),qt=e(`<p role="alert" data-testid="stream-error" class="border-b border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300"> </p>`),Jt=e(`<p class="px-3 py-6 text-sm text-neutral-500" data-testid="viewer-idle">Select a log group to start tailing.</p>`),Yt=e(`<p class="px-3 py-6 text-sm text-neutral-500" data-testid="viewer-empty"> </p>`),Xt=e(`<span class="w-[9rem] shrink-0 truncate text-teal-400/80" data-testid="log-group"> </span>`),Zt=e(`<span class="shrink-0 text-neutral-600" aria-hidden="true"> </span>`),Qt=e(`<span> </span>`),$t=e(`<span class="w-full whitespace-pre text-xs text-neutral-300" data-testid="log-json-expanded"></span>`),en=e(`<li data-testid="log-line"><span class="w-[7.5rem] shrink-0 text-neutral-500"> </span> <!> <span class="shrink-0 truncate text-sky-400/80" data-testid="log-stream"> </span> <!> <span data-testid="log-message"><!></span> <!></li>`),tn=e(`<div data-testid="log-canvas"><ol class="font-mono text-xs leading-5" data-testid="log-lines"></ol> <!></div>`),nn=e(`<section class="flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-neutral-800 bg-neutral-950"><div class="flex flex-wrap items-center gap-x-3 gap-y-2 border-b border-neutral-800 bg-neutral-900/40 px-3 py-2"><!> <!> <span class="text-xs text-neutral-400" data-testid="visible-count"> </span> <span class="text-xs text-neutral-500" data-testid="received-count"> </span> <!> <!> <span data-testid="window-chip"> </span> <!> <!> <div class="ml-auto flex flex-wrap items-center gap-2"><div class="flex items-center gap-1" role="group" aria-label="Filter by level"><button type="button" title="Show every level, including lines with no level" data-testid="level-all">All</button> <!></div> <input type="search" aria-label="Filter log lines" placeholder="Filter lines" class="w-40 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600"/> <button type="button" title="Wrap long lines instead of scrolling sideways" data-testid="wrap-toggle">Wrap</button> <button type="button" title="Pretty-print JSON log entries (off: click a line to open its JSON)" data-testid="json-toggle">JSON</button> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100"> </button> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Clear</button> <button type="button">Auto-scroll</button></div></div> <!> <div class="min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950" data-testid="log-scroller"><!></div></section>`);function rn(e,a){h(a,!0);let o=x(a,`lines`,19,()=>[]),s=x(a,`status`,3,`idle`),u=x(a,`error`,3,null),f=x(a,`region`,3,``),p=x(a,`group`,3,null),y=x(a,`filter`,3,``),C=x(a,`paused`,3,!1),w=x(a,`autoScroll`,3,!0),F=x(a,`pendingCount`,3,0),re=x(a,`droppedCount`,3,0),R=x(a,`receivedCount`,3,0),z=x(a,`mode`,3,`live`),ae=x(a,`ready`,3,null),ce=x(a,`endReason`,3,null),U=x(a,`archivePath`,3,null),le=x(a,`groups`,19,()=>[]),G=x(a,`level`,3,void 0),fe=Z(7.5),pe=Z(.75),ge=Z(.5),_e=Z(we.minRem),ve=Z(we.maxRem),ye=Z(we.defaultRem);function be(e){try{return typeof localStorage>`u`?null:localStorage.getItem(e)}catch{return null}}function xe(e,t){try{if(typeof localStorage>`u`)return;localStorage.setItem(e,t)}catch{}}let q=D(!1),J=D(!0),Se=D(P(ye));ee(()=>{_(q,be(Ce.wrap)===`true`),_(J,be(Ce.jsonView)!==`false`),_(Se,Te(be(Ce.prefixWidth),ye,_e,ve),!0)});let Y=D(null),X=b(()=>G()===void 0?i(Y):G());function Ee(e){G()===void 0?_(Y,e,!0):a.onLevelChange?.(e)}let De=[{level:`error`,label:`Error`,activeClass:`border-red-800 bg-red-950/50 text-red-300`},{level:`warn`,label:`Warn`,activeClass:`border-amber-800 bg-amber-950/40 text-amber-300`},{level:`info`,label:`Info`,activeClass:`border-neutral-700 bg-neutral-800 text-neutral-100`},{level:`debug`,label:`Debug`,activeClass:`border-neutral-700 bg-neutral-800 text-neutral-400`}],ke=b(()=>de(ie(o(),y()),i(X))),Ae=b(()=>{let e={error:0,warn:0,info:0,debug:0,unknown:0};for(let t of o()){let n=B(t);e[n??`unknown`]=(e[n??`unknown`]??0)+1}return e}),je=b(()=>i(ke).map((e,t)=>{let n=e.level===void 0?ue(e.message):e.level,r=se(e.message,{prettyJson:i(J)}),a=V(n),o=null;if(!i(J)){let t=W(e.message);t!==null&&(o=JSON.stringify(t,null,2))}return{key:oe(e,t),time:me(e.timestamp),timestamp:he(e.timestamp),streamName:e.streamName,group:e.group??null,message:r.text,tokens:i(J)&&r.isJson?H(r.text):null,expandable:o,level:n,levelClass:a}})),Me=D(null);j(()=>{let e=i(je).length;w()&&i(Me)!==null&&e!==0&&(i(Me).scrollTop=i(Me).scrollHeight)});let Q=b(()=>u()===null?null:xt(f(),p(),u().message)),Ne=b(()=>ae()?.source===`archive`),Pe=b(()=>i(Ne)&&(s()===`connecting`||s()===`live`||s()===`reconnecting`)?`idle`:s()),Fe=b(()=>_t(U())),Ie=b(()=>p()===null||p()===``?`Select a log group to start tailing.`:y().trim()===``?i(Ne)?`No archived events for ${p()} in this window.`:`Waiting for events from ${p()}\u2026`:`No lines match the filter.`),Le=b(()=>w()?`text-sky-300`:`text-neutral-400`),Re=b(()=>qe(ae(),Date.now())),Be=b(()=>z()===`historic`&&ce()===`window-complete`),Ve=b(()=>i(q)?`text-sky-300`:`text-neutral-400`),He=b(()=>i(J)?`text-sky-300`:`text-neutral-400`),Ue=b(()=>i(q)?`w-full`:`w-max min-w-full`),We=b(()=>i(q)?`whitespace-pre-wrap break-words`:`whitespace-pre`),Ge=b(()=>pe+fe+ge+i(Se)),Ke=b(()=>`max-width: ${Oe(i(Se))}`),$=D(P({}));function Je(e){return i($)[e]===!0}function Ye(e){if(i($)[e]===!0){let{[e]:t,...n}=i($);_($,n,!0);return}_($,{...i($),[e]:!0},!0)}function Xe(e){switch(e){case`key`:return`text-sky-300`;case`string`:return`text-emerald-300`;case`number`:return`text-amber-300`;case`boolean`:return`text-fuchsia-300`;case`null`:return`text-neutral-500`;case`punctuation`:return`text-neutral-600`;default:return``}}function Ze(){xe(Ce.prefixWidth,String(Math.round(i(Se))))}function Qe(){_(q,!i(q)),xe(Ce.wrap,String(i(q)))}function $e(){_(J,!i(J)),xe(Ce.jsonView,String(i(J)))}var et=nn(),tt=k(et),nt=k(tt);zt(nt,{get status(){return i(Pe)}});var rt=T(nt,2),it=e=>{var t=Bt();O(()=>E(t,`title`,i(Fe))),l(e,t)};c(rt,e=>{i(Ne)&&e(it)});var at=T(rt,2),ot=g(at),st=T(at,2),ct=g(st),lt=T(st,2),ut=e=>{var t=Vt(),n=g(t);O(e=>r(n,`${e??``} buffered`),[()=>K(F())]),l(e,t)};c(lt,e=>{F()>0&&e(ut)});var dt=T(lt,2),ft=e=>{var t=Ht(),n=g(t);O(e=>r(n,`${e??``} dropped`),[()=>K(re())]),l(e,t)};c(dt,e=>{re()>0&&e(ft)});var pt=T(dt,2),mt=g(pt,!0),ht=T(pt,2),gt=e=>{var t=Ut();l(e,t)};c(ht,e=>{i(Re).clamped&&e(gt)});var vt=T(ht,2),yt=e=>{var t=Wt();l(e,t)};c(vt,e=>{i(Be)&&e(yt)});var bt=T(vt,2),St=k(bt),Ct=k(St),wt=T(Ct,2);S(wt,17,()=>De,e=>e.level,(e,a)=>{var o=Kt(),s=k(o),u=T(s),d=e=>{var t=Gt(),n=g(t,!0);O(e=>r(n,e),[()=>K(i(Ae)[i(a).level]??0)]),l(e,t)};c(u,e=>{(i(Ae)[i(a).level]??0)>0&&e(d)}),t(o),O(()=>{E(o,`aria-pressed`,i(X)===i(a).level),E(o,`title`,`Show only ${i(a).label??``} lines (${i(Ae)[i(a).level]??0??``} loaded)`),E(o,`data-testid`,`level-${i(a).level??``}`),m(o,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${(i(X)===i(a).level?i(a).activeClass:`border-neutral-800 bg-neutral-900 text-neutral-400 hover:border-neutral-700`)??``}`),r(s,`${i(a).label??``} `)}),n(`click`,o,()=>Ee(i(X)===i(a).level?null:i(a).level)),l(e,o)}),t(St);var Tt=T(St,2);A(Tt);var Et=T(Tt,2),Dt=T(Et,2),Ot=T(Dt,2),kt=g(Ot,!0),At=T(Ot,2),jt=T(At,2);t(bt),t(tt);var Mt=T(tt,2),Nt=e=>{var t=qt(),n=g(t,!0);O(()=>r(n,i(Q))),l(e,t)};c(Mt,e=>{i(Q)!==null&&e(Nt)});var Pt=T(Mt,2),Ft=k(Pt),It=e=>{var t=Jt();l(e,t)},Lt=e=>{var t=Yt(),n=g(t,!0);O(()=>r(n,i(Ie))),l(e,t)},Rt=e=>{var a=tn(),o=k(a);S(o,21,()=>i(je),e=>e.key,(e,a)=>{let o=b(()=>i(a).expandable!==null),s=b(()=>i(o)&&Je(i(a).key));var u=en(),f=k(u),p=g(f,!0),h=T(f,2),_=e=>{var t=Xt(),n=g(t,!0);O(()=>{E(t,`title`,i(a).group??``),r(n,i(a).group??``)}),l(e,t)};c(h,e=>{le().length>1&&e(_)});var v=T(h,2),y=g(v,!0),x=T(v,2),C=e=>{var t=Zt(),n=g(t,!0);O(()=>r(n,i(s)?`▾`:`▸`)),l(e,t)};c(x,e=>{i(o)&&e(C)});var w=T(x,2),D=k(w),ee=e=>{var t=L(),n=N(t);S(n,19,()=>i(a).tokens,(e,t)=>`${i(a).key}-${t}`,(e,t)=>{var n=Qt(),a=g(n,!0);O(e=>{m(n,1,e),r(a,i(t).text)},[()=>I(Xe(i(t).type))]),l(e,n)}),l(e,t)},A=e=>{var t=d();O(()=>r(t,i(a).message)),l(e,t)};c(D,e=>{i(a).tokens===null?e(A,-1):e(ee)}),t(w);var j=T(w,2),M=e=>{var n=$t();S(n,23,()=>H(i(a).expandable),(e,t)=>`${i(a).key}-json-${t}`,(e,t)=>{var n=Qt(),a=g(n,!0);O(e=>{m(n,1,e),r(a,i(t).text)},[()=>I(Xe(i(t).type))]),l(e,n)}),t(n),l(e,n)};c(j,e=>{i(s)&&i(a).expandable!==null&&e(M)}),t(u),O(()=>{m(u,1,`flex flex-wrap items-baseline gap-2 px-3 py-0.5 hover:bg-neutral-900/60 ${i(Ue)??``} ${i(o)?`cursor-pointer`:``}`),E(u,`data-level`,i(a).level??`unknown`),E(u,`data-expandable`,i(o)?`true`:void 0),E(u,`data-expanded`,i(s)?`true`:void 0),E(u,`role`,i(o)?`button`:void 0),E(u,`tabindex`,i(o)?0:void 0),E(u,`aria-expanded`,i(o)?i(s):void 0),E(u,`title`,i(o)?i(s)?`Hide the JSON in this line`:`Show this line as JSON`:void 0),E(f,`title`,i(a).timestamp),r(p,i(a).time),te(v,i(Ke)),E(v,`title`,i(a).streamName??``),r(y,i(a).streamName??``),m(w,1,`${i(We)??``} ${i(a).levelClass??``}`)}),n(`click`,u,function(...e){(i(o)?()=>Ye(i(a).key):void 0)?.apply(this,e)}),n(`keydown`,u,function(...e){(i(o)?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),Ye(i(a).key))}:void 0)?.apply(this,e)}),l(e,u)}),t(o);var s=T(o,2);{let e=b(()=>i(Ge)-4);ze(s,{label:`Resize prefix column`,get width(){return i(Se)},get min(){return _e},get max(){return ve},testId:`prefix-resizer`,onChange:e=>_(Se,e,!0),onCommit:()=>Ze(),class:`absolute inset-y-0 w-2`,get style(){return`left: ${i(e)??``}px`}})}t(a),O(()=>m(a,1,`relative min-h-full ${i(Ue)??``}`)),l(e,a)};c(Ft,e=>{p()===null||p()===``?e(It):i(je).length===0?e(Lt,1):e(Rt,-1)}),t(Pt),M(Pt,e=>_(Me,e),()=>i(Me)),t(et),O((e,t)=>{r(ot,`${e??``} shown`),r(ct,`${t??``} received`),m(pt,1,`rounded-full border px-2 py-0.5 text-[0.6875rem] font-medium ${i(Re).mode===`historic`?`border-amber-900 bg-amber-950/40 text-amber-300`:`border-neutral-800 bg-neutral-900 text-neutral-400`}`),E(pt,`title`,i(Re).title),r(mt,i(Re).label),E(Ct,`aria-pressed`,i(X)===null),m(Ct,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${i(X)===null?`border-sky-700 bg-sky-950/60 text-sky-200`:`border-neutral-800 bg-neutral-900 text-neutral-400 hover:border-neutral-700`}`),v(Tt,y()),E(Et,`aria-pressed`,i(q)),m(Et,1,`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${i(Ve)??``}`),E(Dt,`aria-pressed`,i(J)),m(Dt,1,`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${i(He)??``}`),E(Ot,`aria-pressed`,C()),r(kt,C()?`Resume`:`Pause`),E(jt,`aria-pressed`,w()),m(jt,1,`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${i(Le)??``}`)},[()=>K(i(ke).length),()=>K(R())]),n(`click`,Ct,()=>Ee(null)),n(`input`,Tt,e=>a.onFilterChange?.(e.currentTarget.value)),n(`click`,Et,Qe),n(`click`,Dt,$e),n(`click`,Ot,()=>a.onPauseToggle?.()),n(`click`,At,()=>a.onClear?.()),n(`click`,jt,()=>a.onAutoScrollToggle?.()),l(e,et),ne()}f([`click`,`input`,`keydown`]);var an=e(`<option> </option>`),on=e(`<div class="flex flex-col gap-1.5"><label class="text-[0.6875rem] font-semibold uppercase tracking-wider text-neutral-500"> </label> <select class="w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors hover:border-neutral-700 focus:border-sky-600 disabled:cursor-not-allowed disabled:opacity-50"></select></div>`);function sn(e,a){h(a,!0);let o=x(a,`regions`,3,nt),s=x(a,`value`,3,``),c=x(a,`disabled`,3,!1),u=x(a,`label`,3,`Region`),d=x(a,`id`,3,`region-select`),f=b(()=>s()!==``&&!o().includes(s())?[s(),...o()]:[...o()]);var m=on(),_=k(m),v=g(_,!0),y=T(_,2);S(y,20,()=>i(f),e=>e,(e,t)=>{var n=an(),i=g(n,!0),a={};O(()=>{r(i,t),a!==(a=t)&&(n.value=(n.__value=a)??``)}),l(e,n)}),t(y);var C;p(y),t(m),O(()=>{E(_,`for`,d()),r(v,u()),E(y,`id`,d()),y.disabled=c(),C!==(C=s())&&(y.value=(y.__value=C)??``,F(y,C))}),n(`change`,y,e=>a.onchange?.(e.currentTarget.value)),l(e,m),ne()}f([`change`]);var cn=e(`<p class="text-[0.6875rem] leading-4 text-teal-300/80" data-testid="archive-note"> </p>`),ln=e(`<div class="flex flex-col gap-1.5"><div class="flex items-center gap-1 rounded-lg border border-neutral-800 bg-neutral-900 p-0.5" role="group" aria-label="Log source"><button type="button" title="Stream from CloudWatch Logs with your AWS credentials" data-testid="source-cloudwatch">CloudWatch</button> <button type="button" data-testid="source-archive">Local archive</button></div> <!></div>`);function un(e,a){h(a,!0);let o=x(a,`source`,3,`cloudwatch`),s=x(a,`archiveAvailable`,3,!1),u=x(a,`archivePath`,3,null),d=b(()=>_t(u()));function f(e){e!==o()&&a.onChange?.(e)}var p=L(),_=N(p),v=e=>{var a=ln(),s=k(a),u=k(s),p=T(u,2);t(s);var h=T(s,2),_=e=>{var t=cn(),n=g(t,!0);O(()=>{E(t,`title`,i(d)),r(n,gt)}),l(e,t)};c(h,e=>{o()===`archive`&&e(_)}),t(a),O(()=>{E(u,`aria-pressed`,o()===`cloudwatch`),m(u,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${o()===`cloudwatch`?`border-sky-700 bg-sky-950/60 text-sky-300`:`border-transparent text-neutral-400 hover:text-neutral-200`}`),E(p,`aria-pressed`,o()===`archive`),E(p,`title`,i(d)),m(p,1,`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${o()===`archive`?`border-teal-700 bg-teal-950/60 text-teal-300`:`border-transparent text-neutral-400 hover:text-neutral-200`}`)}),n(`click`,u,()=>f(`cloudwatch`)),n(`click`,p,()=>f(`archive`)),l(e,a)};c(_,e=>{s()&&e(v)}),l(e,p),ne()}f([`click`]);function dn(e){return new EventSource(e)}function fn(e,t=``){let n=new URLSearchParams;n.set(`region`,e.region);let r=(e.groups??[]).filter(e=>e.length>0);return r.length>1?n.set(`groups`,r.join(`,`)):n.set(`group`,r[0]??e.group),e.source===`archive`&&n.set(`source`,`archive`),e.filterPattern&&n.set(`filterPattern`,e.filterPattern),e.mode===`historic`?(n.set(`mode`,`historic`),e.range&&n.set(`range`,e.range),e.from!==void 0&&e.from!==``&&n.set(`from`,String(e.from)),e.to!==void 0&&e.to!==``&&n.set(`to`,String(e.to))):e.mode===`live`&&n.set(`mode`,`live`),e.startTime!==void 0&&e.startTime!==``&&n.set(`startTime`,String(e.startTime)),e.lookback&&n.set(`lookback`,e.lookback),typeof e.poll==`number`&&Number.isFinite(e.poll)&&n.set(`poll`,String(e.poll)),`${t}/api/stream?${n.toString()}`}function pn(e){try{return JSON.parse(e)}catch{return null}}var mn=class{#e=D(`idle`);get status(){return i(this.#e)}set status(e){_(this.#e,e,!0)}#t=D(null);get lastError(){return i(this.#t)}set lastError(e){_(this.#t,e,!0)}#n=D(null);get ready(){return i(this.#n)}set ready(e){_(this.#n,e,!0)}#r=D(null);get target(){return i(this.#r)}set target(e){_(this.#r,e,!0)}#i=D([]);get lines(){return i(this.#i)}set lines(e){_(this.#i,e)}#a=D(0);get receivedCount(){return i(this.#a)}set receivedCount(e){_(this.#a,e,!0)}#o=D(0);get droppedCount(){return i(this.#o)}set droppedCount(e){_(this.#o,e,!0)}#s=D(0);get pendingCount(){return i(this.#s)}set pendingCount(e){_(this.#s,e,!0)}#c=D(!1);get paused(){return i(this.#c)}set paused(e){_(this.#c,e,!0)}#l=D(null);get lastEventAt(){return i(this.#l)}set lastEventAt(e){_(this.#l,e,!0)}#u=D(null);get endReason(){return i(this.#u)}set endReason(e){_(this.#u,e,!0)}#d;#f=null;#p=[];#m=null;#h;#g;#_;#v;#y;constructor(e={}){this.#d=new U(e.capacity??5e3),this.#h=e.createEventSource??dn,this.#g=e.reconnectDelayMs??1e3,this.#_=e.url??(e=>fn(e)),this.#v=e.schedule??((e,t)=>setTimeout(e,t)),this.#y=e.cancel??(e=>clearTimeout(e))}start(e){this.#S(),this.#E(),this.clear(),this.status=`connecting`,this.lastError=null,this.ready=null,this.endReason=null,this.target={...e},this.#b(!1)}stop(){this.#E(),this.#S(),this.target=null,this.status=`idle`}pause(){this.#d.pause(),this.paused=!0}resume(){this.#d.resume(),this.paused=!1,this.#O()}togglePause(){this.paused?this.resume():this.pause()}clear(){this.#d.clear(),this.paused=!1,this.lines=[],this.receivedCount=0,this.droppedCount=0,this.pendingCount=0}get size(){return this.#d.size}#b(e){let t=this.target;if(t===null)return;this.#S(),this.status=e?`reconnecting`:`connecting`;let n;try{n=this.#h(this.#_(t))}catch(e){this.status=`error`,this.lastError={message:e instanceof Error?e.message:String(e)};return}this.#f=n,this.#x(n,`open`,()=>{this.status=`live`,this.lastError=null}),this.#x(n,`error`,e=>this.#C(e)),this.#x(n,`ready`,e=>this.#k(e)),this.#x(n,`log`,e=>this.#A(e)),this.#x(n,`ping`,e=>this.#j(e)),this.#x(n,`end`,e=>this.#M(e))}#x(e,t,n){e.addEventListener(t,n),this.#p.push({source:e,type:t,handler:n})}#S(){for(let e of this.#p)e.source.removeEventListener(e.type,e.handler);this.#p=[],this.#f?.close(),this.#f=null}#C(e){let t=typeof e.data==`string`?e.data.trim():``;if(t===``){this.#w();return}this.lastError=pn(t)??{message:t},this.status=`error`}#w(){let e=this.#f;e!==null&&(this.status=`reconnecting`,e.readyState===2&&this.#T())}#T(){this.#m===null&&(this.#m=this.#v(()=>{this.#m=null,this.target!==null&&this.#b(!0)},this.#g))}#E(){this.#m!==null&&(this.#y(this.#m),this.#m=null)}#D(){this.lastEventAt=Date.now(),this.status!==`ended`&&(this.status=`live`)}#O(){this.lines=this.#d.toArray(),this.pendingCount=this.#d.pendingCount,this.droppedCount=this.#d.droppedCount}#k(e){let t=pn(e.data);t!==null&&(this.ready=t),this.#D()}#A(e){let t=pn(e.data),n=t!==null&&Array.isArray(t.events)?t.events:[];n.length!==0&&(this.#d.push(n),this.#O(),this.receivedCount+=n.length,this.#D())}#j(e){let t=pn(e.data);this.lastEventAt=t?.at??Date.now(),this.status!==`ended`&&(this.status=`live`)}#M(e){let t=pn(e.data);this.endReason=t?.reason??null,this.status=`ended`,this.#E(),this.#S()}},hn=e(`<!> <span data-testid="archive-source-badge" class="rounded-full border border-teal-900 bg-teal-950/60 px-2.5 py-1 text-xs font-medium text-teal-300">local archive</span>`,1),gn=e(`<span class="text-xs text-emerald-400/80">API ok</span>`),_n=e(`<p role="alert" data-testid="boot-error" class="rounded-md border border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300"> </p>`),vn=e(`<div class="flex flex-wrap items-center gap-2 text-[0.6875rem] text-neutral-500"><span data-testid="brush-window"> </span> <button type="button" data-testid="brush-clear" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Reset zoom</button></div>`),yn=e(`<div class="flex flex-wrap items-center gap-x-3 gap-y-2"><span class="text-[0.6875rem] font-semibold uppercase tracking-wider text-neutral-500">Watching</span> <span class="max-w-[22rem] truncate rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 font-mono text-xs text-neutral-200"> </span> <span class="text-xs text-neutral-500">in</span> <span class="font-mono text-xs text-neutral-300"> </span> <!> <!></div> <!> <!> <div class="flex min-h-0 min-w-0 flex-1 flex-col gap-3 lg:flex-row"><div class="flex min-h-0 w-full flex-col gap-3 rounded-lg border border-neutral-800 bg-neutral-950/60 p-3 lg:shrink-0" data-testid="sidebar"><!> <!> <!></div> <!> <div class="flex min-h-0 min-w-0 flex-1 flex-col"><!> <!> <!></div></div>`,1);function bn(e,a){h(a,!0);let o=new mn,s=D(P(z.url.searchParams.get(`region`)??``)),u=D(P(z.url.searchParams.get(`source`)===`archive`?`archive`:`cloudwatch`)),d=D(P(z.url.searchParams.get(`mode`)===`historic`?`historic`:`live`)),f=D(P(z.url.searchParams.get(`range`)??`15m`)),p=D(P(ye(z.url.searchParams.get(`from`)))),m=D(P(ye(z.url.searchParams.get(`to`)))),v=D(!1),y=D(P([...nt])),x=D(P([])),S=D(!1),C=D(null),w=D(null),A=D(null),F=D(null),I=D(null),L=D(``),R=D(!0),B=D(P(Ne(z.url.searchParams))),ie=b(()=>i(B)[0]??null),V=D(null),H=D(P([])),oe=D(!1),se=D(null),U=b(()=>i(F)?.available===!0),W=b(()=>i(F)?.path??null),le=b(()=>_t(i(W))),ue=D(0),G=D(P(Z(Y.defaultRem))),de=b(()=>i(ue)===0?Z(Y.defaultRem):Math.max(Z(Y.minRem),i(ue)*Y.maxVw/100)),fe=Z(Y.minRem),pe=b(()=>`width: min(${i(G)}px, ${Y.maxVw}vw)`);function me(e){try{return typeof localStorage>`u`?null:localStorage.getItem(e)}catch{return null}}function he(){try{if(typeof localStorage>`u`)return;localStorage.setItem(Ce.sidebarWidth,String(Math.round(i(G))))}catch{}}ee(()=>{ge();let e=()=>{_(ue,window.innerWidth,!0)};return e(),_(G,X(Te(me(Ce.sidebarWidth),Z(Y.defaultRem),Z(Y.minRem),window.innerWidth*Y.maxVw/100),Z(Y.minRem),Math.max(Z(Y.minRem),window.innerWidth*Y.maxVw/100)),!0),window.addEventListener(`resize`,e),()=>{o.stop(),window.removeEventListener(`resize`,e)}});async function ge(){let e=Ne(z.url.searchParams);await K(),await _e(),i(u)===`archive`&&!i(U)&&(_(u,`cloudwatch`),_(A,i(w)?.endpoint??null,!0)),i(u)===`archive`&&_(d,`historic`),await ve(i(s)),e.length>0?(_(v,i(d)===`historic`),_(B,e,!0),q(),Q(i(s),i(B))):Q(i(s),i(B))}async function _e(){try{_(F,await mt(),!0)}catch{_(F,null)}}async function K(){try{let[e,t]=await Promise.all([dt(),ft()]);e.regions.length>0&&_(y,e.regions,!0),i(s)===``&&_(s,e.defaultRegion||i(y)[0]||nt[0],!0),_(w,t,!0),_(A,t.endpoint,!0)}catch(e){_(I,`Could not reach the watch-stream API. ${Re(e)}`),i(s)===``&&_(s,nt[0],!0)}}async function ve(e){_(S,!0),_(C,null);let t=i(u),n=t===`archive`?{region:e,source:t}:{region:e};try{let r=await pt(n);if(e!==i(s)||t!==i(u))return;r.endpoint!==null&&_(A,r.endpoint,!0),_(x,r.groups,!0)}catch(n){if(e!==i(s)||t!==i(u))return;_(x,[],!0),_(C,bt(e,n),!0)}finally{e===i(s)&&t===i(u)&&_(S,!1)}}function ye(e){if(e===null||e.trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function be(){return i(d)===`live`&&i(u)!==`archive`?{mode:`live`}:i(f)===``&&i(p)!==null&&i(m)!==null?{mode:`historic`,from:i(p),to:i(m)}:{mode:`historic`,range:i(f)===``?`15m`:i(f)}}function xe(){let e=be(),[t,...n]=i(B),r={region:i(s),group:t??``,groups:[...i(B)],...e};return i(u)===`archive`&&(r.source=`archive`),r}function q(){if(i(s)===``||i(B).length===0){o.stop();return}_(v,i(d)===`historic`),o.start(xe()),Ie()}function J(e){i(s)!==``&&e!==``&&(_(B,[e],!0),Q(i(s),i(B)),q())}function we(e){if(i(s)!==``&&e!==``){if(_(B,i(B).includes(e)?i(B).filter(t=>t!==e):[...i(B),e],!0),Q(i(s),i(B)),i(B).length===0){o.stop(),_(H,[],!0);return}q()}}function Ee(e){(i(u)!==`archive`||e.mode!==`live`)&&(_(d,e.mode,!0),_(f,e.range,!0),_(p,e.from,!0),_(m,e.to,!0),Q(i(s),i(B)),i(B).length!==0&&(_(v,e.mode===`historic`),o.start(xe()),Ie()))}function De(e){if(e===null)return;let t=Fe();if(!ae(e,t,Pe(t.from,t.to))){i(se)?.reset();return}Ee({mode:`historic`,range:``,from:e.from,to:e.to})}function Oe(){i(se)?.reset(),Ee({mode:`historic`,range:i(f)===``?`15m`:i(f),from:null,to:null})}function ke(e){e!==i(u)&&(e!==`archive`||i(U))&&(_(u,e,!0),e===`archive`&&i(d)!==`historic`&&(_(d,`historic`),i(f)===``&&(_(f,`15m`),_(p,null),_(m,null))),i(B).length>0&&(_(v,i(d)===`historic`),o.start(xe())),_(x,[],!0),Q(i(s),i(B)),ve(i(s)),Ie())}async function Ae(){await _e(),!(i(u)!==`archive`||i(U))&&(_(u,`cloudwatch`),i(B).length>0&&o.start(xe()),_(x,[],!0),Q(i(s),i(B)),ve(i(s)),Ie())}function je(e){e!==``&&e!==i(s)&&(_(s,e,!0),o.stop(),_(x,[],!0),_(B,[],!0),_(H,[],!0),Q(e,[]),ve(e))}function Me(){ve(i(s))}function Q(e,t){let n=new URL(z.url);e===``?n.searchParams.delete(`region`):n.searchParams.set(`region`,e),i(u)===`archive`?n.searchParams.set(`source`,`archive`):n.searchParams.delete(`source`),n.searchParams.delete(`group`),n.searchParams.delete(`groups`);let r=t.filter(e=>e.length>0);r.length===1?n.searchParams.set(`group`,r[0]):r.length>1&&n.searchParams.set(`groups`,r.join(`,`)),i(d)===`live`?(n.searchParams.delete(`mode`),n.searchParams.delete(`range`),n.searchParams.delete(`from`),n.searchParams.delete(`to`)):(n.searchParams.set(`mode`,`historic`),n.searchParams.delete(`from`),n.searchParams.delete(`to`),n.searchParams.delete(`range`),i(f)===``&&i(p)!==null&&i(m)!==null?(n.searchParams.set(`from`,String(i(p))),n.searchParams.set(`to`,String(i(m)))):n.searchParams.set(`range`,i(f)===``?`15m`:i(f))),n.href!==z.url.href&&re(n,{})}j(()=>{(o.ready!==null||o.status===`error`)&&_(v,!1)}),j(()=>{[i(u),i(s),i(B).join(`,`),i(d),i(f),i(p)??``,i(m)??``,i(V)??``,o.receivedCount,o.ready?.startTime??``,o.ready?.endTime??``].join(`|`).length!==0&&Ie()}),j(()=>{o.lastError?.code===`archive-unavailable`&&Ae()});function Ne(e){let t=(e.get(`groups`)??``).split(`,`).map(e=>e.trim()).filter(e=>e.length>0);if(t.length>0)return[...new Set(t)];let n=e.get(`group`)?.trim()??``;return n.length>0?[n]:[]}function Pe(e,t){let n=Math.max(1,t-e);return[1e3,5e3,1e4,3e4,6e4,3e5,9e5,18e5].find(e=>n/e<=90)??36e5}function Fe(){if(i(d)===`historic`){let e=i(m)??o.ready?.endTime??Date.now(),t=i(p)??o.ready?.startTime??e-9e5;return{from:Math.min(t,e-1e3),to:e}}let e=Date.now();return{from:e-9e5,to:e}}async function Ie(){if(i(B).length===0||i(s)===``){_(H,[],!0);return}let{from:e,to:t}=Fe();if(i(u)!==`archive`){_(H,ce(o.lines,{from:e,to:t,bucketMs:Pe(e,t),level:i(V),fallbackGroup:i(ie)??``}),!0);return}_(oe,!0);try{let n=await ct({region:i(s),groups:i(B),from:e,to:t,levels:i(V)===null?[]:[i(V)]});_(H,n.points,!0)}catch{_(H,[],!0)}finally{_(oe,!1)}}function Re(e){return e instanceof Error&&e.message!==``?e.message:String(e)}var Be=yn(),Ve=N(Be),He=T(k(Ve),2),Ue=g(He,!0),We=T(He,4),Ge=g(We,!0),Ke=T(We,2),$=e=>{var t=hn(),n=N(t);Se(n,{endpoint:null,credentials:null});var r=T(n,2);O(()=>E(r,`title`,i(le))),l(e,t)},qe=e=>{{let t=b(()=>i(w)?.credentials??null);Se(e,{get endpoint(){return i(A)},get credentials(){return i(t)}})}};c(Ke,e=>{i(u)===`archive`?e($):e(qe,-1)});var Je=T(Ke,2),Ye=e=>{var t=gn();l(e,t)};c(Je,e=>{i(w)!==null&&i(w).ok&&e(Ye)}),t(Ve);var Xe=T(Ve,2),Ze=e=>{var t=_n(),n=g(t,!0);O(()=>r(n,i(I))),l(e,t)};c(Xe,e=>{i(I)!==null&&e(Ze)});var Qe=T(Xe,2);{let e=b(()=>i(ie)===null),t=b(()=>i(u)===`archive`);tt(Qe,{get mode(){return i(d)},get range(){return i(f)},get from(){return i(p)},get to(){return i(m)},get loading(){return i(v)},get disabled(){return i(e)},get liveDisabled(){return i(t)},onApply:Ee})}var $e=T(Qe,2),et=k($e),rt=k(et);un(rt,{get source(){return i(u)},get archiveAvailable(){return i(U)},get archivePath(){return i(W)},onChange:ke});var it=T(rt,2);sn(it,{get regions(){return i(y)},get value(){return i(s)},onchange:je}),Lt(T(it,2),{get groups(){return i(x)},get source(){return i(u)},get region(){return i(s)},get selected(){return i(B)},get loading(){return i(S)},get error(){return i(C)},onSelect:J,onToggle:we,onRefresh:Me}),t(et);var at=T(et,2);ze(at,{label:`Resize group list`,get width(){return i(G)},get min(){return fe},get max(){return i(de)},testId:`sidebar-resizer`,onChange:e=>_(G,e,!0),onCommit:()=>he(),class:`hidden lg:block lg:w-2`});var ot=T(at,2),st=k(ot);{let e=b(()=>Fe().from),t=b(()=>Fe().to),n=b(()=>Pe(Fe().from,Fe().to));M(Le(st,{get points(){return i(H)},get from(){return i(e)},get to(){return i(t)},get bucketMs(){return i(n)},get groups(){return i(B)},get loading(){return i(oe)},onBrush:De}),e=>_(se,e,!0),()=>i(se))}var lt=T(st,2),ut=e=>{var a=vn(),o=k(a),s=g(o),c=T(o,2);t(a),O((e,t)=>r(s,`zoomed to ${e??``} – ${t??``}`),[()=>new Date(i(p)).toLocaleTimeString(),()=>new Date(i(m)).toLocaleTimeString()]),n(`click`,c,Oe),l(e,a)};c(lt,e=>{i(p)!==null&&i(m)!==null&&i(d)===`historic`&&e(ut)}),rn(T(lt,2),{get lines(){return o.lines},get status(){return o.status},get error(){return o.lastError},get mode(){return i(d)},get ready(){return o.ready},get endReason(){return o.endReason},get archivePath(){return i(W)},get region(){return i(s)},get group(){return i(ie)},get groups(){return i(B)},get level(){return i(V)},onLevelChange:e=>_(V,e,!0),get filter(){return i(L)},get paused(){return o.paused},get autoScroll(){return i(R)},get pendingCount(){return o.pendingCount},get droppedCount(){return o.droppedCount},get receivedCount(){return o.receivedCount},onFilterChange:e=>_(L,e,!0),onPauseToggle:()=>o.togglePause(),onClear:()=>o.clear(),onAutoScrollToggle:()=>_(R,!i(R))}),t(ot),t($e),O(()=>{r(Ue,i(ie)??`no group selected`),r(Ge,i(s)===``?`resolving region…`:i(s)),te(et,i(pe))}),l(e,Be),ne()}f([`click`]);export{bn as component};
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.js-C6rz09rJ.js","sources":["../../../../.svelte-kit/output/server/chunks/archive.js"],"sourcesContent":["import { i as detectLevelWithSource, l as isLogLevel } from \"./log-buffer.js\";\nimport { mkdirSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { setTimeout } from \"node:timers/promises\";\nimport { createHash } from \"node:crypto\";\n//#region src/lib/server/archive-sql.ts\n/**\n* SQL and row mapping for the local DuckDB archive.\n*\n* DuckDB is a native dependency and is loaded lazily by `archive.ts`; everything\n* in this file is plain text and pure functions so the archive can be unit\n* tested without the driver. Column order matters: {@link ARCHIVE_INSERT_COLUMNS}\n* is the contract with {@link toArchiveParams}, and the `SELECT` in\n* {@link buildPageQuery} uses the same names as {@link rowsToPage}.\n*/\n/**\n* Statements that bring a database file up to the current schema.\n*\n* Every statement is idempotent so an existing archive can be opened by a newer\n* build without a migration step. `seq` orders events by arrival, which keeps\n* paging stable when many events share a millisecond timestamp.\n*/\nvar ARCHIVE_SCHEMA = [\n\t`CREATE SEQUENCE IF NOT EXISTS log_events_seq`,\n\t`CREATE TABLE IF NOT EXISTS log_events (\n\t\tregion VARCHAR NOT NULL,\n\t\tlog_group VARCHAR NOT NULL,\n\t\tlog_stream VARCHAR,\n\t\tevent_key VARCHAR NOT NULL,\n\t\tevent_id VARCHAR,\n\t\ttimestamp_ms BIGINT NOT NULL,\n\t\tingestion_time_ms BIGINT,\n\t\tmessage VARCHAR NOT NULL,\n\t\tlevel VARCHAR,\n\t\tlevel_source VARCHAR,\n\t\tseq BIGINT NOT NULL DEFAULT nextval('log_events_seq'),\n\t\tarchived_at TIMESTAMP NOT NULL DEFAULT now()\n\t)`,\n\t`ALTER TABLE log_events ADD COLUMN IF NOT EXISTS level VARCHAR`,\n\t`ALTER TABLE log_events ADD COLUMN IF NOT EXISTS level_source VARCHAR`,\n\t`CREATE UNIQUE INDEX IF NOT EXISTS log_events_unique ON log_events (region, log_group, event_key)`,\n\t`CREATE INDEX IF NOT EXISTS log_events_time ON log_events (region, log_group, timestamp_ms)`\n];\n/** Columns written by {@link buildInsertSql}, in binding order. */\nvar ARCHIVE_INSERT_COLUMNS = [\n\t\"region\",\n\t\"log_group\",\n\t\"log_stream\",\n\t\"event_key\",\n\t\"event_id\",\n\t\"timestamp_ms\",\n\t\"ingestion_time_ms\",\n\t\"message\",\n\t\"level\",\n\t\"level_source\"\n];\n/** Escape character used with `LIKE`/`ILIKE` so user input cannot inject wildcards. */\nvar LIKE_ESCAPE = \"\\\\\";\n/**\n* Stable identity of an event inside one log group.\n*\n* CloudWatch event ids are unique per log group and are reused as the key;\n* events without an id (floci and LocalStack omit them) get a deterministic\n* hash of timestamp, stream and message, so re-scanning the same window is\n* idempotent instead of duplicating rows.\n*/\nfunction archiveEventKey(event) {\n\tif (event.id !== null && event.id.length > 0) return event.id;\n\treturn `h:${createHash(\"sha256\").update(`${event.timestamp}\\u0000${event.streamName ?? \"\"}\\u0000${event.message}`).digest(\"hex\").slice(0, 32)}`;\n}\n/** Renders `count` placeholder rows of ten columns each. */\nfunction placeholderRows(count) {\n\tconst row = `(${ARCHIVE_INSERT_COLUMNS.map(() => \"?\").join(\", \")})`;\n\treturn Array.from({ length: count }, () => row).join(\", \");\n}\n/**\n* Builds a multi-row `INSERT OR IGNORE`, so events already archived are skipped\n* by the unique index instead of raising.\n*/\nfunction buildInsertSql(rowCount) {\n\tif (!Number.isInteger(rowCount) || rowCount < 1) throw new RangeError(`rowCount must be a positive integer, received ${String(rowCount)}`);\n\treturn `INSERT OR IGNORE INTO log_events (${ARCHIVE_INSERT_COLUMNS.join(\", \")}) VALUES ${placeholderRows(rowCount)}`;\n}\n/** Flattens events into the parameter list {@link buildInsertSql} expects. */\nfunction toArchiveParams(region, logGroup, events) {\n\tconst params = [];\n\tfor (const event of events) {\n\t\tconst detected = detectLevelWithSource(event.message);\n\t\tparams.push(region, logGroup, event.streamName ?? null, archiveEventKey(event), event.id ?? null, BigInt(Math.round(event.timestamp)), event.ingestionTime === void 0 ? null : BigInt(Math.round(event.ingestionTime)), event.message, detected.level, detected.source);\n\t}\n\treturn params;\n}\n/** Column list shared by {@link buildPageQuery} and {@link rowsToPage}. */\nvar PAGE_COLUMNS = `region, log_group, log_stream, event_key, event_id, timestamp_ms, ingestion_time_ms, message, level, level_source, seq`;\n/** Escapes `LIKE` metacharacters so a search term is matched literally. */\nfunction escapeLike(value) {\n\treturn value.replace(/[\\\\%_]/g, (match) => `${LIKE_ESCAPE}${match}`);\n}\n/**\n* Builds one keyset page of archived events.\n*\n* Ordering is `(timestamp_ms, seq)`, and the cursor compares the same tuple, so\n* pages never repeat or skip a row even when thousands of events share a\n* timestamp.\n*/\nfunction buildPageQuery(request) {\n\tconst limit = Math.max(1, Math.round(request.limit));\n\tconst groups = request.logGroups.length > 0 ? request.logGroups : [\"\"];\n\tconst where = [\n\t\t\"region = ?\",\n\t\t`log_group IN (${groups.map(() => \"?\").join(\", \")})`,\n\t\t\"timestamp_ms >= ?\",\n\t\t\"timestamp_ms <= ?\"\n\t];\n\tconst params = [\n\t\trequest.region,\n\t\t...groups,\n\t\tBigInt(Math.round(request.startTime)),\n\t\tBigInt(Math.round(request.endTime))\n\t];\n\tconst search = request.search?.trim() ?? \"\";\n\tif (search.length > 0) {\n\t\twhere.push(`message ILIKE ? ESCAPE '${LIKE_ESCAPE}'`);\n\t\tparams.push(`%${escapeLike(search)}%`);\n\t}\n\tconst prefix = request.streamPrefix?.trim() ?? \"\";\n\tif (prefix.length > 0) {\n\t\twhere.push(`log_stream LIKE ? ESCAPE '${LIKE_ESCAPE}'`);\n\t\tparams.push(`${escapeLike(prefix)}%`);\n\t}\n\tconst levels = request.levels ?? [];\n\tif (levels.length > 0) {\n\t\twhere.push(`level IN (${levels.map(() => \"?\").join(\", \")})`);\n\t\tparams.push(...levels);\n\t}\n\tconst after = request.after ?? null;\n\tif (after !== null) {\n\t\twhere.push(\"(timestamp_ms > ? OR (timestamp_ms = ? AND seq > ?))\");\n\t\tparams.push(BigInt(Math.round(after.timestamp)), BigInt(Math.round(after.timestamp)), BigInt(Math.round(after.seq)));\n\t}\n\tparams.push(BigInt(limit));\n\treturn {\n\t\tsql: `SELECT ${PAGE_COLUMNS} FROM log_events WHERE ${where.join(\" AND \")} ORDER BY timestamp_ms, seq LIMIT ?`,\n\t\tparams\n\t};\n}\n/** Converts a DuckDB value (which may be a bigint) into a JS number. */\nfunction toNumber(value) {\n\tif (typeof value === \"number\") return Number.isFinite(value) ? value : null;\n\tif (typeof value === \"bigint\") return Number(value);\n\tif (typeof value === \"string\" && value.trim().length > 0) {\n\t\tconst parsed = Number(value);\n\t\treturn Number.isFinite(parsed) ? parsed : null;\n\t}\n\treturn null;\n}\n/** Converts a nullable DuckDB string column into `string` or `null`. */\nfunction toNullableString(value) {\n\tif (typeof value === \"string\") return value.length > 0 ? value : null;\n\treturn null;\n}\n/** Reads one column from a row object, tolerating case differences. */\nfunction pick(row, column) {\n\tif (column in row) return row[column];\n\tconst upper = column.toUpperCase();\n\tif (upper in row) return row[upper];\n}\n/**\n* Maps query rows onto wire events plus the cursor of the last row.\n*\n* Rows without a usable timestamp are dropped rather than rendered as 1970.\n*/\nfunction rowsToPage(rows) {\n\tconst events = [];\n\tlet last = null;\n\tfor (const row of rows) {\n\t\tconst timestamp = toNumber(pick(row, \"timestamp_ms\"));\n\t\tconst seq = toNumber(pick(row, \"seq\"));\n\t\tif (timestamp === null || seq === null) continue;\n\t\tconst rawLevel = pick(row, \"level\");\n\t\tconst group = toNullableString(pick(row, \"log_group\"));\n\t\tconst event = {\n\t\t\tid: toNullableString(pick(row, \"event_key\")),\n\t\t\ttimestamp,\n\t\t\tmessage: typeof pick(row, \"message\") === \"string\" ? pick(row, \"message\") : \"\",\n\t\t\tlevel: isLogLevel(rawLevel) ? rawLevel : null\n\t\t};\n\t\tif (group !== null) event.group = group;\n\t\tconst streamName = toNullableString(pick(row, \"log_stream\"));\n\t\tif (streamName !== null) event.streamName = streamName;\n\t\tconst ingestionTime = toNumber(pick(row, \"ingestion_time_ms\"));\n\t\tif (ingestionTime !== null) event.ingestionTime = ingestionTime;\n\t\tevents.push(event);\n\t\tlast = {\n\t\t\ttimestamp,\n\t\t\tseq\n\t\t};\n\t}\n\treturn {\n\t\tevents,\n\t\tlast\n\t};\n}\n/** Aggregate query behind {@link ArchiveTotals}. */\nvar ARCHIVE_TOTALS_SQL = `SELECT count(*) AS rows, count(DISTINCT log_group) AS groups, count(DISTINCT region) AS regions, min(timestamp_ms) AS oldest, max(timestamp_ms) AS newest FROM log_events`;\n/** Log groups held by the archive, optionally limited to one region. */\nfunction buildGroupsQuery(region) {\n\tconst where = region === null || region.length === 0 ? \"\" : \"WHERE region = ?\";\n\treturn {\n\t\tsql: `SELECT region, log_group, count(*) AS events, min(timestamp_ms) AS oldest, max(timestamp_ms) AS newest FROM log_events ${where} GROUP BY region, log_group ORDER BY region, log_group`,\n\t\tparams: where === \"\" ? [] : [region]\n\t};\n}\n/** Maps the single row of {@link ARCHIVE_TOTALS_SQL}. */\nfunction rowToTotals(row) {\n\tif (row === void 0) return {\n\t\trows: 0,\n\t\tgroups: 0,\n\t\tregions: 0,\n\t\toldest: null,\n\t\tnewest: null\n\t};\n\treturn {\n\t\trows: toNumber(pick(row, \"rows\")) ?? 0,\n\t\tgroups: toNumber(pick(row, \"groups\")) ?? 0,\n\t\tregions: toNumber(pick(row, \"regions\")) ?? 0,\n\t\toldest: toNumber(pick(row, \"oldest\")),\n\t\tnewest: toNumber(pick(row, \"newest\"))\n\t};\n}\n/** Maps the rows of {@link buildGroupsQuery}. */\nfunction rowsToGroups(rows) {\n\tconst groups = [];\n\tfor (const row of rows) {\n\t\tconst region = pick(row, \"region\");\n\t\tconst logGroup = pick(row, \"log_group\");\n\t\tif (typeof region !== \"string\" || typeof logGroup !== \"string\") continue;\n\t\tgroups.push({\n\t\t\tregion,\n\t\t\tlogGroup,\n\t\t\tevents: toNumber(pick(row, \"events\")) ?? 0,\n\t\t\toldest: toNumber(pick(row, \"oldest\")),\n\t\t\tnewest: toNumber(pick(row, \"newest\"))\n\t\t});\n\t}\n\treturn groups;\n}\n/**\n* Builds the bucketed counts behind the chart.\n*\n* One statement returns every series. The bucket is plain integer arithmetic on\n* `timestamp_ms`, so it cannot drift with a time zone; NULL levels are reported\n* as `unknown` rather than dropped; and a level filter matches only rows that\n* carry one of the requested levels.\n*/\nfunction buildSeriesQuery(request) {\n\tconst bucketMs = Math.max(1, Math.round(request.bucketMs));\n\tconst groups = request.logGroups.length > 0 ? request.logGroups : [\"\"];\n\tconst where = [\n\t\t\"region = ?\",\n\t\t`log_group IN (${groups.map(() => \"?\").join(\", \")})`,\n\t\t\"timestamp_ms >= ?\",\n\t\t\"timestamp_ms <= ?\"\n\t];\n\tconst params = [\n\t\tBigInt(bucketMs),\n\t\tBigInt(bucketMs),\n\t\trequest.region,\n\t\t...groups,\n\t\tBigInt(Math.round(request.startTime)),\n\t\tBigInt(Math.round(request.endTime))\n\t];\n\tconst levels = request.levels ?? [];\n\tif (levels.length > 0) {\n\t\twhere.push(`level IN (${levels.map(() => \"?\").join(\", \")})`);\n\t\tparams.push(...levels);\n\t}\n\treturn {\n\t\tsql: `SELECT CAST(floor(timestamp_ms / ?) * ? AS BIGINT) AS bucket, log_group, coalesce(level, 'unknown') AS level, count(*) AS events FROM log_events WHERE ${where.join(\" AND \")} GROUP BY bucket, log_group, level ORDER BY bucket, log_group, level`,\n\t\tparams\n\t};\n}\n/** Maps the rows of {@link buildSeriesQuery} onto chart points. */\nfunction rowsToSeries(rows) {\n\tconst points = [];\n\tfor (const row of rows) {\n\t\tconst t = toNumber(pick(row, \"bucket\"));\n\t\tconst group = pick(row, \"log_group\");\n\t\tconst level = pick(row, \"level\");\n\t\tif (t === null || typeof group !== \"string\") continue;\n\t\tpoints.push({\n\t\t\tt,\n\t\t\tgroup,\n\t\t\tlevel: typeof level === \"string\" && level.length > 0 ? level : \"unknown\",\n\t\t\tevents: toNumber(pick(row, \"events\")) ?? 0\n\t\t});\n\t}\n\treturn points;\n}\n//#endregion\n//#region src/lib/server/archive.ts\n/**\n* Local DuckDB archive of the events the app has streamed.\n*\n* The driver (`@duckdb/node-api` plus its per-platform native binding) is an\n* optional dependency: it is imported lazily, on the first request that needs\n* it, and every failure is turned into an unavailable archive instead of an\n* error. The rest of the app therefore works unchanged on platforms where the\n* binding is missing.\n*\n* One process owns the file: DuckDB allows a single writer, and the SvelteKit\n* server is that writer. Statements are serialised through an internal queue so\n* a stream writing while another request reads cannot interleave on the\n* connection.\n*/\n/** Package name of the optional DuckDB driver. */\nvar DUCKDB_MODULE = \"@duckdb/node-api\";\n/** Directory name used under the platform data directory. */\nvar ARCHIVE_DIR_NAME = \"watch-tail\";\n/** File name of the archive inside {@link ARCHIVE_DIR_NAME}. */\nvar ARCHIVE_FILE_NAME = \"archive.duckdb\";\n/**\n* Imports the optional DuckDB driver.\n*\n* The specifier is held in a variable on purpose: bundlers must leave the\n* import alone so Node resolves it at run time, where a missing binding can be\n* reported as an unavailable archive rather than a build error.\n*/\nasync function loadDuckDbDriver() {\n\tconst loaded = await import(DUCKDB_MODULE);\n\tif (typeof loaded.DuckDBInstance?.create !== \"function\") throw new Error(`${DUCKDB_MODULE} did not expose DuckDBInstance.create`);\n\treturn loaded;\n}\nvar DISABLED_VALUES = /* @__PURE__ */ new Set([\n\t\"0\",\n\t\"false\",\n\t\"no\",\n\t\"off\"\n]);\n/** True when an environment value means \"off\". */\nfunction isDisabled(value) {\n\treturn value !== void 0 && DISABLED_VALUES.has(value.trim().toLowerCase());\n}\n/**\n* True when this process is a test runner.\n*\n* Vitest sets `VITEST`, and `NODE_ENV=test` covers other harnesses. Tests must\n* not append to the archive of the machine they run on, so the archive is off\n* unless a test asks for it through `WATCH_STREAM_ARCHIVE_DB` or\n* `WATCH_STREAM_ARCHIVE=on`.\n*/\nfunction isTestProcess(env) {\n\treturn env.VITEST !== void 0 || env.NODE_ENV === \"test\";\n}\n/**\n* Resolves the archive file path.\n*\n* `WATCH_STREAM_ARCHIVE_DB` wins; otherwise the file lives in the platform's\n* data directory (`XDG_DATA_HOME`, `%LOCALAPPDATA%` or\n* `~/Library/Application Support`), never in the current directory, so history\n* survives running the CLI from a different folder.\n*/\nfunction resolveArchiveConfig(env, platform = process.platform, home = homedir()) {\n\tconst path = env.WATCH_STREAM_ARCHIVE_DB?.trim() ?? \"\";\n\tconst dataDir = env.XDG_DATA_HOME?.trim() ?? (platform === \"darwin\" ? join(home, \"Library\", \"Application Support\") : platform === \"win32\" ? env.LOCALAPPDATA?.trim() ?? join(home, \"AppData\", \"Local\") : join(home, \".local\", \"share\"));\n\tconst requested = env.WATCH_STREAM_ARCHIVE?.trim() ?? \"\";\n\treturn {\n\t\tenabled: isDisabled(requested) ? false : path.length > 0 || requested.length > 0 ? true : !isTestProcess(env),\n\t\tpath: path.length > 0 ? path : join(dataDir, ARCHIVE_DIR_NAME, ARCHIVE_FILE_NAME)\n\t};\n}\n/**\n* A short, non-throwing description of an unknown failure.\n*\n* A conflicting lock is the one failure a user can act on, and DuckDB's own\n* message buries the reason in a pid and a documentation link, so it is\n* reported as what it means for this app.\n*/\nfunction describeOpenError(error, path) {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tif (/Could not set lock|Conflicting lock/i.test(message)) return `the archive file ${path} is locked by another process (another watch-tail is using it); use --db to keep a separate file`;\n\treturn message;\n}\n/** True when the failure is the exclusive file lock. */\nfunction isLockError(error) {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn /Could not set lock|Conflicting lock/i.test(message);\n}\n/**\n* One DuckDB file holding every event the app has streamed.\n*\n* `open` never throws: a missing driver, a locked file or a corrupt database all\n* produce an instance with `available === false` and the reason on `error`. The\n* read and write methods then behave as no-ops, so callers never have to guard\n* their happy path.\n*/\nvar LogArchive = class LogArchive {\n\t/** Database file this archive uses. */\n\tpath;\n\t#connection = null;\n\t#available = false;\n\t#error = null;\n\t#queue = Promise.resolve();\n\tconstructor(path) {\n\t\tthis.path = path;\n\t}\n\t/**\n\t* Opens (and creates) the archive.\n\t*\n\t* Statements are executed in order: the sequence first, then the table, then\n\t* the indexes, so an existing file from an older build is upgraded in place.\n\t*/\n\tstatic async open(options) {\n\t\tconst archive = new LogArchive(options.path);\n\t\tconst load = options.load ?? loadDuckDbDriver;\n\t\tconst ensureDir = options.ensureDir ?? ((dir) => mkdirSync(dir, { recursive: true }));\n\t\ttry {\n\t\t\tensureDir(dirname(options.path));\n\t\t\tconst driver = await load();\n\t\t\tfor (let attempt = 1;; attempt += 1) try {\n\t\t\t\tconst connection = await (await driver.DuckDBInstance.create(options.path)).connect();\n\t\t\t\tfor (const statement of ARCHIVE_SCHEMA) await connection.run(statement);\n\t\t\t\tarchive.#connection = connection;\n\t\t\t\tarchive.#available = true;\n\t\t\t\tbreak;\n\t\t\t} catch (error) {\n\t\t\t\tif (attempt >= 3 || !isLockError(error)) throw error;\n\t\t\t\tawait setTimeout(150);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tarchive.#available = false;\n\t\t\tarchive.#error = describeOpenError(error, options.path);\n\t\t}\n\t\treturn archive;\n\t}\n\t/**\n\t* An archive that is off by configuration or could not be opened.\n\t*\n\t* Every method degrades to a no-op, so callers can use one code path for\n\t* \"no DuckDB on this machine\" and \"the user asked for no archive\".\n\t*/\n\tstatic unavailable(path, error = null) {\n\t\tconst archive = new LogArchive(path);\n\t\tarchive.#available = false;\n\t\tarchive.#error = error;\n\t\treturn archive;\n\t}\n\t/** True when the archive can be read and written. */\n\tget available() {\n\t\treturn this.#available;\n\t}\n\t/** Why the archive is unavailable, or the last failure, or `null`. */\n\tget error() {\n\t\treturn this.#error;\n\t}\n\t/** Runs one task after every task queued before it. */\n\t#enqueue(task) {\n\t\tconst next = this.#queue.then(task, task);\n\t\tthis.#queue = next.then(() => void 0, () => void 0);\n\t\treturn next;\n\t}\n\t/** Runs a statement, returning the failure instead of throwing. */\n\tasync #guard(fallback, task) {\n\t\tif (this.#connection === null) return fallback;\n\t\treturn this.#enqueue(async () => {\n\t\t\ttry {\n\t\t\t\treturn await task();\n\t\t\t} catch (error) {\n\t\t\t\tthis.#error = error instanceof Error ? error.message : String(error);\n\t\t\t\treturn fallback;\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Writes one batch of streamed events.\n\t*\n\t* Batches are split into chunks of {@link ARCHIVE_INSERT_CHUNK} rows, and\n\t* `INSERT OR IGNORE` plus the unique index make a repeated scan idempotent.\n\t* Failures never propagate: a full disk must not interrupt a log stream.\n\t*/\n\tasync record(region, logGroup, events) {\n\t\tif (events.length === 0) return 0;\n\t\treturn this.#guard(0, async () => {\n\t\t\tconst connection = this.#connection;\n\t\t\tif (connection === null) return 0;\n\t\t\tlet written = 0;\n\t\t\tfor (let start = 0; start < events.length; start += 500) {\n\t\t\t\tconst chunk = events.slice(start, start + 500);\n\t\t\t\tawait connection.run(buildInsertSql(chunk.length), toArchiveParams(region, logGroup, chunk));\n\t\t\t\twritten += chunk.length;\n\t\t\t}\n\t\t\treturn written;\n\t\t});\n\t}\n\t/** Reads one page of archived events. */\n\tasync page(request) {\n\t\tconst empty = {\n\t\t\tevents: [],\n\t\t\tlast: null\n\t\t};\n\t\treturn this.#guard(empty, async () => {\n\t\t\tconst connection = this.#connection;\n\t\t\tif (connection === null) return empty;\n\t\t\tconst { sql, params } = buildPageQuery(request);\n\t\t\treturn rowsToPage((await connection.runAndReadAll(sql, params)).getRowObjects());\n\t\t});\n\t}\n\t/** Bucketed event counts for the chart, per group and level. */\n\tasync seriesQuery(request) {\n\t\treturn this.#guard([], async () => {\n\t\t\tconst connection = this.#connection;\n\t\t\tif (connection === null) return [];\n\t\t\tconst { sql, params } = buildSeriesQuery(request);\n\t\t\treturn rowsToSeries((await connection.runAndReadAll(sql, params)).getRowObjects());\n\t\t});\n\t}\n\t/** Aggregate row count and time bounds. */\n\tasync totals() {\n\t\treturn this.#guard(rowToTotals(void 0), async () => {\n\t\t\tconst connection = this.#connection;\n\t\t\tif (connection === null) return rowToTotals(void 0);\n\t\t\treturn rowToTotals((await connection.runAndReadAll(ARCHIVE_TOTALS_SQL)).getRowObjects()[0]);\n\t\t});\n\t}\n\t/** Log groups held by the archive, optionally limited to one region. */\n\tasync groups(region = null) {\n\t\treturn this.#guard([], async () => {\n\t\t\tconst connection = this.#connection;\n\t\t\tif (connection === null) return [];\n\t\t\tconst { sql, params } = buildGroupsQuery(region);\n\t\t\treturn rowsToGroups((await connection.runAndReadAll(sql, params)).getRowObjects());\n\t\t});\n\t}\n\t/** Status for `GET /api/archive`, including the file size on disk. */\n\tasync status() {\n\t\tconst totals = await this.totals();\n\t\tlet bytes = null;\n\t\tif (this.#available) try {\n\t\t\tbytes = statSync(this.path).size;\n\t\t} catch {\n\t\t\tbytes = null;\n\t\t}\n\t\treturn {\n\t\t\tpath: this.path,\n\t\t\tavailable: this.#available,\n\t\t\terror: this.#error,\n\t\t\tbytes,\n\t\t\ttotals\n\t\t};\n\t}\n\t/** Closes the connection. Safe to call twice. */\n\tasync close() {\n\t\tconst connection = this.#connection;\n\t\tthis.#connection = null;\n\t\tthis.#available = false;\n\t\tif (connection?.closeSync === void 0) return;\n\t\tawait this.#enqueue(async () => {\n\t\t\tconnection.closeSync?.();\n\t\t});\n\t}\n};\n/** The archive for the running server, opened once per process. */\nvar sharedArchive = null;\n/**\n* Returns the process-wide archive for `env`, opening it on first use.\n*\n* The same file is never opened twice per process; a disabled archive\n* (`WATCH_STREAM_ARCHIVE=off`) is remembered so no driver import is attempted.\n*/\nfunction getArchive(env, load) {\n\tif (sharedArchive === null) {\n\t\tconst config = resolveArchiveConfig(env);\n\t\tsharedArchive = config.enabled ? LogArchive.open({\n\t\t\tpath: config.path,\n\t\t\t...load === void 0 ? {} : { load }\n\t\t}) : Promise.resolve(LogArchive.unavailable(config.path));\n\t}\n\treturn sharedArchive;\n}\n//#endregion\nexport { getArchive as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"level-filter.js-H_AdNbCw.js","sources":["../../../../.svelte-kit/output/server/chunks/level-filter.js"],"sourcesContent":["import { l as isLogLevel, r as detectLevel } from \"./log-buffer.js\";\nimport { a as presetDurationMs, i as isHistoricPreset, t as HISTORIC_PRESETS } from \"./time-range.js\";\n//#region src/lib/server/filter.ts\n/** Default lookback window when neither `startTime` nor `lookback` is usable. */\nvar DEFAULT_LOOKBACK_MS = 3e5;\n/** CloudWatch Logs rejects `startTime` older than 14 days. */\nvar MAX_LOOKBACK_MS = 12096e5;\nvar DEFAULT_POLL_MS = 1e3;\nvar MIN_POLL_MS = 250;\nvar MAX_POLL_MS = 15e3;\nvar DURATION_UNITS = {\n\tms: 1,\n\ts: 1e3,\n\tm: 6e4,\n\th: 36e5,\n\td: 864e5,\n\tw: 6048e5\n};\nvar DURATION_PATTERN = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d|w)$/i;\nvar EPOCH_PATTERN = /^\\d+$/;\n/**\n* Parses a single-unit duration such as `500ms`, `30s`, `15m`, `2h`, `3d` or\n* `1w`. Returns `null` for anything invalid, negative or zero.\n*/\nfunction parseDurationMs(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst match = DURATION_PATTERN.exec(value.trim());\n\tif (match === null) return null;\n\tconst amount = Number(match[1]);\n\tconst unit = DURATION_UNITS[match[2].toLowerCase()];\n\tif (unit === void 0 || !Number.isFinite(amount)) return null;\n\tconst ms = amount * unit;\n\tif (!Number.isFinite(ms) || ms <= 0) return null;\n\treturn Math.round(ms);\n}\n/**\n* Parses a start point into epoch milliseconds.\n*\n* Accepts epoch milliseconds (`1700000000000`), a duration relative to `now`\n* (`15m`) and ISO 8601 timestamps. Returns `null` when the value is missing or\n* cannot be understood.\n*/\nfunction parseStartTime(value, now) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst duration = parseDurationMs(trimmed);\n\tif (duration !== null) return now - duration;\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/** Resolves the effective start time, clamped to the last 14 days and to `now`. */\nfunction resolveStartTime(input) {\n\tconst { now } = input;\n\tlet start = parseStartTime(input.startTime, now);\n\tif (start === null) start = now - (parseDurationMs(input.lookback ?? \"\") ?? DEFAULT_LOOKBACK_MS);\n\tif (start > now) start = now;\n\tconst maxLookback = input.maxLookbackMs === void 0 ? MAX_LOOKBACK_MS : input.maxLookbackMs;\n\tif (maxLookback !== null) {\n\t\tconst oldestAllowed = now - maxLookback;\n\t\tif (start < oldestAllowed) start = oldestAllowed;\n\t}\n\treturn Math.round(start);\n}\n/** Parses a poll interval in milliseconds, defaulting to 1000 and clamped to 250..15000. */\nfunction clampPollMs(value) {\n\tif (typeof value !== \"string\") return DEFAULT_POLL_MS;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return DEFAULT_POLL_MS;\n\tconst parsed = Number(trimmed);\n\tif (!Number.isFinite(parsed)) return DEFAULT_POLL_MS;\n\treturn Math.min(Math.max(Math.round(parsed), MIN_POLL_MS), MAX_POLL_MS);\n}\n/** Default historic window when neither `range` nor `from`/`to` is given. */\nvar DEFAULT_HISTORIC_PRESET = \"15m\";\n/** Parses the `mode` parameter; `null` for an unrecognised value. */\nfunction parseMode(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim().toLowerCase();\n\tif (trimmed === \"live\" || trimmed === \"historic\") return trimmed;\n\treturn null;\n}\n/**\n* Parses an absolute instant: epoch milliseconds or an ISO 8601 timestamp.\n*\n* Relative durations are deliberately rejected here so an end bound can never\n* move with the clock.\n*/\nfunction parseInstant(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/**\n* Clamps a window to what CloudWatch Logs can return: 14 days back, ending now.\n*\n* Returns `null` when the requested window ends before the retention floor, so\n* a request for month-old data fails loudly instead of returning a stub window.\n*/\nfunction clampWindow(start, end, now, maxLookbackMs = MAX_LOOKBACK_MS) {\n\tif (maxLookbackMs === null) {\n\t\tconst clampedEnd = Math.max(end, start + 1);\n\t\treturn {\n\t\t\tstart: Math.round(start),\n\t\t\tend: Math.round(clampedEnd),\n\t\t\tclamped: false\n\t\t};\n\t}\n\tconst oldest = now - maxLookbackMs;\n\tif (end <= oldest) return null;\n\tconst clampedStart = Math.min(Math.max(start, oldest), now);\n\tconst clampedEnd = Math.min(Math.max(end, clampedStart + 1), now);\n\treturn {\n\t\tstart: Math.round(clampedStart),\n\t\tend: Math.round(clampedEnd),\n\t\tclamped: clampedStart !== Math.round(start) || clampedEnd !== Math.round(end)\n\t};\n}\n/**\n* Resolves the request window into a start time plus, for historic mode, an end\n* time.\n*\n* Historic windows come from a preset (`range=24h`), from explicit bounds\n* (`from`/`to`, epoch ms or ISO 8601) or, when neither is given, from the\n* smallest preset. Windows are clamped to the last 14 days and to `now` so the\n* request can never ask CloudWatch for data it will not return.\n*/\nfunction resolveWindow(input, options = {}) {\n\tconst maxLookbackMs = options.maxLookbackMs === void 0 ? MAX_LOOKBACK_MS : options.maxLookbackMs;\n\tconst { now } = input;\n\tconst requestedMode = input.mode === null || input.mode === void 0 ? \"live\" : input.mode.trim();\n\tconst mode = requestedMode === \"\" ? \"live\" : parseMode(requestedMode);\n\tif (mode === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-mode\",\n\t\tmessage: \"Invalid mode: expected \\\"live\\\" or \\\"historic\\\"\"\n\t};\n\tif (mode === \"live\") return {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: resolveStartTime({\n\t\t\tstartTime: input.startTime,\n\t\t\tlookback: input.lookback,\n\t\t\tnow,\n\t\t\tmaxLookbackMs\n\t\t}),\n\t\tendTime: null,\n\t\tpreset: null,\n\t\tclamped: false\n\t};\n\tconst from = input.from?.trim() ?? \"\";\n\tconst to = input.to?.trim() ?? \"\";\n\tif (from.length > 0 || to.length > 0) {\n\t\tif (from.length === 0 || to.length === 0) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"A custom window needs both \\\"from\\\" and \\\"to\\\"\"\n\t\t};\n\t\tconst parsedFrom = parseStartTime(from, now);\n\t\tconst parsedTo = parseInstant(to);\n\t\tif (parsedFrom === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: `Invalid \"from\": expected epoch milliseconds, a duration such as 3h, or an ISO 8601 timestamp`\n\t\t};\n\t\tif (parsedTo === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: \"Invalid \\\"to\\\": expected epoch milliseconds or an ISO 8601 timestamp\"\n\t\t};\n\t\tif (parsedTo <= parsedFrom) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"The end of the window must be after its start\"\n\t\t};\n\t\tconst clamped = clampWindow(parsedFrom, parsedTo, now, maxLookbackMs);\n\t\tif (clamped === null || clamped.end <= clamped.start) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: maxLookbackMs === null ? \"The end of the window must be after its start\" : \"The requested window is outside the 14 days CloudWatch Logs keeps\"\n\t\t};\n\t\treturn {\n\t\t\tok: true,\n\t\t\tmode,\n\t\t\tstartTime: clamped.start,\n\t\t\tendTime: clamped.end,\n\t\t\tpreset: null,\n\t\t\tclamped: clamped.clamped\n\t\t};\n\t}\n\tconst requestedRange = input.range?.trim() ?? \"\";\n\tconst preset = requestedRange === \"\" ? DEFAULT_HISTORIC_PRESET : isHistoricPreset(requestedRange) ? requestedRange : null;\n\tif (preset === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-range\",\n\t\tmessage: `Invalid range: expected one of ${HISTORIC_PRESETS.join(\", \")} or an explicit from/to window`\n\t};\n\tconst end = Math.round(now);\n\treturn {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: Math.round(now - presetDurationMs(preset)),\n\t\tendTime: end,\n\t\tpreset,\n\t\tclamped: false\n\t};\n}\n/** Message used when a request names no group at all. */\nvar GROUP_PARAM_HINT = \"Query parameter \\\"group\\\" or \\\"groups\\\" is required\";\n/** Message used when a request names too many groups. */\nvar TOO_MANY_GROUPS_HINT = `Too many groups: at most 10 can be selected at once`;\n/**\n* Parses the group selection.\n*\n* `groups` may repeat the same name as `group`; duplicates are removed and the\n* order of the request is preserved, because it is the order the UI shows.\n*/\nfunction parseGroupParams(group, groups) {\n\tconst names = [];\n\tconst collect = (value) => {\n\t\tif (typeof value !== \"string\") return;\n\t\tfor (const part of value.split(\",\")) {\n\t\t\tconst name = part.trim();\n\t\t\tif (name.length === 0) continue;\n\t\t\tif (!names.includes(name)) names.push(name);\n\t\t}\n\t};\n\tcollect(group);\n\tcollect(groups);\n\tif (names.length === 0) return {\n\t\tok: false,\n\t\tcode: \"missing-group\",\n\t\tmessage: GROUP_PARAM_HINT\n\t};\n\tif (names.length > 10) return {\n\t\tok: false,\n\t\tcode: \"too-many-groups\",\n\t\tmessage: TOO_MANY_GROUPS_HINT\n\t};\n\treturn {\n\t\tok: true,\n\t\tnames\n\t};\n}\n//#endregion\n//#region src/lib/server/level-filter.ts\n/**\n* Level handling for the stream route.\n*\n* SvelteKit only allows HTTP method exports from a `+server.ts`, so the helpers\n* live here: parsing the `level` parameter, and tagging live events with the\n* level the archive will store.\n*/\n/** Message used when `level` cannot be understood, or when it is misapplied. */\nvar LEVEL_PARAM_HINT = \"Invalid level: expected one or more of error, warn, info, debug (comma separated)\";\n/**\n* Parses the `level` parameter into the levels to include.\n*\n* Returns `null` when the parameter is absent or blank (every level) and\n* `undefined` when it names something that is not a level, so the caller can\n* answer 400 instead of silently ignoring a filter the user asked for.\n*/\nfunction parseLevelParam(value) {\n\tif (value === null || value === void 0) return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tconst levels = [];\n\tfor (const part of trimmed.split(\",\")) {\n\t\tconst word = part.trim().toLowerCase();\n\t\tif (word.length === 0) continue;\n\t\tif (!isLogLevel(word)) return void 0;\n\t\tif (!levels.includes(word)) levels.push(word);\n\t}\n\treturn levels.length === 0 ? null : levels;\n}\n/**\n* Adds the detected level to events that do not carry one.\n*\n* A live CloudWatch event has no level, so the server detects it here and the UI\n* and the archive agree. An event read back from the archive already carries the\n* level that was stored - including `null` for \"no signal\" - and that value is\n* kept, because re-guessing it would contradict the database.\n*/\nfunction withLevels(events) {\n\treturn events.map((event) => event.level === void 0 ? {\n\t\t...event,\n\t\tlevel: detectLevel(event.message)\n\t} : event);\n}\n//#endregion\nexport { clampPollMs as a, parseGroupParams as i, parseLevelParam as n, parseDurationMs as o, withLevels as r, resolveWindow as s, LEVEL_PARAM_HINT as t };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"log-buffer.js-CpI7gyom.js","sources":["../../../../.svelte-kit/output/server/chunks/log-buffer.js"],"sourcesContent":["//#region src/lib/log-format.ts\n/**\n* Parses a log message that is entirely JSON.\n*\n* Only objects and arrays count: a message that happens to be `42` or `\"ok\"` is\n* left alone, and anything that does not parse is not JSON. Leading and trailing\n* whitespace is ignored.\n*/\nfunction detectJson(message) {\n\tif (typeof message !== \"string\") return null;\n\tconst trimmed = message.trim();\n\tif (trimmed.length === 0) return null;\n\tconst first = trimmed[0];\n\tif (first !== \"{\" && first !== \"[\") return null;\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\tif (parsed === null || typeof parsed !== \"object\") return null;\n\t\treturn parsed;\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Returns the text to render for a log message.\n*\n* `prettyJson` is normally true: JSON messages are re-serialised with two-space\n* indentation. With `prettyJson` false the raw message is returned unchanged,\n* which is what the viewer's JSON toggle switches to.\n*/\nfunction formatLogMessage(message, options = {}) {\n\tconst { prettyJson = true } = options;\n\tconst value = detectJson(message);\n\tif (value === null || !prettyJson) return {\n\t\ttext: message,\n\t\tisJson: value !== null,\n\t\tvalue\n\t};\n\treturn {\n\t\ttext: JSON.stringify(value, null, 2),\n\t\tisJson: true,\n\t\tvalue\n\t};\n}\nvar NUMBER_PATTERN = /^-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$/;\n/**\n* Splits pretty-printed JSON into coloured tokens.\n*\n* The concatenation of every token's `text` is always identical to the input, so\n* rendering tokens can never lose or alter a character. This is a display-only\n* scanner: it assumes well-formed JSON produced by `JSON.stringify`.\n*/\nfunction tokenizeJson(text) {\n\tconst tokens = [];\n\tlet index = 0;\n\tconst push = (type, value) => {\n\t\tif (value.length > 0) tokens.push({\n\t\t\ttype,\n\t\t\ttext: value\n\t\t});\n\t};\n\twhile (index < text.length) {\n\t\tconst char = text[index];\n\t\tif (char === \" \" || char === \"\\n\" || char === \"\t\" || char === \"\\r\") {\n\t\t\tlet end = index;\n\t\t\twhile (end < text.length && \" \\n\t\\r\".includes(text[end])) end += 1;\n\t\t\tpush(\"whitespace\", text.slice(index, end));\n\t\t\tindex = end;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"\\\"\") {\n\t\t\tlet end = index + 1;\n\t\t\twhile (end < text.length) {\n\t\t\t\tif (text[end] === \"\\\\\") {\n\t\t\t\t\tend += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (text[end] === \"\\\"\") break;\n\t\t\t\tend += 1;\n\t\t\t}\n\t\t\tconst raw = text.slice(index, Math.min(end + 1, text.length));\n\t\t\tlet lookahead = index + raw.length;\n\t\t\twhile (lookahead < text.length && \" \\n\t\\r\".includes(text[lookahead])) lookahead += 1;\n\t\t\tpush(text[lookahead] === \":\" ? \"key\" : \"string\", raw);\n\t\t\tindex += raw.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \"{\" || char === \"}\" || char === \"[\" || char === \"]\" || char === \",\" || char === \":\") {\n\t\t\tpush(\"punctuation\", char);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (text.startsWith(\"true\", index) || text.startsWith(\"false\", index)) {\n\t\t\tconst literal = text.startsWith(\"true\", index) ? \"true\" : \"false\";\n\t\t\tpush(\"boolean\", literal);\n\t\t\tindex += literal.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (text.startsWith(\"null\", index)) {\n\t\t\tpush(\"null\", \"null\");\n\t\t\tindex += 4;\n\t\t\tcontinue;\n\t\t}\n\t\tlet end = index;\n\t\twhile (end < text.length && !\"{}[],:\\\" \\n\t\\r\".includes(text[end])) end += 1;\n\t\tconst raw = text.slice(index, Math.max(end, index + 1));\n\t\tpush(NUMBER_PATTERN.test(raw) ? \"number\" : \"other\", raw);\n\t\tindex += raw.length;\n\t}\n\treturn tokens;\n}\n/**\n* Finds the first JSON object or array inside a log message.\n*\n* Whole messages are handled by {@link detectJson}; this also copes with the\n* common \"prefix then payload\" shape (`2026-01-01 INFO {\"level\":\"info\"}`), which\n* is what the viewer expands when pretty-printing is switched off.\n*\n* Strings and escapes are respected while matching brackets, so a `}` inside a\n* message value cannot end the scan early.\n*/\nfunction findJsonInMessage(message) {\n\tif (typeof message !== \"string\") return null;\n\tconst whole = detectJson(message);\n\tif (whole !== null) return whole;\n\tfor (let index = 0; index < message.length; index += 1) {\n\t\tconst opener = message[index];\n\t\tif (opener !== \"{\" && opener !== \"[\") continue;\n\t\tconst closer = opener === \"{\" ? \"}\" : \"]\";\n\t\tlet depth = 0;\n\t\tlet inString = false;\n\t\tlet escaped = false;\n\t\tfor (let scan = index; scan < message.length; scan += 1) {\n\t\t\tconst char = message[scan];\n\t\t\tif (inString) {\n\t\t\t\tif (escaped) escaped = false;\n\t\t\t\telse if (char === \"\\\\\") escaped = true;\n\t\t\t\telse if (char === \"\\\"\") inString = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === \"\\\"\") {\n\t\t\t\tinString = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === opener) depth += 1;\n\t\t\telse if (char === closer) {\n\t\t\t\tdepth -= 1;\n\t\t\t\tif (depth === 0) {\n\t\t\t\t\tconst candidate = message.slice(index, scan + 1);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst parsed = JSON.parse(candidate);\n\t\t\t\t\t\tif (parsed !== null && typeof parsed === \"object\") return parsed;\n\t\t\t\t\t} catch {}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n//#endregion\n//#region src/lib/log-buffer.ts\n/**\n* Pure client-side log storage and filtering for the watch-stream UI.\n*\n* Design decisions (kept in one place so the UI stays predictable):\n*\n* - The visible buffer is a fixed-capacity ring buffer. When it is full the oldest line is\n* dropped, so memory stays bounded while tailing a busy group.\n* - Pausing keeps the SSE connection open and keeps receiving events. Incoming events are held in\n* a bounded pending buffer instead of the visible buffer, and are flushed in arrival order when\n* the user resumes.\n*/\n/** Maximum number of lines kept in the visible client buffer. */\nvar DEFAULT_CAPACITY = 5e3;\nvar ERROR_PATTERN = /\\b(ERROR|FATAL|CRITICAL|CRIT|PANIC|EXCEPTION|TRACEBACK|SEVERE|FAILED|FAILURE)\\b/;\nvar WARN_PATTERN = /\\b(WARN|WARNING)\\b/;\nvar DEBUG_PATTERN = /\\b(DEBUG|TRACE|VERBOSE)\\b/;\n/** Payload keys checked, in order, for a level the producer declared. */\nvar LEVEL_KEYS = [\n\t\"level\",\n\t\"severity\",\n\t\"lvl\",\n\t\"logLevel\",\n\t\"log_level\"\n];\n/**\n* Declared level words mapped onto the four levels the UI knows.\n*\n* The vocabulary is deliberately small: `fatal` and `critical` are errors to\n* everyone reading a log, and collapsing them keeps the filter and the colours\n* honest instead of inventing levels nothing else understands.\n*/\nvar LEVEL_WORDS = {\n\ttrace: \"debug\",\n\tverbose: \"debug\",\n\tdebug: \"debug\",\n\tinfo: \"info\",\n\tinformation: \"info\",\n\tnotice: \"info\",\n\tnote: \"info\",\n\twarn: \"warn\",\n\twarning: \"warn\",\n\terror: \"error\",\n\terr: \"error\",\n\texception: \"error\",\n\tfatal: \"error\",\n\tcritical: \"error\",\n\tcrit: \"error\",\n\tpanic: \"error\",\n\tsevere: \"error\",\n\talert: \"error\",\n\temergency: \"error\"\n};\n/**\n* Bunyan/pino style numeric levels.\n*\n* Only exact known values are mapped: a bare number such as `{\"level\":0}` means\n* different things in different loggers, so an unknown number falls through to\n* the text heuristic instead of being guessed at.\n*/\nvar NUMERIC_LEVELS = {\n\t10: \"debug\",\n\t20: \"debug\",\n\t30: \"info\",\n\t40: \"warn\",\n\t50: \"error\",\n\t60: \"error\"\n};\n/** True when a value is one of the four known levels. */\nfunction isLogLevel(value) {\n\treturn value === \"error\" || value === \"warn\" || value === \"info\" || value === \"debug\";\n}\n/** Converts one declared JSON value into a level, or `null` when unrecognised. */\nfunction levelFromDeclared(value) {\n\tif (typeof value === \"number\" && Number.isFinite(value)) return NUMERIC_LEVELS[value] ?? null;\n\tif (typeof value !== \"string\") return null;\n\tconst word = value.trim().toLowerCase();\n\tif (word.length === 0) return null;\n\treturn LEVEL_WORDS[word] ?? null;\n}\n/**\n* Level the payload declares, when the line carries a JSON object with a known\n* level key. Whole messages and \"prefix then payload\" lines are both handled,\n* by the same parser the viewer uses to pretty-print JSON.\n*/\nfunction declaredLevel(message) {\n\tconst payload = findJsonInMessage(message);\n\tif (payload === null || typeof payload !== \"object\" || Array.isArray(payload)) return null;\n\tconst record = payload;\n\tfor (const key of LEVEL_KEYS) {\n\t\tconst level = levelFromDeclared(record[key]);\n\t\tif (level !== null) return level;\n\t}\n\treturn null;\n}\n/**\n* Detects the severity of a log line.\n*\n* A level the payload declares wins, because it is a statement of fact; the\n* text heuristic is the fallback for the many logs that declare nothing. The\n* heuristic matches level words anywhere in the line, so\n* `{\"level\":\"info\",\"msg\":\"retry after error count 0\"}` is `info`, not `error`.\n*/\nfunction detectLevelWithSource(message) {\n\tconst declared = declaredLevel(message ?? \"\");\n\tif (declared !== null) return {\n\t\tlevel: declared,\n\t\tsource: \"json\"\n\t};\n\tconst upper = (message ?? \"\").toUpperCase();\n\tif (ERROR_PATTERN.test(upper)) return {\n\t\tlevel: \"error\",\n\t\tsource: \"text\"\n\t};\n\tif (WARN_PATTERN.test(upper)) return {\n\t\tlevel: \"warn\",\n\t\tsource: \"text\"\n\t};\n\tif (DEBUG_PATTERN.test(upper)) return {\n\t\tlevel: \"debug\",\n\t\tsource: \"text\"\n\t};\n\treturn {\n\t\tlevel: null,\n\t\tsource: null\n\t};\n}\n/**\n* Guesses the severity of a log line from its text, or returns `null` when the\n* line carries no signal at all (a stack-trace continuation, for example).\n*/\nfunction detectLevel(message) {\n\treturn detectLevelWithSource(message).level;\n}\n/** Level of an event: what the server detected, else a guess from the text. */\nfunction effectiveLevel(event) {\n\treturn event.level !== void 0 ? event.level : detectLevel(event.message);\n}\n/** True when an event passes a level filter; a `null` filter accepts every line. */\nfunction matchesLevel(event, level) {\n\treturn level === null || effectiveLevel(event) === level;\n}\n/** Filters events by level, keeping every line when `level` is `null`. */\nfunction filterByLevel(events, level) {\n\tif (level === null) return events.slice();\n\treturn events.filter((event) => matchesLevel(event, level));\n}\n/** Tailwind text colour class for a severity; an unknown level stays neutral. */\nfunction levelColorClass(level) {\n\tswitch (level) {\n\t\tcase \"error\": return \"text-red-400\";\n\t\tcase \"warn\": return \"text-amber-300\";\n\t\tcase \"debug\": return \"text-neutral-500\";\n\t\tdefault: return \"text-neutral-200\";\n\t}\n}\n/** Stable key for rendering a log line, since event ids can repeat or be missing. */\nfunction eventKey(event, index) {\n\treturn `${event.id ?? \"no-id\"}:${event.timestamp}:${index}`;\n}\n/** Case-insensitive substring match over the message and the stream name. */\nfunction matchesFilter(event, query) {\n\tconst needle = (query ?? \"\").trim().toLowerCase();\n\tif (needle === \"\") return true;\n\treturn `${event.message ?? \"\"} ${event.streamName ?? \"\"}`.toLowerCase().includes(needle);\n}\n/** Returns the events matching `query`, in arrival order. */\nfunction filterEvents(events, query) {\n\tif ((query ?? \"\").trim() === \"\") return events.slice();\n\treturn events.filter((event) => matchesFilter(event, query));\n}\n/** Creates an array of `length` undefined slots. */\nfunction emptySlots(length) {\n\treturn Array.from({ length });\n}\n/**\n* Fixed-capacity ring buffer that overwrites the oldest item once it is full.\n*/\nvar LogRingBuffer = class {\n\t/** Maximum number of items kept. */\n\tcapacity;\n\t#items;\n\t#start = 0;\n\t#size = 0;\n\t#dropped = 0;\n\tconstructor(capacity = DEFAULT_CAPACITY) {\n\t\tif (!Number.isInteger(capacity) || capacity <= 0) throw new RangeError(`capacity must be a positive integer, received ${capacity}`);\n\t\tthis.capacity = capacity;\n\t\tthis.#items = emptySlots(capacity);\n\t}\n\t/** Number of items currently stored. */\n\tget size() {\n\t\treturn this.#size;\n\t}\n\t/** Number of items discarded because the buffer was full. */\n\tget dropped() {\n\t\treturn this.#dropped;\n\t}\n\t/** True when the buffer holds `capacity` items. */\n\tget full() {\n\t\treturn this.#size === this.capacity;\n\t}\n\t/** Appends one item, dropping the oldest item when the buffer is full. */\n\tpush(item) {\n\t\tif (this.#size === this.capacity) {\n\t\t\tthis.#dropped += 1;\n\t\t\tthis.#start = (this.#start + 1) % this.capacity;\n\t\t\tthis.#size -= 1;\n\t\t}\n\t\tconst index = (this.#start + this.#size) % this.capacity;\n\t\tthis.#items[index] = item;\n\t\tthis.#size += 1;\n\t}\n\t/** Appends several items in order. */\n\tpushMany(items) {\n\t\tfor (const item of items) this.push(item);\n\t}\n\t/** Copies the stored items into an array ordered oldest to newest. */\n\ttoArray() {\n\t\tconst output = emptySlots(this.#size);\n\t\tfor (let offset = 0; offset < this.#size; offset += 1) output[offset] = this.#items[(this.#start + offset) % this.capacity];\n\t\treturn output;\n\t}\n\t/** Oldest stored item, or `undefined` when empty. */\n\tfirst() {\n\t\treturn this.#size === 0 ? void 0 : this.#items[this.#start];\n\t}\n\t/** Newest stored item, or `undefined` when empty. */\n\tlast() {\n\t\treturn this.#size === 0 ? void 0 : this.#items[(this.#start + this.#size - 1) % this.capacity];\n\t}\n\t/** Removes every item and resets the dropped counter. */\n\tclear() {\n\t\tthis.#items = emptySlots(this.capacity);\n\t\tthis.#start = 0;\n\t\tthis.#size = 0;\n\t\tthis.#dropped = 0;\n\t}\n};\n/**\n* Log store used by the UI: a visible ring buffer plus a pending buffer that fills up while the\n* view is paused. `push()` never drops silent data, it either appends to the visible buffer or to\n* the pending buffer; `resume()` moves the pending events into the visible buffer in order.\n*/\nvar LogStore = class {\n\tbuffer;\n\t#pending;\n\t#paused = false;\n\tconstructor(capacity = DEFAULT_CAPACITY) {\n\t\tthis.buffer = new LogRingBuffer(capacity);\n\t\tthis.#pending = new LogRingBuffer(capacity);\n\t}\n\t/** True when incoming events are buffered instead of appended to the visible buffer. */\n\tget paused() {\n\t\treturn this.#paused;\n\t}\n\t/** Number of visible lines. */\n\tget size() {\n\t\treturn this.buffer.size;\n\t}\n\t/** Number of lines held back while paused. */\n\tget pendingCount() {\n\t\treturn this.#pending.size;\n\t}\n\t/** Number of visible lines dropped because the buffer was full. */\n\tget droppedCount() {\n\t\treturn this.buffer.dropped;\n\t}\n\t/** Appends events to the visible buffer, or holds them back while paused. */\n\tpush(events) {\n\t\tif (this.#paused) {\n\t\t\tthis.#pending.pushMany(events);\n\t\t\treturn;\n\t\t}\n\t\tthis.buffer.pushMany(events);\n\t}\n\t/** Pauses or resumes appending. Resuming flushes the pending events immediately. */\n\tsetPaused(paused) {\n\t\tif (paused === this.#paused) return [];\n\t\tthis.#paused = paused;\n\t\treturn paused ? [] : this.flush();\n\t}\n\t/** Pauses appending to the visible buffer. */\n\tpause() {\n\t\tthis.#paused = true;\n\t}\n\t/** Resumes appending and returns the events flushed from the pending buffer. */\n\tresume() {\n\t\tthis.#paused = false;\n\t\treturn this.flush();\n\t}\n\t/** Moves every pending event into the visible buffer, oldest first. */\n\tflush() {\n\t\tconst flushed = this.#pending.toArray();\n\t\tthis.#pending.clear();\n\t\tthis.buffer.pushMany(flushed);\n\t\treturn flushed;\n\t}\n\t/** Copies the visible lines, oldest first. */\n\ttoArray() {\n\t\treturn this.buffer.toArray();\n\t}\n\t/** Empties the visible buffer and discards pending events. */\n\tclear() {\n\t\tthis.buffer.clear();\n\t\tthis.#pending.clear();\n\t}\n};\n//#endregion\nexport { effectiveLevel as a, filterEvents as c, findJsonInMessage as d, formatLogMessage as f, detectLevelWithSource as i, isLogLevel as l, LogStore as n, eventKey as o, tokenizeJson as p, detectLevel as r, filterByLevel as s, DEFAULT_CAPACITY as t, levelColorClass as u };\n"],"names":[],"mappings":"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"}