UNPKG

generate-project-context

Version:

CLI tool to generate a project context file with directory tree and file contents

49 lines (40 loc) 1.64 kB
const path = require('path') const fs = require('fs') function generateTree(rootDir, dir, prefix = '', files = [], ignorePatterns, treeLines = []) { const entries = fs.readdirSync(dir, { withFileTypes: true }) const filtered = entries.filter((entry) => { const fullPath = path.join(dir, entry.name) const relativePath = path.relative(rootDir, fullPath).replace(/\\/g, '/') return require('./filter').isFileAllowed(relativePath, ignorePatterns) }) // Разделяем на директории и файлы const directories = filtered .filter((entry) => entry.isDirectory()) .sort((a, b) => a.name.localeCompare(b.name)) const fileEntries = filtered .filter((entry) => entry.isFile()) .sort((a, b) => a.name.localeCompare(b.name)) // Объединяем: сначала директории, затем файлы const sortedEntries = [...directories, ...fileEntries] sortedEntries.forEach((entry, index) => { const isLast = index === sortedEntries.length - 1 const fullPath = path.join(dir, entry.name) const relativePath = path.relative(rootDir, fullPath).replace(/\\/g, '/') treeLines.push(`${prefix}${isLast ? '└──' : '├──'} ${entry.name}`) if (entry.isFile()) { files.push(relativePath) } if (entry.isDirectory()) { generateTree( rootDir, fullPath, `${prefix}${isLast ? ' ' : '│ '}`, files, ignorePatterns, treeLines ) } }) return { files, tree: treeLines.join('\n') } } module.exports = { generateTree }