@ecmaos/coreutils 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +25 -0
  3. package/LICENSE +1 -1
  4. package/dist/commands/cal.js +2 -2
  5. package/dist/commands/cal.js.map +1 -1
  6. package/dist/commands/cat.js +2 -2
  7. package/dist/commands/cd.js +2 -2
  8. package/dist/commands/chmod.d.ts.map +1 -1
  9. package/dist/commands/chmod.js +16 -11
  10. package/dist/commands/chmod.js.map +1 -1
  11. package/dist/commands/cp.js +2 -2
  12. package/dist/commands/cp.js.map +1 -1
  13. package/dist/commands/date.js +2 -2
  14. package/dist/commands/date.js.map +1 -1
  15. package/dist/commands/echo.js +2 -2
  16. package/dist/commands/echo.js.map +1 -1
  17. package/dist/commands/false.js +2 -2
  18. package/dist/commands/fetch.d.ts +4 -0
  19. package/dist/commands/fetch.d.ts.map +1 -0
  20. package/dist/commands/fetch.js +210 -0
  21. package/dist/commands/fetch.js.map +1 -0
  22. package/dist/commands/format.d.ts +4 -0
  23. package/dist/commands/format.d.ts.map +1 -0
  24. package/dist/commands/format.js +178 -0
  25. package/dist/commands/format.js.map +1 -0
  26. package/dist/commands/hash.d.ts +4 -0
  27. package/dist/commands/hash.d.ts.map +1 -0
  28. package/dist/commands/hash.js +200 -0
  29. package/dist/commands/hash.js.map +1 -0
  30. package/dist/commands/head.js +2 -2
  31. package/dist/commands/id.js +2 -2
  32. package/dist/commands/id.js.map +1 -1
  33. package/dist/commands/less.d.ts.map +1 -1
  34. package/dist/commands/less.js +53 -2
  35. package/dist/commands/less.js.map +1 -1
  36. package/dist/commands/ls.d.ts.map +1 -1
  37. package/dist/commands/ls.js +120 -97
  38. package/dist/commands/ls.js.map +1 -1
  39. package/dist/commands/man.d.ts +4 -0
  40. package/dist/commands/man.d.ts.map +1 -0
  41. package/dist/commands/man.js +554 -0
  42. package/dist/commands/man.js.map +1 -0
  43. package/dist/commands/mkdir.js +2 -2
  44. package/dist/commands/mkdir.js.map +1 -1
  45. package/dist/commands/mktemp.d.ts +4 -0
  46. package/dist/commands/mktemp.d.ts.map +1 -0
  47. package/dist/commands/mktemp.js +229 -0
  48. package/dist/commands/mktemp.js.map +1 -0
  49. package/dist/commands/nc.js +2 -2
  50. package/dist/commands/nc.js.map +1 -1
  51. package/dist/commands/passkey.js +3 -3
  52. package/dist/commands/pwd.js +2 -2
  53. package/dist/commands/pwd.js.map +1 -1
  54. package/dist/commands/rm.d.ts.map +1 -1
  55. package/dist/commands/rm.js +57 -12
  56. package/dist/commands/rm.js.map +1 -1
  57. package/dist/commands/rmdir.js +2 -2
  58. package/dist/commands/rmdir.js.map +1 -1
  59. package/dist/commands/sockets.js +1 -1
  60. package/dist/commands/stat.d.ts.map +1 -1
  61. package/dist/commands/stat.js +37 -15
  62. package/dist/commands/stat.js.map +1 -1
  63. package/dist/commands/tail.js +2 -2
  64. package/dist/commands/tar.d.ts +4 -0
  65. package/dist/commands/tar.d.ts.map +1 -0
  66. package/dist/commands/tar.js +693 -0
  67. package/dist/commands/tar.js.map +1 -0
  68. package/dist/commands/touch.js +2 -2
  69. package/dist/commands/touch.js.map +1 -1
  70. package/dist/commands/true.js +2 -2
  71. package/dist/commands/unzip.d.ts +4 -0
  72. package/dist/commands/unzip.d.ts.map +1 -0
  73. package/dist/commands/unzip.js +443 -0
  74. package/dist/commands/unzip.js.map +1 -0
  75. package/dist/commands/user.d.ts +4 -0
  76. package/dist/commands/user.d.ts.map +1 -0
  77. package/dist/commands/user.js +427 -0
  78. package/dist/commands/user.js.map +1 -0
  79. package/dist/commands/whoami.js +2 -2
  80. package/dist/commands/whoami.js.map +1 -1
  81. package/dist/commands/zip.d.ts +4 -0
  82. package/dist/commands/zip.d.ts.map +1 -0
  83. package/dist/commands/zip.js +264 -0
  84. package/dist/commands/zip.js.map +1 -0
  85. package/dist/index.d.ts +9 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +28 -1
  88. package/dist/index.js.map +1 -1
  89. package/package.json +6 -4
  90. package/src/commands/cal.ts +2 -2
  91. package/src/commands/cat.ts +2 -2
  92. package/src/commands/cd.ts +2 -2
  93. package/src/commands/chmod.ts +19 -11
  94. package/src/commands/cp.ts +2 -2
  95. package/src/commands/date.ts +2 -2
  96. package/src/commands/echo.ts +2 -2
  97. package/src/commands/false.ts +2 -2
  98. package/src/commands/fetch.ts +205 -0
  99. package/src/commands/format.ts +204 -0
  100. package/src/commands/hash.ts +215 -0
  101. package/src/commands/head.ts +2 -2
  102. package/src/commands/id.ts +2 -2
  103. package/src/commands/less.ts +50 -2
  104. package/src/commands/ls.ts +131 -91
  105. package/src/commands/man.ts +643 -0
  106. package/src/commands/mkdir.ts +2 -2
  107. package/src/commands/mktemp.ts +235 -0
  108. package/src/commands/nc.ts +2 -2
  109. package/src/commands/passkey.ts +3 -3
  110. package/src/commands/pwd.ts +2 -2
  111. package/src/commands/rm.ts +54 -12
  112. package/src/commands/rmdir.ts +2 -2
  113. package/src/commands/sockets.ts +1 -1
  114. package/src/commands/stat.ts +44 -16
  115. package/src/commands/tail.ts +2 -2
  116. package/src/commands/tar.ts +737 -0
  117. package/src/commands/touch.ts +2 -2
  118. package/src/commands/true.ts +2 -2
  119. package/src/commands/unzip.ts +517 -0
  120. package/src/commands/user.ts +436 -0
  121. package/src/commands/whoami.ts +2 -2
  122. package/src/commands/zip.ts +319 -0
  123. package/src/index.ts +28 -1
