next-dev
Version:
Tentu, berikut adalah markdown yang telah diperbaiki:
79 lines (78 loc) • 3.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const readdirp_1 = __importDefault(require("readdirp"));
require("colors");
async function getDirectoryStructure(dir) {
const entries = (0, readdirp_1.default)(dir, { directoryFilter: ['!.*', '!*modules'] });
const structure = {};
for await (const entry of entries) {
const relativePath = path_1.default.relative(dir, entry.fullPath);
const parts = relativePath.split(path_1.default.sep);
let current = structure;
for (let i = 0; i < parts.length; i++) {
const part = parts[i];
if (i === parts.length - 1) {
if (!Array.isArray(current['files'])) {
current['files'] = [];
}
current['files'].push(part);
}
else {
if (!current[part]) {
current[part] = {};
}
current = current[part];
}
}
}
return structure;
}
function generateStructureString(structure, indent = '', useColor = true) {
const entries = Object.entries(structure);
let result = '';
for (let i = 0; i < entries.length; i++) {
const [name, value] = entries[i];
const isLast = i === entries.length - 1;
if (name === 'files') {
for (let j = 0; j < value.length; j++) {
const file = value[j];
const isFileLast = j === value.length - 1;
const text = indent + (isLast && isFileLast ? '└── ' : '├── ') + (useColor ? file.blue : file);
if (useColor) {
console.log(text);
}
result += text + '\n';
}
}
else {
const folderName = indent + (isLast ? '└── ' : '├── ') + (useColor ? name.green : name);
if (useColor) {
console.log(folderName);
}
result += folderName + '\n';
result += generateStructureString(value, indent + (isLast ? ' ' : '│ '), useColor);
}
}
return result;
}
async function genTree(argv) {
const { name } = argv;
const dir = path_1.default.join(process.cwd(), './');
const structure = await getDirectoryStructure(dir);
const structureString = generateStructureString(structure, '', !name);
if (name) {
const outputDir = path_1.default.join(process.cwd(), './output_tree');
const outputFile = path_1.default.join(outputDir, `${name}.txt`);
if (!fs_1.default.existsSync(outputDir)) {
fs_1.default.mkdirSync(outputDir);
}
fs_1.default.writeFileSync(outputFile, structureString, 'utf8');
console.log(`✨✨✨ File saved at file://${outputFile} ✨✨✨`);
}
}
exports.default = genTree;