directory-parser.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/usr/bin/env node
  2. // Iterate through all folders and files in a directory, return directory structure array
  3. const fs = require('fs')
  4. const path = require('path')
  5. const operation = process.argv[2]
  6. const relativePath = process.argv[3]
  7. if (!operation || !relativePath) {
  8. process.stdout.write(JSON.stringify({
  9. success: false,
  10. error: 'Missing required parameters: operation and directory path'
  11. }) + '\n')
  12. process.exit(1)
  13. }
  14. const staticDir = process.env.STATIC_ROOT
  15. ? path.resolve(process.env.STATIC_ROOT)
  16. : path.resolve(__dirname, '..', 'static')
  17. const normalizedPath = path.normalize(relativePath).replace(/\\/g, '/')
  18. if (normalizedPath.includes('..') || normalizedPath.startsWith('/')) {
  19. process.stdout.write(JSON.stringify({
  20. success: false,
  21. error: 'Invalid directory path'
  22. }) + '\n')
  23. process.exit(1)
  24. }
  25. const targetDir = path.resolve(staticDir, normalizedPath)
  26. if (!targetDir.startsWith(staticDir)) {
  27. process.stdout.write(JSON.stringify({
  28. success: false,
  29. error: 'Directory path must be within static directory'
  30. }) + '\n')
  31. process.exit(1)
  32. }
  33. if (!fs.existsSync(targetDir)) {
  34. process.stdout.write(JSON.stringify({
  35. success: false,
  36. error: 'Directory does not exist'
  37. }) + '\n')
  38. process.exit(1)
  39. }
  40. const stats = fs.statSync(targetDir)
  41. if (!stats.isDirectory()) {
  42. process.stdout.write(JSON.stringify({
  43. success: false,
  44. error: 'Path is not a directory'
  45. }) + '\n')
  46. process.exit(1)
  47. }
  48. // Read only first level directories and files
  49. function readFirstLevel(dirPath) {
  50. const forders = []
  51. const files = []
  52. const entries = fs.readdirSync(dirPath, { withFileTypes: true })
  53. for (const entry of entries) {
  54. if (entry.isDirectory()) {
  55. forders.push(entry.name)
  56. } else {
  57. files.push(entry.name)
  58. }
  59. }
  60. return {
  61. forders: forders,
  62. files: files
  63. }
  64. }
  65. if (operation === 'read') {
  66. const result = readFirstLevel(targetDir)
  67. process.stdout.write(JSON.stringify(result) + '\n')
  68. process.exit(0)
  69. } else {
  70. process.stdout.write(JSON.stringify({
  71. success: false,
  72. error: `Unknown operation: ${operation}. Supported: read`
  73. }) + '\n')
  74. process.exit(1)
  75. }