anomaly-cli
Version:
A command-line interface tool for anomaly detection and management
93 lines (92 loc) ⢠4.33 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.listDirectoryContents = listDirectoryContents;
const promises_1 = __importDefault(require("fs/promises"));
const path_1 = __importDefault(require("path"));
const chalk_1 = __importDefault(require("chalk"));
function listDirectoryContents(user) {
return __awaiter(this, void 0, void 0, function* () {
try {
console.log(chalk_1.default.blue.bold(`\nš Directory Contents for ${user.email}\n`));
// Get current working directory
const currentDir = process.cwd();
console.log(chalk_1.default.gray(`š Current directory: ${currentDir}\n`));
// Read directory contents
const items = yield promises_1.default.readdir(currentDir);
if (items.length === 0) {
console.log(chalk_1.default.yellow("š This directory is empty\n"));
return;
}
const fileInfos = [];
// Get detailed info for each item
for (const item of items) {
try {
const itemPath = path_1.default.join(currentDir, item);
const stats = yield promises_1.default.stat(itemPath);
fileInfos.push({
name: item,
isDirectory: stats.isDirectory(),
size: stats.isFile() ? stats.size : undefined,
modified: stats.mtime,
});
}
catch (error) {
// Skip items we can't access
fileInfos.push({
name: item,
isDirectory: false,
});
}
}
// Sort: directories first, then files, alphabetically
fileInfos.sort((a, b) => {
if (a.isDirectory && !b.isDirectory)
return -1;
if (!a.isDirectory && b.isDirectory)
return 1;
return a.name.localeCompare(b.name);
});
// Display the contents
fileInfos.forEach((item) => {
const icon = item.isDirectory ? "š" : "š";
const name = item.isDirectory
? chalk_1.default.blue.bold(item.name)
: chalk_1.default.white(item.name);
let details = "";
if (item.size !== undefined) {
details += chalk_1.default.gray(` (${formatFileSize(item.size)})`);
}
if (item.modified) {
details += chalk_1.default.gray(` - ${item.modified.toLocaleDateString()}`);
}
console.log(`${icon} ${name}${details}`);
});
console.log(chalk_1.default.gray(`\nš Total: ${fileInfos.length} items (${fileInfos.filter((f) => f.isDirectory).length} directories, ${fileInfos.filter((f) => !f.isDirectory).length} files)\n`));
}
catch (error) {
console.error(chalk_1.default.red(`ā Error listing directory contents: ${error.message}`));
}
});
}
function formatFileSize(bytes) {
const units = ["B", "KB", "MB", "GB"];
let size = bytes;
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(1)} ${units[unitIndex]}`;
}