watch-tail 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/README.md +158 -0
  2. package/build/client/_app/immutable/assets/0.Dfts6BC4.css +2 -0
  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/assets/BrushContext.2tkUc39H.css +1 -0
  6. package/build/client/_app/immutable/assets/BrushContext.2tkUc39H.css.br +0 -0
  7. package/build/client/_app/immutable/assets/BrushContext.2tkUc39H.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css +1 -0
  9. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css.br +0 -0
  10. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css +1 -0
  12. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css.br +1 -0
  13. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css +1 -0
  15. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css.br +0 -0
  16. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css +1 -0
  18. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.br +0 -0
  19. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css +1 -0
  21. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css.br +0 -0
  22. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css +1 -0
  24. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css.br +0 -0
  25. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css +1 -0
  27. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css.br +0 -0
  28. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css +1 -0
  30. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css.br +0 -0
  31. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css +1 -0
  33. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css.br +0 -0
  34. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css.gz +0 -0
  35. package/build/client/_app/immutable/chunks/Amq8zxdJ.js +1 -0
  36. package/build/client/_app/immutable/chunks/Amq8zxdJ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/Amq8zxdJ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/B3p3umIY.js +1 -0
  39. package/build/client/_app/immutable/chunks/B3p3umIY.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/B3p3umIY.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/B43Eeyih.js +1 -0
  42. package/build/client/_app/immutable/chunks/B43Eeyih.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/B43Eeyih.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/B5q6rkQ-.js +1 -0
  45. package/build/client/_app/immutable/chunks/B5q6rkQ-.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/B5q6rkQ-.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BAynhd7i.js +1 -0
  48. package/build/client/_app/immutable/chunks/BAynhd7i.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BAynhd7i.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BDlvDAqe.js +1 -0
  51. package/build/client/_app/immutable/chunks/BDlvDAqe.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BDlvDAqe.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BGmgUZMc.js +10 -0
  54. package/build/client/_app/immutable/chunks/BGmgUZMc.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BGmgUZMc.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BJpWBbAS.js +1 -0
  57. package/build/client/_app/immutable/chunks/BJpWBbAS.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BJpWBbAS.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/BOT2hFMn.js +1 -0
  60. package/build/client/_app/immutable/chunks/BOT2hFMn.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/BOT2hFMn.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/BR2LaRms.js +1 -0
  63. package/build/client/_app/immutable/chunks/BR2LaRms.js.br +1 -0
  64. package/build/client/_app/immutable/chunks/BR2LaRms.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/BZFYtRPj.js +1 -0
  66. package/build/client/_app/immutable/chunks/BZFYtRPj.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/BZFYtRPj.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/BjxZ_neZ.js +5 -0
  69. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/BjxZ_neZ.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/Bl052uUt.js +1 -0
  72. package/build/client/_app/immutable/chunks/Bl052uUt.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/Bl052uUt.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{Bw_9uNRP.js → BsH4MNzX.js} +1 -1
  75. package/build/client/_app/immutable/chunks/BsH4MNzX.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/BsH4MNzX.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/ByhwhtiG.js +1 -0
  78. package/build/client/_app/immutable/chunks/ByhwhtiG.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/ByhwhtiG.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/C1lycbEF.js +1 -0
  81. package/build/client/_app/immutable/chunks/C1lycbEF.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/C1lycbEF.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/C58PZtCD.js +4 -0
  84. package/build/client/_app/immutable/chunks/C58PZtCD.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/C58PZtCD.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/CCch3uox.js +1 -0
  87. package/build/client/_app/immutable/chunks/CCch3uox.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/CCch3uox.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/CEU4ihsz.js +1 -0
  90. package/build/client/_app/immutable/chunks/CEU4ihsz.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/CEU4ihsz.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/CG6rRxUy.js +2 -0
  93. package/build/client/_app/immutable/chunks/CG6rRxUy.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/CG6rRxUy.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/CM5sQDq_.js +1 -0
  96. package/build/client/_app/immutable/chunks/CM5sQDq_.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/CM5sQDq_.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/CT_NYh_-.js +1 -0
  99. package/build/client/_app/immutable/chunks/CT_NYh_-.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/CT_NYh_-.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/CZIk93qi.js +1 -0
  102. package/build/client/_app/immutable/chunks/CZIk93qi.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/CZIk93qi.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/C_aXFBl3.js +1 -0
  105. package/build/client/_app/immutable/chunks/C_aXFBl3.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/C_aXFBl3.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/CqWPu3PG.js +1 -0
  108. package/build/client/_app/immutable/chunks/CqWPu3PG.js.br +1 -0
  109. package/build/client/_app/immutable/chunks/CqWPu3PG.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/CyncJW0D.js +1 -0
  111. package/build/client/_app/immutable/chunks/CyncJW0D.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/CyncJW0D.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/D4sC5v3c.js +1 -0
  114. package/build/client/_app/immutable/chunks/D4sC5v3c.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/D4sC5v3c.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/D76YLq-2.js +1 -0
  117. package/build/client/_app/immutable/chunks/D76YLq-2.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/D76YLq-2.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/D8H_ivbb.js +1 -0
  120. package/build/client/_app/immutable/chunks/D8H_ivbb.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/D8H_ivbb.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/DU0OQtdJ.js +1 -0
  123. package/build/client/_app/immutable/chunks/DU0OQtdJ.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/DU0OQtdJ.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/Db0q5_zr.js +1 -0
  126. package/build/client/_app/immutable/chunks/Db0q5_zr.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/Db0q5_zr.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/Dfvzj6n2.js +1 -0
  129. package/build/client/_app/immutable/chunks/Dfvzj6n2.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/Dfvzj6n2.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/HclGiUj8.js +1 -0
  132. package/build/client/_app/immutable/chunks/HclGiUj8.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/HclGiUj8.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/RobXhXPM.js +1 -0
  135. package/build/client/_app/immutable/chunks/RobXhXPM.js.br +1 -0
  136. package/build/client/_app/immutable/chunks/RobXhXPM.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/Y5urAfNy.js +1 -0
  138. package/build/client/_app/immutable/chunks/Y5urAfNy.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/Y5urAfNy.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/Yk6ZJZnu.js +1 -0
  141. package/build/client/_app/immutable/chunks/Yk6ZJZnu.js.br +0 -0
  142. package/build/client/_app/immutable/chunks/Yk6ZJZnu.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/jO4fmY1N.js +1 -0
  144. package/build/client/_app/immutable/chunks/jO4fmY1N.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/jO4fmY1N.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/pqiPC7Y8.js +3 -0
  147. package/build/client/_app/immutable/chunks/pqiPC7Y8.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/pqiPC7Y8.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/snfmbqby.js +1 -0
  150. package/build/client/_app/immutable/chunks/snfmbqby.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/snfmbqby.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/wx-wtMGx.js +15 -0
  153. package/build/client/_app/immutable/chunks/wx-wtMGx.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/wx-wtMGx.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/yCfI4PCa.js +1 -0
  156. package/build/client/_app/immutable/chunks/yCfI4PCa.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/yCfI4PCa.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/zHL7lw4G.js +1 -0
  159. package/build/client/_app/immutable/chunks/zHL7lw4G.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/zHL7lw4G.js.gz +0 -0
  161. package/build/client/_app/immutable/entry/app.DFSifnlU.js +2 -0
  162. package/build/client/_app/immutable/entry/app.DFSifnlU.js.br +0 -0
  163. package/build/client/_app/immutable/entry/app.DFSifnlU.js.gz +0 -0
  164. package/build/client/_app/immutable/entry/start.2H5s3Lol.js +1 -0
  165. package/build/client/_app/immutable/entry/start.2H5s3Lol.js.br +1 -0
  166. package/build/client/_app/immutable/entry/start.2H5s3Lol.js.gz +0 -0
  167. package/build/client/_app/immutable/nodes/0.BN3NguWs.js +1 -0
  168. package/build/client/_app/immutable/nodes/0.BN3NguWs.js.br +0 -0
  169. package/build/client/_app/immutable/nodes/0.BN3NguWs.js.gz +0 -0
  170. package/build/client/_app/immutable/nodes/1.Djdw1GzA.js +1 -0
  171. package/build/client/_app/immutable/nodes/1.Djdw1GzA.js.br +0 -0
  172. package/build/client/_app/immutable/nodes/1.Djdw1GzA.js.gz +0 -0
  173. package/build/client/_app/immutable/nodes/2.CjvaJDQJ.js +4 -0
  174. package/build/client/_app/immutable/nodes/2.CjvaJDQJ.js.br +0 -0
  175. package/build/client/_app/immutable/nodes/2.CjvaJDQJ.js.gz +0 -0
  176. package/build/client/_app/version.json +1 -1
  177. package/build/client/_app/version.json.br +0 -0
  178. package/build/client/_app/version.json.gz +0 -0
  179. package/build/handler.js +9 -7
  180. package/build/handler.js.map +1 -1
  181. package/build/index.js +9 -7
  182. package/build/index.js.map +1 -1
  183. package/build/server/chunks/chunks/Arc.canvas.js-D6g58nSp.js +701 -0
  184. package/build/server/chunks/chunks/Arc.canvas.js-D6g58nSp.js.map +1 -0
  185. package/build/server/chunks/chunks/Arc.js-D78Cf_4M.js +31 -0
  186. package/build/server/chunks/chunks/Arc.js-D78Cf_4M.js.map +1 -0
  187. package/build/server/chunks/chunks/Bar.js-Cv73T8_D.js +448 -0
  188. package/build/server/chunks/chunks/Bar.js-Cv73T8_D.js.map +1 -0
  189. package/build/server/chunks/chunks/ChartAnnotations.js-Ci22VB_6.js +983 -0
  190. package/build/server/chunks/chunks/ChartAnnotations.js-Ci22VB_6.js.map +1 -0
  191. package/build/server/chunks/chunks/Circle.html.js-BjwyNRG3.js +355 -0
  192. package/build/server/chunks/chunks/Circle.html.js-BjwyNRG3.js.map +1 -0
  193. package/build/server/chunks/chunks/ClipPath.canvas.js-CFTBDWVU.js +170 -0
  194. package/build/server/chunks/chunks/ClipPath.canvas.js-CFTBDWVU.js.map +1 -0
  195. package/build/server/chunks/chunks/DefaultTooltip.js-0r5rbE-1.js +352 -0
  196. package/build/server/chunks/chunks/DefaultTooltip.js-0r5rbE-1.js.map +1 -0
  197. package/build/server/chunks/chunks/EventScatter.js-D3Jaw_Cw.js +7308 -0
  198. package/build/server/chunks/chunks/EventScatter.js-D3Jaw_Cw.js.map +1 -0
  199. package/build/server/chunks/chunks/Labels.js-DpagpV6d.js +497 -0
  200. package/build/server/chunks/chunks/Labels.js-DpagpV6d.js.map +1 -0
  201. package/build/server/chunks/chunks/Legend.js-BOpwpe5s.js +343 -0
  202. package/build/server/chunks/chunks/Legend.js-BOpwpe5s.js.map +1 -0
  203. package/build/server/chunks/chunks/Line.html.js-BM5tR11G.js +423 -0
  204. package/build/server/chunks/chunks/Line.html.js-BM5tR11G.js.map +1 -0
  205. package/build/server/chunks/chunks/Link.canvas.js-P8ySzEAw.js +756 -0
  206. package/build/server/chunks/chunks/Link.canvas.js-P8ySzEAw.js.map +1 -0
  207. package/build/server/chunks/chunks/Path.canvas.js-DNAtnEBt.js +1259 -0
  208. package/build/server/chunks/chunks/Path.canvas.js-DNAtnEBt.js.map +1 -0
  209. package/build/server/chunks/chunks/Points.html.js-CLbHD6OP.js +228 -0
  210. package/build/server/chunks/chunks/Points.html.js-CLbHD6OP.js.map +1 -0
  211. package/build/server/chunks/chunks/Points.js-e6g0Re6H.js +14 -0
  212. package/build/server/chunks/chunks/Points.js-e6g0Re6H.js.map +1 -0
  213. package/build/server/chunks/chunks/Points2.js-BMGdkzTE.js +25 -0
  214. package/build/server/chunks/chunks/Points2.js-BMGdkzTE.js.map +1 -0
  215. package/build/server/chunks/chunks/Rect.html.js-Q3UvRwNn.js +547 -0
  216. package/build/server/chunks/chunks/Rect.html.js-Q3UvRwNn.js.map +1 -0
  217. package/build/server/chunks/chunks/Spline.js-BuZPz2PJ.js +516 -0
  218. package/build/server/chunks/chunks/Spline.js-BuZPz2PJ.js.map +1 -0
  219. package/build/server/chunks/chunks/Text.html.js-C8xO5Nz6.js +847 -0
  220. package/build/server/chunks/chunks/Text.html.js-C8xO5Nz6.js.map +1 -0
  221. package/build/server/chunks/chunks/TooltipItem.js-T0cKLjLu.js +314 -0
  222. package/build/server/chunks/chunks/TooltipItem.js-T0cKLjLu.js.map +1 -0
  223. package/build/server/chunks/chunks/Voronoi.js-DevTsXQE.js +2052 -0
  224. package/build/server/chunks/chunks/Voronoi.js-DevTsXQE.js.map +1 -0
  225. package/build/server/chunks/chunks/archive.js-C2D-5edp.js +823 -0
  226. package/build/server/chunks/chunks/archive.js-C2D-5edp.js.map +1 -0
  227. package/build/server/chunks/chunks/array.js-CBp0H4t3.js +8 -0
  228. package/build/server/chunks/chunks/array.js-CBp0H4t3.js.map +1 -0
  229. package/build/server/chunks/chunks/attributes.js-BVWo7wbg.js +25 -0
  230. package/build/server/chunks/chunks/attributes.js-BVWo7wbg.js.map +1 -0
  231. package/build/server/chunks/chunks/{env2.js-DXveJt1Y.js → aws.js-DkPqAybc.js} +2 -59
  232. package/build/server/chunks/chunks/aws.js-DkPqAybc.js.map +1 -0
  233. package/build/server/chunks/chunks/band.js-C7izXphE.js +155 -0
  234. package/build/server/chunks/chunks/band.js-C7izXphE.js.map +1 -0
  235. package/build/server/chunks/chunks/centroid.js-BnGN3LH0.js +1356 -0
  236. package/build/server/chunks/chunks/centroid.js-BnGN3LH0.js.map +1 -0
  237. package/build/server/chunks/chunks/common.js-BWQB8Die.js +5760 -0
  238. package/build/server/chunks/chunks/common.js-BWQB8Die.js.map +1 -0
  239. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js +60 -0
  240. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js.map +1 -0
  241. package/build/server/chunks/chunks/{exports.js-CvFPPbaH.js → exports.js-ClPPfcHj.js} +6 -1
  242. package/build/server/chunks/chunks/exports.js-ClPPfcHj.js.map +1 -0
  243. package/build/server/chunks/chunks/group.js-DBFzWAox.js +30 -0
  244. package/build/server/chunks/chunks/group.js-DBFzWAox.js.map +1 -0
  245. package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js +248 -0
  246. package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js.map +1 -0
  247. package/build/server/chunks/chunks/index-server2.js-l0sNRNKZ.js +2 -0
  248. package/build/server/chunks/chunks/index-server2.js-l0sNRNKZ.js.map +1 -0
  249. package/build/server/chunks/chunks/{internal2.js-DZ8ZzzjN.js → internal.js-DZ8ZzzjN.js} +1 -1
  250. package/build/server/chunks/chunks/internal.js-DZ8ZzzjN.js.map +1 -0
  251. package/build/server/chunks/chunks/internal2.js-BPo5dcDi.js +188 -0
  252. package/build/server/chunks/chunks/internal2.js-BPo5dcDi.js.map +1 -0
  253. package/build/server/chunks/chunks/key.svelte.js-CWIvXc6L.js +695 -0
  254. package/build/server/chunks/chunks/key.svelte.js-CWIvXc6L.js.map +1 -0
  255. package/build/server/chunks/chunks/{internal.js-Cc3oBhL-.js → legacy-client.js-DJmDw3Zx.js} +13 -439
  256. package/build/server/chunks/chunks/legacy-client.js-DJmDw3Zx.js.map +1 -0
  257. package/build/server/chunks/chunks/level-filter.js-B3o2hyWD.js +313 -0
  258. package/build/server/chunks/chunks/level-filter.js-B3o2hyWD.js.map +1 -0
  259. package/build/server/chunks/chunks/lineRadial.js-Dm0GMqo3.js +126 -0
  260. package/build/server/chunks/chunks/lineRadial.js-Dm0GMqo3.js.map +1 -0
  261. package/build/server/chunks/chunks/linear.js-CTOKrHn9.js +1046 -0
  262. package/build/server/chunks/chunks/linear.js-CTOKrHn9.js.map +1 -0
  263. package/build/server/chunks/chunks/log-buffer.js-BI_gQOls.js +587 -0
  264. package/build/server/chunks/chunks/log-buffer.js-BI_gQOls.js.map +1 -0
  265. package/build/server/chunks/chunks/math.js-BqujbaBs.js +50 -0
  266. package/build/server/chunks/chunks/math.js-BqujbaBs.js.map +1 -0
  267. package/build/server/chunks/chunks/max.js-CuS0BpRI.js +11 -0
  268. package/build/server/chunks/chunks/max.js-CuS0BpRI.js.map +1 -0
  269. package/build/server/chunks/chunks/min.js-DZWt5tPl.js +11 -0
  270. package/build/server/chunks/chunks/min.js-DZWt5tPl.js.map +1 -0
  271. package/build/server/chunks/chunks/motion.svelte.js-DCHSFMu-.js +677 -0
  272. package/build/server/chunks/chunks/motion.svelte.js-DCHSFMu-.js.map +1 -0
  273. package/build/server/chunks/chunks/occlusion.js-DJ-AdK9u.js +33 -0
  274. package/build/server/chunks/chunks/occlusion.js-DJ-AdK9u.js.map +1 -0
  275. package/build/server/chunks/chunks/path.js-BizMrlzb.js +488 -0
  276. package/build/server/chunks/chunks/path.js-BizMrlzb.js.map +1 -0
  277. package/build/server/chunks/chunks/path2.js-pquT2Kg6.js +27 -0
  278. package/build/server/chunks/chunks/path2.js-pquT2Kg6.js.map +1 -0
  279. package/build/server/chunks/chunks/pointRadial.js-Deeu1LXx.js +7 -0
  280. package/build/server/chunks/chunks/pointRadial.js-Deeu1LXx.js.map +1 -0
  281. package/build/server/chunks/chunks/rect.svelte.js-zeS7FWjB.js +187 -0
  282. package/build/server/chunks/chunks/rect.svelte.js-zeS7FWjB.js.map +1 -0
  283. package/build/server/chunks/chunks/scales.svelte.js-D_1popPi.js +276 -0
  284. package/build/server/chunks/chunks/scales.svelte.js-D_1popPi.js.map +1 -0
  285. package/build/server/chunks/chunks/series-buckets.js-BjigySff.js +290 -0
  286. package/build/server/chunks/chunks/series-buckets.js-BjigySff.js.map +1 -0
  287. package/build/server/chunks/chunks/{server.js-ByNB8uti.js → server.js-CAEBuMIH.js} +167 -2
  288. package/build/server/chunks/chunks/server.js-CAEBuMIH.js.map +1 -0
  289. package/build/server/chunks/chunks/source.js-DZEVvuho.js +21 -0
  290. package/build/server/chunks/chunks/source.js-DZEVvuho.js.map +1 -0
  291. package/build/server/chunks/chunks/{state.js-9DxsWxU-.js → state.js-DgkwfYFo.js} +5 -4
  292. package/build/server/chunks/chunks/state.js-DgkwfYFo.js.map +1 -0
  293. package/build/server/chunks/chunks/types.js-x3GyGPOz.js +11 -0
  294. package/build/server/chunks/chunks/types.js-x3GyGPOz.js.map +1 -0
  295. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-83Ch7djd.js +39 -0
  296. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-83Ch7djd.js.map +1 -0
  297. package/build/server/chunks/entries/endpoints/api/health/{_server.ts.js-BOjix7GN.js → _server.ts.js-VctnBhIJ.js} +5 -4
  298. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-VctnBhIJ.js.map +1 -0
  299. package/build/server/chunks/entries/endpoints/api/identity/{_server.ts.js-g13uvmrX.js → _server.ts.js-Dt540Sio.js} +4 -3
  300. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-Dt540Sio.js.map +1 -0
  301. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-CmHRxdZK.js → _server.ts.js-drLgUdvB.js} +57 -8
  302. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-drLgUdvB.js.map +1 -0
  303. package/build/server/chunks/entries/endpoints/api/regions/{_server.ts.js-BgUwioxp.js → _server.ts.js-CBqfN6Pg.js} +5 -4
  304. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-CBqfN6Pg.js.map +1 -0
  305. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DOvBhEDU.js +225 -0
  306. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DOvBhEDU.js.map +1 -0
  307. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-CIYo4C-0.js → _server.ts.js-BWRHawY8.js} +324 -223
  308. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-BWRHawY8.js.map +1 -0
  309. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CFonuZkV.js → error.svelte.js-CsCL5PMW.js} +7 -5
  310. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CFonuZkV.js.map → error.svelte.js-CsCL5PMW.js.map} +1 -1
  311. package/build/server/chunks/entries/pages/{_layout.svelte.js-Dzluuq12.js → _layout.svelte.js-CBQpEToy.js} +2 -2
  312. package/build/server/chunks/entries/pages/{_layout.svelte.js-Dzluuq12.js.map → _layout.svelte.js-CBQpEToy.js.map} +1 -1
  313. package/build/server/chunks/entries/pages/_page.svelte.js-qqtU0apo.js +1641 -0
  314. package/build/server/chunks/entries/pages/_page.svelte.js-qqtU0apo.js.map +1 -0
  315. package/build/server/chunks/{handler-DS32NMsJ.js → handler-DlfTB05m.js} +3 -3
  316. package/build/server/chunks/{handler-DS32NMsJ.js.map → handler-DlfTB05m.js.map} +1 -1
  317. package/build/server/chunks/{index.js-HHu-yOEK.js → index.js-BMrd9hfO.js} +6 -5
  318. package/build/server/chunks/index.js-BMrd9hfO.js.map +1 -0
  319. package/build/server/chunks/{manifest.js-BUrA7Zyr.js → manifest.js-D1kCuVe5.js} +24 -10
  320. package/build/server/chunks/manifest.js-D1kCuVe5.js.map +1 -0
  321. package/build/server/chunks/nodes/0.js-CNFDDPj5.js +9 -0
  322. package/build/server/chunks/nodes/{0.js-gSRmrAt_.js.map → 0.js-CNFDDPj5.js.map} +1 -1
  323. package/build/server/chunks/nodes/1.js-B5FPLYnf.js +9 -0
  324. package/build/server/chunks/nodes/{1.js-D68K7Ad_.js.map → 1.js-B5FPLYnf.js.map} +1 -1
  325. package/build/server/chunks/nodes/2.js-BEuxzw6b.js +9 -0
  326. package/build/server/chunks/nodes/2.js-BEuxzw6b.js.map +1 -0
  327. package/dist/cli/completions.js +6 -0
  328. package/dist/cli/index.js +131 -88
  329. package/dist/cli/options.js +28 -2
  330. package/dist/cli/preflight.js +30 -0
  331. package/dist/cli/ui.js +18 -3
  332. package/dist/lib/cli/aws.js +12 -4
  333. package/dist/lib/log-buffer.js +443 -0
  334. package/dist/lib/log-format.js +185 -0
  335. package/dist/lib/types.js +0 -4
  336. package/package.json +6 -2
  337. package/build/client/_app/immutable/assets/0.BPmQoXaO.css +0 -2
  338. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.br +0 -0
  339. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.gz +0 -0
  340. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.br +0 -0
  341. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.gz +0 -0
  342. package/build/client/_app/immutable/chunks/De_x7GQi.js +0 -1
  343. package/build/client/_app/immutable/chunks/De_x7GQi.js.br +0 -0
  344. package/build/client/_app/immutable/chunks/De_x7GQi.js.gz +0 -0
  345. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js +0 -3
  346. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js.br +0 -0
  347. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js.gz +0 -0
  348. package/build/client/_app/immutable/entry/app.Be166AxG.js +0 -2
  349. package/build/client/_app/immutable/entry/app.Be166AxG.js.br +0 -0
  350. package/build/client/_app/immutable/entry/app.Be166AxG.js.gz +0 -0
  351. package/build/client/_app/immutable/entry/start.clEDpQL9.js +0 -1
  352. package/build/client/_app/immutable/entry/start.clEDpQL9.js.br +0 -0
  353. package/build/client/_app/immutable/entry/start.clEDpQL9.js.gz +0 -0
  354. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js +0 -1
  355. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.br +0 -4
  356. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.gz +0 -0
  357. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js +0 -1
  358. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.br +0 -0
  359. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.gz +0 -0
  360. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js +0 -5
  361. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.br +0 -0
  362. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.gz +0 -0
  363. package/build/server/chunks/chunks/env2.js-DXveJt1Y.js.map +0 -1
  364. package/build/server/chunks/chunks/exports.js-CvFPPbaH.js.map +0 -1
  365. package/build/server/chunks/chunks/internal.js-Cc3oBhL-.js.map +0 -1
  366. package/build/server/chunks/chunks/internal2.js-DZ8ZzzjN.js.map +0 -1
  367. package/build/server/chunks/chunks/server.js-ByNB8uti.js.map +0 -1
  368. package/build/server/chunks/chunks/state.js-9DxsWxU-.js.map +0 -1
  369. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BOjix7GN.js.map +0 -1
  370. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-g13uvmrX.js.map +0 -1
  371. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-CmHRxdZK.js.map +0 -1
  372. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-BgUwioxp.js.map +0 -1
  373. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-CIYo4C-0.js.map +0 -1
  374. package/build/server/chunks/entries/pages/_page.svelte.js-CpwYbxbM.js +0 -1291
  375. package/build/server/chunks/entries/pages/_page.svelte.js-CpwYbxbM.js.map +0 -1
  376. package/build/server/chunks/index.js-HHu-yOEK.js.map +0 -1
  377. package/build/server/chunks/manifest.js-BUrA7Zyr.js.map +0 -1
  378. package/build/server/chunks/nodes/0.js-gSRmrAt_.js +0 -9
  379. package/build/server/chunks/nodes/1.js-D68K7Ad_.js +0 -9
  380. package/build/server/chunks/nodes/2.js-ChYsaaoC.js +0 -9
  381. package/build/server/chunks/nodes/2.js-ChYsaaoC.js.map +0 -1
