diff --git a/node_modules/electron-builder-squirrel-windows/out/SquirrelWindowsTarget.js b/node_modules/electron-builder-squirrel-windows/out/SquirrelWindowsTarget.js index 15312f4..06ac3d0 100644 --- a/node_modules/electron-builder-squirrel-windows/out/SquirrelWindowsTarget.js +++ b/node_modules/electron-builder-squirrel-windows/out/SquirrelWindowsTarget.js @@ -1,11 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const builder_util_1 = require("builder-util"); -const app_builder_lib_1 = require("app-builder-lib"); const filename_1 = require("builder-util/out/filename"); +const app_builder_lib_1 = require("app-builder-lib"); const path = require("path"); const fs = require("fs"); -const promises_1 = require("fs/promises"); const electron_winstaller_1 = require("electron-winstaller"); class SquirrelWindowsTarget extends app_builder_lib_1.Target { constructor(packager, outDir) { @@ -14,8 +13,28 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target { this.outDir = outDir; //tslint:disable-next-line:no-object-literal-type-assertion this.options = { ...this.packager.platformSpecificBuildOptions, ...this.packager.config.squirrelWindows }; - this.appDirectory = ""; - this.outputDirectory = ""; + } + async prepareSignedVendorDirectory() { + // If not specified will use the Squirrel.Windows that is shipped with electron-installer(https://github.com/electron/windows-installer/tree/main/vendor) + // After https://github.com/electron-userland/electron-builder-binaries/pull/56 merged, will add `electron-builder-binaries` to get the latest version of squirrel. + let vendorDirectory = this.options.customSquirrelVendorDir || path.join(require.resolve("electron-winstaller/package.json"), "..", "vendor"); + if ((0, builder_util_1.isEmptyOrSpaces)(vendorDirectory) || !fs.existsSync(vendorDirectory)) { + builder_util_1.log.warn({ vendorDirectory }, "unable to access Squirrel.Windows vendor directory, falling back to default electron-winstaller"); + vendorDirectory = path.join(require.resolve("electron-winstaller/package.json"), "..", "vendor"); + } + const tmpVendorDirectory = await this.packager.info.tempDirManager.createTempDir({ prefix: "squirrel-windows-vendor" }); + // Copy entire vendor directory to temp directory + await fs.promises.cp(vendorDirectory, tmpVendorDirectory, { recursive: true }); + builder_util_1.log.debug({ from: vendorDirectory, to: tmpVendorDirectory }, "copied vendor directory"); + const files = await fs.promises.readdir(tmpVendorDirectory); + for (const file of files) { + if (["Squirrel.exe", "StubExecutable.exe"].includes(file)) { + const filePath = path.join(tmpVendorDirectory, file); + builder_util_1.log.debug({ file: filePath }, "signing vendor executable"); + await this.packager.sign(filePath); + } + } + return tmpVendorDirectory; } async build(appOutDir, arch) { const packager = this.packager; @@ -24,28 +43,35 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target { const setupFile = packager.expandArtifactNamePattern(this.options, "exe", arch, "${productName} Setup ${version}.${ext}"); const installerOutDir = path.join(this.outDir, `squirrel-windows${(0, app_builder_lib_1.getArchSuffix)(arch)}`); const artifactPath = path.join(installerOutDir, setupFile); + const msiArtifactPath = path.join(installerOutDir, packager.expandArtifactNamePattern(this.options, "msi", arch, "${productName} Setup ${version}.${ext}")); await packager.info.callArtifactBuildStarted({ targetPresentableName: "Squirrel.Windows", file: artifactPath, arch, }); - if (arch === app_builder_lib_1.Arch.ia32) { - builder_util_1.log.warn("For windows consider only distributing 64-bit or use nsis target, see https://github.com/electron-userland/electron-builder/issues/359#issuecomment-214851130"); - } - this.appDirectory = appOutDir; - this.outputDirectory = installerOutDir; - const distOptions = await this.computeEffectiveDistOptions(); - if (distOptions.vendorDirectory) { - this.select7zipArch(distOptions.vendorDirectory, arch); - } + const distOptions = await this.computeEffectiveDistOptions(appOutDir, installerOutDir, setupFile, arch); await (0, electron_winstaller_1.createWindowsInstaller)(distOptions); + await packager.signAndEditResources(artifactPath, arch, installerOutDir); + if (this.options.msi) { + await packager.sign(msiArtifactPath); + } + const safeArtifactName = (ext) => `${sanitizedName}-Setup-${version}${(0, app_builder_lib_1.getArchSuffix)(arch)}.${ext}`; await packager.info.callArtifactBuildCompleted({ file: artifactPath, target: this, arch, - safeArtifactName: `${sanitizedName}-Setup-${version}${(0, app_builder_lib_1.getArchSuffix)(arch)}.exe`, + safeArtifactName: safeArtifactName("exe"), packager: this.packager, }); + if (this.options.msi) { + await packager.info.callArtifactBuildCompleted({ + file: msiArtifactPath, + target: this, + arch, + safeArtifactName: safeArtifactName("msi"), + packager: this.packager, + }); + } const packagePrefix = `${this.appName}-${(0, electron_winstaller_1.convertVersion)(version)}-`; packager.info.dispatchArtifactCreated({ file: path.join(installerOutDir, `${packagePrefix}full.nupkg`), @@ -73,11 +99,24 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target { } select7zipArch(vendorDirectory, arch) { // Copy the 7-Zip executable for the configured architecture. - const resolvedArch = (0, app_builder_lib_1.getArchSuffix)(arch) === "" ? process.arch : (0, app_builder_lib_1.getArchSuffix)(arch); - fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.exe`), path.join(vendorDirectory, "7z.exe")); - fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.dll`), path.join(vendorDirectory, "7z.dll")); + const resolvedArch = (0, app_builder_lib_1.getArchSuffix)(arch) || `-${process.arch}`; + fs.copyFileSync(path.join(vendorDirectory, `7z${resolvedArch}.exe`), path.join(vendorDirectory, "7z.exe")); + fs.copyFileSync(path.join(vendorDirectory, `7z${resolvedArch}.dll`), path.join(vendorDirectory, "7z.dll")); } - async computeEffectiveDistOptions() { + async createNuspecTemplateWithProjectUrl() { + const templatePath = path.resolve(__dirname, "..", "template.nuspectemplate"); + const projectUrl = await this.packager.appInfo.computePackageUrl(); + if (projectUrl != null) { + const nuspecTemplate = await this.packager.info.tempDirManager.getTempFile({ prefix: "template", suffix: ".nuspectemplate" }); + let templateContent = await fs.promises.readFile(templatePath, "utf8"); + const searchString = "<%- copyright %>"; + templateContent = templateContent.replace(searchString, `${searchString}\n ${projectUrl}`); + await fs.promises.writeFile(nuspecTemplate, templateContent); + return nuspecTemplate; + } + return templatePath; + } + async computeEffectiveDistOptions(appDirectory, outputDirectory, setupFile, arch) { const packager = this.packager; let iconUrl = this.options.iconUrl; if (iconUrl == null) { @@ -91,42 +130,27 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target { } checkConflictingOptions(this.options); const appInfo = packager.appInfo; - // If not specified will use the Squirrel.Windows that is shipped with electron-installer(https://github.com/electron/windows-installer/tree/main/vendor) - // After https://github.com/electron-userland/electron-builder-binaries/pull/56 merged, will add `electron-builder-binaries` to get the latest version of squirrel. - let vendorDirectory = this.options.customSquirrelVendorDir; - if ((0, builder_util_1.isEmptyOrSpaces)(vendorDirectory) || !fs.existsSync(vendorDirectory)) { - builder_util_1.log.warn({ vendorDirectory }, "unable to access Squirrel.Windows vendor directory, falling back to default electron-winstaller"); - vendorDirectory = undefined; - } const options = { - appDirectory: this.appDirectory, - outputDirectory: this.outputDirectory, + appDirectory: appDirectory, + outputDirectory: outputDirectory, name: this.options.useAppIdAsId ? appInfo.id : this.appName, + title: appInfo.productName || appInfo.name, version: appInfo.version, description: appInfo.description, - exe: `${this.packager.platformSpecificBuildOptions.executableName || this.options.name || appInfo.productName}.exe`, + exe: `${appInfo.productFilename || this.options.name || appInfo.productName}.exe`, authors: appInfo.companyName || "", + nuspecTemplate: await this.createNuspecTemplateWithProjectUrl(), iconUrl, copyright: appInfo.copyright, - vendorDirectory, - nuspecTemplate: path.join(__dirname, "..", "template.nuspectemplate"), noMsi: !this.options.msi, + usePackageJson: false, }; - const projectUrl = await appInfo.computePackageUrl(); - if (projectUrl != null) { - const nuspecTemplate = await this.packager.info.tempDirManager.getTempFile({ prefix: "template", suffix: ".nuspectemplate" }); - let templateContent = await (0, promises_1.readFile)(path.resolve(__dirname, "..", "template.nuspectemplate"), "utf8"); - const searchString = "<%- copyright %>"; - templateContent = templateContent.replace(searchString, `${searchString}\n ${projectUrl}`); - await (0, promises_1.writeFile)(nuspecTemplate, templateContent); - options.nuspecTemplate = nuspecTemplate; - } - if (await (await packager.signingManager.value).cscInfo.value) { - options.windowsSign = { - hookFunction: async (file) => { - await packager.sign(file); - }, - }; + options.vendorDirectory = await this.prepareSignedVendorDirectory(); + this.select7zipArch(options.vendorDirectory, arch); + options.fixUpPaths = true; + options.setupExe = setupFile; + if (this.options.msi) { + options.setupMsi = setupFile.replace(".exe", ".msi"); } if ((0, builder_util_1.isEmptyOrSpaces)(options.description)) { options.description = this.options.name || appInfo.productName;