buninu-linux 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/LICENSES/Bun-LICENSE.md +84 -0
- package/LICENSES/GCC-Runtime-Library-Exception-3.1.txt +73 -0
- package/LICENSES/GPL-2.0.txt +338 -0
- package/LICENSES/GPL-3.0.txt +674 -0
- package/LICENSES/LGPL-2.1.txt +501 -0
- package/LICENSES/Linux-syscall-note.txt +25 -0
- package/LICENSES/musl-COPYRIGHT.txt +193 -0
- package/NOTICE.md +184 -0
- package/README.md +537 -0
- package/build-image.sh +44 -0
- package/build-uki.sh +75 -0
- package/fetch-alpine.sh +80 -0
- package/fetch-bun.sh +41 -0
- package/fetch-plus-build.sh +11 -0
- package/hello/build-hello.sh +14 -0
- package/hello/hello.c +50 -0
- package/index.js +235 -0
- package/initramfs/bin/sh +3 -0
- package/initramfs/buninu/.bashrc +11 -0
- package/initramfs/buninu/ARCHITECTURE.md +452 -0
- package/initramfs/buninu/CHANGELOG.md +580 -0
- package/initramfs/buninu/LICENSE +21 -0
- package/initramfs/buninu/README.md +1161 -0
- package/initramfs/buninu/apps/bun/make-bunBin.sh +99 -0
- package/initramfs/buninu/apps/bunmsh/CHANGELOG.md +493 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE +21 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE-MICRO +58 -0
- package/initramfs/buninu/apps/bunmsh/LICENSE-MKSH +295 -0
- package/initramfs/buninu/apps/bunmsh/PORTING.md +192 -0
- package/initramfs/buninu/apps/bunmsh/README.md +1042 -0
- package/initramfs/buninu/apps/bunmsh/bunmsh +7 -0
- package/initramfs/buninu/apps/bunmsh/bunshell.md +61 -0
- package/initramfs/buninu/apps/bunmsh/help/README.md +2237 -0
- package/initramfs/buninu/apps/bunmsh/help/alias.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/basename.md +38 -0
- package/initramfs/buninu/apps/bunmsh/help/builtin.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/bun.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/bunmsh.md +47 -0
- package/initramfs/buninu/apps/bunmsh/help/cat.md +31 -0
- package/initramfs/buninu/apps/bunmsh/help/catfancy.md +35 -0
- package/initramfs/buninu/apps/bunmsh/help/cd.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/chmod.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/clear.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/colon.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/command.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/cp.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/curl.md +181 -0
- package/initramfs/buninu/apps/bunmsh/help/cut.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/date.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/dirname.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/echo.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/env.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/eval.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/exec.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/exit.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/export.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/false.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/find.md +33 -0
- package/initramfs/buninu/apps/bunmsh/help/getopts.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/grep.md +34 -0
- package/initramfs/buninu/apps/bunmsh/help/head.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/kill.md +43 -0
- package/initramfs/buninu/apps/bunmsh/help/ln.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/ls.md +37 -0
- package/initramfs/buninu/apps/bunmsh/help/lsbun.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/lsfancy.md +37 -0
- package/initramfs/buninu/apps/bunmsh/help/md5sum.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/mkdir.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/mktemp.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/mv.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/print.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/printf.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/pspa.md +38 -0
- package/initramfs/buninu/apps/bunmsh/help/pspac.md +57 -0
- package/initramfs/buninu/apps/bunmsh/help/pwd.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/read.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/readonly.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/realpath.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/rm.md +33 -0
- package/initramfs/buninu/apps/bunmsh/help/rmdir.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/sed.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/seq.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/serve.md +50 -0
- package/initramfs/buninu/apps/bunmsh/help/set.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/sha256sum.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/shift.md +23 -0
- package/initramfs/buninu/apps/bunmsh/help/sleep.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/sort.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/source.md +23 -0
- package/initramfs/buninu/apps/bunmsh/help/tab.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/tac.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/tail.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/tee.md +25 -0
- package/initramfs/buninu/apps/bunmsh/help/test.md +30 -0
- package/initramfs/buninu/apps/bunmsh/help/time.md +29 -0
- package/initramfs/buninu/apps/bunmsh/help/touch.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/tr.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/true.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/type.md +21 -0
- package/initramfs/buninu/apps/bunmsh/help/umask.md +22 -0
- package/initramfs/buninu/apps/bunmsh/help/unalias.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/uname.md +31 -0
- package/initramfs/buninu/apps/bunmsh/help/unset.md +28 -0
- package/initramfs/buninu/apps/bunmsh/help/wc.md +27 -0
- package/initramfs/buninu/apps/bunmsh/help/whence.md +26 -0
- package/initramfs/buninu/apps/bunmsh/help/which.md +41 -0
- package/initramfs/buninu/apps/bunmsh/help/yes.md +23 -0
- package/initramfs/buninu/apps/bunmsh/index.js +7 -0
- package/initramfs/buninu/apps/bunmsh/package.json +30 -0
- package/initramfs/buninu/apps/bunmsh/serve.js +468 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/README.md +402 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/compiled.js +527 -0
- package/initramfs/buninu/apps/bunmsh/single-exe/entry.mjs +17 -0
- package/initramfs/buninu/apps/bunmsh/src/cat-fancy.js +117 -0
- package/initramfs/buninu/apps/bunmsh/src/cat-operands.js +31 -0
- package/initramfs/buninu/apps/bunmsh/src/completion.js +363 -0
- package/initramfs/buninu/apps/bunmsh/src/curl.js +1191 -0
- package/initramfs/buninu/apps/bunmsh/src/environment.js +61 -0
- package/initramfs/buninu/apps/bunmsh/src/fancy-ls.js +186 -0
- package/initramfs/buninu/apps/bunmsh/src/find.js +119 -0
- package/initramfs/buninu/apps/bunmsh/src/history.js +198 -0
- package/initramfs/buninu/apps/bunmsh/src/main.js +850 -0
- package/initramfs/buninu/apps/bunmsh/src/mouse.js +103 -0
- package/initramfs/buninu/apps/bunmsh/src/shell.js +3932 -0
- package/initramfs/buninu/apps/bunmsh/test/catfancy.test.js +102 -0
- package/initramfs/buninu/apps/bunmsh/test/curl.test.js +335 -0
- package/initramfs/buninu/apps/bunmsh/test/reference-source.sh +1 -0
- package/initramfs/buninu/apps/bunmsh/test/reference.test.js +817 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/README.md +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/bad.json +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.json +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.json5 +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonc +2 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonl +2 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.ndjson +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.toml +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.ts +15 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.xml +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.yaml +3 -0
- package/initramfs/buninu/apps/bunmsh/test/serve/data.yml +1 -0
- package/initramfs/buninu/apps/bunmsh/test/serve.test.js +241 -0
- package/initramfs/buninu/apps/bunmsh/test/shell.test.js +2092 -0
- package/initramfs/buninu/apps/bunmsh/test/shell1.test.js +1087 -0
- package/initramfs/buninu/apps/bunmsh/test/shell2.test.js +457 -0
- package/initramfs/buninu/apps/bunmsh/test/shell3.test.js +741 -0
- package/initramfs/buninu/apps/bunmsh/test/t.sh +12 -0
- package/initramfs/buninu/apps/bunx/bunx.js +172 -0
- package/initramfs/buninu/apps/cmdlist +48 -0
- package/initramfs/buninu/apps/jsgotty/LICENSE +23 -0
- package/initramfs/buninu/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
- package/initramfs/buninu/apps/jsgotty/NOTICE +21 -0
- package/initramfs/buninu/apps/jsgotty/README.en.md +294 -0
- package/initramfs/buninu/apps/jsgotty/README.md +296 -0
- package/initramfs/buninu/apps/jsgotty/client.mjs +700 -0
- package/initramfs/buninu/apps/jsgotty/env.sh +2 -0
- package/initramfs/buninu/apps/jsgotty/gotty.js +3334 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/.package-lock.json +35 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/LICENSE +20 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/README.md +548 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/browser.js +8 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/index.js +22 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/package.json +70 -0
- package/initramfs/buninu/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
- package/initramfs/buninu/apps/jsgotty/package-lock.json +46 -0
- package/initramfs/buninu/apps/jsgotty/package.json +19 -0
- package/initramfs/buninu/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
- package/initramfs/buninu/apps/jsgotty/patches/windowsTerminal.js +204 -0
- package/initramfs/buninu/apps/jsgotty/rz.js +199 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/README.md +384 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/compiled.js +498 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/entry.mjs +23 -0
- package/initramfs/buninu/apps/jsgotty/single-exe/packAssets.sh +7 -0
- package/initramfs/buninu/apps/jsgotty/static/css/index.css +13 -0
- package/initramfs/buninu/apps/jsgotty/static/css/kitty.css +61 -0
- package/initramfs/buninu/apps/jsgotty/static/css/xterm.css +218 -0
- package/initramfs/buninu/apps/jsgotty/static/css/xterm_customize.css +35 -0
- package/initramfs/buninu/apps/jsgotty/static/favicon.ico +0 -0
- package/initramfs/buninu/apps/jsgotty/static/help.md +125 -0
- package/initramfs/buninu/apps/jsgotty/static/icon.svg +66 -0
- package/initramfs/buninu/apps/jsgotty/static/icon_192.png +0 -0
- package/initramfs/buninu/apps/jsgotty/static/index.html +164 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js +31537 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.map +1 -0
- package/initramfs/buninu/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
- package/initramfs/buninu/apps/jsgotty/static/js/kitty.js +1101 -0
- package/initramfs/buninu/apps/jsgotty/static/js/windows_bridge.js +194 -0
- package/initramfs/buninu/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
- package/initramfs/buninu/apps/jsgotty/static/js/zmodem.js +1 -0
- package/initramfs/buninu/apps/jsgotty/static/manifest.json +15 -0
- package/initramfs/buninu/apps/jsgotty/sz.js +273 -0
- package/initramfs/buninu/apps/jsgotty/tests/kitty-order.test.js +58 -0
- package/initramfs/buninu/apps/jsgotty/tests/websocket-origin.test.js +54 -0
- package/initramfs/buninu/apps/jsgotty/viu.mjs +422 -0
- package/initramfs/buninu/apps/jsgotty/wgotty +62 -0
- package/initramfs/buninu/apps/jsgotty/windows-bridge-node.js +60 -0
- package/initramfs/buninu/apps/jsgotty/zmodem-node.js +262 -0
- package/initramfs/buninu/apps/jsmdcui/CHANGELOG.md +1118 -0
- package/initramfs/buninu/apps/jsmdcui/LICENSE +22 -0
- package/initramfs/buninu/apps/jsmdcui/README.md +1283 -0
- package/initramfs/buninu/apps/jsmdcui/cdp-maze.js +141 -0
- package/initramfs/buninu/apps/jsmdcui/clean.sh +9 -0
- package/initramfs/buninu/apps/jsmdcui/demos/basic.jpg +0 -0
- package/initramfs/buninu/apps/jsmdcui/demos/chinese.md +32 -0
- package/initramfs/buninu/apps/jsmdcui/demos/event.md +170 -0
- package/initramfs/buninu/apps/jsmdcui/demos/good.jpg +0 -0
- package/initramfs/buninu/apps/jsmdcui/demos/image-processor.md +366 -0
- package/initramfs/buninu/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
- package/initramfs/buninu/apps/jsmdcui/demos/img-change.md +73 -0
- package/initramfs/buninu/apps/jsmdcui/demos/imgtool-zh.md +298 -0
- package/initramfs/buninu/apps/jsmdcui/demos/imgtool.md +298 -0
- package/initramfs/buninu/apps/jsmdcui/demos/maze.md +149 -0
- package/initramfs/buninu/apps/jsmdcui/demos/reactive.md +40 -0
- package/initramfs/buninu/apps/jsmdcui/demos/reader.md +513 -0
- package/initramfs/buninu/apps/jsmdcui/demos/select.md +63 -0
- package/initramfs/buninu/apps/jsmdcui/demos/todo-zh.md +190 -0
- package/initramfs/buninu/apps/jsmdcui/demos/todo.md +191 -0
- package/initramfs/buninu/apps/jsmdcui/edit +9 -0
- package/initramfs/buninu/apps/jsmdcui/jsmdcui.sh +16 -0
- package/initramfs/buninu/apps/jsmdcui/llm-maze.txt +94 -0
- package/initramfs/buninu/apps/jsmdcui/package.json +29 -0
- package/initramfs/buninu/apps/jsmdcui/project_structure.txt +35 -0
- package/initramfs/buninu/apps/jsmdcui/runmd.mjs +1140 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/actions.md +161 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/cdp.md +130 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/colors.md +421 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/commands.md +161 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/copypaste.md +149 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/help.md +1283 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/keybindings.md +355 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/linter.md +90 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/options.md +709 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/plugins.md +544 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/help/tutorial.md +112 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1263 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +203 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/README.md +63 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/markdown.yaml +65 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
- package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/README.md +396 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsHelper.js +371 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/compiled.js +498 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/entry.mjs +17 -0
- package/initramfs/buninu/apps/jsmdcui/single-exe/packAssets.sh +7 -0
- package/initramfs/buninu/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/backup.js +165 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/buffer.js +126 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/loc.js +38 -0
- package/initramfs/buninu/apps/jsmdcui/src/buffer/message.js +29 -0
- package/initramfs/buninu/apps/jsmdcui/src/build-args.js +40 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/clean.js +172 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/colorscheme.js +99 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/config.js +125 -0
- package/initramfs/buninu/apps/jsmdcui/src/config/defaults.js +109 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/identity.mjs +26 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/rpc.mjs +1554 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/server.mjs +128 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/table-render.mjs +286 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/template-components.mjs +253 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
- package/initramfs/buninu/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
- package/initramfs/buninu/apps/jsmdcui/src/display/ansi-style.js +60 -0
- package/initramfs/buninu/apps/jsmdcui/src/highlight/highlighter.js +243 -0
- package/initramfs/buninu/apps/jsmdcui/src/highlight/parser.js +225 -0
- package/initramfs/buninu/apps/jsmdcui/src/index.js +9586 -0
- package/initramfs/buninu/apps/jsmdcui/src/lua/engine.js +68 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/archive.js +50 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/clipboard.js +278 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/commands.js +221 -0
- package/initramfs/buninu/apps/jsmdcui/src/platform/terminal.js +5 -0
- package/initramfs/buninu/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
- package/initramfs/buninu/apps/jsmdcui/src/plugins/manager.js +674 -0
- package/initramfs/buninu/apps/jsmdcui/src/runtime/encodings.js +10 -0
- package/initramfs/buninu/apps/jsmdcui/src/runtime/registry.js +134 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/events.js +263 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/screen.js +249 -0
- package/initramfs/buninu/apps/jsmdcui/src/screen/vt100.js +571 -0
- package/initramfs/buninu/apps/jsmdcui/src/shell/shell.js +70 -0
- package/initramfs/buninu/apps/jsmdcui/testapp.md +78 -0
- package/initramfs/buninu/apps/jsmdcui/tests/assets-helper.test.js +150 -0
- package/initramfs/buninu/apps/jsmdcui/tests/backup.test.js +158 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cdp-security.test.js +32 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cdp-websocket-test.html +46 -0
- package/initramfs/buninu/apps/jsmdcui/tests/cmphex3b64.js +95 -0
- package/initramfs/buninu/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
- package/initramfs/buninu/apps/jsmdcui/tests/config-settings.test.js +52 -0
- package/initramfs/buninu/apps/jsmdcui/tests/demo.test.js +448 -0
- package/initramfs/buninu/apps/jsmdcui/tests/docs-sync.test.js +14 -0
- package/initramfs/buninu/apps/jsmdcui/tests/fence-events.test.js +1293 -0
- package/initramfs/buninu/apps/jsmdcui/tests/heading-ids.test.js +559 -0
- package/initramfs/buninu/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
- package/initramfs/buninu/apps/jsmdcui/tests/id-collision.test.js +514 -0
- package/initramfs/buninu/apps/jsmdcui/tests/jmigt.js +16 -0
- package/initramfs/buninu/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
- package/initramfs/buninu/apps/jsmdcui/tests/key-event.md +10 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-demo.md +184 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-images.test.js +288 -0
- package/initramfs/buninu/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
- package/initramfs/buninu/apps/jsmdcui/tests/platform-commands.test.js +18 -0
- package/initramfs/buninu/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
- package/initramfs/buninu/apps/jsmdcui/tests/pty-demo.js +492 -0
- package/initramfs/buninu/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
- package/initramfs/buninu/apps/jsmdcui/tests/table-render.test.js +150 -0
- package/initramfs/buninu/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
- package/initramfs/buninu/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
- package/initramfs/buninu/apps/jsmdcui/tests/template-components.test.js +422 -0
- package/initramfs/buninu/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
- package/initramfs/buninu/apps/jsmdcui/tests/textarea.md +8 -0
- package/initramfs/buninu/apps/jsmdcui/tests/tui-links.test.js +298 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wui.test.js +108 -0
- package/initramfs/buninu/apps/jsmdcui/tests/wv-client.js +96 -0
- package/initramfs/buninu/apps/jsmdcui/tui +7 -0
- package/initramfs/buninu/apps/jsmdcui/wui +9 -0
- package/initramfs/buninu/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
- package/initramfs/buninu/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
- package/initramfs/buninu/apps/musl-la/LICENSE_musl.txt +193 -0
- package/initramfs/buninu/apps/musl-la/NOTICE +41 -0
- package/initramfs/buninu/apps/musl-la/ld-musl-aarch64.so.1 +0 -0
- package/initramfs/buninu/apps/musl-la/libgcc_s.so.1 +0 -0
- package/initramfs/buninu/apps/musl-la/libstdc++.so.6 +0 -0
- package/initramfs/buninu/apps/musl-la/musl-la.sh +36 -0
- package/initramfs/buninu/apps/native-bridge/native-bridge.js +199 -0
- package/initramfs/buninu/apps/native-bridge/package.json +8 -0
- package/initramfs/buninu/apps/tts/tts.js +214 -0
- package/initramfs/buninu/apps/xclip/xclip.js +121 -0
- package/initramfs/buninu/apps/xdg-open/xdg-open.js +151 -0
- package/initramfs/buninu/bin/bun.bat +37 -0
- package/initramfs/buninu/bin/bun.sh +57 -0
- package/initramfs/buninu/bin/buninu-help.bat +4 -0
- package/initramfs/buninu/bin/buninu-help.sh +7 -0
- package/initramfs/buninu/bin/bunmsh.bat +3 -0
- package/initramfs/buninu/bin/bunmsh.sh +5 -0
- package/initramfs/buninu/bin/bunx.bat +3 -0
- package/initramfs/buninu/bin/glow.bat +3 -0
- package/initramfs/buninu/bin/glow.sh +5 -0
- package/initramfs/buninu/bin/init.js +779 -0
- package/initramfs/buninu/bin/install.js +570 -0
- package/initramfs/buninu/bin/jmi.bat +3 -0
- package/initramfs/buninu/bin/jmi.sh +5 -0
- package/initramfs/buninu/bin/jsgotty.bat +3 -0
- package/initramfs/buninu/bin/jsgotty.sh +5 -0
- package/initramfs/buninu/bin/jsmdcui.bat +11 -0
- package/initramfs/buninu/bin/libsh-loader.c +135 -0
- package/initramfs/buninu/bin/libsh-loader.so +0 -0
- package/initramfs/buninu/bin/multicall.sh +103 -0
- package/initramfs/buninu/bin/native-bridge.bat +3 -0
- package/initramfs/buninu/bin/rz.bat +3 -0
- package/initramfs/buninu/bin/rz.sh +5 -0
- package/initramfs/buninu/bin/shc.js +5 -0
- package/initramfs/buninu/bin/showimg.bat +3 -0
- package/initramfs/buninu/bin/showimg.sh +5 -0
- package/initramfs/buninu/bin/switch_to_android.sh +9 -0
- package/initramfs/buninu/bin/switch_to_linux.sh +7 -0
- package/initramfs/buninu/bin/sz.bat +3 -0
- package/initramfs/buninu/bin/sz.sh +5 -0
- package/initramfs/buninu/bin/tts.bat +3 -0
- package/initramfs/buninu/bin/xclip.bat +3 -0
- package/initramfs/buninu/bin/xdg-open.bat +3 -0
- package/initramfs/buninu/demo-server.js +64 -0
- package/initramfs/buninu/icon.png +0 -0
- package/initramfs/buninu/package.json +59 -0
- package/initramfs/etc/resolv.conf +1 -0
- package/initramfs/init.js +339 -0
- package/initramfs/lib/ld-musl-x86_64.so.1 +0 -0
- package/initramfs/lib/libc.musl-x86_64.so.1 +0 -0
- package/initramfs/lib/libgcc_s.so.1 +0 -0
- package/initramfs/lib/libstdc++.so.6 +0 -0
- package/initramfs/usr/bin/env +7 -0
- package/package.json +42 -0
- package/run-qemu.sh +44 -0
- package/scripts/fetch.sh +26 -0
- package/scripts/pack-initramfs.sh +41 -0
- package/test/build-init-bootstrap.sh +23 -0
- package/test/init-bootstrap.c +55 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { join, posix, sep } from "node:path";
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { IS_COMPILED, REPO_ROOT } from "./compiled.js";
|
|
5
|
+
import { pkg } from "./assetsPacker.js";
|
|
6
|
+
|
|
7
|
+
const textDecoder = new TextDecoder();
|
|
8
|
+
const textEncoder = new TextEncoder();
|
|
9
|
+
|
|
10
|
+
// This package own namespace inside a shared archive. Matches what
|
|
11
|
+
// `assetsPacker -p` writes, and what `--asset ./build/assets` lands at
|
|
12
|
+
// under /$bunfs/root, so one key reaches either back end.
|
|
13
|
+
export const SELF = `assets/${pkg.name}@${pkg.version}`;
|
|
14
|
+
|
|
15
|
+
// "" when this build packed flat keys, SELF when it packed namespaced
|
|
16
|
+
// ones. Detected from what is actually there rather than declared by a
|
|
17
|
+
// build flag, which can disagree with the packer and fail silently.
|
|
18
|
+
//
|
|
19
|
+
// NOTE: nothing reads this yet; the lookups below are still flat.
|
|
20
|
+
//
|
|
21
|
+
// Lazy because the tar back end fills globalThis.internalAssets
|
|
22
|
+
// asynchronously, so module-load time is too early to look.
|
|
23
|
+
let detectedPrefix;
|
|
24
|
+
|
|
25
|
+
export function assetPrefix() {
|
|
26
|
+
if (detectedPrefix === undefined) detectedPrefix = detectPrefix();
|
|
27
|
+
return detectedPrefix;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function detectPrefix() {
|
|
31
|
+
const store = getAssetStore();
|
|
32
|
+
|
|
33
|
+
if (store) {
|
|
34
|
+
const keys = store instanceof Map ? store.keys() : Object.keys(store);
|
|
35
|
+
for (const key of keys) if (key.startsWith(SELF + "/")) return SELF;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const base = bunfsBase();
|
|
39
|
+
if (base && existsSync(join(base, SELF))) return SELF;
|
|
40
|
+
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// `--assets-external` means "ignore what is embedded". The tar loader
|
|
45
|
+
// signals it by setting the store to null; with no loader in the graph
|
|
46
|
+
// (the --asset back end) it stays undefined, so only null counts.
|
|
47
|
+
//
|
|
48
|
+
// Without this the bunfs branch below stayed live in tar builds too, and
|
|
49
|
+
// since it is rooted at the binary's own /$bunfs/root, an external run
|
|
50
|
+
// enumerated the executable and its embedded tar as if they were assets.
|
|
51
|
+
function externalAssets() {
|
|
52
|
+
return globalThis.internalAssets === null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Whether THIS package has anything embedded. A bare store check was
|
|
56
|
+
// true even for an empty one, which sent every caller down the internal
|
|
57
|
+
// branch to find nothing and never try the disk fallback.
|
|
58
|
+
export function hasInternalAssets() {
|
|
59
|
+
return listInternalAssetPaths().length > 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function assetPath(...parts) {
|
|
63
|
+
return parts
|
|
64
|
+
.flatMap((part) => String(part).split(/[\\/]+/))
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.join("/");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function decodeHtmlAttribute(value) {
|
|
70
|
+
return String(value ?? "").replace(
|
|
71
|
+
/&(?:amp|quot|apos|lt|gt|#39|#x27|#\d+|#x[\da-f]+);/gi,
|
|
72
|
+
(entity) => {
|
|
73
|
+
const named = {
|
|
74
|
+
"&": "&",
|
|
75
|
+
""": "\"",
|
|
76
|
+
"'": "'",
|
|
77
|
+
"<": "<",
|
|
78
|
+
">": ">",
|
|
79
|
+
"'": "'",
|
|
80
|
+
"'": "'",
|
|
81
|
+
}[entity.toLowerCase()];
|
|
82
|
+
if (named != null) return named;
|
|
83
|
+
const hex = /^&#x([\da-f]+);$/i.exec(entity);
|
|
84
|
+
const decimal = /^&#(\d+);$/.exec(entity);
|
|
85
|
+
const codePoint = Number.parseInt(hex?.[1] ?? decimal?.[1] ?? "", hex ? 16 : 10);
|
|
86
|
+
try {
|
|
87
|
+
return Number.isInteger(codePoint) ? String.fromCodePoint(codePoint) : entity;
|
|
88
|
+
} catch {
|
|
89
|
+
return entity;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function canonicalHtmlBundleImageHref(input, { htmlAttribute = false } = {}) {
|
|
96
|
+
let value = String(input ?? "");
|
|
97
|
+
if (htmlAttribute) value = decodeHtmlAttribute(value);
|
|
98
|
+
try {
|
|
99
|
+
return decodeURIComponent(value);
|
|
100
|
+
} catch {
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function findHtmlBundleAsset(homepage, publicPath, {
|
|
106
|
+
contentTypePrefix = "",
|
|
107
|
+
} = {}) {
|
|
108
|
+
if (!Array.isArray(homepage?.files)) return null;
|
|
109
|
+
const name = posix.basename(String(publicPath ?? "").replace(/[?#].*$/, ""));
|
|
110
|
+
for (const file of homepage.files) {
|
|
111
|
+
if (file?.loader !== "file") continue;
|
|
112
|
+
const contentType = String(file.headers?.["content-type"] ?? "");
|
|
113
|
+
if (contentTypePrefix && !contentType.startsWith(contentTypePrefix)) continue;
|
|
114
|
+
if (posix.basename(String(file.path ?? "")) === name) return file;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function findHtmlBundleImageAsset(homepage, publicPath) {
|
|
120
|
+
return findHtmlBundleAsset(homepage, publicPath, {
|
|
121
|
+
contentTypePrefix: "image/",
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function htmlBundleImageAssetPath(homepage, publicPath) {
|
|
126
|
+
return findHtmlBundleImageAsset(homepage, publicPath)?.path ?? null;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export async function buildHtmlBundleImageMap(
|
|
130
|
+
homepage,
|
|
131
|
+
sourceAttribute = "data-mdcui-src",
|
|
132
|
+
) {
|
|
133
|
+
const images = new Map();
|
|
134
|
+
if (!homepage?.index || !Array.isArray(homepage.files)) return images;
|
|
135
|
+
const html = await Bun.file(homepage.index).text();
|
|
136
|
+
for (const tag of html.match(/<img\b[^>]*>/gi) ?? []) {
|
|
137
|
+
const rawHref = htmlTagAttribute(tag, sourceAttribute);
|
|
138
|
+
const publicPath = htmlTagAttribute(tag, "src");
|
|
139
|
+
if (rawHref == null || publicPath == null) continue;
|
|
140
|
+
const bundledPath = htmlBundleImageAssetPath(homepage, decodeHtmlAttribute(publicPath));
|
|
141
|
+
if (!bundledPath) continue;
|
|
142
|
+
images.set(
|
|
143
|
+
canonicalHtmlBundleImageHref(rawHref, { htmlAttribute: true }),
|
|
144
|
+
bundledPath,
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
return images;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// `bun build --compile --asset` puts the files at real paths under
|
|
151
|
+
// import.meta.dir instead of into the tar map. Only in a compiled
|
|
152
|
+
// binary: in the source tree this file sits in single-exe/, which is
|
|
153
|
+
// not the asset root.
|
|
154
|
+
function bunfsBase() {
|
|
155
|
+
return IS_COMPILED && !externalAssets() ? import.meta.dir : null;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Store-space keys for every regular file under <base>/<sub>.
|
|
159
|
+
//
|
|
160
|
+
// NOTE: with no namespace, <sub> is "" and the scan starts at
|
|
161
|
+
// /$bunfs/root, which also holds the executable and any file-loader
|
|
162
|
+
// assets. Nothing marks those apart from real assets, so pack with -p
|
|
163
|
+
// when the --asset back end is in play.
|
|
164
|
+
function walkBunfs(base, sub) {
|
|
165
|
+
const dir = sub ? join(base, sub) : base;
|
|
166
|
+
|
|
167
|
+
let names;
|
|
168
|
+
try {
|
|
169
|
+
names = readdirSync(dir, { recursive: true });
|
|
170
|
+
} catch {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const out = [];
|
|
175
|
+
|
|
176
|
+
for (const name of names) {
|
|
177
|
+
const rel = String(name).split(sep).join("/");
|
|
178
|
+
|
|
179
|
+
try {
|
|
180
|
+
if (!statSync(join(dir, String(name))).isFile()) continue;
|
|
181
|
+
} catch {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
out.push(sub ? `${sub}/${rel}` : rel);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return out;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Callers always speak package-relative keys. This is the one place
|
|
192
|
+
// those become store keys, so the namespace stays invisible to them.
|
|
193
|
+
// Exported because a caller rolling its own fallback needs the same
|
|
194
|
+
// answer — `--assets-extract` writes the archive under these keys.
|
|
195
|
+
export function getAssetKey(path) {
|
|
196
|
+
const key = assetPath(path);
|
|
197
|
+
const at = assetPrefix();
|
|
198
|
+
return at ? (key ? `${at}/${key}` : at) : key;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Where the disk fallback looks for a package-relative key.
|
|
202
|
+
//
|
|
203
|
+
// A source checkout has the plain path. A compiled binary does not:
|
|
204
|
+
// `--assets-extract` writes the archive exactly as packed, namespace
|
|
205
|
+
// included, so the extracted `README.md` lands at
|
|
206
|
+
// `<exe dir>/assets/<name>@<version>/README.md` and the plain join
|
|
207
|
+
// misses it. `assetPrefix()` cannot answer this — with
|
|
208
|
+
// `--assets-external` there is no store to detect it from, which is
|
|
209
|
+
// precisely when the fallback runs — so try SELF and keep the plain
|
|
210
|
+
// path for archives that were packed flat.
|
|
211
|
+
export function assetDiskPath(path) {
|
|
212
|
+
const key = assetPath(path);
|
|
213
|
+
const plain = join(REPO_ROOT, key);
|
|
214
|
+
|
|
215
|
+
if (!IS_COMPILED) return plain;
|
|
216
|
+
|
|
217
|
+
const namespaced = join(REPO_ROOT, SELF, key);
|
|
218
|
+
return existsSync(namespaced) ? namespaced : plain;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function listInternalAssetPaths(prefix = "") {
|
|
222
|
+
const at = assetPrefix();
|
|
223
|
+
const wanted = getAssetKey(prefix);
|
|
224
|
+
const store = getAssetStore();
|
|
225
|
+
const found = new Set();
|
|
226
|
+
|
|
227
|
+
if (store) for (const key of iterateAssetKeys(store)) found.add(key);
|
|
228
|
+
|
|
229
|
+
const base = bunfsBase();
|
|
230
|
+
if (base) for (const key of walkBunfs(base, wanted)) found.add(key);
|
|
231
|
+
|
|
232
|
+
let entries = [...found];
|
|
233
|
+
|
|
234
|
+
if (wanted) {
|
|
235
|
+
const base = `${wanted}/`;
|
|
236
|
+
entries = entries.filter((path) => path === wanted || path.startsWith(base));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Hand the namespace back off on the way out, or every caller that
|
|
240
|
+
// matches on the returned paths would have to know about it.
|
|
241
|
+
if (at) {
|
|
242
|
+
const cut = at.length + 1;
|
|
243
|
+
entries = entries.filter((path) => path.startsWith(at + "/")).map((path) => path.slice(cut));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return entries.sort();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
export function listInternalAssetDirs(prefix = "") {
|
|
250
|
+
const normalizedPrefix = assetPath(prefix);
|
|
251
|
+
const base = normalizedPrefix ? `${normalizedPrefix}/` : "";
|
|
252
|
+
const dirs = new Set();
|
|
253
|
+
|
|
254
|
+
for (const path of listInternalAssetPaths(prefix)) {
|
|
255
|
+
const rest = normalizedPrefix ? path.slice(base.length) : path;
|
|
256
|
+
const [dir] = rest.split("/");
|
|
257
|
+
if (dir) dirs.add(dir);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return [...dirs].sort();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
export function getInternalAsset(path) {
|
|
264
|
+
const key = getAssetKey(path);
|
|
265
|
+
|
|
266
|
+
const store = getAssetStore();
|
|
267
|
+
if (store) {
|
|
268
|
+
const hit = store instanceof Map ? store.get(key) : (store[key] ?? store[path]);
|
|
269
|
+
if (hit != null) return hit;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Tar first so an existing build keeps its exact behaviour; the
|
|
273
|
+
// --asset back end answers whatever the tar does not hold.
|
|
274
|
+
const base = bunfsBase();
|
|
275
|
+
if (base) {
|
|
276
|
+
try {
|
|
277
|
+
return readFileSync(join(base, key));
|
|
278
|
+
} catch {}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export function readInternalAssetBytes(path) {
|
|
285
|
+
const value = getInternalAsset(path);
|
|
286
|
+
if (value == null) return null;
|
|
287
|
+
if (value instanceof Uint8Array) return value;
|
|
288
|
+
if (ArrayBuffer.isView(value)) {
|
|
289
|
+
return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
290
|
+
}
|
|
291
|
+
if (value instanceof ArrayBuffer) return new Uint8Array(value);
|
|
292
|
+
if (typeof value === "string") return textEncoder.encode(value);
|
|
293
|
+
return textEncoder.encode(String(value));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export function readInternalAssetText(path) {
|
|
297
|
+
const bytes = readInternalAssetBytes(path);
|
|
298
|
+
if (!bytes) return null;
|
|
299
|
+
return textDecoder.decode(bytes);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// The fallback reads through node:fs so the same call works under plain
|
|
303
|
+
// Node, which is the whole point of keeping the loader out of the main
|
|
304
|
+
// program's module graph.
|
|
305
|
+
export async function readAssetText(path) {
|
|
306
|
+
const internal = readInternalAssetText(path);
|
|
307
|
+
if (internal != null) return internal;
|
|
308
|
+
|
|
309
|
+
// TextDecoder drops a leading BOM, so the embedded path never returns
|
|
310
|
+
// one; readFile keeps it. Strip it here or the same file reads
|
|
311
|
+
// differently depending on whether it was embedded.
|
|
312
|
+
return (await readFile(assetDiskPath(path), "utf8")).replace(/^\uFEFF/, "");
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export async function readAssetBytes(path) {
|
|
316
|
+
const internal = readInternalAssetBytes(path);
|
|
317
|
+
if (internal) return internal;
|
|
318
|
+
|
|
319
|
+
const buf = await readFile(assetDiskPath(path));
|
|
320
|
+
|
|
321
|
+
// Buffer is a Uint8Array, but hand back a plain one so callers cannot
|
|
322
|
+
// come to depend on the Buffer-only methods.
|
|
323
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Sync twins of readAssetText / readAssetBytes, for callers that cannot
|
|
327
|
+
// await — argument parsing, module init, CommonJS programs. Same lookup
|
|
328
|
+
// and same fallback; only the disk read differs (node:fs sync).
|
|
329
|
+
export function readAssetTextSync(path) {
|
|
330
|
+
const internal = readInternalAssetText(path);
|
|
331
|
+
if (internal != null) return internal;
|
|
332
|
+
|
|
333
|
+
return readFileSync(assetDiskPath(path), "utf8").replace(/^\uFEFF/, "");
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export function readAssetBytesSync(path) {
|
|
337
|
+
const internal = readInternalAssetBytes(path);
|
|
338
|
+
if (internal) return internal;
|
|
339
|
+
|
|
340
|
+
const buf = readFileSync(assetDiskPath(path));
|
|
341
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function internalAssetSource(path) {
|
|
345
|
+
return {
|
|
346
|
+
name: path.split("/").pop() ?? path,
|
|
347
|
+
path,
|
|
348
|
+
async text() {
|
|
349
|
+
return readInternalAssetText(path) ?? "";
|
|
350
|
+
},
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function getAssetStore() {
|
|
355
|
+
const store = globalThis.internalAssets;
|
|
356
|
+
if (!store) return null;
|
|
357
|
+
if (store instanceof Map) return store;
|
|
358
|
+
if (typeof store === "object") return store;
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function iterateAssetKeys(store) {
|
|
363
|
+
if (store instanceof Map) return [...store.keys()].map(String);
|
|
364
|
+
return Object.keys(store);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function htmlTagAttribute(tag, name) {
|
|
368
|
+
const escapedName = String(name).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
369
|
+
const match = String(tag).match(new RegExp(`\\b${escapedName}\\s*=\\s*([\"'])(.*?)\\1`, "i"));
|
|
370
|
+
return match?.[2] ?? null;
|
|
371
|
+
}
|
|
@@ -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.ASSETS_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,218 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
// Change these 2 lines for
|
|
4
|
+
// the relative assets root if needed
|
|
5
|
+
import pkg from "../package.json" with { type: "json" };
|
|
6
|
+
export { pkg };
|
|
7
|
+
export const ASSETS_ROOT = "..";
|
|
8
|
+
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import { cpSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
12
|
+
|
|
13
|
+
const PKG_ROOT = path.resolve(import.meta.dirname, ASSETS_ROOT);
|
|
14
|
+
|
|
15
|
+
if (import.meta.main) {
|
|
16
|
+
if (process.argv.includes("-h") || process.argv.includes("--help")) {
|
|
17
|
+
const help = `
|
|
18
|
+
# Single-file executable assets packer
|
|
19
|
+
|
|
20
|
+
Packs the \`assets\` list from \`package.json\`, folders recursively.
|
|
21
|
+
Reads \`${pkg.name}@${pkg.version}\` from \`../package.json\`.
|
|
22
|
+
|
|
23
|
+
## Options
|
|
24
|
+
|
|
25
|
+
- \`-f PATH\` — where to pack to. Defaults to \`./assets.tar\`
|
|
26
|
+
- a \`.tar\` file picks tar mode
|
|
27
|
+
- an existing folder picks folder mode
|
|
28
|
+
- \`-r\` \`--append\` — merge into an existing archive instead of replacing it
|
|
29
|
+
- a repacked path *replaces* its member rather than duplicating it,
|
|
30
|
+
unlike real \`tar -r\`
|
|
31
|
+
- use it for every step of a multi-package relay
|
|
32
|
+
- \`-p [PREFIX]\` — namespace this package's members inside a shared archive
|
|
33
|
+
- bare \`-p\` means \`assets/${pkg.name}@${pkg.version}\`
|
|
34
|
+
- omit it for a single-project build, which keeps the flat key space
|
|
35
|
+
- \`--dry\` — print the resolved settings and exit without writing
|
|
36
|
+
- \`-h\` \`--help\` — this text
|
|
37
|
+
|
|
38
|
+
## Two modes, one key space
|
|
39
|
+
|
|
40
|
+
- **tar mode** feeds \`import x from "./assets.tar" with { type: "file" }\`
|
|
41
|
+
- **folder mode** feeds \`bun build --compile --asset ./build/assets\`
|
|
42
|
+
- the folder must already exist
|
|
43
|
+
- \`--asset\` keeps only the basename of the path it is given, so pass the
|
|
44
|
+
assets root itself: \`-f /path/to/build/assets\` puts this package under
|
|
45
|
+
\`build/assets/${pkg.name}@${pkg.version}/\`
|
|
46
|
+
|
|
47
|
+
tar mode with \`-p\` and folder mode into \`build/assets\` produce the same keys,
|
|
48
|
+
so \`assetsHelper\` reads either back end with one set of paths.
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
console.log(Bun?.markdown?.ansi?.(help) ?? help);
|
|
52
|
+
} else {
|
|
53
|
+
await main();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function main(argv = process.argv) {
|
|
58
|
+
console.log("Packing", pkg.name + "@" + pkg.version);
|
|
59
|
+
|
|
60
|
+
let aindex = argv.indexOf("-f");
|
|
61
|
+
|
|
62
|
+
const appendMode = argv.includes("-r") || argv.includes("--append");
|
|
63
|
+
|
|
64
|
+
// Namespace for this package's members inside a shared archive.
|
|
65
|
+
// "-p" alone means `assets/<name>@<version>`, matching what
|
|
66
|
+
// `bun build --compile --asset ./build/assets` puts in /$bunfs/root
|
|
67
|
+
// (that flag keeps only the basename of the path it is given), so
|
|
68
|
+
// both back ends answer to the same keys. Empty (the default) keeps
|
|
69
|
+
// the flat key space a single-project build expects.
|
|
70
|
+
let pindex = argv.indexOf("-p");
|
|
71
|
+
if (pindex == -1) pindex = argv.indexOf("--prefix");
|
|
72
|
+
|
|
73
|
+
const prefix =
|
|
74
|
+
pindex == -1
|
|
75
|
+
? ""
|
|
76
|
+
: (argv[pindex + 1] ?? "").startsWith("-") || argv[pindex + 1] == null
|
|
77
|
+
? `assets/${pkg.name}@${pkg.version}`
|
|
78
|
+
: argv[pindex + 1];
|
|
79
|
+
|
|
80
|
+
// A missing value would silently resolve the next flag as a filename
|
|
81
|
+
// ("-f -r" -> <cwd>/-r), so refuse it rather than pack somewhere odd.
|
|
82
|
+
if (aindex != -1 && (argv[aindex + 1] == null || argv[aindex + 1].startsWith("-"))) {
|
|
83
|
+
console.error("-f needs a file or folder path");
|
|
84
|
+
return 2;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Resolved against the caller's cwd so every later consumer agrees on
|
|
88
|
+
// what it points at: `mkdir` runs in the process cwd while the copy
|
|
89
|
+
// loop runs in PKG_ROOT, and a relative -f would mean two places.
|
|
90
|
+
const archive = aindex == -1 ? path.join(import.meta.dir, "assets.tar") : path.resolve(argv[aindex + 1]);
|
|
91
|
+
|
|
92
|
+
const folderMode = existsSync(archive) && !(await Bun.file(archive).exists());
|
|
93
|
+
|
|
94
|
+
const folderPath = folderMode ? path.join(archive, pkg.name + "@" + pkg.version) : "";
|
|
95
|
+
|
|
96
|
+
console.log({
|
|
97
|
+
appendMode,
|
|
98
|
+
archive,
|
|
99
|
+
prefix,
|
|
100
|
+
folderMode,
|
|
101
|
+
folderPath,
|
|
102
|
+
PKG_ROOT,
|
|
103
|
+
assets: pkg.assets,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
if (argv.includes("--dry")) return 0;
|
|
107
|
+
|
|
108
|
+
if (folderMode) await Bun.$`mkdir -p ${folderPath}`;
|
|
109
|
+
|
|
110
|
+
// No assets field in package.json
|
|
111
|
+
if (!Array.isArray(pkg.assets) || pkg.assets.length == 0) {
|
|
112
|
+
console.error("Nothing to pack!");
|
|
113
|
+
|
|
114
|
+
if (folderMode) {
|
|
115
|
+
console.error("Defaults to package.json");
|
|
116
|
+
await Bun.write(path.join(folderPath, "package.json"), JSON.stringify(pkg, null, 1));
|
|
117
|
+
} // assets.tar mode
|
|
118
|
+
else {
|
|
119
|
+
const file = Bun.file(archive);
|
|
120
|
+
|
|
121
|
+
// Leave a real archive alone; only stand one up when it is
|
|
122
|
+
// missing (or the zero-byte file that is not a valid tar), so
|
|
123
|
+
// entry.mjs's `with { type: "file" }` import still resolves.
|
|
124
|
+
if ((await file.exists()) && file.size > 0) return 0;
|
|
125
|
+
|
|
126
|
+
console.error("Writing a placeholder assets tar");
|
|
127
|
+
|
|
128
|
+
await Bun.Archive.write(archive, {
|
|
129
|
+
[`assets/${pkg.name}@${pkg.version}/package.json`]: JSON.stringify(pkg, null, 1),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
} // assets present in package.json
|
|
133
|
+
else {
|
|
134
|
+
if (folderMode) {
|
|
135
|
+
// Mirror the asset's own relative path, so the folder layout
|
|
136
|
+
// matches the tar layout. `cp -R src/cui/server.mjs <dir>` would
|
|
137
|
+
// drop the src/cui/ prefix and land it as <dir>/server.mjs.
|
|
138
|
+
for (let i of pkg.assets) {
|
|
139
|
+
const dest = path.join(folderPath, i);
|
|
140
|
+
|
|
141
|
+
mkdirSync(path.dirname(dest), { recursive: true });
|
|
142
|
+
cpSync(path.join(PKG_ROOT, i), dest, { recursive: true });
|
|
143
|
+
|
|
144
|
+
console.log(i);
|
|
145
|
+
}
|
|
146
|
+
} // tar mode
|
|
147
|
+
else {
|
|
148
|
+
// Everything goes through Bun.Archive: system tar is not portable
|
|
149
|
+
// enough here (toybox has no -r at all, and its --xform exits 0
|
|
150
|
+
// while writing a corrupt file). Creating is appending to nothing.
|
|
151
|
+
if (!appendMode) rmSync(archive, { force: true });
|
|
152
|
+
|
|
153
|
+
return await tar_rvf(archive, pkg.assets, PKG_ROOT, prefix);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} // end of main
|
|
157
|
+
|
|
158
|
+
// Stands in for `tar -rvf`, which toybox tar does not implement.
|
|
159
|
+
// Reads the existing members, adds `filesArray` (paths relative to
|
|
160
|
+
// `cwd`, folders walked recursively), and writes the archive back.
|
|
161
|
+
// Unlike real tar -r, a repacked path replaces its member instead of
|
|
162
|
+
// becoming a second one with the same name.
|
|
163
|
+
//
|
|
164
|
+
// `prefix` is prepended to every member name. Member names are built
|
|
165
|
+
// here as plain strings, so this does not depend on tar's --transform
|
|
166
|
+
// (toybox's --xform is broken: it exits 0 and writes a corrupt file).
|
|
167
|
+
export async function tar_rvf(archive, filesArray, cwd, prefix = "") {
|
|
168
|
+
const entries = new Map();
|
|
169
|
+
const file = Bun.file(archive);
|
|
170
|
+
const at = prefix ? prefix.replace(/[\\/]+$/, "") + "/" : "";
|
|
171
|
+
|
|
172
|
+
if (await file.exists()) {
|
|
173
|
+
const bytes = await file.bytes();
|
|
174
|
+
|
|
175
|
+
if (bytes.byteLength > 0)
|
|
176
|
+
for (const [member, blob] of await new Bun.Archive(bytes).files()) entries.set(member, await blob.bytes());
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
for (const asset of filesArray) {
|
|
180
|
+
const full = path.join(cwd, asset);
|
|
181
|
+
|
|
182
|
+
// One unreadable path must not take the whole relay down.
|
|
183
|
+
let stat;
|
|
184
|
+
try {
|
|
185
|
+
stat = statSync(full);
|
|
186
|
+
} catch {
|
|
187
|
+
console.error(`Skipping unreadable asset: ${asset}`);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (!stat.isDirectory()) {
|
|
192
|
+
entries.set(at + asset, await Bun.file(full).bytes());
|
|
193
|
+
console.log(at + asset);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
for (const rel of readdirSync(full, { recursive: true })) {
|
|
198
|
+
const child = path.join(full, String(rel));
|
|
199
|
+
|
|
200
|
+
// statSync follows symlinks, so a dangling one throws here.
|
|
201
|
+
let childStat;
|
|
202
|
+
try {
|
|
203
|
+
childStat = statSync(child);
|
|
204
|
+
} catch {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
if (!childStat.isFile()) continue;
|
|
208
|
+
|
|
209
|
+
const member = at + asset + "/" + String(rel).split(path.sep).join("/");
|
|
210
|
+
entries.set(member, await Bun.file(child).bytes());
|
|
211
|
+
console.log(member);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
await Bun.Archive.write(archive, Object.fromEntries(entries));
|
|
216
|
+
|
|
217
|
+
return 0;
|
|
218
|
+
}
|