1. /**
  2. * Diffs two datasets of directories and returns a list of differences.
  3. *
  4. * @param {string[]} dataset1 - The first dataset of directories.
  5. * @param {string[]} dataset2 - The second dataset of directories.
  6. * @returns {object} An object containing the differences: added, removed, and common directories.
  7. * Returns null if input validation fails.
  8. */
  9. function diffDirectories(dataset1, dataset2) {
  10. // Input validation
  11. if (!Array.isArray(dataset1) || !Array.isArray(dataset2)) {
  12. console.error("Error: Inputs must be arrays.");
  13. return null;
  14. }
  15. if (dataset1.length === 0 && dataset2.length === 0) {
  16. return { added: [], removed: [], common: [] }; // Both empty, nothing to diff
  17. }
  18. if (dataset1.length === 0) {
  19. return { added: dataset2, removed: [], common: [] }; // dataset1 is empty, all in dataset2 are added
  20. }
  21. if (dataset2.length === 0) {
  22. return { added: [], removed: dataset1, common: [] }; // dataset2 is empty, all in dataset1 are removed
  23. }
  24. const added = [];
  25. const removed = [];
  26. const common = [];
  27. // Helper function to check if a directory exists
  28. function directoryExists(dir) {
  29. try {
  30. return fs.existsSync(dir); // Use fs.existsSync for basic existence check
  31. } catch (e) {
  32. return false; //Handle potential errors during directory existence check
  33. }
  34. }
  35. for (const dir1 of dataset1) {
  36. if (!directoryExists(dir1)) {
  37. removed.push(dir1);
  38. } else {
  39. const index = dataset2.indexOf(dir1);
  40. if (index === -1) {
  41. removed.push(dir1);
  42. } else {
  43. common.push(dir1);
  44. }
  45. }
  46. }
  47. for (const dir2 of dataset2) {
  48. if (!directoryExists(dir2) && !removed.includes(dir2)) {
  49. added.push(dir2);
  50. }
  51. }
  52. return { added, removed, common };
  53. }
  54. // Dummy fs module for testing. Replace with actual fs module in a real application.
  55. const fs = require('fs'); //Import the fs module

Add your comment