@ecmaos/coreutils 0.4.0 → 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 (171) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +6 -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/curl.d.ts +4 -0
  34. package/dist/commands/curl.d.ts.map +1 -0
  35. package/dist/commands/curl.js +238 -0
  36. package/dist/commands/curl.js.map +1 -0
  37. package/dist/commands/du.d.ts +4 -0
  38. package/dist/commands/du.d.ts.map +1 -0
  39. package/dist/commands/du.js +168 -0
  40. package/dist/commands/du.js.map +1 -0
  41. package/dist/commands/echo.d.ts.map +1 -1
  42. package/dist/commands/echo.js +125 -2
  43. package/dist/commands/echo.js.map +1 -1
  44. package/dist/commands/expand.d.ts +4 -0
  45. package/dist/commands/expand.d.ts.map +1 -0
  46. package/dist/commands/expand.js +197 -0
  47. package/dist/commands/expand.js.map +1 -0
  48. package/dist/commands/factor.d.ts +4 -0
  49. package/dist/commands/factor.d.ts.map +1 -0
  50. package/dist/commands/factor.js +141 -0
  51. package/dist/commands/factor.js.map +1 -0
  52. package/dist/commands/fmt.d.ts +4 -0
  53. package/dist/commands/fmt.d.ts.map +1 -0
  54. package/dist/commands/fmt.js +278 -0
  55. package/dist/commands/fmt.js.map +1 -0
  56. package/dist/commands/fold.d.ts +4 -0
  57. package/dist/commands/fold.d.ts.map +1 -0
  58. package/dist/commands/fold.js +253 -0
  59. package/dist/commands/fold.js.map +1 -0
  60. package/dist/commands/groups.d.ts +4 -0
  61. package/dist/commands/groups.d.ts.map +1 -0
  62. package/dist/commands/groups.js +61 -0
  63. package/dist/commands/groups.js.map +1 -0
  64. package/dist/commands/hostname.d.ts +4 -0
  65. package/dist/commands/hostname.d.ts.map +1 -0
  66. package/dist/commands/hostname.js +80 -0
  67. package/dist/commands/hostname.js.map +1 -0
  68. package/dist/commands/mount.d.ts.map +1 -1
  69. package/dist/commands/mount.js +192 -97
  70. package/dist/commands/mount.js.map +1 -1
  71. package/dist/commands/od.d.ts +4 -0
  72. package/dist/commands/od.d.ts.map +1 -0
  73. package/dist/commands/od.js +342 -0
  74. package/dist/commands/od.js.map +1 -0
  75. package/dist/commands/pr.d.ts +4 -0
  76. package/dist/commands/pr.d.ts.map +1 -0
  77. package/dist/commands/pr.js +298 -0
  78. package/dist/commands/pr.js.map +1 -0
  79. package/dist/commands/printf.d.ts +4 -0
  80. package/dist/commands/printf.d.ts.map +1 -0
  81. package/dist/commands/printf.js +271 -0
  82. package/dist/commands/printf.js.map +1 -0
  83. package/dist/commands/readlink.d.ts +4 -0
  84. package/dist/commands/readlink.d.ts.map +1 -0
  85. package/dist/commands/readlink.js +104 -0
  86. package/dist/commands/readlink.js.map +1 -0
  87. package/dist/commands/realpath.d.ts +4 -0
  88. package/dist/commands/realpath.d.ts.map +1 -0
  89. package/dist/commands/realpath.js +111 -0
  90. package/dist/commands/realpath.js.map +1 -0
  91. package/dist/commands/rev.d.ts +4 -0
  92. package/dist/commands/rev.d.ts.map +1 -0
  93. package/dist/commands/rev.js +134 -0
  94. package/dist/commands/rev.js.map +1 -0
  95. package/dist/commands/shuf.d.ts +4 -0
  96. package/dist/commands/shuf.d.ts.map +1 -0
  97. package/dist/commands/shuf.js +221 -0
  98. package/dist/commands/shuf.js.map +1 -0
  99. package/dist/commands/sleep.d.ts +4 -0
  100. package/dist/commands/sleep.d.ts.map +1 -0
  101. package/dist/commands/sleep.js +102 -0
  102. package/dist/commands/sleep.js.map +1 -0
  103. package/dist/commands/strings.d.ts +4 -0
  104. package/dist/commands/strings.d.ts.map +1 -0
  105. package/dist/commands/strings.js +170 -0
  106. package/dist/commands/strings.js.map +1 -0
  107. package/dist/commands/tac.d.ts +4 -0
  108. package/dist/commands/tac.d.ts.map +1 -0
  109. package/dist/commands/tac.js +130 -0
  110. package/dist/commands/tac.js.map +1 -0
  111. package/dist/commands/time.d.ts +4 -0
  112. package/dist/commands/time.d.ts.map +1 -0
  113. package/dist/commands/time.js +126 -0
  114. package/dist/commands/time.js.map +1 -0
  115. package/dist/commands/umount.d.ts.map +1 -1
  116. package/dist/commands/umount.js +2 -3
  117. package/dist/commands/umount.js.map +1 -1
  118. package/dist/commands/uname.d.ts +4 -0
  119. package/dist/commands/uname.d.ts.map +1 -0
  120. package/dist/commands/uname.js +149 -0
  121. package/dist/commands/uname.js.map +1 -0
  122. package/dist/commands/unexpand.d.ts +4 -0
  123. package/dist/commands/unexpand.d.ts.map +1 -0
  124. package/dist/commands/unexpand.js +286 -0
  125. package/dist/commands/unexpand.js.map +1 -0
  126. package/dist/commands/uptime.d.ts +4 -0
  127. package/dist/commands/uptime.d.ts.map +1 -0
  128. package/dist/commands/uptime.js +62 -0
  129. package/dist/commands/uptime.js.map +1 -0
  130. package/dist/commands/yes.d.ts +4 -0
  131. package/dist/commands/yes.d.ts.map +1 -0
  132. package/dist/commands/yes.js +58 -0
  133. package/dist/commands/yes.js.map +1 -0
  134. package/dist/index.d.ts +21 -0
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +73 -0
  137. package/dist/index.js.map +1 -1
  138. package/package.json +3 -2
  139. package/src/commands/awk.ts +340 -0
  140. package/src/commands/chmod.ts +141 -2
  141. package/src/commands/chown.ts +321 -0
  142. package/src/commands/cksum.ts +133 -0
  143. package/src/commands/cmp.ts +126 -0
  144. package/src/commands/column.ts +273 -0
  145. package/src/commands/cp.ts +93 -4
  146. package/src/commands/curl.ts +231 -0
  147. package/src/commands/echo.ts +122 -2
  148. package/src/commands/expand.ts +207 -0
  149. package/src/commands/factor.ts +151 -0
  150. package/src/commands/fmt.ts +293 -0
  151. package/src/commands/fold.ts +257 -0
  152. package/src/commands/groups.ts +72 -0
  153. package/src/commands/hostname.ts +81 -0
  154. package/src/commands/mount.ts +208 -99
  155. package/src/commands/od.ts +327 -0
  156. package/src/commands/pr.ts +291 -0
  157. package/src/commands/printf.ts +271 -0
  158. package/src/commands/readlink.ts +102 -0
  159. package/src/commands/realpath.ts +126 -0
  160. package/src/commands/rev.ts +143 -0
  161. package/src/commands/shuf.ts +218 -0
  162. package/src/commands/sleep.ts +109 -0
  163. package/src/commands/strings.ts +176 -0
  164. package/src/commands/tac.ts +138 -0
  165. package/src/commands/time.ts +144 -0
  166. package/src/commands/umount.ts +2 -3
  167. package/src/commands/uname.ts +130 -0
  168. package/src/commands/unexpand.ts +305 -0
  169. package/src/commands/uptime.ts +73 -0
  170. package/src/index.ts +73 -0
  171. package/tsconfig.json +4 -0
