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.
Files changed (621) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Bun-LICENSE.md +84 -0
  3. package/LICENSES/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  4. package/LICENSES/GPL-2.0.txt +338 -0
  5. package/LICENSES/GPL-3.0.txt +674 -0
  6. package/LICENSES/LGPL-2.1.txt +501 -0
  7. package/LICENSES/Linux-syscall-note.txt +25 -0
  8. package/LICENSES/musl-COPYRIGHT.txt +193 -0
  9. package/NOTICE.md +184 -0
  10. package/README.md +537 -0
  11. package/build-image.sh +44 -0
  12. package/build-uki.sh +75 -0
  13. package/fetch-alpine.sh +80 -0
  14. package/fetch-bun.sh +41 -0
  15. package/fetch-plus-build.sh +11 -0
  16. package/hello/build-hello.sh +14 -0
  17. package/hello/hello.c +50 -0
  18. package/index.js +235 -0
  19. package/initramfs/bin/sh +3 -0
  20. package/initramfs/buninu/.bashrc +11 -0
  21. package/initramfs/buninu/ARCHITECTURE.md +452 -0
  22. package/initramfs/buninu/CHANGELOG.md +580 -0
  23. package/initramfs/buninu/LICENSE +21 -0
  24. package/initramfs/buninu/README.md +1161 -0
  25. package/initramfs/buninu/apps/bun/make-bunBin.sh +99 -0
  26. package/initramfs/buninu/apps/bunmsh/CHANGELOG.md +493 -0
  27. package/initramfs/buninu/apps/bunmsh/LICENSE +21 -0
  28. package/initramfs/buninu/apps/bunmsh/LICENSE-MICRO +58 -0
  29. package/initramfs/buninu/apps/bunmsh/LICENSE-MKSH +295 -0
  30. package/initramfs/buninu/apps/bunmsh/PORTING.md +192 -0
  31. package/initramfs/buninu/apps/bunmsh/README.md +1042 -0
  32. package/initramfs/buninu/apps/bunmsh/bunmsh +7 -0
  33. package/initramfs/buninu/apps/bunmsh/bunshell.md +61 -0
  34. package/initramfs/buninu/apps/bunmsh/help/README.md +2237 -0
  35. package/initramfs/buninu/apps/bunmsh/help/alias.md +22 -0
  36. package/initramfs/buninu/apps/bunmsh/help/basename.md +38 -0
  37. package/initramfs/buninu/apps/bunmsh/help/builtin.md +25 -0
  38. package/initramfs/buninu/apps/bunmsh/help/bun.md +27 -0
  39. package/initramfs/buninu/apps/bunmsh/help/bunmsh.md +47 -0
  40. package/initramfs/buninu/apps/bunmsh/help/cat.md +31 -0
  41. package/initramfs/buninu/apps/bunmsh/help/catfancy.md +35 -0
  42. package/initramfs/buninu/apps/bunmsh/help/cd.md +22 -0
  43. package/initramfs/buninu/apps/bunmsh/help/chmod.md +27 -0
  44. package/initramfs/buninu/apps/bunmsh/help/clear.md +21 -0
  45. package/initramfs/buninu/apps/bunmsh/help/colon.md +22 -0
  46. package/initramfs/buninu/apps/bunmsh/help/command.md +27 -0
  47. package/initramfs/buninu/apps/bunmsh/help/cp.md +28 -0
  48. package/initramfs/buninu/apps/bunmsh/help/curl.md +181 -0
  49. package/initramfs/buninu/apps/bunmsh/help/cut.md +25 -0
  50. package/initramfs/buninu/apps/bunmsh/help/date.md +25 -0
  51. package/initramfs/buninu/apps/bunmsh/help/dirname.md +25 -0
  52. package/initramfs/buninu/apps/bunmsh/help/echo.md +25 -0
  53. package/initramfs/buninu/apps/bunmsh/help/env.md +27 -0
  54. package/initramfs/buninu/apps/bunmsh/help/eval.md +22 -0
  55. package/initramfs/buninu/apps/bunmsh/help/exec.md +22 -0
  56. package/initramfs/buninu/apps/bunmsh/help/exit.md +21 -0
  57. package/initramfs/buninu/apps/bunmsh/help/export.md +22 -0
  58. package/initramfs/buninu/apps/bunmsh/help/false.md +22 -0
  59. package/initramfs/buninu/apps/bunmsh/help/find.md +33 -0
  60. package/initramfs/buninu/apps/bunmsh/help/getopts.md +28 -0
  61. package/initramfs/buninu/apps/bunmsh/help/grep.md +34 -0
  62. package/initramfs/buninu/apps/bunmsh/help/head.md +27 -0
  63. package/initramfs/buninu/apps/bunmsh/help/kill.md +43 -0
  64. package/initramfs/buninu/apps/bunmsh/help/ln.md +28 -0
  65. package/initramfs/buninu/apps/bunmsh/help/ls.md +37 -0
  66. package/initramfs/buninu/apps/bunmsh/help/lsbun.md +29 -0
  67. package/initramfs/buninu/apps/bunmsh/help/lsfancy.md +37 -0
  68. package/initramfs/buninu/apps/bunmsh/help/md5sum.md +21 -0
  69. package/initramfs/buninu/apps/bunmsh/help/mkdir.md +27 -0
  70. package/initramfs/buninu/apps/bunmsh/help/mktemp.md +26 -0
  71. package/initramfs/buninu/apps/bunmsh/help/mv.md +26 -0
  72. package/initramfs/buninu/apps/bunmsh/help/print.md +30 -0
  73. package/initramfs/buninu/apps/bunmsh/help/printf.md +25 -0
  74. package/initramfs/buninu/apps/bunmsh/help/pspa.md +38 -0
  75. package/initramfs/buninu/apps/bunmsh/help/pspac.md +57 -0
  76. package/initramfs/buninu/apps/bunmsh/help/pwd.md +21 -0
  77. package/initramfs/buninu/apps/bunmsh/help/read.md +27 -0
  78. package/initramfs/buninu/apps/bunmsh/help/readonly.md +27 -0
  79. package/initramfs/buninu/apps/bunmsh/help/realpath.md +21 -0
  80. package/initramfs/buninu/apps/bunmsh/help/rm.md +33 -0
  81. package/initramfs/buninu/apps/bunmsh/help/rmdir.md +27 -0
  82. package/initramfs/buninu/apps/bunmsh/help/sed.md +29 -0
  83. package/initramfs/buninu/apps/bunmsh/help/seq.md +29 -0
  84. package/initramfs/buninu/apps/bunmsh/help/serve.md +50 -0
  85. package/initramfs/buninu/apps/bunmsh/help/set.md +26 -0
  86. package/initramfs/buninu/apps/bunmsh/help/sha256sum.md +21 -0
  87. package/initramfs/buninu/apps/bunmsh/help/shift.md +23 -0
  88. package/initramfs/buninu/apps/bunmsh/help/sleep.md +25 -0
  89. package/initramfs/buninu/apps/bunmsh/help/sort.md +29 -0
  90. package/initramfs/buninu/apps/bunmsh/help/source.md +23 -0
  91. package/initramfs/buninu/apps/bunmsh/help/tab.md +30 -0
  92. package/initramfs/buninu/apps/bunmsh/help/tac.md +29 -0
  93. package/initramfs/buninu/apps/bunmsh/help/tail.md +27 -0
  94. package/initramfs/buninu/apps/bunmsh/help/tee.md +25 -0
  95. package/initramfs/buninu/apps/bunmsh/help/test.md +30 -0
  96. package/initramfs/buninu/apps/bunmsh/help/time.md +29 -0
  97. package/initramfs/buninu/apps/bunmsh/help/touch.md +26 -0
  98. package/initramfs/buninu/apps/bunmsh/help/tr.md +26 -0
  99. package/initramfs/buninu/apps/bunmsh/help/true.md +22 -0
  100. package/initramfs/buninu/apps/bunmsh/help/type.md +21 -0
  101. package/initramfs/buninu/apps/bunmsh/help/umask.md +22 -0
  102. package/initramfs/buninu/apps/bunmsh/help/unalias.md +28 -0
  103. package/initramfs/buninu/apps/bunmsh/help/uname.md +31 -0
  104. package/initramfs/buninu/apps/bunmsh/help/unset.md +28 -0
  105. package/initramfs/buninu/apps/bunmsh/help/wc.md +27 -0
  106. package/initramfs/buninu/apps/bunmsh/help/whence.md +26 -0
  107. package/initramfs/buninu/apps/bunmsh/help/which.md +41 -0
  108. package/initramfs/buninu/apps/bunmsh/help/yes.md +23 -0
  109. package/initramfs/buninu/apps/bunmsh/index.js +7 -0
  110. package/initramfs/buninu/apps/bunmsh/package.json +30 -0
  111. package/initramfs/buninu/apps/bunmsh/serve.js +468 -0
  112. package/initramfs/buninu/apps/bunmsh/single-exe/README.md +402 -0
  113. package/initramfs/buninu/apps/bunmsh/single-exe/assetsHelper.js +371 -0
  114. package/initramfs/buninu/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
  115. package/initramfs/buninu/apps/bunmsh/single-exe/assetsPacker.js +218 -0
  116. package/initramfs/buninu/apps/bunmsh/single-exe/compiled.js +527 -0
  117. package/initramfs/buninu/apps/bunmsh/single-exe/entry.mjs +17 -0
  118. package/initramfs/buninu/apps/bunmsh/src/cat-fancy.js +117 -0
  119. package/initramfs/buninu/apps/bunmsh/src/cat-operands.js +31 -0
  120. package/initramfs/buninu/apps/bunmsh/src/completion.js +363 -0
  121. package/initramfs/buninu/apps/bunmsh/src/curl.js +1191 -0
  122. package/initramfs/buninu/apps/bunmsh/src/environment.js +61 -0
  123. package/initramfs/buninu/apps/bunmsh/src/fancy-ls.js +186 -0
  124. package/initramfs/buninu/apps/bunmsh/src/find.js +119 -0
  125. package/initramfs/buninu/apps/bunmsh/src/history.js +198 -0
  126. package/initramfs/buninu/apps/bunmsh/src/main.js +850 -0
  127. package/initramfs/buninu/apps/bunmsh/src/mouse.js +103 -0
  128. package/initramfs/buninu/apps/bunmsh/src/shell.js +3932 -0
  129. package/initramfs/buninu/apps/bunmsh/test/catfancy.test.js +102 -0
  130. package/initramfs/buninu/apps/bunmsh/test/curl.test.js +335 -0
  131. package/initramfs/buninu/apps/bunmsh/test/reference-source.sh +1 -0
  132. package/initramfs/buninu/apps/bunmsh/test/reference.test.js +817 -0
  133. package/initramfs/buninu/apps/bunmsh/test/serve/README.md +3 -0
  134. package/initramfs/buninu/apps/bunmsh/test/serve/bad.json +1 -0
  135. package/initramfs/buninu/apps/bunmsh/test/serve/data.json +1 -0
  136. package/initramfs/buninu/apps/bunmsh/test/serve/data.json5 +1 -0
  137. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonc +2 -0
  138. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonl +2 -0
  139. package/initramfs/buninu/apps/bunmsh/test/serve/data.ndjson +1 -0
  140. package/initramfs/buninu/apps/bunmsh/test/serve/data.toml +3 -0
  141. package/initramfs/buninu/apps/bunmsh/test/serve/data.ts +15 -0
  142. package/initramfs/buninu/apps/bunmsh/test/serve/data.xml +1 -0
  143. package/initramfs/buninu/apps/bunmsh/test/serve/data.yaml +3 -0
  144. package/initramfs/buninu/apps/bunmsh/test/serve/data.yml +1 -0
  145. package/initramfs/buninu/apps/bunmsh/test/serve.test.js +241 -0
  146. package/initramfs/buninu/apps/bunmsh/test/shell.test.js +2092 -0
  147. package/initramfs/buninu/apps/bunmsh/test/shell1.test.js +1087 -0
  148. package/initramfs/buninu/apps/bunmsh/test/shell2.test.js +457 -0
  149. package/initramfs/buninu/apps/bunmsh/test/shell3.test.js +741 -0
  150. package/initramfs/buninu/apps/bunmsh/test/t.sh +12 -0
  151. package/initramfs/buninu/apps/bunx/bunx.js +172 -0
  152. package/initramfs/buninu/apps/cmdlist +48 -0
  153. package/initramfs/buninu/apps/jsgotty/LICENSE +23 -0
  154. package/initramfs/buninu/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
  155. package/initramfs/buninu/apps/jsgotty/NOTICE +21 -0
  156. package/initramfs/buninu/apps/jsgotty/README.en.md +294 -0
  157. package/initramfs/buninu/apps/jsgotty/README.md +296 -0
  158. package/initramfs/buninu/apps/jsgotty/client.mjs +700 -0
  159. package/initramfs/buninu/apps/jsgotty/env.sh +2 -0
  160. package/initramfs/buninu/apps/jsgotty/gotty.js +3334 -0
  161. package/initramfs/buninu/apps/jsgotty/node_modules/.package-lock.json +35 -0
  162. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
  163. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
  164. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
  165. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
  166. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
  167. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  168. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
  169. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
  170. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  171. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
  172. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
  173. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
  174. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
  175. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
  176. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
  177. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
  178. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
  179. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
  180. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  181. package/initramfs/buninu/apps/jsgotty/node_modules/ws/LICENSE +20 -0
  182. package/initramfs/buninu/apps/jsgotty/node_modules/ws/README.md +548 -0
  183. package/initramfs/buninu/apps/jsgotty/node_modules/ws/browser.js +8 -0
  184. package/initramfs/buninu/apps/jsgotty/node_modules/ws/index.js +22 -0
  185. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
  186. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
  187. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
  188. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
  189. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
  190. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
  191. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
  192. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
  193. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
  194. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
  195. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
  196. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
  197. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
  198. package/initramfs/buninu/apps/jsgotty/node_modules/ws/package.json +70 -0
  199. package/initramfs/buninu/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
  200. package/initramfs/buninu/apps/jsgotty/package-lock.json +46 -0
  201. package/initramfs/buninu/apps/jsgotty/package.json +19 -0
  202. package/initramfs/buninu/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
  203. package/initramfs/buninu/apps/jsgotty/patches/windowsTerminal.js +204 -0
  204. package/initramfs/buninu/apps/jsgotty/rz.js +199 -0
  205. package/initramfs/buninu/apps/jsgotty/single-exe/README.md +384 -0
  206. package/initramfs/buninu/apps/jsgotty/single-exe/assetsHelper.js +371 -0
  207. package/initramfs/buninu/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
  208. package/initramfs/buninu/apps/jsgotty/single-exe/assetsPacker.js +218 -0
  209. package/initramfs/buninu/apps/jsgotty/single-exe/compiled.js +498 -0
  210. package/initramfs/buninu/apps/jsgotty/single-exe/entry.mjs +23 -0
  211. package/initramfs/buninu/apps/jsgotty/single-exe/packAssets.sh +7 -0
  212. package/initramfs/buninu/apps/jsgotty/static/css/index.css +13 -0
  213. package/initramfs/buninu/apps/jsgotty/static/css/kitty.css +61 -0
  214. package/initramfs/buninu/apps/jsgotty/static/css/xterm.css +218 -0
  215. package/initramfs/buninu/apps/jsgotty/static/css/xterm_customize.css +35 -0
  216. package/initramfs/buninu/apps/jsgotty/static/favicon.ico +0 -0
  217. package/initramfs/buninu/apps/jsgotty/static/help.md +125 -0
  218. package/initramfs/buninu/apps/jsgotty/static/icon.svg +66 -0
  219. package/initramfs/buninu/apps/jsgotty/static/icon_192.png +0 -0
  220. package/initramfs/buninu/apps/jsgotty/static/index.html +164 -0
  221. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js +31537 -0
  222. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
  223. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.map +1 -0
  224. package/initramfs/buninu/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
  225. package/initramfs/buninu/apps/jsgotty/static/js/kitty.js +1101 -0
  226. package/initramfs/buninu/apps/jsgotty/static/js/windows_bridge.js +194 -0
  227. package/initramfs/buninu/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
  228. package/initramfs/buninu/apps/jsgotty/static/js/zmodem.js +1 -0
  229. package/initramfs/buninu/apps/jsgotty/static/manifest.json +15 -0
  230. package/initramfs/buninu/apps/jsgotty/sz.js +273 -0
  231. package/initramfs/buninu/apps/jsgotty/tests/kitty-order.test.js +58 -0
  232. package/initramfs/buninu/apps/jsgotty/tests/websocket-origin.test.js +54 -0
  233. package/initramfs/buninu/apps/jsgotty/viu.mjs +422 -0
  234. package/initramfs/buninu/apps/jsgotty/wgotty +62 -0
  235. package/initramfs/buninu/apps/jsgotty/windows-bridge-node.js +60 -0
  236. package/initramfs/buninu/apps/jsgotty/zmodem-node.js +262 -0
  237. package/initramfs/buninu/apps/jsmdcui/CHANGELOG.md +1118 -0
  238. package/initramfs/buninu/apps/jsmdcui/LICENSE +22 -0
  239. package/initramfs/buninu/apps/jsmdcui/README.md +1283 -0
  240. package/initramfs/buninu/apps/jsmdcui/cdp-maze.js +141 -0
  241. package/initramfs/buninu/apps/jsmdcui/clean.sh +9 -0
  242. package/initramfs/buninu/apps/jsmdcui/demos/basic.jpg +0 -0
  243. package/initramfs/buninu/apps/jsmdcui/demos/chinese.md +32 -0
  244. package/initramfs/buninu/apps/jsmdcui/demos/event.md +170 -0
  245. package/initramfs/buninu/apps/jsmdcui/demos/good.jpg +0 -0
  246. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.md +366 -0
  247. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
  248. package/initramfs/buninu/apps/jsmdcui/demos/img-change.md +73 -0
  249. package/initramfs/buninu/apps/jsmdcui/demos/imgtool-zh.md +298 -0
  250. package/initramfs/buninu/apps/jsmdcui/demos/imgtool.md +298 -0
  251. package/initramfs/buninu/apps/jsmdcui/demos/maze.md +149 -0
  252. package/initramfs/buninu/apps/jsmdcui/demos/reactive.md +40 -0
  253. package/initramfs/buninu/apps/jsmdcui/demos/reader.md +513 -0
  254. package/initramfs/buninu/apps/jsmdcui/demos/select.md +63 -0
  255. package/initramfs/buninu/apps/jsmdcui/demos/todo-zh.md +190 -0
  256. package/initramfs/buninu/apps/jsmdcui/demos/todo.md +191 -0
  257. package/initramfs/buninu/apps/jsmdcui/edit +9 -0
  258. package/initramfs/buninu/apps/jsmdcui/jsmdcui.sh +16 -0
  259. package/initramfs/buninu/apps/jsmdcui/llm-maze.txt +94 -0
  260. package/initramfs/buninu/apps/jsmdcui/package.json +29 -0
  261. package/initramfs/buninu/apps/jsmdcui/project_structure.txt +35 -0
  262. package/initramfs/buninu/apps/jsmdcui/runmd.mjs +1140 -0
  263. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
  264. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
  265. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
  266. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
  267. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
  268. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
  269. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
  270. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
  271. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
  272. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
  273. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
  274. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
  275. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
  276. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
  277. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
  278. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
  279. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
  280. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
  281. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
  282. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
  283. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
  284. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
  285. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
  286. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
  287. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
  288. package/initramfs/buninu/apps/jsmdcui/runtime/help/actions.md +161 -0
  289. package/initramfs/buninu/apps/jsmdcui/runtime/help/cdp.md +130 -0
  290. package/initramfs/buninu/apps/jsmdcui/runtime/help/colors.md +421 -0
  291. package/initramfs/buninu/apps/jsmdcui/runtime/help/commands.md +161 -0
  292. package/initramfs/buninu/apps/jsmdcui/runtime/help/copypaste.md +149 -0
  293. package/initramfs/buninu/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
  294. package/initramfs/buninu/apps/jsmdcui/runtime/help/help.md +1283 -0
  295. package/initramfs/buninu/apps/jsmdcui/runtime/help/keybindings.md +355 -0
  296. package/initramfs/buninu/apps/jsmdcui/runtime/help/linter.md +90 -0
  297. package/initramfs/buninu/apps/jsmdcui/runtime/help/options.md +709 -0
  298. package/initramfs/buninu/apps/jsmdcui/runtime/help/plugins.md +544 -0
  299. package/initramfs/buninu/apps/jsmdcui/runtime/help/tutorial.md +112 -0
  300. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1263 -0
  301. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +203 -0
  302. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
  303. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
  304. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
  305. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
  306. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
  307. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
  308. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
  309. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
  310. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
  311. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
  312. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
  313. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
  314. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/README.md +63 -0
  315. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
  316. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
  317. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
  318. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
  319. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
  320. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
  321. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
  322. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
  323. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
  324. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
  325. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
  326. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
  327. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
  328. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
  329. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
  330. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
  331. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
  332. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
  333. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
  334. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
  335. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
  336. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
  337. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
  338. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
  339. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
  340. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
  341. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
  342. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
  343. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
  344. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
  345. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
  346. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
  347. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
  348. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
  349. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
  350. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
  351. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
  352. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
  353. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
  354. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
  355. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
  356. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
  357. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
  358. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
  359. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
  360. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
  361. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
  362. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
  363. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
  364. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
  365. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
  366. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
  367. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
  368. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
  369. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
  370. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
  371. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
  372. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
  373. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
  374. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
  375. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
  376. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
  377. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
  378. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
  379. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
  380. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
  381. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
  382. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
  383. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
  384. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
  385. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
  386. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
  387. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
  388. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
  389. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
  390. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
  391. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
  392. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
  393. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
  394. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
  395. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
  396. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
  397. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
  398. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
  399. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
  400. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/markdown.yaml +65 -0
  401. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
  402. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
  403. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
  404. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
  405. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
  406. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
  407. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
  408. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
  409. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
  410. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
  411. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
  412. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
  413. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
  414. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
  415. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
  416. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
  417. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
  418. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
  419. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
  420. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
  421. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
  422. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
  423. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
  424. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
  425. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
  426. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
  427. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
  428. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
  429. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
  430. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
  431. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
  432. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
  433. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
  434. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
  435. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
  436. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
  437. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
  438. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
  439. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
  440. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
  441. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
  442. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
  443. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
  444. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
  445. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
  446. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
  447. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
  448. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
  449. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
  450. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
  451. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
  452. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
  453. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
  454. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
  455. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
  456. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
  457. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
  458. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
  459. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
  460. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
  461. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
  462. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
  463. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
  464. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
  465. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
  466. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
  467. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
  468. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
  469. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
  470. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
  471. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
  472. package/initramfs/buninu/apps/jsmdcui/single-exe/README.md +396 -0
  473. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsHelper.js +371 -0
  474. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
  475. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
  476. package/initramfs/buninu/apps/jsmdcui/single-exe/compiled.js +498 -0
  477. package/initramfs/buninu/apps/jsmdcui/single-exe/entry.mjs +17 -0
  478. package/initramfs/buninu/apps/jsmdcui/single-exe/packAssets.sh +7 -0
  479. package/initramfs/buninu/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
  480. package/initramfs/buninu/apps/jsmdcui/src/buffer/backup.js +165 -0
  481. package/initramfs/buninu/apps/jsmdcui/src/buffer/buffer.js +126 -0
  482. package/initramfs/buninu/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
  483. package/initramfs/buninu/apps/jsmdcui/src/buffer/loc.js +38 -0
  484. package/initramfs/buninu/apps/jsmdcui/src/buffer/message.js +29 -0
  485. package/initramfs/buninu/apps/jsmdcui/src/build-args.js +40 -0
  486. package/initramfs/buninu/apps/jsmdcui/src/config/clean.js +172 -0
  487. package/initramfs/buninu/apps/jsmdcui/src/config/colorscheme.js +99 -0
  488. package/initramfs/buninu/apps/jsmdcui/src/config/config.js +125 -0
  489. package/initramfs/buninu/apps/jsmdcui/src/config/defaults.js +109 -0
  490. package/initramfs/buninu/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
  491. package/initramfs/buninu/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
  492. package/initramfs/buninu/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
  493. package/initramfs/buninu/apps/jsmdcui/src/cui/identity.mjs +26 -0
  494. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
  495. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
  496. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
  497. package/initramfs/buninu/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
  498. package/initramfs/buninu/apps/jsmdcui/src/cui/rpc.mjs +1554 -0
  499. package/initramfs/buninu/apps/jsmdcui/src/cui/server.mjs +128 -0
  500. package/initramfs/buninu/apps/jsmdcui/src/cui/table-render.mjs +286 -0
  501. package/initramfs/buninu/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
  502. package/initramfs/buninu/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
  503. package/initramfs/buninu/apps/jsmdcui/src/cui/template-components.mjs +253 -0
  504. package/initramfs/buninu/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
  505. package/initramfs/buninu/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
  506. package/initramfs/buninu/apps/jsmdcui/src/display/ansi-style.js +60 -0
  507. package/initramfs/buninu/apps/jsmdcui/src/highlight/highlighter.js +243 -0
  508. package/initramfs/buninu/apps/jsmdcui/src/highlight/parser.js +225 -0
  509. package/initramfs/buninu/apps/jsmdcui/src/index.js +9586 -0
  510. package/initramfs/buninu/apps/jsmdcui/src/lua/engine.js +68 -0
  511. package/initramfs/buninu/apps/jsmdcui/src/platform/archive.js +50 -0
  512. package/initramfs/buninu/apps/jsmdcui/src/platform/clipboard.js +278 -0
  513. package/initramfs/buninu/apps/jsmdcui/src/platform/commands.js +221 -0
  514. package/initramfs/buninu/apps/jsmdcui/src/platform/terminal.js +5 -0
  515. package/initramfs/buninu/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
  516. package/initramfs/buninu/apps/jsmdcui/src/plugins/manager.js +674 -0
  517. package/initramfs/buninu/apps/jsmdcui/src/runtime/encodings.js +10 -0
  518. package/initramfs/buninu/apps/jsmdcui/src/runtime/registry.js +134 -0
  519. package/initramfs/buninu/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
  520. package/initramfs/buninu/apps/jsmdcui/src/screen/events.js +263 -0
  521. package/initramfs/buninu/apps/jsmdcui/src/screen/screen.js +249 -0
  522. package/initramfs/buninu/apps/jsmdcui/src/screen/vt100.js +571 -0
  523. package/initramfs/buninu/apps/jsmdcui/src/shell/shell.js +70 -0
  524. package/initramfs/buninu/apps/jsmdcui/testapp.md +78 -0
  525. package/initramfs/buninu/apps/jsmdcui/tests/assets-helper.test.js +150 -0
  526. package/initramfs/buninu/apps/jsmdcui/tests/backup.test.js +158 -0
  527. package/initramfs/buninu/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
  528. package/initramfs/buninu/apps/jsmdcui/tests/cdp-security.test.js +32 -0
  529. package/initramfs/buninu/apps/jsmdcui/tests/cdp-websocket-test.html +46 -0
  530. package/initramfs/buninu/apps/jsmdcui/tests/cmphex3b64.js +95 -0
  531. package/initramfs/buninu/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
  532. package/initramfs/buninu/apps/jsmdcui/tests/config-settings.test.js +52 -0
  533. package/initramfs/buninu/apps/jsmdcui/tests/demo.test.js +448 -0
  534. package/initramfs/buninu/apps/jsmdcui/tests/docs-sync.test.js +14 -0
  535. package/initramfs/buninu/apps/jsmdcui/tests/fence-events.test.js +1293 -0
  536. package/initramfs/buninu/apps/jsmdcui/tests/heading-ids.test.js +559 -0
  537. package/initramfs/buninu/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
  538. package/initramfs/buninu/apps/jsmdcui/tests/id-collision.test.js +514 -0
  539. package/initramfs/buninu/apps/jsmdcui/tests/jmigt.js +16 -0
  540. package/initramfs/buninu/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
  541. package/initramfs/buninu/apps/jsmdcui/tests/key-event.md +10 -0
  542. package/initramfs/buninu/apps/jsmdcui/tests/kitty-demo.md +184 -0
  543. package/initramfs/buninu/apps/jsmdcui/tests/kitty-images.test.js +288 -0
  544. package/initramfs/buninu/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
  545. package/initramfs/buninu/apps/jsmdcui/tests/platform-commands.test.js +18 -0
  546. package/initramfs/buninu/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
  547. package/initramfs/buninu/apps/jsmdcui/tests/pty-demo.js +492 -0
  548. package/initramfs/buninu/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
  549. package/initramfs/buninu/apps/jsmdcui/tests/table-render.test.js +150 -0
  550. package/initramfs/buninu/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
  551. package/initramfs/buninu/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
  552. package/initramfs/buninu/apps/jsmdcui/tests/template-components.test.js +422 -0
  553. package/initramfs/buninu/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
  554. package/initramfs/buninu/apps/jsmdcui/tests/textarea.md +8 -0
  555. package/initramfs/buninu/apps/jsmdcui/tests/tui-links.test.js +298 -0
  556. package/initramfs/buninu/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
  557. package/initramfs/buninu/apps/jsmdcui/tests/wui.test.js +108 -0
  558. package/initramfs/buninu/apps/jsmdcui/tests/wv-client.js +96 -0
  559. package/initramfs/buninu/apps/jsmdcui/tui +7 -0
  560. package/initramfs/buninu/apps/jsmdcui/wui +9 -0
  561. package/initramfs/buninu/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
  562. package/initramfs/buninu/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
  563. package/initramfs/buninu/apps/musl-la/LICENSE_musl.txt +193 -0
  564. package/initramfs/buninu/apps/musl-la/NOTICE +41 -0
  565. package/initramfs/buninu/apps/musl-la/ld-musl-aarch64.so.1 +0 -0
  566. package/initramfs/buninu/apps/musl-la/libgcc_s.so.1 +0 -0
  567. package/initramfs/buninu/apps/musl-la/libstdc++.so.6 +0 -0
  568. package/initramfs/buninu/apps/musl-la/musl-la.sh +36 -0
  569. package/initramfs/buninu/apps/native-bridge/native-bridge.js +199 -0
  570. package/initramfs/buninu/apps/native-bridge/package.json +8 -0
  571. package/initramfs/buninu/apps/tts/tts.js +214 -0
  572. package/initramfs/buninu/apps/xclip/xclip.js +121 -0
  573. package/initramfs/buninu/apps/xdg-open/xdg-open.js +151 -0
  574. package/initramfs/buninu/bin/bun.bat +37 -0
  575. package/initramfs/buninu/bin/bun.sh +57 -0
  576. package/initramfs/buninu/bin/buninu-help.bat +4 -0
  577. package/initramfs/buninu/bin/buninu-help.sh +7 -0
  578. package/initramfs/buninu/bin/bunmsh.bat +3 -0
  579. package/initramfs/buninu/bin/bunmsh.sh +5 -0
  580. package/initramfs/buninu/bin/bunx.bat +3 -0
  581. package/initramfs/buninu/bin/glow.bat +3 -0
  582. package/initramfs/buninu/bin/glow.sh +5 -0
  583. package/initramfs/buninu/bin/init.js +779 -0
  584. package/initramfs/buninu/bin/install.js +570 -0
  585. package/initramfs/buninu/bin/jmi.bat +3 -0
  586. package/initramfs/buninu/bin/jmi.sh +5 -0
  587. package/initramfs/buninu/bin/jsgotty.bat +3 -0
  588. package/initramfs/buninu/bin/jsgotty.sh +5 -0
  589. package/initramfs/buninu/bin/jsmdcui.bat +11 -0
  590. package/initramfs/buninu/bin/libsh-loader.c +135 -0
  591. package/initramfs/buninu/bin/libsh-loader.so +0 -0
  592. package/initramfs/buninu/bin/multicall.sh +103 -0
  593. package/initramfs/buninu/bin/native-bridge.bat +3 -0
  594. package/initramfs/buninu/bin/rz.bat +3 -0
  595. package/initramfs/buninu/bin/rz.sh +5 -0
  596. package/initramfs/buninu/bin/shc.js +5 -0
  597. package/initramfs/buninu/bin/showimg.bat +3 -0
  598. package/initramfs/buninu/bin/showimg.sh +5 -0
  599. package/initramfs/buninu/bin/switch_to_android.sh +9 -0
  600. package/initramfs/buninu/bin/switch_to_linux.sh +7 -0
  601. package/initramfs/buninu/bin/sz.bat +3 -0
  602. package/initramfs/buninu/bin/sz.sh +5 -0
  603. package/initramfs/buninu/bin/tts.bat +3 -0
  604. package/initramfs/buninu/bin/xclip.bat +3 -0
  605. package/initramfs/buninu/bin/xdg-open.bat +3 -0
  606. package/initramfs/buninu/demo-server.js +64 -0
  607. package/initramfs/buninu/icon.png +0 -0
  608. package/initramfs/buninu/package.json +59 -0
  609. package/initramfs/etc/resolv.conf +1 -0
  610. package/initramfs/init.js +339 -0
  611. package/initramfs/lib/ld-musl-x86_64.so.1 +0 -0
  612. package/initramfs/lib/libc.musl-x86_64.so.1 +0 -0
  613. package/initramfs/lib/libgcc_s.so.1 +0 -0
  614. package/initramfs/lib/libstdc++.so.6 +0 -0
  615. package/initramfs/usr/bin/env +7 -0
  616. package/package.json +42 -0
  617. package/run-qemu.sh +44 -0
  618. package/scripts/fetch.sh +26 -0
  619. package/scripts/pack-initramfs.sh +41 -0
  620. package/test/build-init-bootstrap.sh +23 -0
  621. package/test/init-bootstrap.c +55 -0
