@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,104 @@
1
+ import path from 'path';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ import { writelnStderr, writelnStdout } from '../shared/helpers.js';
4
+ function printUsage(process, terminal) {
5
+ const usage = `Usage: readlink [OPTION]... FILE...
6
+ Print value of a symbolic link or canonical file name.
7
+
8
+ -f, --canonicalize canonicalize by following every symlink in every component
9
+ -e, --canonicalize-existing canonicalize by following every symlink in every component that exists
10
+ -m, --canonicalize-missing canonicalize by following every symlink in every component, without requirements on components existence
11
+ --help display this help and exit`;
12
+ writelnStderr(process, terminal, usage);
13
+ }
14
+ export function createCommand(kernel, shell, terminal) {
15
+ return new TerminalCommand({
16
+ command: 'readlink',
17
+ description: 'Print value of a symbolic link or canonical file name',
18
+ kernel,
19
+ shell,
20
+ terminal,
21
+ run: async (pid, argv) => {
22
+ const process = kernel.processes.get(pid);
23
+ if (!process)
24
+ return 1;
25
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
26
+ printUsage(process, terminal);
27
+ return 0;
28
+ }
29
+ let canonicalize = false;
30
+ let canonicalizeExisting = false;
31
+ let canonicalizeMissing = false;
32
+ const files = [];
33
+ for (const arg of argv) {
34
+ if (!arg)
35
+ continue;
36
+ if (arg === '--help' || arg === '-h') {
37
+ printUsage(process, terminal);
38
+ return 0;
39
+ }
40
+ else if (arg === '-f' || arg === '--canonicalize') {
41
+ canonicalize = true;
42
+ }
43
+ else if (arg === '-e' || arg === '--canonicalize-existing') {
44
+ canonicalizeExisting = true;
45
+ }
46
+ else if (arg === '-m' || arg === '--canonicalize-missing') {
47
+ canonicalizeMissing = true;
48
+ }
49
+ else if (arg.startsWith('-')) {
50
+ const flags = arg.slice(1).split('');
51
+ if (flags.includes('f'))
52
+ canonicalize = true;
53
+ if (flags.includes('e'))
54
+ canonicalizeExisting = true;
55
+ if (flags.includes('m'))
56
+ canonicalizeMissing = true;
57
+ const invalidFlags = flags.filter(f => !['f', 'e', 'm'].includes(f));
58
+ if (invalidFlags.length > 0) {
59
+ await writelnStderr(process, terminal, `readlink: invalid option -- '${invalidFlags[0]}'`);
60
+ await writelnStderr(process, terminal, "Try 'readlink --help' for more information.");
61
+ return 1;
62
+ }
63
+ }
64
+ else {
65
+ files.push(arg);
66
+ }
67
+ }
68
+ if (files.length === 0) {
69
+ await writelnStderr(process, terminal, 'readlink: missing operand');
70
+ await writelnStderr(process, terminal, "Try 'readlink --help' for more information.");
71
+ return 1;
72
+ }
73
+ let hasError = false;
74
+ for (const file of files) {
75
+ const fullPath = path.resolve(shell.cwd, file);
76
+ try {
77
+ if (canonicalize || canonicalizeExisting || canonicalizeMissing) {
78
+ const resolved = path.resolve(fullPath);
79
+ await writelnStdout(process, terminal, resolved);
80
+ }
81
+ else {
82
+ const linkTarget = await shell.context.fs.promises.readlink(fullPath);
83
+ await writelnStdout(process, terminal, linkTarget);
84
+ }
85
+ }
86
+ catch (error) {
87
+ const errorMessage = error instanceof Error ? error.message : String(error);
88
+ if (errorMessage.includes('not a symlink') || errorMessage.includes('EINVAL')) {
89
+ await writelnStderr(process, terminal, `readlink: ${file}: invalid symlink`);
90
+ }
91
+ else if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {
92
+ await writelnStderr(process, terminal, `readlink: ${file}: No such file or directory`);
93
+ }
94
+ else {
95
+ await writelnStderr(process, terminal, `readlink: ${file}: ${errorMessage}`);
96
+ }
97
+ hasError = true;
98
+ }
99
+ }
100
+ return hasError ? 1 : 0;
101
+ }
102
+ });
103
+ }
104
+ //# sourceMappingURL=readlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readlink.js","sourceRoot":"","sources":["../../src/commands/readlink.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=realpath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realpath.d.ts","sourceRoot":"","sources":["../../src/commands/realpath.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;AAyC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAkF/F"}
@@ -0,0 +1,111 @@
1
+ import path from 'path';
2
+ import { TerminalCommand } from '../shared/terminal-command.js';
3
+ import { writelnStderr, writelnStdout } from '../shared/helpers.js';
4
+ function printUsage(process, terminal) {
5
+ const usage = `Usage: realpath [OPTION]... FILE...
6
+ Print the resolved absolute file name.
7
+
8
+ -e, --canonicalize-existing all components of the path must exist
9
+ -q, --quiet suppress most error messages
10
+ --help display this help and exit`;
11
+ writelnStderr(process, terminal, usage);
12
+ }
13
+ async function resolveRealPath(fs, filePath, canonicalizeExisting, quiet) {
14
+ try {
15
+ const resolved = path.resolve(filePath);
16
+ if (canonicalizeExisting) {
17
+ const exists = await fs.exists(resolved);
18
+ if (!exists) {
19
+ if (!quiet) {
20
+ throw new Error('No such file or directory');
21
+ }
22
+ return null;
23
+ }
24
+ }
25
+ return resolved;
26
+ }
27
+ catch (error) {
28
+ if (!quiet) {
29
+ throw error;
30
+ }
31
+ return null;
32
+ }
33
+ }
34
+ export function createCommand(kernel, shell, terminal) {
35
+ return new TerminalCommand({
36
+ command: 'realpath',
37
+ description: 'Print the resolved absolute file name',
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 canonicalizeExisting = false;
50
+ let quiet = false;
51
+ const files = [];
52
+ for (const arg of argv) {
53
+ if (!arg)
54
+ continue;
55
+ if (arg === '--help' || arg === '-h') {
56
+ printUsage(process, terminal);
57
+ return 0;
58
+ }
59
+ else if (arg === '-e' || arg === '--canonicalize-existing') {
60
+ canonicalizeExisting = true;
61
+ }
62
+ else if (arg === '-q' || arg === '--quiet') {
63
+ quiet = true;
64
+ }
65
+ else if (arg.startsWith('-')) {
66
+ const flags = arg.slice(1).split('');
67
+ if (flags.includes('e'))
68
+ canonicalizeExisting = true;
69
+ if (flags.includes('q'))
70
+ quiet = true;
71
+ const invalidFlags = flags.filter(f => !['e', 'q'].includes(f));
72
+ if (invalidFlags.length > 0) {
73
+ await writelnStderr(process, terminal, `realpath: invalid option -- '${invalidFlags[0]}'`);
74
+ await writelnStderr(process, terminal, "Try 'realpath --help' for more information.");
75
+ return 1;
76
+ }
77
+ }
78
+ else {
79
+ files.push(arg);
80
+ }
81
+ }
82
+ if (files.length === 0) {
83
+ await writelnStderr(process, terminal, 'realpath: missing operand');
84
+ await writelnStderr(process, terminal, "Try 'realpath --help' for more information.");
85
+ return 1;
86
+ }
87
+ let hasError = false;
88
+ for (const file of files) {
89
+ const fullPath = path.resolve(shell.cwd, file);
90
+ try {
91
+ const resolved = await resolveRealPath(shell.context.fs.promises, fullPath, canonicalizeExisting, quiet);
92
+ if (resolved !== null) {
93
+ await writelnStdout(process, terminal, resolved);
94
+ }
95
+ else {
96
+ hasError = true;
97
+ }
98
+ }
99
+ catch (error) {
100
+ if (!quiet) {
101
+ const errorMessage = error instanceof Error ? error.message : String(error);
102
+ await writelnStderr(process, terminal, `realpath: ${file}: ${errorMessage}`);
103
+ }
104
+ hasError = true;
105
+ }
106
+ }
107
+ return hasError ? 1 : 0;
108
+ }
109
+ });
110
+ }
111
+ //# sourceMappingURL=realpath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realpath.js","sourceRoot":"","sources":["../../src/commands/realpath.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=rev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rev.d.ts","sourceRoot":"","sources":["../../src/commands/rev.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;AAe/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA4H/F"}
@@ -0,0 +1,134 @@
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: rev [FILE]...
7
+ Reverse the characters of each line.
8
+
9
+ --help display this help and exit`;
10
+ writelnStderr(process, terminal, usage);
11
+ }
12
+ function reverseLine(line) {
13
+ return line.split('').reverse().join('');
14
+ }
15
+ export function createCommand(kernel, shell, terminal) {
16
+ return new TerminalCommand({
17
+ command: 'rev',
18
+ description: 'Reverse the characters of each line',
19
+ kernel,
20
+ shell,
21
+ terminal,
22
+ run: async (pid, argv) => {
23
+ const process = kernel.processes.get(pid);
24
+ if (!process)
25
+ return 1;
26
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
27
+ printUsage(process, terminal);
28
+ return 0;
29
+ }
30
+ const files = [];
31
+ for (const arg of argv) {
32
+ if (!arg)
33
+ continue;
34
+ if (arg === '--help' || arg === '-h') {
35
+ printUsage(process, terminal);
36
+ return 0;
37
+ }
38
+ else if (!arg.startsWith('-')) {
39
+ files.push(arg);
40
+ }
41
+ else {
42
+ await writelnStderr(process, terminal, `rev: invalid option -- '${arg.slice(1)}'`);
43
+ await writelnStderr(process, terminal, "Try 'rev --help' for more information.");
44
+ return 1;
45
+ }
46
+ }
47
+ const writer = process.stdout.getWriter();
48
+ try {
49
+ let lines = [];
50
+ if (files.length === 0) {
51
+ if (!process.stdin) {
52
+ return 0;
53
+ }
54
+ const reader = process.stdin.getReader();
55
+ const decoder = new TextDecoder();
56
+ let buffer = '';
57
+ try {
58
+ while (true) {
59
+ const { done, value } = await reader.read();
60
+ if (done)
61
+ break;
62
+ if (value) {
63
+ buffer += decoder.decode(value, { stream: true });
64
+ const newLines = buffer.split('\n');
65
+ buffer = newLines.pop() || '';
66
+ lines.push(...newLines);
67
+ }
68
+ }
69
+ if (buffer) {
70
+ lines.push(buffer);
71
+ }
72
+ }
73
+ finally {
74
+ reader.releaseLock();
75
+ }
76
+ }
77
+ else {
78
+ for (const file of files) {
79
+ const fullPath = path.resolve(shell.cwd, file);
80
+ let interrupted = false;
81
+ const interruptHandler = () => { interrupted = true; };
82
+ kernel.terminal.events.on(TerminalEvents.INTERRUPT, interruptHandler);
83
+ try {
84
+ if (fullPath.startsWith('/dev')) {
85
+ await writelnStderr(process, terminal, `rev: ${file}: cannot process device files`);
86
+ continue;
87
+ }
88
+ const handle = await shell.context.fs.promises.open(fullPath, 'r');
89
+ const stat = await shell.context.fs.promises.stat(fullPath);
90
+ const decoder = new TextDecoder();
91
+ let content = '';
92
+ let bytesRead = 0;
93
+ const chunkSize = 1024;
94
+ while (bytesRead < stat.size) {
95
+ if (interrupted)
96
+ break;
97
+ const data = new Uint8Array(chunkSize);
98
+ const readSize = Math.min(chunkSize, stat.size - bytesRead);
99
+ await handle.read(data, 0, readSize, bytesRead);
100
+ const chunk = data.subarray(0, readSize);
101
+ content += decoder.decode(chunk, { stream: true });
102
+ bytesRead += readSize;
103
+ }
104
+ const fileLines = content.split('\n');
105
+ if (fileLines[fileLines.length - 1] === '') {
106
+ fileLines.pop();
107
+ }
108
+ lines.push(...fileLines);
109
+ }
110
+ catch (error) {
111
+ await writelnStderr(process, terminal, `rev: ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
112
+ }
113
+ finally {
114
+ kernel.terminal.events.off(TerminalEvents.INTERRUPT, interruptHandler);
115
+ }
116
+ }
117
+ }
118
+ for (const line of lines) {
119
+ const reversed = reverseLine(line);
120
+ await writer.write(new TextEncoder().encode(reversed + '\n'));
121
+ }
122
+ return 0;
123
+ }
124
+ catch (error) {
125
+ await writelnStderr(process, terminal, `rev: ${error instanceof Error ? error.message : 'Unknown error'}`);
126
+ return 1;
127
+ }
128
+ finally {
129
+ writer.releaseLock();
130
+ }
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=rev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rev.js","sourceRoot":"","sources":["../../src/commands/rev.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=shuf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuf.d.ts","sourceRoot":"","sources":["../../src/commands/shuf.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;AAuB/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA+L/F"}
@@ -0,0 +1,221 @@
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: shuf [OPTION]... [FILE]
7
+ Write a random permutation of the input lines to standard output.
8
+
9
+ -n, --head-count=COUNT output at most COUNT lines
10
+ -e, --echo treat each ARG as an input line
11
+ -i, --input-range=LO-HI treat each number LO through HI as an input line
12
+ --help display this help and exit`;
13
+ writelnStderr(process, terminal, usage);
14
+ }
15
+ function shuffleArray(array) {
16
+ const shuffled = [...array];
17
+ for (let i = shuffled.length - 1; i > 0; i--) {
18
+ const j = Math.floor(Math.random() * (i + 1));
19
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
20
+ }
21
+ return shuffled;
22
+ }
23
+ export function createCommand(kernel, shell, terminal) {
24
+ return new TerminalCommand({
25
+ command: 'shuf',
26
+ description: 'Write a random permutation of the input lines',
27
+ kernel,
28
+ shell,
29
+ terminal,
30
+ run: async (pid, argv) => {
31
+ const process = kernel.processes.get(pid);
32
+ if (!process)
33
+ return 1;
34
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
35
+ printUsage(process, terminal);
36
+ return 0;
37
+ }
38
+ let headCount = null;
39
+ let echo = false;
40
+ let inputRange;
41
+ const files = [];
42
+ const echoArgs = [];
43
+ for (let i = 0; i < argv.length; i++) {
44
+ const arg = argv[i];
45
+ if (!arg)
46
+ continue;
47
+ if (arg === '--help' || arg === '-h') {
48
+ printUsage(process, terminal);
49
+ return 0;
50
+ }
51
+ else if (arg === '-n' || arg === '--head-count') {
52
+ if (i + 1 < argv.length) {
53
+ const countStr = argv[++i];
54
+ if (countStr !== undefined) {
55
+ const parsed = parseInt(countStr, 10);
56
+ if (!isNaN(parsed) && parsed > 0) {
57
+ headCount = parsed;
58
+ }
59
+ else {
60
+ await writelnStderr(process, terminal, `shuf: invalid line count: ${countStr}`);
61
+ return 1;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ else if (arg.startsWith('--head-count=')) {
67
+ const countStr = arg.slice(13);
68
+ const parsed = parseInt(countStr, 10);
69
+ if (!isNaN(parsed) && parsed > 0) {
70
+ headCount = parsed;
71
+ }
72
+ else {
73
+ await writelnStderr(process, terminal, `shuf: invalid line count: ${countStr}`);
74
+ return 1;
75
+ }
76
+ }
77
+ else if (arg.startsWith('-n')) {
78
+ const countStr = arg.slice(2);
79
+ if (countStr) {
80
+ const parsed = parseInt(countStr, 10);
81
+ if (!isNaN(parsed) && parsed > 0) {
82
+ headCount = parsed;
83
+ }
84
+ else {
85
+ await writelnStderr(process, terminal, `shuf: invalid line count: ${countStr}`);
86
+ return 1;
87
+ }
88
+ }
89
+ }
90
+ else if (arg === '-e' || arg === '--echo') {
91
+ echo = true;
92
+ }
93
+ else if (arg === '-i' || arg === '--input-range') {
94
+ if (i + 1 < argv.length) {
95
+ inputRange = argv[++i];
96
+ }
97
+ }
98
+ else if (arg.startsWith('--input-range=')) {
99
+ inputRange = arg.slice(15);
100
+ }
101
+ else if (arg.startsWith('-i')) {
102
+ inputRange = arg.slice(2);
103
+ }
104
+ else if (!arg.startsWith('-')) {
105
+ if (echo) {
106
+ echoArgs.push(arg);
107
+ }
108
+ else {
109
+ files.push(arg);
110
+ }
111
+ }
112
+ else {
113
+ await writelnStderr(process, terminal, `shuf: invalid option -- '${arg.slice(1)}'`);
114
+ await writelnStderr(process, terminal, "Try 'shuf --help' for more information.");
115
+ return 1;
116
+ }
117
+ }
118
+ const writer = process.stdout.getWriter();
119
+ try {
120
+ let lines = [];
121
+ if (inputRange) {
122
+ const [loStr, hiStr] = inputRange.split('-');
123
+ const lo = parseInt(loStr ?? '0', 10);
124
+ const hi = parseInt(hiStr ?? '0', 10);
125
+ if (isNaN(lo) || isNaN(hi) || lo > hi) {
126
+ await writelnStderr(process, terminal, `shuf: invalid input range: ${inputRange}`);
127
+ return 1;
128
+ }
129
+ for (let i = lo; i <= hi; i++) {
130
+ lines.push(i.toString());
131
+ }
132
+ }
133
+ else if (echo && echoArgs.length > 0) {
134
+ lines = echoArgs;
135
+ }
136
+ else if (files.length === 0) {
137
+ if (!process.stdin) {
138
+ return 0;
139
+ }
140
+ const reader = process.stdin.getReader();
141
+ const decoder = new TextDecoder();
142
+ let buffer = '';
143
+ try {
144
+ while (true) {
145
+ const { done, value } = await reader.read();
146
+ if (done)
147
+ break;
148
+ if (value) {
149
+ buffer += decoder.decode(value, { stream: true });
150
+ const newLines = buffer.split('\n');
151
+ buffer = newLines.pop() || '';
152
+ lines.push(...newLines);
153
+ }
154
+ }
155
+ if (buffer) {
156
+ lines.push(buffer);
157
+ }
158
+ }
159
+ finally {
160
+ reader.releaseLock();
161
+ }
162
+ }
163
+ else {
164
+ for (const file of files) {
165
+ const fullPath = path.resolve(shell.cwd, file);
166
+ let interrupted = false;
167
+ const interruptHandler = () => { interrupted = true; };
168
+ kernel.terminal.events.on(TerminalEvents.INTERRUPT, interruptHandler);
169
+ try {
170
+ if (fullPath.startsWith('/dev')) {
171
+ await writelnStderr(process, terminal, `shuf: ${file}: cannot process device files`);
172
+ continue;
173
+ }
174
+ const handle = await shell.context.fs.promises.open(fullPath, 'r');
175
+ const stat = await shell.context.fs.promises.stat(fullPath);
176
+ const decoder = new TextDecoder();
177
+ let content = '';
178
+ let bytesRead = 0;
179
+ const chunkSize = 1024;
180
+ while (bytesRead < stat.size) {
181
+ if (interrupted)
182
+ break;
183
+ const data = new Uint8Array(chunkSize);
184
+ const readSize = Math.min(chunkSize, stat.size - bytesRead);
185
+ await handle.read(data, 0, readSize, bytesRead);
186
+ const chunk = data.subarray(0, readSize);
187
+ content += decoder.decode(chunk, { stream: true });
188
+ bytesRead += readSize;
189
+ }
190
+ const fileLines = content.split('\n');
191
+ if (fileLines[fileLines.length - 1] === '') {
192
+ fileLines.pop();
193
+ }
194
+ lines.push(...fileLines);
195
+ }
196
+ catch (error) {
197
+ await writelnStderr(process, terminal, `shuf: ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
198
+ }
199
+ finally {
200
+ kernel.terminal.events.off(TerminalEvents.INTERRUPT, interruptHandler);
201
+ }
202
+ }
203
+ }
204
+ const shuffled = shuffleArray(lines);
205
+ const output = headCount !== null ? shuffled.slice(0, headCount) : shuffled;
206
+ for (const line of output) {
207
+ await writer.write(new TextEncoder().encode(line + '\n'));
208
+ }
209
+ return 0;
210
+ }
211
+ catch (error) {
212
+ await writelnStderr(process, terminal, `shuf: ${error instanceof Error ? error.message : 'Unknown error'}`);
213
+ return 1;
214
+ }
215
+ finally {
216
+ writer.releaseLock();
217
+ }
218
+ }
219
+ });
220
+ }
221
+ //# sourceMappingURL=shuf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shuf.js","sourceRoot":"","sources":["../../src/commands/shuf.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=sleep.d.ts.map