@bud.sh/app 0.1.0 → 0.3.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 (365) hide show
  1. package/dist/client/assets/{index-sj6mWw9-.js → index-GPPa1XPO.js} +2 -2
  2. package/dist/client/assets/workspace-CznMN7F6.js +2 -0
  3. package/dist/client/index.html +1 -1
  4. package/dist/hosted/hosted.js +233 -38
  5. package/dist/node/index.js +95 -0
  6. package/dist/node-host/assets/abap-LtYK6g-v.js +3 -0
  7. package/dist/node-host/assets/actionscript-3-CfsDl31I.js +3 -0
  8. package/dist/node-host/assets/ada-CvTdxb4T.js +3 -0
  9. package/dist/node-host/assets/ahk-HN_I_y_3.js +3 -0
  10. package/dist/node-host/assets/ahk2-bJ5Wm9-K.js +3 -0
  11. package/dist/node-host/assets/andromeeda-BASpqCeJ.js +4 -0
  12. package/dist/node-host/assets/angular-html-C4SmZqv0.js +33 -0
  13. package/dist/node-host/assets/angular-ts-X1i_WOxI.js +27 -0
  14. package/dist/node-host/assets/apache-BIl2qPOf.js +3 -0
  15. package/dist/node-host/assets/apex-CybrBQ0z.js +3 -0
  16. package/dist/node-host/assets/api_vite-DSBC5Nzy.js +5 -0
  17. package/dist/node-host/assets/apl-CDTyNgE2.js +17 -0
  18. package/dist/node-host/assets/applescript-CJ80B5XJ.js +3 -0
  19. package/dist/node-host/assets/ara-IxnQjO6j.js +3 -0
  20. package/dist/node-host/assets/asciidoc-xKuVlNk6.js +3 -0
  21. package/dist/node-host/assets/asm-wBDSgBbA.js +3 -0
  22. package/dist/node-host/assets/astro-BiZFCPSt.js +19 -0
  23. package/dist/node-host/assets/aurora-x-DugsLcii.js +4 -0
  24. package/dist/node-host/assets/awk-D6dA05Ye.js +3 -0
  25. package/dist/node-host/assets/ayu-dark-BT3qdi3o.js +4 -0
  26. package/dist/node-host/assets/ayu-light-BVZyHoh9.js +4 -0
  27. package/dist/node-host/assets/ayu-mirage-XFwUVZQZ.js +4 -0
  28. package/dist/node-host/assets/ballerina-DIdXD2KH.js +3 -0
  29. package/dist/node-host/assets/bat-Dx8nnxXE.js +3 -0
  30. package/dist/node-host/assets/beancount-BG2UQN2D.js +3 -0
  31. package/dist/node-host/assets/berry-CgA2ea0_.js +3 -0
  32. package/dist/node-host/assets/bibtex-BzgdqG3s.js +3 -0
  33. package/dist/node-host/assets/bicep-CZ338dSk.js +3 -0
  34. package/dist/node-host/assets/bird2-BMprQDNV.js +3 -0
  35. package/dist/node-host/assets/blade-cZjv4Qad.js +21 -0
  36. package/dist/node-host/assets/bsl-Bh8bzcoy.js +6 -0
  37. package/dist/node-host/assets/build-Dn-L17Oj.js +5372 -0
  38. package/dist/node-host/assets/c-BXsbGxlp.js +6 -0
  39. package/dist/node-host/assets/c3-u0qNrniV.js +3 -0
  40. package/dist/node-host/assets/cadence-B1ELWULD.js +3 -0
  41. package/dist/node-host/assets/cairo-BsQhEq3R.js +6 -0
  42. package/dist/node-host/assets/canvas-BZhzizzt.js +1066 -0
  43. package/dist/node-host/assets/catppuccin-frappe-D20KODDN.js +4 -0
  44. package/dist/node-host/assets/catppuccin-latte-eGLVHIUJ.js +4 -0
  45. package/dist/node-host/assets/catppuccin-macchiato-bQGch4PY.js +4 -0
  46. package/dist/node-host/assets/catppuccin-mocha-Bes8-0Mr.js +4 -0
  47. package/dist/node-host/assets/chapel-cEZNBFmv.js +6 -0
  48. package/dist/node-host/assets/clarity-BkOxTQMf.js +3 -0
  49. package/dist/node-host/assets/clojure-DDsQ0FaV.js +3 -0
  50. package/dist/node-host/assets/cloneFileDiffMetadata-C1BcNpxN.js +3075 -0
  51. package/dist/node-host/assets/cmake-DPsCB_V6.js +3 -0
  52. package/dist/node-host/assets/cobol-BpMD18Rr.js +11 -0
  53. package/dist/node-host/assets/codeowners-CxEKPWu0.js +3 -0
  54. package/dist/node-host/assets/codeql-BwdvwJnv.js +3 -0
  55. package/dist/node-host/assets/coffee-BX_u-2R1.js +6 -0
  56. package/dist/node-host/assets/comment-data-nUlI0szN.js +92501 -0
  57. package/dist/node-host/assets/common-lisp-DJtwvW4V.js +3 -0
  58. package/dist/node-host/assets/coq-Byd42hNw.js +3 -0
  59. package/dist/node-host/assets/cpp-DjJRL98I.js +22 -0
  60. package/dist/node-host/assets/crystal-Cz-dKioR.js +19 -0
  61. package/dist/node-host/assets/csharp-Cx443ZdC.js +3 -0
  62. package/dist/node-host/assets/css-CWNyyZRg.js +6 -0
  63. package/dist/node-host/assets/csv-DqIVFkK7.js +3 -0
  64. package/dist/node-host/assets/cue-B5KneM5p.js +3 -0
  65. package/dist/node-host/assets/cypher-D8Bb8Cq2.js +3 -0
  66. package/dist/node-host/assets/d-BQY8TDgQ.js +3 -0
  67. package/dist/node-host/assets/dark-plus-BGuiqa1B.js +4 -0
  68. package/dist/node-host/assets/dart-BZ3YsgDB.js +3 -0
  69. package/dist/node-host/assets/dax-S-Noo-ku.js +3 -0
  70. package/dist/node-host/assets/desktop-BgOb7Aj4.js +3 -0
  71. package/dist/node-host/assets/diff-Blb4MjsC.js +3 -0
  72. package/dist/node-host/assets/dist-CVXhIZqO.js +6659 -0
  73. package/dist/node-host/assets/docker-PC1tuYpa.js +3 -0
  74. package/dist/node-host/assets/dotenv-BNWDqzYB.js +3 -0
  75. package/dist/node-host/assets/dracula-0CVA2XY5.js +4 -0
  76. package/dist/node-host/assets/dracula-soft-Dk9bpbVU.js +4 -0
  77. package/dist/node-host/assets/dream-maker-CngiPd8U.js +3 -0
  78. package/dist/node-host/assets/edge-D1_nghia.js +13 -0
  79. package/dist/node-host/assets/edit-DjpTbnEc.js +9788 -0
  80. package/dist/node-host/assets/elixir-x6BMZ6zW.js +6 -0
  81. package/dist/node-host/assets/elm-CiAjb3qf.js +6 -0
  82. package/dist/node-host/assets/emacs-lisp-DPCJASlD.js +3 -0
  83. package/dist/node-host/assets/erb-DzXTnEFa.js +11 -0
  84. package/dist/node-host/assets/erlang-DALBVNgL.js +6 -0
  85. package/dist/node-host/assets/everforest-dark-CRjTbhh5.js +4 -0
  86. package/dist/node-host/assets/everforest-light-CEeYFLn8.js +4 -0
  87. package/dist/node-host/assets/fennel-B3wtZRne.js +3 -0
  88. package/dist/node-host/assets/files-CTzcWGjb.js +3771 -0
  89. package/dist/node-host/assets/fish-D7qAeWQz.js +3 -0
  90. package/dist/node-host/assets/fluent-BjfpB34g.js +3 -0
  91. package/dist/node-host/assets/fortran-fixed-form-BbzsUHx4.js +6 -0
  92. package/dist/node-host/assets/fortran-free-form-yxJ7igsv.js +3 -0
  93. package/dist/node-host/assets/fsharp-D2o1Vyx0.js +6 -0
  94. package/dist/node-host/assets/gdresource-aTcOcjSd.js +11 -0
  95. package/dist/node-host/assets/gdscript-CSSSWtkL.js +3 -0
  96. package/dist/node-host/assets/gdshader-D7JfdFV3.js +3 -0
  97. package/dist/node-host/assets/genie-DnK2KWIP.js +3 -0
  98. package/dist/node-host/assets/gherkin-D6Lr12YQ.js +3 -0
  99. package/dist/node-host/assets/git-commit-BU1ZeqU-.js +6 -0
  100. package/dist/node-host/assets/git-rebase-BBwLmuqc.js +6 -0
  101. package/dist/node-host/assets/github-dark-BXgKmOw_.js +4 -0
  102. package/dist/node-host/assets/github-dark-default-DzJQXksd.js +4 -0
  103. package/dist/node-host/assets/github-dark-dimmed-B1pEmGtS.js +4 -0
  104. package/dist/node-host/assets/github-dark-high-contrast-BkHIa6jc.js +4 -0
  105. package/dist/node-host/assets/github-light-BKRlUbaB.js +4 -0
  106. package/dist/node-host/assets/github-light-default-BU3eYkzs.js +4 -0
  107. package/dist/node-host/assets/github-light-high-contrast-B3MumDcI.js +4 -0
  108. package/dist/node-host/assets/gleam-CTllUdfC.js +3 -0
  109. package/dist/node-host/assets/glimmer-js-Cr4KUylv.js +15 -0
  110. package/dist/node-host/assets/glimmer-ts-W_3bhuUU.js +15 -0
  111. package/dist/node-host/assets/glsl-CV8OarLe.js +8 -0
  112. package/dist/node-host/assets/gn-CpIn4Dcw.js +3 -0
  113. package/dist/node-host/assets/gnuplot-DgWvVXI8.js +3 -0
  114. package/dist/node-host/assets/go-aXtTCanQ.js +3 -0
  115. package/dist/node-host/assets/graphql-BzQEBhBd.js +17 -0
  116. package/dist/node-host/assets/groovy-Bw2Ku4bU.js +3 -0
  117. package/dist/node-host/assets/gruvbox-dark-hard-B0ecF443.js +4 -0
  118. package/dist/node-host/assets/gruvbox-dark-medium-BQnpC39k.js +4 -0
  119. package/dist/node-host/assets/gruvbox-dark-soft-DFZUgESr.js +4 -0
  120. package/dist/node-host/assets/gruvbox-light-hard-CuB_LOJr.js +4 -0
  121. package/dist/node-host/assets/gruvbox-light-medium-idDHgxjs.js +4 -0
  122. package/dist/node-host/assets/gruvbox-light-soft-CfWH49MY.js +4 -0
  123. package/dist/node-host/assets/hack-DhYZEMlu.js +11 -0
  124. package/dist/node-host/assets/haml-CRid5kR3.js +13 -0
  125. package/dist/node-host/assets/handlebars-Sm6kCGmL.js +15 -0
  126. package/dist/node-host/assets/haskell-CfGsE1Cf.js +3 -0
  127. package/dist/node-host/assets/haxe-QaqXWmIB.js +3 -0
  128. package/dist/node-host/assets/hcl-DHg_Osgo.js +3 -0
  129. package/dist/node-host/assets/hjson-Cuaphql8.js +3 -0
  130. package/dist/node-host/assets/hlsl-BJLUNfne.js +3 -0
  131. package/dist/node-host/assets/horizon-bright-Ba6M8QSV.js +4 -0
  132. package/dist/node-host/assets/horizon-h92C5OlZ.js +4 -0
  133. package/dist/node-host/assets/houston-EQnPegWq.js +4 -0
  134. package/dist/node-host/assets/html-derivative-Cm8plTfc.js +6 -0
  135. package/dist/node-host/assets/html-j1vihRKA.js +13 -0
  136. package/dist/node-host/assets/http-BZNc4yhO.js +15 -0
  137. package/dist/node-host/assets/hurl-O8ckTHPH.js +13 -0
  138. package/dist/node-host/assets/hxml-9hvSHCPQ.js +6 -0
  139. package/dist/node-host/assets/hy-CJKxDzbh.js +3 -0
  140. package/dist/node-host/assets/imba-96qKoJCa.js +3 -0
  141. package/dist/node-host/assets/ini-C24lZfdM.js +3 -0
  142. package/dist/node-host/assets/java-CFxSaKyu.js +6 -0
  143. package/dist/node-host/assets/javascript-D44WgUBn.js +6 -0
  144. package/dist/node-host/assets/jinja-BkVH86If.js +10 -0
  145. package/dist/node-host/assets/jison-DOInKsmT.js +6 -0
  146. package/dist/node-host/assets/jiti-CjBwKumX.js +5461 -0
  147. package/dist/node-host/assets/json-CnGl9idC.js +6 -0
  148. package/dist/node-host/assets/json5-xULSgPQI.js +3 -0
  149. package/dist/node-host/assets/jsonc-Cu6rqcrJ.js +3 -0
  150. package/dist/node-host/assets/jsonl-Bp0qqr10.js +3 -0
  151. package/dist/node-host/assets/jsonnet-BafgE6cE.js +3 -0
  152. package/dist/node-host/assets/jssm-Dx5A5sBR.js +3 -0
  153. package/dist/node-host/assets/jsx-Dv6553c2.js +6 -0
  154. package/dist/node-host/assets/julia-CnoY-eZu.js +17 -0
  155. package/dist/node-host/assets/just-rCgUmVkD.js +19 -0
  156. package/dist/node-host/assets/kanagawa-dragon-DgDvwi3B.js +4 -0
  157. package/dist/node-host/assets/kanagawa-lotus-BgoQro20.js +4 -0
  158. package/dist/node-host/assets/kanagawa-wave-DgXEowHs.js +4 -0
  159. package/dist/node-host/assets/kdl-DkTyxPcj.js +3 -0
  160. package/dist/node-host/assets/kotlin-BHE8CoV9.js +3 -0
  161. package/dist/node-host/assets/kusto-6FdaWTzR.js +3 -0
  162. package/dist/node-host/assets/laserwave-IxBH_3yW.js +4 -0
  163. package/dist/node-host/assets/latex-DTvJHHg_.js +6 -0
  164. package/dist/node-host/assets/lean-BwOKScIt.js +3 -0
  165. package/dist/node-host/assets/less-BzbdhFUi.js +3 -0
  166. package/dist/node-host/assets/lib-BzDu3tbz.js +17484 -0
  167. package/dist/node-host/assets/light-plus-S8JBx6is.js +4 -0
  168. package/dist/node-host/assets/liquid-praBF2DO.js +15 -0
  169. package/dist/node-host/assets/llvm-ZNG_yAr9.js +3 -0
  170. package/dist/node-host/assets/log-Dad54gsi.js +3 -0
  171. package/dist/node-host/assets/logo-DTXV8SKw.js +3 -0
  172. package/dist/node-host/assets/lru-C0_oUet4.js +134 -0
  173. package/dist/node-host/assets/lua-CiYoSQn2.js +8 -0
  174. package/dist/node-host/assets/luau-DlImmvOM.js +3 -0
  175. package/dist/node-host/assets/main-D0ab5M4V.js +2353 -0
  176. package/dist/node-host/assets/make-B2ukzWs3.js +3 -0
  177. package/dist/node-host/assets/markdown-CkmxmzqY.js +3 -0
  178. package/dist/node-host/assets/marko-Din1W3ot.js +15 -0
  179. package/dist/node-host/assets/material-theme-D1f3HBq-.js +4 -0
  180. package/dist/node-host/assets/material-theme-darker-ExzYhT0j.js +4 -0
  181. package/dist/node-host/assets/material-theme-lighter-D6gH9nnA.js +4 -0
  182. package/dist/node-host/assets/material-theme-ocean-D1w5BPAa.js +4 -0
  183. package/dist/node-host/assets/material-theme-palenight-CkqWmVpF.js +4 -0
  184. package/dist/node-host/assets/matlab-CfRK6IMC.js +3 -0
  185. package/dist/node-host/assets/mdc-DrUS0kOP.js +13 -0
  186. package/dist/node-host/assets/mdx-BK9ZufRc.js +3 -0
  187. package/dist/node-host/assets/mermaid-ItFqCK9s.js +3 -0
  188. package/dist/node-host/assets/min-dark-npsJH98j.js +4 -0
  189. package/dist/node-host/assets/min-light-DUk1XsVt.js +4 -0
  190. package/dist/node-host/assets/mipsasm-EL46Y4Xg.js +3 -0
  191. package/dist/node-host/assets/mojo-CsUSYzsu.js +3 -0
  192. package/dist/node-host/assets/monokai-CfFRWUNl.js +4 -0
  193. package/dist/node-host/assets/moonbit-BuY4M1CG.js +3 -0
  194. package/dist/node-host/assets/move-B-o8dn0N.js +3 -0
  195. package/dist/node-host/assets/narrat-D9rrR0H5.js +3 -0
  196. package/dist/node-host/assets/nextflow-ByPelpfh.js +6 -0
  197. package/dist/node-host/assets/nextflow-groovy-kiH-pxwE.js +3 -0
  198. package/dist/node-host/assets/nginx-CqxQjy7t.js +6 -0
  199. package/dist/node-host/assets/night-owl-BS7V-av_.js +4 -0
  200. package/dist/node-host/assets/night-owl-light-CZtRawYE.js +4 -0
  201. package/dist/node-host/assets/nim-BJfyW_Eo.js +21 -0
  202. package/dist/node-host/assets/nix-NHxlegoK.js +7 -0
  203. package/dist/node-host/assets/node-CaLaDAar.js +783 -0
  204. package/dist/node-host/assets/nord-BFh54Nqz.js +4 -0
  205. package/dist/node-host/assets/nsis-C3tUpeAt.js +3 -0
  206. package/dist/node-host/assets/nushell-Dx3871HW.js +3 -0
  207. package/dist/node-host/assets/objective-c-6dJF64Dt.js +3 -0
  208. package/dist/node-host/assets/objective-cpp-_ooRQ-PY.js +3 -0
  209. package/dist/node-host/assets/ocaml-vm1Y8An6.js +3 -0
  210. package/dist/node-host/assets/odin-vjOJSyfV.js +3 -0
  211. package/dist/node-host/assets/one-dark-pro-zDovGosB.js +4 -0
  212. package/dist/node-host/assets/one-light-gmHK3iK6.js +4 -0
  213. package/dist/node-host/assets/openscad-jn-f1Ocl.js +3 -0
  214. package/dist/node-host/assets/org-kbyZnkNe.js +101 -0
  215. package/dist/node-host/assets/pages-0aWH7z1j.js +578 -0
  216. package/dist/node-host/assets/pascal-D8-gNZ2I.js +3 -0
  217. package/dist/node-host/assets/perl-Ck21ZEIA.js +17 -0
  218. package/dist/node-host/assets/php-BI2xxNig.js +19 -0
  219. package/dist/node-host/assets/pierre-dark-DDWDl8g6.js +4 -0
  220. package/dist/node-host/assets/pierre-dark-protanopia-deuteranopia-C35UMuvO.js +4 -0
  221. package/dist/node-host/assets/pierre-dark-soft-Bb-4-biO.js +4 -0
  222. package/dist/node-host/assets/pierre-dark-tritanopia-CIJISGWF.js +4 -0
  223. package/dist/node-host/assets/pierre-dark-vibrant-8oZzB3gw.js +4 -0
  224. package/dist/node-host/assets/pierre-light-CWhW4NrH.js +4 -0
  225. package/dist/node-host/assets/pierre-light-protanopia-deuteranopia-u0U7N4Hn.js +4 -0
  226. package/dist/node-host/assets/pierre-light-soft-BCU6fuhO.js +4 -0
  227. package/dist/node-host/assets/pierre-light-tritanopia-3c8Yx3co.js +4 -0
  228. package/dist/node-host/assets/pierre-light-vibrant-Cwh332o_.js +4 -0
  229. package/dist/node-host/assets/pkl-C7lWzykI.js +3 -0
  230. package/dist/node-host/assets/plastic-DtdaCjub.js +4 -0
  231. package/dist/node-host/assets/plsql-DCNXypXO.js +3 -0
  232. package/dist/node-host/assets/po-IjpR1yHO.js +3 -0
  233. package/dist/node-host/assets/poimandres-Hdda6aHK.js +4 -0
  234. package/dist/node-host/assets/polar-4pN1JrJ8.js +3 -0
  235. package/dist/node-host/assets/postcss-0FnF2XR3.js +5833 -0
  236. package/dist/node-host/assets/postcss-D1gKt4z_.js +3 -0
  237. package/dist/node-host/assets/postcss-import-D5DErX4i.js +445 -0
  238. package/dist/node-host/assets/powerquery-SrvS_NBM.js +3 -0
  239. package/dist/node-host/assets/powershell-DvPkO2jl.js +3 -0
  240. package/dist/node-host/assets/prisma-4G_BaF_i.js +3 -0
  241. package/dist/node-host/assets/project-branches-1zs_0J_y.js +600 -0
  242. package/dist/node-host/assets/project-thread-links-LpUAGcDr.js +241 -0
  243. package/dist/node-host/assets/prolog-Bacii3Ue.js +3 -0
  244. package/dist/node-host/assets/prompt-CH6TK0bC-ZEO69UbU.js +885 -0
  245. package/dist/node-host/assets/proto-ClkOcAW0.js +3 -0
  246. package/dist/node-host/assets/pug-Du-dOfS3.js +13 -0
  247. package/dist/node-host/assets/puppet-CQlPp728.js +3 -0
  248. package/dist/node-host/assets/purescript-CLpaGMbw.js +3 -0
  249. package/dist/node-host/assets/python-BjnOIxPe.js +3 -0
  250. package/dist/node-host/assets/qml-BcFatdsQ.js +6 -0
  251. package/dist/node-host/assets/qmldir-Dz8ttxjf.js +3 -0
  252. package/dist/node-host/assets/qss-Iltvkn1C.js +3 -0
  253. package/dist/node-host/assets/r-DvDYa_8Q.js +6 -0
  254. package/dist/node-host/assets/racket-DRv7j6nv.js +3 -0
  255. package/dist/node-host/assets/raku-DI9yGpeW.js +3 -0
  256. package/dist/node-host/assets/razor-vGjCiVYw.js +11 -0
  257. package/dist/node-host/assets/rbs-D_4FkXDS.js +3 -0
  258. package/dist/node-host/assets/red-VqZFRByZ.js +4 -0
  259. package/dist/node-host/assets/reg-DpJf71oO.js +3 -0
  260. package/dist/node-host/assets/regexp-CE_3vZDh.js +6 -0
  261. package/dist/node-host/assets/rel-BT0iIKKw.js +3 -0
  262. package/dist/node-host/assets/riscv-CvzikGLb.js +3 -0
  263. package/dist/node-host/assets/rolldown-runtime-DktXgydw.js +35 -0
  264. package/dist/node-host/assets/ron-DzAo6FTJ.js +3 -0
  265. package/dist/node-host/assets/rose-pine-DiTkEueR.js +4 -0
  266. package/dist/node-host/assets/rose-pine-dawn-tfo5y2X0.js +4 -0
  267. package/dist/node-host/assets/rose-pine-moon-C0gON9XN.js +4 -0
  268. package/dist/node-host/assets/rosmsg-CyYq6XdT.js +3 -0
  269. package/dist/node-host/assets/rst-BqrTc4by.js +23 -0
  270. package/dist/node-host/assets/ruby-DLXfYriJ.js +31 -0
  271. package/dist/node-host/assets/rust-CaJo2YYS.js +3 -0
  272. package/dist/node-host/assets/sas-DJAJgMrq.js +6 -0
  273. package/dist/node-host/assets/sass-DI2zJwx7.js +3 -0
  274. package/dist/node-host/assets/scala-pMGZAs9j.js +3 -0
  275. package/dist/node-host/assets/scheme-D3A2QBtM.js +3 -0
  276. package/dist/node-host/assets/screen-DQoTOWYR.js +494 -0
  277. package/dist/node-host/assets/scss-n4nz8dJI.js +8 -0
  278. package/dist/node-host/assets/sdbl-CdQg5gu1.js +3 -0
  279. package/dist/node-host/assets/shaderlab-5KHT7nQ3.js +6 -0
  280. package/dist/node-host/assets/shellscript-BfuVOb-a.js +6 -0
  281. package/dist/node-host/assets/shellsession-hT9eQUDu.js +6 -0
  282. package/dist/node-host/assets/slack-dark-v8P_eXr6.js +4 -0
  283. package/dist/node-host/assets/slack-ochin-D8SyEdKz.js +4 -0
  284. package/dist/node-host/assets/smalltalk-D4IpSogw.js +3 -0
  285. package/dist/node-host/assets/smithy-BRyN83Yn.js +3 -0
  286. package/dist/node-host/assets/snazzy-light-BtkQkvXb.js +4 -0
  287. package/dist/node-host/assets/solarized-dark-B8nAdMfM.js +4 -0
  288. package/dist/node-host/assets/solarized-light-B-3F1INj.js +4 -0
  289. package/dist/node-host/assets/solidity-DPVu0wkJ.js +3 -0
  290. package/dist/node-host/assets/soy-Cbnz3v4z.js +6 -0
  291. package/dist/node-host/assets/sparql-cTZV4yOr.js +6 -0
  292. package/dist/node-host/assets/splunk-xP_ZjUH2.js +3 -0
  293. package/dist/node-host/assets/sql-DEvbt_rU.js +6 -0
  294. package/dist/node-host/assets/ssh-config-DXFPABYp.js +3 -0
  295. package/dist/node-host/assets/stata-0wnAnxv2.js +6 -0
  296. package/dist/node-host/assets/stylus-ZZDn1yUO.js +3 -0
  297. package/dist/node-host/assets/surrealql-70--UPGf.js +6 -0
  298. package/dist/node-host/assets/svelte-COI8WXVC.js +15 -0
  299. package/dist/node-host/assets/swift-DWmMn3lF.js +3 -0
  300. package/dist/node-host/assets/synthwave-84-DcsXCF_c.js +4 -0
  301. package/dist/node-host/assets/system-verilog-DW0KSMVO.js +3 -0
  302. package/dist/node-host/assets/systemd-DFbUltlW.js +3 -0
  303. package/dist/node-host/assets/talonscript-CLxaFu-b.js +3 -0
  304. package/dist/node-host/assets/tasks-C0WqnM7Q.js +644 -0
  305. package/dist/node-host/assets/tasks-request-Bwky5ORf.js +114 -0
  306. package/dist/node-host/assets/tasl-_AAbKiWM.js +3 -0
  307. package/dist/node-host/assets/tcl-DLe0Tsfm.js +3 -0
  308. package/dist/node-host/assets/templ-Bd0jzThC.js +13 -0
  309. package/dist/node-host/assets/terraform-v0KN9QQh.js +3 -0
  310. package/dist/node-host/assets/tex-C1Wtngrr.js +8 -0
  311. package/dist/node-host/assets/tokyo-night-Bvpqduda.js +4 -0
  312. package/dist/node-host/assets/toml-B7BHZIqX.js +3 -0
  313. package/dist/node-host/assets/ts-tags-BSGaPI18.js +59 -0
  314. package/dist/node-host/assets/tsv-BorGVq2Z.js +3 -0
  315. package/dist/node-host/assets/tsx-BxnCmyTp.js +6 -0
  316. package/dist/node-host/assets/turtle-BEG5g_eT.js +3 -0
  317. package/dist/node-host/assets/twig-BJG2k0MA.js +19 -0
  318. package/dist/node-host/assets/typescript-Cr5OHcug.js +6 -0
  319. package/dist/node-host/assets/typespec--jp0a8Qj.js +3 -0
  320. package/dist/node-host/assets/typst-BAvHLpwp.js +121 -0
  321. package/dist/node-host/assets/v-DBTjbKF9.js +3 -0
  322. package/dist/node-host/assets/vala-BnnASFsX.js +3 -0
  323. package/dist/node-host/assets/vb-eGVhCUXq.js +3 -0
  324. package/dist/node-host/assets/verilog-Ma7yBE30.js +3 -0
  325. package/dist/node-host/assets/vesper-CfxmMOy3.js +4 -0
  326. package/dist/node-host/assets/vhdl-Co2XFKY7.js +3 -0
  327. package/dist/node-host/assets/viml-BReTXeDA.js +3 -0
  328. package/dist/node-host/assets/vitesse-black-D9-_1mjV.js +4 -0
  329. package/dist/node-host/assets/vitesse-dark-DlSMLlr9.js +4 -0
  330. package/dist/node-host/assets/vitesse-light-KRWWWztf.js +4 -0
  331. package/dist/node-host/assets/vue-C3fWU2fi.js +31 -0
  332. package/dist/node-host/assets/vue-html-DxOM9wex.js +6 -0
  333. package/dist/node-host/assets/vue-vine-OKzSGBlX.js +19 -0
  334. package/dist/node-host/assets/vyper-C6KGx0YU.js +3 -0
  335. package/dist/node-host/assets/wasm-CvHAs-FG.js +7 -0
  336. package/dist/node-host/assets/wasm-gNIKwGlD.js +3 -0
  337. package/dist/node-host/assets/wenyan-BeysbCrW.js +3 -0
  338. package/dist/node-host/assets/wgsl-1s5rV5xS.js +3 -0
  339. package/dist/node-host/assets/wikitext-wjhjmmzD.js +3 -0
  340. package/dist/node-host/assets/wit-CeQiCbz_.js +3 -0
  341. package/dist/node-host/assets/wolfram-CcZPfnLd.js +3 -0
  342. package/dist/node-host/assets/worker-factory-C80HGMWf.js +14 -0
  343. package/dist/node-host/assets/xml-BsBjJrlv.js +8 -0
  344. package/dist/node-host/assets/xsl-BYwWzvT_.js +6 -0
  345. package/dist/node-host/assets/yaml-BRgACZP0.js +6 -0
  346. package/dist/node-host/assets/zenscript-BoijL7rl.js +3 -0
  347. package/dist/node-host/assets/zig-lTQvxhLD.js +3 -0
  348. package/dist/node-host/node-host.js +41511 -0
  349. package/dist/server/assets/{branch-previews-C_TVt_HQ.js → branch-previews-BryeA_kA.js} +112 -3
  350. package/dist/server/assets/{listener-BVbFsnmX.js → listener-oKd5ETMj.js} +3 -3
  351. package/dist/server/assets/{server-DUBjmaBw.js → server-DN5uwE4k.js} +1 -1
  352. package/dist/server/assets/{services-Og5rcF50.js → services-Ber8opFE.js} +2 -2
  353. package/dist/server/capture.js +1 -1
  354. package/dist/server/migration.js +3 -3
  355. package/dist/server/runtime.js +4 -4
  356. package/dist/server/server.js +3 -3
  357. package/dist/types/assets/{config-BzzRLcL-.d.ts → config-Cuauq8xY.d.ts} +24 -1
  358. package/dist/types/assets/contract-BsCQbbxD.d.ts +111 -0
  359. package/dist/types/companion.d.ts +1 -1
  360. package/dist/types/hosted.d.ts +3 -99
  361. package/dist/types/index.d.ts +1 -1
  362. package/dist/types/node-host.d.ts +46 -0
  363. package/dist/types/screen.d.ts +1 -1
  364. package/package.json +6 -2
  365. package/dist/client/assets/workspace-9KxFcfyV.js +0 -2
