@lifo-sh/core 0.1.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 (305) hide show
  1. package/dist/archive-D220So0m.js +192 -0
  2. package/dist/args-CG6b9cZt.js +43 -0
  3. package/dist/awk-rMPdpM91.js +118 -0
  4. package/dist/basename-C33A_Zse.js +12 -0
  5. package/dist/bc-BYiKVTNg.js +200 -0
  6. package/dist/cal-DPULSAhj.js +56 -0
  7. package/dist/cat-Crmqa4-2.js +29 -0
  8. package/dist/chmod-CcGyvoCX.js +56 -0
  9. package/dist/chown-CErsnGQX.js +28 -0
  10. package/dist/commands/archive/gunzip.d.ts +4 -0
  11. package/dist/commands/archive/gunzip.d.ts.map +1 -0
  12. package/dist/commands/archive/gzip.d.ts +4 -0
  13. package/dist/commands/archive/gzip.d.ts.map +1 -0
  14. package/dist/commands/archive/tar.d.ts +4 -0
  15. package/dist/commands/archive/tar.d.ts.map +1 -0
  16. package/dist/commands/archive/unzip.d.ts +4 -0
  17. package/dist/commands/archive/unzip.d.ts.map +1 -0
  18. package/dist/commands/archive/zip.d.ts +4 -0
  19. package/dist/commands/archive/zip.d.ts.map +1 -0
  20. package/dist/commands/fs/basename.d.ts +4 -0
  21. package/dist/commands/fs/basename.d.ts.map +1 -0
  22. package/dist/commands/fs/cat.d.ts +4 -0
  23. package/dist/commands/fs/cat.d.ts.map +1 -0
  24. package/dist/commands/fs/chmod.d.ts +4 -0
  25. package/dist/commands/fs/chmod.d.ts.map +1 -0
  26. package/dist/commands/fs/chown.d.ts +4 -0
  27. package/dist/commands/fs/chown.d.ts.map +1 -0
  28. package/dist/commands/fs/cp.d.ts +4 -0
  29. package/dist/commands/fs/cp.d.ts.map +1 -0
  30. package/dist/commands/fs/df.d.ts +4 -0
  31. package/dist/commands/fs/df.d.ts.map +1 -0
  32. package/dist/commands/fs/dirname.d.ts +4 -0
  33. package/dist/commands/fs/dirname.d.ts.map +1 -0
  34. package/dist/commands/fs/du.d.ts +4 -0
  35. package/dist/commands/fs/du.d.ts.map +1 -0
  36. package/dist/commands/fs/file.d.ts +4 -0
  37. package/dist/commands/fs/file.d.ts.map +1 -0
  38. package/dist/commands/fs/find.d.ts +4 -0
  39. package/dist/commands/fs/find.d.ts.map +1 -0
  40. package/dist/commands/fs/ln.d.ts +4 -0
  41. package/dist/commands/fs/ln.d.ts.map +1 -0
  42. package/dist/commands/fs/ls.d.ts +4 -0
  43. package/dist/commands/fs/ls.d.ts.map +1 -0
  44. package/dist/commands/fs/mkdir.d.ts +4 -0
  45. package/dist/commands/fs/mkdir.d.ts.map +1 -0
  46. package/dist/commands/fs/mktemp.d.ts +4 -0
  47. package/dist/commands/fs/mktemp.d.ts.map +1 -0
  48. package/dist/commands/fs/mv.d.ts +4 -0
  49. package/dist/commands/fs/mv.d.ts.map +1 -0
  50. package/dist/commands/fs/realpath.d.ts +4 -0
  51. package/dist/commands/fs/realpath.d.ts.map +1 -0
  52. package/dist/commands/fs/rm.d.ts +4 -0
  53. package/dist/commands/fs/rm.d.ts.map +1 -0
  54. package/dist/commands/fs/rmdir.d.ts +4 -0
  55. package/dist/commands/fs/rmdir.d.ts.map +1 -0
  56. package/dist/commands/fs/stat.d.ts +4 -0
  57. package/dist/commands/fs/stat.d.ts.map +1 -0
  58. package/dist/commands/fs/touch.d.ts +4 -0
  59. package/dist/commands/fs/touch.d.ts.map +1 -0
  60. package/dist/commands/fs/tree.d.ts +4 -0
  61. package/dist/commands/fs/tree.d.ts.map +1 -0
  62. package/dist/commands/index.d.ts +3 -0
  63. package/dist/commands/index.d.ts.map +1 -0
  64. package/dist/commands/io/printf.d.ts +4 -0
  65. package/dist/commands/io/printf.d.ts.map +1 -0
  66. package/dist/commands/io/tee.d.ts +4 -0
  67. package/dist/commands/io/tee.d.ts.map +1 -0
  68. package/dist/commands/io/xargs.d.ts +4 -0
  69. package/dist/commands/io/xargs.d.ts.map +1 -0
  70. package/dist/commands/io/yes.d.ts +4 -0
  71. package/dist/commands/io/yes.d.ts.map +1 -0
  72. package/dist/commands/net/curl.d.ts +6 -0
  73. package/dist/commands/net/curl.d.ts.map +1 -0
  74. package/dist/commands/net/dig.d.ts +4 -0
  75. package/dist/commands/net/dig.d.ts.map +1 -0
  76. package/dist/commands/net/ping.d.ts +4 -0
  77. package/dist/commands/net/ping.d.ts.map +1 -0
  78. package/dist/commands/net/wget.d.ts +4 -0
  79. package/dist/commands/net/wget.d.ts.map +1 -0
  80. package/dist/commands/registry.d.ts +13 -0
  81. package/dist/commands/registry.d.ts.map +1 -0
  82. package/dist/commands/system/bc.d.ts +4 -0
  83. package/dist/commands/system/bc.d.ts.map +1 -0
  84. package/dist/commands/system/cal.d.ts +4 -0
  85. package/dist/commands/system/cal.d.ts.map +1 -0
  86. package/dist/commands/system/date.d.ts +4 -0
  87. package/dist/commands/system/date.d.ts.map +1 -0
  88. package/dist/commands/system/env.d.ts +4 -0
  89. package/dist/commands/system/env.d.ts.map +1 -0
  90. package/dist/commands/system/free.d.ts +4 -0
  91. package/dist/commands/system/free.d.ts.map +1 -0
  92. package/dist/commands/system/help.d.ts +4 -0
  93. package/dist/commands/system/help.d.ts.map +1 -0
  94. package/dist/commands/system/hostname.d.ts +4 -0
  95. package/dist/commands/system/hostname.d.ts.map +1 -0
  96. package/dist/commands/system/kill.d.ts +4 -0
  97. package/dist/commands/system/kill.d.ts.map +1 -0
  98. package/dist/commands/system/man.d.ts +4 -0
  99. package/dist/commands/system/man.d.ts.map +1 -0
  100. package/dist/commands/system/node.d.ts +6 -0
  101. package/dist/commands/system/node.d.ts.map +1 -0
  102. package/dist/commands/system/pkg.d.ts +4 -0
  103. package/dist/commands/system/pkg.d.ts.map +1 -0
  104. package/dist/commands/system/ps.d.ts +4 -0
  105. package/dist/commands/system/ps.d.ts.map +1 -0
  106. package/dist/commands/system/sleep.d.ts +4 -0
  107. package/dist/commands/system/sleep.d.ts.map +1 -0
  108. package/dist/commands/system/top.d.ts +4 -0
  109. package/dist/commands/system/top.d.ts.map +1 -0
  110. package/dist/commands/system/uname.d.ts +4 -0
  111. package/dist/commands/system/uname.d.ts.map +1 -0
  112. package/dist/commands/system/uptime.d.ts +4 -0
  113. package/dist/commands/system/uptime.d.ts.map +1 -0
  114. package/dist/commands/system/watch.d.ts +4 -0
  115. package/dist/commands/system/watch.d.ts.map +1 -0
  116. package/dist/commands/system/which.d.ts +4 -0
  117. package/dist/commands/system/which.d.ts.map +1 -0
  118. package/dist/commands/system/whoami.d.ts +4 -0
  119. package/dist/commands/system/whoami.d.ts.map +1 -0
  120. package/dist/commands/text/awk.d.ts +4 -0
  121. package/dist/commands/text/awk.d.ts.map +1 -0
  122. package/dist/commands/text/cut.d.ts +4 -0
  123. package/dist/commands/text/cut.d.ts.map +1 -0
  124. package/dist/commands/text/diff.d.ts +4 -0
  125. package/dist/commands/text/diff.d.ts.map +1 -0
  126. package/dist/commands/text/grep.d.ts +4 -0
  127. package/dist/commands/text/grep.d.ts.map +1 -0
  128. package/dist/commands/text/head.d.ts +4 -0
  129. package/dist/commands/text/head.d.ts.map +1 -0
  130. package/dist/commands/text/nl.d.ts +4 -0
  131. package/dist/commands/text/nl.d.ts.map +1 -0
  132. package/dist/commands/text/rev.d.ts +4 -0
  133. package/dist/commands/text/rev.d.ts.map +1 -0
  134. package/dist/commands/text/sed.d.ts +4 -0
  135. package/dist/commands/text/sed.d.ts.map +1 -0
  136. package/dist/commands/text/sort.d.ts +4 -0
  137. package/dist/commands/text/sort.d.ts.map +1 -0
  138. package/dist/commands/text/tail.d.ts +4 -0
  139. package/dist/commands/text/tail.d.ts.map +1 -0
  140. package/dist/commands/text/tr.d.ts +4 -0
  141. package/dist/commands/text/tr.d.ts.map +1 -0
  142. package/dist/commands/text/uniq.d.ts +4 -0
  143. package/dist/commands/text/uniq.d.ts.map +1 -0
  144. package/dist/commands/text/wc.d.ts +4 -0
  145. package/dist/commands/text/wc.d.ts.map +1 -0
  146. package/dist/commands/types.d.ts +20 -0
  147. package/dist/commands/types.d.ts.map +1 -0
  148. package/dist/cp-CpjwiLUF.js +19 -0
  149. package/dist/cut-GfN8py4j.js +60 -0
  150. package/dist/date-C8NB8v8G.js +86 -0
  151. package/dist/df-CeZb4WOr.js +34 -0
  152. package/dist/diff-2wbVWmCT.js +129 -0
  153. package/dist/dig-BEJ8Ky96.js +69 -0
  154. package/dist/dirname-C5L53RA2.js +13 -0
  155. package/dist/du-B0shJpEL.js +77 -0
  156. package/dist/env-DXzvDKsN.js +9 -0
  157. package/dist/file-C2epVYvH.js +70 -0
  158. package/dist/find-DA-rpvsC.js +36 -0
  159. package/dist/free-DAxE4b2U.js +23 -0
  160. package/dist/grep-Bynq2w2E.js +140 -0
  161. package/dist/gunzip-B9b1Vph1.js +48 -0
  162. package/dist/gzip-CkXnPp5J.js +58 -0
  163. package/dist/head-DZJVLF1k.js +48 -0
  164. package/dist/hostname-BxU2S3nT.js +8 -0
  165. package/dist/index-Be1wosKt.js +6028 -0
  166. package/dist/index.d.ts +25 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +51 -0
  169. package/dist/kernel/index.d.ts +25 -0
  170. package/dist/kernel/index.d.ts.map +1 -0
  171. package/dist/kernel/persistence/PersistenceManager.d.ts +10 -0
  172. package/dist/kernel/persistence/PersistenceManager.d.ts.map +1 -0
  173. package/dist/kernel/persistence/serializer.d.ts +13 -0
  174. package/dist/kernel/persistence/serializer.d.ts.map +1 -0
  175. package/dist/kernel/samples.d.ts +3 -0
  176. package/dist/kernel/samples.d.ts.map +1 -0
  177. package/dist/kernel/vfs/VFS.d.ts +36 -0
  178. package/dist/kernel/vfs/VFS.d.ts.map +1 -0
  179. package/dist/kernel/vfs/index.d.ts +4 -0
  180. package/dist/kernel/vfs/index.d.ts.map +1 -0
  181. package/dist/kernel/vfs/providers/DevProvider.d.ts +11 -0
  182. package/dist/kernel/vfs/providers/DevProvider.d.ts.map +1 -0
  183. package/dist/kernel/vfs/providers/ProcProvider.d.ts +14 -0
  184. package/dist/kernel/vfs/providers/ProcProvider.d.ts.map +1 -0
  185. package/dist/kernel/vfs/types.d.ts +43 -0
  186. package/dist/kernel/vfs/types.d.ts.map +1 -0
  187. package/dist/ln-Bf3f3jVA.js +11 -0
  188. package/dist/ls-CSeazevv.js +106 -0
  189. package/dist/man-CJ5pI0_W.js +122 -0
  190. package/dist/mkdir-B7p8krsP.js +27 -0
  191. package/dist/mktemp-88Nhvd7h.js +31 -0
  192. package/dist/mv-DRVvz9oK.js +19 -0
  193. package/dist/nl-G2vK3rR3.js +48 -0
  194. package/dist/node-compat/buffer.d.ts +17 -0
  195. package/dist/node-compat/buffer.d.ts.map +1 -0
  196. package/dist/node-compat/child_process.d.ts +10 -0
  197. package/dist/node-compat/child_process.d.ts.map +1 -0
  198. package/dist/node-compat/console.d.ts +21 -0
  199. package/dist/node-compat/console.d.ts.map +1 -0
  200. package/dist/node-compat/crypto.d.ts +17 -0
  201. package/dist/node-compat/crypto.d.ts.map +1 -0
  202. package/dist/node-compat/events.d.ts +19 -0
  203. package/dist/node-compat/events.d.ts.map +1 -0
  204. package/dist/node-compat/fs.d.ts +113 -0
  205. package/dist/node-compat/fs.d.ts.map +1 -0
  206. package/dist/node-compat/http.d.ts +87 -0
  207. package/dist/node-compat/http.d.ts.map +1 -0
  208. package/dist/node-compat/index.d.ts +19 -0
  209. package/dist/node-compat/index.d.ts.map +1 -0
  210. package/dist/node-compat/os.d.ts +39 -0
  211. package/dist/node-compat/os.d.ts.map +1 -0
  212. package/dist/node-compat/path.d.ts +58 -0
  213. package/dist/node-compat/path.d.ts.map +1 -0
  214. package/dist/node-compat/process.d.ts +62 -0
  215. package/dist/node-compat/process.d.ts.map +1 -0
  216. package/dist/node-compat/stream.d.ts +36 -0
  217. package/dist/node-compat/stream.d.ts.map +1 -0
  218. package/dist/node-compat/timers.d.ts +16 -0
  219. package/dist/node-compat/timers.d.ts.map +1 -0
  220. package/dist/node-compat/url.d.ts +53 -0
  221. package/dist/node-compat/url.d.ts.map +1 -0
  222. package/dist/node-compat/util.d.ts +27 -0
  223. package/dist/node-compat/util.d.ts.map +1 -0
  224. package/dist/ping-DtVEwwda.js +50 -0
  225. package/dist/pkg/PackageManager.d.ts +19 -0
  226. package/dist/pkg/PackageManager.d.ts.map +1 -0
  227. package/dist/pkg/loader.d.ts +4 -0
  228. package/dist/pkg/loader.d.ts.map +1 -0
  229. package/dist/printf-Cc2o7KZx.js +70 -0
  230. package/dist/realpath-C-kisl-F.js +24 -0
  231. package/dist/rev-9puwegeh.js +34 -0
  232. package/dist/rm-BXSq9iqP.js +37 -0
  233. package/dist/rmdir-CWgZ6q8D.js +35 -0
  234. package/dist/sandbox/HeadlessTerminal.d.ts +17 -0
  235. package/dist/sandbox/HeadlessTerminal.d.ts.map +1 -0
  236. package/dist/sandbox/Sandbox.d.ts +36 -0
  237. package/dist/sandbox/Sandbox.d.ts.map +1 -0
  238. package/dist/sandbox/SandboxCommands.d.ts +18 -0
  239. package/dist/sandbox/SandboxCommands.d.ts.map +1 -0
  240. package/dist/sandbox/SandboxFs.d.ts +38 -0
  241. package/dist/sandbox/SandboxFs.d.ts.map +1 -0
  242. package/dist/sandbox/index.d.ts +3 -0
  243. package/dist/sandbox/index.d.ts.map +1 -0
  244. package/dist/sandbox/types.d.ts +72 -0
  245. package/dist/sandbox/types.d.ts.map +1 -0
  246. package/dist/sed-BRxd2DlZ.js +90 -0
  247. package/dist/shell/Shell.d.ts +84 -0
  248. package/dist/shell/Shell.d.ts.map +1 -0
  249. package/dist/shell/completer.d.ts +19 -0
  250. package/dist/shell/completer.d.ts.map +1 -0
  251. package/dist/shell/expander.d.ts +20 -0
  252. package/dist/shell/expander.d.ts.map +1 -0
  253. package/dist/shell/history.d.ts +22 -0
  254. package/dist/shell/history.d.ts.map +1 -0
  255. package/dist/shell/interpreter.d.ts +67 -0
  256. package/dist/shell/interpreter.d.ts.map +1 -0
  257. package/dist/shell/jobs.d.ts +21 -0
  258. package/dist/shell/jobs.d.ts.map +1 -0
  259. package/dist/shell/lexer.d.ts +3 -0
  260. package/dist/shell/lexer.d.ts.map +1 -0
  261. package/dist/shell/parser.d.ts +7 -0
  262. package/dist/shell/parser.d.ts.map +1 -0
  263. package/dist/shell/pipe.d.ts +12 -0
  264. package/dist/shell/pipe.d.ts.map +1 -0
  265. package/dist/shell/terminal-stdin.d.ts +22 -0
  266. package/dist/shell/terminal-stdin.d.ts.map +1 -0
  267. package/dist/shell/test-builtin.d.ts +8 -0
  268. package/dist/shell/test-builtin.d.ts.map +1 -0
  269. package/dist/shell/types.d.ts +109 -0
  270. package/dist/shell/types.d.ts.map +1 -0
  271. package/dist/sleep-B4C3fZiR.js +19 -0
  272. package/dist/sort-B7K83hAD.js +59 -0
  273. package/dist/stat-C0qs7xMV.js +29 -0
  274. package/dist/tail-CYBTYnn3.js +47 -0
  275. package/dist/tar-mMS7gfb-.js +121 -0
  276. package/dist/tee-B8bXFHbI.js +17 -0
  277. package/dist/terminal/Terminal.d.ts +13 -0
  278. package/dist/terminal/Terminal.d.ts.map +1 -0
  279. package/dist/touch-CdAHKfLv.js +23 -0
  280. package/dist/tr-DsCiwSIu.js +60 -0
  281. package/dist/tree-BiWLXiUu.js +46 -0
  282. package/dist/uname-BCn8HlJD.js +37 -0
  283. package/dist/uniq-BZMOwoCc.js +51 -0
  284. package/dist/unzip-DP4I991d.js +82 -0
  285. package/dist/uptime-CgBJegqU.js +8 -0
  286. package/dist/utils/archive.d.ts +22 -0
  287. package/dist/utils/archive.d.ts.map +1 -0
  288. package/dist/utils/args.d.ts +12 -0
  289. package/dist/utils/args.d.ts.map +1 -0
  290. package/dist/utils/colors.d.ts +27 -0
  291. package/dist/utils/colors.d.ts.map +1 -0
  292. package/dist/utils/encoding.d.ts +4 -0
  293. package/dist/utils/encoding.d.ts.map +1 -0
  294. package/dist/utils/glob.d.ts +12 -0
  295. package/dist/utils/glob.d.ts.map +1 -0
  296. package/dist/utils/path.d.ts +12 -0
  297. package/dist/utils/path.d.ts.map +1 -0
  298. package/dist/wc-CpE5K4ZI.js +60 -0
  299. package/dist/wget-DIPI0-I3.js +53 -0
  300. package/dist/which-D3u0cwyh.js +105 -0
  301. package/dist/whoami-B1237V5e.js +8 -0
  302. package/dist/xargs-DfbCRFFd.js +35 -0
  303. package/dist/yes-DXEyHHD2.js +10 -0
  304. package/dist/zip-B_gQ6LXC.js +34 -0
  305. package/package.json +34 -0