@@ -10,11 +10,11 @@ return {
10
10
  assets: new Set(["robots.txt"]),
11
11
  mimeTypes: {".txt":"text/plain"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.clEDpQL9.js",app:"_app/immutable/entry/app.Be166AxG.js",imports:["_app/immutable/entry/start.clEDpQL9.js","_app/immutable/chunks/De_x7GQi.js","_app/immutable/chunks/ZAD2y5xJ.js","_app/immutable/entry/app.Be166AxG.js","_app/immutable/chunks/ZAD2y5xJ.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.2H5s3Lol.js",app:"_app/immutable/entry/app.DFSifnlU.js",imports:["_app/immutable/entry/start.2H5s3Lol.js","_app/immutable/chunks/BOT2hFMn.js","_app/immutable/chunks/pqiPC7Y8.js","_app/immutable/entry/app.DFSifnlU.js","_app/immutable/chunks/pqiPC7Y8.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
- __memo(() => import('./nodes/0.js-gSRmrAt_.js')),
16
- __memo(() => import('./nodes/1.js-D68K7Ad_.js')),
17
- __memo(() => import('./nodes/2.js-ChYsaaoC.js'))
15
+ __memo(() => import('./nodes/0.js-CNFDDPj5.js')),
16
+ __memo(() => import('./nodes/1.js-B5FPLYnf.js')),
17
+ __memo(() => import('./nodes/2.js-BEuxzw6b.js'))
18
18
  ],
19
19
  remotes: {
20
20
 
@@ -27,40 +27,54 @@ return {
27
27
  page: { layouts: [0,], errors: [1,], leaf: 2 },
28
28
  endpoint: null
29
29
  },
30
+ {
31
+ id: "/api/archive",
32
+ pattern: /^\/api\/archive\/?$/,
33
+ params: [],
34
+ page: null,
35
+ endpoint: __memo(() => import('./entries/endpoints/api/archive/_server.ts.js-83Ch7djd.js'))
36
+ },
30
37
  {
31
38
  id: "/api/health",
32
39
  pattern: /^\/api\/health\/?$/,
33
40
  params: [],
34
41
  page: null,
35
- endpoint: __memo(() => import('./entries/endpoints/api/health/_server.ts.js-BOjix7GN.js'))
42
+ endpoint: __memo(() => import('./entries/endpoints/api/health/_server.ts.js-VctnBhIJ.js'))
36
43
  },
37
44
  {
38
45
  id: "/api/identity",
39
46
  pattern: /^\/api\/identity\/?$/,
40
47
  params: [],
41
48
  page: null,
42
- endpoint: __memo(() => import('./entries/endpoints/api/identity/_server.ts.js-g13uvmrX.js'))
49
+ endpoint: __memo(() => import('./entries/endpoints/api/identity/_server.ts.js-Dt540Sio.js'))
43
50
  },
44
51
  {
45
52
  id: "/api/log-groups",
46
53
  pattern: /^\/api\/log-groups\/?$/,
47
54
  params: [],
48
55
  page: null,
49
- endpoint: __memo(() => import('./entries/endpoints/api/log-groups/_server.ts.js-CmHRxdZK.js'))
56
+ endpoint: __memo(() => import('./entries/endpoints/api/log-groups/_server.ts.js-drLgUdvB.js'))
50
57
  },
51
58
  {
52
59
  id: "/api/regions",
53
60
  pattern: /^\/api\/regions\/?$/,
54
61
  params: [],
55
62
  page: null,
56
- endpoint: __memo(() => import('./entries/endpoints/api/regions/_server.ts.js-BgUwioxp.js'))
63
+ endpoint: __memo(() => import('./entries/endpoints/api/regions/_server.ts.js-CBqfN6Pg.js'))
64
+ },
65
+ {
66
+ id: "/api/series",
67
+ pattern: /^\/api\/series\/?$/,
68
+ params: [],
69
+ page: null,
70
+ endpoint: __memo(() => import('./entries/endpoints/api/series/_server.ts.js-DOvBhEDU.js'))
57
71
  },
58
72
  {
59
73
  id: "/api/stream",
60
74
  pattern: /^\/api\/stream\/?$/,
61
75
  params: [],
62
76
  page: null,
63
- endpoint: __memo(() => import('./entries/endpoints/api/stream/_server.ts.js-CIYo4C-0.js'))
77
+ endpoint: __memo(() => import('./entries/endpoints/api/stream/_server.ts.js-BWRHawY8.js'))
64
78
  }
65
79
  ],
66
80
  prerendered_routes: new Set([]),
@@ -74,4 +88,4 @@ return {
74
88
  })();
