typescript-virtual-container 1.5.3 → 1.5.5

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 (371) hide show
  1. package/README.md +44 -532
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/SSHMimic/executor.js +23 -5
  4. package/dist/VirtualPackageManager/index.js +10 -0
  5. package/dist/VirtualShell/shell.js +158 -11
  6. package/dist/commands/basename.d.ts +13 -0
  7. package/dist/commands/basename.js +45 -0
  8. package/dist/commands/bc.d.ts +2 -0
  9. package/dist/commands/bc.js +28 -0
  10. package/dist/commands/file.d.ts +8 -0
  11. package/dist/commands/file.js +57 -0
  12. package/dist/commands/fun.d.ts +32 -0
  13. package/dist/commands/fun.js +172 -0
  14. package/dist/commands/ip.d.ts +7 -0
  15. package/dist/commands/ip.js +52 -0
  16. package/dist/commands/jobs.d.ts +4 -0
  17. package/dist/commands/jobs.js +27 -0
  18. package/dist/commands/last.d.ts +13 -0
  19. package/dist/commands/last.js +68 -0
  20. package/dist/commands/manuals-bundle.js +598 -6
  21. package/dist/commands/registry.js +30 -2
  22. package/dist/commands/runtime.js +24 -3
  23. package/dist/commands/set.js +20 -0
  24. package/dist/commands/sh.js +74 -1
  25. package/dist/commands/tput.d.ts +13 -0
  26. package/dist/commands/tput.js +76 -0
  27. package/dist/commands/w.d.ts +7 -0
  28. package/dist/commands/w.js +38 -0
  29. package/dist/utils/expand.d.ts +12 -0
  30. package/dist/utils/expand.js +87 -1
  31. package/package.json +9 -3
  32. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -50
  33. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -31
  34. package/.github/dependabot.yml +0 -27
  35. package/.github/pull_request_template.md +0 -21
  36. package/.github/workflows/create-pull-request.yml +0 -85
  37. package/.github/workflows/publish.yml +0 -25
  38. package/.github/workflows/test-battery.yml +0 -102
  39. package/.vscode/settings.json +0 -20
  40. package/CODE_OF_CONDUCT.md +0 -39
  41. package/CONTRIBUTING.md +0 -59
  42. package/HONEYPOT.md +0 -358
  43. package/SECURITY.md +0 -33
  44. package/benchmark-results.txt +0 -40
  45. package/benchmark-virtualshell.ts +0 -88
  46. package/biome.json +0 -37
  47. package/build.js +0 -22
  48. package/builds/fortune-nyx-v1.5.3-directbash-k6.1.0.mjs +0 -1764
  49. package/builds/fortune-nyx-v1.5.3-ssh-nosftp.js +0 -1764
  50. package/builds/fortune-nyx-v1.5.3-ssh.cjs +0 -1765
  51. package/builds/fortune-nyx-v1.5.3-web.min.js +0 -17036
  52. package/bun.lock +0 -244
  53. package/docs/.nojekyll +0 -1
  54. package/docs/app.js +0 -1751
  55. package/docs/assets/hierarchy.js +0 -1
  56. package/docs/assets/highlight.css +0 -162
  57. package/docs/assets/icons.js +0 -18
  58. package/docs/assets/icons.svg +0 -1
  59. package/docs/assets/main.js +0 -60
  60. package/docs/assets/navigation.js +0 -1
  61. package/docs/assets/search.js +0 -1
  62. package/docs/assets/style.css +0 -1633
  63. package/docs/classes/HoneyPot.html +0 -31
  64. package/docs/classes/IdleManager.html +0 -162
  65. package/docs/classes/SshClient.html +0 -66
  66. package/docs/classes/VirtualFileSystem.html +0 -279
  67. package/docs/classes/VirtualPackageManager.html +0 -63
  68. package/docs/classes/VirtualSftpServer.html +0 -169
  69. package/docs/classes/VirtualShell.html +0 -285
  70. package/docs/classes/VirtualSshServer.html +0 -182
  71. package/docs/classes/VirtualUserManager.html +0 -276
  72. package/docs/demo.html +0 -82
  73. package/docs/functions/assertDiff.html +0 -6
  74. package/docs/functions/diffSnapshots.html +0 -7
  75. package/docs/functions/formatDiff.html +0 -6
  76. package/docs/functions/getArg.html +0 -13
  77. package/docs/functions/getFlag.html +0 -15
  78. package/docs/functions/ifFlag.html +0 -11
  79. package/docs/hierarchy.html +0 -1
  80. package/docs/index.html +0 -1869
  81. package/docs/interfaces/AuditLogEntry.html +0 -6
  82. package/docs/interfaces/CommandContext.html +0 -22
  83. package/docs/interfaces/CommandResult.html +0 -26
  84. package/docs/interfaces/ExecStream.html +0 -11
  85. package/docs/interfaces/HoneyPotStats.html +0 -16
  86. package/docs/interfaces/IdleManagerOptions.html +0 -7
  87. package/docs/interfaces/InstalledPackage.html +0 -20
  88. package/docs/interfaces/NanoEditorSession.html +0 -8
  89. package/docs/interfaces/PackageDefinition.html +0 -30
  90. package/docs/interfaces/PackageFile.html +0 -8
  91. package/docs/interfaces/PasswordChallenge.html +0 -16
  92. package/docs/interfaces/RemoveOptions.html +0 -4
  93. package/docs/interfaces/ShellEnv.html +0 -6
  94. package/docs/interfaces/ShellModule.html +0 -14
  95. package/docs/interfaces/ShellProperties.html +0 -14
  96. package/docs/interfaces/ShellStream.html +0 -11
  97. package/docs/interfaces/SudoChallenge.html +0 -24
  98. package/docs/interfaces/VfsBaseNode.html +0 -12
  99. package/docs/interfaces/VfsDiff.html +0 -10
  100. package/docs/interfaces/VfsDiffEntry.html +0 -6
  101. package/docs/interfaces/VfsDiffModified.html +0 -10
  102. package/docs/interfaces/VfsDirectoryNode.html +0 -15
  103. package/docs/interfaces/VfsFileNode.html +0 -17
  104. package/docs/interfaces/VfsOptions.html +0 -26
  105. package/docs/interfaces/VfsSnapshot.html +0 -3
  106. package/docs/interfaces/VfsSnapshotBaseNode.html +0 -8
  107. package/docs/interfaces/VfsSnapshotDirectoryNode.html +0 -10
  108. package/docs/interfaces/VfsSnapshotFileNode.html +0 -12
  109. package/docs/interfaces/VirtualActiveSession.html +0 -12
  110. package/docs/interfaces/VirtualSftpServerOptions.html +0 -7
  111. package/docs/interfaces/VirtualShellVfsLike.html +0 -15
  112. package/docs/interfaces/VirtualShellVfsOptions.html +0 -3
  113. package/docs/interfaces/WriteFileOptions.html +0 -6
  114. package/docs/media/LICENSE +0 -21
  115. package/docs/modules.html +0 -1
  116. package/docs/types/ArgParseOptions.html +0 -4
  117. package/docs/types/CommandMode.html +0 -2
  118. package/docs/types/CommandOutcome.html +0 -2
  119. package/docs/types/IdleState.html +0 -1
  120. package/docs/types/VfsNodeStats.html +0 -2
  121. package/docs/types/VfsNodeType.html +0 -2
  122. package/docs/types/VfsPersistenceMode.html +0 -5
  123. package/docs/types/VfsSnapshotNode.html +0 -2
  124. package/examples/README.md +0 -288
  125. package/examples/app.js +0 -1751
  126. package/examples/app.ts +0 -299
  127. package/examples/build.js +0 -27
  128. package/examples/demo.html +0 -33
  129. package/examples/honeypot-audit.ts +0 -180
  130. package/examples/honeypot-export.ts +0 -253
  131. package/examples/honeypot-quickstart.ts +0 -110
  132. package/examples/index.html +0 -82
  133. package/examples/server.js +0 -55
  134. package/polyfills/buffer.js +0 -117
  135. package/polyfills/node_child_process/index.js +0 -2
  136. package/polyfills/node_crypto/index.js +0 -167
  137. package/polyfills/node_events/index.js +0 -9
  138. package/polyfills/node_fs/index.js +0 -202
  139. package/polyfills/node_fs/promises.js +0 -4
  140. package/polyfills/node_os/index.js +0 -9
  141. package/polyfills/node_path/index.js +0 -28
  142. package/polyfills/node_vm/index.js +0 -7
  143. package/polyfills/node_zlib/index.js +0 -3
  144. package/polyfills/process.js +0 -14
  145. package/polyfills/ssh2/index.js +0 -75
  146. package/scripts/build-all.mjs +0 -226
  147. package/scripts/build-names.mjs +0 -43
  148. package/scripts/generate-manuals-bundle.mjs +0 -49
  149. package/scripts/postinstall.js +0 -42
  150. package/scripts/publish-package.sh +0 -70
  151. package/src/Honeypot/index.ts +0 -457
  152. package/src/SSHClient/index.ts +0 -270
  153. package/src/SSHMimic/exec.ts +0 -49
  154. package/src/SSHMimic/executor.ts +0 -251
  155. package/src/SSHMimic/hostKey.ts +0 -21
  156. package/src/SSHMimic/index.ts +0 -337
  157. package/src/SSHMimic/loginBanner.ts +0 -36
  158. package/src/SSHMimic/loginFormat.ts +0 -10
  159. package/src/SSHMimic/prompt.ts +0 -14
  160. package/src/SSHMimic/sftp.ts +0 -883
  161. package/src/VirtualFileSystem/binaryPack.ts +0 -258
  162. package/src/VirtualFileSystem/index.ts +0 -1193
  163. package/src/VirtualFileSystem/internalTypes.ts +0 -43
  164. package/src/VirtualFileSystem/journal.ts +0 -171
  165. package/src/VirtualFileSystem/path.ts +0 -74
  166. package/src/VirtualPackageManager/index.ts +0 -996
  167. package/src/VirtualShell/idleManager.ts +0 -137
  168. package/src/VirtualShell/index.ts +0 -475
  169. package/src/VirtualShell/shell.ts +0 -700
  170. package/src/VirtualShell/shellParser.ts +0 -285
  171. package/src/VirtualUserManager/index.ts +0 -758
  172. package/src/bun.d.ts +0 -1
  173. package/src/commands/adduser.ts +0 -103
  174. package/src/commands/alias.ts +0 -69
  175. package/src/commands/apt.ts +0 -233
  176. package/src/commands/awk.ts +0 -168
  177. package/src/commands/base64.ts +0 -29
  178. package/src/commands/cat.ts +0 -52
  179. package/src/commands/cd.ts +0 -25
  180. package/src/commands/chmod.ts +0 -85
  181. package/src/commands/clear.ts +0 -15
  182. package/src/commands/command-helpers.ts +0 -286
  183. package/src/commands/cp.ts +0 -83
  184. package/src/commands/curl.ts +0 -147
  185. package/src/commands/cut.ts +0 -36
  186. package/src/commands/date.ts +0 -30
  187. package/src/commands/declare.ts +0 -49
  188. package/src/commands/deluser.ts +0 -98
  189. package/src/commands/df.ts +0 -23
  190. package/src/commands/diff.ts +0 -43
  191. package/src/commands/dpkg.ts +0 -180
  192. package/src/commands/du.ts +0 -56
  193. package/src/commands/echo.ts +0 -58
  194. package/src/commands/env.ts +0 -23
  195. package/src/commands/exit.ts +0 -18
  196. package/src/commands/export.ts +0 -34
  197. package/src/commands/find.ts +0 -68
  198. package/src/commands/free.ts +0 -47
  199. package/src/commands/grep.ts +0 -116
  200. package/src/commands/groups.ts +0 -19
  201. package/src/commands/gzip.ts +0 -88
  202. package/src/commands/head.ts +0 -52
  203. package/src/commands/help.ts +0 -152
  204. package/src/commands/helpers.ts +0 -234
  205. package/src/commands/history.ts +0 -34
  206. package/src/commands/hostname.ts +0 -14
  207. package/src/commands/htop.ts +0 -20
  208. package/src/commands/id.ts +0 -19
  209. package/src/commands/index.ts +0 -9
  210. package/src/commands/kill.ts +0 -19
  211. package/src/commands/ln.ts +0 -71
  212. package/src/commands/ls.ts +0 -243
  213. package/src/commands/lsb-release.ts +0 -63
  214. package/src/commands/man.ts +0 -31
  215. package/src/commands/manuals/adduser.txt +0 -11
  216. package/src/commands/manuals/apt-cache.txt +0 -12
  217. package/src/commands/manuals/apt.txt +0 -20
  218. package/src/commands/manuals/awk.txt +0 -13
  219. package/src/commands/manuals/cat.txt +0 -14
  220. package/src/commands/manuals/cd.txt +0 -16
  221. package/src/commands/manuals/chmod.txt +0 -16
  222. package/src/commands/manuals/clear.txt +0 -10
  223. package/src/commands/manuals/cp.txt +0 -10
  224. package/src/commands/manuals/curl.txt +0 -20
  225. package/src/commands/manuals/date.txt +0 -14
  226. package/src/commands/manuals/declare.txt +0 -12
  227. package/src/commands/manuals/deluser.txt +0 -10
  228. package/src/commands/manuals/df.txt +0 -10
  229. package/src/commands/manuals/dpkg-query.txt +0 -11
  230. package/src/commands/manuals/dpkg.txt +0 -14
  231. package/src/commands/manuals/du.txt +0 -11
  232. package/src/commands/manuals/echo.txt +0 -11
  233. package/src/commands/manuals/false.txt +0 -10
  234. package/src/commands/manuals/find.txt +0 -11
  235. package/src/commands/manuals/free.txt +0 -12
  236. package/src/commands/manuals/grep.txt +0 -13
  237. package/src/commands/manuals/groups.txt +0 -10
  238. package/src/commands/manuals/gzip.txt +0 -11
  239. package/src/commands/manuals/head.txt +0 -10
  240. package/src/commands/manuals/help.txt +0 -11
  241. package/src/commands/manuals/history.txt +0 -11
  242. package/src/commands/manuals/hostname.txt +0 -10
  243. package/src/commands/manuals/id.txt +0 -10
  244. package/src/commands/manuals/kill.txt +0 -13
  245. package/src/commands/manuals/ls.txt +0 -20
  246. package/src/commands/manuals/lsb_release.txt +0 -14
  247. package/src/commands/manuals/mkdir.txt +0 -10
  248. package/src/commands/manuals/mv.txt +0 -10
  249. package/src/commands/manuals/nano.txt +0 -11
  250. package/src/commands/manuals/neofetch.txt +0 -10
  251. package/src/commands/manuals/node.txt +0 -13
  252. package/src/commands/manuals/npm.txt +0 -13
  253. package/src/commands/manuals/npx.txt +0 -13
  254. package/src/commands/manuals/passwd.txt +0 -11
  255. package/src/commands/manuals/ping.txt +0 -10
  256. package/src/commands/manuals/printf.txt +0 -11
  257. package/src/commands/manuals/ps.txt +0 -10
  258. package/src/commands/manuals/pwd.txt +0 -10
  259. package/src/commands/manuals/python3.txt +0 -13
  260. package/src/commands/manuals/readlink.txt +0 -10
  261. package/src/commands/manuals/return.txt +0 -10
  262. package/src/commands/manuals/rm.txt +0 -10
  263. package/src/commands/manuals/sed.txt +0 -11
  264. package/src/commands/manuals/set.txt +0 -11
  265. package/src/commands/manuals/shift.txt +0 -10
  266. package/src/commands/manuals/sleep.txt +0 -10
  267. package/src/commands/manuals/sort.txt +0 -12
  268. package/src/commands/manuals/source.txt +0 -11
  269. package/src/commands/manuals/ssh.txt +0 -11
  270. package/src/commands/manuals/stat.txt +0 -10
  271. package/src/commands/manuals/su.txt +0 -13
  272. package/src/commands/manuals/sudo.txt +0 -11
  273. package/src/commands/manuals/tail.txt +0 -10
  274. package/src/commands/manuals/tar.txt +0 -19
  275. package/src/commands/manuals/tee.txt +0 -10
  276. package/src/commands/manuals/test.txt +0 -11
  277. package/src/commands/manuals/touch.txt +0 -11
  278. package/src/commands/manuals/tr.txt +0 -10
  279. package/src/commands/manuals/trap.txt +0 -10
  280. package/src/commands/manuals/true.txt +0 -10
  281. package/src/commands/manuals/type.txt +0 -10
  282. package/src/commands/manuals/uname.txt +0 -12
  283. package/src/commands/manuals/uniq.txt +0 -12
  284. package/src/commands/manuals/unset.txt +0 -10
  285. package/src/commands/manuals/uptime.txt +0 -11
  286. package/src/commands/manuals/wc.txt +0 -12
  287. package/src/commands/manuals/wget.txt +0 -12
  288. package/src/commands/manuals/which.txt +0 -10
  289. package/src/commands/manuals/whoami.txt +0 -10
  290. package/src/commands/manuals/xargs.txt +0 -10
  291. package/src/commands/manuals-bundle.ts +0 -898
  292. package/src/commands/mkdir.ts +0 -31
  293. package/src/commands/mv.ts +0 -50
  294. package/src/commands/nano.ts +0 -38
  295. package/src/commands/neofetch.ts +0 -53
  296. package/src/commands/node.ts +0 -341
  297. package/src/commands/npm.ts +0 -132
  298. package/src/commands/passwd.ts +0 -50
  299. package/src/commands/ping.ts +0 -32
  300. package/src/commands/printf.ts +0 -129
  301. package/src/commands/ps.ts +0 -58
  302. package/src/commands/pwd.ts +0 -9
  303. package/src/commands/python.ts +0 -2229
  304. package/src/commands/read.ts +0 -46
  305. package/src/commands/registry.ts +0 -249
  306. package/src/commands/rm.ts +0 -42
  307. package/src/commands/runtime.ts +0 -421
  308. package/src/commands/sed.ts +0 -68
  309. package/src/commands/seq.ts +0 -43
  310. package/src/commands/set.ts +0 -29
  311. package/src/commands/sh.ts +0 -467
  312. package/src/commands/shift.ts +0 -63
  313. package/src/commands/sleep.ts +0 -20
  314. package/src/commands/sort.ts +0 -46
  315. package/src/commands/source.ts +0 -52
  316. package/src/commands/stat.ts +0 -61
  317. package/src/commands/su.ts +0 -72
  318. package/src/commands/sudo.ts +0 -76
  319. package/src/commands/tail.ts +0 -53
  320. package/src/commands/tar.ts +0 -102
  321. package/src/commands/tee.ts +0 -36
  322. package/src/commands/test.ts +0 -137
  323. package/src/commands/touch.ts +0 -28
  324. package/src/commands/tr.ts +0 -70
  325. package/src/commands/tree.ts +0 -20
  326. package/src/commands/true.ts +0 -27
  327. package/src/commands/type.ts +0 -48
  328. package/src/commands/uname.ts +0 -29
  329. package/src/commands/uniq.ts +0 -39
  330. package/src/commands/unset.ts +0 -17
  331. package/src/commands/uptime.ts +0 -54
  332. package/src/commands/wc.ts +0 -55
  333. package/src/commands/wget.ts +0 -148
  334. package/src/commands/which.ts +0 -37
  335. package/src/commands/who.ts +0 -25
  336. package/src/commands/whoami.ts +0 -14
  337. package/src/commands/xargs.ts +0 -31
  338. package/src/index.ts +0 -67
  339. package/src/modules/linuxRootfs.ts +0 -1961
  340. package/src/modules/neofetch.ts +0 -358
  341. package/src/modules/shellInteractive.ts +0 -57
  342. package/src/modules/shellRuntime.ts +0 -76
  343. package/src/self-standalone.ts +0 -542
  344. package/src/standalone-wo-sftp.ts +0 -38
  345. package/src/standalone.ts +0 -72
  346. package/src/types/commands.ts +0 -146
  347. package/src/types/pipeline.ts +0 -52
  348. package/src/types/streams.ts +0 -32
  349. package/src/types/tar-stream.d.ts +0 -38
  350. package/src/types/vfs.ts +0 -98
  351. package/src/utils/expand.ts +0 -491
  352. package/src/utils/perfLogger.ts +0 -72
  353. package/src/utils/tokenize.ts +0 -98
  354. package/src/utils/vfsDiff.ts +0 -275
  355. package/tests/command-helpers.test.ts +0 -116
  356. package/tests/commands-admin-net.test.ts +0 -441
  357. package/tests/commands-advanced.test.ts +0 -456
  358. package/tests/commands-core.test.ts +0 -562
  359. package/tests/commands-missing.test.ts +0 -570
  360. package/tests/commands-specific-units.test.ts +0 -327
  361. package/tests/commands-text-sys.test.ts +0 -445
  362. package/tests/expand.test.ts +0 -170
  363. package/tests/helpers.test.ts +0 -97
  364. package/tests/new-features.test.ts +0 -1036
  365. package/tests/parser-executor.test.ts +0 -37
  366. package/tests/sftp.test.ts +0 -323
  367. package/tests/ssh-exec.test.ts +0 -45
  368. package/tests/test-helper.ts +0 -79
  369. package/tests/users.test.ts +0 -86
  370. package/tsconfig.json +0 -49
  371. package/typedoc.json +0 -47
