buninu 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/.bashrc +11 -0
  2. package/ARCHITECTURE.md +452 -0
  3. package/LICENSE +21 -0
  4. package/README.md +121 -0
  5. package/apps/bun/make-bunBin.sh +84 -0
  6. package/apps/jsgotty/LICENSE +23 -0
  7. package/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
  8. package/apps/jsgotty/NOTICE +21 -0
  9. package/apps/jsgotty/README.en.md +290 -0
  10. package/apps/jsgotty/README.md +292 -0
  11. package/apps/jsgotty/client.mjs +700 -0
  12. package/apps/jsgotty/env.sh +2 -0
  13. package/apps/jsgotty/gotty.js +3325 -0
  14. package/apps/jsgotty/node_modules/.package-lock.json +35 -0
  15. package/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
  16. package/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
  17. package/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
  18. package/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
  19. package/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
  20. package/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  21. package/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
  22. package/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
  23. package/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  24. package/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
  25. package/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
  26. package/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
  27. package/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
  28. package/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
  29. package/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
  30. package/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
  31. package/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
  32. package/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
  33. package/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  34. package/apps/jsgotty/node_modules/ws/LICENSE +20 -0
  35. package/apps/jsgotty/node_modules/ws/README.md +548 -0
  36. package/apps/jsgotty/node_modules/ws/browser.js +8 -0
  37. package/apps/jsgotty/node_modules/ws/index.js +22 -0
  38. package/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
  39. package/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
  40. package/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
  41. package/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
  42. package/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
  43. package/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
  44. package/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
  45. package/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
  46. package/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
  47. package/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
  48. package/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
  49. package/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
  50. package/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
  51. package/apps/jsgotty/node_modules/ws/package.json +70 -0
  52. package/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
  53. package/apps/jsgotty/package-lock.json +46 -0
  54. package/apps/jsgotty/package.json +13 -0
  55. package/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
  56. package/apps/jsgotty/patches/windowsTerminal.js +204 -0
  57. package/apps/jsgotty/rz.js +199 -0
  58. package/apps/jsgotty/single-exe/README.md +80 -0
  59. package/apps/jsgotty/single-exe/assetsHelper.js +90 -0
  60. package/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
  61. package/apps/jsgotty/single-exe/compiled.js +138 -0
  62. package/apps/jsgotty/single-exe/entry.mjs +9 -0
  63. package/apps/jsgotty/single-exe/packAssets.sh +7 -0
  64. package/apps/jsgotty/static/css/index.css +13 -0
  65. package/apps/jsgotty/static/css/kitty.css +61 -0
  66. package/apps/jsgotty/static/css/xterm.css +218 -0
  67. package/apps/jsgotty/static/css/xterm_customize.css +32 -0
  68. package/apps/jsgotty/static/favicon.ico +0 -0
  69. package/apps/jsgotty/static/help.md +125 -0
  70. package/apps/jsgotty/static/icon.svg +66 -0
  71. package/apps/jsgotty/static/icon_192.png +0 -0
  72. package/apps/jsgotty/static/index.html +164 -0
  73. package/apps/jsgotty/static/js/gotty.js +31537 -0
  74. package/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
  75. package/apps/jsgotty/static/js/gotty.js.map +1 -0
  76. package/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
  77. package/apps/jsgotty/static/js/kitty.js +1045 -0
  78. package/apps/jsgotty/static/js/windows_bridge.js +194 -0
  79. package/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
  80. package/apps/jsgotty/static/js/zmodem.js +1 -0
  81. package/apps/jsgotty/static/manifest.json +15 -0
  82. package/apps/jsgotty/sz.js +273 -0
  83. package/apps/jsgotty/tests/kitty-order.test.js +58 -0
  84. package/apps/jsgotty/viu.mjs +393 -0
  85. package/apps/jsgotty/wgotty +62 -0
  86. package/apps/jsgotty/windows-bridge-node.js +60 -0
  87. package/apps/jsgotty/zmodem-node.js +260 -0
  88. package/apps/jsmdcui/CHANGELOG.md +1048 -0
  89. package/apps/jsmdcui/LICENSE +22 -0
  90. package/apps/jsmdcui/README.md +1269 -0
  91. package/apps/jsmdcui/cdp-maze.js +141 -0
  92. package/apps/jsmdcui/clean.sh +9 -0
  93. package/apps/jsmdcui/demos/basic.jpg +0 -0
  94. package/apps/jsmdcui/demos/chinese.md +32 -0
  95. package/apps/jsmdcui/demos/event.md +170 -0
  96. package/apps/jsmdcui/demos/good.jpg +0 -0
  97. package/apps/jsmdcui/demos/image-processor.md +366 -0
  98. package/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
  99. package/apps/jsmdcui/demos/img-change.md +73 -0
  100. package/apps/jsmdcui/demos/imgtool-zh.md +298 -0
  101. package/apps/jsmdcui/demos/imgtool.md +298 -0
  102. package/apps/jsmdcui/demos/maze.md +149 -0
  103. package/apps/jsmdcui/demos/reactive.md +40 -0
  104. package/apps/jsmdcui/demos/reader.md +513 -0
  105. package/apps/jsmdcui/demos/select.md +63 -0
  106. package/apps/jsmdcui/demos/todo-zh.md +190 -0
  107. package/apps/jsmdcui/demos/todo.md +191 -0
  108. package/apps/jsmdcui/edit +9 -0
  109. package/apps/jsmdcui/jsmdcui.sh +5 -0
  110. package/apps/jsmdcui/llm-maze.txt +94 -0
  111. package/apps/jsmdcui/package.json +19 -0
  112. package/apps/jsmdcui/project_structure.txt +35 -0
  113. package/apps/jsmdcui/runmd.mjs +1140 -0
  114. package/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
  115. package/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
  116. package/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
  117. package/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
  118. package/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
  119. package/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
  120. package/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
  121. package/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
  122. package/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
  123. package/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
  124. package/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
  125. package/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
  126. package/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
  127. package/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
  128. package/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
  129. package/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
  130. package/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
  131. package/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
  132. package/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
  133. package/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
  134. package/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
  135. package/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
  136. package/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
  137. package/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
  138. package/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
  139. package/apps/jsmdcui/runtime/help/actions.md +161 -0
  140. package/apps/jsmdcui/runtime/help/cdp.md +124 -0
  141. package/apps/jsmdcui/runtime/help/colors.md +421 -0
  142. package/apps/jsmdcui/runtime/help/commands.md +161 -0
  143. package/apps/jsmdcui/runtime/help/copypaste.md +149 -0
  144. package/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
  145. package/apps/jsmdcui/runtime/help/help.md +1269 -0
  146. package/apps/jsmdcui/runtime/help/keybindings.md +355 -0
  147. package/apps/jsmdcui/runtime/help/linter.md +90 -0
  148. package/apps/jsmdcui/runtime/help/options.md +709 -0
  149. package/apps/jsmdcui/runtime/help/plugins.md +544 -0
  150. package/apps/jsmdcui/runtime/help/tutorial.md +112 -0
  151. package/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1185 -0
  152. package/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +201 -0
  153. package/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
  154. package/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
  155. package/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
  156. package/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
  157. package/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
  158. package/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
  159. package/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
  160. package/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
  161. package/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
  162. package/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
  163. package/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
  164. package/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
  165. package/apps/jsmdcui/runtime/syntax/README.md +63 -0
  166. package/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
  167. package/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
  168. package/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
  169. package/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
  170. package/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
  171. package/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
  172. package/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
  173. package/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
  174. package/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
  175. package/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
  176. package/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
  177. package/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
  178. package/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
  179. package/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
  180. package/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
  181. package/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
  182. package/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
  183. package/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
  184. package/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
  185. package/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
  186. package/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
  187. package/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
  188. package/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
  189. package/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
  190. package/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
  191. package/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
  192. package/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
  193. package/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
  194. package/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
  195. package/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
  196. package/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
  197. package/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
  198. package/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
  199. package/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
  200. package/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
  201. package/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
  202. package/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
  203. package/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
  204. package/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
  205. package/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
  206. package/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
  207. package/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
  208. package/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
  209. package/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
  210. package/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
  211. package/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
  212. package/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
  213. package/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
  214. package/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
  215. package/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
  216. package/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
  217. package/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
  218. package/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
  219. package/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
  220. package/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
  221. package/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
  222. package/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
  223. package/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
  224. package/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
  225. package/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
  226. package/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
  227. package/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
  228. package/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
  229. package/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
  230. package/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
  231. package/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
  232. package/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
  233. package/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
  234. package/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
  235. package/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
  236. package/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
  237. package/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
  238. package/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
  239. package/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
  240. package/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
  241. package/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
  242. package/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
  243. package/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
  244. package/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
  245. package/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
  246. package/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
  247. package/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
  248. package/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
  249. package/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
  250. package/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
  251. package/apps/jsmdcui/runtime/syntax/markdown.yaml +64 -0
  252. package/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
  253. package/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
  254. package/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
  255. package/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
  256. package/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
  257. package/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
  258. package/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
  259. package/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
  260. package/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
  261. package/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
  262. package/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
  263. package/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
  264. package/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
  265. package/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
  266. package/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
  267. package/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
  268. package/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
  269. package/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
  270. package/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
  271. package/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
  272. package/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
  273. package/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
  274. package/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
  275. package/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
  276. package/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
  277. package/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
  278. package/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
  279. package/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
  280. package/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
  281. package/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
  282. package/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
  283. package/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
  284. package/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
  285. package/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
  286. package/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
  287. package/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
  288. package/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
  289. package/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
  290. package/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
  291. package/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
  292. package/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
  293. package/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
  294. package/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
  295. package/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
  296. package/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
  297. package/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
  298. package/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
  299. package/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
  300. package/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
  301. package/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
  302. package/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
  303. package/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
  304. package/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
  305. package/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
  306. package/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
  307. package/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
  308. package/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
  309. package/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
  310. package/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
  311. package/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
  312. package/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
  313. package/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
  314. package/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
  315. package/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
  316. package/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
  317. package/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
  318. package/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
  319. package/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
  320. package/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
  321. package/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
  322. package/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
  323. package/apps/jsmdcui/single-exe/README.md +473 -0
  324. package/apps/jsmdcui/single-exe/assetsHelper.js +191 -0
  325. package/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
  326. package/apps/jsmdcui/single-exe/compiled.js +212 -0
  327. package/apps/jsmdcui/single-exe/entry.mjs +10 -0
  328. package/apps/jsmdcui/single-exe/packAssets.sh +7 -0
  329. package/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
  330. package/apps/jsmdcui/src/buffer/backup.js +165 -0
  331. package/apps/jsmdcui/src/buffer/buffer.js +126 -0
  332. package/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
  333. package/apps/jsmdcui/src/buffer/loc.js +38 -0
  334. package/apps/jsmdcui/src/buffer/message.js +29 -0
  335. package/apps/jsmdcui/src/build-args.js +40 -0
  336. package/apps/jsmdcui/src/config/clean.js +172 -0
  337. package/apps/jsmdcui/src/config/colorscheme.js +99 -0
  338. package/apps/jsmdcui/src/config/config.js +125 -0
  339. package/apps/jsmdcui/src/config/defaults.js +109 -0
  340. package/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
  341. package/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
  342. package/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
  343. package/apps/jsmdcui/src/cui/identity.mjs +26 -0
  344. package/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
  345. package/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
  346. package/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
  347. package/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
  348. package/apps/jsmdcui/src/cui/rpc.mjs +1525 -0
  349. package/apps/jsmdcui/src/cui/server.mjs +128 -0
  350. package/apps/jsmdcui/src/cui/table-render.mjs +286 -0
  351. package/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
  352. package/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
  353. package/apps/jsmdcui/src/cui/template-components.mjs +253 -0
  354. package/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
  355. package/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
  356. package/apps/jsmdcui/src/display/ansi-style.js +60 -0
  357. package/apps/jsmdcui/src/highlight/highlighter.js +243 -0
  358. package/apps/jsmdcui/src/highlight/parser.js +225 -0
  359. package/apps/jsmdcui/src/index.js +9573 -0
  360. package/apps/jsmdcui/src/lua/engine.js +68 -0
  361. package/apps/jsmdcui/src/platform/archive.js +50 -0
  362. package/apps/jsmdcui/src/platform/clipboard.js +278 -0
  363. package/apps/jsmdcui/src/platform/commands.js +221 -0
  364. package/apps/jsmdcui/src/platform/terminal.js +5 -0
  365. package/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
  366. package/apps/jsmdcui/src/plugins/manager.js +674 -0
  367. package/apps/jsmdcui/src/runtime/encodings.js +10 -0
  368. package/apps/jsmdcui/src/runtime/registry.js +134 -0
  369. package/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
  370. package/apps/jsmdcui/src/screen/events.js +263 -0
  371. package/apps/jsmdcui/src/screen/screen.js +249 -0
  372. package/apps/jsmdcui/src/screen/vt100.js +571 -0
  373. package/apps/jsmdcui/src/shell/shell.js +70 -0
  374. package/apps/jsmdcui/testapp.md +78 -0
  375. package/apps/jsmdcui/tests/assets-helper.test.js +150 -0
  376. package/apps/jsmdcui/tests/backup.test.js +158 -0
  377. package/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
  378. package/apps/jsmdcui/tests/cmphex3b64.js +95 -0
  379. package/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
  380. package/apps/jsmdcui/tests/config-settings.test.js +52 -0
  381. package/apps/jsmdcui/tests/demo.test.js +447 -0
  382. package/apps/jsmdcui/tests/docs-sync.test.js +14 -0
  383. package/apps/jsmdcui/tests/fence-events.test.js +1293 -0
  384. package/apps/jsmdcui/tests/heading-ids.test.js +559 -0
  385. package/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
  386. package/apps/jsmdcui/tests/id-collision.test.js +514 -0
  387. package/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
  388. package/apps/jsmdcui/tests/key-event.md +10 -0
  389. package/apps/jsmdcui/tests/kitty-demo.md +184 -0
  390. package/apps/jsmdcui/tests/kitty-images.test.js +288 -0
  391. package/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
  392. package/apps/jsmdcui/tests/platform-commands.test.js +18 -0
  393. package/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
  394. package/apps/jsmdcui/tests/pty-demo.js +492 -0
  395. package/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
  396. package/apps/jsmdcui/tests/table-render.test.js +150 -0
  397. package/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
  398. package/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
  399. package/apps/jsmdcui/tests/template-components.test.js +422 -0
  400. package/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
  401. package/apps/jsmdcui/tests/textarea.md +8 -0
  402. package/apps/jsmdcui/tests/tui-links.test.js +298 -0
  403. package/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
  404. package/apps/jsmdcui/tests/wui.test.js +108 -0
  405. package/apps/jsmdcui/tests/wv-client.js +96 -0
  406. package/apps/jsmdcui/tui +7 -0
  407. package/apps/jsmdcui/wui +9 -0
  408. package/apps/musl-la/LICENSES/Apache-2.0_LLVM_Exceptions_license.txt +311 -0
  409. package/apps/musl-la/LICENSES/Apache-2.0_license.txt +177 -0
  410. package/apps/musl-la/LICENSES/BSD-3-Clause_license.txt +43 -0
  411. package/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
  412. package/apps/musl-la/LICENSES/LGPL-3.0.txt +165 -0
  413. package/apps/musl-la/LICENSES/MIT.txt +21 -0
  414. package/apps/musl-la/LICENSES/curl_license.txt +22 -0
  415. package/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
  416. package/apps/musl-la/LICENSES/zlib_license.txt +22 -0
  417. package/apps/musl-la/LICENSE_musl.txt +193 -0
  418. package/apps/musl-la/NOTICE +56 -0
  419. package/apps/musl-la/ldmusl +0 -0
  420. package/apps/musl-la/libgcc_s.so.1 +0 -0
  421. package/apps/musl-la/libstdc++.so.6 +0 -0
  422. package/apps/musl-la/musl-la.sh +5 -0
  423. package/bin/bun.sh +57 -0
  424. package/bin/glow.sh +5 -0
  425. package/bin/init.js +395 -0
  426. package/bin/jmi.sh +5 -0
  427. package/bin/jsgotty.sh +5 -0
  428. package/bin/libsh-loader.c +135 -0
  429. package/bin/libsh-loader.so +0 -0
  430. package/bin/multicall.sh +90 -0
  431. package/bin/shc.js +5 -0
  432. package/bin/switch_to_android.sh +9 -0
  433. package/bin/switch_to_linux.sh +7 -0
  434. package/icon.png +0 -0
  435. package/package.json +31 -0
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const {
6
+ basenameSafe,
7
+ loadZmodem,
8
+ restoreStdin,
9
+ setRawStdin,
10
+ stderr,
11
+ appendDebugLog,
12
+ writeOctets,
13
+ } = require("./zmodem-node");
14
+ const {
15
+ BridgeInputParser,
16
+ emitBridgeMessage,
17
+ } = require("./windows-bridge-node");
18
+
19
+ async function main() {
20
+ if (process.argv.includes("-h") || process.argv.includes("--help")) {
21
+ stderr("usage: node rz.js [target-dir]");
22
+ process.exitCode = 0;
23
+ return;
24
+ }
25
+
26
+ const targetDir = process.argv[2] ? path.resolve(process.argv[2]) : process.cwd();
27
+ fs.mkdirSync(targetDir, { recursive: true });
28
+
29
+ if (process.platform === "win32") {
30
+ await runWindowsBridge(targetDir);
31
+ return;
32
+ }
33
+
34
+ const Zmodem = await loadZmodem();
35
+ const session = new Zmodem.Session.Receive();
36
+ let ending = false;
37
+ const completedUploads = [];
38
+
39
+ const finish = (code, error) => {
40
+ if (ending) {
41
+ return;
42
+ }
43
+ ending = true;
44
+ restoreStdin();
45
+ if (error) {
46
+ stderr(String(error && error.stack ? error.stack : error));
47
+ } else if (code === 0) {
48
+ for (const file of completedUploads) {
49
+ stderr(`uploaded ${file.path} (${formatByteCount(file.size)})`);
50
+ }
51
+ }
52
+ process.exitCode = code;
53
+ };
54
+
55
+ process.on("SIGINT", () => {
56
+ try {
57
+ if (!session.has_ended()) {
58
+ session.abort();
59
+ }
60
+ } catch {}
61
+ finish(130);
62
+ });
63
+
64
+ session.set_sender((octets) => {
65
+ void writeOctets(octets).catch((error) => finish(1, error));
66
+ });
67
+
68
+ session.on("offer", (offer) => {
69
+ void receiveOffer(offer, targetDir, completedUploads).catch((error) => {
70
+ try {
71
+ session.abort();
72
+ } catch {}
73
+ finish(1, error);
74
+ });
75
+ });
76
+
77
+ session.on("session_end", () => {
78
+ finish(0);
79
+ });
80
+
81
+ process.stdin.on("data", (chunk) => {
82
+ try {
83
+ session.consume(Array.from(chunk));
84
+ } catch (error) {
85
+ finish(1, error);
86
+ }
87
+ });
88
+
89
+ process.stdin.on("end", () => {
90
+ if (!ending) {
91
+ finish(session.has_ended() ? 0 : 1, session.has_ended() ? null : new Error("stdin ended before ZMODEM session completed"));
92
+ }
93
+ });
94
+
95
+ setRawStdin();
96
+ stderr(`rz ready: waiting for sender, target dir ${targetDir}`);
97
+ session.start();
98
+ }
99
+
100
+ async function runWindowsBridge(targetDir) {
101
+ const requestId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;
102
+ let finished = false;
103
+
104
+ const finish = (code, error) => {
105
+ if (finished) {
106
+ return;
107
+ }
108
+ finished = true;
109
+ if (error) {
110
+ stderr(String(error && error.stack ? error.stack : error));
111
+ }
112
+ restoreStdin();
113
+ process.exitCode = code;
114
+ };
115
+
116
+ const parser = new BridgeInputParser((message) => {
117
+ try {
118
+ if (!message || message.requestId !== requestId) {
119
+ return;
120
+ }
121
+
122
+ if (message.op === "upload_cancel") {
123
+ finish(1, new Error("upload canceled"));
124
+ return;
125
+ }
126
+
127
+ if (message.op === "upload_error") {
128
+ finish(1, new Error(String(message.message || "upload failed")));
129
+ return;
130
+ }
131
+
132
+ if (message.op === "upload_finish") {
133
+ finish(0);
134
+ }
135
+ } catch (error) {
136
+ finish(1, error);
137
+ }
138
+ });
139
+
140
+ process.on("SIGINT", () => finish(130));
141
+ process.stdin.on("data", (chunk) => parser.consume(chunk));
142
+ process.stdin.on("end", () => {
143
+ if (!finished) {
144
+ finish(1, new Error("stdin ended before upload completed"));
145
+ }
146
+ });
147
+
148
+ setRawStdin();
149
+ stderr(`rz ready: waiting for sender, target dir ${targetDir}`);
150
+ emitBridgeMessage({
151
+ op: "upload_request",
152
+ requestId,
153
+ targetDir,
154
+ });
155
+ }
156
+
157
+ async function receiveOffer(offer, targetDir, completedUploads) {
158
+ const details = offer.get_details();
159
+ const originalName = details.name;
160
+ const localName = basenameSafe(originalName);
161
+ const outputPath = path.join(targetDir, localName);
162
+ const fd = fs.openSync(outputPath, "w", details.mode ? details.mode & 0o777 : 0o644);
163
+ let receivedBytes = 0;
164
+
165
+ debug(`receiving ${originalName} -> ${outputPath}`);
166
+
167
+ try {
168
+ await offer.accept({
169
+ on_input: (payload) => {
170
+ const buffer = Buffer.from(payload);
171
+ fs.writeSync(fd, buffer);
172
+ receivedBytes += buffer.length;
173
+ },
174
+ });
175
+ } finally {
176
+ fs.closeSync(fd);
177
+ }
178
+
179
+ if (details.mtime instanceof Date && !Number.isNaN(details.mtime.valueOf())) {
180
+ fs.utimesSync(outputPath, new Date(), details.mtime);
181
+ }
182
+
183
+ completedUploads.push({ path: outputPath, size: receivedBytes });
184
+ debug(`received ${outputPath}`);
185
+ }
186
+
187
+ function debug(message) {
188
+ appendDebugLog(message);
189
+ }
190
+
191
+ function formatByteCount(bytes) {
192
+ return `${Number(bytes || 0).toLocaleString()} bytes`;
193
+ }
194
+
195
+ main().catch((error) => {
196
+ restoreStdin();
197
+ stderr(String(error && error.stack ? error.stack : error));
198
+ process.exitCode = 1;
199
+ });
@@ -0,0 +1,80 @@
1
+ # This is completely optional
2
+ - I still recommend using the methods in the root README.md
3
+ - Bun's Android build is currently not supported
4
+
5
+ # Usage
6
+ - First run `bun ./packAssets.sh` to bundle the assets into `assets.tar`
7
+ - Then run the build script like this
8
+
9
+ ```shell
10
+ bun build --compile --bytecode --minify ./entry.mjs --outfile=binname
11
+ ```
12
+
13
+ - You'll get a binname executable
14
+
15
+ # Single Executable Intro
16
+
17
+ This folder contains the Bun single-exe bootstrap used by the project.
18
+
19
+ ## Entry Flow
20
+
21
+ - `entry.mjs` imports `assetsLoader.mjs` first
22
+ - `assetsLoader.mjs` loads `assets.tar` with `Bun.Archive` and mounts it as `globalThis.internalAssets`
23
+ - `assetsLoaderPromise` is exposed on `globalThis`
24
+ - The main program waits for `assetsLoaderPromise` if it exists
25
+
26
+ That keeps the main program bootable even if asset loading reports errors.
27
+
28
+ ## Assets Loading
29
+
30
+ - Bundled assets are loaded sequentially with `await file.bytes()`
31
+ - Load failures are collected and printed to `stderr`
32
+ - Asset loading never rejects the bootstrap promise
33
+ - When loading succeeds, the archive is available through `globalThis.internalAssets`
34
+
35
+ ## CLI Flags
36
+
37
+ - `--assets-list`
38
+ - Lists all entries inside bundled `assets.tar`
39
+ - Exits early before the main program starts
40
+
41
+ - `--assets-extract`
42
+ - Extracts bundled assets to the same directory as the executable
43
+ - Exits early before the main program starts
44
+
45
+ - `--assets-external`
46
+ - Skips loading bundled assets into `globalThis.internalAssets`
47
+ - Forces the main program and runtime helpers to use the external file tree
48
+ - Keeps the bootstrap alive while leaving `internalAssets` falsy
49
+
50
+ ## Adapting this folder
51
+
52
+ This single-exe folder is intended for reuse by other projects. Usually you
53
+ only need to edit these project-specific files first:
54
+
55
+ - `entry.mjs`
56
+ - `packAssets.sh`
57
+
58
+ Then the main program can import `buildEarlyExit` from `compiled.js` and call
59
+ it before normal CLI parsing. `--build-exe` and `--build-for <target>` will run
60
+ `packAssets.sh` first, so `assets.tar` is generated as part of the build flow.
61
+
62
+ ```js
63
+ const compiledHelper = await import("./single-exe/compiled.js").catch(() => null);
64
+ await compiledHelper?.buildEarlyExit?.(process.argv, "my-bin");
65
+ ```
66
+
67
+ - `--build-exe` builds with no Bun target.
68
+ - `--build-for <target>` passes `<target>` to `bun build --target=<target>`.
69
+ - The second argument is the output filename. If omitted, it defaults to `single.exe`.
70
+
71
+ The main program should also switch its repo/resource root when running as a
72
+ compiled binary. Use `IS_COMPILED` and `REPO_ROOT` from
73
+ `compiled.js`; when compiled, treat the executable directory as the repo root
74
+ used for external fallback files such as `static/`, `README.md`, or other files
75
+ packed by `packAssets.sh`.
76
+
77
+ ```js
78
+ const compiledHelper = await import("./single-exe/compiled.js").catch(() => null);
79
+ const repoRoot = compiledHelper?.REPO_ROOT
80
+ ```
@@ -0,0 +1,90 @@
1
+ const textDecoder = new TextDecoder();
2
+ const textEncoder = new TextEncoder();
3
+
4
+ export function hasInternalAssets() {
5
+ return Boolean(getAssetStore());
6
+ }
7
+
8
+ export function assetPath(...parts) {
9
+ return parts
10
+ .flatMap((part) => String(part).split(/[\\/]+/))
11
+ .filter(Boolean)
12
+ .join("/");
13
+ }
14
+
15
+ export function listInternalAssetPaths(prefix = "") {
16
+ const store = getAssetStore();
17
+ if (!store) return [];
18
+
19
+ const normalizedPrefix = assetPath(prefix);
20
+ const entries = iterateAssetKeys(store);
21
+ if (!normalizedPrefix) {
22
+ return entries.sort();
23
+ }
24
+
25
+ const base = `${normalizedPrefix}/`;
26
+ return entries.filter((path) => path === normalizedPrefix || path.startsWith(base)).sort();
27
+ }
28
+
29
+ export function listInternalAssetDirs(prefix = "") {
30
+ const normalizedPrefix = assetPath(prefix);
31
+ const base = normalizedPrefix ? `${normalizedPrefix}/` : "";
32
+ const dirs = new Set();
33
+
34
+ for (const path of listInternalAssetPaths(prefix)) {
35
+ const rest = normalizedPrefix ? path.slice(base.length) : path;
36
+ const [dir] = rest.split("/");
37
+ if (dir) dirs.add(dir);
38
+ }
39
+
40
+ return [...dirs].sort();
41
+ }
42
+
43
+ export function getInternalAsset(path) {
44
+ const store = getAssetStore();
45
+ if (!store) return null;
46
+ const key = assetPath(path);
47
+ if (store instanceof Map) return store.get(key) ?? null;
48
+ return store[key] ?? store[path] ?? null;
49
+ }
50
+
51
+ export function readInternalAssetBytes(path) {
52
+ const value = getInternalAsset(path);
53
+ if (value == null) return null;
54
+ if (value instanceof Uint8Array) return value;
55
+ if (ArrayBuffer.isView(value)) {
56
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
57
+ }
58
+ if (value instanceof ArrayBuffer) return new Uint8Array(value);
59
+ if (typeof value === "string") return textEncoder.encode(value);
60
+ return textEncoder.encode(String(value));
61
+ }
62
+
63
+ export function readInternalAssetText(path) {
64
+ const bytes = readInternalAssetBytes(path);
65
+ if (!bytes) return null;
66
+ return textDecoder.decode(bytes);
67
+ }
68
+
69
+ export function internalAssetSource(path) {
70
+ return {
71
+ name: path.split("/").pop() ?? path,
72
+ path,
73
+ async text() {
74
+ return readInternalAssetText(path) ?? "";
75
+ },
76
+ };
77
+ }
78
+
79
+ function getAssetStore() {
80
+ const store = globalThis.internalAssets;
81
+ if (!store) return null;
82
+ if (store instanceof Map) return store;
83
+ if (typeof store === "object") return store;
84
+ return null;
85
+ }
86
+
87
+ function iterateAssetKeys(store) {
88
+ if (store instanceof Map) return [...store.keys()].map(String);
89
+ return Object.keys(store);
90
+ }
@@ -0,0 +1,85 @@
1
+ import assets from "./assets.tar" with { type: "file" };
2
+ import { getExeDirname, isCompiledBinary } from "./compiled.js";
3
+
4
+ const forceExternalAssets = process.argv.includes("--assets-external");
5
+ const debugAssetsLoader = Boolean(process.env.BUNMICRO_DEBUG);
6
+ if (forceExternalAssets) {
7
+ const flagIndex = process.argv.indexOf("--assets-external");
8
+ if (flagIndex >= 0) process.argv.splice(flagIndex, 1);
9
+ }
10
+
11
+ globalThis.internalAssets = forceExternalAssets ? null : Object.create(null);
12
+ globalThis.assetsLoaderPromise = main(process.argv).catch((error) => {
13
+ console.error("# assets loader failed");
14
+ console.error(error);
15
+ return globalThis.internalAssets;
16
+ });
17
+
18
+ async function main(argv) {
19
+
20
+ if (forceExternalAssets &&
21
+ !argv.includes("--assets-list") &&
22
+ !argv.includes("--assets-extract")) {
23
+ return null;
24
+ }
25
+
26
+ const startedAt = debugAssetsLoader ? Bun.nanoseconds() : 0;
27
+
28
+ const tarball = await Bun.file(assets).bytes();
29
+ const archive = new Bun.Archive(tarball);
30
+
31
+ await cliEarlyExit(archive, argv);
32
+
33
+ const files = await archive.files();
34
+ const entries = [...files.entries()];
35
+ const assetsByPath = Object.create(null);
36
+ const errors = [];
37
+
38
+ for (const [path, file] of entries) {
39
+ try {
40
+ assetsByPath[path] = await file.bytes();
41
+ } catch (reason) {
42
+ errors.push({ path, reason });
43
+ }
44
+ }
45
+
46
+ if (errors.length > 0) {
47
+ console.error(`# Failed to load ${errors.length} bundled asset(s):`);
48
+ for (const { path, reason } of errors) {
49
+ console.error(`- ${path}`);
50
+ if (reason) {
51
+ console.error(reason);
52
+ }
53
+ }
54
+ }
55
+ if (debugAssetsLoader) {
56
+ const elapsedMs = (Bun.nanoseconds() - startedAt) / 1e6;
57
+ console.error(`Loaded assets: ${elapsedMs.toFixed(3)} ms`);
58
+ }
59
+
60
+ globalThis.internalAssets = assetsByPath;
61
+ return assetsByPath;
62
+ }
63
+
64
+ async function cliEarlyExit(archive, argv) {
65
+ if (argv.includes("--assets-list")) {
66
+ const files = await archive.files();
67
+ for (const path of [...files.keys()].sort()) {
68
+ console.log(path);
69
+ }
70
+ process.exit(0);
71
+ }
72
+
73
+ if (argv.includes("--assets-extract")) {
74
+ if (isCompiledBinary())
75
+ {
76
+ const targetDir = getExeDirname();
77
+ const extracted = await archive.extract(targetDir);
78
+ console.log(`Extracted ${extracted} asset(s) to ${targetDir}`);
79
+ } // if isCompiled
80
+ else
81
+ console.log("Assets extraction should only be used in a Bun compiled single-file executable");
82
+
83
+ process.exit(0);
84
+ }
85
+ }
@@ -0,0 +1,138 @@
1
+ import { basename, dirname, resolve } from "node:path";
2
+ import { readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import child_process from "node:child_process";
5
+
6
+
7
+ export const IS_COMPILED = isCompiledBinary();
8
+ export const REPO_ROOT = IS_COMPILED
9
+ ? getExeDirname()
10
+ : resolve(import.meta.dirname, "..");
11
+ const SINGLE_EXE_DIR = resolve(REPO_ROOT, "single-exe");
12
+ const SINGLE_EXE_ENTRY = resolve(SINGLE_EXE_DIR, "entry.mjs");
13
+
14
+
15
+ export function isCompiledBinary() {
16
+ const argv = process.argv
17
+ return Boolean(argv?.[1]?.startsWith?.("/$bunfs/"));
18
+ }
19
+
20
+ export function getExeDirname() {
21
+ const argv = process.argv
22
+ const execPath = process.execPath
23
+
24
+ const bn = basename(execPath);
25
+ if (bn.startsWith("ld") ||
26
+ bn.startsWith("libld") ||
27
+ bn.startsWith("linker") ) {
28
+ const realArgv = readFileSync("/proc/self/cmdline", "utf8").match(/[^\0]+/g);
29
+ return dirname(realArgv?.[1] ?? execPath);
30
+ }
31
+ return dirname(execPath) || process.cwd();
32
+ }
33
+
34
+ export function getDirnameFromUrl(importMetaUrl) {
35
+ return dirname(fileURLToPath(importMetaUrl));
36
+ }
37
+
38
+ export async function buildExecutable(target = "",build_outfile="single.exe") {
39
+
40
+ const outfile = resolve(process.cwd(), build_outfile);
41
+ const normalizedTarget = String(target || "").trim();
42
+ if(!globalThis.Bun || IS_COMPILED)
43
+ {
44
+ console.log("Build exe can only be run by Bun in the source tree");
45
+ return 1;
46
+ }
47
+
48
+ let bunBin=Bun.which('bun') || process.argv0;
49
+
50
+ const steps = [
51
+ {
52
+ label: "Pack assets",
53
+ cwd: SINGLE_EXE_DIR,
54
+ cmd: bunBin,
55
+ args: ["./packAssets.sh"],
56
+ },
57
+ {
58
+ label: "Compile executable",
59
+ cwd: process.cwd(),
60
+ cmd: bunBin,
61
+ args: [
62
+ "build",
63
+ "--compile",
64
+ "--bytecode",
65
+ "--minify",
66
+ SINGLE_EXE_ENTRY,
67
+ `--outfile=${build_outfile}`,
68
+ ...(normalizedTarget ? [`--target=${normalizedTarget}`] : []),
69
+ ],
70
+ },
71
+ ];
72
+
73
+ for (const step of steps) {
74
+
75
+ console.log('');
76
+ console.log(Bun?.markdown?.ansi?.('## '+step.label)||step.label);
77
+
78
+ const result = child_process.spawnSync(step.cmd, step.args, {
79
+ cwd: step.cwd,
80
+ stdio: "inherit",
81
+ env: process.env,
82
+ });
83
+
84
+ console.log("");
85
+ console.log(Bun?.markdown?.ansi?.(
86
+ '- Status: '+result.status+' for '+step.label
87
+ )||result.status);
88
+
89
+
90
+
91
+ if (result.error || result.status !== 0) {
92
+
93
+ if (result.error) {
94
+ console.error(result.error);
95
+ }
96
+
97
+ if (step.label == "Pack assets") {
98
+ console.log("Pack assets failed; continuing with the existing assets.tar if available");
99
+ }
100
+
101
+ }
102
+
103
+
104
+ } // for steps of build
105
+
106
+ if(await Bun.file(outfile).exists())
107
+ {
108
+ console.log(`Built executable: ${outfile}`);
109
+ return 0;
110
+ }
111
+ else
112
+ {
113
+ console.log(`Error while building executable: ${outfile}`);
114
+ return 1;
115
+ }
116
+ }
117
+
118
+ export const buildExe = buildExecutable;
119
+
120
+ export async function buildEarlyExit(argv = process.argv,build_outfile) {
121
+ const buildExeIndex = argv.indexOf("--build-exe");
122
+ const buildForIndex = argv.indexOf("--build-for");
123
+
124
+ if (buildExeIndex === -1 && buildForIndex === -1) {
125
+ return false;
126
+ }
127
+
128
+ if (buildForIndex !== -1) {
129
+ const target = argv[buildForIndex + 1];
130
+ if (!target || target.startsWith("-")) {
131
+ console.error("Missing value for --build-for");
132
+ process.exit(2);
133
+ }
134
+ process.exit(await buildExe(target,build_outfile));
135
+ }
136
+
137
+ process.exit(await buildExe(null,build_outfile));
138
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bun
2
+
3
+ // 1. Injects assets to global.internalAssets
4
+ // as { "./path/in/tar":file.bytes() }
5
+ // 2. Sets global.assetsLoaderPromise
6
+ import "./assetsLoader.mjs"
7
+
8
+ import "../gotty.js"
9
+
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+
3
+ sd=$(dirname "$0")
4
+
5
+ cd "$sd"/..
6
+
7
+ tar -cvf single-exe/assets.tar static README.md README.en.md
@@ -0,0 +1,13 @@
1
+ html, body, #terminal {
2
+ background: black;
3
+ height: 100%;
4
+ width: 100%;
5
+ padding: 0%;
6
+ margin: 0%;
7
+ }
8
+
9
+ .progress .progress-bar {
10
+ transition: unset;
11
+ transition-duration: 0.1s;
12
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
13
+ }
@@ -0,0 +1,61 @@
1
+ #terminal {
2
+ position: relative;
3
+ }
4
+
5
+ #kitty-overlay {
6
+ position: absolute;
7
+ inset: 0;
8
+ pointer-events: none;
9
+ overflow: hidden;
10
+ z-index: 3;
11
+ }
12
+
13
+ #kitty-overlay .kitty-image {
14
+ position: absolute;
15
+ display: block;
16
+ overflow: hidden;
17
+ pointer-events: none;
18
+ }
19
+
20
+ #kitty-overlay .kitty-image__content {
21
+ position: absolute;
22
+ display: block;
23
+ max-width: none;
24
+ max-height: none;
25
+ image-rendering: auto;
26
+ pointer-events: none;
27
+ }
28
+
29
+ .kitty-context-menu {
30
+ position: fixed;
31
+ z-index: 1000;
32
+ min-width: 144px;
33
+ padding: 6px;
34
+ border: 1px solid rgba(255, 255, 255, 0.18);
35
+ border-radius: 10px;
36
+ background: rgba(24, 28, 34, 0.96);
37
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
38
+ backdrop-filter: blur(10px);
39
+ }
40
+
41
+ .kitty-context-menu[hidden] {
42
+ display: none;
43
+ }
44
+
45
+ .kitty-context-menu__item {
46
+ display: block;
47
+ width: 100%;
48
+ margin: 0;
49
+ padding: 9px 12px;
50
+ border: 0;
51
+ border-radius: 7px;
52
+ background: transparent;
53
+ color: #f3f5f7;
54
+ font: inherit;
55
+ text-align: left;
56
+ cursor: pointer;
57
+ }
58
+
59
+ .kitty-context-menu__item:hover {
60
+ background: rgba(255, 255, 255, 0.08);
61
+ }