list-folders.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env node
  2. // List folder names in a directory
  3. const fs = require('fs')
  4. const path = require('path')
  5. const relativePath = process.argv[2]
  6. if (!relativePath) {
  7. process.stdout.write(JSON.stringify({
  8. success: false,
  9. error: 'Missing required parameter: directory path'
  10. }) + '\n')
  11. process.exit(1)
  12. }
  13. const staticDir = path.resolve(__dirname, '..', 'static')
  14. const normalizedPath = path.normalize(relativePath).replace(/\\/g, '/')
  15. if (normalizedPath.includes('..') || normalizedPath.startsWith('/')) {
  16. process.stdout.write(JSON.stringify({
  17. success: false,
  18. error: 'Invalid file path'
  19. }) + '\n')
  20. process.exit(1)
  21. }
  22. const targetDir = path.resolve(staticDir, normalizedPath)
  23. if (!targetDir.startsWith(staticDir)) {
  24. process.stdout.write(JSON.stringify({
  25. success: false,
  26. error: 'Path must be within static directory'
  27. }) + '\n')
  28. process.exit(1)
  29. }
  30. if (!fs.existsSync(targetDir)) {
  31. process.stdout.write(JSON.stringify({
  32. success: false,
  33. error: 'Directory does not exist'
  34. }) + '\n')
  35. process.exit(1)
  36. }
  37. const stats = fs.statSync(targetDir)
  38. if (!stats.isDirectory()) {
  39. process.stdout.write(JSON.stringify({
  40. success: false,
  41. error: 'Path is not a directory'
  42. }) + '\n')
  43. process.exit(1)
  44. }
  45. const entries = fs.readdirSync(targetDir, { withFileTypes: true })
  46. const folderNames = []
  47. for (const entry of entries) {
  48. if (entry.isDirectory()) {
  49. folderNames.push(entry.name)
  50. }
  51. }
  52. process.stdout.write(JSON.stringify({
  53. success: true,
  54. data: folderNames
  55. }) + '\n')
  56. process.exit(0)