@@ -4,11 +4,147 @@ import { TerminalCommand } from '../shared/terminal-command.js';
4
4
  import { writelnStderr } from '../shared/helpers.js';
5
5
  function printUsage(process, terminal) {
6
6
  const usage = `Usage: chmod [OPTION]... MODE[,MODE]... FILE...
7
+ or: chmod [OPTION]... OCTAL-MODE FILE...
7
8
  Change the mode of each FILE to MODE.
8
9
 
9
- --help display this help and exit`;
10
+ --help display this help and exit
11
+
12
+ Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
13
+
14
+ MODE can be specified in two ways:
15
+
16
+ Numeric mode (octal):
17
+ MODE is an octal number representing the permissions:
18
+ 4 = read (r)
19
+ 2 = write (w)
20
+ 1 = execute (x)
21
+
22
+ The three digits represent user, group, and other permissions.
23
+ Each digit is the sum of the desired permissions:
24
+ - 7 = 4+2+1 = read + write + execute (rwx)
25
+ - 6 = 4+2 = read + write (rw-)
26
+ - 5 = 4+1 = read + execute (r-x)
27
+ - 4 = 4 = read only (r--)
28
+
29
+ Examples:
30
+ 755 = rwxr-xr-x (user: rwx, group: r-x, other: r-x)
31
+ 644 = rw-r--r-- (user: rw-, group: r--, other: r--)
32
+ 600 = rw------- (user: rw-, group: ---, other: ---)
33
+
34
+ Symbolic mode:
35
+ [ugoa]*[-+=][rwxXst]*
36
+
37
+ The format is: [who][operator][permissions]
38
+
39
+ 'who' (optional, defaults to 'a' if omitted):
40
+ u user (owner)
41
+ g group
42
+ o other
43
+ a all (user, group, and other)
44
+
45
+ 'operator':
46
+ + add the specified permissions
47
+ - remove the specified permissions
48
+ = set the exact permissions (clears others)
49
+
50
+ 'permissions' (one or more):
51
+ r read
52
+ w write
53
+ x execute
54
+ X execute only if file is a directory or already has execute
55
+ s setuid/setgid
56
+ t sticky bit
57
+
58
+ Examples:
59
+ chmod 755 file Set file to rwxr-xr-x
60
+ chmod +x file Add execute permission for all
61
+ chmod u+x file Add execute permission for user
62
+ chmod g-w file Remove write permission for group
63
+ chmod o=r file Set other permissions to read-only
64
+ chmod u=rwx,g=rx,o=r file Set specific permissions for each class
65
+ chmod a-w file Remove write permission for all
66
+ chmod u+x,g+x file Add execute for user and group
67
+
68
+ Multiple modes can be specified separated by commas:
69
+ chmod u+x,g-w file Add execute for user, remove write for group`;
10
70
  writelnStderr(process, terminal, usage);
11
71
  }
72
+ function parseNumericMode(mode) {
73
+ if (/^0?[0-7]{1,4}$/.test(mode)) {
74
+ return parseInt(mode, 8);
75
+ }
76
+ if (/^0o[0-7]{1,4}$/i.test(mode)) {
77
+ return parseInt(mode.slice(2), 8);
78
+ }
79
+ return null;
80
+ }
81
+ function parseSymbolicMode(mode, currentMode) {
82
+ const parts = mode.split(',');
83
+ let newMode = currentMode;
84
+ for (const part of parts) {
85
+ const match = part.match(/^([ugoa]*)([+\-=])([rwxXst]*)$/);
86
+ if (!match) {
87
+ throw new Error(`Invalid mode: ${part}`);
88
+ }
89
+ const [, who, op, perms = ''] = match;
90
+ const whoSet = who || 'a';
91
+ if ((op === '+' || op === '-') && !perms) {
92
+ throw new Error(`Invalid mode: ${part} (missing permissions)`);
93
+ }
94
+ const userBits = 0o400 | 0o200 | 0o100;
95
+ const groupBits = 0o040 | 0o020 | 0o010;
96
+ const otherBits = 0o004 | 0o002 | 0o001;
97
+ let permBits = 0;
98
+ if (perms.includes('r'))
99
+ permBits |= 0o444;
100
+ if (perms.includes('w'))
101
+ permBits |= 0o222;
102
+ if (perms.includes('x'))
103
+ permBits |= 0o111;
104
+ if (perms.includes('X')) {
105
+ if (currentMode & 0o111)
106
+ permBits |= 0o111;
107
+ }
108
+ if (perms.includes('s'))
109
+ permBits |= 0o6000;
110
+ if (perms.includes('t'))
111
+ permBits |= 0o1000;
112
+ let targetBits = 0;
113
+ if (whoSet.includes('u') || whoSet.includes('a'))
114
+ targetBits |= userBits;
115
+ if (whoSet.includes('g') || whoSet.includes('a'))
116
+ targetBits |= groupBits;
117
+ if (whoSet.includes('o') || whoSet.includes('a'))
118
+ targetBits |= otherBits;
119
+ switch (op) {
120
+ case '+':
121
+ newMode |= (permBits & targetBits);
122
+ break;
123
+ case '-':
124
+ newMode &= ~(permBits & targetBits);
125
+ break;
126
+ case '=':
127
+ newMode &= ~targetBits;
128
+ newMode |= (permBits & targetBits);
129
+ break;
130
+ }
131
+ }
132
+ return newMode;
133
+ }
134
+ async function parseMode(mode, fs, filePath) {
135
+ const numericMode = parseNumericMode(mode);
136
+ if (numericMode !== null) {
137
+ return numericMode;
138
+ }
139
+ try {
140
+ const stats = await fs.stat(filePath);
141
+ const currentMode = stats.mode & 0o7777;
142
+ return parseSymbolicMode(mode, currentMode);
143
+ }
144
+ catch (error) {
145
+ throw new Error(`Cannot access ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
146
+ }
147
+ }
12
148
  export function createCommand(kernel, shell, terminal) {
13
149
  return new TerminalCommand({
14
150
  command: 'chmod',
@@ -44,7 +180,8 @@ export function createCommand(kernel, shell, terminal) {
44
180
  for (const target of targets) {
45
181
  const fullPath = path.resolve(shell.cwd, target);
46
182
  try {
47
- await shell.context.fs.promises.chmod(fullPath, mode);
183
+ const numericMode = await parseMode(mode, shell.context.fs.promises, fullPath);
184
+ await shell.context.fs.promises.chmod(fullPath, numericMode);
48
185
  }
49
186
  catch (error) {
50
187
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"chmod.js","sourceRoot":"","sources":["../../src/commands/chmod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chmod.js","sourceRoot":"","sources":["../../src/commands/chmod.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=chown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chown.d.ts","sourceRoot":"","sources":["../../src/commands/chown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAQ,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAuO/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAsF/F"}
@@ -0,0 +1,257 @@
1
+ import path from 'path';
2
+ import chalk from 'chalk';
3
+ import { TerminalCommand } from '../shared/terminal-command.js';
4
+ import { writelnStderr, writelnStdout } from '../shared/helpers.js';
5
+ function printUsage(process, terminal) {
6
+ const usage = `Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...
7
+ or: chown [OPTION]... :GROUP FILE...
8
+ or: chown [OPTION]... --reference=RFILE FILE...
9
+ Change the owner and/or group of each FILE to OWNER and/or GROUP.
10
+
11
+ -R, --recursive operate on files and directories recursively
12
+ -v, --verbose output a diagnostic for every file processed
13
+ -c, --changes like verbose but report only when a change is made
14
+ --help display this help and exit
15
+
16
+ OWNER and GROUP can be specified as:
17
+ - A numeric user ID (UID) or group ID (GID)
18
+ - A username (resolved to UID)
19
+ - A group name (resolved to GID, if supported)
20
+
21
+ The format OWNER:GROUP means set both owner and group.
22
+ The format OWNER: means set owner and set group to owner's primary group.
23
+ The format :GROUP means set group only (keep current owner).
24
+ The format OWNER.GROUP is also accepted (same as OWNER:GROUP).
25
+
26
+ Examples:
27
+ chown root file Change owner of file to root
28
+ chown root:root file Change owner and group to root
29
+ chown :users file Change group to users (keep owner)
30
+ chown root: file Change owner to root, group to root's primary group
31
+ chown -R root:root /dir Recursively change owner and group
32
+ chown -v user file Verbose output while changing owner
33
+ chown -c user file Report only when changes are made`;
34
+ writelnStderr(process, terminal, usage);
35
+ }
36
+ function parseOwnershipSpec(spec, kernel) {
37
+ const result = {
38
+ ownerOnly: false,
39
+ groupOnly: false,
40
+ setGroupToOwnerPrimary: false
41
+ };
42
+ if (spec.startsWith(':')) {
43
+ result.groupOnly = true;
44
+ const groupSpec = spec.slice(1);
45
+ if (!groupSpec) {
46
+ throw new Error('Invalid ownership spec: missing group after colon');
47
+ }
48
+ result.group = resolveGroup(groupSpec, kernel);
49
+ return result;
50
+ }
51
+ if (spec.endsWith(':')) {
52
+ result.ownerOnly = true;
53
+ result.setGroupToOwnerPrimary = true;
54
+ const ownerSpec = spec.slice(0, -1);
55
+ if (!ownerSpec) {
56
+ throw new Error('Invalid ownership spec: missing owner before colon');
57
+ }
58
+ result.owner = resolveOwner(ownerSpec, kernel);
59
+ const ownerUser = kernel.users.get(result.owner);
60
+ if (ownerUser) {
61
+ result.group = ownerUser.gid;
62
+ }
63
+ return result;
64
+ }
65
+ const colonIndex = spec.indexOf(':');
66
+ const dotIndex = spec.indexOf('.');
67
+ if (colonIndex === -1 && dotIndex === -1) {
68
+ result.owner = resolveOwner(spec, kernel);
69
+ result.ownerOnly = true;
70
+ return result;
71
+ }
72
+ const separatorIndex = colonIndex !== -1 ? colonIndex : dotIndex;
73
+ const ownerSpec = spec.slice(0, separatorIndex);
74
+ const groupSpec = spec.slice(separatorIndex + 1);
75
+ if (!ownerSpec && !groupSpec) {
76
+ throw new Error('Invalid ownership spec: both owner and group are empty');
77
+ }
78
+ if (ownerSpec) {
79
+ result.owner = resolveOwner(ownerSpec, kernel);
80
+ }
81
+ if (groupSpec) {
82
+ result.group = resolveGroup(groupSpec, kernel);
83
+ }
84
+ return result;
85
+ }
86
+ function resolveOwner(ownerSpec, kernel) {
87
+ const numericUid = parseInt(ownerSpec, 10);
88
+ if (!isNaN(numericUid) && numericUid.toString() === ownerSpec) {
89
+ return numericUid;
90
+ }
91
+ const user = Array.from(kernel.users.all.values()).find((u) => u.username === ownerSpec);
92
+ if (!user) {
93
+ throw new Error(`Invalid user: ${ownerSpec}`);
94
+ }
95
+ return user.uid;
96
+ }
97
+ function resolveGroup(groupSpec, kernel) {
98
+ const numericGid = parseInt(groupSpec, 10);
99
+ if (!isNaN(numericGid) && numericGid.toString() === groupSpec) {
100
+ return numericGid;
101
+ }
102
+ const user = Array.from(kernel.users.all.values()).find((u) => u.username === groupSpec);
103
+ if (user) {
104
+ return user.gid;
105
+ }
106
+ throw new Error(`Invalid group: ${groupSpec}`);
107
+ }
108
+ async function getCurrentOwnership(fs, filePath) {
109
+ try {
110
+ const stats = await fs.stat(filePath);
111
+ return { uid: stats.uid, gid: stats.gid };
112
+ }
113
+ catch (error) {
114
+ throw new Error(`Cannot access ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
115
+ }
116
+ }
117
+ async function changeOwnership(fs, filePath, spec, kernel) {
118
+ const current = await getCurrentOwnership(fs, filePath);
119
+ let newUid = current.uid;
120
+ let newGid = current.gid;
121
+ if (spec.ownerOnly) {
122
+ newUid = spec.owner ?? current.uid;
123
+ if (spec.setGroupToOwnerPrimary && spec.owner !== undefined) {
124
+ const ownerUser = kernel.users.get(spec.owner);
125
+ if (ownerUser) {
126
+ newGid = ownerUser.gid;
127
+ }
128
+ }
129
+ else if (spec.group !== undefined) {
130
+ newGid = spec.group;
131
+ }
132
+ }
133
+ else if (spec.groupOnly) {
134
+ newGid = spec.group ?? current.gid;
135
+ }
136
+ else {
137
+ if (spec.owner !== undefined) {
138
+ newUid = spec.owner;
139
+ }
140
+ if (spec.group !== undefined) {
141
+ newGid = spec.group;
142
+ }
143
+ }
144
+ await fs.chown(filePath, newUid, newGid);
145
+ return { uid: newUid, gid: newGid };
146
+ }
147
+ async function processFile(fs, filePath, spec, kernel, options, process, terminal, relativePath) {
148
+ try {
149
+ const current = await getCurrentOwnership(fs, filePath);
150
+ const newOwnership = await changeOwnership(fs, filePath, spec, kernel);
151
+ const changed = current.uid !== newOwnership.uid || current.gid !== newOwnership.gid;
152
+ if (options.verbose || (options.changes && changed)) {
153
+ const changeInfo = changed
154
+ ? `changed ownership of '${relativePath}' from ${current.uid}:${current.gid} to ${newOwnership.uid}:${newOwnership.gid}`
155
+ : `ownership of '${relativePath}' retained as ${newOwnership.uid}:${newOwnership.gid}`;
156
+ await writelnStdout(process, terminal, changeInfo);
157
+ }
158
+ if (options.recursive) {
159
+ try {
160
+ const stats = await fs.stat(filePath);
161
+ if (stats.isDirectory()) {
162
+ const entries = await fs.readdir(filePath);
163
+ for (const entry of entries) {
164
+ const entryPath = path.join(filePath, entry);
165
+ const entryRelativePath = path.join(relativePath, entry);
166
+ await processFile(fs, entryPath, spec, kernel, options, process, terminal, entryRelativePath);
167
+ }
168
+ }
169
+ }
170
+ catch (error) {
171
+ const errorMessage = error instanceof Error ? error.message : String(error);
172
+ await writelnStderr(process, terminal, `chown: ${relativePath}: ${errorMessage}`);
173
+ }
174
+ }
175
+ return false;
176
+ }
177
+ catch (error) {
178
+ const errorMessage = error instanceof Error ? error.message : String(error);
179
+ await writelnStderr(process, terminal, `chown: ${relativePath}: ${errorMessage}`);
180
+ return true;
181
+ }
182
+ }
183
+ export function createCommand(kernel, shell, terminal) {
184
+ return new TerminalCommand({
185
+ command: 'chown',
186
+ description: 'Change file owner and group',
187
+ kernel,
188
+ shell,
189
+ terminal,
190
+ run: async (pid, argv) => {
191
+ const process = kernel.processes.get(pid);
192
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
193
+ printUsage(process, terminal);
194
+ return 0;
195
+ }
196
+ let recursive = false;
197
+ let verbose = false;
198
+ let changes = false;
199
+ const args = [];
200
+ for (const arg of argv) {
201
+ if (arg === '-R' || arg === '--recursive') {
202
+ recursive = true;
203
+ }
204
+ else if (arg === '-v' || arg === '--verbose') {
205
+ verbose = true;
206
+ }
207
+ else if (arg === '-c' || arg === '--changes') {
208
+ changes = true;
209
+ }
210
+ else if (arg === '--reference') {
211
+ await writelnStderr(process, terminal, chalk.red('chown: --reference option not yet implemented'));
212
+ return 1;
213
+ }
214
+ else if (arg && !arg.startsWith('-')) {
215
+ args.push(arg);
216
+ }
217
+ else if (arg.startsWith('-')) {
218
+ await writelnStderr(process, terminal, chalk.red(`chown: invalid option '${arg}'`));
219
+ await writelnStderr(process, terminal, 'Try \'chown --help\' for more information.');
220
+ return 1;
221
+ }
222
+ }
223
+ if (args.length === 0) {
224
+ await writelnStderr(process, terminal, chalk.red('chown: missing operand'));
225
+ await writelnStderr(process, terminal, 'Try \'chown --help\' for more information.');
226
+ return 1;
227
+ }
228
+ const ownershipSpec = args[0];
229
+ const targets = args.slice(1);
230
+ if (!ownershipSpec || targets.length === 0) {
231
+ await writelnStderr(process, terminal, chalk.red('chown: missing operand'));
232
+ await writelnStderr(process, terminal, 'Try \'chown --help\' for more information.');
233
+ return 1;
234
+ }
235
+ let spec;
236
+ try {
237
+ spec = parseOwnershipSpec(ownershipSpec, kernel);
238
+ }
239
+ catch (error) {
240
+ const errorMessage = error instanceof Error ? error.message : String(error);
241
+ await writelnStderr(process, terminal, chalk.red(`chown: invalid ownership spec '${ownershipSpec}': ${errorMessage}`));
242
+ return 1;
243
+ }
244
+ let hasError = false;
245
+ const options = { recursive, verbose, changes };
246
+ for (const target of targets) {
247
+ const fullPath = path.resolve(shell.cwd, target);
248
+ const error = await processFile(shell.context.fs.promises, fullPath, spec, kernel, options, process, terminal, target);
249
+ if (error) {
250
+ hasError = true;
251
+ }
252
+ }
253
+ return hasError ? 1 : 0;
254
+ }
255
+ });
256
+ }
257
+ //# sourceMappingURL=chown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chown.js","sourceRoot":"","sources":["../../src/commands/chown.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEnE,SAAS,UAAU,CAAC,OAA4B,EAAE,QAAkB;IAClE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;oEA2BoD,CAAA;IAClE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC;AAUD,SAAS,kBAAkB,CAAC,IAAY,EAAE,MAAc;IACtD,MAAM,MAAM,GAAkB;QAC5B,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,sBAAsB,EAAE,KAAK;KAC9B,CAAA;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QACD,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9C,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAA;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QACD,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAA;QAC9B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAElC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;IAEhD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,MAAc;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAa,EAAE,CAAE,CAAU,CAAC,QAAQ,KAAK,SAAS,CACrD,CAAA;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAA;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,MAAc;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,EAAa,EAAE,CAAE,CAAU,CAAC,QAAQ,KAAK,SAAS,CACrD,CAAA;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAA;AAChD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,EAA4C,EAC5C,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,EAA4C,EAC5C,QAAgB,EAChB,IAAmB,EACnB,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACvD,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAA;IACxB,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAA;IAExB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAA;QAClC,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,GAAG,SAAS,CAAC,GAAG,CAAA;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,EAA4C,EAC5C,QAAgB,EAChB,IAAmB,EACnB,MAAc,EACd,OAAmE,EACnE,OAA4B,EAC5B,QAAkB,EAClB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QACvD,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAA;QAEpF,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,UAAU,GAAG,OAAO;gBACxB,CAAC,CAAC,yBAAyB,YAAY,UAAU,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,OAAO,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE;gBACxH,CAAC,CAAC,iBAAiB,YAAY,iBAAiB,YAAY,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,CAAA;YACxF,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;oBAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;wBAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;wBACxD,MAAM,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAA;oBAC/F,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,YAAY,KAAK,YAAY,EAAE,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,YAAY,KAAK,YAAY,EAAE,CAAC,CAAA;QACjF,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB;IAC5E,OAAO,IAAI,eAAe,CAAC;QACzB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,6BAA6B;QAC1C,MAAM;QACN,KAAK;QACL,QAAQ;QACR,GAAG,EAAE,KAAK,EAAE,GAAW,EAAE,IAAc,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAwB,CAAA;YAEhE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBAClE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBAC7B,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,SAAS,GAAG,KAAK,CAAA;YACrB,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,MAAM,IAAI,GAAa,EAAE,CAAA;YAEzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;oBAC1C,SAAS,GAAG,IAAI,CAAA;gBAClB,CAAC;qBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBAC/C,OAAO,GAAG,IAAI,CAAA;gBAChB,CAAC;qBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBAC/C,OAAO,GAAG,IAAI,CAAA;gBAChB,CAAC;qBAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;oBACjC,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAA;oBAClG,OAAO,CAAC,CAAA;gBACV,CAAC;qBAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAChB,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAC,CAAA;oBACnF,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,4CAA4C,CAAC,CAAA;oBACpF,OAAO,CAAC,CAAA;gBACV,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;gBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,4CAA4C,CAAC,CAAA;gBACpF,OAAO,CAAC,CAAA;YACV,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAE7B,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;gBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,4CAA4C,CAAC,CAAA;gBACpF,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,IAAmB,CAAA;YACvB,IAAI,CAAC;gBACH,IAAI,GAAG,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,kCAAkC,aAAa,MAAM,YAAY,EAAE,CAAC,CAAC,CAAA;gBACtH,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,QAAQ,GAAG,KAAK,CAAA;YACpB,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;YAE/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAChD,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EACzB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,MAAM,CACP,CAAA;gBACD,IAAI,KAAK,EAAE,CAAC;oBACV,QAAQ,GAAG,IAAI,CAAA;gBACjB,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -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=cksum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cksum.d.ts","sourceRoot":"","sources":["../../src/commands/cksum.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;AAiC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAiG/F"}
@@ -0,0 +1,124 @@
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: cksum [FILE]...
6
+ Print CRC checksum and byte count for each FILE.
7
+
8
+ If no FILE is specified, or if FILE is -, read standard input.
9
+
10
+ --help display this help and exit`;
11
+ writelnStderr(process, terminal, usage);
12
+ }
13
+ function calculateCRC32(data) {
14
+ let crc = 0xffffffff;
15
+ const polynomial = 0xedb88320;
16
+ for (let i = 0; i < data.length; i++) {
17
+ const byte = data[i];
18
+ if (byte === undefined)
19
+ continue;
20
+ crc ^= byte;
21
+ for (let j = 0; j < 8; j++) {
22
+ if (crc & 1) {
23
+ crc = (crc >>> 1) ^ polynomial;
24
+ }
25
+ else {
26
+ crc = crc >>> 1;
27
+ }
28
+ }
29
+ }
30
+ return (crc ^ 0xffffffff) >>> 0;
31
+ }
32
+ export function createCommand(kernel, shell, terminal) {
33
+ return new TerminalCommand({
34
+ command: 'cksum',
35
+ description: 'Print CRC checksum and byte count',
36
+ kernel,
37
+ shell,
38
+ terminal,
39
+ run: async (pid, argv) => {
40
+ const process = kernel.processes.get(pid);
41
+ if (!process)
42
+ return 1;
43
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
44
+ printUsage(process, terminal);
45
+ return 0;
46
+ }
47
+ const files = [];
48
+ for (const arg of argv) {
49
+ if (!arg)
50
+ continue;
51
+ if (arg === '--help' || arg === '-h') {
52
+ printUsage(process, terminal);
53
+ return 0;
54
+ }
55
+ else if (!arg.startsWith('-')) {
56
+ files.push(arg);
57
+ }
58
+ else {
59
+ await writelnStderr(process, terminal, `cksum: invalid option -- '${arg.slice(1)}'`);
60
+ await writelnStderr(process, terminal, "Try 'cksum --help' for more information.");
61
+ return 1;
62
+ }
63
+ }
64
+ const writer = process.stdout.getWriter();
65
+ try {
66
+ if (files.length === 0) {
67
+ if (!process.stdin) {
68
+ return 0;
69
+ }
70
+ const reader = process.stdin.getReader();
71
+ const chunks = [];
72
+ try {
73
+ while (true) {
74
+ const { done, value } = await reader.read();
75
+ if (done)
76
+ break;
77
+ if (value) {
78
+ chunks.push(value);
79
+ }
80
+ }
81
+ }
82
+ finally {
83
+ reader.releaseLock();
84
+ }
85
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
86
+ const data = new Uint8Array(totalLength);
87
+ let offset = 0;
88
+ for (const chunk of chunks) {
89
+ data.set(chunk, offset);
90
+ offset += chunk.length;
91
+ }
92
+ const crc = calculateCRC32(data);
93
+ await writer.write(new TextEncoder().encode(`${crc} ${data.length}\n`));
94
+ return 0;
95
+ }
96
+ for (const file of files) {
97
+ const fullPath = path.resolve(shell.cwd, file);
98
+ try {
99
+ if (fullPath.startsWith('/dev')) {
100
+ await writelnStderr(process, terminal, `cksum: ${file}: cannot checksum device files`);
101
+ continue;
102
+ }
103
+ const data = await shell.context.fs.promises.readFile(fullPath);
104
+ const bytes = new Uint8Array(data);
105
+ const crc = calculateCRC32(bytes);
106
+ await writer.write(new TextEncoder().encode(`${crc} ${bytes.length} ${file}\n`));
107
+ }
108
+ catch (error) {
109
+ await writelnStderr(process, terminal, `cksum: ${file}: ${error instanceof Error ? error.message : 'Unknown error'}`);
110
+ }
111
+ }
112
+ return 0;
113
+ }
114
+ catch (error) {
115
+ await writelnStderr(process, terminal, `cksum: ${error instanceof Error ? error.message : 'Unknown error'}`);
116
+ return 1;
117
+ }
118
+ finally {
119
+ writer.releaseLock();
120
+ }
121
+ }
122
+ });
123
+ }
124
+ //# sourceMappingURL=cksum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cksum.js","sourceRoot":"","sources":["../../src/commands/cksum.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=cmp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmp.d.ts","sourceRoot":"","sources":["../../src/commands/cmp.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;AAa/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA6G/F"}