string-array-compare.js 905 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. let isEqual = false;
  12. let index = 0;
  13. for await (const lineB of readFileByLine(filePath)) {
  14. const lineA = linesA[index];
  15. index++;
  16. if (lineA[0] === '#' && lineB[0] === '#') {
  17. continue;
  18. }
  19. if (lineA !== lineB) {
  20. isEqual = false;
  21. break;
  22. } else {
  23. isEqual = true;
  24. }
  25. }
  26. if (!isEqual) {
  27. await fsPromises.writeFile(
  28. filePath,
  29. linesA.join('\n'),
  30. { encoding: 'utf-8' }
  31. );
  32. } else {
  33. console.log(`Same Content, bail out writing: ${filePath}`);
  34. }
  35. }
  36. module.exports.compareAndWriteFile = compareAndWriteFile;