string-array-compare.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // @ts-check
  2. const { promises: fsPromises } = require('fs');
  3. const fse = require('fs-extra');
  4. /**
  5. * @param {string[]} linesA
  6. * @param {string} filePath
  7. */
  8. async function compareAndWriteFile(linesA, filePath) {
  9. await fse.ensureFile(filePath);
  10. const linesB = (await fsPromises.readFile(filePath, { encoding: 'utf-8' })).split('\n');
  11. if (!stringArrayCompare(linesA, linesB)) {
  12. await fsPromises.writeFile(
  13. filePath,
  14. linesA.join('\n'),
  15. { encoding: 'utf-8' }
  16. );
  17. } else {
  18. console.log(`Same Content, bail out writing: ${filePath}`);
  19. }
  20. }
  21. /**
  22. * @param {string[]} linesA
  23. * @param {string[]} linesB
  24. */
  25. function stringArrayCompare(linesA, linesB) {
  26. if (linesA.length !== linesB.length) return false;
  27. for (let i = 0; i < linesA.length; i++) {
  28. const lineA = linesA[i];
  29. const lineB = linesB[i];
  30. if (lineA.startsWith('#') && lineB.startsWith('#')) {
  31. continue;
  32. }
  33. if (lineA !== lineB) {
  34. return false;
  35. }
  36. }
  37. return true;
  38. }
  39. module.exports.stringArrayCompare = stringArrayCompare;
  40. module.exports.compareAndWriteFile = compareAndWriteFile;