app-builder-lib 27.0.0-alpha.3 → 27.0.0-alpha.4
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.
- package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -1
- package/dist/codeSign/win/signtoolBaseSignManager.js +9 -2
- package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -1
- package/dist/configuration.d.ts +3 -3
- package/dist/configuration.js.map +1 -1
- package/dist/indexInternal.d.ts +1 -1
- package/dist/indexInternal.d.ts.map +1 -1
- package/dist/indexInternal.js +1 -1
- package/dist/indexInternal.js.map +1 -1
- package/dist/macPackager.d.ts +5 -0
- package/dist/macPackager.d.ts.map +1 -1
- package/dist/macPackager.js +35 -0
- package/dist/macPackager.js.map +1 -1
- package/dist/node-module-collector/moduleManager.d.ts +2 -1
- package/dist/node-module-collector/moduleManager.d.ts.map +1 -1
- package/dist/node-module-collector/moduleManager.js +2 -0
- package/dist/node-module-collector/moduleManager.js.map +1 -1
- package/dist/node-module-collector/nodeModulesCollector.d.ts +13 -23
- package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
- package/dist/node-module-collector/nodeModulesCollector.js +52 -122
- package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
- package/dist/node-module-collector/types.d.ts +2 -0
- package/dist/node-module-collector/types.d.ts.map +1 -1
- package/dist/node-module-collector/types.js.map +1 -1
- package/dist/options/linuxOptions.d.ts +0 -10
- package/dist/options/linuxOptions.d.ts.map +1 -1
- package/dist/options/linuxOptions.js.map +1 -1
- package/dist/packager.js +1 -1
- package/dist/packager.js.map +1 -1
- package/dist/platformPackager.d.ts +1 -0
- package/dist/platformPackager.d.ts.map +1 -1
- package/dist/platformPackager.js +5 -6
- package/dist/platformPackager.js.map +1 -1
- package/dist/targets/linux/FlatpakTarget.d.ts.map +1 -1
- package/dist/targets/linux/FlatpakTarget.js +4 -1
- package/dist/targets/linux/FlatpakTarget.js.map +1 -1
- package/dist/targets/linux/FpmTarget.d.ts +6 -0
- package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
- package/dist/targets/linux/FpmTarget.js +25 -3
- package/dist/targets/linux/FpmTarget.js.map +1 -1
- package/dist/targets/linux/LinuxTargetHelper.d.ts +14 -0
- package/dist/targets/linux/LinuxTargetHelper.d.ts.map +1 -1
- package/dist/targets/linux/LinuxTargetHelper.js +38 -59
- package/dist/targets/linux/LinuxTargetHelper.js.map +1 -1
- package/dist/targets/linux/appimage/AppImageTarget.d.ts +1 -0
- package/dist/targets/linux/appimage/AppImageTarget.d.ts.map +1 -1
- package/dist/targets/linux/appimage/AppImageTarget.js +8 -9
- package/dist/targets/linux/appimage/AppImageTarget.js.map +1 -1
- package/dist/targets/linux/appimage/appImageUtil.d.ts +4 -0
- package/dist/targets/linux/appimage/appImageUtil.d.ts.map +1 -1
- package/dist/targets/linux/appimage/appImageUtil.js +11 -4
- package/dist/targets/linux/appimage/appImageUtil.js.map +1 -1
- package/dist/targets/linux/appimage/appLauncher.d.ts.map +1 -1
- package/dist/targets/linux/appimage/appLauncher.js +5 -11
- package/dist/targets/linux/appimage/appLauncher.js.map +1 -1
- package/dist/targets/linux/launcherScript.d.ts +32 -0
- package/dist/targets/linux/launcherScript.d.ts.map +1 -0
- package/dist/targets/linux/launcherScript.js +24 -0
- package/dist/targets/linux/launcherScript.js.map +1 -0
- package/dist/targets/linux/snap/coreLegacy.d.ts.map +1 -1
- package/dist/targets/linux/snap/coreLegacy.js +6 -6
- package/dist/targets/linux/snap/coreLegacy.js.map +1 -1
- package/dist/targets/linux/snap/snapCommand.d.ts +2 -2
- package/dist/targets/linux/snap/snapCommand.d.ts.map +1 -1
- package/dist/targets/linux/snap/snapCommand.js +4 -10
- package/dist/targets/linux/snap/snapCommand.js.map +1 -1
- package/dist/targets/win/AppxTarget.d.ts.map +1 -1
- package/dist/targets/win/AppxTarget.js +6 -6
- package/dist/targets/win/AppxTarget.js.map +1 -1
- package/dist/targets/win/MsiTarget.d.ts.map +1 -1
- package/dist/targets/win/MsiTarget.js +8 -11
- package/dist/targets/win/MsiTarget.js.map +1 -1
- package/dist/targets/win/nsis/NsisTarget.js +3 -3
- package/dist/targets/win/nsis/NsisTarget.js.map +1 -1
- package/dist/targets/win/nsis/nsisScriptGenerator.js +1 -1
- package/dist/targets/win/nsis/nsisScriptGenerator.js.map +1 -1
- package/dist/toolsets/icons.d.ts.map +1 -1
- package/dist/toolsets/icons.js +10 -2
- package/dist/toolsets/icons.js.map +1 -1
- package/dist/util/appFileCopier.d.ts.map +1 -1
- package/dist/util/appFileCopier.js +9 -4
- package/dist/util/appFileCopier.js.map +1 -1
- package/dist/util/archCompatibility.d.ts +42 -0
- package/dist/util/archCompatibility.d.ts.map +1 -0
- package/dist/util/archCompatibility.js +202 -0
- package/dist/util/archCompatibility.js.map +1 -0
- package/dist/util/installOrRebuild.d.ts +38 -0
- package/dist/util/installOrRebuild.d.ts.map +1 -0
- package/dist/util/{yarn.js → installOrRebuild.js} +65 -14
- package/dist/util/installOrRebuild.js.map +1 -0
- package/dist/util/langs.d.ts.map +1 -1
- package/dist/util/langs.js +1 -0
- package/dist/util/langs.js.map +1 -1
- package/dist/util/mac/macosIconComposer.d.ts +2 -1
- package/dist/util/mac/macosIconComposer.d.ts.map +1 -1
- package/dist/util/mac/macosIconComposer.js +40 -58
- package/dist/util/mac/macosIconComposer.js.map +1 -1
- package/dist/util/streamSpawnToFile.d.ts +47 -0
- package/dist/util/streamSpawnToFile.d.ts.map +1 -0
- package/dist/util/streamSpawnToFile.js +110 -0
- package/dist/util/streamSpawnToFile.js.map +1 -0
- package/dist/util/toolsetLock.d.ts +2 -0
- package/dist/util/toolsetLock.d.ts.map +1 -1
- package/dist/util/toolsetLock.js +31 -5
- package/dist/util/toolsetLock.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -8
- package/scheme.json +3 -8
- package/templates/appx/appxmanifest.xml +1 -2
- package/templates/nsis/assistedMessages.yml +17 -0
- package/templates/nsis/messages.yml +5 -0
- package/dist/util/yarn.d.ts +0 -23
- package/dist/util/yarn.d.ts.map +0 -1
- package/dist/util/yarn.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signtoolBaseSignManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAEL,oBAAoB,EAEpB,2BAA2B,EAE5B,MAAM,6BAA6B,CAAA;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"signtoolBaseSignManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { resolveWindowsSigningConfiguration, } from "../../options/winOptions.js
|
|
|
7
7
|
import AppXTarget from "../../targets/win/AppxTarget.js";
|
|
8
8
|
import { getSignToolPath } from "../../toolsets/winCodeSign.js";
|
|
9
9
|
import { resolveFunction } from "../../util/resolve.js";
|
|
10
|
+
import { withSigntoolLock } from "../../util/toolsetLock.js";
|
|
10
11
|
import { readCertInfo, readCertInfoFromX509 } from "../certInfo.js";
|
|
11
12
|
import { VmManager } from "../../vm/vm.js";
|
|
12
13
|
import { importCertificate } from "../codesign.js";
|
|
@@ -324,14 +325,20 @@ export class SigntoolBaseSignManager {
|
|
|
324
325
|
vm = new VmManager();
|
|
325
326
|
args = configuration.computeSignToolArgs(isWin);
|
|
326
327
|
}
|
|
327
|
-
|
|
328
|
+
// signtool.exe (`/f`) is not safe to run concurrently — it races on the shared per-user crypto store.
|
|
329
|
+
// Serialize real-Windows signtool invocations across processes; osslsigncode (`!isWin`) is file-isolated.
|
|
330
|
+
const execSign = () => vm.exec(tool, args, { timeout, env: { ...process.env, ...(toolInfo.env || {}) } });
|
|
331
|
+
await retry(() => (isWin ? withSigntoolLock(execSign) : execSign()), {
|
|
328
332
|
retries: 2,
|
|
329
333
|
interval: 15000,
|
|
330
334
|
backoff: 10000,
|
|
331
335
|
shouldRetry: (e) => {
|
|
332
336
|
if (e.message.includes("The file is being used by another process") ||
|
|
333
337
|
e.message.includes("The specified timestamp server either could not be reached") ||
|
|
334
|
-
e.message.includes("No certificates were found that met all the given criteria.")
|
|
338
|
+
e.message.includes("No certificates were found that met all the given criteria.") ||
|
|
339
|
+
// Transient failure of SignerSignEx after cert selection, typically a concurrent-signtool race
|
|
340
|
+
// on the per-user crypto store; the cross-process lock above makes this rare, retry covers the rest.
|
|
341
|
+
e.message.includes("An error occurred while attempting to load the signing certificate")) {
|
|
335
342
|
log.warn(`Attempt to code sign failed, another attempt will be made in 15 seconds: ${e.message}`);
|
|
336
343
|
return true;
|
|
337
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signtoolBaseSignManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, InvalidConfigurationError, log, retry } from \"builder-util\"\nimport { MemoLazy, parseDn } from \"builder-util-runtime\"\nimport _fsExtra from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../../core.js\"\nimport {\n resolveWindowsSigningConfiguration,\n WindowsConfiguration,\n WindowsHsmSigningConfig,\n WindowsSigntoolFamilyConfig,\n WindowsSigntoolSigningConfig,\n} from \"../../options/winOptions.js\"\nimport AppXTarget from \"../../targets/win/AppxTarget.js\"\nimport { getSignToolPath } from \"../../toolsets/winCodeSign.js\"\nimport { ToolInfo } from \"../../util/bundledTool.js\"\nimport { resolveFunction } from \"../../util/resolve.js\"\nimport { readCertInfo, readCertInfoFromX509 } from \"../certInfo.js\"\nimport { VmManager } from \"../../vm/vm.js\"\nimport type { WinPackager } from \"../../winPackager.js\"\nimport { importCertificate } from \"../codesign.js\"\nimport type { SignManager } from \"./signManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\nconst { rename } = _fsExtra\n\nexport type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>\n\nexport interface WindowsSignToolOptions extends WindowsSignOptions {\n readonly name: string\n readonly site: string | null\n}\n\nexport interface FileCodeSigningInfo {\n readonly file: string\n readonly password: string | null\n}\n\nexport interface WindowsSignTaskConfiguration extends WindowsSignToolOptions {\n readonly cscInfo: FileCodeSigningInfo | CertificateFromStoreInfo | null\n\n // set if output path differs from input (e.g. osslsigncode cannot sign file in-place)\n resultOutputPath?: string\n\n hash: string\n isNest: boolean\n}\n\nexport interface CustomWindowsSignTaskConfiguration extends WindowsSignTaskConfiguration {\n computeSignToolArgs(isWin: boolean): Array<string>\n}\n\nexport interface CertificateInfo {\n readonly commonName: string\n readonly bloodyMicrosoftSubjectDn: string\n}\n\nexport interface CertificateFromStoreInfo {\n thumbprint: string\n subject: string\n store: string\n isLocalMachineStore: boolean\n}\n\ninterface CertInfo {\n Subject: string\n Thumbprint: string\n PSParentPath: string\n}\n\n/** Extracts the non-Azure signing config from WindowsConfiguration, or null for Azure/unset/disabled. */\nexport function getSigntoolFamilyConfig(config: WindowsConfiguration): WindowsSigntoolFamilyConfig | null {\n const s = resolveWindowsSigningConfiguration(config)\n if (s == null || s.type === \"azure\") {\n return null\n }\n return s\n}\n\nexport abstract class SigntoolBaseSignManager implements SignManager {\n protected readonly platformSpecificBuildOptions: WindowsConfiguration\n\n constructor(protected readonly packager: WinPackager) {\n this.platformSpecificBuildOptions = packager.platformOptions\n }\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(async () => {\n const signing = getSigntoolFamilyConfig(this.platformSpecificBuildOptions)\n const publisherName = signing?.publisherName\n if (publisherName === null) {\n return null\n } else if (publisherName != null) {\n return asArray(publisherName)\n }\n\n const certInfo = await this.lazyCertInfo.value\n return certInfo == null ? null : [certInfo.commonName]\n })\n\n readonly lazyCertInfo = new MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>(\n () => this.cscInfo,\n async csc => {\n const cscInfo = await csc.value\n if (cscInfo == null) {\n return null\n }\n\n if (\"subject\" in cscInfo) {\n const bloodyMicrosoftSubjectDn = cscInfo.subject\n return {\n commonName: parseDn(bloodyMicrosoftSubjectDn).get(\"CN\")!,\n bloodyMicrosoftSubjectDn,\n }\n }\n\n const cscFile = cscInfo.file\n if (cscFile == null) {\n return null\n }\n\n const certExt = path.extname(cscFile).toLowerCase()\n if (certExt === \".p12\" || certExt === \".pfx\") {\n return await this.getCertInfo(cscFile, cscInfo.password || \"\")\n }\n // Non-PKCS12 files (.crt, .cer): parse as plain X.509.\n // Returns null when the CN is absent — caller must set publisherName explicitly.\n return await readCertInfoFromX509(cscFile)\n }\n )\n\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.platformSpecificBuildOptions,\n platformSpecificBuildOptions => {\n const signing = getSigntoolFamilyConfig(platformSpecificBuildOptions)\n // signtool is the implicit default when win.sign is unset, so an absent config still\n // honours the WIN_CSC_LINK/cscLink fallback below (hsm/pkcs11 set signing.type explicitly).\n const isSigntool = signing == null || signing.type === \"signtool\"\n\n // signtool + hsm: store-based cert takes priority\n const subjectName = (signing as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null)?.certificateSubjectName\n const shaType = (signing as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null)?.certificateSha1\n if (subjectName != null || shaType != null) {\n return this.packager.vm.value\n .then(vm => this.getCertificateFromStoreInfo(platformSpecificBuildOptions, vm))\n .catch((e: any) => {\n // https://github.com/electron-userland/electron-builder/pull/2397\n if (signing?.sign == null) {\n throw e\n } else {\n log.debug({ error: e }, \"getCertificateFromStoreInfo error\")\n return null\n }\n })\n }\n\n const certificateFile = signing?.certificateFile\n if (certificateFile != null) {\n // Only signtool mode uses a password (HSM private key lives in the HSM, not the cert file)\n const certificatePassword = isSigntool ? this.packager.getCscPassword() : null\n return Promise.resolve({\n file: certificateFile,\n password: certificatePassword == null ? null : certificatePassword.trim(),\n })\n }\n\n // WIN_CSC_LINK env var fallback: only for signtool mode (including the implicit default)\n if (isSigntool) {\n const cscLink = this.packager.getCscLink(\"WIN_CSC_LINK\")\n if (cscLink == null || cscLink === \"\") {\n return Promise.resolve(null)\n }\n\n return importCertificate(cscLink, this.packager.tempDirManager, this.packager.projectDir)\n .catch((e: any) => {\n if (e instanceof InvalidConfigurationError) {\n throw new InvalidConfigurationError(`Env WIN_CSC_LINK is not correct, cannot resolve: ${e.message}`)\n } else {\n throw e\n }\n })\n .then(p => ({\n file: p,\n password: this.packager.getCscPassword(),\n }))\n }\n\n return Promise.resolve(null)\n }\n )\n\n initialize(): Promise<void> {\n return Promise.resolve()\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711\n async computePublisherName(target: Target, publisherName: string | null) {\n if (target instanceof AppXTarget && (await this.cscInfo.value) == null) {\n log.info({ reason: \"Windows Store only build\" }, \"AppX is not signed\")\n return publisherName ?? \"CN=ms\"\n }\n\n // When a signing cert is available, the cert's subject MUST be used so the APPX package\n // Publisher attribute matches the certificate — any mismatch causes SignerSign to fail with\n // ERROR_BAD_FORMAT. Only honour a user-supplied publisherName if it was explicitly configured\n // (non-null); otherwise derive from the certificate.\n const certInfo = await this.lazyCertInfo.value\n const publisher = publisherName ?? certInfo?.bloodyMicrosoftSubjectDn ?? null\n if (publisher == null) {\n throw new Error(\"Internal error: cannot compute subject using certificate info\")\n }\n return publisher\n }\n\n /**\n * Called when cscInfo is null. Returns true to skip signing, false to proceed, or throws.\n * Override in subclasses with different null-cert behaviour (HSM throws, PKCS#11 proceeds).\n */\n protected handleNullCscInfo(customSign: CustomWindowsSign | string | null | undefined): boolean {\n return !customSign // default: skip when no cert and no custom sign hook\n }\n\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n const signing = getSigntoolFamilyConfig(options.options)\n let hashes = signing?.signingHashAlgorithms\n // msi does not support dual-signing\n if (options.path.endsWith(\".msi\")) {\n hashes = [hashes != null && !hashes.includes(\"sha1\") ? \"sha256\" : \"sha1\"]\n } else if (options.path.endsWith(\".appx\")) {\n hashes = [\"sha256\"]\n } else if (hashes == null) {\n hashes = [\"sha1\", \"sha256\"]\n } else {\n hashes = Array.isArray(hashes) ? hashes : [hashes]\n }\n\n const name = this.packager.appInfo.productName\n const site = await this.packager.appInfo.computePackageUrl()\n\n const customSign = await resolveFunction(this.packager.appInfo.type, signing?.sign, \"sign\", await this.packager.getWorkspaceRoot())\n\n const cscInfo = await this.cscInfo.value\n\n if (cscInfo) {\n let logInfo: any = {\n file: log.filePath(options.path),\n }\n if (\"file\" in cscInfo) {\n logInfo = { ...logInfo, certificateFile: cscInfo.file }\n } else {\n logInfo = {\n ...logInfo,\n subject: cscInfo.subject,\n thumbprint: cscInfo.thumbprint,\n store: cscInfo.store,\n user: cscInfo.isLocalMachineStore ? \"local machine\" : \"current user\",\n }\n }\n log.info(logInfo, \"signing\")\n } else if (this.handleNullCscInfo(customSign)) {\n log.debug({ signHook: !!customSign, cscInfo }, \"no signing info identified, signing is skipped\")\n return false\n }\n\n const executor = customSign || ((config: CustomWindowsSignTaskConfiguration, packager: WinPackager) => this.doSign(config, packager))\n let isNest = false\n for (const hash of hashes) {\n const taskConfiguration: WindowsSignTaskConfiguration = { ...options, name, site, cscInfo, hash, isNest }\n await Promise.resolve(\n executor(\n {\n ...taskConfiguration,\n computeSignToolArgs: isWin => this.computeSignToolArgs(taskConfiguration, isWin),\n },\n this.packager\n )\n )\n isNest = true\n if (taskConfiguration.resultOutputPath != null) {\n await rename(taskConfiguration.resultOutputPath, options.path)\n }\n }\n\n return true\n }\n\n async getCertInfo(file: string, password: string): Promise<CertificateInfo> {\n const errorMessagePrefix = \"Cannot extract publisher name from code signing certificate. As workaround, set win.publisherName. Error: \"\n try {\n return await readCertInfo(file, password)\n } catch (e: any) {\n throw new InvalidConfigurationError(`${errorMessagePrefix}${e.message || e}`)\n }\n }\n\n // on windows be aware of http://stackoverflow.com/a/32640183/1910191\n computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm: VmManager = new VmManager()): Array<string> {\n return isWin ? this.computeWindowsSignArgs(options, vm) : this.computeOsslsigncodeArgs(options, vm)\n }\n\n protected isLegacyToolset(): boolean {\n const v = this.packager.config.toolsets?.winCodeSign\n return v == null || v === \"0.0.0\"\n }\n\n protected abstract computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string>\n protected abstract computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string>\n\n // allowX509: set to true by HsmSignManager to permit .crt/.cer (public chain only, key is in HSM).\n protected addCertificateArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean, allowX509 = false): void {\n if (options.cscInfo == null) {\n throw new Error(\"No code signing certificate configured. Provide certificateFile, certificateSha1, or certificateSubjectName.\")\n }\n const certificateFile = (options.cscInfo as FileCodeSigningInfo).file\n\n if (certificateFile == null) {\n // Certificate from store (Windows only)\n if (!isWin) {\n throw new Error(\"certificateSha1/certificateSubjectName supported only on Windows\")\n }\n\n const cscInfo = options.cscInfo as CertificateFromStoreInfo\n args.push(\"/sha1\", cscInfo.thumbprint)\n args.push(\"/s\", cscInfo.store)\n if (cscInfo.isLocalMachineStore) {\n args.push(\"/sm\")\n }\n } else {\n const certExtension = path.extname(certificateFile).toLowerCase()\n\n if (certExtension === \".p12\" || certExtension === \".pfx\") {\n args.push(isWin ? \"/f\" : \"-pkcs12\", vm.toVmFile(certificateFile))\n } else if (isWin && allowX509 && (certExtension === \".crt\" || certExtension === \".cer\")) {\n args.push(\"/f\", vm.toVmFile(certificateFile))\n } else {\n throw new InvalidConfigurationError(`Please specify pkcs12 (.p12/.pfx) file, ${certificateFile} is not correct`)\n }\n }\n }\n\n protected addCommonSigningArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n if (options.name) {\n args.push(isWin ? \"/d\" : \"-n\", options.name)\n }\n\n if (options.site) {\n args.push(isWin ? \"/du\" : \"-i\", options.site)\n }\n\n if (options.isNest) {\n args.push(isWin ? \"/as\" : \"-nest\")\n }\n\n const password = (options.cscInfo as FileCodeSigningInfo)?.password\n if (password) {\n args.push(isWin ? \"/p\" : \"-pass\", password)\n }\n\n const signing = getSigntoolFamilyConfig(options.options)\n const additionalCert = signing?.additionalCertificateFile\n if (additionalCert) {\n args.push(isWin ? \"/ac\" : \"-ac\", vm.toVmFile(additionalCert))\n }\n }\n\n getOutputPath(inputPath: string, hash: string) {\n const extension = path.extname(inputPath)\n return path.join(path.dirname(inputPath), `${path.basename(inputPath, extension)}-signed-${hash}${extension}`)\n }\n\n async getCertificateFromStoreInfo(options: WindowsConfiguration, vm: VmManager): Promise<CertificateFromStoreInfo> {\n const signing = getSigntoolFamilyConfig(options) as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null\n const certificateSubjectName = signing?.certificateSubjectName\n const certificateSha1 = signing?.certificateSha1?.toUpperCase()\n\n const ps = await vm.powershellCommand.value\n const rawResult = await vm.exec(ps, [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-ChildItem -Recurse Cert: -CodeSigningCert | Select-Object -Property Subject,PSParentPath,Thumbprint | ConvertTo-Json -Compress\",\n ])\n const certList = rawResult.length === 0 ? [] : asArray<CertInfo>(JSON.parse(rawResult))\n for (const certInfo of certList) {\n if (\n (certificateSubjectName != null && !certInfo.Subject.includes(certificateSubjectName)) ||\n (certificateSha1 != null && certInfo.Thumbprint.toUpperCase() !== certificateSha1)\n ) {\n continue\n }\n\n const parentPath = certInfo.PSParentPath\n const store = parentPath.substring(parentPath.lastIndexOf(\"\\\\\") + 1)\n log.debug({ store, PSParentPath: parentPath }, \"auto-detect certificate store\")\n // https://github.com/electron-userland/electron-builder/issues/1717\n const isLocalMachineStore = parentPath.includes(\"Certificate::LocalMachine\")\n log.debug(null, \"auto-detect using of LocalMachine store\")\n return {\n thumbprint: certInfo.Thumbprint,\n subject: certInfo.Subject,\n store,\n isLocalMachineStore,\n }\n }\n\n throw new Error(`Cannot find certificate ${certificateSubjectName || certificateSha1}, all certs: ${rawResult}`)\n }\n\n async getToolPath(isWin = process.platform === \"win32\"): Promise<ToolInfo> {\n return getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin, this.packager.buildResourcesDir)\n }\n\n async doSign(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager) {\n // https://github.com/electron-userland/electron-builder/pull/1944\n const timeout = parseInt(process.env.SIGNTOOL_TIMEOUT as any, 10) || 10 * 60 * 1000\n let args: Array<string>\n let vm: VmManager\n // cscInfo can be null (e.g. PKCS#11 with no cert file); guard before using `in`.\n // CertificateFromStoreInfo (no `file` property) requires a Windows VM for cert-store lookup.\n const cscInfo = configuration.cscInfo\n const useVmIfNotOnWin = configuration.path.endsWith(\".appx\") || (cscInfo != null && !(\"file\" in cscInfo))\n const isWin = process.platform === \"win32\" || useVmIfNotOnWin\n const toolInfo = await getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin, this.packager.buildResourcesDir)\n const tool = toolInfo.path\n if (useVmIfNotOnWin) {\n vm = await packager.vm.value\n args = this.computeSignToolArgs(configuration, isWin, vm)\n } else {\n vm = new VmManager()\n args = configuration.computeSignToolArgs(isWin)\n }\n\n await retry(() => vm.exec(tool, args, { timeout, env: { ...process.env, ...(toolInfo.env || {}) } }), {\n retries: 2,\n interval: 15000,\n backoff: 10000,\n shouldRetry: (e: any) => {\n if (\n e.message.includes(\"The file is being used by another process\") ||\n e.message.includes(\"The specified timestamp server either could not be reached\") ||\n e.message.includes(\"No certificates were found that met all the given criteria.\")\n ) {\n log.warn(`Attempt to code sign failed, another attempt will be made in 15 seconds: ${e.message}`)\n return true\n }\n return false\n },\n })\n }\n}\n\nexport class SigntoolSignManager extends SigntoolBaseSignManager {\n protected computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const signing = getSigntoolFamilyConfig(options.options)\n\n const inputFile = vm.toVmFile(options.path)\n const args = [\"sign\"]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const isRfc3161 = options.isNest || options.hash === \"sha256\"\n args.push(isRfc3161 ? \"/tr\" : \"/t\")\n const timestampUrl = isRfc3161 ? signing?.rfc3161TimeStampServer || \"http://timestamp.digicert.com\" : signing?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, true)\n\n // Hash algorithm\n if (this.isLegacyToolset()) {\n // Legacy v0.0.0: Only add /fd for non-SHA1 (original behavior)\n if (options.hash !== \"sha1\") {\n args.push(\"/fd\", options.hash)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n args.push(\"/td\", \"sha256\")\n }\n }\n } else {\n // Modern: Always add /fd (required by new Windows Kits)\n args.push(\"/fd\", options.hash.toLowerCase())\n // Only add /td for RFC3161 timestamps (incompatible with /t)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\" && (options.isNest || options.hash === \"sha256\")) {\n args.push(\"/td\", \"sha256\")\n }\n }\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, true)\n\n // Windows-specific\n args.push(\"/debug\")\n args.push(inputFile) // Must be last\n\n return args\n }\n\n protected computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const signing = getSigntoolFamilyConfig(options.options)\n\n const inputFile = vm.toVmFile(options.path)\n const outputPath = this.getOutputPath(inputFile, options.hash)\n options.resultOutputPath = outputPath\n\n const args = [\"sign\", \"-in\", inputFile, \"-out\", outputPath]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const timestampUrl = signing?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(\"-t\", timestampUrl)\n }\n\n // Certificate file\n this.addCertificateArgs(args, options, vm, false)\n\n // Hash algorithm\n args.push(\"-h\", options.hash.toLowerCase())\n\n // Optional parameters (name, site, nest, password, additionalCert)\n this.addCommonSigningArgs(args, options, vm, false)\n\n // Proxy support\n const httpsProxy = process.env.HTTPS_PROXY\n if (httpsProxy?.length) {\n args.push(\"-p\", httpsProxy)\n }\n\n return args\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"signtoolBaseSignManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, InvalidConfigurationError, log, retry } from \"builder-util\"\nimport { MemoLazy, parseDn } from \"builder-util-runtime\"\nimport _fsExtra from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../../core.js\"\nimport {\n resolveWindowsSigningConfiguration,\n WindowsConfiguration,\n WindowsHsmSigningConfig,\n WindowsSigntoolFamilyConfig,\n WindowsSigntoolSigningConfig,\n} from \"../../options/winOptions.js\"\nimport AppXTarget from \"../../targets/win/AppxTarget.js\"\nimport { getSignToolPath } from \"../../toolsets/winCodeSign.js\"\nimport { ToolInfo } from \"../../util/bundledTool.js\"\nimport { resolveFunction } from \"../../util/resolve.js\"\nimport { withSigntoolLock } from \"../../util/toolsetLock.js\"\nimport { readCertInfo, readCertInfoFromX509 } from \"../certInfo.js\"\nimport { VmManager } from \"../../vm/vm.js\"\nimport type { WinPackager } from \"../../winPackager.js\"\nimport { importCertificate } from \"../codesign.js\"\nimport type { SignManager } from \"./signManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\nconst { rename } = _fsExtra\n\nexport type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>\n\nexport interface WindowsSignToolOptions extends WindowsSignOptions {\n readonly name: string\n readonly site: string | null\n}\n\nexport interface FileCodeSigningInfo {\n readonly file: string\n readonly password: string | null\n}\n\nexport interface WindowsSignTaskConfiguration extends WindowsSignToolOptions {\n readonly cscInfo: FileCodeSigningInfo | CertificateFromStoreInfo | null\n\n // set if output path differs from input (e.g. osslsigncode cannot sign file in-place)\n resultOutputPath?: string\n\n hash: string\n isNest: boolean\n}\n\nexport interface CustomWindowsSignTaskConfiguration extends WindowsSignTaskConfiguration {\n computeSignToolArgs(isWin: boolean): Array<string>\n}\n\nexport interface CertificateInfo {\n readonly commonName: string\n readonly bloodyMicrosoftSubjectDn: string\n}\n\nexport interface CertificateFromStoreInfo {\n thumbprint: string\n subject: string\n store: string\n isLocalMachineStore: boolean\n}\n\ninterface CertInfo {\n Subject: string\n Thumbprint: string\n PSParentPath: string\n}\n\n/** Extracts the non-Azure signing config from WindowsConfiguration, or null for Azure/unset/disabled. */\nexport function getSigntoolFamilyConfig(config: WindowsConfiguration): WindowsSigntoolFamilyConfig | null {\n const s = resolveWindowsSigningConfiguration(config)\n if (s == null || s.type === \"azure\") {\n return null\n }\n return s\n}\n\nexport abstract class SigntoolBaseSignManager implements SignManager {\n protected readonly platformSpecificBuildOptions: WindowsConfiguration\n\n constructor(protected readonly packager: WinPackager) {\n this.platformSpecificBuildOptions = packager.platformOptions\n }\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(async () => {\n const signing = getSigntoolFamilyConfig(this.platformSpecificBuildOptions)\n const publisherName = signing?.publisherName\n if (publisherName === null) {\n return null\n } else if (publisherName != null) {\n return asArray(publisherName)\n }\n\n const certInfo = await this.lazyCertInfo.value\n return certInfo == null ? null : [certInfo.commonName]\n })\n\n readonly lazyCertInfo = new MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>(\n () => this.cscInfo,\n async csc => {\n const cscInfo = await csc.value\n if (cscInfo == null) {\n return null\n }\n\n if (\"subject\" in cscInfo) {\n const bloodyMicrosoftSubjectDn = cscInfo.subject\n return {\n commonName: parseDn(bloodyMicrosoftSubjectDn).get(\"CN\")!,\n bloodyMicrosoftSubjectDn,\n }\n }\n\n const cscFile = cscInfo.file\n if (cscFile == null) {\n return null\n }\n\n const certExt = path.extname(cscFile).toLowerCase()\n if (certExt === \".p12\" || certExt === \".pfx\") {\n return await this.getCertInfo(cscFile, cscInfo.password || \"\")\n }\n // Non-PKCS12 files (.crt, .cer): parse as plain X.509.\n // Returns null when the CN is absent — caller must set publisherName explicitly.\n return await readCertInfoFromX509(cscFile)\n }\n )\n\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.platformSpecificBuildOptions,\n platformSpecificBuildOptions => {\n const signing = getSigntoolFamilyConfig(platformSpecificBuildOptions)\n // signtool is the implicit default when win.sign is unset, so an absent config still\n // honours the WIN_CSC_LINK/cscLink fallback below (hsm/pkcs11 set signing.type explicitly).\n const isSigntool = signing == null || signing.type === \"signtool\"\n\n // signtool + hsm: store-based cert takes priority\n const subjectName = (signing as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null)?.certificateSubjectName\n const shaType = (signing as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null)?.certificateSha1\n if (subjectName != null || shaType != null) {\n return this.packager.vm.value\n .then(vm => this.getCertificateFromStoreInfo(platformSpecificBuildOptions, vm))\n .catch((e: any) => {\n // https://github.com/electron-userland/electron-builder/pull/2397\n if (signing?.sign == null) {\n throw e\n } else {\n log.debug({ error: e }, \"getCertificateFromStoreInfo error\")\n return null\n }\n })\n }\n\n const certificateFile = signing?.certificateFile\n if (certificateFile != null) {\n // Only signtool mode uses a password (HSM private key lives in the HSM, not the cert file)\n const certificatePassword = isSigntool ? this.packager.getCscPassword() : null\n return Promise.resolve({\n file: certificateFile,\n password: certificatePassword == null ? null : certificatePassword.trim(),\n })\n }\n\n // WIN_CSC_LINK env var fallback: only for signtool mode (including the implicit default)\n if (isSigntool) {\n const cscLink = this.packager.getCscLink(\"WIN_CSC_LINK\")\n if (cscLink == null || cscLink === \"\") {\n return Promise.resolve(null)\n }\n\n return importCertificate(cscLink, this.packager.tempDirManager, this.packager.projectDir)\n .catch((e: any) => {\n if (e instanceof InvalidConfigurationError) {\n throw new InvalidConfigurationError(`Env WIN_CSC_LINK is not correct, cannot resolve: ${e.message}`)\n } else {\n throw e\n }\n })\n .then(p => ({\n file: p,\n password: this.packager.getCscPassword(),\n }))\n }\n\n return Promise.resolve(null)\n }\n )\n\n initialize(): Promise<void> {\n return Promise.resolve()\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711\n async computePublisherName(target: Target, publisherName: string | null) {\n if (target instanceof AppXTarget && (await this.cscInfo.value) == null) {\n log.info({ reason: \"Windows Store only build\" }, \"AppX is not signed\")\n return publisherName ?? \"CN=ms\"\n }\n\n // When a signing cert is available, the cert's subject MUST be used so the APPX package\n // Publisher attribute matches the certificate — any mismatch causes SignerSign to fail with\n // ERROR_BAD_FORMAT. Only honour a user-supplied publisherName if it was explicitly configured\n // (non-null); otherwise derive from the certificate.\n const certInfo = await this.lazyCertInfo.value\n const publisher = publisherName ?? certInfo?.bloodyMicrosoftSubjectDn ?? null\n if (publisher == null) {\n throw new Error(\"Internal error: cannot compute subject using certificate info\")\n }\n return publisher\n }\n\n /**\n * Called when cscInfo is null. Returns true to skip signing, false to proceed, or throws.\n * Override in subclasses with different null-cert behaviour (HSM throws, PKCS#11 proceeds).\n */\n protected handleNullCscInfo(customSign: CustomWindowsSign | string | null | undefined): boolean {\n return !customSign // default: skip when no cert and no custom sign hook\n }\n\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n const signing = getSigntoolFamilyConfig(options.options)\n let hashes = signing?.signingHashAlgorithms\n // msi does not support dual-signing\n if (options.path.endsWith(\".msi\")) {\n hashes = [hashes != null && !hashes.includes(\"sha1\") ? \"sha256\" : \"sha1\"]\n } else if (options.path.endsWith(\".appx\")) {\n hashes = [\"sha256\"]\n } else if (hashes == null) {\n hashes = [\"sha1\", \"sha256\"]\n } else {\n hashes = Array.isArray(hashes) ? hashes : [hashes]\n }\n\n const name = this.packager.appInfo.productName\n const site = await this.packager.appInfo.computePackageUrl()\n\n const customSign = await resolveFunction(this.packager.appInfo.type, signing?.sign, \"sign\", await this.packager.getWorkspaceRoot())\n\n const cscInfo = await this.cscInfo.value\n\n if (cscInfo) {\n let logInfo: any = {\n file: log.filePath(options.path),\n }\n if (\"file\" in cscInfo) {\n logInfo = { ...logInfo, certificateFile: cscInfo.file }\n } else {\n logInfo = {\n ...logInfo,\n subject: cscInfo.subject,\n thumbprint: cscInfo.thumbprint,\n store: cscInfo.store,\n user: cscInfo.isLocalMachineStore ? \"local machine\" : \"current user\",\n }\n }\n log.info(logInfo, \"signing\")\n } else if (this.handleNullCscInfo(customSign)) {\n log.debug({ signHook: !!customSign, cscInfo }, \"no signing info identified, signing is skipped\")\n return false\n }\n\n const executor = customSign || ((config: CustomWindowsSignTaskConfiguration, packager: WinPackager) => this.doSign(config, packager))\n let isNest = false\n for (const hash of hashes) {\n const taskConfiguration: WindowsSignTaskConfiguration = { ...options, name, site, cscInfo, hash, isNest }\n await Promise.resolve(\n executor(\n {\n ...taskConfiguration,\n computeSignToolArgs: isWin => this.computeSignToolArgs(taskConfiguration, isWin),\n },\n this.packager\n )\n )\n isNest = true\n if (taskConfiguration.resultOutputPath != null) {\n await rename(taskConfiguration.resultOutputPath, options.path)\n }\n }\n\n return true\n }\n\n async getCertInfo(file: string, password: string): Promise<CertificateInfo> {\n const errorMessagePrefix = \"Cannot extract publisher name from code signing certificate. As workaround, set win.publisherName. Error: \"\n try {\n return await readCertInfo(file, password)\n } catch (e: any) {\n throw new InvalidConfigurationError(`${errorMessagePrefix}${e.message || e}`)\n }\n }\n\n // on windows be aware of http://stackoverflow.com/a/32640183/1910191\n computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm: VmManager = new VmManager()): Array<string> {\n return isWin ? this.computeWindowsSignArgs(options, vm) : this.computeOsslsigncodeArgs(options, vm)\n }\n\n protected isLegacyToolset(): boolean {\n const v = this.packager.config.toolsets?.winCodeSign\n return v == null || v === \"0.0.0\"\n }\n\n protected abstract computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string>\n protected abstract computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string>\n\n // allowX509: set to true by HsmSignManager to permit .crt/.cer (public chain only, key is in HSM).\n protected addCertificateArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean, allowX509 = false): void {\n if (options.cscInfo == null) {\n throw new Error(\"No code signing certificate configured. Provide certificateFile, certificateSha1, or certificateSubjectName.\")\n }\n const certificateFile = (options.cscInfo as FileCodeSigningInfo).file\n\n if (certificateFile == null) {\n // Certificate from store (Windows only)\n if (!isWin) {\n throw new Error(\"certificateSha1/certificateSubjectName supported only on Windows\")\n }\n\n const cscInfo = options.cscInfo as CertificateFromStoreInfo\n args.push(\"/sha1\", cscInfo.thumbprint)\n args.push(\"/s\", cscInfo.store)\n if (cscInfo.isLocalMachineStore) {\n args.push(\"/sm\")\n }\n } else {\n const certExtension = path.extname(certificateFile).toLowerCase()\n\n if (certExtension === \".p12\" || certExtension === \".pfx\") {\n args.push(isWin ? \"/f\" : \"-pkcs12\", vm.toVmFile(certificateFile))\n } else if (isWin && allowX509 && (certExtension === \".crt\" || certExtension === \".cer\")) {\n args.push(\"/f\", vm.toVmFile(certificateFile))\n } else {\n throw new InvalidConfigurationError(`Please specify pkcs12 (.p12/.pfx) file, ${certificateFile} is not correct`)\n }\n }\n }\n\n protected addCommonSigningArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n if (options.name) {\n args.push(isWin ? \"/d\" : \"-n\", options.name)\n }\n\n if (options.site) {\n args.push(isWin ? \"/du\" : \"-i\", options.site)\n }\n\n if (options.isNest) {\n args.push(isWin ? \"/as\" : \"-nest\")\n }\n\n const password = (options.cscInfo as FileCodeSigningInfo)?.password\n if (password) {\n args.push(isWin ? \"/p\" : \"-pass\", password)\n }\n\n const signing = getSigntoolFamilyConfig(options.options)\n const additionalCert = signing?.additionalCertificateFile\n if (additionalCert) {\n args.push(isWin ? \"/ac\" : \"-ac\", vm.toVmFile(additionalCert))\n }\n }\n\n getOutputPath(inputPath: string, hash: string) {\n const extension = path.extname(inputPath)\n return path.join(path.dirname(inputPath), `${path.basename(inputPath, extension)}-signed-${hash}${extension}`)\n }\n\n async getCertificateFromStoreInfo(options: WindowsConfiguration, vm: VmManager): Promise<CertificateFromStoreInfo> {\n const signing = getSigntoolFamilyConfig(options) as WindowsSigntoolSigningConfig | WindowsHsmSigningConfig | null\n const certificateSubjectName = signing?.certificateSubjectName\n const certificateSha1 = signing?.certificateSha1?.toUpperCase()\n\n const ps = await vm.powershellCommand.value\n const rawResult = await vm.exec(ps, [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-ChildItem -Recurse Cert: -CodeSigningCert | Select-Object -Property Subject,PSParentPath,Thumbprint | ConvertTo-Json -Compress\",\n ])\n const certList = rawResult.length === 0 ? [] : asArray<CertInfo>(JSON.parse(rawResult))\n for (const certInfo of certList) {\n if (\n (certificateSubjectName != null && !certInfo.Subject.includes(certificateSubjectName)) ||\n (certificateSha1 != null && certInfo.Thumbprint.toUpperCase() !== certificateSha1)\n ) {\n continue\n }\n\n const parentPath = certInfo.PSParentPath\n const store = parentPath.substring(parentPath.lastIndexOf(\"\\\\\") + 1)\n log.debug({ store, PSParentPath: parentPath }, \"auto-detect certificate store\")\n // https://github.com/electron-userland/electron-builder/issues/1717\n const isLocalMachineStore = parentPath.includes(\"Certificate::LocalMachine\")\n log.debug(null, \"auto-detect using of LocalMachine store\")\n return {\n thumbprint: certInfo.Thumbprint,\n subject: certInfo.Subject,\n store,\n isLocalMachineStore,\n }\n }\n\n throw new Error(`Cannot find certificate ${certificateSubjectName || certificateSha1}, all certs: ${rawResult}`)\n }\n\n async getToolPath(isWin = process.platform === \"win32\"): Promise<ToolInfo> {\n return getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin, this.packager.buildResourcesDir)\n }\n\n async doSign(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager) {\n // https://github.com/electron-userland/electron-builder/pull/1944\n const timeout = parseInt(process.env.SIGNTOOL_TIMEOUT as any, 10) || 10 * 60 * 1000\n let args: Array<string>\n let vm: VmManager\n // cscInfo can be null (e.g. PKCS#11 with no cert file); guard before using `in`.\n // CertificateFromStoreInfo (no `file` property) requires a Windows VM for cert-store lookup.\n const cscInfo = configuration.cscInfo\n const useVmIfNotOnWin = configuration.path.endsWith(\".appx\") || (cscInfo != null && !(\"file\" in cscInfo))\n const isWin = process.platform === \"win32\" || useVmIfNotOnWin\n const toolInfo = await getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin, this.packager.buildResourcesDir)\n const tool = toolInfo.path\n if (useVmIfNotOnWin) {\n vm = await packager.vm.value\n args = this.computeSignToolArgs(configuration, isWin, vm)\n } else {\n vm = new VmManager()\n args = configuration.computeSignToolArgs(isWin)\n }\n\n // signtool.exe (`/f`) is not safe to run concurrently — it races on the shared per-user crypto store.\n // Serialize real-Windows signtool invocations across processes; osslsigncode (`!isWin`) is file-isolated.\n const execSign = () => vm.exec(tool, args, { timeout, env: { ...process.env, ...(toolInfo.env || {}) } })\n await retry(() => (isWin ? withSigntoolLock(execSign) : execSign()), {\n retries: 2,\n interval: 15000,\n backoff: 10000,\n shouldRetry: (e: any) => {\n if (\n e.message.includes(\"The file is being used by another process\") ||\n e.message.includes(\"The specified timestamp server either could not be reached\") ||\n e.message.includes(\"No certificates were found that met all the given criteria.\") ||\n // Transient failure of SignerSignEx after cert selection, typically a concurrent-signtool race\n // on the per-user crypto store; the cross-process lock above makes this rare, retry covers the rest.\n e.message.includes(\"An error occurred while attempting to load the signing certificate\")\n ) {\n log.warn(`Attempt to code sign failed, another attempt will be made in 15 seconds: ${e.message}`)\n return true\n }\n return false\n },\n })\n }\n}\n\nexport class SigntoolSignManager extends SigntoolBaseSignManager {\n protected computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const signing = getSigntoolFamilyConfig(options.options)\n\n const inputFile = vm.toVmFile(options.path)\n const args = [\"sign\"]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const isRfc3161 = options.isNest || options.hash === \"sha256\"\n args.push(isRfc3161 ? \"/tr\" : \"/t\")\n const timestampUrl = isRfc3161 ? signing?.rfc3161TimeStampServer || \"http://timestamp.digicert.com\" : signing?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, true)\n\n // Hash algorithm\n if (this.isLegacyToolset()) {\n // Legacy v0.0.0: Only add /fd for non-SHA1 (original behavior)\n if (options.hash !== \"sha1\") {\n args.push(\"/fd\", options.hash)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n args.push(\"/td\", \"sha256\")\n }\n }\n } else {\n // Modern: Always add /fd (required by new Windows Kits)\n args.push(\"/fd\", options.hash.toLowerCase())\n // Only add /td for RFC3161 timestamps (incompatible with /t)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\" && (options.isNest || options.hash === \"sha256\")) {\n args.push(\"/td\", \"sha256\")\n }\n }\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, true)\n\n // Windows-specific\n args.push(\"/debug\")\n args.push(inputFile) // Must be last\n\n return args\n }\n\n protected computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const signing = getSigntoolFamilyConfig(options.options)\n\n const inputFile = vm.toVmFile(options.path)\n const outputPath = this.getOutputPath(inputFile, options.hash)\n options.resultOutputPath = outputPath\n\n const args = [\"sign\", \"-in\", inputFile, \"-out\", outputPath]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const timestampUrl = signing?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(\"-t\", timestampUrl)\n }\n\n // Certificate file\n this.addCertificateArgs(args, options, vm, false)\n\n // Hash algorithm\n args.push(\"-h\", options.hash.toLowerCase())\n\n // Optional parameters (name, site, nest, password, additionalCert)\n this.addCommonSigningArgs(args, options, vm, false)\n\n // Proxy support\n const httpsProxy = process.env.HTTPS_PROXY\n if (httpsProxy?.length) {\n args.push(\"-p\", httpsProxy)\n }\n\n return args\n }\n}\n"]}
|
package/dist/configuration.d.ts
CHANGED
|
@@ -656,13 +656,13 @@ export interface ToolsetConfig {
|
|
|
656
656
|
* Available versions:
|
|
657
657
|
* | Version | Notes |
|
|
658
658
|
* |---------|-------|
|
|
659
|
-
* | `"1.1
|
|
659
|
+
* | `"1.2.1"` | Current default |
|
|
660
660
|
*
|
|
661
661
|
* Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/icons/CHANGELOG.md
|
|
662
662
|
*
|
|
663
|
-
* @default "1.1
|
|
663
|
+
* @default "1.2.1"
|
|
664
664
|
*/
|
|
665
|
-
readonly icons?: "1.1
|
|
665
|
+
readonly icons?: "1.2.1" | ToolsetCustom | null;
|
|
666
666
|
}
|
|
667
667
|
/**
|
|
668
668
|
* A custom toolset bundle supplied by the user in place of a built-in versioned bundle.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"","sourcesContent":["import { Arch } from \"builder-util\"\nimport { BeforeBuildContext, Target } from \"./core.js\"\nimport { ElectronBrandingOptions } from \"./electron/ElectronFramework.js\"\nimport { PrepareApplicationStageDirectoryOptions } from \"./Framework.js\"\nimport { AppXOptions } from \"./options/AppXOptions.js\"\nimport { AppImageOptions, DebOptions, FlatpakOptions, LinuxConfiguration, LinuxTargetSpecificOptions, PacmanOptions, RpmOptions } from \"./options/linuxOptions.js\"\nimport { DmgOptions, MacConfiguration, MasConfiguration } from \"./options/macOptions.js\"\nimport { MsiOptions } from \"./options/MsiOptions.js\"\nimport { MsiWrappedOptions } from \"./options/MsiWrappedOptions.js\"\nimport { PkgOptions } from \"./options/pkgOptions.js\"\nimport { PlatformSpecificBuildOptions } from \"./options/PlatformSpecificBuildOptions.js\"\nimport { SnapcraftOptions } from \"./options/SnapOptions.js\"\nimport { SquirrelWindowsOptions } from \"./options/SquirrelWindowsOptions.js\"\nimport { WindowsConfiguration } from \"./options/winOptions.js\"\nimport { BuildResult } from \"./packager.js\"\nimport { ArtifactBuildStarted, ArtifactCreated } from \"./packagerApi.js\"\nimport { PlatformPackager } from \"./platformPackager.js\"\nimport { NsisOptions, NsisWebOptions, PortableOptions } from \"./targets/win/nsis/nsisOptions.js\"\nimport { ElectronGetOptions } from \"./util/electronGet.js\"\nimport { FuseOptionsV1 } from \"./options/FuseOptionsV1.js\"\n\n// duplicate appId here because it is important\n/**\n * Configuration options shared across all platforms.\n *\n * These properties apply regardless of the target platform and control general build behaviour such\n * as the application identity, output paths, native dependency rebuilding, toolset versions, and\n * platform-specific target sub-configurations.\n */\nexport interface CommonConfiguration {\n /**\n * The application identifier.\n *\n * Used as [`CFBundleIdentifier`](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier)\n * on macOS and as the\n * [Application User Model ID](https://learn.microsoft.com/en-us/windows/win32/shell/appids)\n * on Windows (NSIS target only; Squirrel.Windows does not support custom Application User Model IDs).\n *\n * It is strongly recommended to set an explicit, reverse-DNS-style identifier (e.g. `\"com.example.myapp\"`)\n * rather than relying on the generated default.\n *\n * @default com.electron.${name}\n */\n readonly appId?: string | null\n\n /**\n * The human-readable product name displayed in installers, the macOS dock, and the Windows\n * Apps & Features list.\n *\n * Unlike the `name` field in `package.json`, this value may contain spaces and other characters\n * that are not allowed in npm package names.\n *\n * Resolution order:\n * 1. `productName` inside the `build` configuration block.\n * 2. `productName` at the top level of `package.json`.\n * 3. `name` at the top level of `package.json`.\n */\n readonly productName?: string | null\n\n /**\n * The copyright string embedded in the built artifacts.\n *\n * Appears in the Windows `LegalCopyright` version-info field and the macOS `NSHumanReadableCopyright`\n * Info.plist key.\n *\n * @default Copyright © ${year} ${author}\n */\n readonly copyright?: string | null\n\n /**\n * Overrides for input/output directory paths used during the build.\n *\n * @see {@link MetadataDirectories}\n */\n readonly directories?: MetadataDirectories | null\n\n /**\n * Pinned versions of the binary toolsets electron-builder downloads and uses internally.\n *\n * Each property selects a specific release of the corresponding tool bundle. Set a property to\n * `\"0.0.0\"` to force the legacy bundle (pre-v27 behaviour). Leave a property unset (or set to\n * `null`) to use the modern default for that toolset.\n *\n * @see {@link ToolsetConfig}\n */\n readonly toolsets?: ToolsetConfig | null\n\n /**\n * macOS-specific build options (signing, entitlements, notarization, target categories, etc.).\n * @see {@link MacConfiguration}\n */\n readonly mac?: MacConfiguration | null\n /**\n * macOS App Store (MAS) submission options.\n * @see {@link MasConfiguration}\n */\n readonly mas?: MasConfiguration | null\n /**\n * macOS App Store development-signing options (`mas-dev` target).\n * Used for local testing of MAS builds without submitting to the store.\n * @see {@link MasConfiguration}\n */\n readonly masDev?: MasConfiguration | null\n /**\n * macOS DMG disk image options (background image, window position, icon layout, licence, etc.).\n * @see {@link DmgOptions}\n */\n readonly dmg?: DmgOptions | null\n /**\n * macOS PKG flat-package installer options.\n * @see {@link PkgOptions}\n */\n readonly pkg?: PkgOptions | null\n\n /**\n * Windows-specific build options (signing, NSIS, icon, file associations, etc.).\n * @see {@link WindowsConfiguration}\n */\n readonly win?: WindowsConfiguration | null\n /**\n * NSIS one-click installer options.\n *\n * NSIS (Nullsoft Scriptable Install System) is the default Windows installer format produced by\n * electron-builder. It generates a lightweight, self-extracting `.exe` installer.\n *\n * @see {@link NsisOptions}\n */\n readonly nsis?: NsisOptions | null\n /**\n * NSIS web installer options.\n *\n * Like the standard NSIS installer but the app payload is downloaded from a remote URL at install\n * time rather than bundled into the `.exe`. Useful for very large apps or staged rollouts.\n *\n * @see {@link NsisWebOptions}\n */\n readonly nsisWeb?: NsisWebOptions | null\n /**\n * Portable executable options.\n *\n * Produces a single `.exe` that requires no installation — it extracts and runs directly.\n *\n * @see {@link PortableOptions}\n */\n readonly portable?: PortableOptions | null\n /**\n * Windows Store (MSIX/AppX) package options.\n *\n * Produces a `.appx` or `.msix` package suitable for distribution through the Microsoft Store or\n * side-loading.\n *\n * @see {@link AppXOptions}\n */\n readonly appx?: AppXOptions | null\n /**\n * WiX-based MSI installer options.\n *\n * Produces a traditional `.msi` package built with the WiX Toolset. Best for enterprise\n * deployments that require MSI-based installation policies.\n *\n * @see {@link MsiOptions}\n */\n readonly msi?: MsiOptions | null\n /**\n * MSI-wrapped NSIS installer options.\n *\n * Wraps the standard NSIS installer inside an MSI package so that it can be deployed via\n * Group Policy or other MSI-only channels while preserving the NSIS installer UX.\n *\n * @see {@link MsiWrappedOptions}\n */\n readonly msiWrapped?: MsiWrappedOptions | null\n /**\n * Squirrel.Windows auto-update installer options.\n *\n * Requires the `electron-builder-squirrel-windows` optional dependency.\n *\n * @see {@link SquirrelWindowsOptions}\n */\n readonly squirrelWindows?: SquirrelWindowsOptions | null\n /**\n * General Linux build options shared across all Linux targets (icon, category, desktop entry,\n * executable name, etc.). Target-specific compression and packaging options live in the\n * per-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`, etc.).\n *\n * @see {@link LinuxConfiguration}\n */\n readonly linux?: LinuxConfiguration | null\n /**\n * Debian package options.\n *\n * Targets Debian, Ubuntu, and Debian-based distributions. Produces a `.deb` archive\n * installable via `dpkg -i` or `apt install ./package.deb`.\n *\n * @see {@link DebOptions}\n */\n readonly deb?: DebOptions | null\n /**\n * Snapcraft configuration.\n *\n * Selects the snapcraft base and provides per-core options:\n * - `base: \"core18\" | \"core20\" | \"core22\"` — legacy bases; still functional but not recommended\n * for new apps.\n * - `base: \"core24\"` — modern base with the GNOME extension (recommended, requires Electron 25+).\n * - `base: \"custom\"` — pass an existing `snapcraft.yaml` through unchanged; no plugs, extensions,\n * or desktop files are injected.\n *\n * @example\n * ```json\n * { \"snapcraft\": { \"base\": \"core24\", \"core24\": { \"useLXD\": true } } }\n * ```\n *\n * @see {@link SnapcraftOptions}\n */\n readonly snapcraft?: SnapcraftOptions | null\n /**\n * AppImage options.\n *\n * AppImage is a portable application format that bundles the app and its runtime dependencies\n * into a single self-contained executable that runs on most Linux distributions without\n * installation. The produced `.AppImage` file is executable after `chmod +x`.\n *\n * @see {@link AppImageOptions}\n */\n readonly appImage?: AppImageOptions | null\n /**\n * Flatpak options.\n *\n * Flatpak is a sandboxed application distribution format for Linux distributed via\n * [Flathub](https://flathub.org/) or self-hosted OSTree repositories.\n *\n * @see {@link FlatpakOptions}\n */\n readonly flatpak?: FlatpakOptions | null\n /**\n * Pacman package options.\n *\n * Targets Arch Linux and Arch-based distributions (Manjaro, EndeavourOS, etc.).\n * Produces a `.pacman` archive installable via `pacman -U ./package.pacman`.\n *\n * @see {@link PacmanOptions}\n */\n readonly pacman?: PacmanOptions | null\n /**\n * RPM package options.\n *\n * Targets Fedora, Red Hat Enterprise Linux, SUSE, and RPM-based distributions.\n * Produces a `.rpm` archive installable via `rpm -i` or `dnf install ./package.rpm`.\n *\n * @see {@link RpmOptions}\n */\n readonly rpm?: RpmOptions | null\n /**\n * FreeBSD `pkg` package options.\n *\n * Produces a `.pkg` archive for the FreeBSD package manager.\n */\n readonly freebsd?: LinuxTargetSpecificOptions | null\n /**\n * Solaris IPS package options.\n *\n * Produces a `.p5p` archive for the Solaris Image Packaging System (`pkg`).\n */\n readonly p5p?: LinuxTargetSpecificOptions | null\n /**\n * Alpine Linux APK package options.\n *\n * Produces an `.apk` archive installable via `apk add --allow-untrusted ./package.apk`.\n */\n readonly apk?: LinuxTargetSpecificOptions | null\n\n /**\n * Additional command-line arguments appended to the package manager's `install` command when\n * electron-builder installs app dependencies (i.e., when `node_modules` is missing and a fresh\n * install is required).\n *\n * These arguments are appended **only** during the install phase, not during the rebuild phase.\n * To influence `@electron/rebuild` directly, see {@link NativeModulesConfig.rebuildMode}.\n *\n * @example\n * ```json\n * { \"npmArgs\": [\"--prefer-offline\", \"--ignore-scripts\"] }\n * ```\n */\n readonly npmArgs?: Array<string> | string | null\n\n /**\n * Configuration for native Node.js module installation and rebuilding.\n *\n * Groups all options that control how electron-builder handles native modules — from forcing\n * source builds during install through to the `@electron/rebuild` compilation mode.\n *\n * @see {@link NativeModulesConfig}\n */\n readonly nativeModules?: NativeModulesConfig | null\n\n /**\n * The build number.\n *\n * Maps to the `--iteration` flag for FPM-based Linux targets and is appended to the version\n * string in `CFBundleVersion` (macOS) and `FileVersion` (Windows) when {@link buildVersion} is\n * not set explicitly.\n *\n * If not set, falls back to the first defined environment variable among:\n * `BUILD_NUMBER`, `TRAVIS_BUILD_NUMBER`, `APPVEYOR_BUILD_NUMBER`, `CIRCLE_BUILD_NUM`,\n * `BUILD_BUILDNUMBER`, `CI_PIPELINE_IID`.\n */\n readonly buildNumber?: string | null\n\n /**\n * The full build version string.\n *\n * Maps to `CFBundleVersion` on macOS and the `FileVersion` metadata field on Windows.\n * Defaults to the `version` field from `package.json`.\n *\n * If `buildVersion` is not set but {@link buildNumber} is defined (or resolved from an\n * environment variable), the effective build version becomes `${version}.${buildNumber}`.\n */\n readonly buildVersion?: string | null\n\n /**\n * Whether to download the FFmpeg library variant from Electron's release assets and replace the\n * default (proprietary codec) FFmpeg library before signing.\n *\n * The alternate FFmpeg is compiled without proprietary codec support (H.264, AAC, etc.) and is\n * required for distributing on certain platforms (e.g., Linux distributions that prohibit\n * proprietary codecs). Enabling this swaps the bundled `ffmpeg` dynamic library before the app\n * is signed.\n */\n readonly downloadAlternateFFmpeg?: boolean\n\n /**\n * Additional properties to deep-merge into the app's `package.json` at build time.\n *\n * Useful for injecting build-time metadata (e.g., a git commit hash or CI build URL) that\n * should be readable at runtime via `require('./package.json')` or `import.meta.url`.\n *\n * @example\n * ```json\n * { \"extraMetadata\": { \"commitHash\": \"abc1234\", \"buildDate\": \"2025-01-01\" } }\n * ```\n */\n readonly extraMetadata?: any\n\n /**\n * Whether to throw an error and abort the build if the app could not be code-signed.\n *\n * Set to `true` in release pipelines to catch missing or misconfigured signing credentials\n * before producing unsigned artifacts. When `false` (the default), missing signing credentials\n * produce a warning and the build continues unsigned.\n *\n * @default false\n */\n readonly forceCodeSigning?: boolean\n\n /**\n * Whether to include `.pdb` (Program Database) symbol files in the output.\n *\n * PDB files enable Windows crash-dump analysis but significantly increase artifact size. Enable\n * for internal builds where you want symbol information; disable for public distribution.\n *\n * @default false\n */\n readonly includePdb?: boolean\n\n /**\n * Whether to remove the `scripts` field from bundled `package.json` files.\n *\n * Lifecycle scripts (`preinstall`, `postinstall`, etc.) have no meaning inside a packaged\n * Electron app and can trigger unintended behaviour if any tooling inspects the bundled\n * `package.json`. Removing them reduces artifact size and prevents accidental execution.\n *\n * @default true\n */\n readonly removePackageScripts?: boolean\n\n /**\n * Whether to remove the `keywords` field from bundled `package.json` files.\n *\n * The `keywords` array is only meaningful for package registry discoverability and has no\n * runtime value inside a packaged Electron app. Removing it marginally reduces artifact size.\n *\n * @default true\n */\n readonly removePackageKeywords?: boolean\n\n /**\n * Options forwarded to [`@electron/fuses`](https://github.com/electron/fuses) to flip Electron\n * feature flags in the binary.\n *\n * Fuses are compile-time-like flags baked into the Electron binary that cannot be changed at\n * runtime. Flipping them is the approved mechanism for hardening Electron apps (e.g., disabling\n * `ELECTRON_RUN_AS_NODE`, enabling ASAR integrity, etc.).\n *\n * electron-builder flips fuses after packaging but before signing so that the final signature\n * covers the modified binary.\n *\n * @see {@link FuseOptionsV1}\n */\n readonly electronFuses?: FuseOptionsV1 | null\n\n /**\n * Configuration for experimental concurrent (multi-platform / multi-arch) builds.\n *\n * When `jobs > 1`, electron-builder runs up to `jobs` platform builds in parallel. This is an\n * experimental feature — use with caution and verify that your hook functions and build resources\n * are safe to execute concurrently.\n *\n * @see {@link Concurrency}\n */\n readonly concurrency?: Concurrency | null\n}\n\n/**\n * The root build configuration object passed to electron-builder.\n *\n * Extends {@link CommonConfiguration} with top-level Electron-specific options, configuration\n * inheritance/presets, and all per-platform build hooks.\n */\nexport interface Configuration extends CommonConfiguration, PlatformSpecificBuildOptions, Hooks {\n /**\n * Options forwarded to [`@electron/get`](https://github.com/electron/get) when downloading the\n * Electron distribution to package.\n */\n readonly electronGet?: ElectronGetOptions | null\n\n /**\n * Electron branding overrides.\n *\n * Required only when packaging a custom Electron fork that ships a modified `BRANDING.json`\n * (e.g., a fork that renames the `Electron Helper` process or the `Electron Framework`).\n * Standard Electron builds do not need this.\n */\n readonly electronBranding?: ElectronBrandingOptions\n\n /**\n * The Electron version to package against.\n *\n * Defaults to the version of the `electron` (or `electron-prebuilt`) dependency declared in\n * `package.json`. Set this explicitly only when the installed Electron version is not the one\n * you want to package against (e.g., in monorepos where the Electron dependency lives in a\n * different workspace).\n */\n electronVersion?: string | null\n\n /**\n * One or more configuration presets or file paths to merge into this configuration.\n *\n * Accepts a string or array of strings, each of which is either:\n * - A built-in preset name (`\"react-cra\"` is the only currently supported value).\n * - A path to a JS/JSON config file relative to the project directory.\n *\n * Configs are merged left-to-right using a deep-assign strategy that properly combines `files`\n * glob patterns rather than replacing them.\n *\n * The `react-cra` preset is applied automatically when `react-scripts` is found in\n * `dependencies`. Set `extends: null` to opt out of automatic preset detection.\n */\n extends?: Array<string> | string | null\n}\n\n/**\n * Configuration for native Node.js module installation and rebuilding.\n *\n * All options that control how electron-builder handles native modules — from forcing source\n * builds at install time through to the `@electron/rebuild` compilation mode.\n */\nexport interface NativeModulesConfig {\n /**\n * Whether to pass `--build-from-source` to the package manager when installing native\n * dependencies, forcing them to compile from source rather than using pre-built binaries.\n *\n * Useful when pre-built binaries are not available for the target platform/arch combination,\n * or when you need to ensure native modules are compiled against the exact Electron ABI.\n *\n * @default false\n */\n buildDependenciesFromSource?: boolean\n\n /**\n * Whether to run `node-gyp rebuild` with Electron headers before packaging.\n *\n * This is a low-level escape hatch for cases where the standard `@electron/rebuild` path\n * (controlled by {@link npmRebuild}) is insufficient. Most projects should leave this `false`\n * and rely on `@electron/rebuild` instead.\n *\n * When `true`, electron-builder runs `node-gyp rebuild` with the correct `npm_config_*`\n * environment variables set for the target Electron version and architecture before the\n * normal rebuild step.\n *\n * @default false\n */\n readonly nodeGypRebuild?: boolean\n\n /**\n * Whether to rebuild native Node.js modules for the target Electron version and architecture\n * before packaging.\n *\n * When `true` (the default), electron-builder runs `@electron/rebuild` against the app's\n * `node_modules` directory to ensure all native modules are compiled against the correct Electron\n * ABI. Set to `false` to skip this step entirely — useful when native modules are pre-built\n * elsewhere in your pipeline or when the app has no native dependencies.\n *\n * The compilation mode (`sequential` vs `parallel`) is controlled by {@link rebuildMode}.\n *\n * @default true\n */\n readonly npmRebuild?: boolean\n\n /**\n * Compilation mode for `@electron/rebuild`.\n *\n * - `\"sequential\"` — rebuilds native modules one at a time. Safer in memory-constrained\n * environments and produces cleaner log output.\n * - `\"parallel\"` — rebuilds all native modules concurrently. Faster on machines with many cores\n * and plentiful memory, but may exhaust resources on CI agents with limited RAM.\n *\n * @default \"sequential\"\n */\n readonly rebuildMode?: \"sequential\" | \"parallel\" | null\n}\n\nexport type Hook<T, V> = (contextOrPath: T) => Promise<V> | V\n\nexport interface PackContext {\n readonly outDir: string\n readonly appOutDir: string\n readonly packager: PlatformPackager<any>\n readonly electronPlatformName: string\n readonly arch: Arch\n readonly targets: Array<Target>\n}\nexport type AfterPackContext = PackContext\nexport type BeforePackContext = PackContext\nexport type AfterExtractContext = PackContext\n\n/**\n * Version pins and custom bundle overrides for the binary toolsets that electron-builder\n * downloads and caches locally.\n *\n * Each toolset is a versioned archive hosted at\n * [electron-userland/electron-builder-binaries](https://github.com/electron-userland/electron-builder-binaries/releases).\n * Omitting a property (or setting it to `null`) selects the modern default for that toolset.\n * Setting a property to `\"0.0.0\"` forces the legacy bundle — useful only for diagnosing\n * regressions introduced by newer toolset bundles.\n *\n * To supply your own bundle, set the property to a {@link ToolsetCustom} object with a `url`\n * (https:// or file://) and a `checksum` for verification. The bundle must mirror the expected\n * directory layout of the corresponding built-in bundle; see the build scripts at\n * https://github.com/electron-userland/electron-builder-binaries/tree/master/packages.\n */\nexport interface ToolsetConfig {\n /**\n * Version of the `win-codesign` bundle used for Windows code signing and resource editing.\n *\n * The bundle ships:\n * - **`signtool.exe`** (Windows) / **`osslsigncode`** (macOS & Linux) — used to sign `.exe`,\n * `.dll`, and `.msix` artifacts.\n * - **`rcedit`** — used to embed version metadata and icons into `.exe` files.\n * - **Windows Kits** (`10.0.26100.0`) — used by AppX/MSIX packaging (`makeappx`, `signtool`).\n *\n * Available versions:\n * | Version | Contents |\n * |---------|----------|\n * | `\"0.0.0\"` | Legacy bundle — `winCodeSign-2.6.0` (pre-v27 default) |\n * | `\"1.0.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.0.0 |\n * | `\"1.1.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.1.0 |\n * | `\"1.1.1\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.1.1 |\n * | `\"1.2.1\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.2.1 |\n * | `\"1.3.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.3.0 + separate ATS dlib bundle + .NET 8 runtime (required for Azure Trusted Signing `signtool /dlib`) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/win-codesign/CHANGELOG.md\n *\n * @default \"1.1.0\"\n */\n readonly winCodeSign?: \"0.0.0\" | \"1.0.0\" | \"1.1.0\" | \"1.1.1\" | \"1.2.1\" | \"1.3.0\" | ToolsetCustom | null\n\n /**\n * Version of the AppImage toolset bundle used for building `.AppImage` files.\n *\n * The bundle ships:\n * - **`mksquashfs`** — creates the SquashFS filesystem embedded in the AppImage.\n * - **`desktop-file-validate`** — validates the generated `.desktop` entry.\n * - **AppImage runtime** — the self-executing stub that mounts the SquashFS at launch.\n *\n * Available versions:\n * | Version | Runtime date | Notes |\n * |---------|-------------|-------|\n * | `\"0.0.0\"` | Legacy | FUSE2-based AppImage runtime (pre-v27 default) |\n * | `\"1.0.2\"` | 20251108 | Static-runtime (FUSE3-compatible) |\n * | `\"1.0.3\"` | 20251108 | Static-runtime (FUSE3-compatible); recommended (default) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/appimage/CHANGELOG.md\n *\n * @default \"1.0.3\"\n */\n readonly appimage?: \"0.0.0\" | \"1.0.2\" | \"1.0.3\" | ToolsetCustom | null\n\n /**\n * Version of the NSIS toolset bundle used to compile Windows installers.\n *\n * The bundle ships:\n * - **`makensis`** — the NSIS compiler invoked to build `.nsi` scripts into `.exe` installers.\n * - **NSIS plugins** — the plugin DLLs (`NsisMultiUser`, `UAC`, `StdUtils`, etc.) referenced by\n * electron-builder's default installer scripts.\n * - **`elevate.exe`** — UAC elevation helper included in NSIS installers.\n *\n * Available versions:\n * | Version | `makensis` version | Notes |\n * |---------|------------------|-------|\n * | `\"0.0.0\"` | 3.0.4.1 | Legacy split bundle — `nsis` + `nsis-resources` archives (pre-v27 default) |\n * | `\"1.2.1\"` | 3.12 | Unified bundle — single archive, entrypoint scripts auto-set `NSISDIR` (default) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/nsis/CHANGELOG.md\n *\n * @default \"1.2.1\"\n */\n readonly nsis?: \"0.0.0\" | \"1.2.1\" | ToolsetCustom | null\n\n /**\n * Version of the Wine bundle used to run Windows tools (NSIS, rcedit, signtool) on\n * non-Windows hosts (macOS and Linux).\n *\n * Wine is only required when building Windows targets on a non-Windows machine. On Windows,\n * this setting has no effect.\n *\n * Available versions:\n * | Version | Wine version | Platform support | Notes |\n * |---------|-------------|-----------------|-------|\n * | `\"0.0.0\"` | 4.0.1 | macOS | Legacy portable bundle (default) |\n * | `\"1.0.1\"` | 11.0 | macOS | Supports arm64 macOS via Rosetta |\n *\n * To use a custom Wine binary, use a `ToolsetCustom` object.\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/wine/CHANGELOG.md\n *\n * @default \"0.0.0\"\n */\n readonly wine?: \"0.0.0\" | \"1.0.1\" | ToolsetCustom | null\n\n /**\n * Version of the FPM bundle used to build Linux packages (`.deb`, `.rpm`, `.pacman`, etc.)\n * on macOS and Linux hosts.\n *\n * Available versions:\n * | Version | FPM version | Notes |\n * |---------|------------|-------|\n * | `\"2.2.1\"` | 1.17.0 (Ruby 3.4.3) | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/fpm/CHANGELOG.md\n *\n * @default \"2.2.1\"\n */\n readonly fpm?: \"2.2.1\" | ToolsetCustom | null\n\n /**\n * Version of the Linux-tools-mac bundle used to produce `.tar.lz` archives and build\n * Linux targets on macOS hosts.\n *\n * The bundle ships macOS-native builds of `ar`, `lzip`, and `gtar` (GNU tar).\n *\n * Available versions:\n * | Version | Notes |\n * |---------|-------|\n * | `\"1.0.0\"` | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/linux-tools-mac/CHANGELOG.md\n *\n * @default \"1.0.0\"\n */\n readonly linuxToolsMac?: \"1.0.0\" | ToolsetCustom | null\n\n /**\n * Version of the 7-Zip binary bundle used internally to extract `.7z` and `.tar.xz` archives.\n *\n * Set to a {@link ToolsetCustom} object to supply your own 7za binary.\n * The `url` must point to a directory (or a `.tar.gz`/`.zip` archive of one) that contains\n * `bin/7za` (macOS/Linux) or `bin/7za.exe` (Windows).\n *\n * **Bootstrap constraint:** the custom bundle itself must be a `.tar.gz` or `.zip` archive\n * (or a bare `file://` directory). `.7z` and `.tar.xz` archives cannot be used here because\n * extracting them requires 7za — a circular dependency.\n *\n * @default \"1.0.0\"\n */\n readonly sevenZip?: \"1.0.0\" | ToolsetCustom | null\n\n /**\n * Version of the icons-conversion bundle used to convert source images to `.icns`, `.ico`,\n * and PNG icon sets.\n *\n * Set to a {@link ToolsetCustom} object to supply your own icons bundle directory.\n *\n * Available versions:\n * | Version | Notes |\n * |---------|-------|\n * | `\"1.1.0\"` | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/icons/CHANGELOG.md\n *\n * @default \"1.1.0\"\n */\n readonly icons?: \"1.1.0\" | ToolsetCustom | null\n}\n\n/**\n * A custom toolset bundle supplied by the user in place of a built-in versioned bundle.\n *\n * The bundle must mirror the expected directory layout of the corresponding built-in bundle.\n * See the build scripts at\n * https://github.com/electron-userland/electron-builder-binaries/tree/master/packages.\n *\n * File formats supported for `url` archives: `.zip`, `.7z`, `.tar.gz`, `.tar.xz`.\n *\n * @example\n * ```json\n * {\n * \"toolsets\": {\n * \"nsis\": {\n * \"url\": \"file:///path/to/my-nsis-bundle.tar.gz\",\n * \"checksum\": \"abc123...\",\n * \"version\": \"my-custom-1.0\"\n * }\n * }\n * }\n * ```\n */\nexport interface ToolsetCustom {\n /**\n * The `https://` URL or `file://` path to load the custom toolset bundle from.\n *\n * - `https://` — downloaded and cached locally; the archive is extracted before use.\n * - `file:///absolute/path` — used directly; relative paths must be within the project resources dir.\n *\n * Archives (`.zip`, `.7z`, `.tar.gz`, `.tar.xz`) are extracted automatically.\n * A bare directory path (no archive) is used as-is.\n */\n readonly url: string\n\n /**\n * SHA checksum of the custom toolset bundle for verification.\n * Required for remote (`https://`) URLs and local archive files (`file://`).\n * Not needed for bare directory paths — the directory is used as-is with no caching.\n */\n readonly checksum?: string\n\n /**\n * Optional version label used in the local cache directory name.\n * Falls back to the first 8 characters of `checksum` when omitted.\n */\n readonly version?: string\n}\n\n/**\n * Lifecycle hooks that run at specific points during the electron-builder pipeline.\n *\n * Each hook can be specified as:\n * - An **inline function** (JavaScript/TypeScript config files only):\n * ```js\n * // electron-builder.config.js\n * module.exports = { beforePack: async (context) => { /* ... *\\/ } }\n * ```\n * - A **path** to a CommonJS/ESM module (relative to the project directory) that exports the\n * hook as its **default export**:\n * ```json\n * { \"build\": { \"beforePack\": \"./scripts/myHook.js\" } }\n * ```\n * ```js\n * // scripts/myHook.js\n * export default async function (context) { /* ... *\\/ }\n * ```\n */\nexport interface Hooks {\n /**\n * Called immediately before electron-builder begins packing the app for each platform/arch\n * combination.\n *\n * Use this hook to perform last-minute modifications to source files or build resources before\n * they are read by the packager.\n *\n * Receives a {@link BeforePackContext}.\n */\n readonly beforePack?: Hook<BeforePackContext, void> | string | null\n\n /**\n * Called after the prebuilt Electron binary has been extracted to the staging directory but\n * before the app files have been copied into it.\n *\n * Use this hook to patch or augment the Electron binary itself (e.g. rename helper processes,\n * inject native libraries) before the app payload is laid down on top.\n *\n * Receives an {@link AfterExtractContext}.\n */\n readonly afterExtract?: Hook<AfterExtractContext, void> | string | null\n\n /**\n * Called after the app files have been copied into the staging directory (and ASAR created if\n * applicable) but **before** signing and before the output archive/installer is built.\n *\n * Use this hook to post-process the staged app bundle (e.g. strip debug symbols, inject\n * platform-specific resources).\n *\n * Receives an {@link AfterPackContext}.\n */\n readonly afterPack?: Hook<AfterPackContext, void> | string | null\n\n /**\n * Called after code signing but **before** the signed app is packed into the final\n * distributable format (e.g. before `dmg` is created from the signed `.app`).\n *\n * Use this hook to perform post-sign validation or to add signed resources that are not part of\n * the main app bundle.\n *\n * Receives an {@link AfterPackContext}.\n */\n readonly afterSign?: Hook<AfterPackContext, void> | string | null\n\n /**\n * Called when an individual artifact build starts (e.g. just before a `.dmg` or `.exe` is\n * written to disk).\n *\n * Receives an {@link ArtifactBuildStarted}.\n */\n readonly artifactBuildStarted?: Hook<ArtifactBuildStarted, void> | string | null\n\n /**\n * Called when an individual artifact has been successfully built and written to disk.\n *\n * Use this hook to collect artifact paths, upload to custom destinations, or trigger\n * post-processing steps.\n *\n * Receives an {@link ArtifactCreated}.\n */\n readonly artifactBuildCompleted?: Hook<ArtifactCreated, void> | string | null\n\n /**\n * Called after **all** artifacts across all platforms/architectures have been built.\n *\n * May return an array of additional file paths that should be treated as publish targets\n * (i.e. uploaded to the configured publisher).\n *\n * Receives a {@link BuildResult}.\n *\n * @example\n * ```js\n * export default async function afterAllArtifactBuild(result) {\n * return [\"/path/to/extra-file.txt\"]\n * }\n * ```\n */\n readonly afterAllArtifactBuild?: Hook<BuildResult, Array<string>> | string | null\n\n /**\n * Called after the WiX MSI project XML has been written to a temporary directory but before\n * `candle.exe` / `light.exe` compile it into a `.msi` package.\n *\n * The hook receives the path to the project directory as a string. Use it to patch the generated\n * `.wxs` files for customizations not exposed through electron-builder's options.\n */\n readonly msiProjectCreated?: Hook<string, void> | string | null\n\n /**\n * Called after the AppX/MSIX manifest XML has been written to the staging directory but before\n * `makeappx` packages it.\n *\n * The hook receives the path to the manifest file as a string. Use it to inject custom manifest\n * extensions (capabilities, protocol handlers, etc.) not exposed through {@link AppXOptions}.\n */\n readonly appxManifestCreated?: Hook<string, void> | string | null\n\n /**\n * Called for every file inside each `node_modules` package directory as electron-builder\n * decides whether to include it in the packaged app.\n *\n * Return `true` to force-include the file regardless of the default exclusion rules.\n * Return `false` or `undefined` to let electron-builder apply its normal filtering logic.\n *\n * Receives the absolute path of the file as a string.\n */\n readonly onNodeModuleFile?: Hook<string, void | boolean> | string | null\n\n /**\n * Called before dependencies are installed or native modules are rebuilt.\n *\n * Return `false` (or a `Promise` that resolves to `false`) to skip the install/rebuild step\n * entirely — useful when you manage `node_modules` externally (e.g. in a CI pipeline that\n * restores them from cache). When not set, electron-builder proceeds with the normal\n * install/rebuild flow.\n *\n * If this hook is provided and `node_modules` is missing, electron-builder will not perform\n * the production-dependencies check.\n *\n * Receives a {@link BeforeBuildContext}.\n */\n readonly beforeBuild?: Hook<BeforeBuildContext, boolean | void> | string | null\n\n /**\n * Override the source of the Electron distribution to stage.\n *\n * Should return the path to either:\n * - A **directory** containing a pre-built, unpacked Electron app (e.g. `~/electron/out/R`).\n * - A **directory** containing Electron zip archives following the naming convention\n * `electron-v${version}-${platformName}-${arch}.zip`.\n *\n * When not set, electron-builder downloads the official Electron release from GitHub (or the\n * mirror configured via `electronDownload`).\n *\n * Receives a {@link PrepareApplicationStageDirectoryOptions}.\n */\n readonly electronDist?: Hook<PrepareApplicationStageDirectoryOptions, string> | string | null\n}\n\n/**\n * Overrides for the input and output directories used during the build.\n */\nexport interface MetadataDirectories {\n /**\n * The directory that contains static build resources (icons, background images, license files,\n * custom NSIS scripts, etc.) that electron-builder reads during packaging.\n *\n * **Build resources are not copied into the packaged app.** If you need runtime access to a\n * file (e.g. a tray icon), include it explicitly via the `files` option:\n * ```json\n * { \"files\": [\"**\\/*\", \"build/icon.*\"] }\n * ```\n *\n * @default \"build\"\n */\n readonly buildResources?: string | null\n\n /**\n * The directory where electron-builder writes its output (installers, zip archives, etc.).\n *\n * [File macros](https://www.electron.build/file-patterns#file-macros) are supported, e.g.\n * `\"dist/${os}-${arch}\"` to separate outputs by platform and architecture.\n *\n * @default \"dist\"\n */\n readonly output?: string | null\n\n /**\n * The directory that contains the application's `package.json` and source code.\n *\n * Defaults to `app`, then `www`, then the project root. Set this when your packagable app\n * lives in a subdirectory (common in monorepos or when using a separate frontend build step).\n */\n readonly app?: string | null\n}\n\n/**\n * Configuration for experimental concurrent builds.\n */\nexport interface Concurrency {\n /**\n * Maximum number of platform/architecture builds to run in parallel.\n *\n * Set to `1` to disable concurrency (sequential builds, the safe default). Higher values\n * reduce wall-clock time on multi-platform builds at the cost of increased memory and CPU\n * usage. Ensure that your {@link Hooks} and build resources are safe to execute concurrently\n * before raising this limit.\n *\n * @default 1\n */\n jobs: number\n}\n"]}
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"","sourcesContent":["import { Arch } from \"builder-util\"\nimport { BeforeBuildContext, Target } from \"./core.js\"\nimport { ElectronBrandingOptions } from \"./electron/ElectronFramework.js\"\nimport { PrepareApplicationStageDirectoryOptions } from \"./Framework.js\"\nimport { AppXOptions } from \"./options/AppXOptions.js\"\nimport { AppImageOptions, DebOptions, FlatpakOptions, LinuxConfiguration, LinuxTargetSpecificOptions, PacmanOptions, RpmOptions } from \"./options/linuxOptions.js\"\nimport { DmgOptions, MacConfiguration, MasConfiguration } from \"./options/macOptions.js\"\nimport { MsiOptions } from \"./options/MsiOptions.js\"\nimport { MsiWrappedOptions } from \"./options/MsiWrappedOptions.js\"\nimport { PkgOptions } from \"./options/pkgOptions.js\"\nimport { PlatformSpecificBuildOptions } from \"./options/PlatformSpecificBuildOptions.js\"\nimport { SnapcraftOptions } from \"./options/SnapOptions.js\"\nimport { SquirrelWindowsOptions } from \"./options/SquirrelWindowsOptions.js\"\nimport { WindowsConfiguration } from \"./options/winOptions.js\"\nimport { BuildResult } from \"./packager.js\"\nimport { ArtifactBuildStarted, ArtifactCreated } from \"./packagerApi.js\"\nimport { PlatformPackager } from \"./platformPackager.js\"\nimport { NsisOptions, NsisWebOptions, PortableOptions } from \"./targets/win/nsis/nsisOptions.js\"\nimport { ElectronGetOptions } from \"./util/electronGet.js\"\nimport { FuseOptionsV1 } from \"./options/FuseOptionsV1.js\"\n\n// duplicate appId here because it is important\n/**\n * Configuration options shared across all platforms.\n *\n * These properties apply regardless of the target platform and control general build behaviour such\n * as the application identity, output paths, native dependency rebuilding, toolset versions, and\n * platform-specific target sub-configurations.\n */\nexport interface CommonConfiguration {\n /**\n * The application identifier.\n *\n * Used as [`CFBundleIdentifier`](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier)\n * on macOS and as the\n * [Application User Model ID](https://learn.microsoft.com/en-us/windows/win32/shell/appids)\n * on Windows (NSIS target only; Squirrel.Windows does not support custom Application User Model IDs).\n *\n * It is strongly recommended to set an explicit, reverse-DNS-style identifier (e.g. `\"com.example.myapp\"`)\n * rather than relying on the generated default.\n *\n * @default com.electron.${name}\n */\n readonly appId?: string | null\n\n /**\n * The human-readable product name displayed in installers, the macOS dock, and the Windows\n * Apps & Features list.\n *\n * Unlike the `name` field in `package.json`, this value may contain spaces and other characters\n * that are not allowed in npm package names.\n *\n * Resolution order:\n * 1. `productName` inside the `build` configuration block.\n * 2. `productName` at the top level of `package.json`.\n * 3. `name` at the top level of `package.json`.\n */\n readonly productName?: string | null\n\n /**\n * The copyright string embedded in the built artifacts.\n *\n * Appears in the Windows `LegalCopyright` version-info field and the macOS `NSHumanReadableCopyright`\n * Info.plist key.\n *\n * @default Copyright © ${year} ${author}\n */\n readonly copyright?: string | null\n\n /**\n * Overrides for input/output directory paths used during the build.\n *\n * @see {@link MetadataDirectories}\n */\n readonly directories?: MetadataDirectories | null\n\n /**\n * Pinned versions of the binary toolsets electron-builder downloads and uses internally.\n *\n * Each property selects a specific release of the corresponding tool bundle. Set a property to\n * `\"0.0.0\"` to force the legacy bundle (pre-v27 behaviour). Leave a property unset (or set to\n * `null`) to use the modern default for that toolset.\n *\n * @see {@link ToolsetConfig}\n */\n readonly toolsets?: ToolsetConfig | null\n\n /**\n * macOS-specific build options (signing, entitlements, notarization, target categories, etc.).\n * @see {@link MacConfiguration}\n */\n readonly mac?: MacConfiguration | null\n /**\n * macOS App Store (MAS) submission options.\n * @see {@link MasConfiguration}\n */\n readonly mas?: MasConfiguration | null\n /**\n * macOS App Store development-signing options (`mas-dev` target).\n * Used for local testing of MAS builds without submitting to the store.\n * @see {@link MasConfiguration}\n */\n readonly masDev?: MasConfiguration | null\n /**\n * macOS DMG disk image options (background image, window position, icon layout, licence, etc.).\n * @see {@link DmgOptions}\n */\n readonly dmg?: DmgOptions | null\n /**\n * macOS PKG flat-package installer options.\n * @see {@link PkgOptions}\n */\n readonly pkg?: PkgOptions | null\n\n /**\n * Windows-specific build options (signing, NSIS, icon, file associations, etc.).\n * @see {@link WindowsConfiguration}\n */\n readonly win?: WindowsConfiguration | null\n /**\n * NSIS one-click installer options.\n *\n * NSIS (Nullsoft Scriptable Install System) is the default Windows installer format produced by\n * electron-builder. It generates a lightweight, self-extracting `.exe` installer.\n *\n * @see {@link NsisOptions}\n */\n readonly nsis?: NsisOptions | null\n /**\n * NSIS web installer options.\n *\n * Like the standard NSIS installer but the app payload is downloaded from a remote URL at install\n * time rather than bundled into the `.exe`. Useful for very large apps or staged rollouts.\n *\n * @see {@link NsisWebOptions}\n */\n readonly nsisWeb?: NsisWebOptions | null\n /**\n * Portable executable options.\n *\n * Produces a single `.exe` that requires no installation — it extracts and runs directly.\n *\n * @see {@link PortableOptions}\n */\n readonly portable?: PortableOptions | null\n /**\n * Windows Store (MSIX/AppX) package options.\n *\n * Produces a `.appx` or `.msix` package suitable for distribution through the Microsoft Store or\n * side-loading.\n *\n * @see {@link AppXOptions}\n */\n readonly appx?: AppXOptions | null\n /**\n * WiX-based MSI installer options.\n *\n * Produces a traditional `.msi` package built with the WiX Toolset. Best for enterprise\n * deployments that require MSI-based installation policies.\n *\n * @see {@link MsiOptions}\n */\n readonly msi?: MsiOptions | null\n /**\n * MSI-wrapped NSIS installer options.\n *\n * Wraps the standard NSIS installer inside an MSI package so that it can be deployed via\n * Group Policy or other MSI-only channels while preserving the NSIS installer UX.\n *\n * @see {@link MsiWrappedOptions}\n */\n readonly msiWrapped?: MsiWrappedOptions | null\n /**\n * Squirrel.Windows auto-update installer options.\n *\n * Requires the `electron-builder-squirrel-windows` optional dependency.\n *\n * @see {@link SquirrelWindowsOptions}\n */\n readonly squirrelWindows?: SquirrelWindowsOptions | null\n /**\n * General Linux build options shared across all Linux targets (icon, category, desktop entry,\n * executable name, etc.). Target-specific compression and packaging options live in the\n * per-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`, etc.).\n *\n * @see {@link LinuxConfiguration}\n */\n readonly linux?: LinuxConfiguration | null\n /**\n * Debian package options.\n *\n * Targets Debian, Ubuntu, and Debian-based distributions. Produces a `.deb` archive\n * installable via `dpkg -i` or `apt install ./package.deb`.\n *\n * @see {@link DebOptions}\n */\n readonly deb?: DebOptions | null\n /**\n * Snapcraft configuration.\n *\n * Selects the snapcraft base and provides per-core options:\n * - `base: \"core18\" | \"core20\" | \"core22\"` — legacy bases; still functional but not recommended\n * for new apps.\n * - `base: \"core24\"` — modern base with the GNOME extension (recommended, requires Electron 25+).\n * - `base: \"custom\"` — pass an existing `snapcraft.yaml` through unchanged; no plugs, extensions,\n * or desktop files are injected.\n *\n * @example\n * ```json\n * { \"snapcraft\": { \"base\": \"core24\", \"core24\": { \"useLXD\": true } } }\n * ```\n *\n * @see {@link SnapcraftOptions}\n */\n readonly snapcraft?: SnapcraftOptions | null\n /**\n * AppImage options.\n *\n * AppImage is a portable application format that bundles the app and its runtime dependencies\n * into a single self-contained executable that runs on most Linux distributions without\n * installation. The produced `.AppImage` file is executable after `chmod +x`.\n *\n * @see {@link AppImageOptions}\n */\n readonly appImage?: AppImageOptions | null\n /**\n * Flatpak options.\n *\n * Flatpak is a sandboxed application distribution format for Linux distributed via\n * [Flathub](https://flathub.org/) or self-hosted OSTree repositories.\n *\n * @see {@link FlatpakOptions}\n */\n readonly flatpak?: FlatpakOptions | null\n /**\n * Pacman package options.\n *\n * Targets Arch Linux and Arch-based distributions (Manjaro, EndeavourOS, etc.).\n * Produces a `.pacman` archive installable via `pacman -U ./package.pacman`.\n *\n * @see {@link PacmanOptions}\n */\n readonly pacman?: PacmanOptions | null\n /**\n * RPM package options.\n *\n * Targets Fedora, Red Hat Enterprise Linux, SUSE, and RPM-based distributions.\n * Produces a `.rpm` archive installable via `rpm -i` or `dnf install ./package.rpm`.\n *\n * @see {@link RpmOptions}\n */\n readonly rpm?: RpmOptions | null\n /**\n * FreeBSD `pkg` package options.\n *\n * Produces a `.pkg` archive for the FreeBSD package manager.\n */\n readonly freebsd?: LinuxTargetSpecificOptions | null\n /**\n * Solaris IPS package options.\n *\n * Produces a `.p5p` archive for the Solaris Image Packaging System (`pkg`).\n */\n readonly p5p?: LinuxTargetSpecificOptions | null\n /**\n * Alpine Linux APK package options.\n *\n * Produces an `.apk` archive installable via `apk add --allow-untrusted ./package.apk`.\n */\n readonly apk?: LinuxTargetSpecificOptions | null\n\n /**\n * Additional command-line arguments appended to the package manager's `install` command when\n * electron-builder installs app dependencies (i.e., when `node_modules` is missing and a fresh\n * install is required).\n *\n * These arguments are appended **only** during the install phase, not during the rebuild phase.\n * To influence `@electron/rebuild` directly, see {@link NativeModulesConfig.rebuildMode}.\n *\n * @example\n * ```json\n * { \"npmArgs\": [\"--prefer-offline\", \"--ignore-scripts\"] }\n * ```\n */\n readonly npmArgs?: Array<string> | string | null\n\n /**\n * Configuration for native Node.js module installation and rebuilding.\n *\n * Groups all options that control how electron-builder handles native modules — from forcing\n * source builds during install through to the `@electron/rebuild` compilation mode.\n *\n * @see {@link NativeModulesConfig}\n */\n readonly nativeModules?: NativeModulesConfig | null\n\n /**\n * The build number.\n *\n * Maps to the `--iteration` flag for FPM-based Linux targets and is appended to the version\n * string in `CFBundleVersion` (macOS) and `FileVersion` (Windows) when {@link buildVersion} is\n * not set explicitly.\n *\n * If not set, falls back to the first defined environment variable among:\n * `BUILD_NUMBER`, `TRAVIS_BUILD_NUMBER`, `APPVEYOR_BUILD_NUMBER`, `CIRCLE_BUILD_NUM`,\n * `BUILD_BUILDNUMBER`, `CI_PIPELINE_IID`.\n */\n readonly buildNumber?: string | null\n\n /**\n * The full build version string.\n *\n * Maps to `CFBundleVersion` on macOS and the `FileVersion` metadata field on Windows.\n * Defaults to the `version` field from `package.json`.\n *\n * If `buildVersion` is not set but {@link buildNumber} is defined (or resolved from an\n * environment variable), the effective build version becomes `${version}.${buildNumber}`.\n */\n readonly buildVersion?: string | null\n\n /**\n * Whether to download the FFmpeg library variant from Electron's release assets and replace the\n * default (proprietary codec) FFmpeg library before signing.\n *\n * The alternate FFmpeg is compiled without proprietary codec support (H.264, AAC, etc.) and is\n * required for distributing on certain platforms (e.g., Linux distributions that prohibit\n * proprietary codecs). Enabling this swaps the bundled `ffmpeg` dynamic library before the app\n * is signed.\n */\n readonly downloadAlternateFFmpeg?: boolean\n\n /**\n * Additional properties to deep-merge into the app's `package.json` at build time.\n *\n * Useful for injecting build-time metadata (e.g., a git commit hash or CI build URL) that\n * should be readable at runtime via `require('./package.json')` or `import.meta.url`.\n *\n * @example\n * ```json\n * { \"extraMetadata\": { \"commitHash\": \"abc1234\", \"buildDate\": \"2025-01-01\" } }\n * ```\n */\n readonly extraMetadata?: any\n\n /**\n * Whether to throw an error and abort the build if the app could not be code-signed.\n *\n * Set to `true` in release pipelines to catch missing or misconfigured signing credentials\n * before producing unsigned artifacts. When `false` (the default), missing signing credentials\n * produce a warning and the build continues unsigned.\n *\n * @default false\n */\n readonly forceCodeSigning?: boolean\n\n /**\n * Whether to include `.pdb` (Program Database) symbol files in the output.\n *\n * PDB files enable Windows crash-dump analysis but significantly increase artifact size. Enable\n * for internal builds where you want symbol information; disable for public distribution.\n *\n * @default false\n */\n readonly includePdb?: boolean\n\n /**\n * Whether to remove the `scripts` field from bundled `package.json` files.\n *\n * Lifecycle scripts (`preinstall`, `postinstall`, etc.) have no meaning inside a packaged\n * Electron app and can trigger unintended behaviour if any tooling inspects the bundled\n * `package.json`. Removing them reduces artifact size and prevents accidental execution.\n *\n * @default true\n */\n readonly removePackageScripts?: boolean\n\n /**\n * Whether to remove the `keywords` field from bundled `package.json` files.\n *\n * The `keywords` array is only meaningful for package registry discoverability and has no\n * runtime value inside a packaged Electron app. Removing it marginally reduces artifact size.\n *\n * @default true\n */\n readonly removePackageKeywords?: boolean\n\n /**\n * Options forwarded to [`@electron/fuses`](https://github.com/electron/fuses) to flip Electron\n * feature flags in the binary.\n *\n * Fuses are compile-time-like flags baked into the Electron binary that cannot be changed at\n * runtime. Flipping them is the approved mechanism for hardening Electron apps (e.g., disabling\n * `ELECTRON_RUN_AS_NODE`, enabling ASAR integrity, etc.).\n *\n * electron-builder flips fuses after packaging but before signing so that the final signature\n * covers the modified binary.\n *\n * @see {@link FuseOptionsV1}\n */\n readonly electronFuses?: FuseOptionsV1 | null\n\n /**\n * Configuration for experimental concurrent (multi-platform / multi-arch) builds.\n *\n * When `jobs > 1`, electron-builder runs up to `jobs` platform builds in parallel. This is an\n * experimental feature — use with caution and verify that your hook functions and build resources\n * are safe to execute concurrently.\n *\n * @see {@link Concurrency}\n */\n readonly concurrency?: Concurrency | null\n}\n\n/**\n * The root build configuration object passed to electron-builder.\n *\n * Extends {@link CommonConfiguration} with top-level Electron-specific options, configuration\n * inheritance/presets, and all per-platform build hooks.\n */\nexport interface Configuration extends CommonConfiguration, PlatformSpecificBuildOptions, Hooks {\n /**\n * Options forwarded to [`@electron/get`](https://github.com/electron/get) when downloading the\n * Electron distribution to package.\n */\n readonly electronGet?: ElectronGetOptions | null\n\n /**\n * Electron branding overrides.\n *\n * Required only when packaging a custom Electron fork that ships a modified `BRANDING.json`\n * (e.g., a fork that renames the `Electron Helper` process or the `Electron Framework`).\n * Standard Electron builds do not need this.\n */\n readonly electronBranding?: ElectronBrandingOptions\n\n /**\n * The Electron version to package against.\n *\n * Defaults to the version of the `electron` (or `electron-prebuilt`) dependency declared in\n * `package.json`. Set this explicitly only when the installed Electron version is not the one\n * you want to package against (e.g., in monorepos where the Electron dependency lives in a\n * different workspace).\n */\n electronVersion?: string | null\n\n /**\n * One or more configuration presets or file paths to merge into this configuration.\n *\n * Accepts a string or array of strings, each of which is either:\n * - A built-in preset name (`\"react-cra\"` is the only currently supported value).\n * - A path to a JS/JSON config file relative to the project directory.\n *\n * Configs are merged left-to-right using a deep-assign strategy that properly combines `files`\n * glob patterns rather than replacing them.\n *\n * The `react-cra` preset is applied automatically when `react-scripts` is found in\n * `dependencies`. Set `extends: null` to opt out of automatic preset detection.\n */\n extends?: Array<string> | string | null\n}\n\n/**\n * Configuration for native Node.js module installation and rebuilding.\n *\n * All options that control how electron-builder handles native modules — from forcing source\n * builds at install time through to the `@electron/rebuild` compilation mode.\n */\nexport interface NativeModulesConfig {\n /**\n * Whether to pass `--build-from-source` to the package manager when installing native\n * dependencies, forcing them to compile from source rather than using pre-built binaries.\n *\n * Useful when pre-built binaries are not available for the target platform/arch combination,\n * or when you need to ensure native modules are compiled against the exact Electron ABI.\n *\n * @default false\n */\n buildDependenciesFromSource?: boolean\n\n /**\n * Whether to run `node-gyp rebuild` with Electron headers before packaging.\n *\n * This is a low-level escape hatch for cases where the standard `@electron/rebuild` path\n * (controlled by {@link npmRebuild}) is insufficient. Most projects should leave this `false`\n * and rely on `@electron/rebuild` instead.\n *\n * When `true`, electron-builder runs `node-gyp rebuild` with the correct `npm_config_*`\n * environment variables set for the target Electron version and architecture before the\n * normal rebuild step.\n *\n * @default false\n */\n readonly nodeGypRebuild?: boolean\n\n /**\n * Whether to rebuild native Node.js modules for the target Electron version and architecture\n * before packaging.\n *\n * When `true` (the default), electron-builder runs `@electron/rebuild` against the app's\n * `node_modules` directory to ensure all native modules are compiled against the correct Electron\n * ABI. Set to `false` to skip this step entirely — useful when native modules are pre-built\n * elsewhere in your pipeline or when the app has no native dependencies.\n *\n * The compilation mode (`sequential` vs `parallel`) is controlled by {@link rebuildMode}.\n *\n * @default true\n */\n readonly npmRebuild?: boolean\n\n /**\n * Compilation mode for `@electron/rebuild`.\n *\n * - `\"sequential\"` — rebuilds native modules one at a time. Safer in memory-constrained\n * environments and produces cleaner log output.\n * - `\"parallel\"` — rebuilds all native modules concurrently. Faster on machines with many cores\n * and plentiful memory, but may exhaust resources on CI agents with limited RAM.\n *\n * @default \"sequential\"\n */\n readonly rebuildMode?: \"sequential\" | \"parallel\" | null\n}\n\nexport type Hook<T, V> = (contextOrPath: T) => Promise<V> | V\n\nexport interface PackContext {\n readonly outDir: string\n readonly appOutDir: string\n readonly packager: PlatformPackager<any>\n readonly electronPlatformName: string\n readonly arch: Arch\n readonly targets: Array<Target>\n}\nexport type AfterPackContext = PackContext\nexport type BeforePackContext = PackContext\nexport type AfterExtractContext = PackContext\n\n/**\n * Version pins and custom bundle overrides for the binary toolsets that electron-builder\n * downloads and caches locally.\n *\n * Each toolset is a versioned archive hosted at\n * [electron-userland/electron-builder-binaries](https://github.com/electron-userland/electron-builder-binaries/releases).\n * Omitting a property (or setting it to `null`) selects the modern default for that toolset.\n * Setting a property to `\"0.0.0\"` forces the legacy bundle — useful only for diagnosing\n * regressions introduced by newer toolset bundles.\n *\n * To supply your own bundle, set the property to a {@link ToolsetCustom} object with a `url`\n * (https:// or file://) and a `checksum` for verification. The bundle must mirror the expected\n * directory layout of the corresponding built-in bundle; see the build scripts at\n * https://github.com/electron-userland/electron-builder-binaries/tree/master/packages.\n */\nexport interface ToolsetConfig {\n /**\n * Version of the `win-codesign` bundle used for Windows code signing and resource editing.\n *\n * The bundle ships:\n * - **`signtool.exe`** (Windows) / **`osslsigncode`** (macOS & Linux) — used to sign `.exe`,\n * `.dll`, and `.msix` artifacts.\n * - **`rcedit`** — used to embed version metadata and icons into `.exe` files.\n * - **Windows Kits** (`10.0.26100.0`) — used by AppX/MSIX packaging (`makeappx`, `signtool`).\n *\n * Available versions:\n * | Version | Contents |\n * |---------|----------|\n * | `\"0.0.0\"` | Legacy bundle — `winCodeSign-2.6.0` (pre-v27 default) |\n * | `\"1.0.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.0.0 |\n * | `\"1.1.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.1.0 |\n * | `\"1.1.1\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.1.1 |\n * | `\"1.2.1\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.2.1 |\n * | `\"1.3.0\"` | Modern bundle — Windows Kits 10.0.26100.0, `win-codesign` v1.3.0 + separate ATS dlib bundle + .NET 8 runtime (required for Azure Trusted Signing `signtool /dlib`) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/win-codesign/CHANGELOG.md\n *\n * @default \"1.1.0\"\n */\n readonly winCodeSign?: \"0.0.0\" | \"1.0.0\" | \"1.1.0\" | \"1.1.1\" | \"1.2.1\" | \"1.3.0\" | ToolsetCustom | null\n\n /**\n * Version of the AppImage toolset bundle used for building `.AppImage` files.\n *\n * The bundle ships:\n * - **`mksquashfs`** — creates the SquashFS filesystem embedded in the AppImage.\n * - **`desktop-file-validate`** — validates the generated `.desktop` entry.\n * - **AppImage runtime** — the self-executing stub that mounts the SquashFS at launch.\n *\n * Available versions:\n * | Version | Runtime date | Notes |\n * |---------|-------------|-------|\n * | `\"0.0.0\"` | Legacy | FUSE2-based AppImage runtime (pre-v27 default) |\n * | `\"1.0.2\"` | 20251108 | Static-runtime (FUSE3-compatible) |\n * | `\"1.0.3\"` | 20251108 | Static-runtime (FUSE3-compatible); recommended (default) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/appimage/CHANGELOG.md\n *\n * @default \"1.0.3\"\n */\n readonly appimage?: \"0.0.0\" | \"1.0.2\" | \"1.0.3\" | ToolsetCustom | null\n\n /**\n * Version of the NSIS toolset bundle used to compile Windows installers.\n *\n * The bundle ships:\n * - **`makensis`** — the NSIS compiler invoked to build `.nsi` scripts into `.exe` installers.\n * - **NSIS plugins** — the plugin DLLs (`NsisMultiUser`, `UAC`, `StdUtils`, etc.) referenced by\n * electron-builder's default installer scripts.\n * - **`elevate.exe`** — UAC elevation helper included in NSIS installers.\n *\n * Available versions:\n * | Version | `makensis` version | Notes |\n * |---------|------------------|-------|\n * | `\"0.0.0\"` | 3.0.4.1 | Legacy split bundle — `nsis` + `nsis-resources` archives (pre-v27 default) |\n * | `\"1.2.1\"` | 3.12 | Unified bundle — single archive, entrypoint scripts auto-set `NSISDIR` (default) |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/nsis/CHANGELOG.md\n *\n * @default \"1.2.1\"\n */\n readonly nsis?: \"0.0.0\" | \"1.2.1\" | ToolsetCustom | null\n\n /**\n * Version of the Wine bundle used to run Windows tools (NSIS, rcedit, signtool) on\n * non-Windows hosts (macOS and Linux).\n *\n * Wine is only required when building Windows targets on a non-Windows machine. On Windows,\n * this setting has no effect.\n *\n * Available versions:\n * | Version | Wine version | Platform support | Notes |\n * |---------|-------------|-----------------|-------|\n * | `\"0.0.0\"` | 4.0.1 | macOS | Legacy portable bundle (default) |\n * | `\"1.0.1\"` | 11.0 | macOS | Supports arm64 macOS via Rosetta |\n *\n * To use a custom Wine binary, use a `ToolsetCustom` object.\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/wine/CHANGELOG.md\n *\n * @default \"0.0.0\"\n */\n readonly wine?: \"0.0.0\" | \"1.0.1\" | ToolsetCustom | null\n\n /**\n * Version of the FPM bundle used to build Linux packages (`.deb`, `.rpm`, `.pacman`, etc.)\n * on macOS and Linux hosts.\n *\n * Available versions:\n * | Version | FPM version | Notes |\n * |---------|------------|-------|\n * | `\"2.2.1\"` | 1.17.0 (Ruby 3.4.3) | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/fpm/CHANGELOG.md\n *\n * @default \"2.2.1\"\n */\n readonly fpm?: \"2.2.1\" | ToolsetCustom | null\n\n /**\n * Version of the Linux-tools-mac bundle used to produce `.tar.lz` archives and build\n * Linux targets on macOS hosts.\n *\n * The bundle ships macOS-native builds of `ar`, `lzip`, and `gtar` (GNU tar).\n *\n * Available versions:\n * | Version | Notes |\n * |---------|-------|\n * | `\"1.0.0\"` | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/linux-tools-mac/CHANGELOG.md\n *\n * @default \"1.0.0\"\n */\n readonly linuxToolsMac?: \"1.0.0\" | ToolsetCustom | null\n\n /**\n * Version of the 7-Zip binary bundle used internally to extract `.7z` and `.tar.xz` archives.\n *\n * Set to a {@link ToolsetCustom} object to supply your own 7za binary.\n * The `url` must point to a directory (or a `.tar.gz`/`.zip` archive of one) that contains\n * `bin/7za` (macOS/Linux) or `bin/7za.exe` (Windows).\n *\n * **Bootstrap constraint:** the custom bundle itself must be a `.tar.gz` or `.zip` archive\n * (or a bare `file://` directory). `.7z` and `.tar.xz` archives cannot be used here because\n * extracting them requires 7za — a circular dependency.\n *\n * @default \"1.0.0\"\n */\n readonly sevenZip?: \"1.0.0\" | ToolsetCustom | null\n\n /**\n * Version of the icons-conversion bundle used to convert source images to `.icns`, `.ico`,\n * and PNG icon sets.\n *\n * Set to a {@link ToolsetCustom} object to supply your own icons bundle directory.\n *\n * Available versions:\n * | Version | Notes |\n * |---------|-------|\n * | `\"1.2.1\"` | Current default |\n *\n * Releases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/icons/CHANGELOG.md\n *\n * @default \"1.2.1\"\n */\n readonly icons?: \"1.2.1\" | ToolsetCustom | null\n}\n\n/**\n * A custom toolset bundle supplied by the user in place of a built-in versioned bundle.\n *\n * The bundle must mirror the expected directory layout of the corresponding built-in bundle.\n * See the build scripts at\n * https://github.com/electron-userland/electron-builder-binaries/tree/master/packages.\n *\n * File formats supported for `url` archives: `.zip`, `.7z`, `.tar.gz`, `.tar.xz`.\n *\n * @example\n * ```json\n * {\n * \"toolsets\": {\n * \"nsis\": {\n * \"url\": \"file:///path/to/my-nsis-bundle.tar.gz\",\n * \"checksum\": \"abc123...\",\n * \"version\": \"my-custom-1.0\"\n * }\n * }\n * }\n * ```\n */\nexport interface ToolsetCustom {\n /**\n * The `https://` URL or `file://` path to load the custom toolset bundle from.\n *\n * - `https://` — downloaded and cached locally; the archive is extracted before use.\n * - `file:///absolute/path` — used directly; relative paths must be within the project resources dir.\n *\n * Archives (`.zip`, `.7z`, `.tar.gz`, `.tar.xz`) are extracted automatically.\n * A bare directory path (no archive) is used as-is.\n */\n readonly url: string\n\n /**\n * SHA checksum of the custom toolset bundle for verification.\n * Required for remote (`https://`) URLs and local archive files (`file://`).\n * Not needed for bare directory paths — the directory is used as-is with no caching.\n */\n readonly checksum?: string\n\n /**\n * Optional version label used in the local cache directory name.\n * Falls back to the first 8 characters of `checksum` when omitted.\n */\n readonly version?: string\n}\n\n/**\n * Lifecycle hooks that run at specific points during the electron-builder pipeline.\n *\n * Each hook can be specified as:\n * - An **inline function** (JavaScript/TypeScript config files only):\n * ```js\n * // electron-builder.config.js\n * module.exports = { beforePack: async (context) => { /* ... *\\/ } }\n * ```\n * - A **path** to a CommonJS/ESM module (relative to the project directory) that exports the\n * hook as its **default export**:\n * ```json\n * { \"build\": { \"beforePack\": \"./scripts/myHook.js\" } }\n * ```\n * ```js\n * // scripts/myHook.js\n * export default async function (context) { /* ... *\\/ }\n * ```\n */\nexport interface Hooks {\n /**\n * Called immediately before electron-builder begins packing the app for each platform/arch\n * combination.\n *\n * Use this hook to perform last-minute modifications to source files or build resources before\n * they are read by the packager.\n *\n * Receives a {@link BeforePackContext}.\n */\n readonly beforePack?: Hook<BeforePackContext, void> | string | null\n\n /**\n * Called after the prebuilt Electron binary has been extracted to the staging directory but\n * before the app files have been copied into it.\n *\n * Use this hook to patch or augment the Electron binary itself (e.g. rename helper processes,\n * inject native libraries) before the app payload is laid down on top.\n *\n * Receives an {@link AfterExtractContext}.\n */\n readonly afterExtract?: Hook<AfterExtractContext, void> | string | null\n\n /**\n * Called after the app files have been copied into the staging directory (and ASAR created if\n * applicable) but **before** signing and before the output archive/installer is built.\n *\n * Use this hook to post-process the staged app bundle (e.g. strip debug symbols, inject\n * platform-specific resources).\n *\n * Receives an {@link AfterPackContext}.\n */\n readonly afterPack?: Hook<AfterPackContext, void> | string | null\n\n /**\n * Called after code signing but **before** the signed app is packed into the final\n * distributable format (e.g. before `dmg` is created from the signed `.app`).\n *\n * Use this hook to perform post-sign validation or to add signed resources that are not part of\n * the main app bundle.\n *\n * Receives an {@link AfterPackContext}.\n */\n readonly afterSign?: Hook<AfterPackContext, void> | string | null\n\n /**\n * Called when an individual artifact build starts (e.g. just before a `.dmg` or `.exe` is\n * written to disk).\n *\n * Receives an {@link ArtifactBuildStarted}.\n */\n readonly artifactBuildStarted?: Hook<ArtifactBuildStarted, void> | string | null\n\n /**\n * Called when an individual artifact has been successfully built and written to disk.\n *\n * Use this hook to collect artifact paths, upload to custom destinations, or trigger\n * post-processing steps.\n *\n * Receives an {@link ArtifactCreated}.\n */\n readonly artifactBuildCompleted?: Hook<ArtifactCreated, void> | string | null\n\n /**\n * Called after **all** artifacts across all platforms/architectures have been built.\n *\n * May return an array of additional file paths that should be treated as publish targets\n * (i.e. uploaded to the configured publisher).\n *\n * Receives a {@link BuildResult}.\n *\n * @example\n * ```js\n * export default async function afterAllArtifactBuild(result) {\n * return [\"/path/to/extra-file.txt\"]\n * }\n * ```\n */\n readonly afterAllArtifactBuild?: Hook<BuildResult, Array<string>> | string | null\n\n /**\n * Called after the WiX MSI project XML has been written to a temporary directory but before\n * `candle.exe` / `light.exe` compile it into a `.msi` package.\n *\n * The hook receives the path to the project directory as a string. Use it to patch the generated\n * `.wxs` files for customizations not exposed through electron-builder's options.\n */\n readonly msiProjectCreated?: Hook<string, void> | string | null\n\n /**\n * Called after the AppX/MSIX manifest XML has been written to the staging directory but before\n * `makeappx` packages it.\n *\n * The hook receives the path to the manifest file as a string. Use it to inject custom manifest\n * extensions (capabilities, protocol handlers, etc.) not exposed through {@link AppXOptions}.\n */\n readonly appxManifestCreated?: Hook<string, void> | string | null\n\n /**\n * Called for every file inside each `node_modules` package directory as electron-builder\n * decides whether to include it in the packaged app.\n *\n * Return `true` to force-include the file regardless of the default exclusion rules.\n * Return `false` or `undefined` to let electron-builder apply its normal filtering logic.\n *\n * Receives the absolute path of the file as a string.\n */\n readonly onNodeModuleFile?: Hook<string, void | boolean> | string | null\n\n /**\n * Called before dependencies are installed or native modules are rebuilt.\n *\n * Return `false` (or a `Promise` that resolves to `false`) to skip the install/rebuild step\n * entirely — useful when you manage `node_modules` externally (e.g. in a CI pipeline that\n * restores them from cache). When not set, electron-builder proceeds with the normal\n * install/rebuild flow.\n *\n * If this hook is provided and `node_modules` is missing, electron-builder will not perform\n * the production-dependencies check.\n *\n * Receives a {@link BeforeBuildContext}.\n */\n readonly beforeBuild?: Hook<BeforeBuildContext, boolean | void> | string | null\n\n /**\n * Override the source of the Electron distribution to stage.\n *\n * Should return the path to either:\n * - A **directory** containing a pre-built, unpacked Electron app (e.g. `~/electron/out/R`).\n * - A **directory** containing Electron zip archives following the naming convention\n * `electron-v${version}-${platformName}-${arch}.zip`.\n *\n * When not set, electron-builder downloads the official Electron release from GitHub (or the\n * mirror configured via `electronDownload`).\n *\n * Receives a {@link PrepareApplicationStageDirectoryOptions}.\n */\n readonly electronDist?: Hook<PrepareApplicationStageDirectoryOptions, string> | string | null\n}\n\n/**\n * Overrides for the input and output directories used during the build.\n */\nexport interface MetadataDirectories {\n /**\n * The directory that contains static build resources (icons, background images, license files,\n * custom NSIS scripts, etc.) that electron-builder reads during packaging.\n *\n * **Build resources are not copied into the packaged app.** If you need runtime access to a\n * file (e.g. a tray icon), include it explicitly via the `files` option:\n * ```json\n * { \"files\": [\"**\\/*\", \"build/icon.*\"] }\n * ```\n *\n * @default \"build\"\n */\n readonly buildResources?: string | null\n\n /**\n * The directory where electron-builder writes its output (installers, zip archives, etc.).\n *\n * [File macros](https://www.electron.build/file-patterns#file-macros) are supported, e.g.\n * `\"dist/${os}-${arch}\"` to separate outputs by platform and architecture.\n *\n * @default \"dist\"\n */\n readonly output?: string | null\n\n /**\n * The directory that contains the application's `package.json` and source code.\n *\n * Defaults to `app`, then `www`, then the project root. Set this when your packagable app\n * lives in a subdirectory (common in monorepos or when using a separate frontend build step).\n */\n readonly app?: string | null\n}\n\n/**\n * Configuration for experimental concurrent builds.\n */\nexport interface Concurrency {\n /**\n * Maximum number of platform/architecture builds to run in parallel.\n *\n * Set to `1` to disable concurrency (sequential builds, the safe default). Higher values\n * reduce wall-clock time on multi-platform builds at the cost of increased memory and CPU\n * usage. Ensure that your {@link Hooks} and build resources are safe to execute concurrently\n * before raising this limit.\n *\n * @default 1\n */\n jobs: number\n}\n"]}
|
package/dist/indexInternal.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export { expandMacro } from "./util/macroExpander.js";
|
|
|
38
38
|
export { getRepositoryInfo } from "./util/repositoryInfo.js";
|
|
39
39
|
export { withToolsetLock } from "./util/toolsetLock.js";
|
|
40
40
|
export { editWindowsResources, ResourceEditOptions } from "./util/win/resEdit.js";
|
|
41
|
-
export { installDependencies, installOrRebuild, nodeGypRebuild } from "./util/
|
|
41
|
+
export { installDependencies, installOrRebuild, nodeGypRebuild } from "./util/installOrRebuild.js";
|
|
42
42
|
export { PACKAGE_VERSION } from "./version.js";
|
|
43
43
|
export { ParallelsVmManager } from "./vm/ParallelsVm.js";
|
|
44
44
|
export { getLinuxVm, getWindowsVm, VmManager } from "./vm/vm.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexInternal.d.ts","sourceRoot":"","sources":["../src/indexInternal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC3G,YAAY,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAA;AAC1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC3G,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,+BAA+B,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACxE,YAAY,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AACjG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC/F,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACtH,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"indexInternal.d.ts","sourceRoot":"","sources":["../src/indexInternal.ts"],"names":[],"mappings":"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"}
|
package/dist/indexInternal.js
CHANGED
|
@@ -31,7 +31,7 @@ export { expandMacro } from "./util/macroExpander.js";
|
|
|
31
31
|
export { getRepositoryInfo } from "./util/repositoryInfo.js";
|
|
32
32
|
export { withToolsetLock } from "./util/toolsetLock.js";
|
|
33
33
|
export { editWindowsResources } from "./util/win/resEdit.js";
|
|
34
|
-
export { installDependencies, installOrRebuild, nodeGypRebuild } from "./util/
|
|
34
|
+
export { installDependencies, installOrRebuild, nodeGypRebuild } from "./util/installOrRebuild.js";
|
|
35
35
|
export { PACKAGE_VERSION } from "./version.js";
|
|
36
36
|
export { ParallelsVmManager } from "./vm/ParallelsVm.js";
|
|
37
37
|
export { getLinuxVm, getWindowsVm, VmManager } from "./vm/vm.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexInternal.js","sourceRoot":"","sources":["../src/indexInternal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEvE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAK3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,eAAe,EAA0B,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAA8B,MAAM,kCAAkC,CAAA;AAC3G,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,2CAA2C,CAAA;AAE9D,OAAO,EAAE,+BAA+B,EAAiB,MAAM,uBAAuB,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAsB,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAqB,MAAM,kCAAkC,CAAA;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAExE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AACjG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC/F,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACtH,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAEL,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EAExB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAuB,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"indexInternal.js","sourceRoot":"","sources":["../src/indexInternal.ts"],"names":[],"mappings":"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","sourcesContent":["export { AsarFilesystem, readAsar, readAsarJson } from \"./asar/asar.js\"\nexport { AsarIntegrity } from \"./asar/integrity.js\"\nexport { _testingOnly, readCertInfo } from \"./codeSign/certInfo.js\"\nexport { createKeychain, findIdentity, isSignAllowed, removeKeychain } from \"./codeSign/mac/macCodeSign.js\"\nexport type { Identity } from \"./codeSign/mac/macCodeSign.js\"\nexport { CustomWindowsSign, WindowsSignTaskConfiguration } from \"./codeSign/win/windowsSignToolManager.js\"\nexport { Configuration, ToolsetConfig, ToolsetCustom } from \"./configuration.js\"\nexport { Publish } from \"./core.js\"\nexport { getElectronVersion } from \"./electron/electronVersion.js\"\nexport { FileMatcher, getFileMatchers, GetFileMatchersOptions } from \"./fileMatcher.js\"\nexport { hoist, HoisterDependencyKind, HoisterResult, HoisterTree } from \"./node-module-collector/hoist.js\"\nexport {\n BunNodeModulesCollector,\n determinePackageManagerEnv,\n getCollectorByPackageManager,\n PnpmNodeModulesCollector,\n TraversalNodeModulesCollector,\n YarnBerryNodeModulesCollector,\n YarnNodeModulesCollector,\n} from \"./node-module-collector/index.js\"\nexport { PM } from \"./node-module-collector/packageManager.js\"\nexport type { NodeModuleInfo } from \"./node-module-collector/types.js\"\nexport { computeSafeArtifactNameIfNeeded, DoPackOptions } from \"./platformPackager.js\"\nexport { createPublisher } from \"./publish/PublishManager.js\"\nexport { createUpdateInfoTasks, UpdateInfoFileTask, writeUpdateInfoFiles } from \"./publish/updateInfoBuilder.js\"\nexport { buildBlockMap } from \"./targets/blockmap/blockmap.js\"\nexport { createBlockmap } from \"./targets/differentialUpdateInfoBuilder.js\"\nexport { validateCriticalPathString } from \"./targets/linux/appimage/appImageUtil.js\"\nexport { copyMimeTypes } from \"./targets/linux/appimage/appLauncher.js\"\nexport { MacTargetHelper, type PlatformType } from \"./targets/mac/MacTargetHelper.js\"\nexport { computeArchToTargetNamesMap } from \"./targets/targetFactory.js\"\nexport type { Defines } from \"./targets/win/nsis/Defines.js\"\nexport { nsisEscapeString, NsisScriptGenerator } from \"./targets/win/nsis/nsisScriptGenerator.js\"\nexport { checkMakensisOutput, verifyInstallerSize } from \"./targets/win/nsis/nsisValidation.js\"\nexport { getLinuxToolsMacToolset, getLinuxToolsPath } from \"./toolsets/linuxToolsMac.js\"\nexport { getWindowsKitsBundle } from \"./toolsets/winCodeSign.js\"\nexport { CacheState } from \"./util/cacheState.js\"\nexport { computeDefaultAppDirectory, doMergeConfigs, getConfig, validateConfiguration } from \"./util/config/config.js\"\nexport { loadEnv, orNullIfFileNotExist } from \"./util/config/load.js\"\nexport { validateSchema } from \"./util/config/schemaValidator.js\"\nexport {\n ArtifactDownloadOptions,\n download,\n downloadBuilderToolset,\n downloadElectronArtifact,\n ElectronGetOptions,\n getBinariesMirrorUrl,\n getCacheDirectory,\n isSafeExtractPath,\n reinitializeProxy,\n resolveBuilderBinaryUrl,\n} from \"./util/electronGet.js\"\nexport { buildSourceCandidates, convertIcon, getPngSize } from \"./util/iconConverter.js\"\nexport { getLicenseAssets, getLicenseFiles } from \"./util/license.js\"\nexport { parsePlistFile, PlistObject } from \"./util/mac/plist.js\"\nexport { expandMacro } from \"./util/macroExpander.js\"\nexport { getRepositoryInfo } from \"./util/repositoryInfo.js\"\nexport { withToolsetLock } from \"./util/toolsetLock.js\"\nexport { editWindowsResources, ResourceEditOptions } from \"./util/win/resEdit.js\"\nexport { installDependencies, installOrRebuild, nodeGypRebuild } from \"./util/installOrRebuild.js\"\nexport { PACKAGE_VERSION } from \"./version.js\"\nexport { ParallelsVmManager } from \"./vm/ParallelsVm.js\"\nexport { getLinuxVm, getWindowsVm, VmManager } from \"./vm/vm.js\"\nexport { WineVmManager } from \"./vm/WineVm.js\"\n"]}
|
package/dist/macPackager.d.ts
CHANGED
|
@@ -35,6 +35,11 @@ export declare class MacPackager extends PlatformPackager<MacConfiguration | Mas
|
|
|
35
35
|
* Handle universal build packing
|
|
36
36
|
*/
|
|
37
37
|
private doUniversalPack;
|
|
38
|
+
/**
|
|
39
|
+
* Builds the `singleArchFiles` glob passed to `@electron/universal` by scanning both packed slices for
|
|
40
|
+
* single-architecture binaries that can't be lipo-merged. Merges any user-provided `mac.universal.singleArchFiles`.
|
|
41
|
+
*/
|
|
42
|
+
private computeSingleArchFiles;
|
|
38
43
|
pack(outDir: string, arch: Arch, targets: Array<Target>, taskManager: AsyncTaskManager): Promise<void>;
|
|
39
44
|
private packMasTargets;
|
|
40
45
|
private packMacTargets;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macPackager.d.ts","sourceRoot":"","sources":["../src/macPackager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EACL,IAAI,EACJ,gBAAgB,EAYjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,eAAe,EAAkB,qBAAqB,EAAE,QAAQ,EAAuC,MAAM,+BAA+B,CAAA;AACrJ,OAAO,EAAwB,MAAM,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EAAuB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAiB,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"macPackager.d.ts","sourceRoot":"","sources":["../src/macPackager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,EACL,IAAI,EACJ,gBAAgB,EAYjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,eAAe,EAAkB,qBAAqB,EAAE,QAAQ,EAAuC,MAAM,+BAA+B,CAAA;AACrJ,OAAO,EAAwB,MAAM,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EAAuB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAiB,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAUtF,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAC9C,MAAM,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAMzG,UAAU,cAAc;IACtB,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAA;IAC3C,YAAY,EAAE,oBAAoB,CAAA;CACnC;AAED,qBAAa,WAAY,SAAQ,gBAAgB,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IACpF,QAAQ,CAAC,eAAe,0DA+BvB;IAED,OAAO,CAAC,SAAS,CAAgD;IAEjE,QAAQ,CAAC,MAAM,kBAA4B;gBAE/B,IAAI,EAAE,QAAQ;IAI1B,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,CAEjC;IAED;;OAEG;IACH,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc;IA2B7D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE;IAUzD,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAK7C,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI3C,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI;cA8BhG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAO7E;;OAEG;YACW,eAAe;IAyG7B;;;OAGG;YACW,sBAAsB;IA2B9B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiB9F,cAAc;YAmCd,cAAc;YAmBd,OAAO;IAKrB;;OAEG;YACW,IAAI;cAqDF,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB5G,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAY5G,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAI9B,yBAAyB,CAAC,SAAS,EAAE,MAAM;IAK5C,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;cAyE/G,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;CAgCvH"}
|