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,570 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import pkg from "../package.json" with { type: "json" };
|
|
4
|
+
import {
|
|
5
|
+
chmodSync,
|
|
6
|
+
copyFileSync,
|
|
7
|
+
existsSync,
|
|
8
|
+
lstatSync,
|
|
9
|
+
lutimesSync,
|
|
10
|
+
mkdirSync,
|
|
11
|
+
readdirSync,
|
|
12
|
+
readFileSync,
|
|
13
|
+
readlinkSync,
|
|
14
|
+
rmSync,
|
|
15
|
+
symlinkSync,
|
|
16
|
+
utimesSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from "node:fs";
|
|
19
|
+
import { basename, dirname, isAbsolute, relative, resolve } from "node:path";
|
|
20
|
+
import { createInterface } from "node:readline/promises";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
|
|
23
|
+
const binDir = dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
const rootDir = resolve(binDir, "..");
|
|
25
|
+
|
|
26
|
+
function fail(message) {
|
|
27
|
+
console.error(`${pkg.name}: ${message}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function installUsage() {
|
|
32
|
+
return `${pkg.name} install - copy this installation to a durable directory
|
|
33
|
+
|
|
34
|
+
Usage:
|
|
35
|
+
${pkg.name} --install [target-dir]
|
|
36
|
+
${pkg.name} --strip-install [target-dir]
|
|
37
|
+
|
|
38
|
+
Install options:
|
|
39
|
+
-i, --install [dir] Install into <dir>/${pkg.name}/ (default mode)
|
|
40
|
+
-si, --strip-install [dir] Install into <dir>/ directly, no top-level
|
|
41
|
+
directory of its own
|
|
42
|
+
-f, --force Install over the destination as is, replacing
|
|
43
|
+
local changes instead of merging them
|
|
44
|
+
-y, --yes Do not ask before replacing files that were
|
|
45
|
+
edited locally
|
|
46
|
+
-h, --help Show this help and exit
|
|
47
|
+
|
|
48
|
+
The target directory defaults to the current directory, so running this
|
|
49
|
+
script with no arguments installs into ./${pkg.name}/.
|
|
50
|
+
|
|
51
|
+
Installing over an existing ${pkg.name} updates it. Files are only added and
|
|
52
|
+
overwritten, never deleted, so anything the installation added of its own
|
|
53
|
+
survives, and the three files both sides write to are merged:
|
|
54
|
+
|
|
55
|
+
package.json the local buninu section is kept, every other field is
|
|
56
|
+
taken from this package
|
|
57
|
+
apps/cmdlist command names the installation added are kept
|
|
58
|
+
.bashrc kept when it only adds to the shipped one, otherwise kept
|
|
59
|
+
as is with the shipped version left beside it as
|
|
60
|
+
.bashrc.dist
|
|
61
|
+
|
|
62
|
+
Relative symbolic links are copied exactly as stored rather than followed,
|
|
63
|
+
so bin/androidNativeLibs and the multicall command links survive the copy
|
|
64
|
+
and are rebuilt for the destination platform on the next normal startup.
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function parseInstallArguments(arguments_) {
|
|
69
|
+
let strip = false;
|
|
70
|
+
let force = false;
|
|
71
|
+
let yes = false;
|
|
72
|
+
let help = false;
|
|
73
|
+
let target = null;
|
|
74
|
+
|
|
75
|
+
const setTarget = (value, option) => {
|
|
76
|
+
if (!value) fail(`${option} requires a directory`);
|
|
77
|
+
if (target !== null) fail(`install accepts one target directory, got: ${value}`);
|
|
78
|
+
target = value;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
for (const argument of arguments_) {
|
|
82
|
+
if (argument === "-i" || argument === "--install") {
|
|
83
|
+
strip = false;
|
|
84
|
+
} else if (argument === "-si" || argument === "--strip-install") {
|
|
85
|
+
strip = true;
|
|
86
|
+
} else if (argument.startsWith("--install=")) {
|
|
87
|
+
strip = false;
|
|
88
|
+
setTarget(argument.slice("--install=".length), "--install");
|
|
89
|
+
} else if (argument.startsWith("--strip-install=")) {
|
|
90
|
+
strip = true;
|
|
91
|
+
setTarget(argument.slice("--strip-install=".length), "--strip-install");
|
|
92
|
+
} else if (argument === "-f" || argument === "--force") {
|
|
93
|
+
force = true;
|
|
94
|
+
} else if (argument === "-y" || argument === "--yes") {
|
|
95
|
+
yes = true;
|
|
96
|
+
} else if (argument === "-h" || argument === "--help") {
|
|
97
|
+
help = true;
|
|
98
|
+
} else if (argument.startsWith("-")) {
|
|
99
|
+
fail(`unknown install option: ${argument}`);
|
|
100
|
+
} else {
|
|
101
|
+
setTarget(argument, "install");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return { strip, force, yes, help, target: target ?? process.cwd() };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function hasEntries(path) {
|
|
109
|
+
try {
|
|
110
|
+
return readdirSync(path).length > 0;
|
|
111
|
+
} catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function readTextOrNull(path) {
|
|
117
|
+
try {
|
|
118
|
+
return readFileSync(path, "utf8");
|
|
119
|
+
} catch {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function readJsonOrNull(path) {
|
|
125
|
+
try {
|
|
126
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
127
|
+
} catch {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Null when the directory is an installation to update, otherwise the reason it
|
|
133
|
+
// was not taken for one. Saying which check failed is what separates "this is
|
|
134
|
+
// someone else's directory" from "this installation is damaged", which
|
|
135
|
+
// otherwise arrive as the same refusal.
|
|
136
|
+
//
|
|
137
|
+
// Identity rests on the name in package.json alone. A missing bin/init.js means
|
|
138
|
+
// an installation is broken, not that it is somebody else's, and refusing there
|
|
139
|
+
// would leave --force as the only way to repair it — which would take the
|
|
140
|
+
// user's own configuration down with it instead of merging it back.
|
|
141
|
+
function notInstallReason(path) {
|
|
142
|
+
const manifest = readJsonOrNull(resolve(path, "package.json"));
|
|
143
|
+
if (!manifest) return "it has no readable package.json";
|
|
144
|
+
if (manifest.name !== pkg.name) {
|
|
145
|
+
return `its package.json is "${manifest.name}", not ${pkg.name}`;
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// True when every line of `base` is still present in `current`, in order, so
|
|
151
|
+
// the only edits are insertions. A line inserted in the middle leaves the
|
|
152
|
+
// lines below it untouched by this reading, which is what a line-by-line
|
|
153
|
+
// comparison gets wrong: it reports everything past the insertion as changed.
|
|
154
|
+
// Equivalent to the shipped version being a subsequence of the installed one,
|
|
155
|
+
// which is the same thing as a line diff whose only operation is insert.
|
|
156
|
+
function isAdditionsOnly(base, current) {
|
|
157
|
+
let index = 0;
|
|
158
|
+
for (const line of current) {
|
|
159
|
+
if (index < base.length && base[index] === line) index += 1;
|
|
160
|
+
}
|
|
161
|
+
return index === base.length;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Matches how bin/init.js reads the list when it rebuilds the command links.
|
|
165
|
+
function commandNames(text) {
|
|
166
|
+
return [...new Set(
|
|
167
|
+
text
|
|
168
|
+
.split(/\r?\n/)
|
|
169
|
+
.map((line) => line.trim())
|
|
170
|
+
.filter((line) => line && !line.startsWith("#")),
|
|
171
|
+
)];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Read what the destination owns before the copy overwrites it. Only the three
|
|
175
|
+
// files a user and the package both write to need this; everything else is
|
|
176
|
+
// owned outright by one side or the other.
|
|
177
|
+
function readInstalledState(destination) {
|
|
178
|
+
return {
|
|
179
|
+
buninu: readJsonOrNull(resolve(destination, "package.json"))?.buninu,
|
|
180
|
+
cmdlist: readTextOrNull(resolve(destination, "apps", "cmdlist")),
|
|
181
|
+
bashrc: readTextOrNull(resolve(destination, ".bashrc")),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Files applyMerge already protects. They show up as modified the moment the
|
|
186
|
+
// installation is configured at all, so asking about them would be noise that
|
|
187
|
+
// trains the answer rather than informing it.
|
|
188
|
+
const MERGED_PATHS = new Set(["package.json", "apps/cmdlist", ".bashrc"]);
|
|
189
|
+
|
|
190
|
+
const DIFF_TIMEOUT_MS = 60_000;
|
|
191
|
+
|
|
192
|
+
// `bun pm diff <name>@<version> <dir>` compares the published version an
|
|
193
|
+
// installation reports against the installation itself, so the registry holds
|
|
194
|
+
// the pristine copy and nothing has to be recorded locally to find out what
|
|
195
|
+
// the user changed. Files it calls added are theirs and are never deleted by
|
|
196
|
+
// an update; only modified ones are about to be written over.
|
|
197
|
+
async function findLocalChanges(destination, version) {
|
|
198
|
+
const argv = [
|
|
199
|
+
process.execPath, "pm", "diff",
|
|
200
|
+
`${pkg.name}@${version}`, destination,
|
|
201
|
+
"--name-only", "--json",
|
|
202
|
+
];
|
|
203
|
+
|
|
204
|
+
// On a line of its own, unprefixed, and on stdout rather than stderr with
|
|
205
|
+
// the rest of the output, so it stands out and `2>/dev/null` leaves just the
|
|
206
|
+
// command: copy it and run it by hand without --json to read the list, or
|
|
207
|
+
// without --name-only to see the changes themselves rather than which files
|
|
208
|
+
// hold them.
|
|
209
|
+
console.log(` ${argv.join(" ")}`);
|
|
210
|
+
|
|
211
|
+
const child = Bun.spawn(argv, { stdin: "ignore", stdout: "pipe", stderr: "pipe" });
|
|
212
|
+
|
|
213
|
+
let timedOut = false;
|
|
214
|
+
const timer = setTimeout(() => {
|
|
215
|
+
timedOut = true;
|
|
216
|
+
child.kill();
|
|
217
|
+
}, DIFF_TIMEOUT_MS);
|
|
218
|
+
|
|
219
|
+
let status;
|
|
220
|
+
let stdout;
|
|
221
|
+
let stderr;
|
|
222
|
+
try {
|
|
223
|
+
[status, stdout, stderr] = await Promise.all([
|
|
224
|
+
child.exited,
|
|
225
|
+
new Response(child.stdout).text(),
|
|
226
|
+
new Response(child.stderr).text(),
|
|
227
|
+
]);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
return { files: null, error: error.message };
|
|
230
|
+
} finally {
|
|
231
|
+
clearTimeout(timer);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (timedOut) {
|
|
235
|
+
return { files: null, error: `bun pm diff did not finish within ${DIFF_TIMEOUT_MS / 1000}s` };
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (status !== 0) {
|
|
239
|
+
const reason = stderr.trim().split(/\r?\n/).at(-1);
|
|
240
|
+
return { files: null, error: reason || `bun pm diff exited with ${status}` };
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
let report;
|
|
244
|
+
try {
|
|
245
|
+
report = JSON.parse(stdout);
|
|
246
|
+
} catch {
|
|
247
|
+
return { files: null, error: "bun pm diff did not return JSON" };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const modified = (report.files ?? [])
|
|
251
|
+
.filter((file) => file.status === "modified" && !MERGED_PATHS.has(file.path));
|
|
252
|
+
|
|
253
|
+
return {
|
|
254
|
+
files: modified.filter((file) => !isModeOnlyChange(file)).map((file) => file.path),
|
|
255
|
+
modeOnly: modified.filter(isModeOnlyChange).length,
|
|
256
|
+
error: null,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Publishing normalises file modes, so a file can come back from the registry
|
|
261
|
+
// with a different executable bit and identical contents. bun pm diff calls
|
|
262
|
+
// that a modification, and reporting it would mean a freshly installed tree
|
|
263
|
+
// listing files nobody has touched. modeBefore and modeAfter are only present
|
|
264
|
+
// when the mode differs at all; the rest is what says the bytes did not.
|
|
265
|
+
function isModeOnlyChange(file) {
|
|
266
|
+
return file.modeBefore !== undefined &&
|
|
267
|
+
file.linesAdded === 0 &&
|
|
268
|
+
file.linesRemoved === 0 &&
|
|
269
|
+
file.bytesBefore === file.bytesAfter;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Returns null when there is no terminal to ask at, which the caller reports
|
|
273
|
+
// rather than treating as either answer.
|
|
274
|
+
async function confirm(question) {
|
|
275
|
+
if (!process.stdin.isTTY) return null;
|
|
276
|
+
const readline = createInterface({ input: process.stdin, output: process.stderr });
|
|
277
|
+
try {
|
|
278
|
+
return (await readline.question(question)).trim().toLowerCase() === "y";
|
|
279
|
+
} finally {
|
|
280
|
+
readline.close();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
function applyMerge(destination, installed) {
|
|
285
|
+
const notes = [];
|
|
286
|
+
|
|
287
|
+
// package.json: the package owns every field except the buninu section,
|
|
288
|
+
// which is the user's configuration and travels with the installation.
|
|
289
|
+
if (installed.buninu !== undefined) {
|
|
290
|
+
const path = resolve(destination, "package.json");
|
|
291
|
+
const shipped = readJsonOrNull(path);
|
|
292
|
+
if (shipped) {
|
|
293
|
+
shipped.buninu = installed.buninu;
|
|
294
|
+
writeFileSync(path, `${JSON.stringify(shipped, null, 2)}\n`);
|
|
295
|
+
notes.push("package.json: kept the local buninu section");
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// apps/cmdlist: a set of names, so the shipped list plus whatever names the
|
|
300
|
+
// installation added is the whole merge. Appending only the extras keeps
|
|
301
|
+
// this idempotent across repeated updates.
|
|
302
|
+
if (installed.cmdlist !== null) {
|
|
303
|
+
const path = resolve(destination, "apps", "cmdlist");
|
|
304
|
+
const shippedText = readTextOrNull(path) ?? "";
|
|
305
|
+
const shipped = commandNames(shippedText);
|
|
306
|
+
const extras = commandNames(installed.cmdlist).filter((name) => !shipped.includes(name));
|
|
307
|
+
if (extras.length) {
|
|
308
|
+
writeFileSync(
|
|
309
|
+
path,
|
|
310
|
+
`${shippedText.replace(/\n*$/, "\n")}\n# Added by this installation, kept across updates\n${extras.join("\n")}\n`,
|
|
311
|
+
);
|
|
312
|
+
notes.push(`apps/cmdlist: kept ${extras.length} local command name(s): ${extras.join(", ")}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// .bashrc: free-form text the user edits directly, so it can only be merged
|
|
317
|
+
// when the shipped lines all survive in it. Without a copy of the version
|
|
318
|
+
// this installation was built from there is no third side to merge against,
|
|
319
|
+
// so anything else is reported rather than guessed at.
|
|
320
|
+
if (installed.bashrc !== null) {
|
|
321
|
+
const path = resolve(destination, ".bashrc");
|
|
322
|
+
const shipped = readTextOrNull(path) ?? "";
|
|
323
|
+
if (installed.bashrc !== shipped) {
|
|
324
|
+
writeFileSync(path, installed.bashrc);
|
|
325
|
+
if (isAdditionsOnly(shipped.split(/\r?\n/), installed.bashrc.split(/\r?\n/))) {
|
|
326
|
+
notes.push(".bashrc: kept, it only adds to the shipped one");
|
|
327
|
+
} else {
|
|
328
|
+
writeFileSync(`${path}.dist`, shipped);
|
|
329
|
+
notes.push(".bashrc: kept as is, the shipped version is now .bashrc.dist");
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return notes;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Never copied into an installation. A source checkout's repository is not
|
|
338
|
+
// part of Buninu, it is large, and copying it into a destination that is
|
|
339
|
+
// itself a repository would write over that repository's own objects and refs.
|
|
340
|
+
// Only the top level is checked: the tree ships no nested repository.
|
|
341
|
+
const EXCLUDED_ENTRIES = new Set([".git"]);
|
|
342
|
+
|
|
343
|
+
function copySources(source) {
|
|
344
|
+
return readdirSync(source)
|
|
345
|
+
.filter((entry) => !EXCLUDED_ENTRIES.has(entry))
|
|
346
|
+
.map((entry) => resolve(source, entry));
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
function copyTree(source, destination) {
|
|
350
|
+
// Naming the entries instead of copying `source/.` is what leaves the
|
|
351
|
+
// excluded ones behind; listing them explicitly also keeps dotfiles such as
|
|
352
|
+
// .bashrc in, which a bare glob would drop.
|
|
353
|
+
const sources = copySources(source);
|
|
354
|
+
|
|
355
|
+
const cp = Bun.which("cp");
|
|
356
|
+
if (cp) {
|
|
357
|
+
// -a implies -d, so symbolic links are recreated as links instead of being
|
|
358
|
+
// followed. -f matches the fs path's force option: it unlinks and retries a
|
|
359
|
+
// destination file that cannot be opened, which reinstalling over
|
|
360
|
+
// read-only files (.git/objects is mode 444) needs.
|
|
361
|
+
const result = Bun.spawnSync([cp, "-af", ...sources, `${destination}/`], {
|
|
362
|
+
stdout: "inherit",
|
|
363
|
+
stderr: "inherit",
|
|
364
|
+
});
|
|
365
|
+
if (result.exitCode !== 0) fail(`cp -af failed with exit ${result.exitCode}`);
|
|
366
|
+
return "cp -af";
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
for (const entry of sources) copyEntry(entry, resolve(destination, basename(entry)));
|
|
370
|
+
return "node:fs";
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function lstatOrNull(path) {
|
|
374
|
+
try {
|
|
375
|
+
return lstatSync(path);
|
|
376
|
+
} catch {
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Deliberately not fs.cpSync: it stats destination entries through their
|
|
382
|
+
// symbolic links, so reinstalling over a tree that already contains the
|
|
383
|
+
// dangling relative links Buninu ships (bin/musl-la -> shloader ->
|
|
384
|
+
// androidNativeLibs/...) fails with ENOENT before copying anything.
|
|
385
|
+
function copyEntry(source, destination) {
|
|
386
|
+
const stats = lstatSync(source);
|
|
387
|
+
const mode = stats.mode & 0o7777;
|
|
388
|
+
|
|
389
|
+
if (stats.isSymbolicLink()) {
|
|
390
|
+
// Recreate the link with its target string untouched. Resolving it would
|
|
391
|
+
// turn bin/androidNativeLibs -> ../.. into a copy of the parent tree.
|
|
392
|
+
rmSync(destination, { recursive: true, force: true });
|
|
393
|
+
try {
|
|
394
|
+
symlinkSync(readlinkSync(source), destination);
|
|
395
|
+
// lutimes, not utimes: the latter follows the link and would stamp the
|
|
396
|
+
// target instead. Not every platform implements it, and a link's own
|
|
397
|
+
// timestamp matters to nothing here, so a failure is not worth reporting.
|
|
398
|
+
try {
|
|
399
|
+
lutimesSync(destination, stats.atime, stats.mtime);
|
|
400
|
+
} catch {}
|
|
401
|
+
} catch (error) {
|
|
402
|
+
// Windows refuses symbolic links without the right privileges. Those
|
|
403
|
+
// links are unused there (bin/*.bat stands in for them), so a warning
|
|
404
|
+
// beats aborting an otherwise complete install.
|
|
405
|
+
console.error(`${pkg.name}: skipped symbolic link ${destination}: ${error.message}`);
|
|
406
|
+
}
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (stats.isDirectory()) {
|
|
411
|
+
const existing = lstatOrNull(destination);
|
|
412
|
+
if (existing && !existing.isDirectory()) rmSync(destination, { recursive: true, force: true });
|
|
413
|
+
mkdirSync(destination, { recursive: true });
|
|
414
|
+
for (const entry of readdirSync(source)) {
|
|
415
|
+
copyEntry(resolve(source, entry), resolve(destination, entry));
|
|
416
|
+
}
|
|
417
|
+
chmodSync(destination, mode);
|
|
418
|
+
utimesSync(destination, stats.atime, stats.mtime);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Device nodes, FIFOs and sockets. Nothing Buninu ships is one of these, and
|
|
423
|
+
// recreating them needs mknod, so say what was left out instead of dropping
|
|
424
|
+
// it silently and letting the gap surface later as a missing file.
|
|
425
|
+
if (!stats.isFile()) {
|
|
426
|
+
console.error(`${pkg.name}: skipped ${source}: not a regular file, directory, or symbolic link`);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Read-only files (.git/objects is mode 444) cannot be written over, so
|
|
431
|
+
// unlink first, the way cp -f does.
|
|
432
|
+
rmSync(destination, { force: true });
|
|
433
|
+
copyFileSync(source, destination);
|
|
434
|
+
chmodSync(destination, mode);
|
|
435
|
+
utimesSync(destination, stats.atime, stats.mtime);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Returns true when the update should not go ahead.
|
|
439
|
+
async function confirmLocalChanges(destination, version, options) {
|
|
440
|
+
if (!version) {
|
|
441
|
+
console.error(`${pkg.name}: it does not report a version, so it cannot be checked for local changes`);
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// Said before the check rather than after: it reaches the registry, so it can
|
|
446
|
+
// sit there for a while with nothing on screen to explain the wait.
|
|
447
|
+
console.error(`${pkg.name}: comparing it against the published ${version} for local changes...`);
|
|
448
|
+
|
|
449
|
+
const { files, modeOnly, error } = await findLocalChanges(destination, version);
|
|
450
|
+
|
|
451
|
+
// The check needs the registry, so it cannot run offline or against a version
|
|
452
|
+
// that was never published. Whether anything was edited locally is then
|
|
453
|
+
// unknown, which is not the same as knowing there was nothing: ask when there
|
|
454
|
+
// is someone to ask, and only fall through to updating when there is not.
|
|
455
|
+
if (error) {
|
|
456
|
+
console.error(`${pkg.name}: could not check it for local changes: ${error}`);
|
|
457
|
+
if (options.yes) return false;
|
|
458
|
+
|
|
459
|
+
const answer = await confirm("Update without knowing what it would replace? (y/N) ");
|
|
460
|
+
if (answer === null) {
|
|
461
|
+
console.error(`${pkg.name}: no terminal to ask at, updating anyway`);
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
if (!answer) {
|
|
465
|
+
console.error(`${pkg.name}: update cancelled, nothing was changed`);
|
|
466
|
+
return true;
|
|
467
|
+
}
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Worth saying rather than hiding: it explains why the count here is smaller
|
|
472
|
+
// than the one the printed command reports, and a mode that keeps coming back
|
|
473
|
+
// is worth knowing about even though an update is not what changed it.
|
|
474
|
+
if (modeOnly) {
|
|
475
|
+
console.error(
|
|
476
|
+
`${pkg.name}: ${modeOnly} file(s) differ only in file mode, with identical contents; ignoring them`,
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
if (!files.length) return false;
|
|
481
|
+
|
|
482
|
+
console.error(
|
|
483
|
+
`${pkg.name}: ${files.length} file(s) differ from ${pkg.name}@${version} and will be replaced:`,
|
|
484
|
+
);
|
|
485
|
+
for (const file of files) console.error(` ${file}`);
|
|
486
|
+
|
|
487
|
+
if (options.yes) return false;
|
|
488
|
+
|
|
489
|
+
const answer = await confirm("Update anyway? (y/N) ");
|
|
490
|
+
if (answer === null) {
|
|
491
|
+
fail("not running in a terminal, pass --yes to update anyway");
|
|
492
|
+
}
|
|
493
|
+
if (!answer) {
|
|
494
|
+
console.error(`${pkg.name}: update cancelled, nothing was changed`);
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
export async function runInstall(arguments_ = []) {
|
|
501
|
+
const options = parseInstallArguments(arguments_);
|
|
502
|
+
if (options.help) {
|
|
503
|
+
console.log(installUsage());
|
|
504
|
+
return 0;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
const target = resolve(options.target);
|
|
508
|
+
const destination = options.strip ? target : resolve(target, pkg.name);
|
|
509
|
+
|
|
510
|
+
// Copying a tree into itself either fails or recurses forever, depending on
|
|
511
|
+
// which of the two copy paths runs, so refuse both shapes up front.
|
|
512
|
+
const fromSource = relative(rootDir, destination);
|
|
513
|
+
if (!fromSource) fail(`install destination is this installation: ${destination}`);
|
|
514
|
+
if (!fromSource.startsWith("..") && !isAbsolute(fromSource)) {
|
|
515
|
+
fail(`install destination is inside this installation: ${destination}`);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// An existing installation is updated rather than refused: the copy only
|
|
519
|
+
// ever adds and overwrites, and the files both sides write to are merged
|
|
520
|
+
// afterwards. --force skips the merge and leaves the shipped versions.
|
|
521
|
+
const occupied = existsSync(destination) && hasEntries(destination);
|
|
522
|
+
const reason = occupied ? notInstallReason(destination) : null;
|
|
523
|
+
const update = occupied && reason === null;
|
|
524
|
+
if (occupied && !update && !options.force) {
|
|
525
|
+
console.error(`${pkg.name}: ${destination} is not empty, and ${reason}`);
|
|
526
|
+
fail("pass --force to install over it, or name another directory");
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
// Named before anything is written, on every path that has found an existing
|
|
530
|
+
// installation: --force replaces it without asking, so that is the one that
|
|
531
|
+
// most needs to say which directory it is about to overwrite.
|
|
532
|
+
if (update) {
|
|
533
|
+
const installedVersion = readJsonOrNull(resolve(destination, "package.json"))?.version;
|
|
534
|
+
console.error(
|
|
535
|
+
installedVersion
|
|
536
|
+
? `${pkg.name}: found ${pkg.name}@${installedVersion} at ${destination}`
|
|
537
|
+
: `${pkg.name}: found an unversioned ${pkg.name} installation at ${destination}`,
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
if (!existsSync(resolve(destination, "bin", "init.js"))) {
|
|
541
|
+
console.error(`${pkg.name}: it is missing bin/init.js; updating restores it`);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if (options.force) {
|
|
545
|
+
console.error(`${pkg.name}: --force, replacing it without checking for local changes`);
|
|
546
|
+
} else {
|
|
547
|
+
const cancelled = await confirmLocalChanges(destination, installedVersion, options);
|
|
548
|
+
if (cancelled) return 1;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
const installed = update && !options.force ? readInstalledState(destination) : null;
|
|
553
|
+
|
|
554
|
+
mkdirSync(destination, { recursive: true });
|
|
555
|
+
const method = copyTree(rootDir, destination);
|
|
556
|
+
const notes = installed ? applyMerge(destination, installed) : [];
|
|
557
|
+
|
|
558
|
+
const action = update ? (options.force ? "overwrote" : "updated") : "installed to";
|
|
559
|
+
console.error(`${pkg.name}@${pkg.version}: ${action} ${destination} (${method})`);
|
|
560
|
+
for (const note of notes) console.error(` ${note}`);
|
|
561
|
+
if (update && options.force) {
|
|
562
|
+
console.error(" --force: local package.json, apps/cmdlist and .bashrc were replaced");
|
|
563
|
+
}
|
|
564
|
+
console.error(`Start it with: bun ${resolve(destination, "bin", "init.js")}`);
|
|
565
|
+
return 0;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (import.meta.main) {
|
|
569
|
+
process.exitCode = await runInstall(process.argv.slice(2));
|
|
570
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableExtensions EnableDelayedExpansion
|
|
3
|
+
set "JSMDCUI_ENCODING="
|
|
4
|
+
for %%A in (%*) do (
|
|
5
|
+
set "JSMDCUI_ARGUMENT=%%~A"
|
|
6
|
+
if /I "%%~xA"==".md" set "JSMDCUI_ENCODING=--mdcui"
|
|
7
|
+
if /I "!JSMDCUI_ARGUMENT:~0,6!"=="--demo" set "JSMDCUI_ENCODING=--mdcui"
|
|
8
|
+
if /I "!JSMDCUI_ARGUMENT!"=="--cdp-maze" set "JSMDCUI_ENCODING=--mdcui"
|
|
9
|
+
)
|
|
10
|
+
call "%~dp0bun.bat" "%~dp0..\apps\jsmdcui\src\index.js" %JSMDCUI_ENCODING% %*
|
|
11
|
+
exit /b %ERRORLEVEL%
|