electron-builder-squirrel-windows 26.13.1 → 26.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const builder_util_1 = require("builder-util");
|
|
4
|
-
const wine_1 = require("app-builder-lib/out/wine");
|
|
5
4
|
const binDownload_1 = require("app-builder-lib/out/binDownload");
|
|
6
5
|
const filename_1 = require("builder-util/out/filename");
|
|
7
6
|
const app_builder_lib_1 = require("app-builder-lib");
|
|
@@ -10,6 +9,7 @@ const path = require("path");
|
|
|
10
9
|
const fs = require("fs");
|
|
11
10
|
const os = require("os");
|
|
12
11
|
const electron_winstaller_1 = require("electron-winstaller");
|
|
12
|
+
const WineVm_1 = require("app-builder-lib/out/vm/WineVm");
|
|
13
13
|
class SquirrelWindowsTarget extends app_builder_lib_1.Target {
|
|
14
14
|
constructor(packager, outDir) {
|
|
15
15
|
super("squirrel");
|
|
@@ -93,6 +93,7 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target {
|
|
|
93
93
|
return canonicalTargetPath;
|
|
94
94
|
}
|
|
95
95
|
async generateStubExecutableExe(appOutDir, vendorDir) {
|
|
96
|
+
var _a;
|
|
96
97
|
if (!path.isAbsolute(appOutDir) || !path.isAbsolute(vendorDir)) {
|
|
97
98
|
throw new builder_util_1.InvalidConfigurationError("appOutDir and vendorDir must be absolute paths");
|
|
98
99
|
}
|
|
@@ -106,7 +107,8 @@ class SquirrelWindowsTarget extends app_builder_lib_1.Target {
|
|
|
106
107
|
const stubExecutableSource = await this.ensurePathInside(vendorDir, path.join(vendorDir, "StubExecutable.exe"), "Stub executable source");
|
|
107
108
|
const writeZipToSetupExe = await this.ensurePathInside(vendorDir, path.join(vendorDir, "WriteZipToSetup.exe"), "WriteZipToSetup executable");
|
|
108
109
|
await fs.promises.copyFile(stubExecutableSource, stubExePath);
|
|
109
|
-
|
|
110
|
+
const wineVm = new WineVm_1.WineVmManager((_a = this.packager.config.toolsets) === null || _a === void 0 ? void 0 : _a.wine);
|
|
111
|
+
await wineVm.exec(writeZipToSetupExe, ["--copy-stub-resources", filePath, stubExePath]);
|
|
110
112
|
await this.packager.signIf(stubExePath);
|
|
111
113
|
builder_util_1.log.debug({ file: filePath }, "signing app executable");
|
|
112
114
|
await this.packager.signIf(filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SquirrelWindowsTarget.js","sourceRoot":"","sources":["../src/SquirrelWindowsTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InvalidConfigurationError, log, isEmptyOrSpaces, exists } from \"builder-util\"\nimport { execWine } from \"app-builder-lib/out/wine\"\nimport { getBinFromUrl } from \"app-builder-lib/out/binDownload\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport { Arch, getArchSuffix, SquirrelWindowsOptions, Target, WinPackager } from \"app-builder-lib\"\nimport { withToolsetLock } from \"app-builder-lib/out/util/toolsetLock\"\nimport * as path from \"path\"\nimport * as fs from \"fs\"\nimport * as os from \"os\"\nimport { Options as SquirrelOptions, createWindowsInstaller, convertVersion } from \"electron-winstaller\"\n\nexport default class SquirrelWindowsTarget extends Target {\n //tslint:disable-next-line:no-object-literal-type-assertion\n readonly options: SquirrelWindowsOptions = { ...this.packager.platformSpecificBuildOptions, ...this.packager.config.squirrelWindows } as SquirrelWindowsOptions\n\n isAsyncSupported = false\n\n constructor(\n private readonly packager: WinPackager,\n readonly outDir: string\n ) {\n super(\"squirrel\")\n }\n\n private async prepareSignedVendorDirectory(): Promise<string> {\n const customSquirrelVendorDirectory = this.options.customSquirrelVendorDir\n const tmpVendorDirectory = await this.packager.info.tempDirManager.createTempDir({ prefix: \"squirrel-windows-vendor\" })\n\n if (customSquirrelVendorDirectory && (await exists(customSquirrelVendorDirectory))) {\n await fs.promises.cp(customSquirrelVendorDirectory, tmpVendorDirectory, { recursive: true })\n } else {\n if (!isEmptyOrSpaces(customSquirrelVendorDirectory)) {\n log.warn({ customSquirrelVendorDirectory }, \"unable to access custom Squirrel.Windows vendor directory, falling back to default vendor\")\n }\n\n const windowInstallerPackage = require.resolve(\"electron-winstaller/package.json\")\n const [squirrelBin] = await Promise.all([\n getBinFromUrl(\"squirrel.windows@1.0.0\", \"squirrel.windows-2.0.1-patched.7z\", \"76851f0c192eaf9bc6f8f3eecdfe325857ebe70d7833ec62ed846a1acd50c846\"),\n fs.promises.cp(path.join(path.dirname(windowInstallerPackage), \"vendor\"), tmpVendorDirectory, { recursive: true }),\n ])\n\n await fs.promises.cp(path.join(squirrelBin, \"electron-winstaller\", \"vendor\"), tmpVendorDirectory, { recursive: true })\n }\n\n const files = await fs.promises.readdir(tmpVendorDirectory)\n const squirrelExe = files.find(f => f === \"Squirrel.exe\")\n if (squirrelExe) {\n const filePath = path.join(tmpVendorDirectory, squirrelExe)\n log.debug({ file: filePath }, \"signing vendor executable\")\n await this.packager.signIf(filePath)\n } else {\n log.warn(\"Squirrel.exe not found in vendor directory, skipping signing\")\n }\n return tmpVendorDirectory\n }\n\n private assertShellSafePath(filePath: string, description: string): void {\n if (/[\\r\\n`$;&|<>]/.test(filePath)) {\n throw new InvalidConfigurationError(`${description} contains unsafe shell characters: ${filePath}`)\n }\n }\n\n private async ensurePathInside(baseDir: string, targetPath: string, description: string): Promise<string> {\n const resolvedBaseDir = path.resolve(baseDir)\n const resolvedTargetPath = path.resolve(targetPath)\n\n let canonicalBaseDir = resolvedBaseDir\n let canonicalTargetPath = resolvedTargetPath\n\n try {\n canonicalBaseDir = await fs.promises.realpath(resolvedBaseDir)\n } catch {\n canonicalBaseDir = resolvedBaseDir\n }\n\n try {\n canonicalTargetPath = await fs.promises.realpath(resolvedTargetPath)\n } catch {\n // Target may not exist yet; resolve the parent to handle symlinks/junctions consistently\n try {\n const resolvedTargetParent = path.dirname(resolvedTargetPath)\n const canonicalTargetParent = await fs.promises.realpath(resolvedTargetParent)\n const relativeFromResolvedParent = path.relative(resolvedTargetParent, resolvedTargetPath)\n if (\n isEmptyOrSpaces(relativeFromResolvedParent) ||\n path.isAbsolute(relativeFromResolvedParent) ||\n relativeFromResolvedParent.split(path.sep).includes(\"..\") ||\n /[\\0\\r\\n]/.test(relativeFromResolvedParent)\n ) {\n throw new InvalidConfigurationError(`${description} contains invalid path segments`)\n }\n canonicalTargetPath = path.resolve(canonicalTargetParent, relativeFromResolvedParent)\n } catch {\n canonicalTargetPath = resolvedTargetPath\n }\n }\n\n const relativePath = path.relative(canonicalBaseDir, canonicalTargetPath)\n if (relativePath.startsWith(\"..\") || path.isAbsolute(relativePath)) {\n throw new InvalidConfigurationError(`${description} must be inside ${canonicalBaseDir}`)\n }\n this.assertShellSafePath(canonicalTargetPath, description)\n return canonicalTargetPath\n }\n\n private async generateStubExecutableExe(appOutDir: string, vendorDir: string) {\n if (!path.isAbsolute(appOutDir) || !path.isAbsolute(vendorDir)) {\n throw new InvalidConfigurationError(\"appOutDir and vendorDir must be absolute paths\")\n }\n\n const files = await fs.promises.readdir(appOutDir, { withFileTypes: true })\n const appExe = files.find(f => f.name === `${this.exeName}.exe`)\n if (!appExe) {\n throw new Error(`App executable not found in app directory: ${appOutDir}`)\n }\n\n const filePath = await this.ensurePathInside(appOutDir, path.join(appOutDir, appExe.name), \"App executable path\")\n const stubExePath = await this.ensurePathInside(appOutDir, path.join(appOutDir, `${this.exeName}_ExecutionStub.exe`), \"Stub executable path\")\n const stubExecutableSource = await this.ensurePathInside(vendorDir, path.join(vendorDir, \"StubExecutable.exe\"), \"Stub executable source\")\n const writeZipToSetupExe = await this.ensurePathInside(vendorDir, path.join(vendorDir, \"WriteZipToSetup.exe\"), \"WriteZipToSetup executable\")\n\n await fs.promises.copyFile(stubExecutableSource, stubExePath)\n await execWine(writeZipToSetupExe, null, [\"--copy-stub-resources\", filePath, stubExePath])\n await this.packager.signIf(stubExePath)\n log.debug({ file: filePath }, \"signing app executable\")\n await this.packager.signIf(filePath)\n }\n\n async build(appOutDir: string, arch: Arch) {\n const packager = this.packager\n const version = packager.appInfo.version\n const sanitizedName = sanitizeFileName(this.appName)\n\n const setupFile = packager.expandArtifactNamePattern(this.options, \"exe\", arch, \"${productName} Setup ${version}.${ext}\")\n const installerOutDir = path.join(this.outDir, `squirrel-windows${getArchSuffix(arch)}`)\n const artifactPath = path.join(installerOutDir, setupFile)\n const msiArtifactPath = path.join(installerOutDir, packager.expandArtifactNamePattern(this.options, \"msi\", arch, \"${productName} Setup ${version}.${ext}\"))\n\n this.buildQueueManager.add(async () => {\n await packager.info.emitArtifactBuildStarted({\n targetPresentableName: \"Squirrel.Windows\",\n file: artifactPath,\n arch,\n })\n const distOptions = await this.computeEffectiveDistOptions(appOutDir, installerOutDir, setupFile)\n await this.generateStubExecutableExe(appOutDir, distOptions.vendorDirectory!)\n await withToolsetLock(() => createWindowsInstaller(distOptions))\n\n await packager.signAndEditResources(artifactPath, arch, installerOutDir)\n\n if (this.options.msi) {\n await packager.signIf(msiArtifactPath)\n }\n\n const safeArtifactName = (ext: string) => `${sanitizedName}-Setup-${version}${getArchSuffix(arch)}.${ext}`\n\n await packager.info.emitArtifactBuildCompleted({\n file: artifactPath,\n target: this,\n arch,\n safeArtifactName: safeArtifactName(\"exe\"),\n packager: this.packager,\n })\n\n if (this.options.msi) {\n await packager.info.emitArtifactCreated({\n file: msiArtifactPath,\n target: this,\n arch,\n safeArtifactName: safeArtifactName(\"msi\"),\n packager: this.packager,\n })\n }\n\n const packagePrefix = `${this.appName}-${convertVersion(version)}-`\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, `${packagePrefix}full.nupkg`),\n target: this,\n arch,\n packager,\n })\n if (distOptions.remoteReleases != null) {\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, `${packagePrefix}delta.nupkg`),\n target: this,\n arch,\n packager,\n })\n }\n\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, \"RELEASES\"),\n target: this,\n arch,\n packager,\n })\n })\n return Promise.resolve()\n }\n\n private get appName() {\n return this.options.name || this.packager.appInfo.name\n }\n\n private get exeName() {\n const name = this.packager.appInfo.productFilename || this.options.name || this.packager.appInfo.productName\n return sanitizeFileName(name)\n }\n\n private select7zipArch(vendorDirectory: string) {\n // https://github.com/electron/windows-installer/blob/main/script/select-7z-arch.js\n // Even if we're cross-compiling for a different arch like arm64,\n // we still need to use the 7-Zip executable for the host arch\n const resolvedArch = os.arch\n fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.exe`), path.join(vendorDirectory, \"7z.exe\"))\n fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.dll`), path.join(vendorDirectory, \"7z.dll\"))\n }\n\n private async createNuspecTemplateWithProjectUrl() {\n const templatePath = path.resolve(__dirname, \"..\", \"template.nuspectemplate\")\n const projectUrl = await this.packager.appInfo.computePackageUrl()\n if (projectUrl != null) {\n const nuspecTemplate = await this.packager.info.tempDirManager.getTempFile({ prefix: \"template\", suffix: \".nuspectemplate\" })\n let templateContent = await fs.promises.readFile(templatePath, \"utf8\")\n const searchString = \"<copyright><%- copyright %></copyright>\"\n templateContent = templateContent.replace(searchString, `${searchString}\\n <projectUrl>${projectUrl}</projectUrl>`)\n await fs.promises.writeFile(nuspecTemplate, templateContent)\n return nuspecTemplate\n }\n return templatePath\n }\n\n async computeEffectiveDistOptions(appDirectory: string, outputDirectory: string, setupFile: string): Promise<SquirrelOptions> {\n const packager = this.packager\n let iconUrl = this.options.iconUrl\n if (iconUrl == null) {\n const info = await packager.info.repositoryInfo\n if (info != null) {\n iconUrl = `https://github.com/${info.user}/${info.project}/blob/master/${packager.info.relativeBuildResourcesDirname}/icon.ico?raw=true`\n }\n\n if (iconUrl == null) {\n throw new InvalidConfigurationError(\"squirrelWindows.iconUrl is not specified, please see https://www.electron.build/squirrel-windows#SquirrelWindowsOptions-iconUrl\")\n }\n }\n\n checkConflictingOptions(this.options)\n const appInfo = packager.appInfo\n const options: SquirrelOptions = {\n appDirectory: appDirectory,\n outputDirectory: outputDirectory,\n name: this.options.useAppIdAsId ? appInfo.id : this.appName,\n title: appInfo.productName || appInfo.name,\n version: appInfo.version,\n description: appInfo.description,\n exe: `${this.exeName}.exe`,\n authors: appInfo.companyName || \"\",\n nuspecTemplate: await this.createNuspecTemplateWithProjectUrl(),\n iconUrl,\n copyright: appInfo.copyright,\n noMsi: !this.options.msi,\n usePackageJson: false,\n }\n\n options.vendorDirectory = await this.prepareSignedVendorDirectory()\n this.select7zipArch(options.vendorDirectory)\n options.fixUpPaths = true\n options.setupExe = setupFile\n if (this.options.msi) {\n options.setupMsi = setupFile.replace(\".exe\", \".msi\")\n }\n\n if (isEmptyOrSpaces(options.description)) {\n options.description = this.options.name || appInfo.productName\n }\n\n if (options.remoteToken == null) {\n options.remoteToken = process.env.GH_TOKEN || process.env.GITHUB_TOKEN\n }\n\n if (this.options.remoteReleases === true) {\n const info = await packager.info.repositoryInfo\n if (info == null) {\n log.warn(\"remoteReleases set to true, but cannot get repository info\")\n } else {\n options.remoteReleases = `https://github.com/${info.user}/${info.project}`\n log.info({ remoteReleases: options.remoteReleases }, `remoteReleases is set`)\n }\n } else if (typeof this.options.remoteReleases === \"string\" && !isEmptyOrSpaces(this.options.remoteReleases)) {\n options.remoteReleases = this.options.remoteReleases\n }\n\n if (this.options.loadingGif) {\n options.loadingGif = path.resolve(packager.projectDir, this.options.loadingGif)\n } else {\n const resourceList = await packager.resourceList\n if (resourceList.includes(\"install-spinner.gif\")) {\n options.loadingGif = path.join(packager.buildResourcesDir, \"install-spinner.gif\")\n }\n }\n\n return options\n }\n}\n\nfunction checkConflictingOptions(options: any) {\n for (const name of [\"outputDirectory\", \"appDirectory\", \"exe\", \"fixUpPaths\", \"usePackageJson\", \"extraFileSpecs\", \"extraMetadataSpecs\", \"skipUpdateIcon\", \"setupExe\"]) {\n if (name in options) {\n throw new InvalidConfigurationError(`Option ${name} is ignored, do not specify it.`)\n }\n }\n\n if (\"noMsi\" in options) {\n log.warn(`noMsi is deprecated, please specify as \"msi\": true if you want to create an MSI installer`)\n options.msi = !options.noMsi\n }\n\n const msi = options.msi\n if (msi != null && typeof msi !== \"boolean\") {\n throw new InvalidConfigurationError(`msi expected to be boolean value, but string '\"${msi}\"' was specified`)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SquirrelWindowsTarget.js","sourceRoot":"","sources":["../src/SquirrelWindowsTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InvalidConfigurationError, log, isEmptyOrSpaces, exists } from \"builder-util\"\nimport { getBinFromUrl } from \"app-builder-lib/out/binDownload\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport { Arch, getArchSuffix, SquirrelWindowsOptions, Target, WinPackager } from \"app-builder-lib\"\nimport { withToolsetLock } from \"app-builder-lib/out/util/toolsetLock\"\nimport * as path from \"path\"\nimport * as fs from \"fs\"\nimport * as os from \"os\"\nimport { Options as SquirrelOptions, createWindowsInstaller, convertVersion } from \"electron-winstaller\"\nimport { WineVmManager } from \"app-builder-lib/out/vm/WineVm\"\n\nexport default class SquirrelWindowsTarget extends Target {\n //tslint:disable-next-line:no-object-literal-type-assertion\n readonly options: SquirrelWindowsOptions = { ...this.packager.platformSpecificBuildOptions, ...this.packager.config.squirrelWindows } as SquirrelWindowsOptions\n\n isAsyncSupported = false\n\n constructor(\n private readonly packager: WinPackager,\n readonly outDir: string\n ) {\n super(\"squirrel\")\n }\n\n private async prepareSignedVendorDirectory(): Promise<string> {\n const customSquirrelVendorDirectory = this.options.customSquirrelVendorDir\n const tmpVendorDirectory = await this.packager.info.tempDirManager.createTempDir({ prefix: \"squirrel-windows-vendor\" })\n\n if (customSquirrelVendorDirectory && (await exists(customSquirrelVendorDirectory))) {\n await fs.promises.cp(customSquirrelVendorDirectory, tmpVendorDirectory, { recursive: true })\n } else {\n if (!isEmptyOrSpaces(customSquirrelVendorDirectory)) {\n log.warn({ customSquirrelVendorDirectory }, \"unable to access custom Squirrel.Windows vendor directory, falling back to default vendor\")\n }\n\n const windowInstallerPackage = require.resolve(\"electron-winstaller/package.json\")\n const [squirrelBin] = await Promise.all([\n getBinFromUrl(\"squirrel.windows@1.0.0\", \"squirrel.windows-2.0.1-patched.7z\", \"76851f0c192eaf9bc6f8f3eecdfe325857ebe70d7833ec62ed846a1acd50c846\"),\n fs.promises.cp(path.join(path.dirname(windowInstallerPackage), \"vendor\"), tmpVendorDirectory, { recursive: true }),\n ])\n\n await fs.promises.cp(path.join(squirrelBin, \"electron-winstaller\", \"vendor\"), tmpVendorDirectory, { recursive: true })\n }\n\n const files = await fs.promises.readdir(tmpVendorDirectory)\n const squirrelExe = files.find(f => f === \"Squirrel.exe\")\n if (squirrelExe) {\n const filePath = path.join(tmpVendorDirectory, squirrelExe)\n log.debug({ file: filePath }, \"signing vendor executable\")\n await this.packager.signIf(filePath)\n } else {\n log.warn(\"Squirrel.exe not found in vendor directory, skipping signing\")\n }\n return tmpVendorDirectory\n }\n\n private assertShellSafePath(filePath: string, description: string): void {\n if (/[\\r\\n`$;&|<>]/.test(filePath)) {\n throw new InvalidConfigurationError(`${description} contains unsafe shell characters: ${filePath}`)\n }\n }\n\n private async ensurePathInside(baseDir: string, targetPath: string, description: string): Promise<string> {\n const resolvedBaseDir = path.resolve(baseDir)\n const resolvedTargetPath = path.resolve(targetPath)\n\n let canonicalBaseDir = resolvedBaseDir\n let canonicalTargetPath = resolvedTargetPath\n\n try {\n canonicalBaseDir = await fs.promises.realpath(resolvedBaseDir)\n } catch {\n canonicalBaseDir = resolvedBaseDir\n }\n\n try {\n canonicalTargetPath = await fs.promises.realpath(resolvedTargetPath)\n } catch {\n // Target may not exist yet; resolve the parent to handle symlinks/junctions consistently\n try {\n const resolvedTargetParent = path.dirname(resolvedTargetPath)\n const canonicalTargetParent = await fs.promises.realpath(resolvedTargetParent)\n const relativeFromResolvedParent = path.relative(resolvedTargetParent, resolvedTargetPath)\n if (\n isEmptyOrSpaces(relativeFromResolvedParent) ||\n path.isAbsolute(relativeFromResolvedParent) ||\n relativeFromResolvedParent.split(path.sep).includes(\"..\") ||\n /[\\0\\r\\n]/.test(relativeFromResolvedParent)\n ) {\n throw new InvalidConfigurationError(`${description} contains invalid path segments`)\n }\n canonicalTargetPath = path.resolve(canonicalTargetParent, relativeFromResolvedParent)\n } catch {\n canonicalTargetPath = resolvedTargetPath\n }\n }\n\n const relativePath = path.relative(canonicalBaseDir, canonicalTargetPath)\n if (relativePath.startsWith(\"..\") || path.isAbsolute(relativePath)) {\n throw new InvalidConfigurationError(`${description} must be inside ${canonicalBaseDir}`)\n }\n this.assertShellSafePath(canonicalTargetPath, description)\n return canonicalTargetPath\n }\n\n private async generateStubExecutableExe(appOutDir: string, vendorDir: string) {\n if (!path.isAbsolute(appOutDir) || !path.isAbsolute(vendorDir)) {\n throw new InvalidConfigurationError(\"appOutDir and vendorDir must be absolute paths\")\n }\n\n const files = await fs.promises.readdir(appOutDir, { withFileTypes: true })\n const appExe = files.find(f => f.name === `${this.exeName}.exe`)\n if (!appExe) {\n throw new Error(`App executable not found in app directory: ${appOutDir}`)\n }\n\n const filePath = await this.ensurePathInside(appOutDir, path.join(appOutDir, appExe.name), \"App executable path\")\n const stubExePath = await this.ensurePathInside(appOutDir, path.join(appOutDir, `${this.exeName}_ExecutionStub.exe`), \"Stub executable path\")\n const stubExecutableSource = await this.ensurePathInside(vendorDir, path.join(vendorDir, \"StubExecutable.exe\"), \"Stub executable source\")\n const writeZipToSetupExe = await this.ensurePathInside(vendorDir, path.join(vendorDir, \"WriteZipToSetup.exe\"), \"WriteZipToSetup executable\")\n\n await fs.promises.copyFile(stubExecutableSource, stubExePath)\n const wineVm = new WineVmManager(this.packager.config.toolsets?.wine)\n await wineVm.exec(writeZipToSetupExe, [\"--copy-stub-resources\", filePath, stubExePath])\n await this.packager.signIf(stubExePath)\n log.debug({ file: filePath }, \"signing app executable\")\n await this.packager.signIf(filePath)\n }\n\n async build(appOutDir: string, arch: Arch) {\n const packager = this.packager\n const version = packager.appInfo.version\n const sanitizedName = sanitizeFileName(this.appName)\n\n const setupFile = packager.expandArtifactNamePattern(this.options, \"exe\", arch, \"${productName} Setup ${version}.${ext}\")\n const installerOutDir = path.join(this.outDir, `squirrel-windows${getArchSuffix(arch)}`)\n const artifactPath = path.join(installerOutDir, setupFile)\n const msiArtifactPath = path.join(installerOutDir, packager.expandArtifactNamePattern(this.options, \"msi\", arch, \"${productName} Setup ${version}.${ext}\"))\n\n this.buildQueueManager.add(async () => {\n await packager.info.emitArtifactBuildStarted({\n targetPresentableName: \"Squirrel.Windows\",\n file: artifactPath,\n arch,\n })\n const distOptions = await this.computeEffectiveDistOptions(appOutDir, installerOutDir, setupFile)\n await this.generateStubExecutableExe(appOutDir, distOptions.vendorDirectory!)\n await withToolsetLock(() => createWindowsInstaller(distOptions))\n\n await packager.signAndEditResources(artifactPath, arch, installerOutDir)\n\n if (this.options.msi) {\n await packager.signIf(msiArtifactPath)\n }\n\n const safeArtifactName = (ext: string) => `${sanitizedName}-Setup-${version}${getArchSuffix(arch)}.${ext}`\n\n await packager.info.emitArtifactBuildCompleted({\n file: artifactPath,\n target: this,\n arch,\n safeArtifactName: safeArtifactName(\"exe\"),\n packager: this.packager,\n })\n\n if (this.options.msi) {\n await packager.info.emitArtifactCreated({\n file: msiArtifactPath,\n target: this,\n arch,\n safeArtifactName: safeArtifactName(\"msi\"),\n packager: this.packager,\n })\n }\n\n const packagePrefix = `${this.appName}-${convertVersion(version)}-`\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, `${packagePrefix}full.nupkg`),\n target: this,\n arch,\n packager,\n })\n if (distOptions.remoteReleases != null) {\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, `${packagePrefix}delta.nupkg`),\n target: this,\n arch,\n packager,\n })\n }\n\n await packager.info.emitArtifactCreated({\n file: path.join(installerOutDir, \"RELEASES\"),\n target: this,\n arch,\n packager,\n })\n })\n return Promise.resolve()\n }\n\n private get appName() {\n return this.options.name || this.packager.appInfo.name\n }\n\n private get exeName() {\n const name = this.packager.appInfo.productFilename || this.options.name || this.packager.appInfo.productName\n return sanitizeFileName(name)\n }\n\n private select7zipArch(vendorDirectory: string) {\n // https://github.com/electron/windows-installer/blob/main/script/select-7z-arch.js\n // Even if we're cross-compiling for a different arch like arm64,\n // we still need to use the 7-Zip executable for the host arch\n const resolvedArch = os.arch\n fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.exe`), path.join(vendorDirectory, \"7z.exe\"))\n fs.copyFileSync(path.join(vendorDirectory, `7z-${resolvedArch}.dll`), path.join(vendorDirectory, \"7z.dll\"))\n }\n\n private async createNuspecTemplateWithProjectUrl() {\n const templatePath = path.resolve(__dirname, \"..\", \"template.nuspectemplate\")\n const projectUrl = await this.packager.appInfo.computePackageUrl()\n if (projectUrl != null) {\n const nuspecTemplate = await this.packager.info.tempDirManager.getTempFile({ prefix: \"template\", suffix: \".nuspectemplate\" })\n let templateContent = await fs.promises.readFile(templatePath, \"utf8\")\n const searchString = \"<copyright><%- copyright %></copyright>\"\n templateContent = templateContent.replace(searchString, `${searchString}\\n <projectUrl>${projectUrl}</projectUrl>`)\n await fs.promises.writeFile(nuspecTemplate, templateContent)\n return nuspecTemplate\n }\n return templatePath\n }\n\n async computeEffectiveDistOptions(appDirectory: string, outputDirectory: string, setupFile: string): Promise<SquirrelOptions> {\n const packager = this.packager\n let iconUrl = this.options.iconUrl\n if (iconUrl == null) {\n const info = await packager.info.repositoryInfo\n if (info != null) {\n iconUrl = `https://github.com/${info.user}/${info.project}/blob/master/${packager.info.relativeBuildResourcesDirname}/icon.ico?raw=true`\n }\n\n if (iconUrl == null) {\n throw new InvalidConfigurationError(\"squirrelWindows.iconUrl is not specified, please see https://www.electron.build/squirrel-windows#SquirrelWindowsOptions-iconUrl\")\n }\n }\n\n checkConflictingOptions(this.options)\n const appInfo = packager.appInfo\n const options: SquirrelOptions = {\n appDirectory: appDirectory,\n outputDirectory: outputDirectory,\n name: this.options.useAppIdAsId ? appInfo.id : this.appName,\n title: appInfo.productName || appInfo.name,\n version: appInfo.version,\n description: appInfo.description,\n exe: `${this.exeName}.exe`,\n authors: appInfo.companyName || \"\",\n nuspecTemplate: await this.createNuspecTemplateWithProjectUrl(),\n iconUrl,\n copyright: appInfo.copyright,\n noMsi: !this.options.msi,\n usePackageJson: false,\n }\n\n options.vendorDirectory = await this.prepareSignedVendorDirectory()\n this.select7zipArch(options.vendorDirectory)\n options.fixUpPaths = true\n options.setupExe = setupFile\n if (this.options.msi) {\n options.setupMsi = setupFile.replace(\".exe\", \".msi\")\n }\n\n if (isEmptyOrSpaces(options.description)) {\n options.description = this.options.name || appInfo.productName\n }\n\n if (options.remoteToken == null) {\n options.remoteToken = process.env.GH_TOKEN || process.env.GITHUB_TOKEN\n }\n\n if (this.options.remoteReleases === true) {\n const info = await packager.info.repositoryInfo\n if (info == null) {\n log.warn(\"remoteReleases set to true, but cannot get repository info\")\n } else {\n options.remoteReleases = `https://github.com/${info.user}/${info.project}`\n log.info({ remoteReleases: options.remoteReleases }, `remoteReleases is set`)\n }\n } else if (typeof this.options.remoteReleases === \"string\" && !isEmptyOrSpaces(this.options.remoteReleases)) {\n options.remoteReleases = this.options.remoteReleases\n }\n\n if (this.options.loadingGif) {\n options.loadingGif = path.resolve(packager.projectDir, this.options.loadingGif)\n } else {\n const resourceList = await packager.resourceList\n if (resourceList.includes(\"install-spinner.gif\")) {\n options.loadingGif = path.join(packager.buildResourcesDir, \"install-spinner.gif\")\n }\n }\n\n return options\n }\n}\n\nfunction checkConflictingOptions(options: any) {\n for (const name of [\"outputDirectory\", \"appDirectory\", \"exe\", \"fixUpPaths\", \"usePackageJson\", \"extraFileSpecs\", \"extraMetadataSpecs\", \"skipUpdateIcon\", \"setupExe\"]) {\n if (name in options) {\n throw new InvalidConfigurationError(`Option ${name} is ignored, do not specify it.`)\n }\n }\n\n if (\"noMsi\" in options) {\n log.warn(`noMsi is deprecated, please specify as \"msi\": true if you want to create an MSI installer`)\n options.msi = !options.noMsi\n }\n\n const msi = options.msi\n if (msi != null && typeof msi !== \"boolean\") {\n throw new InvalidConfigurationError(`msi expected to be boolean value, but string '\"${msi}\"' was specified`)\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "electron-builder-squirrel-windows",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.15.0",
|
|
4
4
|
"main": "out/SquirrelWindowsTarget.js",
|
|
5
5
|
"author": "Vladimir Krivosheev",
|
|
6
6
|
"license": "MIT",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"electron-winstaller": "5.4.0",
|
|
20
|
-
"app-builder-lib": "26.
|
|
21
|
-
"builder-util": "26.
|
|
20
|
+
"app-builder-lib": "26.15.0",
|
|
21
|
+
"builder-util": "26.15.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/archiver": "5.3.1",
|