#!/usr/bin/env node // Iterate through all folders and files in a directory, return directory structure array const fs = require('fs') const path = require('path') const operation = process.argv[2] const relativePath = process.argv[3] if (!operation || !relativePath) { process.stdout.write(JSON.stringify({ success: false, error: 'Missing required parameters: operation and directory path' }) + '\n') process.exit(1) } const staticDir = path.resolve(__dirname, '..', 'static') const normalizedPath = path.normalize(relativePath).replace(/\\/g, '/') if (normalizedPath.includes('..') || normalizedPath.startsWith('/')) { process.stdout.write(JSON.stringify({ success: false, error: 'Invalid directory path' }) + '\n') process.exit(1) } const targetDir = path.resolve(staticDir, normalizedPath) if (!targetDir.startsWith(staticDir)) { process.stdout.write(JSON.stringify({ success: false, error: 'Directory path must be within static directory' }) + '\n') process.exit(1) } if (!fs.existsSync(targetDir)) { process.stdout.write(JSON.stringify({ success: false, error: 'Directory does not exist' }) + '\n') process.exit(1) } const stats = fs.statSync(targetDir) if (!stats.isDirectory()) { process.stdout.write(JSON.stringify({ success: false, error: 'Path is not a directory' }) + '\n') process.exit(1) } // Read only first level directories and files function readFirstLevel(dirPath) { const forders = [] const files = [] const entries = fs.readdirSync(dirPath, { withFileTypes: true }) for (const entry of entries) { if (entry.isDirectory()) { forders.push(entry.name) } else { files.push(entry.name) } } return { forders: forders, files: files } } if (operation === 'read') { const result = readFirstLevel(targetDir) process.stdout.write(JSON.stringify(result) + '\n') process.exit(0) } else { process.stdout.write(JSON.stringify({ success: false, error: `Unknown operation: ${operation}. Supported: read` }) + '\n') process.exit(1) }