IOweb/node_modules/@iconify/tools/lib/misc/compare-dirs.cjs
2026-07-03 15:07:38 -05:00

75 lines
2.1 KiB
JavaScript

'use strict';
const fs = require('fs');
const export_helpers_prepare = require('../export/helpers/prepare.cjs');
const misc_scan = require('./scan.cjs');
require('pathe');
const textFileExtensions = [
"json",
"ts",
"js",
"mjs",
"cjs",
"jsx",
"tsx",
"vue",
"svelte",
"svg",
"txt",
"md"
];
async function compareDirectories(dir1, dir2, options) {
dir1 = export_helpers_prepare.normalizeDir(dir1);
dir2 = export_helpers_prepare.normalizeDir(dir2);
const files1 = await misc_scan.scanDirectory(dir1);
const files2 = await misc_scan.scanDirectory(dir2);
if (files1.length !== files2.length) {
return false;
}
options = options || {};
const ignoreNewLine = options.ignoreNewLine !== false;
const ignoreVersions = options.ignoreVersions !== false;
const textExtensions = new Set(
(options.textExtensions || []).concat(textFileExtensions)
);
for (let i = 0; i < files1.length; i++) {
const file = files1[i];
if (!files2.includes(file)) {
return false;
}
const ext = file.split(".").pop().toLowerCase();
const isText = textExtensions.has(ext);
if (!isText) {
const content12 = await fs.promises.readFile(dir1 + "/" + file);
const content22 = await fs.promises.readFile(dir2 + "/" + file);
if (Buffer.compare(content12, content22) !== 0) {
return false;
}
continue;
}
let content1 = await fs.promises.readFile(dir1 + "/" + file, "utf8");
let content2 = await fs.promises.readFile(dir2 + "/" + file, "utf8");
if (content1 === content2) {
continue;
}
if (ignoreNewLine) {
content1 = content1.replace(/\s+\n/g, "\n").trimEnd();
content2 = content2.replace(/\s+\n/g, "\n").trimEnd();
}
if (ignoreVersions && file.split("/").pop() === "package.json") {
const data1 = JSON.parse(content1);
const data2 = JSON.parse(content2);
delete data1.version;
delete data2.version;
content1 = JSON.stringify(data1);
content2 = JSON.stringify(data2);
}
if (content1 !== content2) {
return false;
}
}
return true;
}
exports.compareDirectories = compareDirectories;