string-array-compare.js 901 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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 = true;
  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. }
  23. }
  24. if (!isEqual || index !== linesA.length - 1) {
  25. await fsPromises.writeFile(
  26. filePath,
  27. linesA.join('\n'),
  28. { encoding: 'utf-8' }
  29. );
  30. } else {
  31. console.log(`Same Content, bail out writing: ${filePath}`);
  32. }
  33. }
  34. module.exports.compareAndWriteFile = compareAndWriteFile;