Skip to content

Commit 9945453

Browse files
committed
finished ls exercise
1 parent efeab1c commit 9945453

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

implement-shell-tools/cat/package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

implement-shell-tools/ls/ls.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { promises as fs } from "node:fs";
2+
import { program } from "commander";
3+
4+
program
5+
.name("list files and directories")
6+
.option("-a", "show hidden files")
7+
.option("-1", "force displaying each item in a new line")
8+
.argument("<paths...>", "path of directory");
9+
10+
program.parse();
11+
12+
const showHiddenFiles = program.opts()["a"];
13+
const showFilesInLines = program.opts()["1"];
14+
const fetchedDirectories = await fetchDirectoriesFunc(program.args);
15+
16+
console.log(formatDisplay(fetchedDirectories));
17+
18+
function formatDisplay(fetchedDirectories) {
19+
const controlDisplaying = fetchedDirectories.map((directoryFilesInArray) => {
20+
const joiner = showFilesInLines ? `\n\r` : ` `;
21+
const showFolderName =
22+
fetchedDirectories.length > 1
23+
? `${directoryFilesInArray.folderName}:\n\r`
24+
: "";
25+
26+
return `${showFolderName}${directoryFilesInArray.files.join(joiner)}`;
27+
});
28+
return controlDisplaying.join("\n\r\n\r");
29+
}
30+
31+
// returns array of objects, like: [{folderName: [file1, file2]}]
32+
async function fetchDirectoriesFunc(directories) {
33+
const result = [];
34+
35+
for (const folderName of directories) {
36+
let files = await fs.readdir(folderName);
37+
38+
if (showHiddenFiles) files.unshift(".", "..");
39+
40+
files.sort((a, b) => a.localeCompare(b));
41+
result.push({
42+
folderName,
43+
files,
44+
});
45+
}
46+
47+
return result;
48+
}

0 commit comments

Comments
 (0)