@ecmaos/coreutils 0.3.1 → 0.4.2

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 (199) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +48 -0
  3. package/dist/commands/awk.d.ts +4 -0
  4. package/dist/commands/awk.d.ts.map +1 -0
  5. package/dist/commands/awk.js +324 -0
  6. package/dist/commands/awk.js.map +1 -0
  7. package/dist/commands/chgrp.d.ts +4 -0
  8. package/dist/commands/chgrp.d.ts.map +1 -0
  9. package/dist/commands/chgrp.js +187 -0
  10. package/dist/commands/chgrp.js.map +1 -0
  11. package/dist/commands/chmod.d.ts.map +1 -1
  12. package/dist/commands/chmod.js +139 -2
  13. package/dist/commands/chmod.js.map +1 -1
  14. package/dist/commands/chown.d.ts +4 -0
  15. package/dist/commands/chown.d.ts.map +1 -0
  16. package/dist/commands/chown.js +257 -0
  17. package/dist/commands/chown.js.map +1 -0
  18. package/dist/commands/cksum.d.ts +4 -0
  19. package/dist/commands/cksum.d.ts.map +1 -0
  20. package/dist/commands/cksum.js +124 -0
  21. package/dist/commands/cksum.js.map +1 -0
  22. package/dist/commands/cmp.d.ts +4 -0
  23. package/dist/commands/cmp.d.ts.map +1 -0
  24. package/dist/commands/cmp.js +120 -0
  25. package/dist/commands/cmp.js.map +1 -0
  26. package/dist/commands/column.d.ts +4 -0
  27. package/dist/commands/column.d.ts.map +1 -0
  28. package/dist/commands/column.js +274 -0
  29. package/dist/commands/column.js.map +1 -0
  30. package/dist/commands/cp.d.ts.map +1 -1
  31. package/dist/commands/cp.js +81 -4
  32. package/dist/commands/cp.js.map +1 -1
  33. package/dist/commands/cron.d.ts.map +1 -1
  34. package/dist/commands/cron.js +116 -23
  35. package/dist/commands/cron.js.map +1 -1
  36. package/dist/commands/curl.d.ts +4 -0
  37. package/dist/commands/curl.d.ts.map +1 -0
  38. package/dist/commands/curl.js +238 -0
  39. package/dist/commands/curl.js.map +1 -0
  40. package/dist/commands/du.d.ts +4 -0
  41. package/dist/commands/du.d.ts.map +1 -0
  42. package/dist/commands/du.js +168 -0
  43. package/dist/commands/du.js.map +1 -0
  44. package/dist/commands/echo.d.ts.map +1 -1
  45. package/dist/commands/echo.js +125 -2
  46. package/dist/commands/echo.js.map +1 -1
  47. package/dist/commands/env.d.ts +4 -0
  48. package/dist/commands/env.d.ts.map +1 -0
  49. package/dist/commands/env.js +129 -0
  50. package/dist/commands/env.js.map +1 -0
  51. package/dist/commands/expand.d.ts +4 -0
  52. package/dist/commands/expand.d.ts.map +1 -0
  53. package/dist/commands/expand.js +197 -0
  54. package/dist/commands/expand.js.map +1 -0
  55. package/dist/commands/factor.d.ts +4 -0
  56. package/dist/commands/factor.d.ts.map +1 -0
  57. package/dist/commands/factor.js +141 -0
  58. package/dist/commands/factor.js.map +1 -0
  59. package/dist/commands/fmt.d.ts +4 -0
  60. package/dist/commands/fmt.d.ts.map +1 -0
  61. package/dist/commands/fmt.js +278 -0
  62. package/dist/commands/fmt.js.map +1 -0
  63. package/dist/commands/fold.d.ts +4 -0
  64. package/dist/commands/fold.d.ts.map +1 -0
  65. package/dist/commands/fold.js +253 -0
  66. package/dist/commands/fold.js.map +1 -0
  67. package/dist/commands/groups.d.ts +4 -0
  68. package/dist/commands/groups.d.ts.map +1 -0
  69. package/dist/commands/groups.js +61 -0
  70. package/dist/commands/groups.js.map +1 -0
  71. package/dist/commands/head.d.ts.map +1 -1
  72. package/dist/commands/head.js +184 -77
  73. package/dist/commands/head.js.map +1 -1
  74. package/dist/commands/hostname.d.ts +4 -0
  75. package/dist/commands/hostname.d.ts.map +1 -0
  76. package/dist/commands/hostname.js +80 -0
  77. package/dist/commands/hostname.js.map +1 -0
  78. package/dist/commands/less.d.ts.map +1 -1
  79. package/dist/commands/less.js +1 -0
  80. package/dist/commands/less.js.map +1 -1
  81. package/dist/commands/man.d.ts.map +1 -1
  82. package/dist/commands/man.js +3 -1
  83. package/dist/commands/man.js.map +1 -1
  84. package/dist/commands/mount.d.ts +4 -0
  85. package/dist/commands/mount.d.ts.map +1 -0
  86. package/dist/commands/mount.js +1136 -0
  87. package/dist/commands/mount.js.map +1 -0
  88. package/dist/commands/od.d.ts +4 -0
  89. package/dist/commands/od.d.ts.map +1 -0
  90. package/dist/commands/od.js +342 -0
  91. package/dist/commands/od.js.map +1 -0
  92. package/dist/commands/pr.d.ts +4 -0
  93. package/dist/commands/pr.d.ts.map +1 -0
  94. package/dist/commands/pr.js +298 -0
  95. package/dist/commands/pr.js.map +1 -0
  96. package/dist/commands/printf.d.ts +4 -0
  97. package/dist/commands/printf.d.ts.map +1 -0
  98. package/dist/commands/printf.js +271 -0
  99. package/dist/commands/printf.js.map +1 -0
  100. package/dist/commands/readlink.d.ts +4 -0
  101. package/dist/commands/readlink.d.ts.map +1 -0
  102. package/dist/commands/readlink.js +104 -0
  103. package/dist/commands/readlink.js.map +1 -0
  104. package/dist/commands/realpath.d.ts +4 -0
  105. package/dist/commands/realpath.d.ts.map +1 -0
  106. package/dist/commands/realpath.js +111 -0
  107. package/dist/commands/realpath.js.map +1 -0
  108. package/dist/commands/rev.d.ts +4 -0
  109. package/dist/commands/rev.d.ts.map +1 -0
  110. package/dist/commands/rev.js +134 -0
  111. package/dist/commands/rev.js.map +1 -0
  112. package/dist/commands/shuf.d.ts +4 -0
  113. package/dist/commands/shuf.d.ts.map +1 -0
  114. package/dist/commands/shuf.js +221 -0
  115. package/dist/commands/shuf.js.map +1 -0
  116. package/dist/commands/sleep.d.ts +4 -0
  117. package/dist/commands/sleep.d.ts.map +1 -0
  118. package/dist/commands/sleep.js +102 -0
  119. package/dist/commands/sleep.js.map +1 -0
  120. package/dist/commands/strings.d.ts +4 -0
  121. package/dist/commands/strings.d.ts.map +1 -0
  122. package/dist/commands/strings.js +170 -0
  123. package/dist/commands/strings.js.map +1 -0
  124. package/dist/commands/tac.d.ts +4 -0
  125. package/dist/commands/tac.d.ts.map +1 -0
  126. package/dist/commands/tac.js +130 -0
  127. package/dist/commands/tac.js.map +1 -0
  128. package/dist/commands/time.d.ts +4 -0
  129. package/dist/commands/time.d.ts.map +1 -0
  130. package/dist/commands/time.js +126 -0
  131. package/dist/commands/time.js.map +1 -0
  132. package/dist/commands/umount.d.ts +4 -0
  133. package/dist/commands/umount.d.ts.map +1 -0
  134. package/dist/commands/umount.js +103 -0
  135. package/dist/commands/umount.js.map +1 -0
  136. package/dist/commands/uname.d.ts +4 -0
  137. package/dist/commands/uname.d.ts.map +1 -0
  138. package/dist/commands/uname.js +149 -0
  139. package/dist/commands/uname.js.map +1 -0
  140. package/dist/commands/unexpand.d.ts +4 -0
  141. package/dist/commands/unexpand.d.ts.map +1 -0
  142. package/dist/commands/unexpand.js +286 -0
  143. package/dist/commands/unexpand.js.map +1 -0
  144. package/dist/commands/uptime.d.ts +4 -0
  145. package/dist/commands/uptime.d.ts.map +1 -0
  146. package/dist/commands/uptime.js +62 -0
  147. package/dist/commands/uptime.js.map +1 -0
  148. package/dist/commands/view.d.ts +1 -0
  149. package/dist/commands/view.d.ts.map +1 -1
  150. package/dist/commands/view.js +408 -66
  151. package/dist/commands/view.js.map +1 -1
  152. package/dist/commands/yes.d.ts +4 -0
  153. package/dist/commands/yes.d.ts.map +1 -0
  154. package/dist/commands/yes.js +58 -0
  155. package/dist/commands/yes.js.map +1 -0
  156. package/dist/index.d.ts +24 -0
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +82 -0
  159. package/dist/index.js.map +1 -1
  160. package/package.json +12 -3
  161. package/src/commands/awk.ts +340 -0
  162. package/src/commands/chmod.ts +141 -2
  163. package/src/commands/chown.ts +321 -0
  164. package/src/commands/cksum.ts +133 -0
  165. package/src/commands/cmp.ts +126 -0
  166. package/src/commands/column.ts +273 -0
  167. package/src/commands/cp.ts +93 -4
  168. package/src/commands/cron.ts +115 -23
  169. package/src/commands/curl.ts +231 -0
  170. package/src/commands/echo.ts +122 -2
  171. package/src/commands/env.ts +143 -0
  172. package/src/commands/expand.ts +207 -0
  173. package/src/commands/factor.ts +151 -0
  174. package/src/commands/fmt.ts +293 -0
  175. package/src/commands/fold.ts +257 -0
  176. package/src/commands/groups.ts +72 -0
  177. package/src/commands/head.ts +176 -77
  178. package/src/commands/hostname.ts +81 -0
  179. package/src/commands/less.ts +1 -0
  180. package/src/commands/man.ts +4 -1
  181. package/src/commands/mount.ts +1302 -0
  182. package/src/commands/od.ts +327 -0
  183. package/src/commands/pr.ts +291 -0
  184. package/src/commands/printf.ts +271 -0
  185. package/src/commands/readlink.ts +102 -0
  186. package/src/commands/realpath.ts +126 -0
  187. package/src/commands/rev.ts +143 -0
  188. package/src/commands/shuf.ts +218 -0
  189. package/src/commands/sleep.ts +109 -0
  190. package/src/commands/strings.ts +176 -0
  191. package/src/commands/tac.ts +138 -0
  192. package/src/commands/time.ts +144 -0
  193. package/src/commands/umount.ts +116 -0
  194. package/src/commands/uname.ts +130 -0
  195. package/src/commands/unexpand.ts +305 -0
  196. package/src/commands/uptime.ts +73 -0
  197. package/src/commands/view.ts +463 -73
  198. package/src/index.ts +82 -0
  199. package/tsconfig.json +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/commands/sleep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAkC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAwE/F"}