75
89
 
76
90
  export { manifest as m };
77
- //# sourceMappingURL=manifest.js-BUrA7Zyr.js.map
91
+ //# sourceMappingURL=manifest.js-D1kCuVe5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js-D1kCuVe5.js","sources":["../../../.svelte-kit/output/server/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"robots.txt\"]),\n\tmimeTypes: {\".txt\":\"text/plain\"},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.2H5s3Lol.js\",app:\"_app/immutable/entry/app.DFSifnlU.js\",imports:[\"_app/immutable/entry/start.2H5s3Lol.js\",\"_app/immutable/chunks/BOT2hFMn.js\",\"_app/immutable/chunks/pqiPC7Y8.js\",\"_app/immutable/entry/app.DFSifnlU.js\",\"_app/immutable/chunks/pqiPC7Y8.js\",\"_app/immutable/chunks/HclGiUj8.js\",\"_app/immutable/chunks/xihTtKlq.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/archive\",\n\t\t\t\tpattern: /^\\/api\\/archive\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/archive/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/health\",\n\t\t\t\tpattern: /^\\/api\\/health\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/health/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/identity\",\n\t\t\t\tpattern: /^\\/api\\/identity\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/identity/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/log-groups\",\n\t\t\t\tpattern: /^\\/api\\/log-groups\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/log-groups/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/regions\",\n\t\t\t\tpattern: /^\\/api\\/regions\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/regions/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/series\",\n\t\t\t\tpattern: /^\\/api\\/series\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/series/_server.ts.js'))\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/api/stream\",\n\t\t\t\tpattern: /^\\/api\\/stream\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: null,\n\t\t\t\tendpoint: __memo(() => import('./entries/endpoints/api/stream/_server.ts.js'))\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n"],"names":[],"mappings":"AAAY,MAAC,QAAQ,GAAG,CAAC,MAAM;AAC/B,SAAS,MAAM,CAAC,EAAE,EAAE;AACpB,CAAC,IAAI,KAAK;AACV,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;AACtC;;AAEA,OAAO;AACP,CAAC,MAAM,EAAE,MAAM;AACf,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;AAChC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;AACjC,CAAC,CAAC,EAAE;AACJ,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,GAAG,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACza,EAAE,KAAK,EAAE;AACT,GAAG,MAAM,CAAC,MAAM,OAAO,0BAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,0BAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,0BAAc,CAAC;AACtC,GAAG;AACH,EAAE,OAAO,EAAE;AACX;AACA,GAAG;AACH,EAAE,MAAM,EAAE;AACV,GAAG;AACH,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,cAAc;AACtB,IAAI,OAAO,EAAE,qBAAqB;AAClC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,2DAA+C,CAAC;AAClF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,0DAA8C,CAAC;AACjF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,eAAe;AACvB,IAAI,OAAO,EAAE,sBAAsB;AACnC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,4DAAgD,CAAC;AACnF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,iBAAiB;AACzB,IAAI,OAAO,EAAE,wBAAwB;AACrC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,8DAAkD,CAAC;AACrF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,cAAc;AACtB,IAAI,OAAO,EAAE,qBAAqB;AAClC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,2DAA+C,CAAC;AAClF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,0DAA8C,CAAC;AACjF,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,aAAa;AACrB,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,MAAM,CAAC,MAAM,OAAO,0DAA8C,CAAC;AACjF;AACA,GAAG;AACH,EAAE,kBAAkB,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;AACjC,EAAE,QAAQ,EAAE,YAAY;AACxB;AACA,GAAG,OAAO,IAAI;AACd,EAAE,CAAC;AACH,EAAE,aAAa,EAAE;AACjB;AACA;AACA,CAAC;;"}
@@ -0,0 +1,9 @@
1
+ const index = 0;
2
+ let component_cache;
3
+ const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js-CBQpEToy.js')).default;
4
+ const imports = ["_app/immutable/nodes/0.BN3NguWs.js","_app/immutable/chunks/pqiPC7Y8.js","_app/immutable/chunks/xihTtKlq.js"];
5
+ const stylesheets = ["_app/immutable/assets/0.Dfts6BC4.css"];
6
+ const fonts = [];
7
+
8
+ export { component, fonts, imports, index, stylesheets };
9
+ //# sourceMappingURL=0.js-CNFDDPj5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"0.js-gSRmrAt_.js","sources":["../../../../.svelte-kit/output/server/nodes/0.js"],"sourcesContent":["\n\nexport const index = 0;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/0.BJ6Zdc8H.js\",\"_app/immutable/chunks/ZAD2y5xJ.js\",\"_app/immutable/chunks/xihTtKlq.js\"];\nexport const stylesheets = [\"_app/immutable/assets/0.BPmQoXaO.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,gDAAoC,CAAC,EAAE;AAClG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC;AACxH,MAAC,WAAW,GAAG,CAAC,sCAAsC;AACtD,MAAC,KAAK,GAAG;;"}
1
+ {"version":3,"file":"0.js-CNFDDPj5.js","sources":["../../../../.svelte-kit/output/server/nodes/0.js"],"sourcesContent":["\n\nexport const index = 0;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/0.BN3NguWs.js\",\"_app/immutable/chunks/pqiPC7Y8.js\",\"_app/immutable/chunks/xihTtKlq.js\"];\nexport const stylesheets = [\"_app/immutable/assets/0.Dfts6BC4.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,gDAAoC,CAAC,EAAE;AAClG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC;AACxH,MAAC,WAAW,GAAG,CAAC,sCAAsC;AACtD,MAAC,KAAK,GAAG;;"}
@@ -0,0 +1,9 @@
1
+ const index = 1;
2
+ let component_cache;
3
+ const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js-CsCL5PMW.js')).default;
4
+ const imports = ["_app/immutable/nodes/1.Djdw1GzA.js","_app/immutable/chunks/pqiPC7Y8.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BsH4MNzX.js","_app/immutable/chunks/BOT2hFMn.js"];
5
+ const stylesheets = [];
6
+ const fonts = [];
7
+
8
+ export { component, fonts, imports, index, stylesheets };
9
+ //# sourceMappingURL=1.js-B5FPLYnf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1.js-D68K7Ad_.js","sources":["../../../../.svelte-kit/output/server/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.xMNWuLLz.js\",\"_app/immutable/chunks/ZAD2y5xJ.js\",\"_app/immutable/chunks/xihTtKlq.js\",\"_app/immutable/chunks/Bw_9uNRP.js\",\"_app/immutable/chunks/De_x7GQi.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,kDAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAChM,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;"}
1
+ {"version":3,"file":"1.js-B5FPLYnf.js","sources":["../../../../.svelte-kit/output/server/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.Djdw1GzA.js\",\"_app/immutable/chunks/pqiPC7Y8.js\",\"_app/immutable/chunks/xihTtKlq.js\",\"_app/immutable/chunks/BsH4MNzX.js\",\"_app/immutable/chunks/BOT2hFMn.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,kDAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAChM,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;"}
@@ -0,0 +1,9 @@
1
+ const index = 2;
2
+ let component_cache;
3
+ const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js-qqtU0apo.js')).default;
4
+ const imports = ["_app/immutable/nodes/2.CjvaJDQJ.js","_app/immutable/chunks/pqiPC7Y8.js","_app/immutable/chunks/BOT2hFMn.js","_app/immutable/chunks/HclGiUj8.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BsH4MNzX.js","_app/immutable/chunks/BjxZ_neZ.js"];
5
+ const stylesheets = ["_app/immutable/assets/Path.B0wDzTrn.css","_app/immutable/assets/Circle.C5MKzgk2.css","_app/immutable/assets/EventScatter.DA5sZ1c0.css"];
6
+ const fonts = [];
7
+
8
+ export { component, fonts, imports, index, stylesheets };
9
+ //# sourceMappingURL=2.js-BEuxzw6b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2.js-BEuxzw6b.js","sources":["../../../../.svelte-kit/output/server/nodes/2.js"],"sourcesContent":["\n\nexport const index = 2;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/2.CjvaJDQJ.js\",\"_app/immutable/chunks/pqiPC7Y8.js\",\"_app/immutable/chunks/BOT2hFMn.js\",\"_app/immutable/chunks/HclGiUj8.js\",\"_app/immutable/chunks/xihTtKlq.js\",\"_app/immutable/chunks/BsH4MNzX.js\",\"_app/immutable/chunks/BjxZ_neZ.js\"];\nexport const stylesheets = [\"_app/immutable/assets/Path.B0wDzTrn.css\",\"_app/immutable/assets/Circle.C5MKzgk2.css\",\"_app/immutable/assets/EventScatter.DA5sZ1c0.css\"];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,8CAAkC,CAAC,EAAE;AAChG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG,CAAC,yCAAyC,CAAC,2CAA2C,CAAC,iDAAiD;AACvJ,MAAC,KAAK,GAAG;;"}
@@ -62,6 +62,12 @@ function registerCompletionSpec(profiles = []) {
62
62
  t.option('print', 'Print the environment and exit');
63
63
  t.option('list', 'List AWS profiles and exit');
64
64
  t.option('verbose', 'Log the server output');
65
+ t.option('db', 'Database file for local history', function (complete) {
66
+ complete('./logs.duckdb', 'archive in the current directory');
67
+ complete('~/watch-tail.duckdb', 'archive in your home directory');
68
+ });
69
+ t.option('archive', 'Keep a local history archive (default)');
70
+ t.option('no-archive', 'Do not keep a local history archive');
65
71
  t.option('help', 'Show help', undefined, 'h');
66
72
  t.option('version', 'Show the version', undefined, 'v');
67
73
  const complete = t.command('complete', 'Print a shell completion script');
package/dist/cli/index.js CHANGED
@@ -15,8 +15,8 @@ import { classifyCredentialFailure, describeStyle, isCredentialFailure, loginAdv
15
15
  import { handleCompletion } from "./completions.js";
16
16
  import { isLoopbackHost, parseCliArgs, usageText } from "./options.js";
17
17
  import { appRootFromHere, healthUrl, openBrowser as openBrowserDefault, startServer, stopServer, uiUrl, waitForHealth, } from "./server.js";
18
- import { isHeadless, probeCredentials as probeCredentialsDefault, readIdentity as readIdentityDefault, runLogin as runLoginDefault, shortIdentity, } from "./preflight.js";
19
- import { createUi, isInteractive } from "./ui.js";
18
+ import { describeArchive, isHeadless, probeCredentials as probeCredentialsDefault, readArchive as readArchiveDefault, readIdentity as readIdentityDefault, runLogin as runLoginDefault, shortIdentity, } from "./preflight.js";
19
+ import { PromptCancelled, createUi, isInteractive } from "./ui.js";
20
20
  /** Reads the version from the package manifest next to the app root. */
21
21
  export function readVersion(appRoot) {
22
22
  const fallback = '0.0.0';
@@ -75,6 +75,7 @@ function defaultIo() {
75
75
  probeCredentials: (input) => probeCredentialsDefault(input),
76
76
  runLogin: (command) => runLoginDefault(command),
77
77
  readIdentity: (input) => readIdentityDefault(input),
78
+ readArchive: (input) => readArchiveDefault(input),
78
79
  waitForHealth,
79
80
  startServerImpl: startServer,
80
81
  spawnImpl: spawn,
@@ -229,6 +230,7 @@ export async function run(argv, overrides = {}) {
229
230
  region,
230
231
  endpoint: options.endpoint,
231
232
  clearStaticKeys: options.profile === null && profile !== null,
233
+ archive: { enabled: options.archive, path: options.db },
232
234
  });
233
235
  if (options.print) {
234
236
  for (const line of describeChildEnv(childEnv))
@@ -267,104 +269,145 @@ export async function run(argv, overrides = {}) {
267
269
  host: options.host,
268
270
  verbose: options.verbose,
269
271
  });
270
- const ready = await io.waitForHealth(healthUrl(url), { fetchImpl: fetch });
271
- if (!ready) {
272
- ui.failSpinner(`the server did not answer on ${url}`);
273
- await stopServer(child);
274
- return 1;
275
- }
276
- ui.stopSpinner(`listening on ${url}`);
277
- // Before sending anyone to a UI that cannot load logs, check that AWS will
278
- // actually answer, and offer the login that fixes it.
279
- const assessment = await assessCredentials({
280
- options,
281
- io,
282
- ui,
283
- url,
284
- region,
285
- startProfile: profile,
286
- });
287
- if (assessment.status === 'other') {
288
- ui.warn(`could not list log groups: ${assessment.message}`);
289
- }
290
- if (assessment.status === 'credentials') {
291
- // A profile that was not in play needs the app restarted with it: that is
292
- // the only way to find out whether its credentials already work, and the
293
- // only way the browser can use it.
294
- const activeProfile = assessment.chosen === null ? null : assessment.chosen;
295
- let activeRegion = region;
296
- let failureMessage = assessment.message;
297
- let failureCode = assessment.code;
298
- if (assessment.chosen !== null) {
299
- activeRegion = resolveRunRegion({
300
- region: options.region,
301
- profile: assessment.chosen,
302
- base: io.env,
303
- configText: io.readConfigText(),
304
- });
305
- ui.info(`restarting with profile ${assessment.chosen}`);
272
+ try {
273
+ const ready = await io.waitForHealth(healthUrl(url), { fetchImpl: fetch });
274
+ if (!ready) {
275
+ ui.failSpinner(`the server did not answer on ${url}`);
306
276
  await stopServer(child);
307
- child = io.startServerImpl({
308
- appRoot: io.appRoot,
309
- env: buildChildEnv({
310
- base: baseEnv,
311
- profile: assessment.chosen,
312
- region: activeRegion,
313
- endpoint: null,
314
- }),
315
- port: options.port,
316
- host: options.host,
317
- verbose: options.verbose,
318
- });
319
- const healthy = await io.waitForHealth(healthUrl(url), { fetchImpl: fetch });
320
- if (!healthy) {
321
- ui.failSpinner(`the server did not come back up on ${url}`);
322
- await stopServer(child);
323
- return 1;
277
+ return 1;
278
+ }
279
+ ui.stopSpinner(`listening on ${url}`);
280
+ // Report where history is kept before the AWS check: it is the one thing the
281
+ // UI can offer even when credentials are not usable yet.
282
+ if (!options.archive) {
283
+ ui.info('local history off (--no-archive)');
284
+ }
285
+ else {
286
+ const archive = await io.readArchive({ baseUrl: url });
287
+ if (archive.ok) {
288
+ if (archive.status.available)
289
+ ui.info(describeArchive(archive.status));
290
+ else
291
+ ui.warn(describeArchive(archive.status));
324
292
  }
325
- // Now the question is about the chosen profile, not the ambient one.
326
- const identity = await io.readIdentity({ baseUrl: url, region: activeRegion });
327
- if (identity.ok) {
328
- ui.info(`profile ${assessment.chosen} already works (${shortIdentity(identity.identity.arn)}) - using it`);
329
- ui.outro(`${url} (Ctrl+C to stop)`);
330
- if (options.open)
331
- io.openBrowser(url);
332
- const code = await io.waitForStop(child);
333
- ui.outro('stopped');
334
- return code;
293
+ else {
294
+ ui.warn(`could not read the local history status: ${archive.message}`);
335
295
  }
336
- failureMessage = identity.message;
337
- failureCode = identity.code;
338
296
  }
339
- const outcome = await offerLogin({
297
+ // Before sending anyone to a UI that cannot load logs, check that AWS will
298
+ // actually answer, and offer the login that fixes it.
299
+ const assessment = await assessCredentials({
340
300
  options,
341
301
  io,
342
302
  ui,
343
- profile: activeProfile ?? assessment.profile,
344
- failureMessage,
345
- failureCode,
303
+ url,
304
+ region,
305
+ startProfile: profile,
346
306
  });
347
- if (outcome.login === 'succeeded') {
348
- const identity = await io.readIdentity({ baseUrl: url, region: activeRegion });
349
- if (identity.ok) {
350
- ui.info(`signed in as ${shortIdentity(identity.identity.arn)}${activeProfile === null ? '' : ` (${activeProfile})`}`);
307
+ if (assessment.status === 'other') {
308
+ ui.warn(`could not list log groups: ${assessment.message}`);
309
+ }
310
+ if (assessment.status === 'credentials') {
311
+ // A profile that was not in play needs the app restarted with it: that is
312
+ // the only way to find out whether its credentials already work, and the
313
+ // only way the browser can use it.
314
+ const activeProfile = assessment.chosen === null ? null : assessment.chosen;
315
+ let activeRegion = region;
316
+ let failureMessage = assessment.message;
317
+ let failureCode = assessment.code;
318
+ if (assessment.chosen !== null) {
319
+ activeRegion = resolveRunRegion({
320
+ region: options.region,
321
+ profile: assessment.chosen,
322
+ base: io.env,
323
+ configText: io.readConfigText(),
324
+ });
325
+ ui.info(`restarting with profile ${assessment.chosen}`);
326
+ await stopServer(child);
327
+ child = io.startServerImpl({
328
+ appRoot: io.appRoot,
329
+ env: buildChildEnv({
330
+ base: baseEnv,
331
+ profile: assessment.chosen,
332
+ region: activeRegion,
333
+ endpoint: null,
334
+ archive: { enabled: options.archive, path: options.db },
335
+ }),
336
+ port: options.port,
337
+ host: options.host,
338
+ verbose: options.verbose,
339
+ });
340
+ const healthy = await io.waitForHealth(healthUrl(url), { fetchImpl: fetch });
341
+ if (!healthy) {
342
+ ui.failSpinner(`the server did not come back up on ${url}`);
343
+ await stopServer(child);
344
+ return 1;
345
+ }
346
+ // Now the question is about the chosen profile, not the ambient one.
347
+ const identity = await io.readIdentity({ baseUrl: url, region: activeRegion });
348
+ if (identity.ok) {
349
+ ui.info(`profile ${assessment.chosen} already works (${shortIdentity(identity.identity.arn)}) - using it`);
350
+ ui.outro(`${url} (Ctrl+C to stop)`);
351
+ if (options.open)
352
+ io.openBrowser(url);
353
+ const code = await io.waitForStop(child);
354
+ ui.outro('stopped');
355
+ return code;
356
+ }
357
+ failureMessage = identity.message;
358
+ failureCode = identity.code;
351
359
  }
352
- else {
353
- ui.warn(`still failing after login: ${identity.message}`);
360
+ const outcome = await offerLogin({
361
+ options,
362
+ io,
363
+ ui,
364
+ profile: activeProfile ?? assessment.profile,
365
+ failureMessage,
366
+ failureCode,
367
+ });
368
+ if (outcome.login === 'succeeded') {
369
+ const identity = await io.readIdentity({ baseUrl: url, region: activeRegion });
370
+ if (identity.ok) {
371
+ ui.info(`signed in as ${shortIdentity(identity.identity.arn)}${activeProfile === null ? '' : ` (${activeProfile})`}`);
372
+ }
373
+ else {
374
+ ui.warn(`still failing after login: ${identity.message}`);
375
+ }
376
+ }
377
+ else if (activeProfile !== null) {
378
+ ui.info(`the app is using profile ${activeProfile}; log in, then press Refresh in the UI`);
354
379
  }
355
380
  }
356
- else if (activeProfile !== null) {
357
- ui.info(`the app is using profile ${activeProfile}; log in, then press Refresh in the UI`);
358
- }
381
+ if (options.open)
382
+ io.openBrowser(url);
383
+ ui.outro(`${url} (Ctrl+C to stop)`);
384
+ const code = await io.waitForStop(child);
385
+ ui.outro('stopped');
386
+ return code;
387
+ }
388
+ catch (error) {
389
+ if (!(error instanceof PromptCancelled))
390
+ throw error;
391
+ // Ctrl+C at a prompt is a stop, not an answer to the question: shut the
392
+ // server down and report it the same way a Ctrl+C at a running server does.
393
+ ui.outro('stopped');
394
+ return await stopServer(child);
359
395
  }
360
- if (options.open)
361
- io.openBrowser(url);
362
- ui.outro(`${url} (Ctrl+C to stop)`);
363
- const code = await io.waitForStop(child);
364
- ui.outro('stopped');
365
- return code;
366
396
  }
367
- /** Entry point used by `bin.ts`: runs the CLI and sets the exit code. */
397
+ /**
398
+ * Entry point used by `bin.ts`: runs the CLI and sets the exit code.
399
+ *
400
+ * A cancelled prompt that `run` did not convert into a stop still exits like an
401
+ * interrupted process (130) instead of throwing "the prompt was cancelled" at
402
+ * someone who just pressed Ctrl+C.
403
+ */
368
404
  export async function main(argv = process.argv.slice(2)) {
369
- process.exitCode = await run(argv);
405
+ try {
406
+ process.exitCode = await run(argv);
407
+ }
408
+ catch (error) {
409
+ if (!(error instanceof PromptCancelled))
410
+ throw error;
411
+ process.exitCode = 130;
412
+ }
370
413
  }
@@ -32,6 +32,9 @@ const KNOWN_FLAGS = new Set([
32
32
  'version',
33
33
  'v',
34
34
  'verbose',
35
+ 'archive',
36
+ 'no-archive',
37
+ 'db',
35
38
  ]);
36
39
  function asString(value) {
37
40
  if (typeof value === 'string') {
@@ -63,8 +66,19 @@ export function parseCliArgs(argv) {
63
66
  try {
64
67
  parsed = parse(words, {
65
68
  alias: { p: 'profile', r: 'region', h: 'help', v: 'version' },
66
- boolean: ['floci', 'open', 'no-open', 'print', 'list', 'help', 'version', 'verbose'],
67
- string: ['profile', 'region', 'port', 'host', 'endpoint'],
69
+ boolean: [
70
+ 'floci',
71
+ 'open',
72
+ 'no-open',
73
+ 'print',
74
+ 'list',
75
+ 'help',
76
+ 'version',
77
+ 'verbose',
78
+ 'archive',
79
+ 'no-archive',
80
+ ],
81
+ string: ['profile', 'region', 'port', 'host', 'endpoint', 'db'],
68
82
  default: { open: true },
69
83
  });
70
84
  }
@@ -102,6 +116,8 @@ export function parseCliArgs(argv) {
102
116
  help: asFlag(parsed.help),
103
117
  version: asFlag(parsed.version),
104
118
  verbose: asFlag(parsed.verbose),
119
+ archive: !asFlag(parsed['no-archive']) && parsed.archive !== false,
120
+ db: asString(parsed.db),
105
121
  complete: null,
106
122
  },
107
123
  };
@@ -120,6 +136,8 @@ export function defaults() {
120
136
  help: false,
121
137
  version: false,
122
138
  verbose: false,
139
+ archive: true,
140
+ db: null,
123
141
  complete: null,
124
142
  };
125
143
  }
@@ -153,6 +171,8 @@ Options
153
171
  --print Print the environment that would be used, then exit
154
172
  --list List the AWS profiles found on disk, then exit
155
173
  --verbose Log the server's own output
174
+ --db <path> Database file for local history (default: app data dir)
175
+ --no-archive Do not keep a local history archive
156
176
  -h, --help Show this help
157
177
  -v, --version Show the version
158
178
 
@@ -164,6 +184,12 @@ Examples
164
184
  npx watch-tail
165
185
  npx watch-tail --profile my-profile --region eu-west-1
166
186
  npx watch-tail --floci --port 4600 --no-open
187
+ npx watch-tail --db ./logs.duckdb (history in a file you choose)
188
+
189
+ Everything the app streams is also archived to a local DuckDB file, so the UI can
190
+ browse history later without calling AWS. Use --no-archive to switch that off, or
191
+ --db to keep the archive somewhere else. The database needs the optional DuckDB
192
+ driver: when it is missing, the app runs exactly as before, without history.
167
193
 
168
194
  The app streams whatever your ambient AWS credentials can read. Credentials are
169
195
  resolved by the AWS SDK (SSO, shared config, environment, instance role); the CLI
@@ -113,3 +113,33 @@ export function shortIdentity(arn) {
113
113
  return name;
114
114
  return parts.at(-1) ?? arn;
115
115
  }
116
+ /**
117
+ * Asks the app what the local DuckDB archive holds.
118
+ *
119
+ * The route always answers 200 (an unavailable archive is reported inside the
120
+ * payload), so a failure here means the app itself could not be reached. The CLI
121
+ * only prints the result: nothing about startup depends on it.
122
+ */
123
+ export async function readArchive(input) {
124
+ const { baseUrl, fetchImpl = fetch, timeoutMs = 5000 } = input;
125
+ try {
126
+ const response = await fetchImpl(new URL('/api/archive', baseUrl), {
127
+ signal: AbortSignal.timeout(timeoutMs),
128
+ });
129
+ if (!response.ok)
130
+ return { ok: false, message: `HTTP ${response.status}` };
131
+ return { ok: true, status: (await response.json()) };
132
+ }
133
+ catch (error) {
134
+ return { ok: false, message: error instanceof Error ? error.message : String(error) };
135
+ }
136
+ }
137
+ /** One line describing the archive for the startup banner. */
138
+ export function describeArchive(status) {
139
+ if (!status.available)
140
+ return `local history unavailable: ${status.error ?? 'unknown reason'}`;
141
+ const count = status.rows === 0
142
+ ? 'no events yet'
143
+ : `${status.rows.toLocaleString('en-US')} event${status.rows === 1 ? '' : 's'}`;
144
+ return `history ${count} at ${status.path}`;
145
+ }
package/dist/cli/ui.js CHANGED
@@ -6,6 +6,19 @@
6
6
  * falls back to plain lines, which also keeps the integration tests readable.
7
7
  */
8
8
  import { autocomplete, cancel, confirm, intro, isCancel, log, outro, spinner, } from '@clack/prompts';
9
+ /**
10
+ * Thrown when the user cancels a prompt with Ctrl+C.
11
+ *
12
+ * A cancel is not an answer: reading it as "No" is how the CLI used to keep
13
+ * running (server and all) after a Ctrl+C that looked like it did nothing, so
14
+ * the prompt layer raises this instead and the CLI stops cleanly.
15
+ */
16
+ export class PromptCancelled extends Error {
17
+ constructor() {
18
+ super('the prompt was cancelled');
19
+ this.name = 'PromptCancelled';
20
+ }
21
+ }
9
22
  /**
10
23
  * Decides whether the process can render animated output and ask questions.
11
24
  *
@@ -72,14 +85,16 @@ export function createUi(options = {}) {
72
85
  });
73
86
  if (isCancel(answer)) {
74
87
  cancel('Cancelled.');
75
- return null;
88
+ throw new PromptCancelled();
76
89
  }
77
90
  return String(answer);
78
91
  },
79
92
  confirm: async (message, initial = true) => {
80
93
  const answer = await confirm({ message, initialValue: initial });
81
- if (isCancel(answer))
82
- return false;
94
+ if (isCancel(answer)) {
95
+ cancel('Cancelled.');
96
+ throw new PromptCancelled();
97
+ }
83
98
  return answer === true;
84
99
  },
85
100
  };
@@ -185,7 +185,7 @@ const EMULATOR_CREDENTIALS = { accessKeyId: 'test', secretAccessKey: 'test' };
185
185
  * `AWS_DEFAULT_REGION`, which is how `--region` (or a region resolved by
186
186
  * {@link resolveRunRegion}) wins over the profile.
187
187
  */
188
- export function buildChildEnv({ base, profile = null, region = null, endpoint = null, clearStaticKeys = false, }) {
188
+ export function buildChildEnv({ base, profile = null, region = null, endpoint = null, clearStaticKeys = false, archive = null, }) {
189
189
  const env = { ...base };
190
190
  const name = normalize(profile);
191
191
  const emulator = normalize(endpoint);
@@ -213,6 +213,12 @@ export function buildChildEnv({ base, profile = null, region = null, endpoint =
213
213
  env.AWS_REGION = code;
214
214
  env.AWS_DEFAULT_REGION = code;
215
215
  }
216
+ if (archive !== null) {
217
+ // A blank value means "unset" to the server, so `--db` and `--no-archive`
218
+ // can each be expressed without removing the variable.
219
+ env.WATCH_STREAM_ARCHIVE = archive.enabled ? '' : 'off';
220
+ env.WATCH_STREAM_ARCHIVE_DB = archive.path ?? '';
221
+ }
216
222
  return env;
217
223
  }
218
224
  /**
@@ -286,10 +292,12 @@ export function isEmulatorEndpoint(endpoint) {
286
292
  * local emulator settings were neutralized for this run.
287
293
  */
288
294
  export function describeChildEnv(env) {
289
- return Object.keys(env)
290
- .filter((key) => key.startsWith('AWS_'))
295
+ return (Object.keys(env)
296
+ // `WATCH_STREAM_*` is part of the effective configuration too: a
297
+ // `--no-archive` or `--db` run is only reproducible if `--print` shows it.
298
+ .filter((key) => key.startsWith('AWS_') || key.startsWith('WATCH_STREAM_'))
291
299
  .toSorted(compareNames)
292
- .map((key) => `${key}=${env[key] ?? ''}`);
300
+ .map((key) => `${key}=${env[key] ?? ''}`));
293
301
  }
294
302
  /** Reads the shared AWS config file, or an empty string when it is missing. */
295
303
  export function readConfigText(env = process.env) {