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,61 @@
|
|
|
1
|
+
export function environmentValue(env, name, platform = process.platform) {
|
|
2
|
+
if (Object.hasOwn(env, name)) return env[name];
|
|
3
|
+
if (platform !== "win32") return undefined;
|
|
4
|
+
const key = Object.keys(env).find((candidate) => candidate.toLowerCase() === name.toLowerCase());
|
|
5
|
+
return key === undefined ? undefined : env[key];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function canonicalEnvironment(env, platform = process.platform) {
|
|
9
|
+
const output = { ...env };
|
|
10
|
+
if (platform !== "win32") return output;
|
|
11
|
+
const canonicalize = (name) => {
|
|
12
|
+
const keys = Object.keys(output).filter((key) => key.toLowerCase() === name.toLowerCase());
|
|
13
|
+
if (!keys.length) return undefined;
|
|
14
|
+
const value = output[keys.at(-1)];
|
|
15
|
+
for (const key of keys) delete output[key];
|
|
16
|
+
output[name] = value;
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
if (canonicalize("PATH") === undefined) delete output.PATH;
|
|
20
|
+
let home = canonicalize("HOME");
|
|
21
|
+
if (!home) {
|
|
22
|
+
home = environmentValue(output, "USERPROFILE", platform);
|
|
23
|
+
if (!home) {
|
|
24
|
+
const drive = environmentValue(output, "HOMEDRIVE", platform) ?? "";
|
|
25
|
+
const path = environmentValue(output, "HOMEPATH", platform) ?? "";
|
|
26
|
+
home = drive && path ? `${drive}${path}` : "";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (home) {
|
|
30
|
+
output.HOME = String(home).replaceAll("\\", "/");
|
|
31
|
+
} else {
|
|
32
|
+
delete output.HOME;
|
|
33
|
+
}
|
|
34
|
+
return output;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function homeRelativePath(cwd, home, platform = process.platform) {
|
|
38
|
+
if (!home) return null;
|
|
39
|
+
const trim = (value) => {
|
|
40
|
+
const normalized = String(value).replaceAll("\\", "/");
|
|
41
|
+
return normalized === "/" ? "/" : normalized.replace(/\/+$/, "");
|
|
42
|
+
};
|
|
43
|
+
// Android exposes app data through both /data/data/PACKAGE and
|
|
44
|
+
// /data/user/0/PACKAGE. They are the same app sandbox but string comparison
|
|
45
|
+
// alone cannot recognise HOME when the two spellings are mixed.
|
|
46
|
+
const comparable = (value) => trim(value).replace(
|
|
47
|
+
/^\/data\/user\/0\/([^/]+)(?=\/|$)/,
|
|
48
|
+
"/data/data/$1",
|
|
49
|
+
);
|
|
50
|
+
let comparedCwd = comparable(cwd);
|
|
51
|
+
let comparedHome = comparable(home);
|
|
52
|
+
if (platform === "win32") {
|
|
53
|
+
comparedCwd = comparedCwd.toLowerCase();
|
|
54
|
+
comparedHome = comparedHome.toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
if (comparedCwd === comparedHome) return "";
|
|
57
|
+
if (comparedHome === "/" && comparedCwd.startsWith("/")) return comparedCwd;
|
|
58
|
+
return comparedCwd.startsWith(`${comparedHome}/`)
|
|
59
|
+
? comparable(cwd).slice(comparedHome.length)
|
|
60
|
+
: null;
|
|
61
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readdirSync, readlinkSync } from "node:fs";
|
|
2
|
+
import { basename, isAbsolute, resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
const IMAGE = new Set(["png", "jpg", "jpeg", "gif", "webp", "svg", "bmp", "ico", "avif", "heic"]);
|
|
5
|
+
const MUSIC = new Set(["mp3", "wav", "flac", "ogg", "m4a", "aac", "opus", "mid", "midi"]);
|
|
6
|
+
const VIDEO = new Set(["mp4", "mkv", "webm", "mov", "avi", "m4v", "mpeg", "mpg"]);
|
|
7
|
+
const ICONS = new Map([
|
|
8
|
+
["js", "🟨"], ["mjs", "🟨"], ["cjs", "🟨"],
|
|
9
|
+
["ts", "🟦"], ["mts", "🟦"], ["cts", "🟦"],
|
|
10
|
+
["py", "🐍"], ["c", "🔧"], ["h", "🧩"], ["rs", "🦀"],
|
|
11
|
+
["html", "🌐"], ["htm", "🌐"], ["css", "🎨"],
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
function extension(name) {
|
|
15
|
+
const index = name.lastIndexOf(".");
|
|
16
|
+
return index > 0 ? name.slice(index + 1).toLowerCase() : "";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function iconFor(name, stats, path = null) {
|
|
20
|
+
if (stats.isDirectory()) return "📦";
|
|
21
|
+
if (stats.isSymbolicLink()) return path !== null && !existsSync(path) ? "🚫" : "🔗";
|
|
22
|
+
const ext = extension(name);
|
|
23
|
+
if (IMAGE.has(ext)) return "🖼️";
|
|
24
|
+
if (MUSIC.has(ext)) return "🎵";
|
|
25
|
+
if (VIDEO.has(ext)) return "🎬";
|
|
26
|
+
if (ICONS.has(ext)) return ICONS.get(ext);
|
|
27
|
+
if (stats.mode & 0o111) return "⚙️";
|
|
28
|
+
return "📄";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Only touches cross-platform-safe fs.Stats methods (isDirectory/
|
|
32
|
+
// isSymbolicLink/isSocket/isFIFO always return a real boolean on Windows
|
|
33
|
+
// too, just typically false for socket/FIFO since NTFS directory entries
|
|
34
|
+
// aren't reported as those) and the same mode-bit check iconFor already
|
|
35
|
+
// uses elsewhere in this file, so this needs no platform-specific handling.
|
|
36
|
+
function classifySuffix(stats) {
|
|
37
|
+
if (stats.isDirectory()) return "/";
|
|
38
|
+
if (stats.isSymbolicLink()) return "@";
|
|
39
|
+
if (stats.isSocket()) return "=";
|
|
40
|
+
if (stats.isFIFO()) return "|";
|
|
41
|
+
if (stats.mode & 0o111) return "*";
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function displayEntry(entry, options) {
|
|
46
|
+
const suffix = options.classify ? classifySuffix(entry.stats) : entry.stats.isDirectory() ? "/" : "";
|
|
47
|
+
return `${iconFor(entry.name, entry.stats, entry.path)} ${entry.name}${suffix}`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function columns(items, width) {
|
|
51
|
+
if (!items.length) return "";
|
|
52
|
+
const widest = Math.max(...items.map((item) => Bun.stringWidth(item))) + 2;
|
|
53
|
+
const count = Math.max(1, Math.floor(width / widest));
|
|
54
|
+
let output = "";
|
|
55
|
+
for (let index = 0; index < items.length; index++) {
|
|
56
|
+
const last = index % count === count - 1 || index === items.length - 1;
|
|
57
|
+
output += items[index];
|
|
58
|
+
output += last ? "\n" : " ".repeat(widest - Bun.stringWidth(items[index]));
|
|
59
|
+
}
|
|
60
|
+
return output;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function modeString(mode) {
|
|
64
|
+
const kinds = [[0o400, "r"], [0o200, "w"], [0o100, "x"], [0o040, "r"], [0o020, "w"], [0o010, "x"], [0o004, "r"], [0o002, "w"], [0o001, "x"]];
|
|
65
|
+
return kinds.map(([bit, letter]) => mode & bit ? letter : "-").join("");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function linkTarget(path) {
|
|
69
|
+
try {
|
|
70
|
+
// Node/Bun read the reparse point's stored target on Windows the same
|
|
71
|
+
// way as a POSIX symlink; only the separator needs normalizing to match
|
|
72
|
+
// the forward-slash paths the rest of the shell displays.
|
|
73
|
+
const target = readlinkSync(path);
|
|
74
|
+
return process.platform === "win32" ? target.replaceAll("\\", "/") : target;
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function localDateTime(ms) {
|
|
81
|
+
const date = new Date(ms);
|
|
82
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
83
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} `
|
|
84
|
+
+ `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function humanSize(bytes) {
|
|
88
|
+
if (bytes < 1024) return String(bytes);
|
|
89
|
+
const units = ["K", "M", "G", "T", "P"];
|
|
90
|
+
let value = bytes;
|
|
91
|
+
let unit = -1;
|
|
92
|
+
do { value /= 1024; unit++; } while (value >= 1024 && unit < units.length - 1);
|
|
93
|
+
return `${value >= 10 ? value.toFixed(0) : value.toFixed(1).replace(/\.0$/, "")}${units[unit]}`;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function listDirectory(path, options) {
|
|
97
|
+
let entries = readdirSync(path, { withFileTypes: true })
|
|
98
|
+
.filter((entry) => options.all || options.almostAll || !entry.name.startsWith("."))
|
|
99
|
+
.map((entry) => {
|
|
100
|
+
const entryPath = resolve(path, entry.name);
|
|
101
|
+
return { name: entry.name, stats: lstatSync(entryPath), path: entryPath };
|
|
102
|
+
});
|
|
103
|
+
if (options.all) entries = [
|
|
104
|
+
{ name: ".", stats: lstatSync(path), path },
|
|
105
|
+
{ name: "..", stats: lstatSync(resolve(path, "..")), path: resolve(path, "..") },
|
|
106
|
+
...entries,
|
|
107
|
+
];
|
|
108
|
+
entries.sort(options.size
|
|
109
|
+
? (a, b) => b.stats.size - a.stats.size || a.name.localeCompare(b.name)
|
|
110
|
+
: options.time
|
|
111
|
+
? (a, b) => b.stats.mtimeMs - a.stats.mtimeMs || a.name.localeCompare(b.name)
|
|
112
|
+
: (a, b) => a.name.localeCompare(b.name));
|
|
113
|
+
if (options.reverse) entries.reverse();
|
|
114
|
+
return entries;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function fancyLs(argv, state, terminal = Boolean(process.stdout.isTTY)) {
|
|
118
|
+
const options = {
|
|
119
|
+
all: false, almostAll: false, directory: false, long: false, human: false,
|
|
120
|
+
recursive: false, time: false, reverse: false, size: false, one: false, classify: false,
|
|
121
|
+
};
|
|
122
|
+
const operands = [];
|
|
123
|
+
for (const argument of argv.slice(1)) {
|
|
124
|
+
if (argument === "--color=auto" || argument === "--color" || argument === "--") continue;
|
|
125
|
+
if (/^-[^-]/.test(argument)) {
|
|
126
|
+
for (const flag of argument.slice(1)) {
|
|
127
|
+
if (flag === "a") options.all = true;
|
|
128
|
+
else if (flag === "A") options.almostAll = true;
|
|
129
|
+
else if (flag === "d") options.directory = true;
|
|
130
|
+
else if (flag === "l") options.long = true;
|
|
131
|
+
else if (flag === "h") options.human = true;
|
|
132
|
+
else if (flag === "R") options.recursive = true;
|
|
133
|
+
else if (flag === "t") options.time = true;
|
|
134
|
+
else if (flag === "r") options.reverse = true;
|
|
135
|
+
else if (flag === "S") options.size = true;
|
|
136
|
+
else if (flag === "1") options.one = true;
|
|
137
|
+
else if (flag === "F") options.classify = true;
|
|
138
|
+
else return { status: 2, stdout: "", stderr: `bunmsh: ${argv[0]}: unsupported option: -${flag}\n` };
|
|
139
|
+
}
|
|
140
|
+
} else operands.push(argument);
|
|
141
|
+
}
|
|
142
|
+
if (!operands.length) operands.push(".");
|
|
143
|
+
let status = 0, stdout = "", stderr = "";
|
|
144
|
+
const visited = new Set();
|
|
145
|
+
const show = (operand, heading = operands.length > 1) => {
|
|
146
|
+
const path = isAbsolute(operand) ? operand : resolve(state.cwd, operand);
|
|
147
|
+
try {
|
|
148
|
+
const stats = lstatSync(path);
|
|
149
|
+
let entries;
|
|
150
|
+
if (!stats.isDirectory() || options.directory)
|
|
151
|
+
entries = [{ name: basename(operand) || operand, stats, path }];
|
|
152
|
+
else entries = listDirectory(path, options);
|
|
153
|
+
if (heading) stdout += `${operand}:\n`;
|
|
154
|
+
const rendered = entries.map((entry) => displayEntry(entry, options));
|
|
155
|
+
if (options.long) {
|
|
156
|
+
for (let i = 0; i < entries.length; i++) {
|
|
157
|
+
const item = entries[i];
|
|
158
|
+
const date = localDateTime(item.stats.mtimeMs);
|
|
159
|
+
const size = options.human ? humanSize(item.stats.size) : String(item.stats.size);
|
|
160
|
+
const target = item.stats.isSymbolicLink() ? linkTarget(item.path) : null;
|
|
161
|
+
const suffix = target === null ? "" : ` -> ${target}`;
|
|
162
|
+
stdout += `${item.stats.isDirectory() ? "d" : item.stats.isSymbolicLink() ? "l" : "-"}${modeString(item.stats.mode)} ${size.padStart(8)} ${date} ${rendered[i]}${suffix}\n`;
|
|
163
|
+
}
|
|
164
|
+
} else stdout += terminal && !options.one
|
|
165
|
+
? columns(rendered, process.stdout.columns ?? 80)
|
|
166
|
+
: `${rendered.join("\n")}${rendered.length ? "\n" : ""}`;
|
|
167
|
+
if (options.recursive && stats.isDirectory() && !options.directory) {
|
|
168
|
+
for (const entry of entries) if (entry.stats.isDirectory() && entry.name !== "." && entry.name !== "..") {
|
|
169
|
+
const child = resolve(path, entry.name);
|
|
170
|
+
if (visited.has(child)) continue;
|
|
171
|
+
visited.add(child);
|
|
172
|
+
stdout += "\n";
|
|
173
|
+
show(`${operand.replace(/\/$/, "")}/${entry.name}`, true);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
} catch (error) {
|
|
177
|
+
status = 1;
|
|
178
|
+
stderr += `bunmsh: ${argv[0]}: ${operand}: ${error.message}\n`;
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
for (let i = 0; i < operands.length; i++) {
|
|
182
|
+
if (i) stdout += "\n";
|
|
183
|
+
show(operands[i]);
|
|
184
|
+
}
|
|
185
|
+
return { status, stdout, stderr };
|
|
186
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { lstatSync, readdirSync } from "node:fs";
|
|
2
|
+
import { basename, isAbsolute, resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
const shellPath = (value) => value.replaceAll("\\", "/");
|
|
5
|
+
const nativePath = (value, platform) => platform === "win32" ? value.replaceAll("/", "\\") : value;
|
|
6
|
+
|
|
7
|
+
function globRegex(pattern, insensitive = false) {
|
|
8
|
+
let source = "^";
|
|
9
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
10
|
+
const ch = pattern[i];
|
|
11
|
+
if (ch === "*") source += ".*";
|
|
12
|
+
else if (ch === "?") source += ".";
|
|
13
|
+
else if (ch === "[") {
|
|
14
|
+
const end = pattern.indexOf("]", i + 1);
|
|
15
|
+
if (end < 0) source += "\\[";
|
|
16
|
+
else { source += pattern.slice(i, end + 1); i = end; }
|
|
17
|
+
} else source += ch.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
18
|
+
}
|
|
19
|
+
return new RegExp(`${source}$`, insensitive ? "i" : "");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function findIsRegularBuiltin(platform = process.platform) {
|
|
23
|
+
return platform === "win32";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function runFind(argv, state, platform = process.platform, execute = null) {
|
|
27
|
+
let index = 1;
|
|
28
|
+
const roots = [];
|
|
29
|
+
while (index < argv.length && argv[index] !== "!" && argv[index] !== "-not" &&
|
|
30
|
+
!argv[index].startsWith("-")) roots.push(argv[index++]);
|
|
31
|
+
if (!roots.length) roots.push(".");
|
|
32
|
+
let minDepth = 0, maxDepth = Infinity, print0 = false, negate = false, explicitPrint = false;
|
|
33
|
+
const predicates = [];
|
|
34
|
+
const actions = [];
|
|
35
|
+
while (index < argv.length) {
|
|
36
|
+
const option = argv[index++];
|
|
37
|
+
if (option === "!" || option === "-not") { negate = !negate; continue; }
|
|
38
|
+
if (option === "-print") { explicitPrint = true; continue; }
|
|
39
|
+
if (option === "-print0") { explicitPrint = true; print0 = true; continue; }
|
|
40
|
+
if (option === "-exec") {
|
|
41
|
+
const command = [];
|
|
42
|
+
while (index < argv.length && argv[index] !== ";" && argv[index] !== "+")
|
|
43
|
+
command.push(argv[index++]);
|
|
44
|
+
const terminator = argv[index++];
|
|
45
|
+
if (!command.length || (terminator !== ";" && terminator !== "+"))
|
|
46
|
+
return { status: 2, stdout: "", stderr: "bunmsh: find: -exec: missing command or terminator\n" };
|
|
47
|
+
if (!command.includes("{}"))
|
|
48
|
+
return { status: 2, stdout: "", stderr: "bunmsh: find: -exec: command must contain {}\n" };
|
|
49
|
+
actions.push({ command, mode: terminator });
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const argument = argv[index++];
|
|
53
|
+
if (argument === undefined)
|
|
54
|
+
return { status: 2, stdout: "", stderr: `bunmsh: find: ${option}: missing argument\n` };
|
|
55
|
+
let predicate;
|
|
56
|
+
if (option === "-name" || option === "-iname") {
|
|
57
|
+
const regex = globRegex(argument, option === "-iname");
|
|
58
|
+
predicate = (entry) => regex.test(basename(entry.shown));
|
|
59
|
+
} else if (option === "-path" || option === "-ipath") {
|
|
60
|
+
const regex = globRegex(argument, option === "-ipath");
|
|
61
|
+
predicate = (entry) => regex.test(entry.shown);
|
|
62
|
+
} else if (option === "-type") {
|
|
63
|
+
if (!/^[fdl]$/.test(argument))
|
|
64
|
+
return { status: 2, stdout: "", stderr: `bunmsh: find: unsupported type: ${argument}\n` };
|
|
65
|
+
predicate = (entry) => argument === "f" ? entry.stats.isFile() :
|
|
66
|
+
argument === "d" ? entry.stats.isDirectory() : entry.stats.isSymbolicLink();
|
|
67
|
+
} else if (option === "-mindepth" || option === "-maxdepth") {
|
|
68
|
+
if (!/^\d+$/.test(argument))
|
|
69
|
+
return { status: 2, stdout: "", stderr: `bunmsh: find: ${option}: invalid depth: ${argument}\n` };
|
|
70
|
+
if (option === "-mindepth") minDepth = Number(argument); else maxDepth = Number(argument);
|
|
71
|
+
continue;
|
|
72
|
+
} else return { status: 2, stdout: "", stderr: `bunmsh: find: unsupported option: ${option}\n` };
|
|
73
|
+
predicates.push(negate ? (entry) => !predicate(entry) : predicate);
|
|
74
|
+
negate = false;
|
|
75
|
+
}
|
|
76
|
+
if (negate) return { status: 2, stdout: "", stderr: "bunmsh: find: expected expression after !\n" };
|
|
77
|
+
let status = 0, stdout = "", stderr = "";
|
|
78
|
+
const decoder = new TextDecoder();
|
|
79
|
+
const appendExecution = (execution) => {
|
|
80
|
+
stdout += typeof execution.stdout === "string" ? execution.stdout : decoder.decode(execution.stdout);
|
|
81
|
+
stderr += typeof execution.stderr === "string" ? execution.stderr : decoder.decode(execution.stderr);
|
|
82
|
+
};
|
|
83
|
+
const matches = [];
|
|
84
|
+
const emit = (shown) => { stdout += shown + (print0 ? "\0" : "\n"); };
|
|
85
|
+
const visit = async (native, shown, depth) => {
|
|
86
|
+
let stats;
|
|
87
|
+
try { stats = lstatSync(native); }
|
|
88
|
+
catch (error) { status = 1; stderr += `bunmsh: find: ${shown}: ${error.message}\n`; return; }
|
|
89
|
+
const entry = { shown, stats };
|
|
90
|
+
if (depth >= minDepth && predicates.every((predicate) => predicate(entry))) {
|
|
91
|
+
matches.push(shown);
|
|
92
|
+
if (!actions.length || explicitPrint) emit(shown);
|
|
93
|
+
for (const action of actions) if (action.mode === ";") {
|
|
94
|
+
if (!execute) return;
|
|
95
|
+
const command = action.command.map((argument) => argument === "{}" ? shown : argument);
|
|
96
|
+
appendExecution(await execute(command));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (!stats.isDirectory() || depth >= maxDepth) return;
|
|
100
|
+
let children;
|
|
101
|
+
try { children = readdirSync(native).sort(); }
|
|
102
|
+
catch (error) { status = 1; stderr += `bunmsh: find: ${shown}: ${error.message}\n`; return; }
|
|
103
|
+
for (const child of children)
|
|
104
|
+
await visit(resolve(native, child), shown === "." ? `./${child}` : `${shown.replace(/\/$/, "")}/${child}`, depth + 1);
|
|
105
|
+
};
|
|
106
|
+
for (const root of roots) {
|
|
107
|
+
const native = isAbsolute(nativePath(root, platform))
|
|
108
|
+
? nativePath(root, platform) : resolve(nativePath(state.cwd, platform), nativePath(root, platform));
|
|
109
|
+
await visit(native, shellPath(root), 0);
|
|
110
|
+
}
|
|
111
|
+
for (const action of actions) if (action.mode === "+" && matches.length) {
|
|
112
|
+
if (!execute) continue;
|
|
113
|
+
const command = action.command.flatMap((argument) => argument === "{}" ? matches : [argument]);
|
|
114
|
+
const execution = await execute(command);
|
|
115
|
+
appendExecution(execution);
|
|
116
|
+
if (execution.status !== 0) status = 1;
|
|
117
|
+
}
|
|
118
|
+
return { status, stdout, stderr };
|
|
119
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { appendFile, rename, stat } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
|
|
5
|
+
function importEnabled(env) {
|
|
6
|
+
return !/^(?:0|false|off|no)$/i.test(env.BUNMSH_IMPORT_HISTORY ?? "");
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// History is rendered directly beside the prompt. Reject the entire entry
|
|
10
|
+
// instead of stripping bytes and accidentally turning it into another command.
|
|
11
|
+
export function safeHistoryEntry(entry) {
|
|
12
|
+
return typeof entry === "string" && entry.length > 0 &&
|
|
13
|
+
!/[\u0000-\u001f\u007f-\u009f\u200b-\u200f\u2028-\u202e\u2066-\u2069\ufeff]/u.test(entry);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// node:readline stores its history newest-first, while bunmsh keeps history in
|
|
17
|
+
// chronological order for saving and ghost completion.
|
|
18
|
+
export function readlineHistory(history) {
|
|
19
|
+
return history.filter(safeHistoryEntry).toReversed();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function bunmshHistoryPath(env = process.env, platform = process.platform) {
|
|
23
|
+
const trim = (value) => value?.replace(/[\\/]+$/, "");
|
|
24
|
+
if (platform === "win32") {
|
|
25
|
+
const base = trim(env.LOCALAPPDATA || env.APPDATA ||
|
|
26
|
+
(env.USERPROFILE ? `${trim(env.USERPROFILE)}/AppData/Local` : ""));
|
|
27
|
+
return base ? `${base}/bunmsh/history` : null;
|
|
28
|
+
}
|
|
29
|
+
const base = trim(env.XDG_DATA_HOME || (env.HOME ? `${trim(env.HOME)}/.local/share` : ""));
|
|
30
|
+
return base ? `${base}/bunmsh/history` : null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function readableText(path) {
|
|
34
|
+
const file = Bun.file(path);
|
|
35
|
+
return await file.exists() ? file.text() : null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function statSafe(path) {
|
|
39
|
+
try { return await stat(path); } catch { return null; }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function parseBashHistory(source) {
|
|
43
|
+
return source
|
|
44
|
+
.split(/\r?\n/)
|
|
45
|
+
.filter((line) => !/^#[0-9]+$/.test(line) && safeHistoryEntry(line));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function parseFishHistory(source) {
|
|
49
|
+
const records = source.split(/\r?\n/)
|
|
50
|
+
.map((line) => /^- cmd:\s?(.*)$/.exec(line)?.[1] ?? null)
|
|
51
|
+
.filter((entry) => entry !== null);
|
|
52
|
+
// Fish documents this as "YAML-style", not YAML. Command scalars use Fish's
|
|
53
|
+
// own escaping and can be rejected or only partially consumed by YAML
|
|
54
|
+
// parsers. The stable record boundary is the unindented `- cmd:` prefix.
|
|
55
|
+
return records
|
|
56
|
+
.map((entry) => entry.replace(/\\(\\|n)/g, (_match, escaped) => escaped === "n" ? "\n" : "\\"))
|
|
57
|
+
.filter(safeHistoryEntry);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// bunmsh saved its own history as a single JSON array before switching to
|
|
61
|
+
// one-JSON-value-per-line (JSONL). Detecting and reading that old format
|
|
62
|
+
// keeps existing history files working; see saveBunmshHistory for where the
|
|
63
|
+
// on-disk file actually gets converted.
|
|
64
|
+
function isLegacyArrayFormat(source) {
|
|
65
|
+
return source.trimStart().startsWith("[");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function parseLegacyArrayFormat(source) {
|
|
69
|
+
const parsed = JSON.parse(source);
|
|
70
|
+
return Array.isArray(parsed) ? parsed.filter(safeHistoryEntry) : [];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Bun.JSONL.parse stops at the first line it can't parse instead of skipping
|
|
74
|
+
// it, which would silently discard every entry after one corrupted line (for
|
|
75
|
+
// example from a write torn by a crash). Detect that by comparing against the
|
|
76
|
+
// non-empty line count, and fall back to a per-line parse that only skips the
|
|
77
|
+
// bad lines when it looks like that happened.
|
|
78
|
+
function parseJsonlFormat(source) {
|
|
79
|
+
const lines = source.split(/\r?\n/).filter((line) => line.trim() !== "");
|
|
80
|
+
let parsed;
|
|
81
|
+
try { parsed = Bun.JSONL.parse(source); } catch { parsed = []; }
|
|
82
|
+
if (parsed.length < lines.length) {
|
|
83
|
+
parsed = [];
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
try { parsed.push(JSON.parse(line)); } catch {}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return parsed.filter(safeHistoryEntry);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function parseBunmshHistoryContent(source) {
|
|
92
|
+
if (source.trim() === "") return [];
|
|
93
|
+
return isLegacyArrayFormat(source) ? parseLegacyArrayFormat(source) : parseJsonlFormat(source);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function encodeJsonlLines(entries) {
|
|
97
|
+
return entries.map((entry) => `${JSON.stringify(entry)}\n`).join("");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Writes the whole file in one shot via a temp file plus atomic rename, so a
|
|
101
|
+
// crash or interruption mid-write can never leave a half-written, unreadable
|
|
102
|
+
// history file behind — only ever the old content or the new content.
|
|
103
|
+
async function writeHistoryFileAtomic(path, entries) {
|
|
104
|
+
const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
105
|
+
await Bun.write(tmpPath, encodeJsonlLines(entries));
|
|
106
|
+
await rename(tmpPath, path);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function dedupeEntries(entries) {
|
|
110
|
+
const seen = new Set();
|
|
111
|
+
const unique = [];
|
|
112
|
+
for (let index = entries.length - 1; index >= 0; index--) {
|
|
113
|
+
const entry = entries[index];
|
|
114
|
+
if (!safeHistoryEntry(entry) || seen.has(entry)) continue;
|
|
115
|
+
seen.add(entry);
|
|
116
|
+
unique.push(entry);
|
|
117
|
+
}
|
|
118
|
+
return unique.reverse();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// The routine, frequent save path (manual `tab s`/`tab save`, the periodic
|
|
122
|
+
// autosave, and the on-exit flush all call this). It only appends the
|
|
123
|
+
// entries this session hasn't persisted yet — tracked on `state` via
|
|
124
|
+
// historySaved, a count into state.history — instead of rewriting the whole
|
|
125
|
+
// file, so it stays safe to call from multiple bunmsh sessions at once:
|
|
126
|
+
// each one only ever adds its own new lines to the end, never touching (or
|
|
127
|
+
// needing to know about) what any other session already wrote.
|
|
128
|
+
export async function saveBunmshHistory(state, env = process.env, platform = process.platform) {
|
|
129
|
+
const path = bunmshHistoryPath(env, platform);
|
|
130
|
+
if (!path) throw new Error("cannot determine bunmsh history path");
|
|
131
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
132
|
+
if (!state.historyMigrated) {
|
|
133
|
+
// One-time upgrade for a pre-existing legacy (JSON-array) file. Like the
|
|
134
|
+
// explicit dedupe below, this rewrites the whole file, so it carries the
|
|
135
|
+
// same small risk of racing another session's concurrent write — but it
|
|
136
|
+
// happens at most once per history file, ever.
|
|
137
|
+
const source = await readableText(path);
|
|
138
|
+
if (source !== null && isLegacyArrayFormat(source))
|
|
139
|
+
await writeHistoryFileAtomic(path, parseLegacyArrayFormat(source));
|
|
140
|
+
state.historyMigrated = true;
|
|
141
|
+
}
|
|
142
|
+
const saved = state.historySaved ?? 0;
|
|
143
|
+
const pending = (state.history ?? []).slice(saved).filter(safeHistoryEntry);
|
|
144
|
+
if (pending.length) await appendFile(path, encodeJsonlLines(pending));
|
|
145
|
+
state.historySaved = (state.history ?? []).length;
|
|
146
|
+
return path;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// The explicit, occasional maintenance path (`tab s d` / `tab save dedupe`):
|
|
150
|
+
// rewrites the whole file with only the most recent occurrence of each
|
|
151
|
+
// command kept. Unlike saveBunmshHistory, this can race a concurrent save
|
|
152
|
+
// from another session — that's the trade-off for being able to shrink the
|
|
153
|
+
// file at all, since dropping duplicates means looking at (and replacing)
|
|
154
|
+
// entries this session didn't itself write. `raced` reports whether the
|
|
155
|
+
// file's mtime/size changed while this ran, as a best-effort heads-up (not a
|
|
156
|
+
// guarantee) that another session's write may have been overwritten by it.
|
|
157
|
+
export async function dedupeBunmshHistory(state, env = process.env, platform = process.platform) {
|
|
158
|
+
// Flush this session's own pending entries through the safe path first, so
|
|
159
|
+
// the dedupe/rewrite below is never the reason they'd be lost.
|
|
160
|
+
const path = await saveBunmshHistory(state, env, platform);
|
|
161
|
+
const before = await statSafe(path);
|
|
162
|
+
const source = await readableText(path);
|
|
163
|
+
const deduped = dedupeEntries(source === null ? [] : parseBunmshHistoryContent(source));
|
|
164
|
+
const after = await statSafe(path);
|
|
165
|
+
const raced = Boolean(before && after &&
|
|
166
|
+
(before.mtimeMs !== after.mtimeMs || before.size !== after.size));
|
|
167
|
+
await writeHistoryFileAtomic(path, deduped);
|
|
168
|
+
return { path, raced, count: deduped.length };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export async function importedHistory(env = process.env, platform = process.platform) {
|
|
172
|
+
const home = env.HOME?.replace(/\/+$/, "");
|
|
173
|
+
const paths = [];
|
|
174
|
+
if (importEnabled(env) && home) paths.push(
|
|
175
|
+
{ type: "bash", path: env.HISTFILE || `${home}/.bash_history` },
|
|
176
|
+
{ type: "fish", path: `${home}/.local/share/fish/fish_history` },
|
|
177
|
+
);
|
|
178
|
+
const ownPath = bunmshHistoryPath(env, platform);
|
|
179
|
+
if (ownPath) paths.push({ type: "bunmsh", path: ownPath });
|
|
180
|
+
const history = [];
|
|
181
|
+
for (const item of paths) {
|
|
182
|
+
try {
|
|
183
|
+
const source = await readableText(item.path);
|
|
184
|
+
if (source === null) continue;
|
|
185
|
+
history.push(...(item.type === "fish" ? parseFishHistory(source) :
|
|
186
|
+
item.type === "bunmsh" ? parseBunmshHistoryContent(source) : parseBashHistory(source)));
|
|
187
|
+
} catch {}
|
|
188
|
+
}
|
|
189
|
+
// Keep the most recent occurrence, matching historyGhost's reverse lookup.
|
|
190
|
+
const seen = new Set();
|
|
191
|
+
const unique = [];
|
|
192
|
+
for (let index = history.length - 1; index >= 0; index--) {
|
|
193
|
+
if (seen.has(history[index])) continue;
|
|
194
|
+
seen.add(history[index]);
|
|
195
|
+
unique.push(history[index]);
|
|
196
|
+
}
|
|
197
|
+
return unique.reverse();
|
|
198
|
+
}
|