@@ -1,46 +0,0 @@
1
- import type { ShellModule } from "../types/commands";
2
- import { ifFlag } from "./command-helpers";
3
-
4
- /**
5
- * Read a line from stdin into one or more variables.
6
- * @category shell
7
- * @params ["[-r] [-p prompt] <var...>"]
8
- */
9
- export const readCommand: ShellModule = {
10
- name: "read",
11
- description: "Read a line from stdin into variables",
12
- category: "shell",
13
- params: ["[-r] [-p prompt] <var...>"],
14
- run: ({ args, stdin, env }) => {
15
- const _promptIdx = args.indexOf("-p");
16
- const varNames = args.filter(
17
- (a, i) => a !== "-r" && a !== "-p" && args[i - 1] !== "-p",
18
- );
19
-
20
- // In non-interactive context, read from stdin pipe
21
- const input = (stdin ?? "").split("\n")[0] ?? "";
22
- const line = ifFlag(args, ["-r"])
23
- ? input
24
- : input.replace(/\\(?:\r?\n|.)/g, (m) =>
25
- m[1] === "\n" || m[1] === "\r" ? "" : m[1]!,
26
- );
27
-
28
- if (!env) return { exitCode: 0 };
29
-
30
- if (varNames.length === 0) {
31
- // No var names: store into REPLY
32
- env.vars.REPLY = line;
33
- } else if (varNames.length === 1) {
34
- env.vars[varNames[0]!] = line;
35
- } else {
36
- // Split on whitespace, last var gets remainder
37
- const parts = line.split(/\s+/);
38
- for (let i = 0; i < varNames.length; i++) {
39
- env.vars[varNames[i]!] =
40
- i < varNames.length - 1 ? (parts[i] ?? "") : parts.slice(i).join(" ");
41
- }
42
- }
43
-
44
- return { exitCode: 0 };
45
- },
46
- };
@@ -1,249 +0,0 @@
1
- /** biome-ignore-all lint/style/useNamingConvention: ENV VARIABLES */
2
- import type { CommandContext, CommandResult, ShellModule } from "../types/commands";
3
- import { adduserCommand } from "./adduser";
4
- import { aliasCommand, unaliasCommand } from "./alias";
5
- import { aptCacheCommand, aptCommand } from "./apt";
6
- import { awkCommand } from "./awk";
7
- import { base64Command } from "./base64";
8
- import { catCommand } from "./cat";
9
- import { cdCommand } from "./cd";
10
- import { chmodCommand } from "./chmod";
11
- import { clearCommand } from "./clear";
12
- import { cpCommand } from "./cp";
13
- import { curlCommand } from "./curl";
14
- import { cutCommand } from "./cut";
15
- import { dateCommand } from "./date";
16
- import { declareCommand } from "./declare";
17
- import { deluserCommand } from "./deluser";
18
- import { dfCommand } from "./df";
19
- import { diffCommand } from "./diff";
20
- import { dpkgCommand, dpkgQueryCommand } from "./dpkg";
21
- import { duCommand } from "./du";
22
- import { echoCommand } from "./echo";
23
- import { envCommand } from "./env";
24
- import { exitCommand } from "./exit";
25
- import { exportCommand } from "./export";
26
- import { findCommand } from "./find";
27
- import { freeCommand } from "./free";
28
- import { grepCommand } from "./grep";
29
- import { groupsCommand } from "./groups";
30
- import { gunzipCommand, gzipCommand } from "./gzip";
31
- import { headCommand } from "./head";
32
- import { createHelpCommand } from "./help";
33
- import { historyCommand } from "./history";
34
- import { hostnameCommand } from "./hostname";
35
- import { htopCommand } from "./htop";
36
- import { idCommand } from "./id";
37
- import { killCommand } from "./kill";
38
- import { lnCommand, readlinkCommand } from "./ln";
39
- import { seqCommand } from "./seq";
40
- import { statCommand } from "./stat";
41
- import { lsCommand } from "./ls";
42
- import { lsbReleaseCommand } from "./lsb-release";
43
- import { manCommand } from "./man";
44
- import { mkdirCommand } from "./mkdir";
45
- import { mvCommand } from "./mv";
46
- import { nanoCommand } from "./nano";
47
- import { neofetchCommand } from "./neofetch";
48
- import { nodeCommand } from "./node";
49
- import { npmCommand, npxCommand } from "./npm";
50
- import { passwdCommand } from "./passwd";
51
- import { pingCommand } from "./ping";
52
- import { printfCommand } from "./printf";
53
- import { psCommand } from "./ps";
54
- import { pwdCommand } from "./pwd";
55
- import { python3Command } from "./python";
56
- import { readCommand } from "./read";
57
- import { rmCommand } from "./rm";
58
- import { sedCommand } from "./sed";
59
- import { setCommand } from "./set";
60
- import { shCommand } from "./sh";
61
- import { returnCommand, shiftCommand, trapCommand } from "./shift";
62
- import { sleepCommand } from "./sleep";
63
- import { sortCommand } from "./sort";
64
- import { sourceCommand } from "./source";
65
- import { suCommand } from "./su";
66
- import { sudoCommand } from "./sudo";
67
- import { tailCommand } from "./tail";
68
- import { tarCommand } from "./tar";
69
- import { teeCommand } from "./tee";
70
- import { testCommand } from "./test";
71
- import { touchCommand } from "./touch";
72
- import { trCommand } from "./tr";
73
- import { treeCommand } from "./tree";
74
- import { falseCommand, trueCommand } from "./true";
75
- import { typeCommand } from "./type";
76
- import { unameCommand } from "./uname";
77
- import { uniqCommand } from "./uniq";
78
- import { unsetCommand } from "./unset";
79
- import { uptimeCommand } from "./uptime";
80
- import { wcCommand } from "./wc";
81
- import { wgetCommand } from "./wget";
82
- import { whichCommand } from "./which";
83
- import { whoCommand } from "./who";
84
- import { whoamiCommand } from "./whoami";
85
- import { xargsCommand } from "./xargs";
86
-
87
- const BASE_COMMANDS: ShellModule[] = [
88
- // Navigation
89
- pwdCommand,
90
- cdCommand,
91
- lsCommand,
92
- treeCommand,
93
- // Files
94
- catCommand,
95
- touchCommand,
96
- rmCommand,
97
- mkdirCommand,
98
- cpCommand,
99
- mvCommand,
100
- lnCommand,
101
- readlinkCommand,
102
- chmodCommand,
103
- seqCommand,
104
- statCommand,
105
- findCommand,
106
- // Text processing
107
- grepCommand,
108
- sedCommand,
109
- awkCommand,
110
- sortCommand,
111
- uniqCommand,
112
- wcCommand,
113
- headCommand,
114
- tailCommand,
115
- cutCommand,
116
- trCommand,
117
- teeCommand,
118
- xargsCommand,
119
- diffCommand,
120
- // Archives
121
- tarCommand,
122
- gzipCommand,
123
- gunzipCommand,
124
- base64Command,
125
- // System info
126
- whoamiCommand,
127
- whoCommand,
128
- hostnameCommand,
129
- idCommand,
130
- groupsCommand,
131
- unameCommand,
132
- psCommand,
133
- killCommand,
134
- dfCommand,
135
- duCommand,
136
- dateCommand,
137
- sleepCommand,
138
- pingCommand,
139
- // Shell
140
- echoCommand,
141
- envCommand,
142
- exportCommand,
143
- setCommand,
144
- unsetCommand,
145
- shCommand,
146
- clearCommand,
147
- exitCommand,
148
- // Editors
149
- nanoCommand,
150
- htopCommand,
151
- // Network
152
- curlCommand,
153
- wgetCommand,
154
- // Users
155
- adduserCommand,
156
- passwdCommand,
157
- deluserCommand,
158
- sudoCommand,
159
- suCommand,
160
- // Misc
161
- neofetchCommand,
162
- // Package management
163
- aptCommand,
164
- aptCacheCommand,
165
- dpkgCommand,
166
- dpkgQueryCommand,
167
- // Shell (extended)
168
- whichCommand,
169
- typeCommand,
170
- manCommand,
171
- aliasCommand,
172
- unaliasCommand,
173
- testCommand,
174
- sourceCommand,
175
- historyCommand,
176
- printfCommand,
177
- readCommand,
178
- declareCommand,
179
- shiftCommand,
180
- trapCommand,
181
- returnCommand,
182
- trueCommand,
183
- falseCommand,
184
- npmCommand,
185
- npxCommand,
186
- nodeCommand,
187
- python3Command,
188
- // System (extended)
189
- uptimeCommand,
190
- freeCommand,
191
- lsbReleaseCommand,
192
- ];
193
-
194
- const customCommands: ShellModule[] = [];
195
- const commandRegistry = new Map<string, ShellModule>();
196
- let cachedCommandNames: string[] | null = null;
197
-
198
- const helpCommand = createHelpCommand(() =>
199
- getCommandModules().map((cmd) => cmd.name),
200
- );
201
-
202
- function buildCache(): void {
203
- commandRegistry.clear();
204
- for (const mod of getCommandModules()) {
205
- commandRegistry.set(mod.name, mod);
206
- for (const alias of mod.aliases ?? []) commandRegistry.set(alias, mod);
207
- }
208
- cachedCommandNames = Array.from(commandRegistry.keys()).sort();
209
- }
210
-
211
- function getCommandModules(): ShellModule[] {
212
- return [...BASE_COMMANDS, ...customCommands, helpCommand];
213
- }
214
-
215
- export function registerCommand(module: ShellModule): void {
216
- const normalized: ShellModule = {
217
- ...module,
218
- name: module.name.trim().toLowerCase(),
219
- aliases: module.aliases?.map((a) => a.trim().toLowerCase()),
220
- };
221
- const names = [normalized.name, ...(normalized.aliases ?? [])];
222
- if (names.some((n) => n.length === 0 || /\s/.test(n))) {
223
- throw new Error("Command names must be non-empty and contain no spaces");
224
- }
225
- customCommands.push(normalized);
226
- buildCache();
227
- }
228
-
229
- export function createCustomCommand(
230
- name: string,
231
- params: string[],
232
- run: (ctx: CommandContext) => CommandResult | Promise<CommandResult>,
233
- ): ShellModule {
234
- return { name, params, run };
235
- }
236
-
237
- export function getCommandNames(): string[] {
238
- if (!cachedCommandNames) buildCache();
239
- return cachedCommandNames!;
240
- }
241
-
242
- export function getCommandModulesPublic(): ShellModule[] {
243
- return getCommandModules();
244
- }
245
-
246
- export function resolveModule(name: string): ShellModule | undefined {
247
- if (!cachedCommandNames) buildCache();
248
- return commandRegistry.get(name.toLowerCase());
249
- }
@@ -1,42 +0,0 @@
1
- import type { ShellModule } from "../types/commands";
2
- import { getArg, ifFlag } from "./command-helpers";
3
- import { assertPathAccess, resolvePath } from "./helpers";
4
-
5
- /**
6
- * Remove files or directories from the filesystem.
7
- * @category files
8
- * @params ["[-r|-rf] <path>"]
9
- */
10
- export const rmCommand: ShellModule = {
11
- name: "rm",
12
- description: "Remove files or directories",
13
- category: "files",
14
- params: ["[-r|-rf] <path>"],
15
- run: ({ authUser, shell, cwd, args }) => {
16
- if (args.length === 0) {
17
- return { stderr: "rm: missing operand", exitCode: 1 };
18
- }
19
-
20
- const recursive = ifFlag(args, ["-r", "-rf", "-fr"]);
21
- const targets: string[] = [];
22
- for (let index = 0; ; index += 1) {
23
- const target = getArg(args, index, { flags: ["-r", "-rf", "-fr"] });
24
- if (!target) {
25
- break;
26
- }
27
- targets.push(target);
28
- }
29
-
30
- if (targets.length === 0) {
31
- return { stderr: "rm: missing operand", exitCode: 1 };
32
- }
33
-
34
- for (const target of targets) {
35
- const resolvedTarget = resolvePath(cwd, target);
36
- assertPathAccess(authUser, resolvedTarget, "rm");
37
- shell.vfs.remove(resolvedTarget, { recursive });
38
- }
39
-
40
- return { exitCode: 0 };
41
- },
42
- };