string-array-compare.js 1.0 KB

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