@ecmaos/coreutils 0.1.5 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +31 -0
- package/dist/commands/basename.d.ts +4 -0
- package/dist/commands/basename.d.ts.map +1 -0
- package/dist/commands/basename.js +78 -0
- package/dist/commands/basename.js.map +1 -0
- package/dist/commands/cal.d.ts +4 -0
- package/dist/commands/cal.d.ts.map +1 -0
- package/dist/commands/cal.js +105 -0
- package/dist/commands/cal.js.map +1 -0
- package/dist/commands/cat.d.ts.map +1 -1
- package/dist/commands/cat.js +33 -25
- package/dist/commands/cat.js.map +1 -1
- package/dist/commands/cd.d.ts.map +1 -1
- package/dist/commands/cd.js +38 -10
- package/dist/commands/cd.js.map +1 -1
- package/dist/commands/chmod.d.ts.map +1 -1
- package/dist/commands/chmod.js +31 -9
- package/dist/commands/chmod.js.map +1 -1
- package/dist/commands/comm.d.ts +4 -0
- package/dist/commands/comm.d.ts.map +1 -0
- package/dist/commands/comm.js +162 -0
- package/dist/commands/comm.js.map +1 -0
- package/dist/commands/cp.d.ts.map +1 -1
- package/dist/commands/cp.js +61 -12
- package/dist/commands/cp.js.map +1 -1
- package/dist/commands/cut.d.ts +4 -0
- package/dist/commands/cut.d.ts.map +1 -0
- package/dist/commands/cut.js +208 -0
- package/dist/commands/cut.js.map +1 -0
- package/dist/commands/date.d.ts +4 -0
- package/dist/commands/date.d.ts.map +1 -0
- package/dist/commands/date.js +100 -0
- package/dist/commands/date.js.map +1 -0
- package/dist/commands/diff.d.ts +4 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +194 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/dirname.d.ts +4 -0
- package/dist/commands/dirname.d.ts.map +1 -0
- package/dist/commands/dirname.js +50 -0
- package/dist/commands/dirname.js.map +1 -0
- package/dist/commands/echo.d.ts.map +1 -1
- package/dist/commands/echo.js +49 -10
- package/dist/commands/echo.js.map +1 -1
- package/dist/commands/false.d.ts +4 -0
- package/dist/commands/false.d.ts.map +1 -0
- package/dist/commands/false.js +27 -0
- package/dist/commands/false.js.map +1 -0
- package/dist/commands/find.d.ts +4 -0
- package/dist/commands/find.d.ts.map +1 -0
- package/dist/commands/find.js +181 -0
- package/dist/commands/find.js.map +1 -0
- package/dist/commands/grep.d.ts.map +1 -1
- package/dist/commands/grep.js +45 -10
- package/dist/commands/grep.js.map +1 -1
- package/dist/commands/head.d.ts.map +1 -1
- package/dist/commands/head.js +46 -9
- package/dist/commands/head.js.map +1 -1
- package/dist/commands/hex.d.ts.map +1 -1
- package/dist/commands/hex.js +16 -6
- package/dist/commands/hex.js.map +1 -1
- package/dist/commands/id.d.ts +4 -0
- package/dist/commands/id.d.ts.map +1 -0
- package/dist/commands/id.js +97 -0
- package/dist/commands/id.js.map +1 -0
- package/dist/commands/join.d.ts +4 -0
- package/dist/commands/join.d.ts.map +1 -0
- package/dist/commands/join.js +152 -0
- package/dist/commands/join.js.map +1 -0
- package/dist/commands/less.d.ts.map +1 -1
- package/dist/commands/less.js +16 -7
- package/dist/commands/less.js.map +1 -1
- package/dist/commands/ln.d.ts.map +1 -1
- package/dist/commands/ln.js +54 -12
- package/dist/commands/ln.js.map +1 -1
- package/dist/commands/ls.d.ts.map +1 -1
- package/dist/commands/ls.js +14 -6
- package/dist/commands/ls.js.map +1 -1
- package/dist/commands/mkdir.d.ts.map +1 -1
- package/dist/commands/mkdir.js +34 -9
- package/dist/commands/mkdir.js.map +1 -1
- package/dist/commands/mv.d.ts.map +1 -1
- package/dist/commands/mv.js +25 -7
- package/dist/commands/mv.js.map +1 -1
- package/dist/commands/nc.d.ts +4 -0
- package/dist/commands/nc.d.ts.map +1 -0
- package/dist/commands/nc.js +451 -0
- package/dist/commands/nc.js.map +1 -0
- package/dist/commands/nl.d.ts +4 -0
- package/dist/commands/nl.d.ts.map +1 -0
- package/dist/commands/nl.js +208 -0
- package/dist/commands/nl.js.map +1 -0
- package/dist/commands/passkey.d.ts.map +1 -1
- package/dist/commands/passkey.js +44 -18
- package/dist/commands/passkey.js.map +1 -1
- package/dist/commands/paste.d.ts +4 -0
- package/dist/commands/paste.d.ts.map +1 -0
- package/dist/commands/paste.js +161 -0
- package/dist/commands/paste.js.map +1 -0
- package/dist/commands/pwd.d.ts.map +1 -1
- package/dist/commands/pwd.js +13 -4
- package/dist/commands/pwd.js.map +1 -1
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +105 -12
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/rmdir.d.ts.map +1 -1
- package/dist/commands/rmdir.js +34 -9
- package/dist/commands/rmdir.js.map +1 -1
- package/dist/commands/sed.d.ts.map +1 -1
- package/dist/commands/sed.js +73 -28
- package/dist/commands/sed.js.map +1 -1
- package/dist/commands/seq.d.ts +4 -0
- package/dist/commands/seq.d.ts.map +1 -0
- package/dist/commands/seq.js +148 -0
- package/dist/commands/seq.js.map +1 -0
- package/dist/commands/sockets.d.ts +4 -0
- package/dist/commands/sockets.d.ts.map +1 -0
- package/dist/commands/sockets.js +239 -0
- package/dist/commands/sockets.js.map +1 -0
- package/dist/commands/sort.d.ts +4 -0
- package/dist/commands/sort.d.ts.map +1 -0
- package/dist/commands/sort.js +175 -0
- package/dist/commands/sort.js.map +1 -0
- package/dist/commands/split.d.ts +4 -0
- package/dist/commands/split.d.ts.map +1 -0
- package/dist/commands/split.js +147 -0
- package/dist/commands/split.js.map +1 -0
- package/dist/commands/stat.d.ts.map +1 -1
- package/dist/commands/stat.js +14 -6
- package/dist/commands/stat.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +46 -9
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands/tee.d.ts.map +1 -1
- package/dist/commands/tee.js +45 -10
- package/dist/commands/tee.js.map +1 -1
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +99 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/touch.d.ts.map +1 -1
- package/dist/commands/touch.js +34 -9
- package/dist/commands/touch.js.map +1 -1
- package/dist/commands/tr.d.ts +4 -0
- package/dist/commands/tr.d.ts.map +1 -0
- package/dist/commands/tr.js +162 -0
- package/dist/commands/tr.js.map +1 -0
- package/dist/commands/true.d.ts +4 -0
- package/dist/commands/true.d.ts.map +1 -0
- package/dist/commands/true.js +27 -0
- package/dist/commands/true.js.map +1 -0
- package/dist/commands/uniq.d.ts +4 -0
- package/dist/commands/uniq.d.ts.map +1 -0
- package/dist/commands/uniq.js +187 -0
- package/dist/commands/uniq.js.map +1 -0
- package/dist/commands/wc.d.ts +4 -0
- package/dist/commands/wc.d.ts.map +1 -0
- package/dist/commands/wc.js +178 -0
- package/dist/commands/wc.js.map +1 -0
- package/dist/commands/which.d.ts +4 -0
- package/dist/commands/which.d.ts.map +1 -0
- package/dist/commands/which.js +78 -0
- package/dist/commands/which.js.map +1 -0
- package/dist/commands/whoami.d.ts +4 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +28 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +64 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/terminal-command.d.ts +8 -2
- package/dist/shared/terminal-command.d.ts.map +1 -1
- package/dist/shared/terminal-command.js +42 -17
- package/dist/shared/terminal-command.js.map +1 -1
- package/package.json +4 -2
- package/src/commands/basename.ts +84 -0
- package/src/commands/cal.ts +111 -0
- package/src/commands/cat.ts +37 -27
- package/src/commands/cd.ts +40 -12
- package/src/commands/chmod.ts +37 -11
- package/src/commands/comm.ts +169 -0
- package/src/commands/cp.ts +73 -15
- package/src/commands/cut.ts +214 -0
- package/src/commands/date.ts +97 -0
- package/src/commands/diff.ts +204 -0
- package/src/commands/dirname.ts +57 -0
- package/src/commands/echo.ts +51 -11
- package/src/commands/false.ts +31 -0
- package/src/commands/find.ts +184 -0
- package/src/commands/grep.ts +44 -11
- package/src/commands/head.ts +46 -10
- package/src/commands/hex.ts +19 -7
- package/src/commands/id.ts +94 -0
- package/src/commands/join.ts +162 -0
- package/src/commands/less.ts +20 -8
- package/src/commands/ln.ts +50 -13
- package/src/commands/ls.ts +17 -8
- package/src/commands/mkdir.ts +41 -12
- package/src/commands/mv.ts +31 -9
- package/src/commands/nc.ts +499 -0
- package/src/commands/nl.ts +201 -0
- package/src/commands/passkey.ts +46 -19
- package/src/commands/paste.ts +172 -0
- package/src/commands/pwd.ts +16 -4
- package/src/commands/rm.ts +118 -13
- package/src/commands/rmdir.ts +41 -12
- package/src/commands/sed.ts +64 -30
- package/src/commands/seq.ts +147 -0
- package/src/commands/sockets.ts +283 -0
- package/src/commands/sort.ts +175 -0
- package/src/commands/split.ts +154 -0
- package/src/commands/stat.ts +17 -8
- package/src/commands/tail.ts +46 -10
- package/src/commands/tee.ts +43 -11
- package/src/commands/test.ts +116 -0
- package/src/commands/touch.ts +41 -12
- package/src/commands/tr.ts +170 -0
- package/src/commands/true.ts +31 -0
- package/src/commands/uniq.ts +189 -0
- package/src/commands/wc.ts +181 -0
- package/src/commands/which.ts +89 -0
- package/src/commands/whoami.ts +32 -0
- package/src/index.ts +64 -1
- package/src/shared/terminal-command.ts +43 -16
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAoD5F,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEtE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAkDtH;AAGD,OAAO,EAAE,iBAAiB,IAAI,gBAAgB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,9 @@ import { createCommand as createLn } from './commands/ln.js';
|
|
|
13
13
|
import { createCommand as createLs } from './commands/ls.js';
|
|
14
14
|
import { createCommand as createMkdir } from './commands/mkdir.js';
|
|
15
15
|
import { createCommand as createMv } from './commands/mv.js';
|
|
16
|
+
import { createCommand as createNc } from './commands/nc.js';
|
|
16
17
|
import { createCommand as createPwd } from './commands/pwd.js';
|
|
18
|
+
import { createCommand as createSockets } from './commands/sockets.js';
|
|
17
19
|
import { createCommand as createRm } from './commands/rm.js';
|
|
18
20
|
import { createCommand as createRmdir } from './commands/rmdir.js';
|
|
19
21
|
import { createCommand as createStat } from './commands/stat.js';
|
|
@@ -24,6 +26,29 @@ import { createCommand as createPasskey } from './commands/passkey.js';
|
|
|
24
26
|
import { createCommand as createSed } from './commands/sed.js';
|
|
25
27
|
import { createCommand as createTee } from './commands/tee.js';
|
|
26
28
|
import { createCommand as createTail } from './commands/tail.js';
|
|
29
|
+
import { createCommand as createBasename } from './commands/basename.js';
|
|
30
|
+
import { createCommand as createCal } from './commands/cal.js';
|
|
31
|
+
import { createCommand as createComm } from './commands/comm.js';
|
|
32
|
+
import { createCommand as createCut } from './commands/cut.js';
|
|
33
|
+
import { createCommand as createDate } from './commands/date.js';
|
|
34
|
+
import { createCommand as createDiff } from './commands/diff.js';
|
|
35
|
+
import { createCommand as createDirname } from './commands/dirname.js';
|
|
36
|
+
import { createCommand as createFalse } from './commands/false.js';
|
|
37
|
+
import { createCommand as createFind } from './commands/find.js';
|
|
38
|
+
import { createCommand as createId } from './commands/id.js';
|
|
39
|
+
import { createCommand as createJoin } from './commands/join.js';
|
|
40
|
+
import { createCommand as createNl } from './commands/nl.js';
|
|
41
|
+
import { createCommand as createPaste } from './commands/paste.js';
|
|
42
|
+
import { createCommand as createSeq } from './commands/seq.js';
|
|
43
|
+
import { createCommand as createSort } from './commands/sort.js';
|
|
44
|
+
import { createCommand as createSplit } from './commands/split.js';
|
|
45
|
+
import { createCommand as createTest } from './commands/test.js';
|
|
46
|
+
import { createCommand as createTr } from './commands/tr.js';
|
|
47
|
+
import { createCommand as createTrue } from './commands/true.js';
|
|
48
|
+
import { createCommand as createUniq } from './commands/uniq.js';
|
|
49
|
+
import { createCommand as createWc } from './commands/wc.js';
|
|
50
|
+
import { createCommand as createWhich } from './commands/which.js';
|
|
51
|
+
import { createCommand as createWhoami } from './commands/whoami.js';
|
|
27
52
|
// Export individual command factories
|
|
28
53
|
export { createCommand as createCat } from './commands/cat.js';
|
|
29
54
|
export { createCommand as createCd } from './commands/cd.js';
|
|
@@ -45,6 +70,19 @@ export { createCommand as createLess } from './commands/less.js';
|
|
|
45
70
|
export { createCommand as createSed } from './commands/sed.js';
|
|
46
71
|
export { createCommand as createTee } from './commands/tee.js';
|
|
47
72
|
export { createCommand as createTail } from './commands/tail.js';
|
|
73
|
+
export { createCommand as createBasename } from './commands/basename.js';
|
|
74
|
+
export { createCommand as createCut } from './commands/cut.js';
|
|
75
|
+
export { createCommand as createDate } from './commands/date.js';
|
|
76
|
+
export { createCommand as createDiff } from './commands/diff.js';
|
|
77
|
+
export { createCommand as createDirname } from './commands/dirname.js';
|
|
78
|
+
export { createCommand as createFind } from './commands/find.js';
|
|
79
|
+
export { createCommand as createSort } from './commands/sort.js';
|
|
80
|
+
export { createCommand as createTest } from './commands/test.js';
|
|
81
|
+
export { createCommand as createTr } from './commands/tr.js';
|
|
82
|
+
export { createCommand as createUniq } from './commands/uniq.js';
|
|
83
|
+
export { createCommand as createWc } from './commands/wc.js';
|
|
84
|
+
export { createCommand as createWhich } from './commands/which.js';
|
|
85
|
+
export { createCommand as createSockets } from './commands/sockets.js';
|
|
48
86
|
/**
|
|
49
87
|
* Creates all coreutils commands.
|
|
50
88
|
* This function replaces the TerminalCommands function from the kernel.
|
|
@@ -63,6 +101,8 @@ export function createAllCommands(kernel, shell, terminal) {
|
|
|
63
101
|
mkdir: createMkdir(kernel, shell, terminal),
|
|
64
102
|
mv: createMv(kernel, shell, terminal),
|
|
65
103
|
pwd: createPwd(kernel, shell, terminal),
|
|
104
|
+
nc: createNc(kernel, shell, terminal),
|
|
105
|
+
sockets: createSockets(kernel, shell, terminal),
|
|
66
106
|
rm: createRm(kernel, shell, terminal),
|
|
67
107
|
rmdir: createRmdir(kernel, shell, terminal),
|
|
68
108
|
stat: createStat(kernel, shell, terminal),
|
|
@@ -72,7 +112,30 @@ export function createAllCommands(kernel, shell, terminal) {
|
|
|
72
112
|
passkey: createPasskey(kernel, shell, terminal),
|
|
73
113
|
sed: createSed(kernel, shell, terminal),
|
|
74
114
|
tail: createTail(kernel, shell, terminal),
|
|
75
|
-
tee: createTee(kernel, shell, terminal)
|
|
115
|
+
tee: createTee(kernel, shell, terminal),
|
|
116
|
+
basename: createBasename(kernel, shell, terminal),
|
|
117
|
+
cal: createCal(kernel, shell, terminal),
|
|
118
|
+
comm: createComm(kernel, shell, terminal),
|
|
119
|
+
cut: createCut(kernel, shell, terminal),
|
|
120
|
+
date: createDate(kernel, shell, terminal),
|
|
121
|
+
diff: createDiff(kernel, shell, terminal),
|
|
122
|
+
dirname: createDirname(kernel, shell, terminal),
|
|
123
|
+
false: createFalse(kernel, shell, terminal),
|
|
124
|
+
find: createFind(kernel, shell, terminal),
|
|
125
|
+
id: createId(kernel, shell, terminal),
|
|
126
|
+
join: createJoin(kernel, shell, terminal),
|
|
127
|
+
nl: createNl(kernel, shell, terminal),
|
|
128
|
+
paste: createPaste(kernel, shell, terminal),
|
|
129
|
+
seq: createSeq(kernel, shell, terminal),
|
|
130
|
+
sort: createSort(kernel, shell, terminal),
|
|
131
|
+
split: createSplit(kernel, shell, terminal),
|
|
132
|
+
test: createTest(kernel, shell, terminal),
|
|
133
|
+
tr: createTr(kernel, shell, terminal),
|
|
134
|
+
true: createTrue(kernel, shell, terminal),
|
|
135
|
+
uniq: createUniq(kernel, shell, terminal),
|
|
136
|
+
wc: createWc(kernel, shell, terminal),
|
|
137
|
+
which: createWhich(kernel, shell, terminal),
|
|
138
|
+
whoami: createWhoami(kernel, shell, terminal)
|
|
76
139
|
};
|
|
77
140
|
}
|
|
78
141
|
// For backward compatibility, export as TerminalCommands
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,+BAA+B;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAE5F,2BAA2B;AAC3B,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,13 @@ import { CommandLineOptions, OptionDefinition } from 'command-line-args';
|
|
|
2
2
|
import parseUsage from 'command-line-usage';
|
|
3
3
|
import type { TerminalCommand as ITerminalCommand } from '@ecmaos/types';
|
|
4
4
|
import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types';
|
|
5
|
+
type UnifiedParserRun = (argv: CommandLineOptions, process?: Process, rawArgv?: string[]) => Promise<number | void>;
|
|
6
|
+
type RawArgvRun = (pid: number, argv: string[]) => Promise<number | void>;
|
|
5
7
|
/**
|
|
6
8
|
* The TerminalCommand class sets up a common interface for builtin terminal commands
|
|
9
|
+
* Supports two modes:
|
|
10
|
+
* - Unified parser mode: When options are provided, uses command-line-args (for kernel commands)
|
|
11
|
+
* - Raw argv mode: When options are not provided, passes raw argv directly (for coreutils commands)
|
|
7
12
|
*/
|
|
8
13
|
export declare class TerminalCommand implements ITerminalCommand {
|
|
9
14
|
command: string;
|
|
@@ -20,8 +25,8 @@ export declare class TerminalCommand implements ITerminalCommand {
|
|
|
20
25
|
command: string;
|
|
21
26
|
description: string;
|
|
22
27
|
kernel: Kernel;
|
|
23
|
-
options
|
|
24
|
-
run:
|
|
28
|
+
options?: parseUsage.OptionDefinition[];
|
|
29
|
+
run: UnifiedParserRun | RawArgvRun;
|
|
25
30
|
shell: Shell;
|
|
26
31
|
terminal: Terminal;
|
|
27
32
|
stdin?: ReadableStream<Uint8Array>;
|
|
@@ -31,4 +36,5 @@ export declare class TerminalCommand implements ITerminalCommand {
|
|
|
31
36
|
get usage(): string;
|
|
32
37
|
get usageContent(): string;
|
|
33
38
|
}
|
|
39
|
+
export {};
|
|
34
40
|
//# sourceMappingURL=terminal-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-command.d.ts","sourceRoot":"","sources":["../../src/shared/terminal-command.ts"],"names":[],"mappings":"AACA,OAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGrE
|
|
1
|
+
{"version":3,"file":"terminal-command.d.ts","sourceRoot":"","sources":["../../src/shared/terminal-command.ts"],"names":[],"mappings":"AACA,OAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGrE,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AACnH,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;AAEzE;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,EAAE,MAAM,CAAK;IACpB,WAAW,EAAE,MAAM,CAAK;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAK;IAChC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;gBAEvB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAClG,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,CAAC,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAA;QACvC,GAAG,EAAE,gBAAgB,GAAG,UAAU,CAAA;QAClC,KAAK,EAAE,KAAK,CAAA;QACZ,QAAQ,EAAE,QAAQ,CAAA;QAClB,KAAK,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;QAClC,MAAM,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;QACnC,MAAM,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAA;KACpC;IA4CD,IAAI,KAAK,WASR;IAED,IAAI,YAAY,WAYf;CACF"}
|
|
@@ -4,6 +4,9 @@ import parseUsage from 'command-line-usage';
|
|
|
4
4
|
import { writelnStdout, writelnStderr } from './helpers.js';
|
|
5
5
|
/**
|
|
6
6
|
* The TerminalCommand class sets up a common interface for builtin terminal commands
|
|
7
|
+
* Supports two modes:
|
|
8
|
+
* - Unified parser mode: When options are provided, uses command-line-args (for kernel commands)
|
|
9
|
+
* - Raw argv mode: When options are not provided, passes raw argv directly (for coreutils commands)
|
|
7
10
|
*/
|
|
8
11
|
export class TerminalCommand {
|
|
9
12
|
command = '';
|
|
@@ -20,31 +23,50 @@ export class TerminalCommand {
|
|
|
20
23
|
this.command = command;
|
|
21
24
|
this.description = description;
|
|
22
25
|
this.kernel = kernel;
|
|
23
|
-
this.options = options;
|
|
26
|
+
this.options = options || [];
|
|
24
27
|
this.shell = shell;
|
|
25
28
|
this.terminal = terminal;
|
|
26
29
|
this.stdin = stdin;
|
|
27
30
|
this.stdout = stdout;
|
|
28
31
|
this.stderr = stderr;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
const useUnifiedParser = this.options.length > 0;
|
|
33
|
+
if (useUnifiedParser) {
|
|
34
|
+
const unifiedRun = run;
|
|
35
|
+
this.run = async (pid, argv) => {
|
|
36
|
+
if (argv === null)
|
|
37
|
+
return 1;
|
|
38
|
+
const process = this.kernel.processes.get(pid);
|
|
39
|
+
try {
|
|
40
|
+
const parsed = parseArgs(this.options, { argv, stopAtFirstUnknown: true });
|
|
41
|
+
if (parsed.help) {
|
|
42
|
+
await writelnStdout(process, this.terminal, this.usage);
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
return await unifiedRun(parsed, process, argv);
|
|
38
46
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
catch (error) {
|
|
48
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
49
|
+
if (errorMessage.includes('UNKNOWN_OPTION') || errorMessage.includes('Unknown option')) {
|
|
50
|
+
return await unifiedRun({}, process, argv);
|
|
51
|
+
}
|
|
52
|
+
await writelnStderr(process, this.terminal, chalk.red(errorMessage));
|
|
53
|
+
return 1;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const rawRun = run;
|
|
59
|
+
this.run = async (pid, argv) => {
|
|
60
|
+
if (argv === null)
|
|
61
|
+
return 1;
|
|
62
|
+
return await rawRun(pid, argv);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
46
65
|
}
|
|
47
66
|
get usage() {
|
|
67
|
+
if (this.options.length === 0) {
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
48
70
|
return parseUsage([
|
|
49
71
|
{ header: this.command, content: this.description },
|
|
50
72
|
{ header: 'Usage', content: this.usageContent },
|
|
@@ -52,6 +74,9 @@ export class TerminalCommand {
|
|
|
52
74
|
]);
|
|
53
75
|
}
|
|
54
76
|
get usageContent() {
|
|
77
|
+
if (this.options.length === 0) {
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
55
80
|
return `${this.command} ${this.options.map(option => {
|
|
56
81
|
let optionStr = option.name;
|
|
57
82
|
if (option.type === Boolean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-command.js","sourceRoot":"","sources":["../../src/shared/terminal-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,SAAmD,MAAM,mBAAmB,CAAA;AACnF,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAG3C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"terminal-command.js","sourceRoot":"","sources":["../../src/shared/terminal-command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecmaos/coreutils",
|
|
3
3
|
"description": "ecmaOS: Core utilities for the ecmaOS framework",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"license": "MIT+Apache-2.0",
|
|
6
6
|
"homepage": "https://ecmaos.sh",
|
|
7
7
|
"repository": "https://github.com/ecmaos/ecmaos",
|
|
@@ -26,13 +26,15 @@
|
|
|
26
26
|
"@zip.js/zip.js": "^2.7.52",
|
|
27
27
|
"ansi-escape-sequences": "^6.2.4",
|
|
28
28
|
"chalk": "^5.3.0",
|
|
29
|
+
"columnify": "^1.6.0",
|
|
29
30
|
"command-line-args": "^6.0.0",
|
|
30
31
|
"command-line-usage": "^7.0.3",
|
|
31
32
|
"human-format": "^1.2.1",
|
|
32
|
-
"@ecmaos/types": "^0.
|
|
33
|
+
"@ecmaos/types": "^0.5.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/ansi-escape-sequences": "^4.0.4",
|
|
37
|
+
"@types/columnify": "^1.5.4",
|
|
36
38
|
"@types/command-line-args": "^5.2.3",
|
|
37
39
|
"@types/command-line-usage": "^5.0.4"
|
|
38
40
|
},
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types'
|
|
3
|
+
import { TerminalCommand } from '../shared/terminal-command.js'
|
|
4
|
+
import { writelnStderr } from '../shared/helpers.js'
|
|
5
|
+
|
|
6
|
+
function printUsage(process: Process | undefined, terminal: Terminal): void {
|
|
7
|
+
const usage = `Usage: basename NAME [SUFFIX]
|
|
8
|
+
basename OPTION... NAME...
|
|
9
|
+
Strip directory and suffix from filenames.
|
|
10
|
+
|
|
11
|
+
-s, --suffix=SUFFIX remove a trailing SUFFIX
|
|
12
|
+
--help display this help and exit`
|
|
13
|
+
writelnStderr(process, terminal, usage)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand {
|
|
17
|
+
return new TerminalCommand({
|
|
18
|
+
command: 'basename',
|
|
19
|
+
description: 'Strip directory and suffix from filenames',
|
|
20
|
+
kernel,
|
|
21
|
+
shell,
|
|
22
|
+
terminal,
|
|
23
|
+
run: async (pid: number, argv: string[]) => {
|
|
24
|
+
const process = kernel.processes.get(pid) as Process | undefined
|
|
25
|
+
|
|
26
|
+
if (!process) return 1
|
|
27
|
+
|
|
28
|
+
if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
|
|
29
|
+
printUsage(process, terminal)
|
|
30
|
+
return 0
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let suffix: string | undefined
|
|
34
|
+
const paths: string[] = []
|
|
35
|
+
let i = 0
|
|
36
|
+
|
|
37
|
+
while (i < argv.length) {
|
|
38
|
+
const arg = argv[i]
|
|
39
|
+
if (!arg) {
|
|
40
|
+
i++
|
|
41
|
+
continue
|
|
42
|
+
}
|
|
43
|
+
if (arg === '-s' || arg === '--suffix') {
|
|
44
|
+
if (i + 1 < argv.length) {
|
|
45
|
+
suffix = argv[++i]
|
|
46
|
+
} else {
|
|
47
|
+
await writelnStderr(process, terminal, 'basename: option requires an argument -- \'s\'')
|
|
48
|
+
return 1
|
|
49
|
+
}
|
|
50
|
+
} else if (arg.startsWith('--suffix=')) {
|
|
51
|
+
suffix = arg.slice(9)
|
|
52
|
+
} else if (arg.startsWith('-s')) {
|
|
53
|
+
suffix = arg.slice(2)
|
|
54
|
+
} else if (!arg.startsWith('-')) {
|
|
55
|
+
paths.push(arg)
|
|
56
|
+
}
|
|
57
|
+
i++
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (paths.length === 0) {
|
|
61
|
+
await writelnStderr(process, terminal, 'basename: missing operand')
|
|
62
|
+
return 1
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const writer = process.stdout.getWriter()
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
for (const filePath of paths) {
|
|
69
|
+
let basename = path.basename(filePath)
|
|
70
|
+
|
|
71
|
+
if (suffix && basename.endsWith(suffix)) {
|
|
72
|
+
basename = basename.slice(0, -suffix.length)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
await writer.write(new TextEncoder().encode(basename + '\n'))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return 0
|
|
79
|
+
} finally {
|
|
80
|
+
writer.releaseLock()
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types'
|
|
2
|
+
import { TerminalCommand } from '../shared/terminal-command.js'
|
|
3
|
+
import { writelnStdout } from '../shared/helpers.js'
|
|
4
|
+
|
|
5
|
+
function printUsage(process: Process | undefined, terminal: Terminal): void {
|
|
6
|
+
const usage = `Usage: cal [MONTH] [YEAR]
|
|
7
|
+
Display a calendar.
|
|
8
|
+
|
|
9
|
+
MONTH month (1-12)
|
|
10
|
+
YEAR year
|
|
11
|
+
--help display this help and exit`
|
|
12
|
+
writelnStdout(process, terminal, usage)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand {
|
|
16
|
+
return new TerminalCommand({
|
|
17
|
+
command: 'cal',
|
|
18
|
+
description: 'Display a calendar',
|
|
19
|
+
kernel,
|
|
20
|
+
shell,
|
|
21
|
+
terminal,
|
|
22
|
+
run: async (pid: number, argv: string[]) => {
|
|
23
|
+
const process = kernel.processes.get(pid) as Process | undefined
|
|
24
|
+
|
|
25
|
+
if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
|
|
26
|
+
printUsage(process, terminal)
|
|
27
|
+
return 0
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const now = new Date()
|
|
31
|
+
let month: number | undefined
|
|
32
|
+
let year: number | undefined
|
|
33
|
+
|
|
34
|
+
if (argv.length === 1) {
|
|
35
|
+
const argStr = argv[0]
|
|
36
|
+
if (!argStr) {
|
|
37
|
+
month = now.getMonth() + 1
|
|
38
|
+
year = now.getFullYear()
|
|
39
|
+
} else {
|
|
40
|
+
const arg = parseInt(argStr, 10)
|
|
41
|
+
if (isNaN(arg)) {
|
|
42
|
+
await writelnStdout(process, terminal, 'cal: invalid argument')
|
|
43
|
+
return 1
|
|
44
|
+
}
|
|
45
|
+
if (arg >= 1 && arg <= 12) {
|
|
46
|
+
month = arg
|
|
47
|
+
year = now.getFullYear()
|
|
48
|
+
} else {
|
|
49
|
+
year = arg
|
|
50
|
+
month = now.getMonth() + 1
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} else if (argv.length === 2) {
|
|
54
|
+
const monthStr = argv[0]
|
|
55
|
+
const yearStr = argv[1]
|
|
56
|
+
if (!monthStr || !yearStr) {
|
|
57
|
+
await writelnStdout(process, terminal, 'cal: invalid arguments')
|
|
58
|
+
return 1
|
|
59
|
+
}
|
|
60
|
+
month = parseInt(monthStr, 10)
|
|
61
|
+
year = parseInt(yearStr, 10)
|
|
62
|
+
if (isNaN(month) || isNaN(year)) {
|
|
63
|
+
await writelnStdout(process, terminal, 'cal: invalid arguments')
|
|
64
|
+
return 1
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
month = now.getMonth() + 1
|
|
68
|
+
year = now.getFullYear()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (month < 1 || month > 12) {
|
|
72
|
+
await writelnStdout(process, terminal, 'cal: invalid month')
|
|
73
|
+
return 1
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
|
|
77
|
+
'July', 'August', 'September', 'October', 'November', 'December']
|
|
78
|
+
const dayNames = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
|
|
79
|
+
|
|
80
|
+
const firstDay = new Date(year, month - 1, 1)
|
|
81
|
+
const lastDay = new Date(year, month, 0)
|
|
82
|
+
const daysInMonth = lastDay.getDate()
|
|
83
|
+
const startDayOfWeek = firstDay.getDay()
|
|
84
|
+
|
|
85
|
+
let output = ` ${monthNames[month - 1]} ${year}\n`
|
|
86
|
+
output += dayNames.join(' ') + '\n'
|
|
87
|
+
|
|
88
|
+
let day = 1
|
|
89
|
+
let isFirstWeek = true
|
|
90
|
+
|
|
91
|
+
while (day <= daysInMonth) {
|
|
92
|
+
let line = ''
|
|
93
|
+
for (let i = 0; i < 7; i++) {
|
|
94
|
+
if (isFirstWeek && i < startDayOfWeek) {
|
|
95
|
+
line += ' '
|
|
96
|
+
} else if (day <= daysInMonth) {
|
|
97
|
+
line += day.toString().padStart(2) + ' '
|
|
98
|
+
day++
|
|
99
|
+
} else {
|
|
100
|
+
line += ' '
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
output += line.trimEnd() + '\n'
|
|
104
|
+
isFirstWeek = false
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
await writelnStdout(process, terminal, output)
|
|
108
|
+
return 0
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
}
|
package/src/commands/cat.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
|
-
import type { CommandLineOptions } from 'command-line-args'
|
|
3
2
|
import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types'
|
|
4
3
|
import { TerminalEvents } from '@ecmaos/types'
|
|
5
4
|
import { TerminalCommand } from '../shared/terminal-command.js'
|
|
5
|
+
import { writelnStdout } from '../shared/helpers.js'
|
|
6
|
+
|
|
7
|
+
function printUsage(process: Process | undefined, terminal: Terminal): void {
|
|
8
|
+
const usage = `Usage: cat [OPTION]... [FILE]...
|
|
9
|
+
Concatenate files and print on the standard output.
|
|
10
|
+
|
|
11
|
+
--help display this help and exit`
|
|
12
|
+
writelnStdout(process, terminal, usage)
|
|
13
|
+
}
|
|
6
14
|
|
|
7
15
|
export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand {
|
|
8
16
|
return new TerminalCommand({
|
|
@@ -11,22 +19,36 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
11
19
|
kernel,
|
|
12
20
|
shell,
|
|
13
21
|
terminal,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{ name: 'bytes', type: Number, description: 'The number of bytes to read from the file' }
|
|
18
|
-
],
|
|
19
|
-
run: async (argv: CommandLineOptions, process?: Process) => {
|
|
22
|
+
run: async (pid: number, argv: string[]) => {
|
|
23
|
+
const process = kernel.processes.get(pid) as Process | undefined
|
|
24
|
+
|
|
20
25
|
if (!process) return 1
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
|
|
28
|
+
printUsage(process, terminal)
|
|
29
|
+
return 0
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const files: string[] = []
|
|
33
|
+
|
|
34
|
+
for (let i = 0; i < argv.length; i++) {
|
|
35
|
+
const arg = argv[i]
|
|
36
|
+
if (arg === undefined) continue
|
|
37
|
+
|
|
38
|
+
if (arg === '--help' || arg === '-h') {
|
|
39
|
+
printUsage(process, terminal)
|
|
40
|
+
return 0
|
|
41
|
+
} else if (!arg.startsWith('-')) {
|
|
42
|
+
files.push(arg)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
23
46
|
const writer = process.stdout.getWriter()
|
|
24
47
|
const isTTY = process.stdoutIsTTY ?? false
|
|
25
48
|
let lastByte: number | undefined
|
|
26
49
|
|
|
27
50
|
try {
|
|
28
|
-
|
|
29
|
-
if (!argv.path || !(argv.path as string[])[0]) {
|
|
51
|
+
if (files.length === 0) {
|
|
30
52
|
const reader = process.stdin!.getReader()
|
|
31
53
|
|
|
32
54
|
try {
|
|
@@ -42,7 +64,6 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
42
64
|
reader.releaseLock()
|
|
43
65
|
}
|
|
44
66
|
|
|
45
|
-
// Add newline at end if outputting to terminal and last byte wasn't newline
|
|
46
67
|
if (isTTY && lastByte !== undefined && lastByte !== 0x0A) {
|
|
47
68
|
await writer.write(new Uint8Array([0x0A]))
|
|
48
69
|
}
|
|
@@ -50,9 +71,6 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
50
71
|
return 0
|
|
51
72
|
}
|
|
52
73
|
|
|
53
|
-
// Otherwise process files
|
|
54
|
-
const files = (argv.path as string[]) || []
|
|
55
|
-
const bytes = argv.bytes as string | undefined
|
|
56
74
|
for (const file of files) {
|
|
57
75
|
const fullPath = path.resolve(shell.cwd, file)
|
|
58
76
|
|
|
@@ -82,8 +100,6 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
82
100
|
}
|
|
83
101
|
} else {
|
|
84
102
|
const device = await shell.context.fs.promises.open(fullPath)
|
|
85
|
-
const maxBytes = bytes ? parseInt(bytes) : undefined
|
|
86
|
-
let totalBytesRead = 0
|
|
87
103
|
const chunkSize = 1024
|
|
88
104
|
const data = new Uint8Array(chunkSize)
|
|
89
105
|
let bytesRead = 0
|
|
@@ -93,24 +109,19 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
93
109
|
const result = await device.read(data)
|
|
94
110
|
bytesRead = result.bytesRead
|
|
95
111
|
if (bytesRead > 0) {
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
if (chunk.length > 0) {
|
|
100
|
-
lastByte = chunk[chunk.length - 1]
|
|
101
|
-
}
|
|
102
|
-
await writer.write(chunk)
|
|
103
|
-
totalBytesRead += bytesToWrite
|
|
112
|
+
const chunk = data.subarray(0, bytesRead)
|
|
113
|
+
if (chunk.length > 0) {
|
|
114
|
+
lastByte = chunk[chunk.length - 1]
|
|
104
115
|
}
|
|
116
|
+
await writer.write(chunk)
|
|
105
117
|
}
|
|
106
|
-
} while (bytesRead > 0
|
|
118
|
+
} while (bytesRead > 0)
|
|
107
119
|
}
|
|
108
120
|
} finally {
|
|
109
121
|
kernel.terminal.events.off(TerminalEvents.INTERRUPT, interruptHandler)
|
|
110
122
|
}
|
|
111
123
|
}
|
|
112
124
|
|
|
113
|
-
// Add newline at end if outputting to terminal and last byte wasn't newline
|
|
114
125
|
if (isTTY && lastByte !== undefined && lastByte !== 0x0A) {
|
|
115
126
|
await writer.write(new Uint8Array([0x0A]))
|
|
116
127
|
}
|
|
@@ -122,4 +133,3 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
122
133
|
}
|
|
123
134
|
})
|
|
124
135
|
}
|
|
125
|
-
|