string-array-compare.js 887 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // @ts-check
  2. const { promises: fsPromises } = require('fs');
  3. const fse = require('fs-extra');
  4. const { readFileByLine } = require('./fetch-remote-text-by-line');
  5. /**
  6. * @param {string[]} linesA
  7. * @param {string} filePath
  8. */
  9. async function compareAndWriteFile(linesA, filePath) {
  10. await fse.ensureFile(filePath);
  11. const rl = readFileByLine(filePath);
  12. let isEqual = true;
  13. let index = 0;
  14. for await (const lineB of rl) {
  15. const lineA = linesA[index];
  16. index++;
  17. if (lineA[0] === '#' && lineB[0] === '#') {
  18. continue;
  19. }
  20. if (lineA !== lineB) {
  21. isEqual = false;
  22. break;
  23. }
  24. }
  25. if (!isEqual) {
  26. await fsPromises.writeFile(
  27. filePath,
  28. linesA.join('\n'),
  29. { encoding: 'utf-8' }
  30. );
  31. } else {
  32. console.log(`Same Content, bail out writing: ${filePath}`);
  33. }
  34. }
  35. module.exports.compareAndWriteFile = compareAndWriteFile;