Initial clean project import

This commit is contained in:
cat-shark
2026-06-19 18:41:41 +08:00
commit a13b804c7a
1306 changed files with 220568 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
const fs = require("node:fs");
const {resolve, join} = require("node:path");
const crypto = require("node:crypto");
const dir = (p) => {
p = p || ''
return join(__dirname, "../" + p)
}
const distReleaseDir = (p) => {
if (p) {
return dir("dist-release/" + p)
} else {
return dir("dist-release")
}
}
function calcSha256File(filePath) {
return new Promise((resolve, reject) => {
const hash = crypto.createHash("sha256");
const stream = fs.createReadStream(filePath);
stream.on("data", (data) => hash.update(data));
stream.on("end", () => resolve(hash.digest("hex")));
stream.on("error", reject);
});
}
const platformName = () => {
switch (process.platform) {
case "darwin":
return "osx";
case "win32":
return "win";
case "linux":
return "linux";
}
return null;
}
const platformArch = () => {
switch (process.arch) {
case "x64":
return "x86";
case "arm64":
return "arm64";
}
return null;
}
const listFiles = (dir, recursive, regex) => {
regex = regex || null
recursive = recursive || false
const files = fs.readdirSync(dir);
const list = [];
for (let f of files) {
const p = resolve(dir, f);
if (regex) {
if (!regex.test(p)) {
continue;
}
}
const stat = fs.statSync(p);
list.push({
isDir: stat.isDirectory(),
name: f,
path: p
});
if (recursive && stat.isDirectory()) {
list.push(...listFiles(p, recursive));
}
}
return list;
}
const copy = (src, dest, print) => {
print = print || false
if (!fs.existsSync(src)) {
console.warn(`Source path does not exist: ${src}`);
return;
}
if (fs.statSync(src).isDirectory()) {
fs.mkdirSync(dest, {recursive: true});
const files = fs.readdirSync(src);
for (const file of files) {
copy(join(src, file), join(dest, file));
}
} else {
if (print) {
console.log(`Copying file from ${src} to ${dest}`);
}
fs.copyFileSync(src, dest);
}
}
const pathResolve = (...args)=>{
return resolve(...args)
}
const exists = (p) => {
try {
return fs.existsSync(p);
} catch (e) {
return false;
}
}
async function calcSha256() {
console.log('calcSha256.start')
const results = []
const files = listFiles(distReleaseDir(), false, /\.(exe|dmg|AppImage|deb)$/)
for (const p of files) {
const sha256 = await calcSha256File(p.path);
results.push({
name: p.name,
sha256: sha256
})
}
const target = distReleaseDir(`sha256-${platformName()}-${platformArch()}.yml`)
const content = results.map((r) => {
return `${r.name}: ${r.sha256}`
}).join("\n")
fs.writeFileSync(target, content);
console.log('calcSha256.end', target, results)
}
module.exports = {
dir,
distReleaseDir,
platformName,
platformArch,
listFiles,
copy,
pathResolve,
exists,
calcSha256,
}