@@ -0,0 +1,554 @@
1
+ import ansi from 'ansi-escape-sequences';
2
+ import path from 'path';
3
+ import { TerminalCommand } from '../shared/terminal-command.js';
4
+ import { writelnStderr } from '../shared/helpers.js';
5
+ function printUsage(process, terminal) {
6
+ const usage = `Usage: man [OPTION]... [@scope/]package[/topic[/subtopic...]]
7
+ Display manual pages.
8
+
9
+ -l, --list list available topics for a package
10
+ --where PATH override default documentation path
11
+ --help display this help and exit
12
+
13
+ Examples:
14
+ man package-name display index for package-name
15
+ man @scope/package display index for @scope/package
16
+ man -l @scope/package list topics for @scope/package
17
+ man package-name/topic display topic from package-name
18
+ man @scope/package/docs display docs/index from @scope/package`;
19
+ writelnStderr(process, terminal, usage);
20
+ }
21
+ function resolveManPath(shell, whereArg) {
22
+ if (whereArg)
23
+ return [whereArg];
24
+ const manpath = shell.env.get('MANPATH');
25
+ if (manpath)
26
+ return manpath.split(':').filter(p => p.length > 0);
27
+ return ['/usr/share/docs'];
28
+ }
29
+ function parsePackagePath(pathStr) {
30
+ if (!pathStr || pathStr.length === 0)
31
+ return null;
32
+ const parts = pathStr.split('/');
33
+ if (parts.length === 0)
34
+ return null;
35
+ if (parts[0]?.startsWith('@')) {
36
+ if (parts.length === 1)
37
+ return null;
38
+ const firstPart = parts[0];
39
+ const packageName = parts[1];
40
+ if (!firstPart || !packageName)
41
+ return null;
42
+ const scope = firstPart.slice(1);
43
+ const topic = parts.length > 2 ? parts.slice(2).join('/') : undefined;
44
+ return { scope, package: packageName, topic };
45
+ }
46
+ else {
47
+ const packageName = parts[0];
48
+ if (!packageName)
49
+ return null;
50
+ const topic = parts.length > 1 ? parts.slice(1).join('/') : undefined;
51
+ return { package: packageName, topic };
52
+ }
53
+ }
54
+ function buildPackagePath(manpath, pkgPath) {
55
+ if (pkgPath.scope)
56
+ return path.join(manpath, `@${pkgPath.scope}`, pkgPath.package);
57
+ return path.join(manpath, pkgPath.package);
58
+ }
59
+ async function findDocument(fs, packageDir, topic) {
60
+ const extensions = ['.md', '.txt', '.html'];
61
+ const baseName = topic || 'index';
62
+ // First, check for a file with the topic name directly
63
+ for (const ext of extensions) {
64
+ const filePath = path.join(packageDir, `${baseName}${ext}`);
65
+ if (await fs.promises.exists(filePath))
66
+ return filePath;
67
+ }
68
+ // If topic contains a path or is a directory, look for index files in that directory
69
+ if (topic) {
70
+ const topicDir = path.join(packageDir, topic);
71
+ try {
72
+ const stat = await fs.promises.stat(topicDir);
73
+ if (stat.isDirectory()) {
74
+ for (const ext of extensions) {
75
+ const indexPath = path.join(topicDir, `index${ext}`);
76
+ if (await fs.promises.exists(indexPath))
77
+ return indexPath;
78
+ }
79
+ }
80
+ }
81
+ catch {
82
+ // Directory doesn't exist, continue
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ async function listTopics(fs, packageDir, prefix = '') {
88
+ const topics = [];
89
+ try {
90
+ if (!(await fs.promises.exists(packageDir)))
91
+ return topics;
92
+ const entries = await fs.promises.readdir(packageDir);
93
+ for (const entry of entries) {
94
+ if (entry === 'metadata.json' || entry === 'index.md' || entry === 'index.txt' || entry === 'index.html') {
95
+ continue;
96
+ }
97
+ const fullPath = path.join(packageDir, entry);
98
+ const stat = await fs.promises.stat(fullPath);
99
+ if (stat.isFile()) {
100
+ const ext = path.extname(entry);
101
+ if (ext === '.md' || ext === '.txt' || ext === '.html') {
102
+ const baseName = path.basename(entry, ext);
103
+ if (baseName && baseName !== 'index') {
104
+ topics.push(prefix ? `${prefix}/${baseName}` : baseName);
105
+ }
106
+ }
107
+ }
108
+ else if (stat.isDirectory()) {
109
+ // Check if subdirectory has an index file (making it a valid topic)
110
+ const subDir = fullPath;
111
+ const hasIndex = await fs.promises.exists(path.join(subDir, 'index.md')) ||
112
+ await fs.promises.exists(path.join(subDir, 'index.txt')) ||
113
+ await fs.promises.exists(path.join(subDir, 'index.html'));
114
+ if (hasIndex) {
115
+ const topicName = prefix ? `${prefix}/${entry}` : entry;
116
+ topics.push(topicName);
117
+ }
118
+ // Recursively list topics in subdirectory
119
+ const subTopics = await listTopics(fs, subDir, prefix ? `${prefix}/${entry}` : entry);
120
+ topics.push(...subTopics);
121
+ }
122
+ }
123
+ }
124
+ catch {
125
+ }
126
+ return topics.sort();
127
+ }
128
+ async function parseMetadata(fs, packageDir) {
129
+ const metadataPath = path.join(packageDir, 'metadata.json');
130
+ try {
131
+ if (await fs.promises.exists(metadataPath)) {
132
+ const content = await fs.promises.readFile(metadataPath, 'utf-8');
133
+ return JSON.parse(content);
134
+ }
135
+ }
136
+ catch { }
137
+ return null;
138
+ }
139
+ function convertMarkdownToText(content, _currentPackage, _currentManpath) {
140
+ let result = content;
141
+ // Strip HTML comments: <!-- ... -->
142
+ // - Safe: Processed first to remove comments before any other processing
143
+ // - Safe: Uses non-greedy match to handle multiple comments
144
+ // - Safe: Can span multiple lines
145
+ result = result.replace(/<!--[\s\S]*?-->/g, '');
146
+ // Process code blocks FIRST to avoid processing markdown inside them
147
+ // Code blocks: /^```[\s\S]*?^```/gm
148
+ // - Pattern matches fenced code blocks (```...```)
149
+ // - Uses non-greedy match to handle multiple code blocks
150
+ // - Replace with placeholders that won't match any markdown patterns
151
+ const codeBlockPlaceholders = [];
152
+ result = result.replace(/^```[\s\S]*?^```/gm, (match) => {
153
+ const code = match.replace(/^```[^\n]*\n/, '').replace(/\n```$/, '');
154
+ const formatted = '\n' + code.split('\n').map(line => ' ' + line).join('\n') + '\n';
155
+ const placeholder = `__CODE_BLOCK_${codeBlockPlaceholders.length}__`;
156
+ codeBlockPlaceholders.push(formatted);
157
+ return placeholder;
158
+ });
159
+ // Headings: /^(#{1,6})\s+(.+)$/gm
160
+ // - Safe: Uses ^ and $ with m flag (line anchors)
161
+ // - Safe: Requires whitespace after # characters
162
+ // - Safe: Won't match inside code blocks (already replaced with placeholders)
163
+ result = result.replace(/^(#{1,6})\s+(.+)$/gm, (_match, hashes, text) => {
164
+ const level = hashes.length;
165
+ if (level === 1)
166
+ return ansi.format(text, ['bold', 'underline']) + '\n';
167
+ else if (level === 2)
168
+ return ansi.format(text, ['bold']) + '\n';
169
+ else
170
+ return ansi.format(text, ['bold']) + '\n';
171
+ });
172
+ // Inline code: /`([^`]+)`/g
173
+ // - Safe: Processed after code blocks, so won't match inside code blocks
174
+ // - Safe: [^`]+ ensures it won't match empty content
175
+ // - Safe: Won't match across lines (backticks must be on same line)
176
+ // - Safe: Processed early to protect code snippets from other markdown
177
+ result = result.replace(/`([^`]+)`/g, (_, code) => ansi.format(code, ['cyan']));
178
+ // Restore code blocks
179
+ for (let i = 0; i < codeBlockPlaceholders.length; i++) {
180
+ const placeholder = codeBlockPlaceholders[i];
181
+ if (placeholder) {
182
+ result = result.replace(`__CODE_BLOCK_${i}__`, placeholder);
183
+ }
184
+ }
185
+ // Bold text: /\*\*(.+?)\*\*/g
186
+ // - Safe: Processed after code blocks, so won't match inside code blocks
187
+ // - Safe: Non-greedy (.+?) ensures it matches the shortest valid bold text
188
+ // - Safe: Requires at least one character between ** (won't match empty)
189
+ // - Safe: Processed BEFORE italic to avoid conflicts
190
+ // - Note: Can match inside headings (e.g., "## **Bold Heading**") which is valid markdown
191
+ result = result.replace(/\*\*(.+?)\*\*/g, (_, text) => ansi.format(text, ['bold']));
192
+ // Italic text: /\*(?![*])(.+?)\*/g
193
+ // - Safe: Processed after code blocks and bold, so won't match inside code blocks or **bold**
194
+ // - Safe: Negative lookahead (?![*]) ensures it doesn't match if followed by *
195
+ // - Safe: Non-greedy (.+?) ensures it matches the shortest valid italic text
196
+ // - Safe: Requires at least one character between * (won't match empty)
197
+ // - Safe: Can match inside bold text (e.g., "**bold *italic* bold**") which is valid markdown
198
+ // - Note: Using 'gray' color since many terminals don't render italic styling visibly
199
+ result = result.replace(/\*(?![*])(.+?)\*/g, (_, text) => ansi.format(text, ['gray']));
200
+ // URLs: Color any URLs (http://, https://, mailto:) as blue
201
+ // - Safe: Processed after code blocks, so won't match inside code blocks
202
+ // - Safe: Matches common URL patterns, stops at whitespace or common punctuation
203
+ // - Safe: Won't match URLs that are already inside formatted text (escape sequences)
204
+ // - Note: Pattern excludes trailing punctuation like ), ], but allows . (periods are valid in URLs)
205
+ const urlPattern = /(https?:\/\/[^\s<>"',;!)\]\)]+|mailto:[^\s<>"',;!)\]\)]+)/gi;
206
+ result = result.replace(urlPattern, (url) => {
207
+ return ansi.format(url, ['blue']);
208
+ });
209
+ return result;
210
+ }
211
+ function convertHtmlToText(content, _currentPackage, _currentManpath) {
212
+ let result = content;
213
+ // Strip HTML comments: <!-- ... -->
214
+ result = result.replace(/<!--[\s\S]*?-->/g, '');
215
+ // Strip head, style, script, nav, footer tags and their content
216
+ result = result.replace(/<head[^>]*>[\s\S]*?<\/head>/gi, '');
217
+ result = result.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '');
218
+ result = result.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '');
219
+ result = result.replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, '');
220
+ result = result.replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, '');
221
+ // Add line breaks before/after block elements
222
+ result = result.replace(/<br\s*\/?>/gi, '\n');
223
+ result = result.replace(/<\/p>/gi, '\n\n');
224
+ result = result.replace(/<\/div>/gi, '\n');
225
+ result = result.replace(/<\/li>/gi, '\n');
226
+ result = result.replace(/<\/tr>/gi, '\n');
227
+ result = result.replace(/<hr[^>]*>/gi, '\n---\n');
228
+ // List items - add bullet
229
+ result = result.replace(/<li[^>]*>/gi, ' • ');
230
+ result = result.replace(/<h1[^>]*>(.*?)<\/h1>/gi, (_, text) => {
231
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['bold', 'underline']) + '\n';
232
+ });
233
+ result = result.replace(/<h2[^>]*>(.*?)<\/h2>/gi, (_, text) => {
234
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['bold']) + '\n';
235
+ });
236
+ result = result.replace(/<h[3-6][^>]*>(.*?)<\/h[3-6]>/gi, (_, text) => {
237
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['bold']) + '\n';
238
+ });
239
+ result = result.replace(/<strong[^>]*>(.*?)<\/strong>/gi, (_, text) => {
240
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['bold']);
241
+ });
242
+ result = result.replace(/<b[^>]*>(.*?)<\/b>/gi, (_, text) => {
243
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['bold']);
244
+ });
245
+ result = result.replace(/<em[^>]*>(.*?)<\/em>/gi, (_, text) => {
246
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['gray']);
247
+ });
248
+ result = result.replace(/<i[^>]*>(.*?)<\/i>/gi, (_, text) => {
249
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['gray']);
250
+ });
251
+ result = result.replace(/<code[^>]*>(.*?)<\/code>/gi, (_, text) => {
252
+ return ansi.format(text.replace(/<[^>]+>/g, ''), ['cyan']);
253
+ });
254
+ result = result.replace(/<pre[^>]*>(.*?)<\/pre>/gis, (_, text) => {
255
+ const code = text.replace(/<[^>]+>/g, '');
256
+ return '\n' + code.split('\n').map((line) => ' ' + line).join('\n') + '\n';
257
+ });
258
+ result = result.replace(/<[^>]+>/g, '');
259
+ // Decode HTML entities
260
+ result = result.replace(/&nbsp;/g, ' ');
261
+ result = result.replace(/&lt;/g, '<');
262
+ result = result.replace(/&gt;/g, '>');
263
+ result = result.replace(/&amp;/g, '&');
264
+ result = result.replace(/&quot;/g, '"');
265
+ result = result.replace(/&#39;/g, "'");
266
+ result = result.replace(/&#x27;/g, "'");
267
+ result = result.replace(/&#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10)));
268
+ // Clean up whitespace
269
+ result = result.replace(/[ \t]+/g, ' ');
270
+ result = result.replace(/\n[ \t]+/g, '\n');
271
+ result = result.replace(/[ \t]+\n/g, '\n');
272
+ result = result.replace(/\n{3,}/g, '\n\n');
273
+ result = result.trim();
274
+ // URLs: Color any URLs (http://, https://, mailto:) as blue
275
+ const urlPattern = /(https?:\/\/[^\s<>"',;:!?)\]\)]+|mailto:[^\s<>"',;:!?)\]\)]+)/gi;
276
+ result = result.replace(urlPattern, (url) => {
277
+ return ansi.format(url, ['blue']);
278
+ });
279
+ return result;
280
+ }
281
+ async function displayManPage(terminal, content, documentName) {
282
+ const lines = content.split('\n');
283
+ let currentLine = 0;
284
+ let horizontalOffset = 0;
285
+ let keyListener = null;
286
+ let linesRendered = 0;
287
+ terminal.unlisten();
288
+ terminal.write('\n');
289
+ terminal.write(ansi.cursor.hide);
290
+ const rows = terminal.rows;
291
+ const displayRows = rows - 1;
292
+ const render = () => {
293
+ const cols = terminal.cols;
294
+ const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
295
+ const getVisibleSlice = (line, offset) => {
296
+ const visibleLen = stripAnsi(line).length;
297
+ if (offset < 0)
298
+ offset = 0;
299
+ if (offset > visibleLen)
300
+ offset = visibleLen;
301
+ let visible = 0;
302
+ let result = '';
303
+ let inEscape = false;
304
+ let charsSkipped = 0;
305
+ for (const char of line) {
306
+ if (char === '\x1b')
307
+ inEscape = true;
308
+ if (inEscape) {
309
+ if (charsSkipped >= offset) {
310
+ result += char;
311
+ }
312
+ if (/[a-zA-Z]/.test(char))
313
+ inEscape = false;
314
+ }
315
+ else {
316
+ if (charsSkipped < offset) {
317
+ charsSkipped++;
318
+ }
319
+ else {
320
+ if (visible >= cols)
321
+ break;
322
+ result += char;
323
+ visible++;
324
+ }
325
+ }
326
+ }
327
+ return result;
328
+ };
329
+ const maxLine = Math.max(0, lines.length - displayRows);
330
+ if (currentLine > maxLine)
331
+ currentLine = maxLine;
332
+ if (currentLine < 0)
333
+ currentLine = 0;
334
+ const maxLineLength = Math.max(...lines.map(l => stripAnsi(l).length), 0);
335
+ const maxHorizontalOffset = Math.max(0, maxLineLength - cols);
336
+ if (horizontalOffset > maxHorizontalOffset)
337
+ horizontalOffset = maxHorizontalOffset;
338
+ if (horizontalOffset < 0)
339
+ horizontalOffset = 0;
340
+ if (linesRendered > 0)
341
+ terminal.write(ansi.cursor.up(linesRendered));
342
+ const endLine = Math.min(currentLine + displayRows, lines.length);
343
+ linesRendered = 0;
344
+ for (let i = currentLine; i < endLine; i++) {
345
+ terminal.write(ansi.erase.inLine(2));
346
+ const line = getVisibleSlice(lines[i] || '', horizontalOffset);
347
+ terminal.write(line);
348
+ linesRendered++;
349
+ if (i < endLine - 1)
350
+ terminal.write('\n');
351
+ }
352
+ for (let i = endLine - currentLine; i < displayRows; i++) {
353
+ terminal.write('\n');
354
+ terminal.write(ansi.erase.inLine(2));
355
+ linesRendered++;
356
+ }
357
+ const percentage = lines.length > 0 ? Math.round(((endLine / lines.length) * 100)) : 100;
358
+ const statusLine = `-- ${documentName} ${currentLine + 1}-${endLine} / ${lines.length} (${percentage}%)`;
359
+ terminal.write('\n');
360
+ terminal.write(ansi.erase.inLine(2));
361
+ terminal.write(getVisibleSlice(statusLine, 0));
362
+ linesRendered++;
363
+ };
364
+ render();
365
+ await new Promise((resolve) => {
366
+ keyListener = terminal.onKey(async ({ domEvent }) => {
367
+ const keyName = domEvent.key;
368
+ switch (keyName) {
369
+ case 'q':
370
+ case 'Q':
371
+ case 'Escape':
372
+ if (keyListener) {
373
+ keyListener.dispose();
374
+ keyListener = null;
375
+ }
376
+ terminal.write(ansi.cursor.show);
377
+ terminal.write('\n');
378
+ terminal.listen();
379
+ resolve();
380
+ return;
381
+ case 'ArrowUp':
382
+ if (currentLine > 0) {
383
+ currentLine--;
384
+ render();
385
+ }
386
+ break;
387
+ case 'ArrowDown':
388
+ case 'Enter':
389
+ currentLine++;
390
+ render();
391
+ break;
392
+ case 'ArrowLeft':
393
+ horizontalOffset = Math.max(0, horizontalOffset - Math.floor(terminal.cols / 2));
394
+ render();
395
+ break;
396
+ case 'ArrowRight':
397
+ horizontalOffset += Math.floor(terminal.cols / 2);
398
+ render();
399
+ break;
400
+ case 'PageDown':
401
+ case ' ':
402
+ currentLine = Math.min(currentLine + displayRows, Math.max(0, lines.length - displayRows));
403
+ render();
404
+ break;
405
+ case 'PageUp':
406
+ case 'b':
407
+ case 'B':
408
+ currentLine = Math.max(0, currentLine - displayRows);
409
+ render();
410
+ break;
411
+ case 'Home':
412
+ case 'g':
413
+ currentLine = 0;
414
+ render();
415
+ break;
416
+ case 'End':
417
+ case 'G':
418
+ currentLine = Math.max(0, lines.length - displayRows);
419
+ render();
420
+ break;
421
+ }
422
+ });
423
+ });
424
+ }
425
+ export function createCommand(kernel, shell, terminal) {
426
+ return new TerminalCommand({
427
+ command: 'man',
428
+ description: 'Display manual pages',
429
+ kernel,
430
+ shell,
431
+ terminal,
432
+ run: async (pid, argv) => {
433
+ const process = kernel.processes.get(pid);
434
+ if (!process)
435
+ return 1;
436
+ if (argv.length > 0 && (argv[0] === '--help' || argv[0] === '-h')) {
437
+ printUsage(process, terminal);
438
+ return 0;
439
+ }
440
+ let whereArg;
441
+ let topicPath;
442
+ let listTopicsFlag = false;
443
+ for (let i = 0; i < argv.length; i++) {
444
+ const arg = argv[i];
445
+ if (arg === undefined)
446
+ continue;
447
+ if (arg === '--where') {
448
+ if (i + 1 < argv.length) {
449
+ i++;
450
+ whereArg = argv[i];
451
+ }
452
+ else {
453
+ await writelnStderr(process, terminal, 'man: missing argument to --where');
454
+ return 1;
455
+ }
456
+ }
457
+ else if (arg === '--list' || arg === '-l') {
458
+ listTopicsFlag = true;
459
+ }
460
+ else if (!arg.startsWith('-')) {
461
+ topicPath = arg;
462
+ }
463
+ }
464
+ if (!topicPath) {
465
+ topicPath = '@ecmaos/kernel';
466
+ }
467
+ const pkgPath = parsePackagePath(topicPath);
468
+ if (!pkgPath) {
469
+ await writelnStderr(process, terminal, `man: invalid package path: ${topicPath}`);
470
+ return 1;
471
+ }
472
+ const manpaths = resolveManPath(shell, whereArg);
473
+ for (const manpath of manpaths) {
474
+ const packageDir = buildPackagePath(manpath, pkgPath);
475
+ if (!(await shell.context.fs.promises.exists(packageDir)))
476
+ continue;
477
+ await parseMetadata(shell.context.fs, packageDir);
478
+ if (listTopicsFlag) {
479
+ const topics = await listTopics(shell.context.fs, packageDir);
480
+ const packageName = pkgPath.scope ? `@${pkgPath.scope}/${pkgPath.package}` : pkgPath.package;
481
+ if (topics.length === 0) {
482
+ terminal.writeln(`${packageName}: no topics available`);
483
+ }
484
+ else {
485
+ terminal.writeln(`${packageName}:`);
486
+ for (const topic of topics) {
487
+ terminal.writeln(` ${topic}`);
488
+ }
489
+ }
490
+ return 0;
491
+ }
492
+ if (!pkgPath.topic) {
493
+ const indexFile = await findDocument(shell.context.fs, packageDir);
494
+ if (indexFile) {
495
+ const content = await shell.context.fs.promises.readFile(indexFile, 'utf-8');
496
+ const ext = path.extname(indexFile);
497
+ let processedContent = content;
498
+ if (ext === '.md') {
499
+ processedContent = convertMarkdownToText(content, pkgPath, manpath);
500
+ }
501
+ else if (ext === '.html') {
502
+ processedContent = convertHtmlToText(content, pkgPath, manpath);
503
+ }
504
+ const documentName = pkgPath.scope
505
+ ? `@${pkgPath.scope}/${pkgPath.package}`
506
+ : pkgPath.package;
507
+ await displayManPage(terminal, processedContent, documentName);
508
+ }
509
+ else {
510
+ const topics = await listTopics(shell.context.fs, packageDir);
511
+ const packageName = pkgPath.scope ? `@${pkgPath.scope}/${pkgPath.package}` : pkgPath.package;
512
+ if (topics.length === 0) {
513
+ terminal.writeln(`${packageName}: no topics available`);
514
+ }
515
+ else {
516
+ const exampleTopic = topics[0];
517
+ terminal.writeln(`${kernel.i18n.t('coreutils.man.noIndexFound', 'No index found, try a topic:')} man ${packageName}/${exampleTopic}`);
518
+ terminal.writeln(`${packageName} ${kernel.i18n.t('topics')}:`);
519
+ for (const topic of topics)
520
+ terminal.writeln(` ${topic}`);
521
+ }
522
+ }
523
+ return 0;
524
+ }
525
+ const docFile = await findDocument(shell.context.fs, packageDir, pkgPath.topic);
526
+ if (!docFile)
527
+ continue;
528
+ try {
529
+ const content = await shell.context.fs.promises.readFile(docFile, 'utf-8');
530
+ const ext = path.extname(docFile);
531
+ let processedContent = content;
532
+ if (ext === '.md') {
533
+ processedContent = convertMarkdownToText(content, pkgPath, manpath);
534
+ }
535
+ else if (ext === '.html') {
536
+ processedContent = convertHtmlToText(content, pkgPath, manpath);
537
+ }
538
+ const documentName = pkgPath.scope
539
+ ? `@${pkgPath.scope}/${pkgPath.package}/${pkgPath.topic}`
540
+ : `${pkgPath.package}/${pkgPath.topic}`;
541
+ await displayManPage(terminal, processedContent, documentName);
542
+ return 0;
543
+ }
544
+ catch (error) {
545
+ await writelnStderr(process, terminal, `man: error reading document: ${error instanceof Error ? error.message : 'Unknown error'}`);
546
+ return 1;
547
+ }
548
+ }
549
+ await writelnStderr(process, terminal, `man: no manual entry for ${topicPath}`);
550
+ return 1;
551
+ }
552
+ });
553
+ }
554
+ //# sourceMappingURL=man.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"man.js","sourceRoot":"","sources":["../../src/commands/man.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import path from 'path';
2
2
  import { TerminalCommand } from '../shared/terminal-command.js';
3
- import { writelnStdout, writelnStderr } from '../shared/helpers.js';
3
+ import { writelnStderr } from '../shared/helpers.js';
4
4
  function printUsage(process, terminal) {
5
5
  const usage = `Usage: mkdir [OPTION]... DIRECTORY...
6
6
  Create the DIRECTORY(ies), if they do not already exist.
7
7
 
8
8
  --help display this help and exit`;
9
- writelnStdout(process, terminal, usage);
9
+ writelnStderr(process, terminal, usage);
10
10
  }
11
11
  export function createCommand(kernel, shell, terminal) {
12
12
  return new TerminalCommand({
@@ -1 +1 @@
1
- {"version":3,"file":"mkdir.js","sourceRoot":"","sources":["../../src/commands/mkdir.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,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;;;qCAGqB,CAAA;IACnC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB;IAC5E,OAAO,IAAI,eAAe,CAAC;QACzB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,oBAAoB;QACjC,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,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAA;gBAChE,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,0CAA0C,CAAC,CAAA;gBAClF,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAQ;gBAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;gBAErE,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACjD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,MAAM,KAAK,YAAY,EAAE,CAAC,CAAA;oBAC3E,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"}
1
+ {"version":3,"file":"mkdir.js","sourceRoot":"","sources":["../../src/commands/mkdir.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,SAAS,UAAU,CAAC,OAA4B,EAAE,QAAkB;IAClE,MAAM,KAAK,GAAG;;;qCAGqB,CAAA;IACnC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB;IAC5E,OAAO,IAAI,eAAe,CAAC;QACzB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,oBAAoB;QACjC,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,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAA;gBAChE,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,0CAA0C,CAAC,CAAA;gBAClF,OAAO,CAAC,CAAA;YACV,CAAC;YAED,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAQ;gBAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;gBAErE,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACjD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBAC3E,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,MAAM,KAAK,YAAY,EAAE,CAAC,CAAA;oBAC3E,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=mktemp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mktemp.d.ts","sourceRoot":"","sources":["../../src/commands/mktemp.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;AA2E/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA6J/F"}