@@ -0,0 +1,1263 @@
1
+ const CDP_DEFAULT_PORT = 9222;
2
+ const CDP_PROTOCOL_VERSION = "1.3";
3
+ const CDP_BROWSER_ID = "cdp-server";
4
+ const CDP_BROWSER_PATH = `/devtools/browser/${CDP_BROWSER_ID}`;
5
+
6
+ let serverLogEnabled = 0//true;
7
+ function serverLog(...args) {
8
+ if ( process.env.JSMDCUI_CDP_DEBUG ||
9
+ serverLogEnabled )
10
+ {
11
+ console.log(...args);
12
+ }
13
+ }
14
+ function serverError(...args) {
15
+ if ( process.env.JSMDCUI_CDP_DEBUG ||
16
+ serverLogEnabled )
17
+ {
18
+ console.error(...args);
19
+ }
20
+ }
21
+
22
+ export class CdpServer {
23
+ #context;
24
+
25
+ constructor(context) {
26
+ this.#context = context;
27
+ }
28
+
29
+ static create(context) {
30
+ return new CdpServer(context);
31
+ }
32
+
33
+ listen(port = CDP_DEFAULT_PORT, hostname = "127.0.0.1", options = {}) {
34
+ const context = this.#context;
35
+ const state = createCdpState();
36
+ const remoteAllowOrigins = parseAllowedOrigins(options.remoteAllowOrigins);
37
+
38
+ const server = Bun.serve({
39
+ port,
40
+ hostname,
41
+ fetch(req, server) {
42
+ const url = new URL(req.url);
43
+ const pathname = url.pathname.replace(/\/+$/, "") || "/";
44
+
45
+ const origin = req.headers.get("origin");
46
+ const respond = async (response) => {
47
+ const text = await response.clone().text();
48
+ serverLog(
49
+ `[CdpServer] HTTP ${req.method} ${pathname} -> ${response.status}`,
50
+ text,
51
+ );
52
+ return response;
53
+ };
54
+
55
+ serverLog(`[CdpServer] HTTP ${req.method} ${pathname}`);
56
+
57
+ serverLog(`[CdpServer] Origin ${origin}`);
58
+
59
+ if (!isSafeHostHeader(req.headers.get("host"))) {
60
+ return respond(new Response("Host header must be an IP address or localhost", {
61
+ status: 500,
62
+ }));
63
+ }
64
+
65
+ if (req.headers.get("upgrade")?.toLowerCase() === "websocket") {
66
+ if (!isOriginAllowed(origin, remoteAllowOrigins)) {
67
+ return respond(new Response(
68
+ `Rejected an incoming WebSocket connection from the ${origin} origin. `
69
+ + `Use --remote-allow-origins=${origin} to allow it, or `
70
+ + "--remote-allow-origins=* to allow all origins.",
71
+ { status: 403 },
72
+ ));
73
+ }
74
+ if (pathname !== CDP_BROWSER_PATH) {
75
+ return respond(new Response("Not Found", { status: 404 }));
76
+ }
77
+ if (server.upgrade(req)) {
78
+ serverLog(
79
+ `[CdpServer] HTTP ${req.method} ${pathname} -> 101`,
80
+ "Switching Protocols",
81
+ );
82
+ return;
83
+ }
84
+ return respond(new Response("WebSocket upgrade failed", { status: 500 }));
85
+ }
86
+
87
+ const host = req.headers.get("host") ?? `127.0.0.1:${port}`;
88
+ const webSocketDebuggerUrl = `ws://${host}/devtools/browser/${CDP_BROWSER_ID}`;
89
+
90
+ if (pathname === "/json/version") {
91
+ return respond(jsonResponse({
92
+ Browser: "CdpServer/1.0",
93
+ "Protocol-Version": CDP_PROTOCOL_VERSION,
94
+ "User-Agent": "CdpServer/1.0",
95
+ "V8-Version": Bun.version,
96
+ "WebKit-Version": "537.36",
97
+ webSocketDebuggerUrl,
98
+ }));
99
+ }
100
+
101
+ if (pathname === "/json" || pathname === "/json/list") {
102
+ return respond(jsonResponse(
103
+ [...state.targets.values()].map((target) => ({
104
+ id: target.targetId,
105
+ type: target.type,
106
+ title: target.title,
107
+ url: target.url,
108
+ webSocketDebuggerUrl,
109
+ }))
110
+ ));
111
+ }
112
+
113
+ return respond(jsonResponse({
114
+ server: "CdpServer",
115
+ port,
116
+ webSocketDebuggerUrl,
117
+ }));
118
+ },
119
+ websocket: {
120
+ open(ws) {
121
+ serverLog("[CdpServer] client connected");
122
+ },
123
+ async message(ws, raw) {
124
+ let id;
125
+ let sessionId;
126
+ const send = (message) => {
127
+ const text = JSON.stringify(message);
128
+ serverLog("[CdpServer] WebSocket response", text);
129
+ ws.send(text);
130
+ };
131
+ try {
132
+ const text = typeof raw === "string" ? raw : new TextDecoder().decode(raw);
133
+ const msg = JSON.parse(text);
134
+ id = msg.id;
135
+ sessionId = msg.sessionId;
136
+ const { method, params } = msg;
137
+ serverLog(`[CdpServer] -> ${method}`, params ?? "");
138
+
139
+ const emit = (eventMethod, eventParams) => {
140
+ serverLog(`[CdpServer] <- ${eventMethod} EVENT`, eventParams ?? {});
141
+ send({
142
+ method: eventMethod,
143
+ params: eventParams,
144
+ ...(sessionId ? { sessionId } : {}),
145
+ });
146
+ };
147
+ const result = await dispatch(
148
+ context,
149
+ state,
150
+ method,
151
+ params ?? {},
152
+ sessionId,
153
+ emit
154
+ );
155
+ serverLog(`[CdpServer] <- ${method} OK`, result ?? "");
156
+ send({
157
+ id,
158
+ result: result ?? {},
159
+ ...(sessionId ? { sessionId } : {}),
160
+ });
161
+ } catch (err) {
162
+ serverError(`[CdpServer] <- ERROR ${err.message}`);
163
+ serverLog("[CdpServer] <- ERROR", { id, sessionId, message: err.message });
164
+ send({
165
+ id,
166
+ error: {
167
+ code: -32601,
168
+ message: err.message,
169
+ },
170
+ ...(sessionId ? { sessionId } : {}),
171
+ });
172
+ }
173
+ },
174
+ close(ws) {
175
+ serverLog("[CdpServer] client disconnected");
176
+ },
177
+ },
178
+ });
179
+
180
+ serverLog(`[CdpServer] listening on ws://${hostname}:${port}`);
181
+ return server;
182
+ }
183
+ }
184
+
185
+ export function parseAllowedOrigins(value) {
186
+ const origins = Array.isArray(value) ? value : String(value ?? "").split(",");
187
+ return new Set(origins.map((origin) => origin.trim().toLowerCase()).filter(Boolean));
188
+ }
189
+
190
+ export function isOriginAllowed(origin, allowedOrigins = new Set()) {
191
+ if (origin == null) return true;
192
+ const normalized = origin.toLowerCase();
193
+ return allowedOrigins.has("*") || allowedOrigins.has(normalized);
194
+ }
195
+
196
+ export function isSafeHostHeader(header) {
197
+ if (!header) return true;
198
+ try {
199
+ let hostname = new URL(`http://${header}`).hostname.toLowerCase();
200
+ if (hostname.startsWith("[") && hostname.endsWith("]")) {
201
+ hostname = hostname.slice(1, -1);
202
+ }
203
+ if (hostname === "localhost" || hostname.endsWith(".localhost")) return true;
204
+ if (hostname.includes(":")) return /^[0-9a-f:.]+$/i.test(hostname);
205
+ return /^\d{1,3}(?:\.\d{1,3}){3}$/.test(hostname)
206
+ && hostname.split(".").every((part) => Number(part) <= 255);
207
+ } catch {
208
+ return false;
209
+ }
210
+ }
211
+
212
+ function jsonResponse(value, status = 200) {
213
+ return new Response(JSON.stringify(value), {
214
+ status,
215
+ headers: { "Content-Type": "application/json" },
216
+ });
217
+ }
218
+
219
+ function createCdpState() {
220
+ return {
221
+ nextTargetId: 1,
222
+ nextSessionId: 1,
223
+ nextLoaderId: 1,
224
+ nextHistoryEntryId: 1,
225
+ nextObjectId: 1,
226
+ nextExecutionContextId: 1,
227
+ targets: new Map(),
228
+ sessions: new Map(),
229
+ objects: new Map(),
230
+ initialNavigations: new Map(),
231
+ implicitTarget: null,
232
+ autoAttach: false,
233
+ waitForDebuggerOnStart: false,
234
+ };
235
+ }
236
+
237
+ async function dispatch(ctx, state, method, params, sessionId, emit) {
238
+ switch (method) {
239
+ case "Browser.getVersion":
240
+ return {
241
+ protocolVersion: CDP_PROTOCOL_VERSION,
242
+ product: "Chrome/140.0.0.0",
243
+ revision: "cdp-server",
244
+ userAgent:
245
+ "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36",
246
+ jsVersion: Bun.version,
247
+ };
248
+ case "Browser.setDownloadBehavior":
249
+ return {};
250
+ case "Target.getBrowserContexts":
251
+ return {
252
+ browserContextIds: [],
253
+ defaultBrowserContextId: "default",
254
+ };
255
+ case "Target.setAutoAttach":
256
+ state.autoAttach = params.autoAttach;
257
+ state.waitForDebuggerOnStart = params.waitForDebuggerOnStart;
258
+ return {};
259
+ case "Target.setDiscoverTargets":
260
+ return {};
261
+ case "Target.createTarget": {
262
+ const targetId = `target-${state.nextTargetId++}`;
263
+ state.initialNavigations.set(targetId, {
264
+ navigated: createDeferred(),
265
+ settled: createDeferred(),
266
+ });
267
+ state.targets.set(targetId, {
268
+ targetId,
269
+ frameId: targetId,
270
+ loaderId: `loader-${state.nextLoaderId++}`,
271
+ type: "page",
272
+ browserContextId: params.browserContextId ?? "default",
273
+ title: "",
274
+ url: params.url || "about:blank",
275
+ attached: false,
276
+ elements: new Map(),
277
+ focusedSelector: null,
278
+ pendingSelector: null,
279
+ history: [
280
+ {
281
+ id: state.nextHistoryEntryId++,
282
+ url: params.url || "about:blank",
283
+ title: "",
284
+ },
285
+ ],
286
+ historyIndex: 0,
287
+ viewport: {
288
+ width: params.width ?? 800,
289
+ height: params.height ?? 600,
290
+ },
291
+ });
292
+
293
+ if (state.autoAttach) {
294
+ const attachedSessionId = `session-${state.nextSessionId++}`;
295
+ const target = state.targets.get(targetId);
296
+ target.attached = true;
297
+ state.sessions.set(attachedSessionId, targetId);
298
+ emit("Target.attachedToTarget", {
299
+ sessionId: attachedSessionId,
300
+ targetInfo: createTargetInfo(target),
301
+ waitingForDebugger: state.waitForDebuggerOnStart,
302
+ });
303
+ }
304
+
305
+ return { targetId };
306
+ }
307
+ case "Target.attachToTarget": {
308
+ const target = state.targets.get(params.targetId);
309
+ if (!target) throw new Error(`No target with given id: ${params.targetId}`);
310
+
311
+ const sessionId = `session-${state.nextSessionId++}`;
312
+ target.attached = true;
313
+ state.sessions.set(sessionId, params.targetId);
314
+ return { sessionId };
315
+ }
316
+ case "Target.getTargets":
317
+ return { targetInfos: [...state.targets.values()] };
318
+ case "Target.getTargetInfo": {
319
+ if (!params.targetId) {
320
+ return {
321
+ targetInfo: {
322
+ targetId: CDP_BROWSER_ID,
323
+ type: "browser",
324
+ title: "",
325
+ url: "",
326
+ attached: true,
327
+ },
328
+ };
329
+ }
330
+ const target = state.targets.get(params.targetId);
331
+ if (!target) throw new Error(`No target with given id: ${params.targetId}`);
332
+ return { targetInfo: target };
333
+ }
334
+ case "Target.closeTarget": {
335
+ const target = state.targets.get(params.targetId);
336
+ if (!target) return { success: false };
337
+
338
+ await ctx.close?.();
339
+ state.initialNavigations.get(params.targetId)?.navigated.resolve();
340
+ state.initialNavigations.get(params.targetId)?.settled.resolve();
341
+ state.initialNavigations.delete(params.targetId);
342
+
343
+ for (const [attachedSessionId, targetId] of state.sessions) {
344
+ if (targetId !== params.targetId) continue;
345
+ state.sessions.delete(attachedSessionId);
346
+ emit("Target.detachedFromTarget", {
347
+ sessionId: attachedSessionId,
348
+ targetId,
349
+ });
350
+ }
351
+ state.targets.delete(params.targetId);
352
+ emit("Target.targetDestroyed", { targetId: params.targetId });
353
+ return { success: true };
354
+ }
355
+ case "Target.detachFromTarget":
356
+ state.sessions.delete(params.sessionId);
357
+ return {};
358
+ case "Page.enable":
359
+ return {};
360
+ case "Page.getFrameTree": {
361
+ const target = getSessionTarget(state, sessionId);
362
+ return {
363
+ frameTree: {
364
+ frame: createFrame(target),
365
+ },
366
+ };
367
+ }
368
+ case "Page.setLifecycleEventsEnabled":
369
+ case "Log.enable":
370
+ case "Network.enable":
371
+ case "Emulation.setFocusEmulationEnabled":
372
+ case "Emulation.setEmulatedMedia":
373
+ case "Runtime.runIfWaitingForDebugger":
374
+ return {};
375
+ case "Page.addScriptToEvaluateOnNewDocument":
376
+ return {
377
+ identifier: `script-${state.nextObjectId++}`,
378
+ };
379
+ case "Page.createIsolatedWorld": {
380
+ const target = getSessionTarget(state, sessionId);
381
+ const executionContextId = state.nextExecutionContextId++;
382
+ target.utilityWorldName = params.worldName ?? "";
383
+ emit("Runtime.executionContextCreated", {
384
+ context: {
385
+ id: executionContextId,
386
+ origin: getOrigin(target.url),
387
+ name: target.utilityWorldName,
388
+ uniqueId: `context-${target.targetId}-${executionContextId}`,
389
+ auxData: {
390
+ isDefault: false,
391
+ type: "isolated",
392
+ frameId: target.frameId,
393
+ },
394
+ },
395
+ });
396
+ return { executionContextId };
397
+ }
398
+ case "Runtime.enable": {
399
+ const target = getSessionTarget(state, sessionId);
400
+ const executionContextId = state.nextExecutionContextId++;
401
+ target.mainExecutionContextId = executionContextId;
402
+ setTimeout(() => {
403
+ emit("Runtime.executionContextCreated", {
404
+ context: {
405
+ id: executionContextId,
406
+ origin: getOrigin(target.url),
407
+ name: "",
408
+ uniqueId: `context-${target.targetId}`,
409
+ auxData: {
410
+ isDefault: true,
411
+ type: "default",
412
+ frameId: target.frameId,
413
+ },
414
+ },
415
+ });
416
+ }, 0);
417
+ return {};
418
+ }
419
+ case "Page.navigate": {
420
+ const target = getSessionTarget(state, sessionId);
421
+ await ctx.navigate?.(params.url);
422
+ navigateTarget(state, target, params.url, emit, { addHistory: true });
423
+ state.initialNavigations.get(target.targetId)?.navigated.resolve();
424
+
425
+ return {
426
+ frameId: target.frameId,
427
+ loaderId: target.loaderId,
428
+ };
429
+ }
430
+ case "Page.getNavigationHistory": {
431
+ const target = getSessionTarget(state, sessionId);
432
+ return {
433
+ currentIndex: target.historyIndex,
434
+ entries: target.history.map((entry) => ({
435
+ id: entry.id,
436
+ url: entry.url,
437
+ userTypedURL: entry.url,
438
+ title: entry.title,
439
+ transitionType: "typed",
440
+ })),
441
+ };
442
+ }
443
+ case "Page.navigateToHistoryEntry": {
444
+ const target = getSessionTarget(state, sessionId);
445
+ const nextIndex = target.history.findIndex(
446
+ (entry) => entry.id === params.entryId
447
+ );
448
+ if (nextIndex < 0) {
449
+ throw new Error(`No history entry with given id: ${params.entryId}`);
450
+ }
451
+
452
+ if (nextIndex < target.historyIndex) {
453
+ await ctx.goBack?.();
454
+ } else if (nextIndex > target.historyIndex) {
455
+ await ctx.goForward?.();
456
+ }
457
+
458
+ target.historyIndex = nextIndex;
459
+ const entry = target.history[nextIndex];
460
+ navigateTarget(state, target, entry.url, emit);
461
+ return {};
462
+ }
463
+ case "Page.reload": {
464
+ const target = getSessionTarget(state, sessionId);
465
+ await ctx.reload?.();
466
+ navigateTarget(state, target, target.url, emit);
467
+ return {};
468
+ }
469
+ case "Emulation.setDeviceMetricsOverride": {
470
+ const target = getSessionTarget(state, sessionId);
471
+ target.viewport = {
472
+ width: params.width,
473
+ height: params.height,
474
+ };
475
+ await ctx.resize?.(params.width, params.height);
476
+ return {};
477
+ }
478
+ case "DOM.scrollIntoViewIfNeeded": {
479
+ const element = state.objects.get(params.objectId);
480
+ if (element?.kind !== "playwright-element") {
481
+ throw new Error(`Unknown element object: ${params.objectId}`);
482
+ }
483
+ await ctx.scrollTo?.(element.selector, {
484
+ block: "nearest",
485
+ });
486
+ return {};
487
+ }
488
+ case "DOM.getContentQuads": {
489
+ const target = getSessionTarget(state, sessionId);
490
+ const element = state.objects.get(params.objectId);
491
+ if (element?.kind !== "playwright-element") {
492
+ throw new Error(`Unknown element object: ${params.objectId}`);
493
+ }
494
+ target.pendingSelector = element.selector;
495
+ return {
496
+ quads: [[80, 40, 120, 40, 120, 60, 80, 60]],
497
+ };
498
+ }
499
+ case "Runtime.evaluate": {
500
+ let target;
501
+ if (sessionId) {
502
+ target = getSessionTarget(state, sessionId);
503
+ } else {
504
+ const pendingTarget = getPendingInitialNavigationTarget(state);
505
+ if (pendingTarget) {
506
+ await state.initialNavigations.get(pendingTarget.targetId).settled.promise;
507
+ target = state.targets.get(pendingTarget.targetId);
508
+ if (!target) throw new Error("WebView closed");
509
+ } else {
510
+ target = getImplicitTarget(state);
511
+ }
512
+ }
513
+ let value;
514
+
515
+ if (params.expression.trim() === "document.title") {
516
+ value = await getContextTitle(ctx, target);
517
+ const initialNavigation = state.initialNavigations.get(target.targetId);
518
+ if (initialNavigation) {
519
+ setTimeout(() => {
520
+ initialNavigation.settled.resolve();
521
+ state.initialNavigations.delete(target.targetId);
522
+ }, 0);
523
+ }
524
+ } else if (params.expression.includes("new (module.exports.InjectedScript())")) {
525
+ value = {
526
+ kind: "playwright-injected-script",
527
+ targetId: target.targetId,
528
+ };
529
+ } else if (params.expression.includes("new (module.exports.UtilityScript())")) {
530
+ value = {
531
+ kind: "playwright-utility-script",
532
+ targetId: target.targetId,
533
+ };
534
+ } else if (
535
+ params.expression.includes("timeout waiting for") &&
536
+ params.expression.includes("getBoundingClientRect")
537
+ ) {
538
+ target.pendingSelector = getActionabilitySelector(params.expression);
539
+ value = [100, 50];
540
+ } else if (
541
+ params.expression.includes("timeout waiting for") &&
542
+ params.expression.includes("scrollIntoView")
543
+ ) {
544
+ const scrollTo = getScrollToArguments(params.expression);
545
+ await ctx.scrollTo?.(scrollTo.selector, {
546
+ block: scrollTo.block,
547
+ timeout: scrollTo.timeout,
548
+ });
549
+ value = undefined;
550
+ } else {
551
+ if (shouldUseContextEvaluateResult(ctx)) {
552
+ value = await ctx.evaluate(params.expression);
553
+ } else {
554
+ value = await evaluateInTarget(target, params.expression);
555
+ await ctx.evaluate?.(params.expression);
556
+ }
557
+ }
558
+
559
+ return {
560
+ result: createRemoteObject(state, value, params.returnByValue),
561
+ };
562
+ }
563
+ case "Runtime.callFunctionOn": {
564
+ const target = getSessionTarget(state, sessionId);
565
+ const object = state.objects.get(params.objectId);
566
+ if (object?.kind !== "playwright-utility-script") {
567
+ throw new Error(`Unknown object: ${params.objectId}`);
568
+ }
569
+
570
+ if (!params.functionDeclaration.includes("utilityScript.evaluate")) {
571
+ throw new Error("Unsupported Runtime.callFunctionOn declaration");
572
+ }
573
+
574
+ const args = params.arguments ?? [];
575
+ const isFunction = args[1]?.value;
576
+ const returnByValue = args[2]?.value;
577
+ const expression = args[3]?.value;
578
+ const argCount = args[4]?.value ?? 0;
579
+ const handles = args
580
+ .slice(5 + argCount)
581
+ .map((arg) => state.objects.get(arg.objectId));
582
+ const callArgs = args
583
+ .slice(5, 5 + argCount)
584
+ .map((arg) => deserializePlaywrightValue(arg.value, handles));
585
+ const forwardEvaluate = shouldForwardPlaywrightEvaluate(
586
+ expression,
587
+ handles
588
+ );
589
+ let value;
590
+ if (forwardEvaluate && shouldUseContextEvaluateResult(ctx)) {
591
+ value = await ctx.evaluate(expression);
592
+ } else {
593
+ value = await evaluatePlaywrightCall(
594
+ ctx,
595
+ target,
596
+ expression,
597
+ isFunction,
598
+ callArgs
599
+ );
600
+ }
601
+ if (forwardEvaluate && !shouldUseContextEvaluateResult(ctx)) {
602
+ await ctx.evaluate?.(expression);
603
+ }
604
+
605
+ const serialized = returnByValue
606
+ ? serializePlaywrightValue(value)
607
+ : value;
608
+ return {
609
+ result: createRemoteObject(state, serialized, params.returnByValue),
610
+ };
611
+ }
612
+ case "Runtime.releaseObject":
613
+ case "Runtime.releaseObjectGroup":
614
+ if (params.objectId) state.objects.delete(params.objectId);
615
+ return {};
616
+ case "Input.dispatchMouseEvent": {
617
+ const target = getSessionTarget(state, sessionId);
618
+ if (params.type === "mouseWheel") {
619
+ await ctx.scroll?.(params.deltaX ?? 0, params.deltaY ?? 0);
620
+ return {};
621
+ }
622
+
623
+ if (params.type === "mouseReleased") {
624
+ target.focusedSelector = target.pendingSelector;
625
+ applyClick(target, target.pendingSelector);
626
+ await ctx.click?.(params.x, params.y, {
627
+ button: params.button,
628
+ clickCount: params.clickCount,
629
+ modifiers: params.modifiers,
630
+ });
631
+ }
632
+ return {};
633
+ }
634
+ case "Input.dispatchKeyEvent": {
635
+ const target = getSessionTarget(state, sessionId);
636
+ const key = params.key ?? params.text ?? "";
637
+ const signature = `${params.code ?? key}:${params.modifiers ?? 0}`;
638
+ if (params.type === "rawKeyDown" || params.type === "keyDown") {
639
+ if (target.cdpKeyDown !== signature || params.autoRepeat) {
640
+ await ctx.press?.(key, {
641
+ modifiers: params.modifiers ?? 0,
642
+ text: params.text ?? "",
643
+ code: params.code ?? "",
644
+ repeat: !!params.autoRepeat,
645
+ });
646
+ target.cdpKeyDown = signature;
647
+ }
648
+ } else if (params.type === "char") {
649
+ if (!target.cdpKeyDown) {
650
+ await ctx.press?.(key, {
651
+ modifiers: params.modifiers ?? 0,
652
+ text: params.text ?? "",
653
+ code: params.code ?? "",
654
+ repeat: !!params.autoRepeat,
655
+ });
656
+ }
657
+ } else if (params.type === "keyUp") {
658
+ target.cdpKeyDown = null;
659
+ }
660
+ return {};
661
+ }
662
+ case "Input.insertText": {
663
+ const target = getSessionTarget(state, sessionId);
664
+ const element = target.elements.get(target.focusedSelector);
665
+ if (element) element.value += params.text;
666
+ await ctx.type?.(params.text);
667
+ return {};
668
+ }
669
+ case "navigate":
670
+ return ctx.navigate?.(params.url);
671
+ case "evaluate":
672
+ return ctx.evaluate?.(params.script);
673
+ case "click":
674
+ return typeof params.selector === "string"
675
+ ? ctx.click?.(params.selector, params.options)
676
+ : ctx.click?.(params.x, params.y, params.options);
677
+ case "type":
678
+ return ctx.type?.(params.text);
679
+ case "press":
680
+ return ctx.press?.(params.key, params.options);
681
+ case "scroll":
682
+ return ctx.scroll?.(params.dx, params.dy);
683
+ case "scrollTo":
684
+ return ctx.scrollTo?.(params.selector, params.options);
685
+ case "resize":
686
+ return ctx.resize?.(params.width, params.height);
687
+ case "goBack":
688
+ return ctx.goBack?.();
689
+ case "goForward":
690
+ return ctx.goForward?.();
691
+ case "reload":
692
+ return ctx.reload?.();
693
+ case "screenshot":
694
+ return ctx.screenshot?.({ ...params, encoding: "base64" });
695
+ case "cdp":
696
+ return ctx.cdp?.(params.method, params.params);
697
+ case "close":
698
+ return ctx.close?.();
699
+ default:
700
+ if (method.includes(".") && ctx.cdp) {
701
+ return ctx.cdp(method, params);
702
+ }
703
+ throw new Error(`Unknown method: ${method}`);
704
+ }
705
+ }
706
+
707
+ function createDeferred() {
708
+ let resolve;
709
+ const promise = new Promise((done) => {
710
+ resolve = done;
711
+ });
712
+ return { promise, resolve };
713
+ }
714
+
715
+ function getPendingInitialNavigationTarget(state) {
716
+ const targets = [...state.targets.values()];
717
+ for (let index = targets.length - 1; index >= 0; index--) {
718
+ const target = targets[index];
719
+ if (state.initialNavigations.has(target.targetId)) return target;
720
+ }
721
+ return null;
722
+ }
723
+
724
+ function navigateTarget(state, target, url, emit, options = {}) {
725
+ target.url = url;
726
+ loadDocument(target, url);
727
+ target.loaderId = `loader-${state.nextLoaderId++}`;
728
+ target.mainExecutionContextId = state.nextExecutionContextId++;
729
+ target.utilityExecutionContextId = target.utilityWorldName
730
+ ? state.nextExecutionContextId++
731
+ : null;
732
+
733
+ if (options.addHistory) {
734
+ target.history.splice(target.historyIndex + 1);
735
+ target.history.push({
736
+ id: state.nextHistoryEntryId++,
737
+ url,
738
+ title: target.title,
739
+ });
740
+ target.historyIndex = target.history.length - 1;
741
+ } else if (target.history[target.historyIndex]) {
742
+ target.history[target.historyIndex].title = target.title;
743
+ }
744
+
745
+ setTimeout(() => {
746
+ emit("Runtime.executionContextsCleared", {});
747
+ emit("Page.frameNavigated", {
748
+ frame: createFrame(target),
749
+ type: "Navigation",
750
+ });
751
+ emit("Runtime.executionContextCreated", {
752
+ context: {
753
+ id: target.mainExecutionContextId,
754
+ origin: getOrigin(target.url),
755
+ name: "",
756
+ uniqueId: `context-${target.targetId}-${target.loaderId}`,
757
+ auxData: {
758
+ isDefault: true,
759
+ type: "default",
760
+ frameId: target.frameId,
761
+ },
762
+ },
763
+ });
764
+ if (target.utilityExecutionContextId) {
765
+ emit("Runtime.executionContextCreated", {
766
+ context: {
767
+ id: target.utilityExecutionContextId,
768
+ origin: getOrigin(target.url),
769
+ name: target.utilityWorldName,
770
+ uniqueId: `context-${target.targetId}-${target.utilityExecutionContextId}`,
771
+ auxData: {
772
+ isDefault: false,
773
+ type: "isolated",
774
+ frameId: target.frameId,
775
+ },
776
+ },
777
+ });
778
+ }
779
+ const timestamp = performance.now() / 1000;
780
+ emit("Page.domContentEventFired", { timestamp });
781
+ emit("Page.loadEventFired", { timestamp });
782
+ emit("Page.lifecycleEvent", {
783
+ frameId: target.frameId,
784
+ loaderId: target.loaderId,
785
+ name: "DOMContentLoaded",
786
+ timestamp,
787
+ });
788
+ emit("Page.lifecycleEvent", {
789
+ frameId: target.frameId,
790
+ loaderId: target.loaderId,
791
+ name: "load",
792
+ timestamp,
793
+ });
794
+ }, 0);
795
+ }
796
+
797
+ function getSessionTarget(state, sessionId) {
798
+ if (!sessionId) return getImplicitTarget(state);
799
+
800
+ const targetId = state.sessions.get(sessionId);
801
+ const target = state.targets.get(targetId);
802
+ if (!target) throw new Error(`No target for session: ${sessionId}`);
803
+ return target;
804
+ }
805
+
806
+ function getImplicitTarget(state) {
807
+ if (state.implicitTarget) return state.implicitTarget;
808
+
809
+ state.implicitTarget = {
810
+ targetId: "implicit-target",
811
+ frameId: "implicit-target",
812
+ loaderId: "implicit-loader",
813
+ type: "page",
814
+ browserContextId: "default",
815
+ title: "",
816
+ url: "about:blank",
817
+ attached: true,
818
+ elements: new Map(),
819
+ focusedSelector: null,
820
+ pendingSelector: null,
821
+ history: [
822
+ {
823
+ id: state.nextHistoryEntryId++,
824
+ url: "about:blank",
825
+ title: "",
826
+ },
827
+ ],
828
+ historyIndex: 0,
829
+ viewport: {
830
+ width: 800,
831
+ height: 600,
832
+ },
833
+ };
834
+ return state.implicitTarget;
835
+ }
836
+
837
+ function getOrigin(url) {
838
+ try {
839
+ return new URL(url).origin;
840
+ } catch {
841
+ return "null";
842
+ }
843
+ }
844
+
845
+ function createFrame(target) {
846
+ return {
847
+ id: target.frameId,
848
+ loaderId: target.loaderId,
849
+ url: target.url,
850
+ domainAndRegistry: "",
851
+ securityOrigin: getOrigin(target.url),
852
+ mimeType: "text/html",
853
+ };
854
+ }
855
+
856
+ function createTargetInfo(target) {
857
+ return {
858
+ targetId: target.targetId,
859
+ type: target.type,
860
+ title: target.title,
861
+ url: target.url,
862
+ attached: target.attached,
863
+ browserContextId: target.browserContextId,
864
+ };
865
+ }
866
+
867
+ function loadDocument(target, url) {
868
+ target.title = "";
869
+ target.elements = new Map();
870
+ target.focusedSelector = null;
871
+ target.pendingSelector = null;
872
+
873
+ if (!url.startsWith("data:text/html,")) return;
874
+
875
+ try {
876
+ const html = decodeURIComponent(url.slice("data:text/html,".length));
877
+ target.title = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i)?.[1] ?? "";
878
+
879
+ for (const match of html.matchAll(
880
+ /<([a-z][\w-]*)([^>]*\sid=["']([^"']+)["'][^>]*)>([\s\S]*?)<\/\1>/gi
881
+ )) {
882
+ const tagName = match[1].toLowerCase();
883
+ const attributes = match[2] ?? "";
884
+ const id = match[3];
885
+ const textContent = match[4]?.replace(/<[^>]*>/g, "").trim() ?? "";
886
+ const value = attributes.match(/\svalue=["']([^"']*)["']/i)?.[1] ?? "";
887
+ target.elements.set(`#${id}`, { tagName, textContent, value });
888
+ }
889
+
890
+ for (const match of html.matchAll(
891
+ /<(input|textarea)([^>]*\sid=["']([^"']+)["'][^>]*)\/?>/gi
892
+ )) {
893
+ const tagName = match[1].toLowerCase();
894
+ const attributes = match[2] ?? "";
895
+ const id = match[3];
896
+ if (target.elements.has(`#${id}`)) continue;
897
+ const value = attributes.match(/\svalue=["']([^"']*)["']/i)?.[1] ?? "";
898
+ target.elements.set(`#${id}`, { tagName, textContent: "", value });
899
+ }
900
+ } catch {
901
+ target.title = "";
902
+ }
903
+ }
904
+
905
+ function getActionabilitySelector(expression) {
906
+ const match = expression.match(/\}\)\((["'])(.*?)\1,\d+\)\s*$/s);
907
+ return match?.[2] ?? null;
908
+ } // "
909
+
910
+ function getScrollToArguments(expression) {
911
+ const match = expression.match(/\}\)\((.*),(\d+),(.*)\)\s*$/s);
912
+ if (!match) throw new Error("Unable to parse scrollTo arguments");
913
+
914
+ return {
915
+ selector: JSON.parse(match[1]),
916
+ timeout: Number(match[2]),
917
+ block: JSON.parse(match[3]),
918
+ };
919
+ }
920
+
921
+ function applyClick(target, selector) {
922
+ if (selector !== "#test-button") return;
923
+
924
+ const result = target.elements.get("#result");
925
+ if (result) result.textContent = "clicked";
926
+ target.title = "Clicked";
927
+ }
928
+
929
+
930
+ async function evaluateInTarget(target, expression) {
931
+ const document = createDocument(target);
932
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
933
+ const evaluate = new AsyncFunction(
934
+ "document",
935
+ `return await (${expression});`
936
+ );
937
+ return evaluate(document);
938
+ }
939
+
940
+
941
+ function createDocument(target) {
942
+ return {
943
+ get title() {
944
+ return target.title;
945
+ },
946
+ set title(value) {
947
+ target.title = String(value);
948
+ },
949
+ querySelector(selector) {
950
+ return target.elements.get(selector) ?? null;
951
+ },
952
+ };
953
+ }
954
+
955
+ async function evaluatePlaywrightExpression(
956
+ target,
957
+ expression,
958
+ isFunction,
959
+ args
960
+ ) {
961
+ const document = createDocument(target);
962
+ const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
963
+ const evaluate = new AsyncFunction(
964
+ "document",
965
+ "args",
966
+ isFunction
967
+ ? `return await (${expression})(...args);`
968
+ : `return await (${expression});`
969
+ );
970
+ return evaluate(document, args);
971
+ }
972
+
973
+ async function evaluatePlaywrightCall(ctx, target, expression, isFunction, args) {
974
+ if (expression.trim() === "() => document.title") {
975
+ return getContextTitle(ctx, target);
976
+ }
977
+ if (expression.includes("querySelectorAll(info.parsed")) {
978
+ return resolvePlaywrightLocator(target, args);
979
+ }
980
+ if (expression.includes("injected.previewNode")) {
981
+ const element = args.find((arg) => arg?.kind === "playwright-element");
982
+ return `JSHandle@${playwrightElementDescription(element)}`;
983
+ }
984
+ if (expression.includes("injected.checkElementStates")) {
985
+ return undefined;
986
+ }
987
+ if (expression.includes("injected.setupHitTargetInterceptor")) {
988
+ return {
989
+ kind: "playwright-hit-target-interceptor",
990
+ targetId: target.targetId,
991
+ };
992
+ }
993
+ if (expression.includes("=> h.stop()")) {
994
+ return "done";
995
+ }
996
+ if (
997
+ expression.includes("width: innerWidth") &&
998
+ expression.includes("height: innerHeight")
999
+ ) {
1000
+ return {
1001
+ width: target.viewport.width,
1002
+ height: target.viewport.height,
1003
+ };
1004
+ }
1005
+ return evaluatePlaywrightExpression(target, expression, isFunction, args);
1006
+ }
1007
+
1008
+ async function getContextTitle(ctx, target) {
1009
+ return (await ctx.title?.()) || target.title;
1010
+ }
1011
+
1012
+ function shouldUseContextEvaluateResult(ctx) {
1013
+ return (
1014
+ typeof ctx.evaluate == "function"
1015
+ );
1016
+ }
1017
+
1018
+ function deserializePlaywrightValue(value, handles = [], refs = new Map()) {
1019
+ if (value === undefined || value === null) return value;
1020
+ if (typeof value !== "object") return value;
1021
+ if ("ref" in value) return refs.get(value.ref);
1022
+ if ("v" in value) {
1023
+ if (value.v === "undefined") return undefined;
1024
+ if (value.v === "null") return null;
1025
+ if (value.v === "NaN") return NaN;
1026
+ if (value.v === "Infinity") return Infinity;
1027
+ if (value.v === "-Infinity") return -Infinity;
1028
+ if (value.v === "-0") return -0;
1029
+ }
1030
+ if ("bi" in value) return BigInt(value.bi);
1031
+ if ("h" in value) return handles[value.h];
1032
+ if ("a" in value) {
1033
+ const result = [];
1034
+ refs.set(value.id, result);
1035
+ for (const item of value.a) {
1036
+ result.push(deserializePlaywrightValue(item, handles, refs));
1037
+ }
1038
+ return result;
1039
+ }
1040
+ if ("o" in value) {
1041
+ const result = {};
1042
+ refs.set(value.id, result);
1043
+ for (const item of value.o) {
1044
+ if (item.k === "__proto__") continue;
1045
+ result[item.k] = deserializePlaywrightValue(item.v, handles, refs);
1046
+ }
1047
+ return result;
1048
+ }
1049
+ return value;
1050
+ }
1051
+
1052
+ function resolvePlaywrightLocator(target, args) {
1053
+ const [, options] = args;
1054
+ const selector = getPlaywrightSelector(options?.info?.parsed);
1055
+ const element = target.elements.get(selector);
1056
+ if (!element) return { log: "", success: false, element: null };
1057
+
1058
+ return {
1059
+ kind: "playwright-locator-result",
1060
+ log: `locator resolved to ${selector}`,
1061
+ success: true,
1062
+ element: {
1063
+ kind: "playwright-element",
1064
+ targetId: target.targetId,
1065
+ selector,
1066
+ element,
1067
+ },
1068
+ };
1069
+ }
1070
+
1071
+ function shouldForwardPlaywrightEvaluate(expression, handles) {
1072
+ if (handles.some((handle) => handle?.kind?.startsWith("playwright-"))) {
1073
+ return false;
1074
+ }
1075
+
1076
+ const source = expression.trim();
1077
+ if (source === "() => document.title") return false;
1078
+ if (
1079
+ source.includes("querySelectorAll(info.parsed") ||
1080
+ source.includes("injected.previewNode") ||
1081
+ source.includes("injected.checkElementStates") ||
1082
+ source.includes("injected.setupHitTargetInterceptor") ||
1083
+ (source.includes("width: innerWidth") &&
1084
+ source.includes("height: innerHeight"))
1085
+ ) {
1086
+ return false;
1087
+ }
1088
+
1089
+ return true;
1090
+ }
1091
+
1092
+ function getPlaywrightSelector(parsed) {
1093
+ if (typeof parsed === "string") return parsed;
1094
+ if (!parsed || typeof parsed !== "object") return null;
1095
+ if (typeof parsed.source === "string") return parsed.source;
1096
+ if (typeof parsed.body === "string") return parsed.body;
1097
+
1098
+ for (const value of Object.values(parsed)) {
1099
+ const selector = getPlaywrightSelector(value);
1100
+ if (selector) return selector;
1101
+ }
1102
+ return null;
1103
+ }
1104
+
1105
+ function serializePlaywrightValue(value, seen = new Map()) {
1106
+ if (value === undefined) return { v: "undefined" };
1107
+ if (value === null) return { v: "null" };
1108
+ if (
1109
+ typeof value === "string" ||
1110
+ typeof value === "number" ||
1111
+ typeof value === "boolean"
1112
+ ) {
1113
+ return value;
1114
+ }
1115
+ if (typeof value === "bigint") return { bi: value.toString() };
1116
+
1117
+ if (seen.has(value)) return { ref: seen.get(value) };
1118
+ const id = seen.size + 1;
1119
+ seen.set(value, id);
1120
+
1121
+ if (Array.isArray(value)) {
1122
+ return {
1123
+ a: value.map((item) => serializePlaywrightValue(item, seen)),
1124
+ id,
1125
+ };
1126
+ }
1127
+
1128
+ return {
1129
+ o: Object.entries(value).map(([key, item]) => ({
1130
+ k: key,
1131
+ v: serializePlaywrightValue(item, seen),
1132
+ })),
1133
+ id,
1134
+ };
1135
+ }
1136
+
1137
+ function createRemoteObject(state, value, returnByValue) {
1138
+ if (value === undefined) return { type: "undefined" };
1139
+ if (value === null) return { type: "object", subtype: "null", value: null };
1140
+ if (value?.kind === "playwright-element") {
1141
+ const objectId = `object-${state.nextObjectId++}`;
1142
+ state.objects.set(objectId, value);
1143
+ return {
1144
+ type: "object",
1145
+ subtype: "node",
1146
+ className: playwrightElementClassName(value.element?.tagName),
1147
+ description: playwrightElementDescription(value),
1148
+ objectId,
1149
+ };
1150
+ }
1151
+
1152
+ const type = typeof value;
1153
+ if (type === "string" || type === "boolean") {
1154
+ return { type, value };
1155
+ }
1156
+ if (type === "number") {
1157
+ return Number.isFinite(value)
1158
+ ? { type, value }
1159
+ : { type, unserializableValue: String(value) };
1160
+ }
1161
+ if (type === "bigint") {
1162
+ return { type, unserializableValue: `${value}n` };
1163
+ }
1164
+
1165
+ if (returnByValue) {
1166
+ return {
1167
+ type: "object",
1168
+ value,
1169
+ description: Array.isArray(value) ? "Array" : "Object",
1170
+ };
1171
+ }
1172
+
1173
+ const objectId = `object-${state.nextObjectId++}`;
1174
+ state.objects.set(objectId, value);
1175
+ return {
1176
+ type: "object",
1177
+ className: "Object",
1178
+ description: "Object",
1179
+ objectId,
1180
+ };
1181
+ }
1182
+
1183
+ function playwrightElementClassName(tagName) {
1184
+ const names = {
1185
+ button: "HTMLButtonElement",
1186
+ input: "HTMLInputElement",
1187
+ textarea: "HTMLTextAreaElement",
1188
+ output: "HTMLOutputElement",
1189
+ };
1190
+ return names[tagName] ?? "HTMLElement";
1191
+ }
1192
+
1193
+ function playwrightElementDescription(value) {
1194
+ const tagName = value.element?.tagName ?? "element";
1195
+ return `${tagName}#${value.selector.replace(/^#/, "")}`;
1196
+ }
1197
+
1198
+ function createLoggingContext() {
1199
+ const log = (method, payload = {}) => {
1200
+
1201
+ serverError(Bun.markdown.ansi(`## [CdpServer:context] ${method}`))
1202
+ serverError(payload);
1203
+ return { ok: true, method, payload };
1204
+ };
1205
+
1206
+ return {
1207
+ navigate(url) {
1208
+ return log("navigate", { url });
1209
+ },
1210
+ evaluate(script) {
1211
+ return log("evaluate", { script });
1212
+ },
1213
+ title() {
1214
+ log("title");
1215
+ return "";
1216
+ },
1217
+ click(selectorOrX, yOrOptions, options) {
1218
+ if (typeof selectorOrX === "string") {
1219
+ return log("click", { selector: selectorOrX, options: yOrOptions });
1220
+ }
1221
+
1222
+ return log("click", { x: selectorOrX, y: yOrOptions, options });
1223
+ },
1224
+ type(text) {
1225
+ return log("type", { text });
1226
+ },
1227
+ press(key, options) {
1228
+ return log("press", { key, options });
1229
+ },
1230
+ scroll(dx, dy) {
1231
+ return log("scroll", { dx, dy });
1232
+ },
1233
+ scrollTo(selector, options) {
1234
+ return log("scrollTo", { selector, options });
1235
+ },
1236
+ resize(width, height) {
1237
+ return log("resize", { width, height });
1238
+ },
1239
+ goBack() {
1240
+ return log("goBack");
1241
+ },
1242
+ goForward() {
1243
+ return log("goForward");
1244
+ },
1245
+ reload() {
1246
+ return log("reload");
1247
+ },
1248
+ screenshot(options) {
1249
+ return log("screenshot", { options });
1250
+ },
1251
+ cdp(method, params) {
1252
+ return log("cdp", { method, params });
1253
+ },
1254
+ close() {
1255
+ return log("close");
1256
+ },
1257
+ };
1258
+ }
1259
+
1260
+ if (import.meta.main) {
1261
+ const port = Number(Bun.argv[2] ?? CDP_DEFAULT_PORT);
1262
+ CdpServer.create(createLoggingContext()).listen(port);
1263
+ }