directory-parser.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 = path.resolve(__dirname, '..', 'static')
  15. const normalizedPath = path.normalize(relativePath).replace(/\\/g, '/')
  16. if (normalizedPath.includes('..') || normalizedPath.startsWith('/')) {
  17. process.stdout.write(JSON.stringify({
  18. success: false,
  19. error: 'Invalid directory path'
  20. }) + '\n')
  21. process.exit(1)
  22. }
  23. const targetDir = path.resolve(staticDir, normalizedPath)
  24. if (!targetDir.startsWith(staticDir)) {
  25. process.stdout.write(JSON.stringify({
  26. success: false,
  27. error: 'Directory path must be within static directory'
  28. }) + '\n')
  29. process.exit(1)
  30. }
  31. if (!fs.existsSync(targetDir)) {
  32. process.stdout.write(JSON.stringify({
  33. success: false,
  34. error: 'Directory does not exist'
  35. }) + '\n')
  36. process.exit(1)
  37. }
  38. const stats = fs.statSync(targetDir)
  39. if (!stats.isDirectory()) {
  40. process.stdout.write(JSON.stringify({
  41. success: false,
  42. error: 'Path is not a directory'
  43. }) + '\n')
  44. process.exit(1)
  45. }
  46. // Read only first level directories and files
  47. function readFirstLevel(dirPath) {
  48. const forders = []
  49. const files = []
  50. const entries = fs.readdirSync(dirPath, { withFileTypes: true })
  51. for (const entry of entries) {
  52. if (entry.isDirectory()) {
  53. forders.push(entry.name)
  54. } else {
  55. files.push(entry.name)
  56. }
  57. }
  58. return {
  59. forders: forders,
  60. files: files
  61. }
  62. }
  63. if (operation === 'read') {
  64. const result = readFirstLevel(targetDir)
  65. process.stdout.write(JSON.stringify(result) + '\n')
  66. process.exit(0)
  67. } else {
  68. process.stdout.write(JSON.stringify({
  69. success: false,
  70. error: `Unknown operation: ${operation}. Supported: read`
  71. }) + '\n')
  72. process.exit(1)
  73. }