@@ -0,0 +1,600 @@
1
+ import { Cr as parseElementAnchor, S as writeRows, b as plainRow, c as previewKey, l as projectStore, ni as parsePreviewBranch, oi as parsePreviewPins, ti as parsePreview, v as projectLive, y as routes } from "./comment-data-nUlI0szN.js";
2
+ import { array, boolean, enum_, nullable, number, object, parseSafe, string } from "remix/data-schema";
3
+ //#region app/client/project-previews.ts
4
+ /**
5
+ * A preview's capture in a theme at a viewport. Captures from before viewports existed name
6
+ * none and belong to the viewport of their width.
7
+ * @param preview - The route's preview.
8
+ * @param theme - The color scheme.
9
+ * @param size - The viewport.
10
+ * @returns The capture, or undefined.
11
+ */
12
+ function captureFor(preview, theme, size) {
13
+ return preview?.captures.find((capture) => capture.theme === theme && (capture.viewport ? capture.viewport === size.id : capture.width === size.width));
14
+ }
15
+ /**
16
+ * The key of a theme at a viewport among a route's pictures.
17
+ * @param theme - The color scheme.
18
+ * @param size - The viewport.
19
+ * @returns The key.
20
+ */
21
+ function pictureKey(theme, size) {
22
+ return `${theme}\0${size.id}`;
23
+ }
24
+ /**
25
+ * Where an element is in a route's page at the capture width, in page pixels, as the route's
26
+ * screenshot tab finds it now.
27
+ * @param token - The project's capability.
28
+ * @param id - The route identity.
29
+ * @param theme - The color scheme whose tab to ask.
30
+ * @param element - The element's anchor.
31
+ * @param signal - Ends the request.
32
+ * @param viewport - The viewport whose tab to ask; the first configured one by default.
33
+ * @returns The point, or null when the page has no picker or the element isn't found.
34
+ */
35
+ async function locatePreview(token, id, theme, element, signal, viewport) {
36
+ try {
37
+ let response = await fetch(routes.previewsApi.locate.href({ id }), {
38
+ method: "POST",
39
+ headers: {
40
+ "X-Bud-Token": token,
41
+ "Content-Type": "application/json"
42
+ },
43
+ credentials: "same-origin",
44
+ redirect: "error",
45
+ signal,
46
+ body: JSON.stringify({
47
+ theme,
48
+ element,
49
+ ...viewport ? { viewport } : {}
50
+ })
51
+ });
52
+ if (!response.ok) return null;
53
+ let { pin } = await response.json();
54
+ if (pin === null) return null;
55
+ let [found] = parsePreviewPins([pin]);
56
+ return found && found.match !== "missing" && found.x !== null && found.y !== null ? {
57
+ x: found.x,
58
+ y: found.y
59
+ } : null;
60
+ } catch {
61
+ return null;
62
+ }
63
+ }
64
+ /** Earlier captures kept per route and theme, so undoing a change shows its picture at once. */
65
+ var KEPT_CAPTURES = 2;
66
+ /** Bytes of stored images beyond which earlier images go first, oldest first. */
67
+ var IMAGE_BUDGET = 268435456;
68
+ /**
69
+ * The stored images to delete: slices of captures no preview shows, beyond the latest few
70
+ * captures each route and theme showed before, and then the oldest of the rest until the store
71
+ * fits its budget. Slices of a capture a preview shows always stay, and a capture's slices go
72
+ * together.
73
+ * @param previews - Every stored preview.
74
+ * @param images - Every stored image.
75
+ * @param budget - The most bytes to keep, when earlier images allow it.
76
+ * @returns The hashes to delete.
77
+ */
78
+ function staleImages(previews, images, budget = IMAGE_BUDGET) {
79
+ let shown = new Set(previews.flatMap((preview) => preview.captures.map(({ hash }) => hash)));
80
+ let captures = /* @__PURE__ */ new Map();
81
+ for (let image of images.filter((image) => !shown.has(image.capture)).toSorted((left, right) => right.storedAt - left.storedAt)) captures.set(image.capture, [...captures.get(image.capture) ?? [], image]);
82
+ let kept = /* @__PURE__ */ new Map();
83
+ let stale = [];
84
+ let earlier = [];
85
+ for (let slices of captures.values()) {
86
+ let key = `${slices[0].theme}\0${slices[0].route}`;
87
+ let count = (kept.get(key) ?? 0) + 1;
88
+ kept.set(key, count);
89
+ if (count > KEPT_CAPTURES) stale.push(...slices.map((image) => image.hash));
90
+ else earlier.push(slices);
91
+ }
92
+ let removed = new Set(stale);
93
+ let bytes = images.reduce((total, image) => total + (removed.has(image.hash) ? 0 : image.image.size), 0);
94
+ for (let slices of earlier.toReversed()) {
95
+ if (bytes <= budget) break;
96
+ for (let image of slices) {
97
+ stale.push(image.hash);
98
+ bytes -= image.image.size;
99
+ }
100
+ }
101
+ return stale;
102
+ }
103
+ /**
104
+ * Stores an image and evicts what the store no longer needs. A full store evicts every
105
+ * earlier image and tries once more; failing that, the image is shown but not kept.
106
+ * @param store - The project store.
107
+ * @param image - The downloaded image.
108
+ * @returns Whether the image was stored.
109
+ */
110
+ async function storeImage(store, image) {
111
+ let evict = (budget) => {
112
+ let stale = staleImages(store.previews.toArray.map(plainRow), store.images.toArray.map(plainRow), budget);
113
+ return stale.length ? writeRows(store.images, { delete: stale }) : void 0;
114
+ };
115
+ try {
116
+ await writeRows(store.images, { upsert: [image] });
117
+ } catch {
118
+ try {
119
+ await evict(0);
120
+ await writeRows(store.images, { upsert: [image] });
121
+ } catch {
122
+ return false;
123
+ }
124
+ }
125
+ await evict()?.catch(() => {});
126
+ return true;
127
+ }
128
+ var downloads = {
129
+ active: 0,
130
+ waiting: [],
131
+ limit: /^h[23]/.test((globalThis.performance?.getEntriesByType("navigation")[0])?.nextHopProtocol ?? "") ? 12 : 4
132
+ };
133
+ /**
134
+ * Downloads a picture by its hash once one of the few download slots is free.
135
+ * @param hash - The picture's content hash.
136
+ * @param token - The project's capability.
137
+ * @param signal - Ends the download, also while it waits for a slot.
138
+ * @returns The picture.
139
+ */
140
+ async function downloadImage(hash, token, signal) {
141
+ while (downloads.active >= downloads.limit) {
142
+ await new Promise((resolve) => downloads.waiting.push(resolve));
143
+ if (signal.aborted) {
144
+ downloads.waiting.shift()?.();
145
+ signal.throwIfAborted();
146
+ }
147
+ }
148
+ downloads.active++;
149
+ try {
150
+ return await (await request(routes.previewsApi.image.href({ hash }), token, signal)).blob();
151
+ } finally {
152
+ downloads.active--;
153
+ downloads.waiting.shift()?.();
154
+ }
155
+ }
156
+ async function request(url, token, signal, method = "GET") {
157
+ let response = await fetch(url, {
158
+ method,
159
+ headers: { "X-Bud-Token": token },
160
+ credentials: "same-origin",
161
+ redirect: "error",
162
+ signal
163
+ });
164
+ if (!response.ok) {
165
+ let body = await response.json().catch(() => null);
166
+ throw new Error(typeof body?.error === "string" ? body.error : `Preview request failed (${response.status}).`);
167
+ }
168
+ return response;
169
+ }
170
+ function message(cause) {
171
+ return cause instanceof Error ? cause.message : "Bud could not load this preview.";
172
+ }
173
+ /**
174
+ * Shows server-captured route screenshots for one canvas from the project's local store,
175
+ * which the live channel keeps current. Images are fetched once per content hash with the
176
+ * capability header, kept in IndexedDB and shown through object URLs.
177
+ * @param options - The project and the canvas lifetime.
178
+ * @returns Per-route views; each route's listeners update only that artboard.
179
+ */
180
+ function createProjectPreviews(options) {
181
+ let { project, signal } = options;
182
+ let branch = options.branch ?? null;
183
+ let key = (id) => previewKey(branch, id);
184
+ let route = (rowKey) => branch ? rowKey.startsWith(`${branch}\0`) ? rowKey.slice(branch.length + 1) : null : rowKey.includes("\0") ? null : rowKey;
185
+ let query = branch ? `?branch=${encodeURIComponent(branch)}` : "";
186
+ let token = project.token;
187
+ let store = null;
188
+ let views = /* @__PURE__ */ new Map();
189
+ let listeners = /* @__PURE__ */ new Map();
190
+ let shownSizes = /* @__PURE__ */ new Map();
191
+ let loading = /* @__PURE__ */ new Map();
192
+ let sequences = /* @__PURE__ */ new Map();
193
+ function view(id) {
194
+ return views.get(id) ?? {
195
+ images: {},
196
+ refreshing: false,
197
+ error: ""
198
+ };
199
+ }
200
+ function notify(id) {
201
+ for (let listener of listeners.get(id) ?? []) listener();
202
+ }
203
+ function update(id, change) {
204
+ views.set(id, {
205
+ ...view(id),
206
+ ...change
207
+ });
208
+ notify(id);
209
+ }
210
+ function preview(id) {
211
+ let row = store?.previews.get(key(id));
212
+ return row ? plainRow(row) : null;
213
+ }
214
+ async function save(next) {
215
+ if (!store || (sequences.get(next.id) ?? -1) > next.sequence) return;
216
+ sequences.set(next.id, next.sequence);
217
+ await writeRows(store.previews, { upsert: [next] });
218
+ }
219
+ let arrived = /* @__PURE__ */ new Map();
220
+ function arrive(preview) {
221
+ if ((preview.branch ?? null) !== branch) return;
222
+ arrived.set(preview.id, preview);
223
+ if (arrived.size === 1) requestAnimationFrame(() => void flush());
224
+ }
225
+ async function flush() {
226
+ if (!store || !arrived.size) return;
227
+ let previews = [...arrived.values()];
228
+ arrived.clear();
229
+ for (let preview of previews) sequences.set(preview.id, preview.sequence);
230
+ await writeRows(store.previews, { upsert: previews });
231
+ }
232
+ function revoke(picture) {
233
+ for (let src of [...picture?.srcs ?? [], ...picture?.thumbnails ?? []]) URL.revokeObjectURL(src);
234
+ }
235
+ async function stored(id, theme, capture, hash) {
236
+ let image = store.images.get(hash)?.image;
237
+ if (image) return image;
238
+ image = await downloadImage(hash, token, signal);
239
+ await storeImage(store, {
240
+ hash,
241
+ capture,
242
+ image,
243
+ route: id,
244
+ theme,
245
+ storedAt: Date.now()
246
+ });
247
+ return image;
248
+ }
249
+ let slicing = /* @__PURE__ */ new Set();
250
+ async function slices(id, theme, size) {
251
+ let picture = pictureKey(theme, size);
252
+ let shown = view(id).images[picture];
253
+ let key = `${picture}\0${id}\0${shown?.capture.hash}`;
254
+ if (!store || !shown || shown.srcs.length || slicing.has(key)) return;
255
+ slicing.add(key);
256
+ let wanted = shown.capture;
257
+ let srcs = [];
258
+ try {
259
+ srcs = (await Promise.all(wanted.tiles.map((tile) => stored(id, theme, wanted.hash, tile.hash)))).map((image) => URL.createObjectURL(image));
260
+ let current = view(id).images[picture];
261
+ if (signal.aborted || current?.capture.hash !== wanted.hash || current.srcs.length) {
262
+ for (let src of srcs) URL.revokeObjectURL(src);
263
+ return;
264
+ }
265
+ update(id, { images: {
266
+ ...view(id).images,
267
+ [picture]: {
268
+ ...current,
269
+ srcs
270
+ }
271
+ } });
272
+ } catch (cause) {
273
+ for (let src of srcs) URL.revokeObjectURL(src);
274
+ if (!signal.aborted && view(id).images[picture]?.capture.hash === wanted.hash) update(id, { error: message(cause) });
275
+ } finally {
276
+ slicing.delete(key);
277
+ }
278
+ }
279
+ async function load(id, theme, size) {
280
+ let picture = pictureKey(theme, size);
281
+ let wanted = captureFor(preview(id), theme, size);
282
+ let shown = view(id).images[picture];
283
+ let key = `${picture}\0${id}`;
284
+ if (!store || !wanted || loading.get(key) === wanted.hash) return;
285
+ if (shown?.capture.hash === wanted.hash) {
286
+ if (shown.capture.revision !== wanted.revision) update(id, { images: {
287
+ ...view(id).images,
288
+ [picture]: {
289
+ ...shown,
290
+ capture: wanted
291
+ }
292
+ } });
293
+ return;
294
+ }
295
+ loading.set(key, wanted.hash);
296
+ let srcs = [];
297
+ try {
298
+ let first = wanted.thumbnails.length ? wanted.thumbnails : wanted.tiles;
299
+ srcs = (await Promise.all(first.map((image) => stored(id, theme, wanted.hash, image.hash)))).map((image) => URL.createObjectURL(image));
300
+ let latest = captureFor(preview(id), theme, size);
301
+ if (signal.aborted || latest?.hash !== wanted.hash) {
302
+ for (let src of srcs) URL.revokeObjectURL(src);
303
+ return;
304
+ }
305
+ revoke(view(id).images[picture]);
306
+ let next = wanted.thumbnails.length ? {
307
+ capture: latest,
308
+ srcs: [],
309
+ thumbnails: srcs
310
+ } : {
311
+ capture: latest,
312
+ srcs,
313
+ thumbnails: []
314
+ };
315
+ update(id, {
316
+ images: {
317
+ ...view(id).images,
318
+ [picture]: next
319
+ },
320
+ error: ""
321
+ });
322
+ } catch (cause) {
323
+ for (let src of srcs) URL.revokeObjectURL(src);
324
+ let latest = captureFor(preview(id), theme, size);
325
+ if (!signal.aborted && latest?.hash === wanted.hash) update(id, { error: message(cause) });
326
+ } finally {
327
+ if (loading.get(key) === wanted.hash) loading.delete(key);
328
+ }
329
+ }
330
+ async function open(id) {
331
+ try {
332
+ let response = await request(`${routes.previewsApi.show.href({ id })}${query}`, token, signal);
333
+ await save(parsePreview(await response.json()));
334
+ } catch (cause) {
335
+ if (!signal.aborted) update(id, { error: message(cause) });
336
+ }
337
+ }
338
+ function changed(id) {
339
+ notify(id);
340
+ for (let { theme, size } of shownSizes.get(id)?.values() ?? []) load(id, theme, size);
341
+ }
342
+ let stopLive = projectLive(token).subscribe("previews", {
343
+ onEvent(data) {
344
+ arrive(parsePreview(data));
345
+ },
346
+ onResync() {
347
+ sequences.clear();
348
+ for (let id of listeners.keys()) open(id);
349
+ }
350
+ });
351
+ let stopStore = () => {};
352
+ let opening = projectStore(project);
353
+ opening.then(async (opened) => {
354
+ if (signal.aborted) return;
355
+ store = opened;
356
+ let configured = new Set(project.routes.map((route) => route.id));
357
+ let removed = opened.previews.toArray.filter((row) => !configured.has(row.id));
358
+ writeRows(opened.previews, { delete: removed.map((row) => previewKey(row.branch ?? null, row.id)) });
359
+ let subscription = opened.previews.subscribeChanges((changes) => {
360
+ for (let change of changes) {
361
+ let id = route(String(change.key));
362
+ if (id !== null) changed(id);
363
+ }
364
+ });
365
+ stopStore = () => subscription.unsubscribe();
366
+ flush();
367
+ for (let id of listeners.keys()) {
368
+ changed(id);
369
+ open(id);
370
+ }
371
+ });
372
+ signal.addEventListener("abort", () => {
373
+ stopLive();
374
+ stopStore();
375
+ for (let { images } of views.values()) for (let picture of Object.values(images)) revoke(picture);
376
+ }, { once: true });
377
+ return {
378
+ get: (id) => ({
379
+ preview: preview(id),
380
+ ...view(id)
381
+ }),
382
+ watch(id, listener) {
383
+ let set = listeners.get(id);
384
+ if (!set) {
385
+ set = /* @__PURE__ */ new Set();
386
+ listeners.set(id, set);
387
+ if (store) open(id);
388
+ }
389
+ set.add(listener);
390
+ return () => {
391
+ set.delete(listener);
392
+ };
393
+ },
394
+ slices(id, theme, size) {
395
+ slices(id, theme, size);
396
+ },
397
+ show(id, theme, size) {
398
+ let shown = shownSizes.get(id) ?? /* @__PURE__ */ new Map();
399
+ let key = pictureKey(theme, size);
400
+ if (shown.has(key)) return;
401
+ shownSizes.set(id, shown.set(key, {
402
+ theme,
403
+ size
404
+ }));
405
+ load(id, theme, size);
406
+ },
407
+ async describe(id, capture, x, y) {
408
+ try {
409
+ let response = await fetch(routes.previewsApi.describe.href({ id }), {
410
+ method: "POST",
411
+ headers: {
412
+ "X-Bud-Token": token,
413
+ "Content-Type": "application/json"
414
+ },
415
+ credentials: "same-origin",
416
+ redirect: "error",
417
+ signal,
418
+ body: JSON.stringify({
419
+ theme: capture.theme,
420
+ hash: capture.hash,
421
+ x,
422
+ y,
423
+ ...branch ? { branch } : {}
424
+ })
425
+ });
426
+ if (!response.ok) return null;
427
+ let { element } = await response.json();
428
+ return element === null ? null : parseElementAnchor(element);
429
+ } catch {
430
+ return null;
431
+ }
432
+ },
433
+ locate: (id, theme, element, size) => locatePreview(token, id, theme, element, signal, size?.id),
434
+ async picture(id, theme, size) {
435
+ let opened = await opening;
436
+ if (!preview(id)) await open(id);
437
+ let capture = captureFor(preview(id), theme, size);
438
+ if (!capture) return null;
439
+ return {
440
+ capture,
441
+ images: await Promise.all(capture.tiles.map(async (tile) => opened.images.get(tile.hash)?.image ?? await downloadImage(tile.hash, token, signal)))
442
+ };
443
+ },
444
+ async refresh(id) {
445
+ if (branch) return;
446
+ update(id, {
447
+ refreshing: true,
448
+ error: ""
449
+ });
450
+ try {
451
+ let response = await request(routes.previewsApi.refresh.href({ id }), token, signal, "POST");
452
+ await save(parsePreview(await response.json()));
453
+ update(id, { refreshing: false });
454
+ } catch (cause) {
455
+ if (!signal.aborted) update(id, {
456
+ refreshing: false,
457
+ error: message(cause)
458
+ });
459
+ }
460
+ }
461
+ };
462
+ }
463
+ //#endregion
464
+ //#region app/client/project-branches.ts
465
+ var name = string().refine((value) => {
466
+ try {
467
+ return parsePreviewBranch(value) === value;
468
+ } catch {
469
+ return false;
470
+ }
471
+ });
472
+ var commit = string().refine((value) => /^[a-f0-9]{40,64}$/.test(value));
473
+ var BranchListSchema = object({
474
+ working: nullable(name),
475
+ main: nullable(name),
476
+ branches: array(object({
477
+ name,
478
+ main: boolean(),
479
+ active: boolean(),
480
+ commit,
481
+ subject: nullable(string().refine((value) => value.length <= 1e3)),
482
+ captured: nullable(commit),
483
+ state: enum_([
484
+ "idle",
485
+ "queued",
486
+ "building",
487
+ "capturing",
488
+ "ready",
489
+ "failed"
490
+ ]),
491
+ error: nullable(string().refine((value) => value.length <= 8e3)),
492
+ progress: nullable(object({
493
+ captured: number(),
494
+ total: number()
495
+ }))
496
+ })).refine((branches) => branches.length <= 500)
497
+ });
498
+ /**
499
+ * Validates the companion's branch list.
500
+ * @param value - Untrusted JSON.
501
+ * @returns The list.
502
+ */
503
+ function parseBranchList(value) {
504
+ let result = parseSafe(BranchListSchema, value);
505
+ if (!result.success) throw new TypeError("The companion returned an invalid branch list.");
506
+ return result.value;
507
+ }
508
+ /**
509
+ * The canvas's branches, kept current by the live channel: main and the activated branches with
510
+ * where their pictures stand, and the repository's other branches to activate.
511
+ * @param options - The project, the canvas lifetime and a change callback.
512
+ * @returns The list and its operations.
513
+ */
514
+ function createProjectBranches(options) {
515
+ let { project, signal } = options;
516
+ let list = {
517
+ working: null,
518
+ main: null,
519
+ branches: []
520
+ };
521
+ let loaded = false;
522
+ let busy = false;
523
+ let error = "";
524
+ function changed() {
525
+ if (!signal.aborted) options.onChange();
526
+ }
527
+ async function call(url, method = "GET") {
528
+ let response = await fetch(url, {
529
+ method,
530
+ headers: { "X-Bud-Token": project.token },
531
+ credentials: "same-origin",
532
+ redirect: "error",
533
+ signal
534
+ });
535
+ let body = await response.json().catch(() => null);
536
+ if (!response.ok) throw new Error(typeof body?.error === "string" ? body.error : "Bud could not load branches.");
537
+ return parseBranchList(body);
538
+ }
539
+ async function load() {
540
+ try {
541
+ list = await call(routes.branchesApi.list.href());
542
+ loaded = true;
543
+ error = "";
544
+ } catch (cause) {
545
+ if (!signal.aborted) error = cause instanceof Error ? cause.message : String(cause);
546
+ }
547
+ changed();
548
+ }
549
+ let stop = projectLive(project.token).subscribe("branches", {
550
+ onEvent(data) {
551
+ try {
552
+ list = parseBranchList(data);
553
+ loaded = true;
554
+ changed();
555
+ } catch {
556
+ load();
557
+ }
558
+ },
559
+ onResync() {
560
+ load();
561
+ }
562
+ });
563
+ signal.addEventListener("abort", stop, { once: true });
564
+ load();
565
+ let change = async (href) => {
566
+ busy = true;
567
+ changed();
568
+ try {
569
+ list = await call(href, "POST");
570
+ error = "";
571
+ } catch (cause) {
572
+ if (!signal.aborted) error = cause instanceof Error ? cause.message : String(cause);
573
+ } finally {
574
+ busy = false;
575
+ changed();
576
+ }
577
+ };
578
+ return {
579
+ get list() {
580
+ return list;
581
+ },
582
+ get loaded() {
583
+ return loaded;
584
+ },
585
+ get busy() {
586
+ return busy;
587
+ },
588
+ get error() {
589
+ return error;
590
+ },
591
+ activate(branch, active) {
592
+ return change(active ? routes.branchesApi.activate.href({ name: branch }) : routes.branchesApi.deactivate.href({ name: branch }));
593
+ },
594
+ capture(branch) {
595
+ return change(routes.branchesApi.capture.href({ name: branch }));
596
+ }
597
+ };
598
+ }
599
+ //#endregion
600
+ export { pictureKey as i, createProjectPreviews as n, locatePreview as r, createProjectBranches as t };