@@ -0,0 +1,102 @@
1
+ import { TerminalEvents } from '@ecmaos/types';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ import { writelnStderr } from '../shared/helpers.js';
4
+ function printUsage(process, terminal) {
5
+ const usage = `Usage: sleep NUMBER[SUFFIX]...
6
+ Pause for NUMBER seconds. SUFFIX may be 's' for seconds (the default),
7
+ 'm' for minutes, 'h' for hours or 'd' for days.
8
+
9
+ --help display this help and exit`;
10
+ writelnStderr(process, terminal, usage);
11
+ }
12
+ function parseDuration(value) {
13
+ const match = value.match(/^([0-9]+(?:\.[0-9]+)?)([smhd]?)$/);
14
+ if (!match?.[1])
15
+ return NaN;
16
+ const num = parseFloat(match[1]);
17
+ if (isNaN(num))
18
+ return NaN;
19
+ const suffix = match[2] || 's';
20
+ switch (suffix) {
21
+ case 's':
22
+ return num * 1000;
23
+ case 'm':
24
+ return num * 60 * 1000;
25
+ case 'h':
26
+ return num * 60 * 60 * 1000;
27
+ case 'd':
28
+ return num * 24 * 60 * 60 * 1000;
29
+ default:
30
+ return NaN;
31
+ }
32
+ }
33
+ export function createCommand(kernel, shell, terminal) {
34
+ return new TerminalCommand({
35
+ command: 'sleep',
36
+ description: 'Delay for a specified amount of time',
37
+ kernel,
38
+ shell,
39
+ terminal,
40
+ run: async (pid, argv) => {
41
+ const process = kernel.processes.get(pid);
42
+ if (!process)
43
+ return 1;
44
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
45
+ printUsage(process, terminal);
46
+ return 0;
47
+ }
48
+ if (argv.length === 0) {
49
+ await writelnStderr(process, terminal, 'sleep: missing operand');
50
+ await writelnStderr(process, terminal, "Try 'sleep --help' for more information.");
51
+ return 1;
52
+ }
53
+ let totalDuration = 0;
54
+ for (const arg of argv) {
55
+ if (!arg)
56
+ continue;
57
+ if (arg === '--help' || arg === '-h') {
58
+ printUsage(process, terminal);
59
+ return 0;
60
+ }
61
+ else if (arg.startsWith('-')) {
62
+ await writelnStderr(process, terminal, `sleep: invalid option -- '${arg.slice(1)}'`);
63
+ await writelnStderr(process, terminal, "Try 'sleep --help' for more information.");
64
+ return 1;
65
+ }
66
+ else {
67
+ const duration = parseDuration(arg);
68
+ if (isNaN(duration)) {
69
+ await writelnStderr(process, terminal, `sleep: invalid time interval '${arg}'`);
70
+ return 1;
71
+ }
72
+ totalDuration += duration;
73
+ }
74
+ }
75
+ if (totalDuration <= 0)
76
+ return 0;
77
+ let interrupted = false;
78
+ const interruptHandler = () => { interrupted = true; };
79
+ terminal.events.on(TerminalEvents.INTERRUPT, interruptHandler);
80
+ try {
81
+ await new Promise((resolve) => {
82
+ const timeoutId = setTimeout(() => resolve(), totalDuration);
83
+ if (interrupted) {
84
+ clearTimeout(timeoutId);
85
+ resolve();
86
+ }
87
+ });
88
+ }
89
+ catch (error) {
90
+ if (!interrupted) {
91
+ await writelnStderr(process, terminal, `sleep: ${error instanceof Error ? error.message : 'Unknown error'}`);
92
+ return 1;
93
+ }
94
+ }
95
+ finally {
96
+ terminal.events.off(TerminalEvents.INTERRUPT, interruptHandler);
97
+ }
98
+ return interrupted ? 130 : 0;
99
+ }
100
+ });
101
+ }
102
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/commands/sleep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Kernel, Shell, Terminal } from '@ecmaos/types';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ export declare function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand;
4
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/commands/strings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAqC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAwI/F"}
@@ -0,0 +1,170 @@
1
+ import path from 'path';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ import { writelnStderr } from '../shared/helpers.js';
4
+ function printUsage(process, terminal) {
5
+ const usage = `Usage: strings [OPTION]... [FILE]...
6
+ Print the sequences of printable characters in files.
7
+
8
+ -n, --bytes=MIN_LEN print sequences of at least MIN_LEN characters (default: 4)
9
+ --help display this help and exit`;
10
+ writelnStderr(process, terminal, usage);
11
+ }
12
+ function extractStrings(data, minLen) {
13
+ const strings = [];
14
+ let currentString = '';
15
+ for (let i = 0; i < data.length; i++) {
16
+ const byte = data[i];
17
+ if (byte === undefined)
18
+ continue;
19
+ if (byte >= 32 && byte <= 126) {
20
+ currentString += String.fromCharCode(byte);
21
+ }
22
+ else {
23
+ if (currentString.length >= minLen) {
24
+ strings.push(currentString);
25
+ }
26
+ currentString = '';
27
+ }
28
+ }
29
+ if (currentString.length >= minLen) {
30
+ strings.push(currentString);
31
+ }
32
+ return strings;
33
+ }
34
+ export function createCommand(kernel, shell, terminal) {
35
+ return new TerminalCommand({
36
+ command: 'strings',
37
+ description: 'Print the sequences of printable characters in files',
38
+ kernel,
39
+ shell,
40
+ terminal,
41
+ run: async (pid, argv) => {
42
+ const process = kernel.processes.get(pid);
43
+ if (!process)
44
+ return 1;
45
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
46
+ printUsage(process, terminal);
47
+ return 0;
48
+ }
49
+ let minLen = 4;
50
+ const files = [];
51
+ for (let i = 0; i < argv.length; i++) {
52
+ const arg = argv[i];
53
+ if (!arg)
54
+ continue;
55
+ if (arg === '--help' || arg === '-h') {
56
+ printUsage(process, terminal);
57
+ return 0;
58
+ }
59
+ else if (arg === '-n' || arg === '--bytes') {
60
+ if (i + 1 < argv.length) {
61
+ const lenStr = argv[++i];
62
+ if (lenStr !== undefined) {
63
+ const parsed = parseInt(lenStr, 10);
64
+ if (!isNaN(parsed) && parsed > 0) {
65
+ minLen = parsed;
66
+ }
67
+ else {
68
+ await writelnStderr(process, terminal, `strings: invalid minimum length: ${lenStr}`);
69
+ return 1;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ else if (arg.startsWith('--bytes=')) {
75
+ const lenStr = arg.slice(8);
76
+ const parsed = parseInt(lenStr, 10);
77
+ if (!isNaN(parsed) && parsed > 0) {
78
+ minLen = parsed;
79
+ }
80
+ else {
81
+ await writelnStderr(process, terminal, `strings: invalid minimum length: ${lenStr}`);
82
+ return 1;
83
+ }
84
+ }
85
+ else if (arg.startsWith('-n')) {
86
+ const lenStr = arg.slice(2);
87
+ if (lenStr) {
88
+ const parsed = parseInt(lenStr, 10);
89
+ if (!isNaN(parsed) && parsed > 0) {
90
+ minLen = parsed;
91
+ }
92
+ else {
93
+ await writelnStderr(process, terminal, `strings: invalid minimum length: ${lenStr}`);
94
+ return 1;
95
+ }
96
+ }
97
+ }
98
+ else if (!arg.startsWith('-')) {
99
+ files.push(arg);
100
+ }
101
+ else {
102
+ await writelnStderr(process, terminal, `strings: invalid option -- '${arg.slice(1)}'`);
103
+ await writelnStderr(process, terminal, "Try 'strings --help' for more information.");
104
+ return 1;
105
+ }
106
+ }
107
+ const writer = process.stdout.getWriter();
108
+ try {
109
+ if (files.length === 0) {
110
+ if (!process.stdin) {
111
+ return 0;
112
+ }
113
+ const reader = process.stdin.getReader();
114
+ const chunks = [];
115
+ try {
116
+ while (true) {
117
+ const { done, value } = await reader.read();
118
+ if (done)
119
+ break;
120
+ if (value) {
121
+ chunks.push(value);
122
+ }
123
+ }
124
+ }
125
+ finally {
126
+ reader.releaseLock();
127
+ }
128
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
129
+ const data = new Uint8Array(totalLength);
130
+ let offset = 0;
131
+ for (const chunk of chunks) {
132
+ data.set(chunk, offset);
133
+ offset += chunk.length;
134
+ }
135
+ const extractedStrings = extractStrings(data, minLen);
136
+ for (const str of extractedStrings) {
137
+ await writer.write(new TextEncoder().encode(str + '\n'));
138
+ }
139
+ return 0;
140
+ }
141
+ for (const file of files) {
142
+ const fullPath = path.resolve(shell.cwd, file);
143
+ try {
144
+ if (fullPath.startsWith('/dev')) {
145
+ await writelnStderr(process, terminal, `strings: ${file}: cannot process device files`);
146
+ continue;
147
+ }
148
+ const data = await shell.context.fs.promises.readFile(fullPath);
149
+ const extractedStrings = extractStrings(new Uint8Array(data), minLen);
150
+ for (const str of extractedStrings) {
151
+ await writer.write(new TextEncoder().encode(str + '\n'));
152
+ }
153
+ }
154
+ catch (error) {
155
+ await writelnStderr(process, terminal, `strings: ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
156
+ }
157
+ }
158
+ return 0;
159
+ }
160
+ catch (error) {
161
+ await writelnStderr(process, terminal, `strings: ${error instanceof Error ? error.message : 'Unknown error'}`);
162
+ return 1;
163
+ }
164
+ finally {
165
+ writer.releaseLock();
166
+ }
167
+ }
168
+ });
169
+ }
170
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/commands/strings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Kernel, Shell, Terminal } from '@ecmaos/types';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ export declare function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand;
4
+ //# sourceMappingURL=tac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tac.d.ts","sourceRoot":"","sources":["../../src/commands/tac.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAW/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA2H/F"}
@@ -0,0 +1,130 @@
1
+ import path from 'path';
2
+ import { TerminalEvents } from '@ecmaos/types';
3
+ import { TerminalCommand } from '../shared/terminal-command.js';
4
+ import { writelnStderr } from '../shared/helpers.js';
5
+ function printUsage(process, terminal) {
6
+ const usage = `Usage: tac [OPTION]... [FILE]...
7
+ Write each FILE to standard output, last line first.
8
+
9
+ --help display this help and exit`;
10
+ writelnStderr(process, terminal, usage);
11
+ }
12
+ export function createCommand(kernel, shell, terminal) {
13
+ return new TerminalCommand({
14
+ command: 'tac',
15
+ description: 'Write each FILE to standard output, last line first',
16
+ kernel,
17
+ shell,
18
+ terminal,
19
+ run: async (pid, argv) => {
20
+ const process = kernel.processes.get(pid);
21
+ if (!process)
22
+ return 1;
23
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
24
+ printUsage(process, terminal);
25
+ return 0;
26
+ }
27
+ const files = [];
28
+ for (const arg of argv) {
29
+ if (!arg)
30
+ continue;
31
+ if (arg === '--help' || arg === '-h') {
32
+ printUsage(process, terminal);
33
+ return 0;
34
+ }
35
+ else if (!arg.startsWith('-')) {
36
+ files.push(arg);
37
+ }
38
+ else {
39
+ await writelnStderr(process, terminal, `tac: invalid option -- '${arg.slice(1)}'`);
40
+ await writelnStderr(process, terminal, "Try 'tac --help' for more information.");
41
+ return 1;
42
+ }
43
+ }
44
+ const writer = process.stdout.getWriter();
45
+ try {
46
+ let lines = [];
47
+ if (files.length === 0) {
48
+ if (!process.stdin) {
49
+ return 0;
50
+ }
51
+ const reader = process.stdin.getReader();
52
+ const decoder = new TextDecoder();
53
+ let buffer = '';
54
+ try {
55
+ while (true) {
56
+ const { done, value } = await reader.read();
57
+ if (done)
58
+ break;
59
+ if (value) {
60
+ buffer += decoder.decode(value, { stream: true });
61
+ const newLines = buffer.split('\n');
62
+ buffer = newLines.pop() || '';
63
+ lines.push(...newLines);
64
+ }
65
+ }
66
+ if (buffer) {
67
+ lines.push(buffer);
68
+ }
69
+ }
70
+ finally {
71
+ reader.releaseLock();
72
+ }
73
+ }
74
+ else {
75
+ for (const file of files) {
76
+ const fullPath = path.resolve(shell.cwd, file);
77
+ let interrupted = false;
78
+ const interruptHandler = () => { interrupted = true; };
79
+ kernel.terminal.events.on(TerminalEvents.INTERRUPT, interruptHandler);
80
+ try {
81
+ if (fullPath.startsWith('/dev')) {
82
+ await writelnStderr(process, terminal, `tac: ${file}: cannot process device files`);
83
+ continue;
84
+ }
85
+ const handle = await shell.context.fs.promises.open(fullPath, 'r');
86
+ const stat = await shell.context.fs.promises.stat(fullPath);
87
+ const decoder = new TextDecoder();
88
+ let content = '';
89
+ let bytesRead = 0;
90
+ const chunkSize = 1024;
91
+ while (bytesRead < stat.size) {
92
+ if (interrupted)
93
+ break;
94
+ const data = new Uint8Array(chunkSize);
95
+ const readSize = Math.min(chunkSize, stat.size - bytesRead);
96
+ await handle.read(data, 0, readSize, bytesRead);
97
+ const chunk = data.subarray(0, readSize);
98
+ content += decoder.decode(chunk, { stream: true });
99
+ bytesRead += readSize;
100
+ }
101
+ const fileLines = content.split('\n');
102
+ if (fileLines[fileLines.length - 1] === '') {
103
+ fileLines.pop();
104
+ }
105
+ lines.push(...fileLines);
106
+ }
107
+ catch (error) {
108
+ await writelnStderr(process, terminal, `tac: ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
109
+ }
110
+ finally {
111
+ kernel.terminal.events.off(TerminalEvents.INTERRUPT, interruptHandler);
112
+ }
113
+ }
114
+ }
115
+ for (let i = lines.length - 1; i >= 0; i--) {
116
+ await writer.write(new TextEncoder().encode(lines[i] + '\n'));
117
+ }
118
+ return 0;
119
+ }
120
+ catch (error) {
121
+ await writelnStderr(process, terminal, `tac: ${error instanceof Error ? error.message : 'Unknown error'}`);
122
+ return 1;
123
+ }
124
+ finally {
125
+ writer.releaseLock();
126
+ }
127
+ }
128
+ });
129
+ }
130
+ //# sourceMappingURL=tac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tac.js","sourceRoot":"","sources":["../../src/commands/tac.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Kernel, Shell, Terminal } from '@ecmaos/types';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ export declare function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand;
4
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/commands/time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAqD/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAyF/F"}
@@ -0,0 +1,126 @@
1
+ import { TerminalCommand } from '../shared/terminal-command.js';
2
+ import { writelnStderr } from '../shared/helpers.js';
3
+ import path from 'path';
4
+ function printUsage(process, terminal) {
5
+ const usage = `Usage: time COMMAND [ARG]...
6
+ Run COMMAND and print a summary of the real, user, and system time used.
7
+
8
+ --help display this help and exit
9
+
10
+ Note: This is a simplified version that measures real (wall clock) time.`;
11
+ writelnStderr(process, terminal, usage);
12
+ }
13
+ function formatTime(seconds) {
14
+ if (seconds < 1) {
15
+ return `${(seconds * 1000).toFixed(0)}ms`;
16
+ }
17
+ if (seconds < 60) {
18
+ return `${seconds.toFixed(2)}s`;
19
+ }
20
+ const mins = Math.floor(seconds / 60);
21
+ const secs = (seconds % 60).toFixed(2);
22
+ return `${mins}m${secs}s`;
23
+ }
24
+ async function resolveCommand(shell, command) {
25
+ const DefaultShellPath = '$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/sbin';
26
+ if (command.startsWith('./')) {
27
+ const cwdCommand = path.join(shell.cwd, command.slice(2));
28
+ if (await shell.context.fs.promises.exists(cwdCommand)) {
29
+ return cwdCommand;
30
+ }
31
+ return undefined;
32
+ }
33
+ const paths = shell.env.get('PATH')?.split(':') || DefaultShellPath.split(':');
34
+ const resolvedCommand = path.resolve(command);
35
+ if (await shell.context.fs.promises.exists(resolvedCommand)) {
36
+ return resolvedCommand;
37
+ }
38
+ for (const pathDir of paths) {
39
+ const expandedPath = pathDir.replace(/\$([A-Z_]+)/g, (_, name) => shell.env.get(name) || '');
40
+ const fullPath = `${expandedPath}/${command}`;
41
+ if (await shell.context.fs.promises.exists(fullPath))
42
+ return fullPath;
43
+ }
44
+ return undefined;
45
+ }
46
+ export function createCommand(kernel, shell, terminal) {
47
+ return new TerminalCommand({
48
+ command: 'time',
49
+ description: 'Measure command execution time',
50
+ kernel,
51
+ shell,
52
+ terminal,
53
+ run: async (pid, argv) => {
54
+ const process = kernel.processes.get(pid);
55
+ if (!process)
56
+ return 1;
57
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
58
+ printUsage(process, terminal);
59
+ return 0;
60
+ }
61
+ if (argv.length === 0 || !argv[0]) {
62
+ await writelnStderr(process, terminal, 'time: missing command');
63
+ await writelnStderr(process, terminal, "Try 'time --help' for more information.");
64
+ return 1;
65
+ }
66
+ const command = argv[0];
67
+ const commandArgs = argv.slice(1);
68
+ const resolvedCommand = await resolveCommand(shell, command);
69
+ if (!resolvedCommand) {
70
+ await writelnStderr(process, terminal, `time: command not found: ${command}`);
71
+ return 127;
72
+ }
73
+ const startTime = performance.now();
74
+ const subcommandStdout = new WritableStream({
75
+ write: async (chunk) => {
76
+ const writer = process.stdout.getWriter();
77
+ try {
78
+ await writer.write(chunk);
79
+ }
80
+ finally {
81
+ writer.releaseLock();
82
+ }
83
+ }
84
+ });
85
+ const subcommandStderr = new WritableStream({
86
+ write: async (chunk) => {
87
+ const writer = process.stderr.getWriter();
88
+ try {
89
+ await writer.write(chunk);
90
+ }
91
+ finally {
92
+ writer.releaseLock();
93
+ }
94
+ }
95
+ });
96
+ try {
97
+ const exitCode = await kernel.execute({
98
+ command: resolvedCommand,
99
+ args: commandArgs,
100
+ shell: shell,
101
+ terminal: terminal,
102
+ stdin: process.stdin,
103
+ stdout: subcommandStdout,
104
+ stderr: subcommandStderr
105
+ });
106
+ const endTime = performance.now();
107
+ const elapsedSeconds = (endTime - startTime) / 1000;
108
+ await writelnStderr(process, terminal, `\nreal ${formatTime(elapsedSeconds)}`);
109
+ await writelnStderr(process, terminal, `user ${formatTime(elapsedSeconds)}`);
110
+ await writelnStderr(process, terminal, `sys ${formatTime(0)}`);
111
+ return exitCode;
112
+ }
113
+ catch (error) {
114
+ const endTime = performance.now();
115
+ const elapsedSeconds = (endTime - startTime) / 1000;
116
+ await writelnStderr(process, terminal, `\nreal ${formatTime(elapsedSeconds)}`);
117
+ await writelnStderr(process, terminal, `user ${formatTime(elapsedSeconds)}`);
118
+ await writelnStderr(process, terminal, `sys ${formatTime(0)}`);
119
+ const errorMessage = error instanceof Error ? error.message : String(error);
120
+ await writelnStderr(process, terminal, `time: ${errorMessage}`);
121
+ return 1;
122
+ }
123
+ }
124
+ });
125
+ }
126
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/commands/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Kernel, Shell, Terminal } from '@ecmaos/types';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ export declare function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand;
4
+ //# sourceMappingURL=umount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"umount.d.ts","sourceRoot":"","sources":["../../src/commands/umount.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAmB/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA6F/F"}