app-builder-lib
Version:
electron-builder lib
259 lines • 13.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.nsisChecksums = exports.wincodesignChecksums = void 0;
exports.getSignToolPath = getSignToolPath;
exports.getWindowsKitsBundle = getWindowsKitsBundle;
exports.isOldWin6 = isOldWin6;
exports.getRceditBundle = getRceditBundle;
exports.getMakeNsisPath = getMakeNsisPath;
exports.getNsisPluginsPath = getNsisPluginsPath;
exports.getNsisElevatePath = getNsisElevatePath;
const builder_util_1 = require("builder-util");
const fs_extra_1 = require("fs-extra");
const os = require("os");
const path = require("path");
const binDownload_1 = require("../binDownload");
const bundledTool_1 = require("../util/bundledTool");
const electronGet_1 = require("../util/electronGet");
const flags_1 = require("../util/flags");
function getLegacyWinCodeSignBin() {
return (0, electronGet_1.downloadBuilderToolset)({
releaseName: "winCodeSign-2.6.0",
filenameWithExt: "winCodeSign-2.6.0.7z",
checksums: { ["winCodeSign-2.6.0.7z"]: "cdaec7154dda7cc31f88d886e2489379a0625a737d610b5ae7f62a12f16743a4" },
});
}
exports.wincodesignChecksums = {
"0.0.0": {
// legacy — downloads winCodeSign-2.6.0 via getLegacyWinCodeSignBin()
},
"1.0.0": {
"rcedit-windows-2_0_0.zip": "589709935902545a8335190b08644cf61b46a9042e34c0c3ef0660a5aeddeaae",
"win-codesign-darwin-arm64.zip": "7eb41c3e6e48a75ced6b3384de22185da4bb458960fa410970eedd4e838c5c14",
"win-codesign-darwin-x86_64.zip": "3986c97429f002df63490193d7f787281836f055934e3cdd9e69c70a8acb695e",
"win-codesign-linux-amd64.zip": "d362a1a981053841554867e3e9dff51fe420fd577b44653df89bd7d3c916b156",
"win-codesign-linux-arm64.zip": "fb848d498281f081c937be48dd6ddaf49b0201f32210dfc816ad061c47ecd37b",
"win-codesign-linux-i386.zip": "11f8d9ffbf5b01e3bf6321c6d93b9b5e43d0c2d2a9fde1bca07698f2eb967cdf",
"win-codesign-windows-x64.zip": "1bd27f9fa553cb14bec8df530cb3caffcfb095f9dd187dab6eaf5e9b7d6e7bff",
"windows-kits-bundle-10_0_26100_0.zip": "1a12c81024c3499c212fdc5fac34a918e6d199271a39dfc524f6d8da484329bd",
},
"1.1.0": {
"rcedit-windows-2_0_0.zip": "c66591ebe0919c60231f0bf79ff223e6504bfa69bc13edc1fa8bfc6177b73402",
"win-codesign-darwin-arm64.zip": "3f263b0e53cdc5410f6165471b2e808aee3148dc792efa23a7c303e7a01e67b7",
"win-codesign-darwin-x86_64.zip": "143fbdfcbc53bc273fa181356be8416829778452621484d39eadbe1ce49979ba",
"win-codesign-linux-amd64.zip": "65477fe8e40709b0f998928afb8336f82413b123310bf5adaa8efb7ed6ed0eeb",
"win-codesign-linux-arm64.zip": "575b01a966f2b775bbea119de263957378e2bd28cbd064d35f9e981827e37b59",
"win-codesign-linux-i386.zip": "aa3ce90e9aaa3449a228a3fa30633cdeb6b2791913786677a85c59db1d985598",
"win-codesign-windows-x64.zip": "6e5dcc5d7af7c00a7387e2101d1ad986aef80e963a3526da07bd0e65de484c30",
"windows-kits-bundle-10_0_26100_0.zip": "284f18a2fde66e6ecfbefc3065926c9bfdf641761a9e6cd2bd26e18d1e328bf7",
},
};
function _getWindowsToolsBin(winCodeSign, file) {
return (0, binDownload_1.getBinFromUrl)(`win-codesign@${winCodeSign}`, file, exports.wincodesignChecksums[winCodeSign][file]);
}
async function getSignToolPath(winCodeSign, isWin) {
if ((0, flags_1.isUseSystemSigncode)()) {
return { path: "osslsigncode" };
}
const signToolPath = await (0, builder_util_1.resolveEnvToolsetPath)("SIGNTOOL_PATH", "file");
if (signToolPath != null) {
return { path: signToolPath };
}
if (isWin) {
// windows kits are always the target arch; signtool can be used by either arch.
const signtoolArch = process.arch === "x64" ? builder_util_1.Arch.x64 : process.arch === "arm64" ? builder_util_1.Arch.arm64 : builder_util_1.Arch.ia32;
return { path: await getWindowsSignToolExe({ winCodeSign, arch: signtoolArch }) };
}
else {
const vendor = await getOsslSigncodeBundle(winCodeSign);
return { path: vendor.path, env: vendor.env };
}
}
async function getWindowsKitsBundle({ winCodeSign, arch }) {
const kitPath = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_WINDOWS_KITS_PATH", "directory");
if (kitPath != null) {
return { kit: kitPath, appxAssets: kitPath };
}
const useLegacy = winCodeSign == null || winCodeSign === "0.0.0";
if (useLegacy) {
const vendorPath = await getLegacyWinCodeSignBin();
return { kit: path.resolve(vendorPath, "windows-10", arch === builder_util_1.Arch.arm64 ? "x64" : builder_util_1.Arch[arch]), appxAssets: vendorPath };
}
const file = "windows-kits-bundle-10_0_26100_0.zip";
const vendorPath = await _getWindowsToolsBin(winCodeSign, file);
return { kit: path.resolve(vendorPath, arch === builder_util_1.Arch.ia32 ? "x86" : builder_util_1.Arch[arch]), appxAssets: vendorPath };
}
function isOldWin6() {
const winVersion = os.release();
return winVersion.startsWith("6.") && !winVersion.startsWith("6.3");
}
async function getWindowsSignToolExe({ winCodeSign, arch }) {
if (winCodeSign === "0.0.0" || winCodeSign == null) {
// use modern signtool on Windows Server 2012 R2 to be able to sign AppX
const vendorPath = await getLegacyWinCodeSignBin();
if (isOldWin6()) {
return path.resolve(vendorPath, "windows-6", "signtool.exe");
}
else {
return path.resolve(vendorPath, "windows-10", process.arch === "ia32" ? "ia32" : "x64", "signtool.exe");
}
}
const vendorPath = await getWindowsKitsBundle({ winCodeSign, arch });
return path.resolve(vendorPath.kit, "signtool.exe");
}
async function getOsslSigncodeBundle(winCodeSign) {
const osslSigncodePath = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_OSSL_SIGNCODE_PATH", "file");
if (osslSigncodePath != null) {
return { path: osslSigncodePath };
}
if (process.platform === "win32" || process.env.USE_SYSTEM_OSSLSIGNCODE === "true") {
return { path: "osslsigncode" };
}
if (winCodeSign === "0.0.0" || winCodeSign == null) {
const vendorBase = path.resolve(await getLegacyWinCodeSignBin(), process.platform);
const vendorPath = process.platform === "darwin" ? path.resolve(vendorBase, "10.12") : vendorBase;
return { path: path.resolve(vendorPath, "osslsigncode"), env: process.platform === "darwin" ? (0, bundledTool_1.computeToolEnv)([path.resolve(vendorPath, "lib")]) : undefined };
}
const file = (() => {
if (process.platform === "linux") {
if (process.arch == "x64") {
return "win-codesign-linux-amd64.zip";
}
else if (process.arch === "arm64") {
return "win-codesign-linux-arm64.zip";
}
return "win-codesign-linux-i386.zip";
}
// darwin arm64
if (process.arch === "arm64") {
return "win-codesign-darwin-arm64.zip";
}
return "win-codesign-darwin-x86_64.zip";
})();
const vendorPath = await _getWindowsToolsBin(winCodeSign, file);
return { path: path.resolve(vendorPath, "osslsigncode") };
}
async function getRceditBundle(winCodeSign) {
const ia32 = "rcedit-ia32.exe";
const x86 = "rcedit-x86.exe";
const x64 = "rcedit-x64.exe";
const rcedit = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_RCEDIT_PATH", "directory");
if (rcedit != null) {
const overridePath = rcedit;
return { x86: path.resolve(overridePath, x86), x64: path.resolve(overridePath, x64) };
}
if (winCodeSign === "0.0.0" || winCodeSign == null) {
const vendorPath = await getLegacyWinCodeSignBin();
return { x86: path.resolve(vendorPath, ia32), x64: path.resolve(vendorPath, x64) };
}
const file = "rcedit-windows-2_0_0.zip";
const vendorPath = await _getWindowsToolsBin(winCodeSign, file);
return { x86: path.resolve(vendorPath, x86), x64: path.resolve(vendorPath, x64) };
}
// ─── NSIS toolset ────────────────────────────────────────────────────────────
function getLegacyNsisBin() {
// Warning: Don't use v3.0.4.2 - https://github.com/electron-userland/electron-builder/issues/6334
return (0, binDownload_1.getBinFromUrl)("nsis-3.0.4.1", "nsis-3.0.4.1.7z", "9877df902530f96357d13a7a31ae2b9df67f48b11ffc9a1700a7c961574ec5fa");
}
function getLegacyNsisResourcesBin() {
return (0, binDownload_1.getBinFromUrl)("nsis-resources-3.4.1", "nsis-resources-3.4.1.7z", "593a9a92ef958321293ac6a2ee61e64bf1bd543142a5bd6b3d310709cc924103");
}
exports.nsisChecksums = {
"0.0.0": {
// legacy — uses getLegacyNsisBin() / getLegacyNsisResourcesBin()
},
"1.2.1": {
// unified bundle
"nsis-bundle-3.12.tar.gz": "56997fdefe25e7928a1a68b4583d08b240b66cf660234053b20131a74cc082f4",
},
};
async function getNsisBundlePath(nsis, customBinary) {
var _a;
if ((customBinary === null || customBinary === void 0 ? void 0 : customBinary.url) && (customBinary === null || customBinary === void 0 ? void 0 : customBinary.checksum)) {
const binaryVersion = (_a = customBinary.version) !== null && _a !== void 0 ? _a : customBinary.checksum.substring(0, 8);
return (0, binDownload_1.getBinFromCustomLoc)("nsis", binaryVersion, customBinary.url, customBinary.checksum);
}
if (nsis === "0.0.0" || nsis == null) {
return getLegacyNsisBin();
}
const file = `nsis-bundle-3.12.tar.gz`;
return (0, electronGet_1.downloadBuilderToolset)({
releaseName: `nsis@${nsis}`,
filenameWithExt: file,
checksums: { [file]: exports.nsisChecksums[nsis][file] },
});
}
async function getMakeNsisPath(nsis, customBinary) {
const legacyBundle = (bundlePath) => {
// legacy bundle: platform-specific subdirectories, NSISDIR must be set explicitly
const env = { NSISDIR: bundlePath };
if (process.platform === "darwin") {
return { path: path.resolve(bundlePath, "mac", "makensis"), env };
}
else if (process.platform === "win32") {
return { path: path.resolve(bundlePath, "Bin", "makensis.exe"), env };
}
return { path: path.resolve(bundlePath, "linux", "makensis"), env };
};
const entrypointBundle = (bundlePath) => {
// the entrypoint script auto-sets NSISDIR
return { path: path.resolve(bundlePath, process.platform === "win32" ? "makensis.cmd" : "makensis") };
};
const overridePath = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_NSIS_DIR", "directory");
if (overridePath != null) {
// we have to search both to maintain backward compatibility
let potentialBundle = legacyBundle(overridePath);
if (await (0, builder_util_1.exists)(potentialBundle.path)) {
return potentialBundle;
}
potentialBundle = entrypointBundle(overridePath);
if (await (0, builder_util_1.exists)(potentialBundle.path)) {
return potentialBundle;
}
throw new Error(`${path.basename(potentialBundle.path)} executable not found in ELECTRON_BUILDER_NSIS_DIR: ${overridePath}`);
}
const bundlePath = await getNsisBundlePath(nsis, customBinary);
if (nsis === "0.0.0" || nsis == null) {
return legacyBundle(bundlePath);
}
return entrypointBundle(bundlePath);
}
async function getNsisPluginsPath(nsis, customNsisResources) {
const resolveCustomBundle = async (bundlePath, type) => {
// we have to search both to maintain backward compatibility
const potentialPaths = [path.resolve(bundlePath, "plugins"), path.resolve(bundlePath, "windows", "Plugins")];
for (const p of potentialPaths) {
if ((await (0, builder_util_1.exists)(p)) && (await (0, fs_extra_1.stat)(p)).isDirectory()) {
return p;
}
}
throw new Error(`Plugins directory not found in ${type}: ${bundlePath}. Expected to find in one of: ${potentialPaths.join(", ")}`);
};
const overridePath = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_NSIS_RESOURCES_DIR", "directory");
if (overridePath != null) {
return resolveCustomBundle(overridePath, "ELECTRON_BUILDER_NSIS_RESOURCES_DIR");
}
if (customNsisResources) {
const bundle = await (0, binDownload_1.getBinFromCustomLoc)("nsis-resources", customNsisResources.version, customNsisResources.url, customNsisResources.checksum);
return resolveCustomBundle(bundle, "CUSTOM_NSIS_RESOURCES");
}
if (nsis === "0.0.0" || nsis == null) {
return path.resolve(await getLegacyNsisResourcesBin(), "plugins");
}
return path.resolve(await getNsisBundlePath(nsis), "windows", "Plugins");
}
async function getNsisElevatePath(nsis, customBinary) {
const resolveElevate = async (dir, label) => {
const p = path.resolve(dir, "elevate.exe");
if ((await (0, builder_util_1.exists)(p)) && (await (0, fs_extra_1.stat)(p)).isFile()) {
return p;
}
throw new Error(`elevate.exe not found in ${label} directory: ${dir}. Expected path: ${p}`);
};
const overridePath = await (0, builder_util_1.resolveEnvToolsetPath)("ELECTRON_BUILDER_NSIS_DIR", "directory");
if (overridePath != null) {
return resolveElevate(overridePath, "ELECTRON_BUILDER_NSIS_DIR");
}
return resolveElevate(await getNsisBundlePath(nsis, customBinary), "NSIS bundle");
}
//# sourceMappingURL=windows.js.map