@@ -0,0 +1,90 @@
1
+ import { r as c, V as g } from "./index-Be1wosKt.js";
2
+ function h(e) {
3
+ if (e === "d")
4
+ return { type: "d" };
5
+ if (e === "p")
6
+ return { type: "p" };
7
+ if (e.startsWith("s")) {
8
+ const u = e[1];
9
+ if (!u) return null;
10
+ const n = [];
11
+ let l = "", f = !1;
12
+ for (let r = 2; r < e.length; r++)
13
+ f ? (l += e[r], f = !1) : e[r] === "\\" ? (f = !0, l += "\\") : e[r] === u ? (n.push(l), l = "") : l += e[r];
14
+ if (n.push(l), n.length < 2) return null;
15
+ const p = n[0], d = n[1], t = n[2] || "", s = t.includes("g"), i = t.includes("i");
16
+ let o;
17
+ try {
18
+ let r = "";
19
+ s && (r += "g"), i && (r += "i"), o = new RegExp(p, r);
20
+ } catch {
21
+ return null;
22
+ }
23
+ return { type: "s", pattern: o, replacement: d, global: s };
24
+ }
25
+ return null;
26
+ }
27
+ const w = async (e) => {
28
+ let u = !1;
29
+ const n = [], l = [];
30
+ for (let t = 0; t < e.args.length; t++) {
31
+ const s = e.args[t];
32
+ s === "-i" ? u = !0 : s === "-e" && t + 1 < e.args.length ? n.push(e.args[++t]) : n.length === 0 && !s.startsWith("-") ? n.push(s) : l.push(s);
33
+ }
34
+ if (n.length === 0)
35
+ return e.stderr.write(`sed: missing expression
36
+ `), 1;
37
+ const f = [];
38
+ for (const t of n) {
39
+ const s = h(t);
40
+ if (!s)
41
+ return e.stderr.write(`sed: invalid expression: ${t}
42
+ `), 1;
43
+ f.push(s);
44
+ }
45
+ function p(t) {
46
+ const s = t.replace(/\n$/, "").split(`
47
+ `), i = [];
48
+ for (let o of s) {
49
+ let r = !1;
50
+ for (const a of f)
51
+ if (a.type === "s" && a.pattern && a.replacement !== void 0)
52
+ o = o.replace(a.pattern, a.replacement);
53
+ else if (a.type === "d") {
54
+ r = !0;
55
+ break;
56
+ } else a.type === "p" && i.push(o);
57
+ r || i.push(o);
58
+ }
59
+ return i.join(`
60
+ `) + `
61
+ `;
62
+ }
63
+ if (l.length === 0) {
64
+ if (e.stdin) {
65
+ const t = await e.stdin.readAll();
66
+ e.stdout.write(p(t));
67
+ } else
68
+ return e.stderr.write(`sed: missing file operand
69
+ `), 1;
70
+ return 0;
71
+ }
72
+ let d = 0;
73
+ for (const t of l) {
74
+ const s = c(e.cwd, t);
75
+ try {
76
+ const i = e.vfs.readFileString(s), o = p(i);
77
+ u ? e.vfs.writeFile(s, o) : e.stdout.write(o);
78
+ } catch (i) {
79
+ if (i instanceof g)
80
+ e.stderr.write(`sed: ${t}: ${i.message}
81
+ `), d = 1;
82
+ else
83
+ throw i;
84
+ }
85
+ }
86
+ return d;
87
+ };
88
+ export {
89
+ w as default
90
+ };
@@ -0,0 +1,84 @@
1
+ import { Terminal } from '../terminal/Terminal.js';
2
+ import { VFS } from '../kernel/vfs/index.js';
3
+ import { CommandRegistry } from '../commands/registry.js';
4
+ import { JobTable } from './jobs.js';
5
+ export interface ExecuteOptions {
6
+ cwd?: string;
7
+ env?: Record<string, string>;
8
+ onStdout?: (data: string) => void;
9
+ onStderr?: (data: string) => void;
10
+ stdin?: string;
11
+ }
12
+ export declare class Shell {
13
+ private terminal;
14
+ private vfs;
15
+ private registry;
16
+ private cwd;
17
+ private env;
18
+ private aliases;
19
+ private lineBuffer;
20
+ private cursorPos;
21
+ private history;
22
+ private historyIndex;
23
+ private savedLine;
24
+ private running;
25
+ private abortController;
26
+ private terminalStdin;
27
+ private stdinLineBuffer;
28
+ private stdinCursorPos;
29
+ private interpreter;
30
+ private interpreterConfig;
31
+ private historyManager;
32
+ private jobTable;
33
+ private builtins;
34
+ private tabCount;
35
+ constructor(terminal: Terminal, vfs: VFS, registry: CommandRegistry, env: Record<string, string>);
36
+ private registerBuiltins;
37
+ getJobTable(): JobTable;
38
+ getCwd(): string;
39
+ setCwd(cwd: string): void;
40
+ getEnv(): Record<string, string>;
41
+ getVfs(): VFS;
42
+ getRegistry(): CommandRegistry;
43
+ /**
44
+ * Programmatic command execution with captured stdout/stderr.
45
+ * Used by Sandbox.commands.run() for headless mode.
46
+ */
47
+ execute(cmd: string, options?: ExecuteOptions): Promise<{
48
+ stdout: string;
49
+ stderr: string;
50
+ exitCode: number;
51
+ }>;
52
+ start(): void;
53
+ private printPrompt;
54
+ private handleInput;
55
+ private handleTab;
56
+ private handleStdinInput;
57
+ private applyCompletion;
58
+ private clearLine;
59
+ private redrawLine;
60
+ private moveCursorLeft;
61
+ private moveCursorRight;
62
+ private moveCursorHome;
63
+ private moveCursorEnd;
64
+ private historyUp;
65
+ private historyDown;
66
+ private executeLine;
67
+ private builtinCd;
68
+ private builtinPwd;
69
+ private builtinEcho;
70
+ private builtinClear;
71
+ private builtinExport;
72
+ private builtinExit;
73
+ private builtinJobs;
74
+ private builtinFg;
75
+ private builtinBg;
76
+ private builtinHistory;
77
+ sourceFile(path: string): Promise<void>;
78
+ private builtinSource;
79
+ private builtinAlias;
80
+ private builtinUnalias;
81
+ private writeToTerminal;
82
+ tokenize(input: string): string[];
83
+ }
84
+ //# sourceMappingURL=Shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../../src/shell/Shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { VFS } from '../kernel/vfs/index.js';
2
+ import { CommandRegistry } from '../commands/registry.js';
3
+ export interface CompletionResult {
4
+ replacementStart: number;
5
+ replacementEnd: number;
6
+ completions: string[];
7
+ commonPrefix: string;
8
+ }
9
+ export interface CompletionContext {
10
+ line: string;
11
+ cursorPos: number;
12
+ cwd: string;
13
+ env: Record<string, string>;
14
+ vfs: VFS;
15
+ registry: CommandRegistry;
16
+ builtinNames: string[];
17
+ }
18
+ export declare function complete(ctx: CompletionContext): CompletionResult;
19
+ //# sourceMappingURL=completer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completer.d.ts","sourceRoot":"","sources":["../../src/shell/completer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,gBAAgB,CAoCjE"}
@@ -0,0 +1,20 @@
1
+ import { WordPart } from './types.js';
2
+ import { VFS } from '../kernel/vfs/index.js';
3
+ export interface ExpandContext {
4
+ env: Record<string, string>;
5
+ lastExitCode: number;
6
+ cwd: string;
7
+ vfs: VFS;
8
+ executeCapture?: (input: string) => Promise<string>;
9
+ }
10
+ /**
11
+ * Expand all words for a command's arguments.
12
+ * Handles variable expansion, tilde expansion, glob expansion, and command substitution.
13
+ */
14
+ export declare function expandWords(words: WordPart[][], ctx: ExpandContext): Promise<string[]>;
15
+ /**
16
+ * Expand a single word (e.g., for redirect targets).
17
+ * No glob expansion.
18
+ */
19
+ export declare function expandWord(parts: WordPart[], ctx: ExpandContext): Promise<string>;
20
+ //# sourceMappingURL=expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expander.d.ts","sourceRoot":"","sources":["../../src/shell/expander.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,GAAG,CAAC;IACT,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB5F;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvF"}
@@ -0,0 +1,22 @@
1
+ import { VFS } from '../kernel/vfs/index.js';
2
+ export declare class HistoryManager {
3
+ private entries;
4
+ private vfs;
5
+ constructor(vfs: VFS);
6
+ load(): void;
7
+ save(): void;
8
+ add(line: string): void;
9
+ /**
10
+ * Expand history references:
11
+ * !! -> last command
12
+ * !n -> nth command (1-based)
13
+ * !-n -> nth from end
14
+ * !prefix -> most recent command starting with prefix
15
+ * Returns null if no expansion needed.
16
+ */
17
+ expand(line: string): string | null;
18
+ get(index: number): string | undefined;
19
+ getAll(): string[];
20
+ get length(): number;
21
+ }
22
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/shell/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKlD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAM;gBAEL,GAAG,EAAE,GAAG;IAIpB,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,IAAI;IAQZ,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBvB;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA6CnC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,MAAM,IAAI,MAAM,EAAE;IAIlB,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF"}
@@ -0,0 +1,67 @@
1
+ import { ScriptNode } from './types.js';
2
+ import { VFS } from '../kernel/vfs/index.js';
3
+ import { CommandRegistry } from '../commands/registry.js';
4
+ import { CommandOutputStream, CommandInputStream } from '../commands/types.js';
5
+ import { JobTable } from './jobs.js';
6
+ import { TerminalStdin } from './terminal-stdin.js';
7
+ export declare class BreakSignal {
8
+ levels: number;
9
+ constructor(levels: number);
10
+ }
11
+ export declare class ContinueSignal {
12
+ levels: number;
13
+ constructor(levels: number);
14
+ }
15
+ export declare class ReturnSignal {
16
+ exitCode: number;
17
+ constructor(exitCode: number);
18
+ }
19
+ export type BuiltinFn = (args: string[], stdout: CommandOutputStream, stderr: CommandOutputStream, stdin?: CommandInputStream) => Promise<number>;
20
+ export interface InterpreterConfig {
21
+ env: Record<string, string>;
22
+ getCwd: () => string;
23
+ setCwd: (cwd: string) => void;
24
+ vfs: VFS;
25
+ registry: CommandRegistry;
26
+ builtins: Map<string, BuiltinFn>;
27
+ jobTable: JobTable;
28
+ writeToTerminal: (text: string) => void;
29
+ aliases?: Map<string, string>;
30
+ /** Override default stdout for programmatic capture */
31
+ defaultStdout?: CommandOutputStream;
32
+ /** Override default stderr for programmatic capture */
33
+ defaultStderr?: CommandOutputStream;
34
+ /** Returns the current abort signal for foreground commands */
35
+ getAbortSignal?: () => AbortSignal;
36
+ }
37
+ export declare class Interpreter {
38
+ private config;
39
+ private lastExitCode;
40
+ private functions;
41
+ constructor(config: InterpreterConfig);
42
+ getLastExitCode(): number;
43
+ executeScript(script: ScriptNode, terminalStdin?: TerminalStdin): Promise<number>;
44
+ executeLine(input: string, terminalStdin?: TerminalStdin): Promise<number>;
45
+ private executeList;
46
+ private getListCommandText;
47
+ private executeListEntries;
48
+ private executePipeline;
49
+ private executePipelineCommands;
50
+ private executeCommand;
51
+ private executeIf;
52
+ private executeFor;
53
+ private executeWhile;
54
+ private executeUntil;
55
+ private executeCase;
56
+ private executeFunctionDef;
57
+ private executeGroup;
58
+ private executeCompoundList;
59
+ private executeSimpleCommand;
60
+ private executeFunction;
61
+ executeCapture(input: string): Promise<string>;
62
+ private createExpandContext;
63
+ private createFileWriter;
64
+ private createFileAppender;
65
+ private createFileReader;
66
+ }
67
+ //# sourceMappingURL=interpreter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/shell/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAYX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,qBAAa,WAAW;IACH,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,cAAc;IACN,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,YAAY;IACJ,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,CAAC,EAAE,kBAAkB,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,WAAW,CAAC;CACpC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA0C;gBAE/C,MAAM,EAAE,iBAAiB;IAIrC,eAAe,IAAI,MAAM;IAInB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IASjF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAiBlE,WAAW;IAezB,OAAO,CAAC,kBAAkB;YAWZ,kBAAkB;YAsBlB,eAAe;YAoBf,uBAAuB;YAiCvB,cAAc;YA0Bd,SAAS;YAoBT,UAAU;YAkCV,YAAY;YA0BZ,YAAY;YA0BZ,WAAW;YAoBX,kBAAkB;YAKlB,YAAY;YAMZ,mBAAmB;YAQnB,oBAAoB;YAwKpB,eAAe;IA2CvB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBpD,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;CAYzB"}
@@ -0,0 +1,21 @@
1
+ export interface Job {
2
+ id: number;
3
+ command: string;
4
+ promise: Promise<number>;
5
+ abortController: AbortController;
6
+ status: 'running' | 'done' | 'stopped';
7
+ exitCode: number | null;
8
+ }
9
+ export declare class JobTable {
10
+ private jobs;
11
+ private nextId;
12
+ add(command: string, promise: Promise<number>, abortController: AbortController): number;
13
+ list(): Job[];
14
+ get(id: number): Job | undefined;
15
+ remove(id: number): void;
16
+ /**
17
+ * Collect and remove finished jobs, returning their info for display.
18
+ */
19
+ collectDone(): Job[];
20
+ }
21
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/shell/jobs.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,MAAM,CAAK;IAEnB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,eAAe,GAAG,MAAM;IAuBxF,IAAI,IAAI,GAAG,EAAE;IAIb,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAIhC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,WAAW,IAAI,GAAG,EAAE;CAYrB"}
@@ -0,0 +1,3 @@
1
+ import { Token } from './types.js';
2
+ export declare function lex(input: string): Token[];
3
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/shell/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,KAAK,EAAiB,MAAM,YAAY,CAAC;AAElE,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAgD1C"}
@@ -0,0 +1,7 @@
1
+ import { Token, ScriptNode } from './types.js';
2
+ export declare class ParseError extends Error {
3
+ pos: number;
4
+ constructor(message: string, pos: number);
5
+ }
6
+ export declare function parse(tokens: Token[]): ScriptNode;
7
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/shell/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,UAAU,EAchB,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAW,SAAQ,KAAK;IACC,GAAG,EAAE,MAAM;gBAAnC,OAAO,EAAE,MAAM,EAAS,GAAG,EAAE,MAAM;CAIhD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAGjD"}
@@ -0,0 +1,12 @@
1
+ import { CommandOutputStream, CommandInputStream } from '../commands/types.js';
2
+ export declare class PipeChannel {
3
+ private buffer;
4
+ private closed;
5
+ private waiting;
6
+ readonly writer: CommandOutputStream;
7
+ readonly reader: CommandInputStream;
8
+ private read;
9
+ private readAll;
10
+ close(): void;
11
+ }
12
+ //# sourceMappingURL=pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../src/shell/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAiD;IAEhE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAUlC;IAEF,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAGjC;IAEF,OAAO,CAAC,IAAI;YAYE,OAAO;IAUrB,KAAK,IAAI,IAAI;CAQd"}
@@ -0,0 +1,22 @@
1
+ import { CommandInputStream } from '../commands/types.js';
2
+ /**
3
+ * A bridge between terminal keyboard input and command stdin.
4
+ * The Shell feeds lines in via feed(), commands consume via read()/readAll().
5
+ */
6
+ export declare class TerminalStdin implements CommandInputStream {
7
+ private buffer;
8
+ private closed;
9
+ private resolver;
10
+ private _waiting;
11
+ /** True when a command has called read() and is waiting for input. */
12
+ get isWaiting(): boolean;
13
+ /** Shell calls this on Enter (with line + '\n'). */
14
+ feed(text: string): void;
15
+ /** Shell calls this on Ctrl+D to signal EOF. */
16
+ close(): void;
17
+ /** Commands consume input. Returns null on EOF. */
18
+ read(): Promise<string | null>;
19
+ /** Read all remaining input until EOF, joined together. */
20
+ readAll(): Promise<string>;
21
+ }
22
+ //# sourceMappingURL=terminal-stdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-stdin.d.ts","sourceRoot":"","sources":["../../src/shell/terminal-stdin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACtD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,QAAQ,CAAS;IAEzB,sEAAsE;IACtE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,oDAAoD;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAaxB,gDAAgD;IAChD,KAAK,IAAI,IAAI;IAYb,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAapC,2DAA2D;IACrD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CASjC"}
@@ -0,0 +1,8 @@
1
+ import { VFS } from '../kernel/vfs/index.js';
2
+ import { CommandOutputStream } from '../commands/types.js';
3
+ /**
4
+ * Implementation of the `test` / `[` shell builtin.
5
+ * Evaluates conditional expressions.
6
+ */
7
+ export declare function evaluateTest(args: string[], vfs: VFS, stderr: CommandOutputStream): number;
8
+ //# sourceMappingURL=test-builtin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-builtin.d.ts","sourceRoot":"","sources":["../../src/shell/test-builtin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAqBR"}
@@ -0,0 +1,109 @@
1
+ export declare enum TokenKind {
2
+ Word = 0,
3
+ Pipe = 1,// |
4
+ And = 2,// &&
5
+ Or = 3,// ||
6
+ Semi = 4,// ;
7
+ Amp = 5,// &
8
+ RedirectOut = 6,// >
9
+ RedirectAppend = 7,// >>
10
+ RedirectIn = 8,// <
11
+ RedirectErr = 9,// 2>
12
+ RedirectErrAppend = 10,// 2>>
13
+ RedirectAll = 11,// &>
14
+ DoubleSemi = 12,// ;;
15
+ LParen = 13,// (
16
+ RParen = 14,// )
17
+ Newline = 15,// \n
18
+ EOF = 16
19
+ }
20
+ export interface WordPart {
21
+ text: string;
22
+ quoted: 'none' | 'single' | 'double';
23
+ }
24
+ export interface Token {
25
+ kind: TokenKind;
26
+ value: string;
27
+ pos: number;
28
+ parts?: WordPart[];
29
+ }
30
+ export interface ScriptNode {
31
+ type: 'script';
32
+ lists: ListNode[];
33
+ }
34
+ export interface ListNode {
35
+ type: 'list';
36
+ entries: Array<{
37
+ pipeline: PipelineNode;
38
+ connector: '&&' | '||' | null;
39
+ }>;
40
+ background: boolean;
41
+ }
42
+ export interface PipelineNode {
43
+ type: 'pipeline';
44
+ commands: CompoundCommandNode[];
45
+ negated: boolean;
46
+ }
47
+ export interface SimpleCommandNode {
48
+ type: 'simple_command';
49
+ assignments: Array<{
50
+ name: string;
51
+ value: WordPart[];
52
+ }>;
53
+ words: WordPart[][];
54
+ redirections: RedirectionNode[];
55
+ }
56
+ export interface RedirectionNode {
57
+ operator: '>' | '>>' | '<' | '2>' | '2>>' | '&>';
58
+ target: WordPart[];
59
+ }
60
+ export interface IfNode {
61
+ type: 'if';
62
+ clauses: Array<{
63
+ condition: ListNode[];
64
+ body: ListNode[];
65
+ }>;
66
+ elseBody: ListNode[] | null;
67
+ redirections: RedirectionNode[];
68
+ }
69
+ export interface ForNode {
70
+ type: 'for';
71
+ variable: string;
72
+ words: WordPart[][] | null;
73
+ body: ListNode[];
74
+ redirections: RedirectionNode[];
75
+ }
76
+ export interface WhileNode {
77
+ type: 'while';
78
+ condition: ListNode[];
79
+ body: ListNode[];
80
+ redirections: RedirectionNode[];
81
+ }
82
+ export interface UntilNode {
83
+ type: 'until';
84
+ condition: ListNode[];
85
+ body: ListNode[];
86
+ redirections: RedirectionNode[];
87
+ }
88
+ export interface CaseNode {
89
+ type: 'case';
90
+ word: WordPart[];
91
+ items: Array<{
92
+ patterns: WordPart[][];
93
+ body: ListNode[];
94
+ }>;
95
+ redirections: RedirectionNode[];
96
+ }
97
+ export interface FunctionDefNode {
98
+ type: 'function_def';
99
+ name: string;
100
+ body: CompoundCommandNode;
101
+ }
102
+ export interface GroupNode {
103
+ type: 'group';
104
+ body: ListNode[];
105
+ redirections: RedirectionNode[];
106
+ }
107
+ export type CompoundCommandNode = SimpleCommandNode | IfNode | ForNode | WhileNode | UntilNode | CaseNode | GroupNode | FunctionDefNode;
108
+ export type ASTNode = ScriptNode | ListNode | PipelineNode | CompoundCommandNode;
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shell/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ const i = async (e) => {
2
+ if (e.args.length === 0)
3
+ return e.stderr.write(`sleep: missing operand
4
+ `), 1;
5
+ const r = parseFloat(e.args[0]);
6
+ if (isNaN(r) || r < 0)
7
+ return e.stderr.write(`sleep: invalid time interval '${e.args[0]}'
8
+ `), 1;
9
+ const s = Math.round(r * 1e3);
10
+ return await new Promise((n) => {
11
+ const t = setTimeout(n, s), a = () => {
12
+ clearTimeout(t), n();
13
+ };
14
+ e.signal.addEventListener("abort", a, { once: !0 });
15
+ }), e.signal.aborted ? 130 : 0;
16
+ };
17
+ export {
18
+ i as default
19
+ };
@@ -0,0 +1,59 @@
1
+ import { r as p, V as h } from "./index-Be1wosKt.js";
2
+ const k = async (s) => {
3
+ let f = !1, u = !1, g = !1, a = 0;
4
+ const i = [];
5
+ for (let e = 0; e < s.args.length; e++) {
6
+ const r = s.args[e];
7
+ if (r === "-k" && e + 1 < s.args.length)
8
+ a = parseInt(s.args[++e], 10);
9
+ else if (r.startsWith("-") && r.length > 1)
10
+ for (let t = 1; t < r.length; t++)
11
+ switch (r[t]) {
12
+ case "r":
13
+ f = !0;
14
+ break;
15
+ case "n":
16
+ u = !0;
17
+ break;
18
+ case "u":
19
+ g = !0;
20
+ break;
21
+ }
22
+ else
23
+ i.push(r);
24
+ }
25
+ let o = "";
26
+ if (i.length === 0)
27
+ if (s.stdin)
28
+ o = await s.stdin.readAll();
29
+ else
30
+ return s.stderr.write(`sort: missing file operand
31
+ `), 1;
32
+ else
33
+ for (const e of i) {
34
+ const r = p(s.cwd, e);
35
+ try {
36
+ o += s.vfs.readFileString(r);
37
+ } catch (t) {
38
+ if (t instanceof h)
39
+ return s.stderr.write(`sort: ${e}: ${t.message}
40
+ `), 1;
41
+ throw t;
42
+ }
43
+ }
44
+ let l = o.replace(/\n$/, "").split(`
45
+ `);
46
+ function c(e) {
47
+ return a > 0 ? e.split(/\s+/)[a - 1] || "" : e;
48
+ }
49
+ return l.sort((e, r) => {
50
+ const t = c(e), d = c(r);
51
+ let n;
52
+ return u ? n = (parseFloat(t) || 0) - (parseFloat(d) || 0) : n = t.localeCompare(d), f ? -n : n;
53
+ }), g && (l = l.filter((e, r) => r === 0 || e !== l[r - 1])), s.stdout.write(l.join(`
54
+ `) + `
55
+ `), 0;
56
+ };
57
+ export {
58
+ k as default
59
+ };
@@ -0,0 +1,29 @@
1
+ import { r as n, V as d } from "./index-Be1wosKt.js";
2
+ const w = async (t) => {
3
+ if (t.args.length === 0)
4
+ return t.stderr.write(`stat: missing operand
5
+ `), 1;
6
+ let o = 0;
7
+ for (const r of t.args) {
8
+ const s = n(t.cwd, r);
9
+ try {
10
+ const e = t.vfs.stat(s), i = "0" + e.mode.toString(8), a = e.type === "directory" ? "directory" : "regular file";
11
+ t.stdout.write(` File: ${r}
12
+ `), t.stdout.write(` Size: ${e.size} Type: ${a}
13
+ `), t.stdout.write(` Mode: ${i}
14
+ `), t.stdout.write(` Created: ${new Date(e.ctime).toISOString()}
15
+ `), t.stdout.write(` Modified: ${new Date(e.mtime).toISOString()}
16
+ `);
17
+ } catch (e) {
18
+ if (e instanceof d)
19
+ t.stderr.write(`stat: ${r}: ${e.message}
20
+ `), o = 1;
21
+ else
22
+ throw e;
23
+ }
24
+ }
25
+ return o;
26
+ };
27
+ export {
28
+ w as default
29
+ };