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,779 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import pkg from "../package.json" with { type: "json" };
|
|
4
|
+
import { existsSync, lstatSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, unlinkSync } from "node:fs";
|
|
5
|
+
import { homedir, tmpdir as systemTmpDir } from "node:os";
|
|
6
|
+
import { basename, delimiter, dirname, isAbsolute, resolve } from "node:path";
|
|
7
|
+
import { createInterface } from "node:readline/promises";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
|
|
10
|
+
const binDir = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const rootDir = resolve(binDir, "..");
|
|
12
|
+
const REPO_ROOT = rootDir;
|
|
13
|
+
|
|
14
|
+
function fail(message) {
|
|
15
|
+
console.error(`${pkg.name}: ${message}`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function usage() {
|
|
20
|
+
return `${pkg.name} - ${pkg.description}
|
|
21
|
+
|
|
22
|
+
Usage:
|
|
23
|
+
${pkg.name} [init options] [jsgotty options]
|
|
24
|
+
|
|
25
|
+
Init options:
|
|
26
|
+
--local
|
|
27
|
+
Start Buninu in this terminal
|
|
28
|
+
instead of a Remote Shell
|
|
29
|
+
reached from a browser
|
|
30
|
+
(via jsgotty, the default)
|
|
31
|
+
|
|
32
|
+
-h, --help
|
|
33
|
+
Show this help and exit
|
|
34
|
+
-V, --version
|
|
35
|
+
Show version & runtime info, then exit
|
|
36
|
+
|
|
37
|
+
--readme
|
|
38
|
+
Render README.md in the terminal and exit
|
|
39
|
+
--changelog
|
|
40
|
+
Render CHANGELOG.md in the terminal and exit
|
|
41
|
+
|
|
42
|
+
--readme-tui
|
|
43
|
+
Open README.md as a Terminal UI
|
|
44
|
+
--readme-wui
|
|
45
|
+
Serve README.md as a Web UI
|
|
46
|
+
|
|
47
|
+
--export [output.tgz]
|
|
48
|
+
Export this Buninu installation
|
|
49
|
+
(default: ./buninu.tgz)
|
|
50
|
+
|
|
51
|
+
--export-config [output.json]
|
|
52
|
+
Export Buninu's package.json
|
|
53
|
+
(default: ./buninu.json)
|
|
54
|
+
|
|
55
|
+
Install options:
|
|
56
|
+
-i, --install [dir]
|
|
57
|
+
Install this package into <dir>/${pkg.name}
|
|
58
|
+
(default: .)
|
|
59
|
+
|
|
60
|
+
-si, --strip-install [dir]
|
|
61
|
+
Install into <dir> directly
|
|
62
|
+
Without a top-level directory of its own
|
|
63
|
+
|
|
64
|
+
(--install --help for full options)
|
|
65
|
+
|
|
66
|
+
Remote Shell options:
|
|
67
|
+
--shell <path|name>
|
|
68
|
+
Override buninu.shell for this run
|
|
69
|
+
--command <command>
|
|
70
|
+
Override buninu.command for this run
|
|
71
|
+
|
|
72
|
+
Direct app launch
|
|
73
|
+
(must be the first argument)
|
|
74
|
+
(skips the shell/command startup flow entirely):
|
|
75
|
+
|
|
76
|
+
--jsgotty [args...]
|
|
77
|
+
Spawn jsgotty directly,
|
|
78
|
+
forwarding remaining arguments,
|
|
79
|
+
and exit with its exit code
|
|
80
|
+
(--jsgotty --help = jsgotty options)
|
|
81
|
+
|
|
82
|
+
--jsmdcui [args...]
|
|
83
|
+
Spawn jsmdcui directly,
|
|
84
|
+
same forwarding behavior
|
|
85
|
+
|
|
86
|
+
--bunmsh [args...]
|
|
87
|
+
Spawn bunmsh directly,
|
|
88
|
+
same forwarding behavior
|
|
89
|
+
|
|
90
|
+
--musl-la [args...]
|
|
91
|
+
Spawn musl-la directly,
|
|
92
|
+
same forwarding behavior
|
|
93
|
+
|
|
94
|
+
Package configuration:
|
|
95
|
+
package.json contains a buninu section for default and platform settings.
|
|
96
|
+
buninu.shell Select the shell to start
|
|
97
|
+
buninu.command Run a startup command before entering the shell
|
|
98
|
+
buninu.exitAfterCmd Exit after buninu.command instead of falling back to
|
|
99
|
+
the shell (default: false)
|
|
100
|
+
|
|
101
|
+
All other options are forwarded to jsgotty. Without buninu.command, the
|
|
102
|
+
selected shell starts directly. With a command, it runs from the package.json
|
|
103
|
+
directory and then returns to the interactive shell regardless of exit status,
|
|
104
|
+
unless buninu.exitAfterCmd is true, in which case it exits instead.
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async function handleInformationArguments(arguments_) {
|
|
109
|
+
if (arguments_.includes("-h") || arguments_.includes("--help")) {
|
|
110
|
+
console.log(usage());
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (arguments_.includes("-V") || arguments_.includes("--version")) {
|
|
115
|
+
console.log(`${pkg.name}: ${pkg.description}`);
|
|
116
|
+
console.log("Version:", pkg.version);
|
|
117
|
+
console.log("Runtime:", `Bun ${Bun.version}`);
|
|
118
|
+
console.log("Platform:", `${process.platform}/${process.arch}`);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const exportOption = readExportArgument(arguments_);
|
|
123
|
+
if (exportOption) {
|
|
124
|
+
await exportInstallation(exportOption.output);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const exportConfigOption = readExportConfigArgument(arguments_);
|
|
129
|
+
if (exportConfigOption) {
|
|
130
|
+
await exportConfig(exportConfigOption.output);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (arguments_.includes("--readme")) {
|
|
135
|
+
const readmePath = resolve(REPO_ROOT, "README.md");
|
|
136
|
+
if (!await pathExists(readmePath)) fail(`README not found: ${readmePath}`);
|
|
137
|
+
const markdown = await Bun.file(readmePath).text();
|
|
138
|
+
process.stdout.write(Bun.markdown.ansi(markdown, { hyperlinks: true }));
|
|
139
|
+
if (!markdown.endsWith("\n")) process.stdout.write("\n");
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const markdownUi = arguments_.includes("--readme-tui")
|
|
144
|
+
? "--tui"
|
|
145
|
+
: arguments_.includes("--readme-wui")
|
|
146
|
+
? "--wui"
|
|
147
|
+
: null;
|
|
148
|
+
if (markdownUi) {
|
|
149
|
+
await openReadmeMarkdownUi(markdownUi);
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (arguments_.includes("--changelog")) {
|
|
154
|
+
const changelogPath = resolve(REPO_ROOT, "CHANGELOG.md");
|
|
155
|
+
if (!await pathExists(changelogPath)) fail(`CHANGELOG not found: ${changelogPath}`);
|
|
156
|
+
const markdown = await Bun.file(changelogPath).text();
|
|
157
|
+
process.stdout.write(Bun.markdown.ansi(markdown, { hyperlinks: true }));
|
|
158
|
+
if (!markdown.endsWith("\n")) process.stdout.write("\n");
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// jsmdcui writes five generated companion files beside the Markdown it opens
|
|
166
|
+
// (`*.md.front.js`, `*.md.back.js`, `*.md.html`, `*.md-rpc.js`,
|
|
167
|
+
// `*.md-server.js`), and needs that directory to be writable. Run it on a copy
|
|
168
|
+
// under TMPDIR rather than on README.md in place: an installation is the
|
|
169
|
+
// user's to keep, `--export` would carry the generated files to another
|
|
170
|
+
// machine, an update never deletes them again, and under `npx` the package
|
|
171
|
+
// directory is a cache that should not be written to at all. Nothing is lost
|
|
172
|
+
// by the move -- the README's only image is a remote URL, and what makes it
|
|
173
|
+
// navigable is same-document `#heading-id` links, which resolve wherever the
|
|
174
|
+
// file sits.
|
|
175
|
+
async function openReadmeMarkdownUi(mode) {
|
|
176
|
+
const readmePath = resolve(REPO_ROOT, "README.md");
|
|
177
|
+
if (!await pathExists(readmePath)) fail(`README not found: ${readmePath}`);
|
|
178
|
+
|
|
179
|
+
const entry = resolve(rootDir, "apps", "jsmdcui", "src", "index.js");
|
|
180
|
+
if (!await pathExists(entry)) fail(`jsmdcui not found: ${entry}`);
|
|
181
|
+
|
|
182
|
+
const environment = await detectEnvironment();
|
|
183
|
+
const workDir = resolve(resolveTmpDir(environment), "buninu-readme");
|
|
184
|
+
// Start from a clean directory so a stale generated file from an older
|
|
185
|
+
// README can never be served in place of a freshly generated one.
|
|
186
|
+
rmSync(workDir, { recursive: true, force: true });
|
|
187
|
+
mkdirSync(workDir, { recursive: true });
|
|
188
|
+
|
|
189
|
+
const target = resolve(workDir, "README.md");
|
|
190
|
+
await Bun.write(target, Bun.file(readmePath));
|
|
191
|
+
|
|
192
|
+
// jsmdcui's entry point is a bundled CLI with no exports: it reads
|
|
193
|
+
// process.argv at the top level and runs. Set the argv it expects and import
|
|
194
|
+
// it, so this stays one process instead of spawning a second Bun.
|
|
195
|
+
process.argv = [process.argv[0], entry, mode, target];
|
|
196
|
+
await import(entry);
|
|
197
|
+
|
|
198
|
+
// jsmdcui owns the process from here on: it holds the terminal UI, or the
|
|
199
|
+
// Web UI server, open. Never resolve -- returning would hand control back to
|
|
200
|
+
// the caller, whose process.exit(0) would cut the UI off before it draws.
|
|
201
|
+
// This keeps no handle of its own, so once jsmdcui's are gone the process
|
|
202
|
+
// still ends on its own.
|
|
203
|
+
await new Promise(() => {});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function readExportArgument(arguments_) {
|
|
207
|
+
for (let index = 0; index < arguments_.length; index += 1) {
|
|
208
|
+
const argument = arguments_[index];
|
|
209
|
+
if (argument === "--export") {
|
|
210
|
+
const next = arguments_[index + 1];
|
|
211
|
+
return { output: next || "buninu.tgz" };
|
|
212
|
+
}
|
|
213
|
+
if (argument.startsWith("--export=")) {
|
|
214
|
+
const output = argument.slice("--export=".length);
|
|
215
|
+
if (!output) fail("--export= requires an output path");
|
|
216
|
+
return { output };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function readExportConfigArgument(arguments_) {
|
|
223
|
+
for (let index = 0; index < arguments_.length; index += 1) {
|
|
224
|
+
const argument = arguments_[index];
|
|
225
|
+
if (argument === "--export-config") {
|
|
226
|
+
const next = arguments_[index + 1];
|
|
227
|
+
return { output: next || "buninu.json" };
|
|
228
|
+
}
|
|
229
|
+
if (argument.startsWith("--export-config=")) {
|
|
230
|
+
const output = argument.slice("--export-config=".length);
|
|
231
|
+
if (!output) fail("--export-config= requires an output path");
|
|
232
|
+
return { output };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
async function exportInstallation(output) {
|
|
239
|
+
const outputPath = resolve(process.cwd(), output);
|
|
240
|
+
const tar = Bun.which(process.platform === "win32" ? "tar.exe" : "tar") || Bun.which("tar");
|
|
241
|
+
if (!tar) fail("tar was not found in PATH");
|
|
242
|
+
|
|
243
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
244
|
+
const temporaryDir = mkdtempSync(resolve(systemTmpDir(), "buninu-export-"));
|
|
245
|
+
const temporaryArchive = resolve(temporaryDir, "buninu.tgz");
|
|
246
|
+
const temporaryBackup = resolve(temporaryDir, "previous-output.tgz");
|
|
247
|
+
const hadExistingOutput = existsSync(outputPath);
|
|
248
|
+
let exportError = null;
|
|
249
|
+
try {
|
|
250
|
+
// Keep the previous output recoverable, but remove it from its original
|
|
251
|
+
// path while tar walks REPO_ROOT so an in-tree export cannot include itself.
|
|
252
|
+
if (hadExistingOutput) {
|
|
253
|
+
if (!lstatSync(outputPath).isFile()) throw new Error(`export path is not a file: ${outputPath}`);
|
|
254
|
+
await Bun.write(temporaryBackup, Bun.file(outputPath));
|
|
255
|
+
unlinkSync(outputPath);
|
|
256
|
+
}
|
|
257
|
+
const process_ = Bun.spawn(
|
|
258
|
+
[tar, "-czf", temporaryArchive, "-C", dirname(REPO_ROOT), basename(REPO_ROOT)],
|
|
259
|
+
{ env: { ...process.env }, stdin: "inherit", stdout: "inherit", stderr: "inherit" },
|
|
260
|
+
);
|
|
261
|
+
const status = await process_.exited;
|
|
262
|
+
if (status !== 0) throw new Error(`tar failed with exit ${status}`);
|
|
263
|
+
await Bun.write(outputPath, Bun.file(temporaryArchive));
|
|
264
|
+
} catch (error) {
|
|
265
|
+
exportError = error;
|
|
266
|
+
if (hadExistingOutput && await pathExists(temporaryBackup)) {
|
|
267
|
+
await Bun.write(outputPath, Bun.file(temporaryBackup));
|
|
268
|
+
}
|
|
269
|
+
} finally {
|
|
270
|
+
rmSync(temporaryDir, { recursive: true, force: true });
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (exportError) fail(exportError?.message || String(exportError));
|
|
274
|
+
console.log(outputPath);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
async function exportConfig(output) {
|
|
278
|
+
const outputPath = resolve(process.cwd(), output);
|
|
279
|
+
|
|
280
|
+
if (existsSync(outputPath)) {
|
|
281
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
282
|
+
let answer;
|
|
283
|
+
try {
|
|
284
|
+
answer = await rl.question(`${outputPath} already exists and may be overwritten. Continue? [y/N] `);
|
|
285
|
+
} finally {
|
|
286
|
+
rl.close();
|
|
287
|
+
}
|
|
288
|
+
if (!/^[yY]/.test(answer.trim())) fail("Cancelled: output file was not overwritten");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const packageJsonPath = resolve(REPO_ROOT, "package.json");
|
|
292
|
+
await Bun.write(outputPath, Bun.file(packageJsonPath));
|
|
293
|
+
console.log(outputPath);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function splitCommand(command) {
|
|
297
|
+
const words = [];
|
|
298
|
+
let word = "";
|
|
299
|
+
let quote = "";
|
|
300
|
+
let escaped = false;
|
|
301
|
+
|
|
302
|
+
for (const char of command.trim()) {
|
|
303
|
+
if (escaped) {
|
|
304
|
+
word += char;
|
|
305
|
+
escaped = false;
|
|
306
|
+
} else if (char === "\\" && quote !== "'") {
|
|
307
|
+
escaped = true;
|
|
308
|
+
} else if (quote) {
|
|
309
|
+
if (char === quote) quote = "";
|
|
310
|
+
else word += char;
|
|
311
|
+
} else if (char === "'" || char === '"') {
|
|
312
|
+
quote = char;
|
|
313
|
+
} else if (/\s/.test(char)) {
|
|
314
|
+
if (word) words.push(word), word = "";
|
|
315
|
+
} else {
|
|
316
|
+
word += char;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (escaped || quote) fail("invalid quoting in package.json scripts.start");
|
|
321
|
+
if (word) words.push(word);
|
|
322
|
+
return words;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
async function pathExists(path) {
|
|
326
|
+
return Bun.file(path).exists();
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
async function findCommand(command) {
|
|
330
|
+
if (!command) return null;
|
|
331
|
+
if (command.includes("/") || command.includes("\\")) {
|
|
332
|
+
const path = isAbsolute(command) ? command : resolve(rootDir, command);
|
|
333
|
+
return await pathExists(path) ? path : null;
|
|
334
|
+
}
|
|
335
|
+
return Bun.which(command);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
async function detectEnvironment() {
|
|
339
|
+
const windows = process.platform === "win32" || Boolean(process.env.WINDIR);
|
|
340
|
+
const termux = !windows && await pathExists("/data/data/com.termux/files/usr/bin/bash");
|
|
341
|
+
const android = !windows && !termux && (
|
|
342
|
+
process.platform === "android" ||
|
|
343
|
+
await pathExists("/system/bin/linker64") ||
|
|
344
|
+
Boolean(process.env.ANDROID_ROOT && process.env.ANDROID_DATA)
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
if (windows) {
|
|
348
|
+
return {
|
|
349
|
+
name: "windows",
|
|
350
|
+
shell:
|
|
351
|
+
Bun.which("pwsh.exe") ||
|
|
352
|
+
Bun.which("powershell.exe") ||
|
|
353
|
+
await findCommand(process.env.COMSPEC) ||
|
|
354
|
+
Bun.which("cmd.exe") ||
|
|
355
|
+
"cmd.exe",
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (termux) {
|
|
360
|
+
return {
|
|
361
|
+
name: "linux",
|
|
362
|
+
shell:
|
|
363
|
+
// await findCommand(process.env.SHELL) ||
|
|
364
|
+
Bun.which("bash") ||
|
|
365
|
+
Bun.which("sh") ||
|
|
366
|
+
"/bin/sh",
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (android) {
|
|
371
|
+
return {
|
|
372
|
+
name: "android",
|
|
373
|
+
shell:
|
|
374
|
+
// await findCommand(process.env.SHELL) ||
|
|
375
|
+
(await pathExists("/system/bin/sh") ? "/system/bin/sh" : null) ||
|
|
376
|
+
Bun.which("bash") ||
|
|
377
|
+
Bun.which("sh") ||
|
|
378
|
+
"/bin/sh",
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if (process.platform === "darwin") {
|
|
383
|
+
return {
|
|
384
|
+
name: "macos",
|
|
385
|
+
shell:
|
|
386
|
+
// await findCommand(process.env.SHELL) ||
|
|
387
|
+
Bun.which("zsh") ||
|
|
388
|
+
Bun.which("bash") ||
|
|
389
|
+
Bun.which("sh") ||
|
|
390
|
+
"/bin/zsh",
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (process.platform === "linux") {
|
|
395
|
+
return {
|
|
396
|
+
name: "linux",
|
|
397
|
+
shell:
|
|
398
|
+
// await findCommand(process.env.SHELL) ||
|
|
399
|
+
Bun.which("bash") ||
|
|
400
|
+
Bun.which("sh") ||
|
|
401
|
+
"/bin/sh",
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return {
|
|
406
|
+
name: `unix:${process.platform}`,
|
|
407
|
+
shell:
|
|
408
|
+
// await findCommand(process.env.SHELL) ||
|
|
409
|
+
Bun.which("bash") ||
|
|
410
|
+
Bun.which("sh") ||
|
|
411
|
+
"/bin/sh",
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
async function runPlatformSwitch(environment) {
|
|
416
|
+
const scriptName = environment.name === "android"
|
|
417
|
+
? "switch_to_android.sh"
|
|
418
|
+
: environment.name === "linux"
|
|
419
|
+
? "switch_to_linux.sh"
|
|
420
|
+
: null;
|
|
421
|
+
if (!scriptName) return;
|
|
422
|
+
|
|
423
|
+
const scriptPath = resolve(binDir, scriptName);
|
|
424
|
+
if (!await pathExists(scriptPath)) {
|
|
425
|
+
fail(`platform switch script does not exist: ${scriptPath}`);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
const shell = environment.name === "android" && await pathExists("/system/bin/sh")
|
|
429
|
+
? "/system/bin/sh"
|
|
430
|
+
: Bun.which("sh") || "/bin/sh";
|
|
431
|
+
const result = Bun.spawn([shell, scriptPath], {
|
|
432
|
+
cwd: rootDir,
|
|
433
|
+
env: { ...process.env },
|
|
434
|
+
stdin: "inherit",
|
|
435
|
+
stdout: "inherit",
|
|
436
|
+
stderr: "inherit",
|
|
437
|
+
});
|
|
438
|
+
const status = await result.exited;
|
|
439
|
+
if (status !== 0) {
|
|
440
|
+
fail(`${scriptName} failed with exit ${status}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
async function rebuildNativeSymlinks(environment) {
|
|
445
|
+
if (environment.name === "windows") return;
|
|
446
|
+
|
|
447
|
+
const platformLinks = environment.name === "android"
|
|
448
|
+
? {
|
|
449
|
+
bun: "androidNativeLibs/libbun.so",
|
|
450
|
+
shloader: "androidNativeLibs/libsh-loader.so",
|
|
451
|
+
}
|
|
452
|
+
: {
|
|
453
|
+
bun: "bun.sh",
|
|
454
|
+
shloader: "multicall.sh",
|
|
455
|
+
};
|
|
456
|
+
const cmdlistPath = resolve(rootDir, "apps", "cmdlist");
|
|
457
|
+
if (!await pathExists(cmdlistPath)) {
|
|
458
|
+
fail(`command list does not exist: ${cmdlistPath}`);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
const commandNames = [...new Set(
|
|
462
|
+
(await Bun.file(cmdlistPath).text())
|
|
463
|
+
.split(/\r?\n/)
|
|
464
|
+
.map((line) => line.trim())
|
|
465
|
+
.filter((line) => line && !line.startsWith("#")),
|
|
466
|
+
)];
|
|
467
|
+
for (const name of commandNames) {
|
|
468
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {
|
|
469
|
+
fail(`invalid command name in ${cmdlistPath}: ${name}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
const links = Object.fromEntries([
|
|
474
|
+
...Object.entries(platformLinks),
|
|
475
|
+
...commandNames.map((name) => [name, "shloader"]),
|
|
476
|
+
]);
|
|
477
|
+
|
|
478
|
+
for (const [name, target] of Object.entries(links)) {
|
|
479
|
+
const linkPath = resolve(binDir, name);
|
|
480
|
+
try {
|
|
481
|
+
const existing = lstatSync(linkPath);
|
|
482
|
+
if (!existing.isSymbolicLink()) {
|
|
483
|
+
fail(`cannot rebuild symlink over non-symlink: ${linkPath}`);
|
|
484
|
+
}
|
|
485
|
+
unlinkSync(linkPath);
|
|
486
|
+
} catch (error) {
|
|
487
|
+
if (error?.code !== "ENOENT") throw error;
|
|
488
|
+
}
|
|
489
|
+
symlinkSync(target, linkPath);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function getFreePort() {
|
|
494
|
+
const listener = Bun.listen({
|
|
495
|
+
hostname: "127.0.0.1",
|
|
496
|
+
port: 0,
|
|
497
|
+
socket: {
|
|
498
|
+
data() {},
|
|
499
|
+
},
|
|
500
|
+
});
|
|
501
|
+
const port = listener.port;
|
|
502
|
+
listener.stop(true);
|
|
503
|
+
return port;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// buninu.xdgDataHome moves the data directory XDG-aware programs write to,
|
|
507
|
+
// bunmsh's command history among them, without touching HOME: a shell started
|
|
508
|
+
// here still finds the SSH keys and Git configuration in the user's own home.
|
|
509
|
+
// `true` puts it inside the installation so it travels with a copied tree; a
|
|
510
|
+
// string names a directory, resolved from the package.json directory when it
|
|
511
|
+
// is relative, the way buninu.shell already resolves one.
|
|
512
|
+
function configuredXdgDataHome() {
|
|
513
|
+
const configured = pkg.buninu?.xdgDataHome;
|
|
514
|
+
if (configured === true) return resolve(rootDir, ".local", "share");
|
|
515
|
+
if (typeof configured !== "string" || !configured.trim()) return null;
|
|
516
|
+
return isAbsolute(configured) ? configured : resolve(rootDir, configured);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
function resolveTmpDir(environment) {
|
|
520
|
+
const androidCacheDir = resolve(dirname(rootDir), "cache");
|
|
521
|
+
return process.env.TMPDIR || (
|
|
522
|
+
environment.name === "android"
|
|
523
|
+
? existsSync(androidCacheDir)
|
|
524
|
+
? androidCacheDir
|
|
525
|
+
: resolve(rootDir, "tmp")
|
|
526
|
+
: systemTmpDir()
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
async function createChildEnvironment(environment) {
|
|
531
|
+
const tmpDir = resolveTmpDir(environment);
|
|
532
|
+
const homeDir = process.env.HOME || homedir() || rootDir;
|
|
533
|
+
const envFile = await pathExists(resolve(rootDir, ".bashrc"))
|
|
534
|
+
? resolve(rootDir, ".bashrc")
|
|
535
|
+
: await pathExists(resolve(homeDir, ".bashrc"))
|
|
536
|
+
? resolve(homeDir, ".bashrc")
|
|
537
|
+
: null;
|
|
538
|
+
|
|
539
|
+
const xdgDataHome = configuredXdgDataHome();
|
|
540
|
+
|
|
541
|
+
mkdirSync(tmpDir, { recursive: true });
|
|
542
|
+
if (xdgDataHome) mkdirSync(xdgDataHome, { recursive: true });
|
|
543
|
+
|
|
544
|
+
const inheritedPath = process.env.PATH || "";
|
|
545
|
+
const hasTermuxExecPreload =
|
|
546
|
+
environment.name === "android" &&
|
|
547
|
+
String(process.env.LD_PRELOAD || "").includes("libtermux-exec.so");
|
|
548
|
+
const pathEntries = [
|
|
549
|
+
...(hasTermuxExecPreload ? ["/system/bin"] : []),
|
|
550
|
+
inheritedPath,
|
|
551
|
+
binDir,
|
|
552
|
+
].filter(Boolean);
|
|
553
|
+
|
|
554
|
+
const childEnvironment = { ...process.env };
|
|
555
|
+
for (const key of Object.keys(childEnvironment)) {
|
|
556
|
+
if (key.toLowerCase() === "path") delete childEnvironment[key];
|
|
557
|
+
}
|
|
558
|
+
childEnvironment[environment.name === "windows" ? "Path" : "PATH"] =
|
|
559
|
+
pathEntries.join(delimiter);
|
|
560
|
+
|
|
561
|
+
return {
|
|
562
|
+
...childEnvironment,
|
|
563
|
+
HOME: homeDir,
|
|
564
|
+
TMPDIR: tmpDir,
|
|
565
|
+
SHELL: process.env.SHELL || environment.shell,
|
|
566
|
+
BUNINU_HOME: rootDir,
|
|
567
|
+
...(xdgDataHome ? { XDG_DATA_HOME: xdgDataHome } : {}),
|
|
568
|
+
...(envFile ? { ENV: envFile } : {}),
|
|
569
|
+
TERM: process.env.TERM || "xterm-256color",
|
|
570
|
+
COLORTERM: process.env.COLORTERM || "truecolor",
|
|
571
|
+
DISPLAY: process.env.DISPLAY || "127.0.0.1:0",
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
const directAppTargets = {
|
|
576
|
+
"--jsgotty": "jsgotty",
|
|
577
|
+
"--jsmdcui": "jsmdcui",
|
|
578
|
+
"--bunmsh": "bunmsh",
|
|
579
|
+
"--musl-la": "musl-la",
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
async function runDirectApp(name, forwardedArgs, environment) {
|
|
583
|
+
const isWindows = environment.name === "windows";
|
|
584
|
+
const launcherPath = resolve(binDir, isWindows ? `${name}.bat` : name);
|
|
585
|
+
if (!await pathExists(launcherPath)) {
|
|
586
|
+
fail(`${name} is not available on ${environment.name}: ${launcherPath}`);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
const childEnvironment = await createChildEnvironment(environment);
|
|
590
|
+
const argv = isWindows
|
|
591
|
+
? [process.env.ComSpec || "cmd.exe", "/c", launcherPath, ...forwardedArgs]
|
|
592
|
+
: [launcherPath, ...forwardedArgs];
|
|
593
|
+
|
|
594
|
+
const child = Bun.spawn(argv, {
|
|
595
|
+
cwd: rootDir,
|
|
596
|
+
env: childEnvironment,
|
|
597
|
+
stdin: "inherit",
|
|
598
|
+
stdout: "inherit",
|
|
599
|
+
stderr: "inherit",
|
|
600
|
+
});
|
|
601
|
+
process.exit(await child.exited);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
function readInitArguments(arguments_) {
|
|
605
|
+
const forwarded = [];
|
|
606
|
+
let shell = null;
|
|
607
|
+
let command = null;
|
|
608
|
+
|
|
609
|
+
for (let index = 0; index < arguments_.length; index += 1) {
|
|
610
|
+
const argument = arguments_[index];
|
|
611
|
+
if (argument === "--shell" || argument === "--terminal") {
|
|
612
|
+
shell = arguments_[index + 1];
|
|
613
|
+
if (!shell) fail(`${argument} requires a command or executable path`);
|
|
614
|
+
index += 1;
|
|
615
|
+
} else if (argument.startsWith("--shell=") || argument.startsWith("--terminal=")) {
|
|
616
|
+
shell = argument.slice(argument.indexOf("=") + 1);
|
|
617
|
+
if (!shell) fail(`${argument.split("=")[0]} requires a command or executable path`);
|
|
618
|
+
} else if (argument === "--command") {
|
|
619
|
+
command = arguments_[index + 1];
|
|
620
|
+
if (!command) fail("--command requires a shell command string");
|
|
621
|
+
index += 1;
|
|
622
|
+
} else if (argument.startsWith("--command=")) {
|
|
623
|
+
command = argument.slice("--command=".length);
|
|
624
|
+
if (!command) fail("--command requires a shell command string");
|
|
625
|
+
} else {
|
|
626
|
+
forwarded.push(argument);
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
return { shell, command, forwarded };
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
function shellCommandArguments(shell, command, exitAfterCmd) {
|
|
634
|
+
if (!command) return [shell];
|
|
635
|
+
|
|
636
|
+
const shellName = basename(shell).toLowerCase();
|
|
637
|
+
if (shellName === "cmd" || shellName === "cmd.exe") {
|
|
638
|
+
if (exitAfterCmd) return [shell, "/d", "/s", "/c", command];
|
|
639
|
+
const quotedShell = `"${shell.replaceAll('"', '""')}"`;
|
|
640
|
+
return [shell, "/d", "/s", "/c", `${command} & ${quotedShell}`];
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
if (["powershell", "powershell.exe", "pwsh", "pwsh.exe"].includes(shellName)) {
|
|
644
|
+
if (exitAfterCmd) {
|
|
645
|
+
return [
|
|
646
|
+
shell,
|
|
647
|
+
"-NoLogo",
|
|
648
|
+
"-Command",
|
|
649
|
+
`& { ${command}; if (-not $?) { Write-Error 'Startup command failed' } }`,
|
|
650
|
+
];
|
|
651
|
+
}
|
|
652
|
+
const escapedShell = shell.replaceAll("'", "''");
|
|
653
|
+
return [
|
|
654
|
+
shell,
|
|
655
|
+
"-NoLogo",
|
|
656
|
+
"-Command",
|
|
657
|
+
`& { ${command}; if (-not $?) { Write-Error 'Startup command failed' }; & '${escapedShell}' -NoExit }`,
|
|
658
|
+
];
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
const wrapped =
|
|
662
|
+
`buninu_command=$1; shift; ( eval "$buninu_command" ); _buninu_status=$?; ` +
|
|
663
|
+
`if [ "$_buninu_status" -ne 0 ]; then ` +
|
|
664
|
+
`echo "buninu: startup command failed with exit $_buninu_status" >&2; ` +
|
|
665
|
+
(exitAfterCmd ? `fi; exit "$_buninu_status"` : `fi; exec "$0"`);
|
|
666
|
+
// Pass both the shell and startup command as argv instead of interpolating
|
|
667
|
+
// them into the wrapper. This keeps the wrapper single-line and avoids LF
|
|
668
|
+
// (Ctrl+J) characters in its process-list representation.
|
|
669
|
+
return [shell, "-c", wrapped, shell, command];
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
// Install is a mode of its own rather than a startup option, so it follows the
|
|
673
|
+
// same "must be the first argument" rule as the direct app launches above and
|
|
674
|
+
// never competes with an argument being forwarded to jsgotty.
|
|
675
|
+
function isInstallArgument(argument = "") {
|
|
676
|
+
return argument === "-i" || argument === "--install" ||
|
|
677
|
+
argument === "-si" || argument === "--strip-install" ||
|
|
678
|
+
argument.startsWith("--install=") || argument.startsWith("--strip-install=");
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
if (isInstallArgument(process.argv[2])) {
|
|
682
|
+
const { runInstall } = await import("./install.js");
|
|
683
|
+
process.exit(await runInstall(process.argv.slice(2)));
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
let startScript = pkg.scripts?.start;
|
|
687
|
+
|
|
688
|
+
if(process.argv.includes('--local'))
|
|
689
|
+
startScript = pkg.scripts?.local ;
|
|
690
|
+
|
|
691
|
+
if (typeof startScript !== "string" || !startScript.trim()) {
|
|
692
|
+
fail("package.json does not define scripts.start");
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
const directAppTarget = directAppTargets[process.argv[2]];
|
|
696
|
+
if (directAppTarget) {
|
|
697
|
+
const directEnvironment = await detectEnvironment();
|
|
698
|
+
await runPlatformSwitch(directEnvironment);
|
|
699
|
+
await rebuildNativeSymlinks(directEnvironment);
|
|
700
|
+
await runDirectApp(directAppTarget, process.argv.slice(3), directEnvironment);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
if (await handleInformationArguments(process.argv.slice(2))) process.exit(0);
|
|
704
|
+
|
|
705
|
+
const command = splitCommand(startScript);
|
|
706
|
+
if (!command.length) fail("package.json scripts.start is empty");
|
|
707
|
+
|
|
708
|
+
// Use the Bun currently running init.js instead of relying on a second PATH lookup.
|
|
709
|
+
if (command[0] === "bun") command[0] = process.execPath;
|
|
710
|
+
|
|
711
|
+
const environment = await detectEnvironment();
|
|
712
|
+
await runPlatformSwitch(environment);
|
|
713
|
+
await rebuildNativeSymlinks(environment);
|
|
714
|
+
const initArguments = readInitArguments(process.argv.slice(2));
|
|
715
|
+
const configuredShell =
|
|
716
|
+
pkg.buninu?.shell?.[environment.name] ??
|
|
717
|
+
pkg.buninu?.shell?.default ??
|
|
718
|
+
null;
|
|
719
|
+
const requestedShell =
|
|
720
|
+
initArguments.shell ||
|
|
721
|
+
configuredShell;
|
|
722
|
+
|
|
723
|
+
if (requestedShell) {
|
|
724
|
+
const resolvedShell = await findCommand(requestedShell);
|
|
725
|
+
if (!resolvedShell) {
|
|
726
|
+
fail(`configured shell does not exist: ${requestedShell}`);
|
|
727
|
+
}
|
|
728
|
+
environment.shell = resolvedShell;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
const commandConfiguration = pkg.buninu?.command;
|
|
732
|
+
const configuredCommand =
|
|
733
|
+
typeof commandConfiguration === "string"
|
|
734
|
+
? commandConfiguration
|
|
735
|
+
: commandConfiguration?.[environment.name] ??
|
|
736
|
+
commandConfiguration?.default ??
|
|
737
|
+
null;
|
|
738
|
+
const startupCommand = initArguments.command ?? configuredCommand;
|
|
739
|
+
const exitAfterCmd = Boolean(pkg.buninu?.exitAfterCmd);
|
|
740
|
+
|
|
741
|
+
const forwardedArguments = initArguments.forwarded;
|
|
742
|
+
const hasExplicitPort = forwardedArguments.some((argument) =>
|
|
743
|
+
argument === "-p" ||
|
|
744
|
+
argument === "--port" ||
|
|
745
|
+
argument.startsWith("--port=")
|
|
746
|
+
);
|
|
747
|
+
const portArguments = hasExplicitPort ? [] : ["-p", String(getFreePort())];
|
|
748
|
+
const childEnvironment = await createChildEnvironment(environment);
|
|
749
|
+
|
|
750
|
+
const infoSuffix =
|
|
751
|
+
process.argv.includes('--local') ?
|
|
752
|
+
'bunmsh' :
|
|
753
|
+
`port=${portArguments[1] || "user-defined"}, shell=${environment.shell}` ;
|
|
754
|
+
|
|
755
|
+
console.error(
|
|
756
|
+
`${pkg.name}@${pkg.version}: ${environment.name}/${process.arch}, ` + infoSuffix
|
|
757
|
+
);
|
|
758
|
+
|
|
759
|
+
const child = Bun.spawn(
|
|
760
|
+
[
|
|
761
|
+
...command,
|
|
762
|
+
...portArguments,
|
|
763
|
+
...forwardedArguments,
|
|
764
|
+
...shellCommandArguments(environment.shell, startupCommand, exitAfterCmd),
|
|
765
|
+
],
|
|
766
|
+
{
|
|
767
|
+
cwd: rootDir,
|
|
768
|
+
env: childEnvironment,
|
|
769
|
+
stdin: "inherit",
|
|
770
|
+
stdout: "inherit",
|
|
771
|
+
stderr: "inherit",
|
|
772
|
+
},
|
|
773
|
+
);
|
|
774
|
+
|
|
775
|
+
for (const signal of ["SIGINT", "SIGTERM"]) {
|
|
776
|
+
process.on(signal, () => child.kill(signal));
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
process.exit(await child.exited);
|