@ecmaos/coreutils 0.1.1 → 0.1.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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +168 -0
- package/dist/commands/cd.d.ts.map +1 -1
- package/dist/commands/cd.js +1 -7
- package/dist/commands/cd.js.map +1 -1
- package/dist/commands/ln.d.ts +4 -0
- package/dist/commands/ln.d.ts.map +1 -0
- package/dist/commands/ln.js +104 -0
- package/dist/commands/ln.js.map +1 -0
- package/dist/commands/ls.d.ts.map +1 -1
- package/dist/commands/ls.js +91 -11
- package/dist/commands/ls.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/cd.ts +1 -8
- package/src/commands/ln.ts +108 -0
- package/src/commands/ls.ts +85 -11
- package/src/index.ts +3 -0
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,173 @@
|
|
|
1
1
|
# @ecmaos/coreutils
|
|
2
2
|
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ae8f619: OVERVIEW
|
|
8
|
+
|
|
9
|
+
Total Commits: 5
|
|
10
|
+
Files Changed: 56 files
|
|
11
|
+
Additions: +1,632 lines
|
|
12
|
+
Deletions: -539 lines
|
|
13
|
+
Net Change: +1,093 lines
|
|
14
|
+
|
|
15
|
+
***
|
|
16
|
+
|
|
17
|
+
COMMIT DETAILS
|
|
18
|
+
|
|
19
|
+
1. c6f2d9c - docs: Update NEWS and README files; add tilde expansion feature in shell commands
|
|
20
|
+
|
|
21
|
+
Type: Documentation & Enhancement
|
|
22
|
+
Date: Wed Dec 31 11:52:52 2025
|
|
23
|
+
|
|
24
|
+
Changes:
|
|
25
|
+
|
|
26
|
+
- Updated NEWS.md and README.md with new features and improvements
|
|
27
|
+
- Added tilde expansion feature in shell commands (~ expands to home directory)
|
|
28
|
+
- Enhanced filesystem type recognition
|
|
29
|
+
- Improved terminal command handling
|
|
30
|
+
- Removed 292 lines from core/kernel/src/tree/lib/commands/index.ts (edit command moved to separate package)
|
|
31
|
+
- Added shell functionality in core/kernel/src/tree/shell.ts (71 new lines)
|
|
32
|
+
- Enhanced terminal and filesystem modules
|
|
33
|
+
|
|
34
|
+
Files Modified: 9 files (+166, -327)
|
|
35
|
+
|
|
36
|
+
***
|
|
37
|
+
|
|
38
|
+
2. b4454a1 - chore: Bump turbo package version from 2.5.4 to 2.7.2
|
|
39
|
+
|
|
40
|
+
Type: Dependency Update
|
|
41
|
+
|
|
42
|
+
Changes:
|
|
43
|
+
|
|
44
|
+
- Updated Turbo monorepo tool from version 2.5.4 to 2.7.2
|
|
45
|
+
- Updated package.json and pnpm-lock.yaml files
|
|
46
|
+
|
|
47
|
+
Impact: Infrastructure improvement for better monorepo tooling support
|
|
48
|
+
|
|
49
|
+
***
|
|
50
|
+
|
|
51
|
+
3. 6660f4c - chore: Update pnpm-lock.yaml files across multiple applications and modules
|
|
52
|
+
|
|
53
|
+
Type: Dependency Maintenance
|
|
54
|
+
|
|
55
|
+
Changes:
|
|
56
|
+
|
|
57
|
+
- Cleaned up outdated checksum entries in pnpm-lock.yaml files
|
|
58
|
+
- Ensured consistency in package versions across the monorepo
|
|
59
|
+
- Updated lockfiles in:
|
|
60
|
+
- Multiple apps (ai, boilerplate, code, news, python, webamp)
|
|
61
|
+
- Core packages (bios, jaffa, kernel, metal, swapi, types, utils)
|
|
62
|
+
- Device packages (audio, battery, bluetooth, echo, gamepad, geo, gpu, hid, midi, presentation, sensors, serial, usb, webgl)
|
|
63
|
+
- Modules and utils
|
|
64
|
+
|
|
65
|
+
Impact: Improved dependency consistency and resolved potential checksum issues
|
|
66
|
+
|
|
67
|
+
***
|
|
68
|
+
|
|
69
|
+
4. 01da80e - feat: improve and move edit command to its own package
|
|
70
|
+
|
|
71
|
+
Type: Feature (Major Refactor)
|
|
72
|
+
Date: Wed Dec 31 12:48:45 2025
|
|
73
|
+
|
|
74
|
+
Changes:
|
|
75
|
+
|
|
76
|
+
- Extracted edit command from kernel into standalone apps/edit package
|
|
77
|
+
- Created comprehensive editor implementation with:
|
|
78
|
+
- Multiple editing modes: normal, insert, replace, command
|
|
79
|
+
- File operations support
|
|
80
|
+
- Renderer for terminal-based editing
|
|
81
|
+
- Type definitions for editor state
|
|
82
|
+
- Removed 292 lines of edit command code from core/kernel/src/tree/lib/commands/index.ts
|
|
83
|
+
- Added build configuration (build.cjs)
|
|
84
|
+
- Updated package dependencies
|
|
85
|
+
|
|
86
|
+
Files Modified: 14 files (+1,054, -304)
|
|
87
|
+
|
|
88
|
+
Impact: Better separation of concerns, improved maintainability, and enhanced editor functionality
|
|
89
|
+
|
|
90
|
+
***
|
|
91
|
+
|
|
92
|
+
5. 90072ec - feat: add 'ln' command and enhance 'ls' command to support symbolic and hard link information
|
|
93
|
+
|
|
94
|
+
Type: Feature
|
|
95
|
+
Date: Wed Dec 31 13:11:53 2025
|
|
96
|
+
|
|
97
|
+
Changes:
|
|
98
|
+
|
|
99
|
+
- Added new ln command for creating symbolic and hard links (core/utils/src/commands/ln.ts - 108 lines)
|
|
100
|
+
- Enhanced ls command to display link information:
|
|
101
|
+
- Shows link count for files
|
|
102
|
+
- Displays target path for symbolic links
|
|
103
|
+
- Improved file listing with link details
|
|
104
|
+
- Updated command exports in core/utils/src/index.ts
|
|
105
|
+
|
|
106
|
+
Files Modified: 3 files (+196, -11)
|
|
107
|
+
|
|
108
|
+
Impact: Better filesystem management capabilities, improved visibility into file relationships
|
|
109
|
+
|
|
110
|
+
***
|
|
111
|
+
|
|
112
|
+
SUMMARY BY CATEGORY
|
|
113
|
+
|
|
114
|
+
Features:
|
|
115
|
+
|
|
116
|
+
- Edit Command Package: Extracted and improved editor into standalone package with multiple modes
|
|
117
|
+
- Link Command: New ln command for creating symbolic and hard links
|
|
118
|
+
- Enhanced LS: Improved ls command with link information display
|
|
119
|
+
- Tilde Expansion: Shell command support for ~ home directory expansion
|
|
120
|
+
|
|
121
|
+
Documentation:
|
|
122
|
+
|
|
123
|
+
- Updated NEWS and README files with latest changes
|
|
124
|
+
|
|
125
|
+
Infrastructure:
|
|
126
|
+
|
|
127
|
+
- Turbo version bump (2.5.4 -> 2.7.2)
|
|
128
|
+
- Dependency lockfile cleanup across entire monorepo
|
|
129
|
+
|
|
130
|
+
Code Quality:
|
|
131
|
+
|
|
132
|
+
- Better separation of concerns (edit command extraction)
|
|
133
|
+
- Improved filesystem type recognition
|
|
134
|
+
- Enhanced terminal command handling
|
|
135
|
+
|
|
136
|
+
***
|
|
137
|
+
|
|
138
|
+
AFFECTED PACKAGES
|
|
139
|
+
|
|
140
|
+
Core Packages:
|
|
141
|
+
|
|
142
|
+
- @ecmaos/kernel - Shell, terminal, filesystem enhancements
|
|
143
|
+
- @ecmaos/types - Shell type updates
|
|
144
|
+
- @ecmaos/utils - New ln command, enhanced ls command
|
|
145
|
+
|
|
146
|
+
Applications:
|
|
147
|
+
|
|
148
|
+
- apps/edit - New standalone editor package
|
|
149
|
+
|
|
150
|
+
Dependencies:
|
|
151
|
+
|
|
152
|
+
- All packages: Lockfile updates for consistency
|
|
153
|
+
|
|
154
|
+
***
|
|
155
|
+
|
|
156
|
+
BREAKING CHANGES
|
|
157
|
+
|
|
158
|
+
None identified. All changes appear to be additive or internal refactoring.
|
|
159
|
+
|
|
160
|
+
***
|
|
161
|
+
|
|
162
|
+
MIGRATION NOTES
|
|
163
|
+
|
|
164
|
+
- The edit command has been moved from the kernel to apps/edit package. Any code referencing the edit command in the kernel should be updated to use the new package.
|
|
165
|
+
- The ls command now shows additional link information, which may affect scripts parsing its output.
|
|
166
|
+
- Shell commands now support tilde expansion (~), which may affect scripts that previously handled paths differently.
|
|
167
|
+
|
|
168
|
+
- Updated dependencies [ae8f619]
|
|
169
|
+
- @ecmaos/types@0.4.2
|
|
170
|
+
|
|
3
171
|
## 0.1.1
|
|
4
172
|
|
|
5
173
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd.d.ts","sourceRoot":"","sources":["../../src/commands/cd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,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,
|
|
1
|
+
{"version":3,"file":"cd.d.ts","sourceRoot":"","sources":["../../src/commands/cd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,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,CAoB/F"}
|
package/dist/commands/cd.js
CHANGED
|
@@ -12,13 +12,7 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
12
12
|
{ name: 'path', type: String, typeLabel: '{underline path}', defaultOption: true, description: 'The path to the directory to change to' }
|
|
13
13
|
],
|
|
14
14
|
run: async (argv) => {
|
|
15
|
-
|
|
16
|
-
if (destination && destination.startsWith('~')) {
|
|
17
|
-
const home = shell.env.get('HOME');
|
|
18
|
-
if (home) {
|
|
19
|
-
destination = destination.replace(/^~(?=$|\/)/, home);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
15
|
+
const destination = argv.path || shell.cwd;
|
|
22
16
|
const fullPath = destination ? path.resolve(shell.cwd, destination) : shell.cwd;
|
|
23
17
|
await shell.context.fs.promises.access(fullPath);
|
|
24
18
|
shell.cwd = fullPath;
|
package/dist/commands/cd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../src/commands/cd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB;IAC5E,OAAO,IAAI,eAAe,CAAC;QACzB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,oCAAoC;QACjD,MAAM;QACN,KAAK;QACL,QAAQ;QACR,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;YAC3E,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE;SAC1I;QACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,
|
|
1
|
+
{"version":3,"file":"cd.js","sourceRoot":"","sources":["../../src/commands/cd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAY,EAAE,QAAkB;IAC5E,OAAO,IAAI,eAAe,CAAC;QACzB,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,oCAAoC;QACjD,MAAM;QACN,KAAK;QACL,QAAQ;QACR,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;YAC3E,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE;SAC1I;QACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,MAAM,WAAW,GAAI,IAAI,CAAC,IAAe,IAAI,KAAK,CAAC,GAAG,CAAA;YACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;YAC/E,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAChD,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAA;YACpB,YAAY,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC9D,OAAO,CAAC,CAAA;QACV,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ln.d.ts","sourceRoot":"","sources":["../../src/commands/ln.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAoG/F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { TerminalCommand } from '../shared/terminal-command.js';
|
|
4
|
+
import { writelnStdout, writelnStderr } from '../shared/helpers.js';
|
|
5
|
+
export function createCommand(kernel, shell, terminal) {
|
|
6
|
+
return new TerminalCommand({
|
|
7
|
+
command: 'ln',
|
|
8
|
+
description: 'Create links between files',
|
|
9
|
+
kernel,
|
|
10
|
+
shell,
|
|
11
|
+
terminal,
|
|
12
|
+
options: [
|
|
13
|
+
{ name: 'help', type: Boolean, description: kernel.i18n.t('Display help') },
|
|
14
|
+
{ name: 'symbolic', type: Boolean, alias: 's', description: 'Create symbolic links instead of hard links' },
|
|
15
|
+
{ name: 'force', type: Boolean, alias: 'f', description: 'Remove existing destination files' },
|
|
16
|
+
{ name: 'verbose', type: Boolean, alias: 'v', description: 'Print name of each linked file' },
|
|
17
|
+
{ name: 'args', type: String, multiple: true, defaultOption: true, description: 'The target and optional link name' }
|
|
18
|
+
],
|
|
19
|
+
run: async (argv, process) => {
|
|
20
|
+
const args = argv.args || [];
|
|
21
|
+
const symbolic = argv.symbolic || false;
|
|
22
|
+
const force = argv.force || false;
|
|
23
|
+
const verbose = argv.verbose || false;
|
|
24
|
+
if (args.length === 0) {
|
|
25
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing file operand'));
|
|
26
|
+
await writelnStderr(process, terminal, 'Try \'ln --help\' for more information.');
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
const target = args[0];
|
|
30
|
+
if (!target) {
|
|
31
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing file operand'));
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
const targetPath = path.resolve(shell.cwd, target);
|
|
35
|
+
let targetStats;
|
|
36
|
+
try {
|
|
37
|
+
targetStats = await shell.context.fs.promises.stat(targetPath);
|
|
38
|
+
if (!targetStats.isFile() && !targetStats.isDirectory()) {
|
|
39
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: invalid target`));
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
if (!symbolic && targetStats.isDirectory()) {
|
|
43
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: hard link not allowed for directory`));
|
|
44
|
+
return 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: No such file or directory`));
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
let linkName;
|
|
52
|
+
if (args.length === 1) {
|
|
53
|
+
linkName = path.join(shell.cwd, path.basename(target));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const linkNameInput = args[1];
|
|
57
|
+
if (!linkNameInput) {
|
|
58
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing link name'));
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
const linkNamePath = path.resolve(shell.cwd, linkNameInput);
|
|
62
|
+
const linkNameStats = await shell.context.fs.promises.stat(linkNamePath).catch(() => null);
|
|
63
|
+
if (linkNameStats?.isDirectory()) {
|
|
64
|
+
linkName = path.join(linkNamePath, path.basename(target));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
linkName = linkNamePath;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const linkExists = await shell.context.fs.promises.stat(linkName).catch(() => null);
|
|
72
|
+
if (linkExists) {
|
|
73
|
+
if (force) {
|
|
74
|
+
if (linkExists.isDirectory()) {
|
|
75
|
+
await shell.context.fs.promises.rmdir(linkName);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
await shell.context.fs.promises.unlink(linkName);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${linkName}: File exists`));
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (symbolic) {
|
|
87
|
+
await shell.context.fs.promises.symlink(targetPath, linkName);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
await shell.context.fs.promises.link(targetPath, linkName);
|
|
91
|
+
}
|
|
92
|
+
if (verbose) {
|
|
93
|
+
await writelnStdout(process, terminal, linkName);
|
|
94
|
+
}
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${error.message}`));
|
|
99
|
+
return 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=ln.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ln.js","sourceRoot":"","sources":["../../src/commands/ln.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAW,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAG/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe,CA6N/F"}
|
package/dist/commands/ls.js
CHANGED
|
@@ -36,8 +36,10 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
36
36
|
type = 's';
|
|
37
37
|
return type;
|
|
38
38
|
};
|
|
39
|
-
const getModeString = (stats) => {
|
|
40
|
-
|
|
39
|
+
const getModeString = (stats, targetStats) => {
|
|
40
|
+
const type = getModeType(stats);
|
|
41
|
+
const modeStats = targetStats || stats;
|
|
42
|
+
const permissions = (Number(modeStats.mode) & parseInt('777', 8)).toString(8).padStart(3, '0')
|
|
41
43
|
.replace(/0/g, '---')
|
|
42
44
|
.replace(/1/g, '--' + chalk.red('x'))
|
|
43
45
|
.replace(/2/g, '-' + chalk.yellow('w') + '-')
|
|
@@ -46,6 +48,7 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
46
48
|
.replace(/5/g, chalk.green('r') + '-' + chalk.red('x'))
|
|
47
49
|
.replace(/6/g, chalk.green('r') + chalk.yellow('w') + '-')
|
|
48
50
|
.replace(/7/g, chalk.green('r') + chalk.yellow('w') + chalk.red('x'));
|
|
51
|
+
return type + permissions;
|
|
49
52
|
};
|
|
50
53
|
const getTimestampString = (timestamp) => {
|
|
51
54
|
const diff = (new Date().getTime() - timestamp.getTime()) / 1000;
|
|
@@ -69,14 +72,42 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
69
72
|
else
|
|
70
73
|
return chalk.gray(`${owner?.username || stats.uid}:${owner?.username || stats.gid}`);
|
|
71
74
|
};
|
|
75
|
+
const getLinkInfo = (linkTarget, linkStats, stats) => {
|
|
76
|
+
if (linkTarget || (linkStats && linkStats.isSymbolicLink()))
|
|
77
|
+
return kernel.i18n.t('Symbolic Link');
|
|
78
|
+
if (stats && stats.nlink > 1)
|
|
79
|
+
return kernel.i18n.t('Hard Link');
|
|
80
|
+
return '';
|
|
81
|
+
};
|
|
72
82
|
const filesMap = await Promise.all(entries
|
|
73
83
|
.map(async (entry) => {
|
|
74
84
|
const target = path.resolve(fullPath, entry);
|
|
75
85
|
try {
|
|
76
|
-
|
|
86
|
+
let linkTarget = null;
|
|
87
|
+
let linkStats = null;
|
|
88
|
+
let stats = null;
|
|
89
|
+
try {
|
|
90
|
+
linkStats = await shell.context.fs.promises.lstat(target);
|
|
91
|
+
if (linkStats.isSymbolicLink()) {
|
|
92
|
+
try {
|
|
93
|
+
linkTarget = await shell.context.fs.promises.readlink(target);
|
|
94
|
+
stats = await shell.context.fs.promises.stat(target);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
stats = linkStats;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
stats = linkStats;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
stats = await shell.context.fs.promises.stat(target);
|
|
106
|
+
}
|
|
107
|
+
return { target, name: entry, stats, linkStats, linkTarget };
|
|
77
108
|
}
|
|
78
109
|
catch {
|
|
79
|
-
return { target, name: entry, stats: null };
|
|
110
|
+
return { target, name: entry, stats: null, linkStats: null, linkTarget: null };
|
|
80
111
|
}
|
|
81
112
|
}));
|
|
82
113
|
const files = filesMap
|
|
@@ -86,10 +117,31 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
86
117
|
.map(async (entry) => {
|
|
87
118
|
const target = path.resolve(fullPath, entry);
|
|
88
119
|
try {
|
|
89
|
-
|
|
120
|
+
let linkTarget = null;
|
|
121
|
+
let linkStats = null;
|
|
122
|
+
let stats = null;
|
|
123
|
+
try {
|
|
124
|
+
linkStats = await shell.context.fs.promises.lstat(target);
|
|
125
|
+
if (linkStats.isSymbolicLink()) {
|
|
126
|
+
try {
|
|
127
|
+
linkTarget = await shell.context.fs.promises.readlink(target);
|
|
128
|
+
stats = await shell.context.fs.promises.stat(target);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
stats = linkStats;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
stats = linkStats;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
stats = await shell.context.fs.promises.stat(target);
|
|
140
|
+
}
|
|
141
|
+
return { target, name: entry, stats, linkStats, linkTarget };
|
|
90
142
|
}
|
|
91
143
|
catch {
|
|
92
|
-
return { target, name: entry, stats: null };
|
|
144
|
+
return { target, name: entry, stats: null, linkStats: null, linkTarget: null };
|
|
93
145
|
}
|
|
94
146
|
}));
|
|
95
147
|
const directories = directoryMap
|
|
@@ -99,22 +151,45 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
99
151
|
const data = [
|
|
100
152
|
['Name', 'Size', 'Modified', 'Mode', 'Owner', 'Info'],
|
|
101
153
|
...directories.sort((a, b) => a.name.localeCompare(b.name)).map(directory => {
|
|
154
|
+
const displayName = directory.linkTarget
|
|
155
|
+
? `${directory.name} ${chalk.cyan('⟶')} ${directory.linkTarget}`
|
|
156
|
+
: directory.name;
|
|
157
|
+
const modeStats = directory.linkStats && directory.linkStats.isSymbolicLink()
|
|
158
|
+
? directory.linkStats
|
|
159
|
+
: directory.stats;
|
|
160
|
+
const modeString = modeStats
|
|
161
|
+
? getModeString(modeStats, directory.linkStats?.isSymbolicLink() ? directory.stats : undefined)
|
|
162
|
+
: '';
|
|
163
|
+
const linkInfo = getLinkInfo(directory.linkTarget, directory.linkStats, directory.stats);
|
|
102
164
|
return [
|
|
103
|
-
|
|
165
|
+
displayName,
|
|
104
166
|
'',
|
|
105
167
|
directory.stats ? getTimestampString(directory.stats.mtime) : '',
|
|
106
|
-
|
|
168
|
+
modeString,
|
|
107
169
|
directory.stats ? getOwnerString(directory.stats) : '',
|
|
170
|
+
linkInfo
|
|
108
171
|
];
|
|
109
172
|
}),
|
|
110
173
|
...files.sort((a, b) => a.name.localeCompare(b.name)).map(file => {
|
|
174
|
+
const displayName = file.linkTarget
|
|
175
|
+
? `${file.name} ${chalk.cyan('⟶')} ${file.linkTarget}`
|
|
176
|
+
: file.name;
|
|
177
|
+
const modeStats = file.linkStats && file.linkStats.isSymbolicLink()
|
|
178
|
+
? file.linkStats
|
|
179
|
+
: file.stats;
|
|
180
|
+
const modeString = modeStats
|
|
181
|
+
? getModeString(modeStats, file.linkStats?.isSymbolicLink() ? file.stats : undefined)
|
|
182
|
+
: '';
|
|
111
183
|
return [
|
|
112
|
-
|
|
184
|
+
displayName,
|
|
113
185
|
file.stats ? humanFormat(file.stats.size) : '',
|
|
114
186
|
file.stats ? getTimestampString(file.stats.mtime) : '',
|
|
115
|
-
|
|
187
|
+
modeString,
|
|
116
188
|
file.stats ? getOwnerString(file.stats) : '',
|
|
117
189
|
(() => {
|
|
190
|
+
const linkInfo = getLinkInfo(file.linkTarget, file.linkStats, file.stats);
|
|
191
|
+
if (linkInfo)
|
|
192
|
+
return linkInfo;
|
|
118
193
|
if (descriptions.has(path.resolve(fullPath, file.name)))
|
|
119
194
|
return descriptions.get(path.resolve(fullPath, file.name));
|
|
120
195
|
const ext = file.name.split('.').pop();
|
|
@@ -144,7 +219,12 @@ export function createCommand(kernel, shell, terminal) {
|
|
|
144
219
|
.map((cell, index) => {
|
|
145
220
|
const paddedCell = cell.padEnd(columnWidths?.[index] ?? 0);
|
|
146
221
|
if (index === 0 && rowIndex > 0) {
|
|
147
|
-
|
|
222
|
+
if (row[3]?.startsWith('d'))
|
|
223
|
+
return chalk.blue(paddedCell);
|
|
224
|
+
else if (row[3]?.startsWith('l'))
|
|
225
|
+
return chalk.cyan(paddedCell);
|
|
226
|
+
else
|
|
227
|
+
return chalk.green(paddedCell);
|
|
148
228
|
}
|
|
149
229
|
else
|
|
150
230
|
return rowIndex === 0 ? chalk.bold(paddedCell) : chalk.gray(paddedCell);
|
package/dist/commands/ls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export { createCommand as createCd } from './commands/cd.js';
|
|
|
8
8
|
export { createCommand as createChmod } from './commands/chmod.js';
|
|
9
9
|
export { createCommand as createCp } from './commands/cp.js';
|
|
10
10
|
export { createCommand as createEcho } from './commands/echo.js';
|
|
11
|
+
export { createCommand as createLn } from './commands/ln.js';
|
|
11
12
|
export { createCommand as createLs } from './commands/ls.js';
|
|
12
13
|
export { createCommand as createMkdir } from './commands/mkdir.js';
|
|
13
14
|
export { createCommand as createMv } from './commands/mv.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmB5F,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAElE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAiBtH;AAGD,OAAO,EAAE,iBAAiB,IAAI,gBAAgB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { createCommand as createCd } from './commands/cd.js';
|
|
|
7
7
|
import { createCommand as createChmod } from './commands/chmod.js';
|
|
8
8
|
import { createCommand as createCp } from './commands/cp.js';
|
|
9
9
|
import { createCommand as createEcho } from './commands/echo.js';
|
|
10
|
+
import { createCommand as createLn } from './commands/ln.js';
|
|
10
11
|
import { createCommand as createLs } from './commands/ls.js';
|
|
11
12
|
import { createCommand as createMkdir } from './commands/mkdir.js';
|
|
12
13
|
import { createCommand as createMv } from './commands/mv.js';
|
|
@@ -21,6 +22,7 @@ export { createCommand as createCd } from './commands/cd.js';
|
|
|
21
22
|
export { createCommand as createChmod } from './commands/chmod.js';
|
|
22
23
|
export { createCommand as createCp } from './commands/cp.js';
|
|
23
24
|
export { createCommand as createEcho } from './commands/echo.js';
|
|
25
|
+
export { createCommand as createLn } from './commands/ln.js';
|
|
24
26
|
export { createCommand as createLs } from './commands/ls.js';
|
|
25
27
|
export { createCommand as createMkdir } from './commands/mkdir.js';
|
|
26
28
|
export { createCommand as createMv } from './commands/mv.js';
|
|
@@ -40,6 +42,7 @@ export function createAllCommands(kernel, shell, terminal) {
|
|
|
40
42
|
chmod: createChmod(kernel, shell, terminal),
|
|
41
43
|
cp: createCp(kernel, shell, terminal),
|
|
42
44
|
echo: createEcho(kernel, shell, terminal),
|
|
45
|
+
ln: createLn(kernel, shell, terminal),
|
|
43
46
|
ls: createLs(kernel, shell, terminal),
|
|
44
47
|
mkdir: createMkdir(kernel, shell, terminal),
|
|
45
48
|
mv: createMv(kernel, shell, terminal),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecmaos/coreutils",
|
|
3
3
|
"description": "ecmaOS: Core utilities for the ecmaOS framework",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.2",
|
|
5
5
|
"license": "MIT+Apache-2.0",
|
|
6
6
|
"homepage": "https://ecmaos.sh",
|
|
7
7
|
"repository": "https://github.com/ecmaos/ecmaos",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"command-line-args": "^6.0.0",
|
|
29
29
|
"command-line-usage": "^7.0.3",
|
|
30
30
|
"human-format": "^1.2.1",
|
|
31
|
-
"@ecmaos/types": "^0.4.
|
|
31
|
+
"@ecmaos/types": "^0.4.2"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/command-line-args": "^5.2.3",
|
package/src/commands/cd.ts
CHANGED
|
@@ -14,14 +14,7 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
14
14
|
{ name: 'path', type: String, typeLabel: '{underline path}', defaultOption: true, description: 'The path to the directory to change to' }
|
|
15
15
|
],
|
|
16
16
|
run: async (argv) => {
|
|
17
|
-
|
|
18
|
-
if (destination && destination.startsWith('~')) {
|
|
19
|
-
const home = shell.env.get('HOME')
|
|
20
|
-
if (home) {
|
|
21
|
-
destination = destination.replace(/^~(?=$|\/)/, home)
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
17
|
+
const destination = (argv.path as string) || shell.cwd
|
|
25
18
|
const fullPath = destination ? path.resolve(shell.cwd, destination) : shell.cwd
|
|
26
19
|
await shell.context.fs.promises.access(fullPath)
|
|
27
20
|
shell.cwd = fullPath
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import path from 'path'
|
|
2
|
+
import chalk from 'chalk'
|
|
3
|
+
import type { CommandLineOptions } from 'command-line-args'
|
|
4
|
+
import type { Kernel, Process, Shell, Terminal } from '@ecmaos/types'
|
|
5
|
+
import { TerminalCommand } from '../shared/terminal-command.js'
|
|
6
|
+
import { writelnStdout, writelnStderr } from '../shared/helpers.js'
|
|
7
|
+
|
|
8
|
+
export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal): TerminalCommand {
|
|
9
|
+
return new TerminalCommand({
|
|
10
|
+
command: 'ln',
|
|
11
|
+
description: 'Create links between files',
|
|
12
|
+
kernel,
|
|
13
|
+
shell,
|
|
14
|
+
terminal,
|
|
15
|
+
options: [
|
|
16
|
+
{ name: 'help', type: Boolean, description: kernel.i18n.t('Display help') },
|
|
17
|
+
{ name: 'symbolic', type: Boolean, alias: 's', description: 'Create symbolic links instead of hard links' },
|
|
18
|
+
{ name: 'force', type: Boolean, alias: 'f', description: 'Remove existing destination files' },
|
|
19
|
+
{ name: 'verbose', type: Boolean, alias: 'v', description: 'Print name of each linked file' },
|
|
20
|
+
{ name: 'args', type: String, multiple: true, defaultOption: true, description: 'The target and optional link name' }
|
|
21
|
+
],
|
|
22
|
+
run: async (argv: CommandLineOptions, process?: Process) => {
|
|
23
|
+
const args = (argv.args as string[]) || []
|
|
24
|
+
const symbolic = argv.symbolic as boolean || false
|
|
25
|
+
const force = argv.force as boolean || false
|
|
26
|
+
const verbose = argv.verbose as boolean || false
|
|
27
|
+
|
|
28
|
+
if (args.length === 0) {
|
|
29
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing file operand'))
|
|
30
|
+
await writelnStderr(process, terminal, 'Try \'ln --help\' for more information.')
|
|
31
|
+
return 1
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const target = args[0]
|
|
35
|
+
if (!target) {
|
|
36
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing file operand'))
|
|
37
|
+
return 1
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const targetPath = path.resolve(shell.cwd, target)
|
|
41
|
+
|
|
42
|
+
let targetStats
|
|
43
|
+
try {
|
|
44
|
+
targetStats = await shell.context.fs.promises.stat(targetPath)
|
|
45
|
+
if (!targetStats.isFile() && !targetStats.isDirectory()) {
|
|
46
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: invalid target`))
|
|
47
|
+
return 1
|
|
48
|
+
}
|
|
49
|
+
if (!symbolic && targetStats.isDirectory()) {
|
|
50
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: hard link not allowed for directory`))
|
|
51
|
+
return 1
|
|
52
|
+
}
|
|
53
|
+
} catch (error) {
|
|
54
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${target}: No such file or directory`))
|
|
55
|
+
return 1
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let linkName: string
|
|
59
|
+
if (args.length === 1) {
|
|
60
|
+
linkName = path.join(shell.cwd, path.basename(target))
|
|
61
|
+
} else {
|
|
62
|
+
const linkNameInput = args[1]
|
|
63
|
+
if (!linkNameInput) {
|
|
64
|
+
await writelnStderr(process, terminal, chalk.red('ln: missing link name'))
|
|
65
|
+
return 1
|
|
66
|
+
}
|
|
67
|
+
const linkNamePath = path.resolve(shell.cwd, linkNameInput)
|
|
68
|
+
const linkNameStats = await shell.context.fs.promises.stat(linkNamePath).catch(() => null)
|
|
69
|
+
if (linkNameStats?.isDirectory()) {
|
|
70
|
+
linkName = path.join(linkNamePath, path.basename(target))
|
|
71
|
+
} else {
|
|
72
|
+
linkName = linkNamePath
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
const linkExists = await shell.context.fs.promises.stat(linkName).catch(() => null)
|
|
78
|
+
if (linkExists) {
|
|
79
|
+
if (force) {
|
|
80
|
+
if (linkExists.isDirectory()) {
|
|
81
|
+
await shell.context.fs.promises.rmdir(linkName)
|
|
82
|
+
} else {
|
|
83
|
+
await shell.context.fs.promises.unlink(linkName)
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${linkName}: File exists`))
|
|
87
|
+
return 1
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (symbolic) {
|
|
92
|
+
await shell.context.fs.promises.symlink(targetPath, linkName)
|
|
93
|
+
} else {
|
|
94
|
+
await shell.context.fs.promises.link(targetPath, linkName)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (verbose) {
|
|
98
|
+
await writelnStdout(process, terminal, linkName)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return 0
|
|
102
|
+
} catch (error) {
|
|
103
|
+
await writelnStderr(process, terminal, chalk.red(`ln: ${(error as Error).message}`))
|
|
104
|
+
return 1
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
}
|
package/src/commands/ls.ts
CHANGED
|
@@ -35,8 +35,10 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
35
35
|
return type
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const getModeString = (stats: Awaited<ReturnType<typeof shell.context.fs.promises.stat>>) => {
|
|
39
|
-
|
|
38
|
+
const getModeString = (stats: Awaited<ReturnType<typeof shell.context.fs.promises.stat>>, targetStats?: Awaited<ReturnType<typeof shell.context.fs.promises.stat>>) => {
|
|
39
|
+
const type = getModeType(stats)
|
|
40
|
+
const modeStats = targetStats || stats
|
|
41
|
+
const permissions = (Number(modeStats.mode) & parseInt('777', 8)).toString(8).padStart(3, '0')
|
|
40
42
|
.replace(/0/g, '---')
|
|
41
43
|
.replace(/1/g, '--' + chalk.red('x'))
|
|
42
44
|
.replace(/2/g, '-' + chalk.yellow('w') + '-')
|
|
@@ -45,6 +47,7 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
45
47
|
.replace(/5/g, chalk.green('r') + '-' + chalk.red('x'))
|
|
46
48
|
.replace(/6/g, chalk.green('r') + chalk.yellow('w') + '-')
|
|
47
49
|
.replace(/7/g, chalk.green('r') + chalk.yellow('w') + chalk.red('x'))
|
|
50
|
+
return type + permissions
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
const getTimestampString = (timestamp: Date) => {
|
|
@@ -65,13 +68,39 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
65
68
|
else return chalk.gray(`${owner?.username || stats.uid}:${owner?.username || stats.gid}`)
|
|
66
69
|
}
|
|
67
70
|
|
|
71
|
+
const getLinkInfo = (linkTarget: string | null, linkStats: Awaited<ReturnType<typeof shell.context.fs.promises.stat>> | null, stats: Awaited<ReturnType<typeof shell.context.fs.promises.stat>> | null) => {
|
|
72
|
+
if (linkTarget || (linkStats && linkStats.isSymbolicLink())) return kernel.i18n.t('Symbolic Link')
|
|
73
|
+
if (stats && stats.nlink > 1) return kernel.i18n.t('Hard Link')
|
|
74
|
+
return ''
|
|
75
|
+
}
|
|
76
|
+
|
|
68
77
|
const filesMap = await Promise.all(entries
|
|
69
78
|
.map(async entry => {
|
|
70
79
|
const target = path.resolve(fullPath, entry)
|
|
71
80
|
try {
|
|
72
|
-
|
|
81
|
+
let linkTarget: string | null = null
|
|
82
|
+
let linkStats = null
|
|
83
|
+
let stats = null
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
linkStats = await shell.context.fs.promises.lstat(target)
|
|
87
|
+
if (linkStats.isSymbolicLink()) {
|
|
88
|
+
try {
|
|
89
|
+
linkTarget = await shell.context.fs.promises.readlink(target)
|
|
90
|
+
stats = await shell.context.fs.promises.stat(target)
|
|
91
|
+
} catch {
|
|
92
|
+
stats = linkStats
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
stats = linkStats
|
|
96
|
+
}
|
|
97
|
+
} catch {
|
|
98
|
+
stats = await shell.context.fs.promises.stat(target)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return { target, name: entry, stats, linkStats, linkTarget }
|
|
73
102
|
} catch {
|
|
74
|
-
return { target, name: entry, stats: null }
|
|
103
|
+
return { target, name: entry, stats: null, linkStats: null, linkTarget: null }
|
|
75
104
|
}
|
|
76
105
|
}))
|
|
77
106
|
|
|
@@ -83,9 +112,29 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
83
112
|
.map(async entry => {
|
|
84
113
|
const target = path.resolve(fullPath, entry)
|
|
85
114
|
try {
|
|
86
|
-
|
|
115
|
+
let linkTarget: string | null = null
|
|
116
|
+
let linkStats = null
|
|
117
|
+
let stats = null
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
linkStats = await shell.context.fs.promises.lstat(target)
|
|
121
|
+
if (linkStats.isSymbolicLink()) {
|
|
122
|
+
try {
|
|
123
|
+
linkTarget = await shell.context.fs.promises.readlink(target)
|
|
124
|
+
stats = await shell.context.fs.promises.stat(target)
|
|
125
|
+
} catch {
|
|
126
|
+
stats = linkStats
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
stats = linkStats
|
|
130
|
+
}
|
|
131
|
+
} catch {
|
|
132
|
+
stats = await shell.context.fs.promises.stat(target)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return { target, name: entry, stats, linkStats, linkTarget }
|
|
87
136
|
} catch {
|
|
88
|
-
return { target, name: entry, stats: null }
|
|
137
|
+
return { target, name: entry, stats: null, linkStats: null, linkTarget: null }
|
|
89
138
|
}
|
|
90
139
|
}))
|
|
91
140
|
|
|
@@ -97,22 +146,45 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
97
146
|
const data = [
|
|
98
147
|
['Name', 'Size', 'Modified', 'Mode', 'Owner', 'Info'],
|
|
99
148
|
...directories.sort((a, b) => a.name.localeCompare(b.name)).map(directory => {
|
|
149
|
+
const displayName = directory.linkTarget
|
|
150
|
+
? `${directory.name} ${chalk.cyan('⟶')} ${directory.linkTarget}`
|
|
151
|
+
: directory.name
|
|
152
|
+
const modeStats = directory.linkStats && directory.linkStats.isSymbolicLink()
|
|
153
|
+
? directory.linkStats
|
|
154
|
+
: directory.stats
|
|
155
|
+
const modeString = modeStats
|
|
156
|
+
? getModeString(modeStats, directory.linkStats?.isSymbolicLink() ? directory.stats : undefined)
|
|
157
|
+
: ''
|
|
158
|
+
const linkInfo = getLinkInfo(directory.linkTarget, directory.linkStats, directory.stats)
|
|
100
159
|
return [
|
|
101
|
-
|
|
160
|
+
displayName,
|
|
102
161
|
'',
|
|
103
162
|
directory.stats ? getTimestampString(directory.stats.mtime) : '',
|
|
104
|
-
|
|
163
|
+
modeString,
|
|
105
164
|
directory.stats ? getOwnerString(directory.stats) : '',
|
|
165
|
+
linkInfo
|
|
106
166
|
]
|
|
107
167
|
}),
|
|
108
168
|
...files.sort((a, b) => a.name.localeCompare(b.name)).map(file => {
|
|
169
|
+
const displayName = file.linkTarget
|
|
170
|
+
? `${file.name} ${chalk.cyan('⟶')} ${file.linkTarget}`
|
|
171
|
+
: file.name
|
|
172
|
+
const modeStats = file.linkStats && file.linkStats.isSymbolicLink()
|
|
173
|
+
? file.linkStats
|
|
174
|
+
: file.stats
|
|
175
|
+
const modeString = modeStats
|
|
176
|
+
? getModeString(modeStats, file.linkStats?.isSymbolicLink() ? file.stats : undefined)
|
|
177
|
+
: ''
|
|
109
178
|
return [
|
|
110
|
-
|
|
179
|
+
displayName,
|
|
111
180
|
file.stats ? humanFormat(file.stats.size) : '',
|
|
112
181
|
file.stats ? getTimestampString(file.stats.mtime) : '',
|
|
113
|
-
|
|
182
|
+
modeString,
|
|
114
183
|
file.stats ? getOwnerString(file.stats) : '',
|
|
115
184
|
(() => {
|
|
185
|
+
const linkInfo = getLinkInfo(file.linkTarget, file.linkStats, file.stats)
|
|
186
|
+
if (linkInfo) return linkInfo
|
|
187
|
+
|
|
116
188
|
if (descriptions.has(path.resolve(fullPath, file.name))) return descriptions.get(path.resolve(fullPath, file.name))
|
|
117
189
|
const ext = file.name.split('.').pop()
|
|
118
190
|
if (ext && descriptions.has('.' + ext)) return descriptions.get('.' + ext)
|
|
@@ -142,7 +214,9 @@ export function createCommand(kernel: Kernel, shell: Shell, terminal: Terminal):
|
|
|
142
214
|
.map((cell, index) => {
|
|
143
215
|
const paddedCell = cell.padEnd(columnWidths?.[index] ?? 0)
|
|
144
216
|
if (index === 0 && rowIndex > 0) {
|
|
145
|
-
|
|
217
|
+
if (row[3]?.startsWith('d')) return chalk.blue(paddedCell)
|
|
218
|
+
else if (row[3]?.startsWith('l')) return chalk.cyan(paddedCell)
|
|
219
|
+
else return chalk.green(paddedCell)
|
|
146
220
|
} else return rowIndex === 0 ? chalk.bold(paddedCell) : chalk.gray(paddedCell)
|
|
147
221
|
})
|
|
148
222
|
.join(' ')
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { createCommand as createCd } from './commands/cd.js'
|
|
|
12
12
|
import { createCommand as createChmod } from './commands/chmod.js'
|
|
13
13
|
import { createCommand as createCp } from './commands/cp.js'
|
|
14
14
|
import { createCommand as createEcho } from './commands/echo.js'
|
|
15
|
+
import { createCommand as createLn } from './commands/ln.js'
|
|
15
16
|
import { createCommand as createLs } from './commands/ls.js'
|
|
16
17
|
import { createCommand as createMkdir } from './commands/mkdir.js'
|
|
17
18
|
import { createCommand as createMv } from './commands/mv.js'
|
|
@@ -27,6 +28,7 @@ export { createCommand as createCd } from './commands/cd.js'
|
|
|
27
28
|
export { createCommand as createChmod } from './commands/chmod.js'
|
|
28
29
|
export { createCommand as createCp } from './commands/cp.js'
|
|
29
30
|
export { createCommand as createEcho } from './commands/echo.js'
|
|
31
|
+
export { createCommand as createLn } from './commands/ln.js'
|
|
30
32
|
export { createCommand as createLs } from './commands/ls.js'
|
|
31
33
|
export { createCommand as createMkdir } from './commands/mkdir.js'
|
|
32
34
|
export { createCommand as createMv } from './commands/mv.js'
|
|
@@ -47,6 +49,7 @@ export function createAllCommands(kernel: Kernel, shell: Shell, terminal: Termin
|
|
|
47
49
|
chmod: createChmod(kernel, shell, terminal),
|
|
48
50
|
cp: createCp(kernel, shell, terminal),
|
|
49
51
|
echo: createEcho(kernel, shell, terminal),
|
|
52
|
+
ln: createLn(kernel, shell, terminal),
|
|
50
53
|
ls: createLs(kernel, shell, terminal),
|
|
51
54
|
mkdir: createMkdir(kernel, shell, terminal),
|
|
52
55
|
mv: createMv(kernel, shell, terminal),
|