chore: dev support macos

This commit is contained in:
GyDi
2021-12-29 01:01:09 +08:00
parent 63b31f41a7
commit 6570784b46
3 changed files with 41 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
import fs from "fs-extra";
import zlib from "zlib";
import path from "path";
import AdmZip from "adm-zip";
import fetch from "node-fetch";
@@ -16,15 +17,17 @@ const CLASH_LATEST_DATE = "2021.12.07";
function resolveClash() {
const { platform, arch } = process;
let name = "";
// todo
if (platform === "win32" && arch === "x64") {
name = `clash-windows-386`;
}
const map = {
"win32-x64": "clash-windows-386",
"darwin-x64": "clash-darwin-amd64",
"darwin-arm64": "clash-darwin-arm64",
};
const name = map[`${platform}-${arch}`];
if (!name) {
throw new Error("todo");
throw new Error(`unsupport platform "${platform}-${arch}"`);
}
const isWin = platform === "win32";
@@ -60,14 +63,28 @@ async function resolveSidecar() {
if (!(await fs.pathExists(tempZip))) await downloadFile(binInfo.url, tempZip);
// Todo: support gz
const zip = new AdmZip(tempZip);
zip.getEntries().forEach((entry) => {
console.log("[INFO]: entry name", entry.entryName);
});
zip.extractAllTo(tempDir, true);
// save as sidecar
await fs.rename(tempExe, sidecarPath);
if (binInfo.zip === "zip") {
const zip = new AdmZip(tempZip);
zip.getEntries().forEach((entry) => {
console.log("[INFO]: entry name", entry.entryName);
});
zip.extractAllTo(tempDir, true);
// save as sidecar
await fs.rename(tempExe, sidecarPath);
console.log(`[INFO]: unzip finished`);
} else {
// gz
const readStream = fs.createReadStream(tempZip);
const writeStream = fs.createWriteStream(sidecarPath);
readStream
.pipe(zlib.createGunzip())
.pipe(writeStream)
.on("finish", () => {
console.log(`[INFO]: gunzip finished`);
execSync(`chmod 755 ${sidecarPath}`);
console.log(`[INFO]: chmod binary finished`);
});
}
// delete temp dir
await fs.remove(tempDir);
@@ -97,6 +114,8 @@ async function downloadFile(url, path) {
});
const buffer = await response.arrayBuffer();
await fs.writeFile(path, new Uint8Array(buffer));
console.log(`[INFO]: download finished "${url}"`);
}
/// main