app-builder-lib 26.12.0 → 26.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/out/asar/asarFileChecker.d.ts +2 -2
  2. package/out/asar/asarFileChecker.js +3 -2
  3. package/out/asar/asarFileChecker.js.map +1 -1
  4. package/out/asar/asarUtil.js +3 -2
  5. package/out/asar/asarUtil.js.map +1 -1
  6. package/out/binDownload.js +36 -9
  7. package/out/binDownload.js.map +1 -1
  8. package/out/codeSign/certInfo.d.ts +54 -0
  9. package/out/codeSign/certInfo.js +466 -0
  10. package/out/codeSign/certInfo.js.map +1 -0
  11. package/out/codeSign/macCodeSign.d.ts +1 -1
  12. package/out/codeSign/macCodeSign.js +10 -9
  13. package/out/codeSign/macCodeSign.js.map +1 -1
  14. package/out/codeSign/windowsSignToolManager.js +3 -9
  15. package/out/codeSign/windowsSignToolManager.js.map +1 -1
  16. package/out/configuration.d.ts +5 -0
  17. package/out/configuration.js.map +1 -1
  18. package/out/electron/ElectronFramework.js +4 -1
  19. package/out/electron/ElectronFramework.js.map +1 -1
  20. package/out/electron/electronVersion.js +9 -4
  21. package/out/electron/electronVersion.js.map +1 -1
  22. package/out/fileTransformer.js +2 -1
  23. package/out/fileTransformer.js.map +1 -1
  24. package/out/forge-maker.js +6 -2
  25. package/out/forge-maker.js.map +1 -1
  26. package/out/mac/MacTargetHelper.d.ts +24 -0
  27. package/out/mac/MacTargetHelper.js +269 -0
  28. package/out/mac/MacTargetHelper.js.map +1 -0
  29. package/out/macPackager.d.ts +21 -7
  30. package/out/macPackager.js +219 -346
  31. package/out/macPackager.js.map +1 -1
  32. package/out/node-module-collector/moduleManager.d.ts +12 -2
  33. package/out/node-module-collector/moduleManager.js +3 -0
  34. package/out/node-module-collector/moduleManager.js.map +1 -1
  35. package/out/options/linuxOptions.d.ts +4 -3
  36. package/out/options/linuxOptions.js.map +1 -1
  37. package/out/options/macOptions.d.ts +6 -0
  38. package/out/options/macOptions.js.map +1 -1
  39. package/out/options/metadata.d.ts +2 -0
  40. package/out/options/metadata.js.map +1 -1
  41. package/out/packager.js +4 -4
  42. package/out/packager.js.map +1 -1
  43. package/out/platformPackager.d.ts +1 -1
  44. package/out/platformPackager.js +27 -21
  45. package/out/platformPackager.js.map +1 -1
  46. package/out/targets/AppxTarget.js +2 -1
  47. package/out/targets/AppxTarget.js.map +1 -1
  48. package/out/targets/FlatpakTarget.js +2 -4
  49. package/out/targets/FlatpakTarget.js.map +1 -1
  50. package/out/targets/FpmTarget.js +30 -6
  51. package/out/targets/FpmTarget.js.map +1 -1
  52. package/out/targets/LinuxTargetHelper.d.ts +1 -1
  53. package/out/targets/LinuxTargetHelper.js +79 -14
  54. package/out/targets/LinuxTargetHelper.js.map +1 -1
  55. package/out/targets/MsiTarget.js +1 -1
  56. package/out/targets/MsiTarget.js.map +1 -1
  57. package/out/targets/MsiWrappedTarget.js +1 -1
  58. package/out/targets/MsiWrappedTarget.js.map +1 -1
  59. package/out/targets/appimage/AppImageTarget.d.ts +0 -2
  60. package/out/targets/appimage/AppImageTarget.js +27 -42
  61. package/out/targets/appimage/AppImageTarget.js.map +1 -1
  62. package/out/targets/appimage/appImageUtil.d.ts +3 -1
  63. package/out/targets/appimage/appImageUtil.js +33 -0
  64. package/out/targets/appimage/appImageUtil.js.map +1 -1
  65. package/out/targets/nsis/NsisTarget.js +15 -5
  66. package/out/targets/nsis/NsisTarget.js.map +1 -1
  67. package/out/targets/nsis/WebInstallerTarget.js +2 -2
  68. package/out/targets/nsis/WebInstallerTarget.js.map +1 -1
  69. package/out/targets/nsis/nsisScriptGenerator.js +2 -3
  70. package/out/targets/nsis/nsisScriptGenerator.js.map +1 -1
  71. package/out/targets/pkg.js +1 -1
  72. package/out/targets/pkg.js.map +1 -1
  73. package/out/targets/snap/SnapTarget.js +2 -1
  74. package/out/targets/snap/SnapTarget.js.map +1 -1
  75. package/out/targets/snap/core24.js +5 -4
  76. package/out/targets/snap/core24.js.map +1 -1
  77. package/out/targets/snap/coreLegacy.js +5 -5
  78. package/out/targets/snap/coreLegacy.js.map +1 -1
  79. package/out/targets/snap/snapcraftBuilder.js +4 -3
  80. package/out/targets/snap/snapcraftBuilder.js.map +1 -1
  81. package/out/toolsets/linux.d.ts +3 -1
  82. package/out/toolsets/linux.js +49 -21
  83. package/out/toolsets/linux.js.map +1 -1
  84. package/out/toolsets/windows.js +7 -17
  85. package/out/toolsets/windows.js.map +1 -1
  86. package/out/util/bundledTool.js +2 -1
  87. package/out/util/bundledTool.js.map +1 -1
  88. package/out/util/config/config.js +4 -3
  89. package/out/util/config/config.js.map +1 -1
  90. package/out/util/dynamicImport.d.ts +1 -0
  91. package/out/util/dynamicImport.js +14 -0
  92. package/out/util/dynamicImport.js.map +1 -0
  93. package/out/util/electronGet.d.ts +2 -0
  94. package/out/util/electronGet.js +38 -2
  95. package/out/util/electronGet.js.map +1 -1
  96. package/out/util/packageMetadata.js +2 -1
  97. package/out/util/packageMetadata.js.map +1 -1
  98. package/out/util/rebuild.d.ts +1 -1
  99. package/out/util/rebuild.js.map +1 -1
  100. package/out/util/yarn.js +1 -1
  101. package/out/util/yarn.js.map +1 -1
  102. package/out/version.d.ts +1 -1
  103. package/out/version.js +1 -1
  104. package/out/version.js.map +1 -1
  105. package/package.json +11 -8
  106. package/scheme.json +22 -1
  107. package/templates/nsis/include/allowOnlyOneInstallerInstance.nsh +5 -5
@@ -97,11 +97,16 @@ async function computeElectronVersion(projectDir) {
97
97
  throw new builder_util_1.InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, "package.json")}'`);
98
98
  }
99
99
  const version = dependency === null || dependency === void 0 ? void 0 : dependency.version;
100
- if (version == null || !/^\d/.test(version)) {
101
- const versionMessage = version == null ? "" : ` and version ("${version}") is not fixed in project`;
102
- throw new builder_util_1.InvalidConfigurationError(`Cannot compute electron version from installed node modules - none of the possible electron modules are installed${versionMessage}.\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`);
100
+ if (version == null) {
101
+ throw new builder_util_1.InvalidConfigurationError(`Cannot compute electron version from installed node modules - none of the possible electron modules are installed.\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`);
103
102
  }
104
- return semver.coerce(version).format();
103
+ const pinnedVersion = semver.valid(version);
104
+ if (pinnedVersion === null) {
105
+ builder_util_1.log.error({ version }, `Electron version "${version}" is a range, not a fixed version. electron-builder requires an exact version because it downloads platform-specific binaries for a specific release — a range cannot be resolved without electron installed in node_modules. ` +
106
+ `Pin the version in package.json (e.g. "15.3.0" instead of "^15.3.0") or set "electronVersion" explicitly in your electron-builder config.`);
107
+ throw new builder_util_1.InvalidConfigurationError(`Cannot compute electron version from installed node modules - version ("${version}") is not fixed in project.\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`);
108
+ }
109
+ return pinnedVersion;
105
110
  }
106
111
  function findFromPackageMetadata(packageData) {
107
112
  for (const name of electronPackages) {
@@ -1 +1 @@
1
- {"version":3,"file":"electronVersion.js","sourceRoot":"","sources":["../../src/electron/electronVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import { httpExecutor, InvalidConfigurationError, log } from \"builder-util\"\nimport { parseXml } from \"builder-util-runtime\"\nimport { readJson } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport * as semver from \"semver\"\nimport { Configuration } from \"../configuration\"\nimport { getConfig } from \"../util/config/config\"\nimport { orNullIfFileNotExist } from \"../util/config/load\"\nimport { getProjectRootPath } from \"./search-module\"\n\nexport type MetadataValue = Lazy<Record<string, any> | null>\n\nconst electronPackages = [\"electron\", \"electron-prebuilt\", \"electron-prebuilt-compile\", \"electron-nightly\"]\n\nexport async function getElectronVersion(projectDir: string, config?: Configuration): Promise<string> {\n if (config == null) {\n config = await getConfig(projectDir, null, null)\n }\n if (config.electronVersion != null) {\n return config.electronVersion\n }\n return computeElectronVersion(projectDir)\n}\n\nexport async function getElectronVersionFromInstalled(projectDir: string): Promise<string | null> {\n for (const name of electronPackages) {\n try {\n return (await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))).version\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot read electron version package.json`)\n }\n }\n }\n return null\n}\n\nexport async function getElectronPackage(projectDir: string) {\n for (const name of electronPackages) {\n try {\n return await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot find electron in package.json`)\n }\n }\n }\n return null\n}\n\n/** @internal */\nexport async function computeElectronVersion(projectDir: string): Promise<string> {\n const result = await getElectronVersionFromInstalled(projectDir)\n if (result != null) {\n return result\n }\n\n const potentialRootDirs = [projectDir, await getProjectRootPath(projectDir)]\n let dependency: NameAndVersion | null = null\n for (const dir of potentialRootDirs) {\n const metadata = await orNullIfFileNotExist(readJson(path.join(dir, \"package.json\")))\n dependency = metadata ? findFromPackageMetadata(metadata) : null\n if (dependency) {\n break\n }\n }\n if (dependency?.name === \"electron-nightly\") {\n log.info(\"You are using a nightly version of electron, be warned that those builds are highly unstable.\")\n const feedXml = await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/nightlies/releases.atom`,\n headers: {\n accept: \"application/xml, application/atom+xml, text/xml, */*\",\n },\n })\n const feed = parseXml(feedXml!)\n const latestRelease = feed.element(\"entry\", false, `No published versions on GitHub`)\n const v = /\\/tag\\/v?([^/]+)$/.exec(latestRelease.element(\"link\").attribute(\"href\"))![1]\n return v.startsWith(\"v\") ? v.substring(1) : v\n } else if (dependency?.version === \"latest\") {\n log.warn('Electron version is set to \"latest\", but it is recommended to set it to some more restricted version range.')\n try {\n const releaseInfo = JSON.parse(\n (await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/${dependency.name === \"electron-nightly\" ? \"nightlies\" : \"electron\"}/releases/latest`,\n headers: {\n accept: \"application/json\",\n },\n }))!\n )\n const version = releaseInfo.tag_name.startsWith(\"v\") ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name\n log.info({ version }, `resolve ${dependency.name}@${dependency.version}`)\n return version\n } catch (e: any) {\n log.warn(e)\n }\n\n throw new InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, \"package.json\")}'`)\n }\n const version = dependency?.version\n if (version == null || !/^\\d/.test(version)) {\n const versionMessage = version == null ? \"\" : ` and version (\"${version}\") is not fixed in project`\n throw new InvalidConfigurationError(\n `Cannot compute electron version from installed node modules - none of the possible electron modules are installed${versionMessage}.\\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`\n )\n }\n\n return semver.coerce(version)!.format()\n}\n\ninterface NameAndVersion {\n readonly name: string\n readonly version: string\n}\n\nfunction findFromPackageMetadata(packageData: any): NameAndVersion | null {\n for (const name of electronPackages) {\n const devDependencies = packageData.devDependencies\n let dep = devDependencies == null ? null : devDependencies[name]\n if (dep == null) {\n const dependencies = packageData.dependencies\n dep = dependencies == null ? null : dependencies[name]\n }\n if (dep != null) {\n return { name, version: dep }\n }\n }\n return null\n}\n"]}
1
+ {"version":3,"file":"electronVersion.js","sourceRoot":"","sources":["../../src/electron/electronVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import { httpExecutor, InvalidConfigurationError, log } from \"builder-util\"\nimport { parseXml } from \"builder-util-runtime\"\nimport { readJson } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport * as semver from \"semver\"\nimport { Configuration } from \"../configuration\"\nimport { getConfig } from \"../util/config/config\"\nimport { orNullIfFileNotExist } from \"../util/config/load\"\nimport { getProjectRootPath } from \"./search-module\"\n\nexport type MetadataValue = Lazy<Record<string, any> | null>\n\nconst electronPackages = [\"electron\", \"electron-prebuilt\", \"electron-prebuilt-compile\", \"electron-nightly\"]\n\nexport async function getElectronVersion(projectDir: string, config?: Configuration): Promise<string> {\n if (config == null) {\n config = await getConfig(projectDir, null, null)\n }\n if (config.electronVersion != null) {\n return config.electronVersion\n }\n return computeElectronVersion(projectDir)\n}\n\nexport async function getElectronVersionFromInstalled(projectDir: string): Promise<string | null> {\n for (const name of electronPackages) {\n try {\n return (await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))).version\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot read electron version package.json`)\n }\n }\n }\n return null\n}\n\nexport async function getElectronPackage(projectDir: string) {\n for (const name of electronPackages) {\n try {\n return await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot find electron in package.json`)\n }\n }\n }\n return null\n}\n\n/** @internal */\nexport async function computeElectronVersion(projectDir: string): Promise<string> {\n const result = await getElectronVersionFromInstalled(projectDir)\n if (result != null) {\n return result\n }\n\n const potentialRootDirs = [projectDir, await getProjectRootPath(projectDir)]\n let dependency: NameAndVersion | null = null\n for (const dir of potentialRootDirs) {\n const metadata = await orNullIfFileNotExist(readJson(path.join(dir, \"package.json\")))\n dependency = metadata ? findFromPackageMetadata(metadata) : null\n if (dependency) {\n break\n }\n }\n if (dependency?.name === \"electron-nightly\") {\n log.info(\"You are using a nightly version of electron, be warned that those builds are highly unstable.\")\n const feedXml = await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/nightlies/releases.atom`,\n headers: {\n accept: \"application/xml, application/atom+xml, text/xml, */*\",\n },\n })\n const feed = parseXml(feedXml!)\n const latestRelease = feed.element(\"entry\", false, `No published versions on GitHub`)\n const v = /\\/tag\\/v?([^/]+)$/.exec(latestRelease.element(\"link\").attribute(\"href\"))![1]\n return v.startsWith(\"v\") ? v.substring(1) : v\n } else if (dependency?.version === \"latest\") {\n log.warn('Electron version is set to \"latest\", but it is recommended to set it to some more restricted version range.')\n try {\n const releaseInfo = JSON.parse(\n (await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/${dependency.name === \"electron-nightly\" ? \"nightlies\" : \"electron\"}/releases/latest`,\n headers: {\n accept: \"application/json\",\n },\n }))!\n )\n const version = releaseInfo.tag_name.startsWith(\"v\") ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name\n log.info({ version }, `resolve ${dependency.name}@${dependency.version}`)\n return version\n } catch (e: any) {\n log.warn(e)\n }\n\n throw new InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, \"package.json\")}'`)\n }\n const version = dependency?.version\n if (version == null) {\n throw new InvalidConfigurationError(\n `Cannot compute electron version from installed node modules - none of the possible electron modules are installed.\\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`\n )\n }\n\n const pinnedVersion = semver.valid(version)\n if (pinnedVersion === null) {\n log.error(\n { version },\n `Electron version \"${version}\" is a range, not a fixed version. electron-builder requires an exact version because it downloads platform-specific binaries for a specific release — a range cannot be resolved without electron installed in node_modules. ` +\n `Pin the version in package.json (e.g. \"15.3.0\" instead of \"^15.3.0\") or set \"electronVersion\" explicitly in your electron-builder config.`\n )\n throw new InvalidConfigurationError(\n `Cannot compute electron version from installed node modules - version (\"${version}\") is not fixed in project.\\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`\n )\n }\n\n return pinnedVersion\n}\n\ninterface NameAndVersion {\n readonly name: string\n readonly version: string\n}\n\nfunction findFromPackageMetadata(packageData: any): NameAndVersion | null {\n for (const name of electronPackages) {\n const devDependencies = packageData.devDependencies\n let dep = devDependencies == null ? null : devDependencies[name]\n if (dep == null) {\n const dependencies = packageData.dependencies\n dep = dependencies == null ? null : dependencies[name]\n }\n if (dep != null) {\n return { name, version: dep }\n }\n }\n return null\n}\n"]}
@@ -8,6 +8,7 @@ exports.createElectronCompilerHost = createElectronCompilerHost;
8
8
  const builder_util_1 = require("builder-util");
9
9
  const promises_1 = require("fs/promises");
10
10
  const path = require("path");
11
+ const builder_util_runtime_1 = require("builder-util-runtime");
11
12
  /** @internal */
12
13
  exports.NODE_MODULES_PATTERN = `${path.sep}node_modules${path.sep}`;
13
14
  /** @internal */
@@ -87,7 +88,7 @@ function cleanupPackageJson(data, options) {
87
88
  async function modifyMainPackageJson(file, extraMetadata, isRemovePackageScripts, isRemovePackageKeywords) {
88
89
  const mainPackageData = JSON.parse(await (0, promises_1.readFile)(file, "utf-8"));
89
90
  if (extraMetadata != null) {
90
- (0, builder_util_1.deepAssign)(mainPackageData, extraMetadata);
91
+ (0, builder_util_runtime_1.deepAssign)(mainPackageData, extraMetadata);
91
92
  }
92
93
  // https://github.com/electron-userland/electron-builder/issues/1212
93
94
  const serializedDataIfChanged = cleanupPackageJson(mainPackageData, {
@@ -1 +1 @@
1
- {"version":3,"file":"fileTransformer.js","sourceRoot":"","sources":["../src/fileTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug, deepAssign, FileTransformer, log } from \"builder-util\"\nimport { readFile } from \"fs/promises\"\nimport * as path from \"path\"\nimport { Configuration } from \"./configuration\"\nimport { Packager } from \"./packager\"\n\n/** @internal */\nexport const NODE_MODULES_PATTERN = `${path.sep}node_modules${path.sep}`\n\n/** @internal */\nexport function isElectronCompileUsed(info: Packager): boolean {\n if (info.config.electronCompile != null) {\n return info.config.electronCompile\n }\n\n // if in devDependencies - it means that babel is used for precompilation or for some reason user decided to not use electron-compile for production\n return hasDep(\"electron-compile\", info)\n}\n\n/** @internal */\nexport function hasDep(name: string, info: Packager) {\n const deps = info.metadata.dependencies\n return deps != null && name in deps\n}\n\n/** @internal */\nexport function createTransformer(srcDir: string, configuration: Configuration, extraMetadata: any, extraTransformer: FileTransformer | null): FileTransformer {\n const mainPackageJson = path.join(srcDir, \"package.json\")\n const isRemovePackageScripts = configuration.removePackageScripts !== false\n const isRemovePackageKeywords = configuration.removePackageKeywords !== false\n const packageJson = path.sep + \"package.json\"\n return file => {\n if (file === mainPackageJson) {\n return modifyMainPackageJson(file, extraMetadata, isRemovePackageScripts, isRemovePackageKeywords)\n }\n\n if (file.endsWith(packageJson) && file.includes(NODE_MODULES_PATTERN)) {\n return readFile(file, \"utf-8\")\n .then(it =>\n cleanupPackageJson(JSON.parse(it), {\n isMain: false,\n isRemovePackageScripts,\n isRemovePackageKeywords,\n })\n )\n .catch((e: any) => log.warn(e))\n } else if (extraTransformer != null) {\n return extraTransformer(file)\n } else {\n return null\n }\n }\n}\n\n/** @internal */\nexport interface CompilerHost {\n compile(file: string): any\n\n saveConfiguration(): Promise<any>\n}\n\n/** @internal */\nexport function createElectronCompilerHost(projectDir: string, cacheDir: string): Promise<CompilerHost> {\n const electronCompilePath = path.join(projectDir, \"node_modules\", \"electron-compile\", \"lib\")\n return require(path.join(electronCompilePath, \"config-parser\")).createCompilerHostFromProjectRoot(projectDir, cacheDir)\n}\n\nconst ignoredPackageMetadataProperties = new Set([\"dist\", \"gitHead\", \"build\", \"jspm\", \"ava\", \"xo\", \"nyc\", \"eslintConfig\", \"contributors\", \"bundleDependencies\", \"tags\"])\n\ninterface CleanupPackageFileOptions {\n readonly isRemovePackageScripts: boolean\n readonly isRemovePackageKeywords: boolean\n readonly isMain: boolean\n}\n\nfunction cleanupPackageJson(data: any, options: CleanupPackageFileOptions): any {\n const deps = data.dependencies\n // https://github.com/electron-userland/electron-builder/issues/507#issuecomment-312772099\n const isRemoveBabel = deps != null && typeof deps === \"object\" && !Object.getOwnPropertyNames(deps).some(it => it.startsWith(\"babel\"))\n try {\n let changed = false\n for (const prop of Object.getOwnPropertyNames(data)) {\n // removing devDependencies from package.json breaks levelup in electron, so, remove it only from main package.json\n if (\n prop[0] === \"_\" ||\n ignoredPackageMetadataProperties.has(prop) ||\n (options.isRemovePackageScripts && prop === \"scripts\") ||\n (options.isRemovePackageKeywords && prop === \"keywords\") ||\n (options.isMain && prop === \"devDependencies\") ||\n (!options.isMain && prop === \"bugs\") ||\n (isRemoveBabel && prop === \"babel\")\n ) {\n delete data[prop]\n changed = true\n }\n }\n\n if (changed) {\n return JSON.stringify(data, null, 2)\n }\n } catch (e: any) {\n debug(e)\n }\n\n return null\n}\n\nasync function modifyMainPackageJson(file: string, extraMetadata: any, isRemovePackageScripts: boolean, isRemovePackageKeywords: boolean) {\n const mainPackageData = JSON.parse(await readFile(file, \"utf-8\"))\n if (extraMetadata != null) {\n deepAssign(mainPackageData, extraMetadata)\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1212\n const serializedDataIfChanged = cleanupPackageJson(mainPackageData, {\n isMain: true,\n isRemovePackageScripts,\n isRemovePackageKeywords,\n })\n if (serializedDataIfChanged != null) {\n return serializedDataIfChanged\n } else if (extraMetadata != null) {\n return JSON.stringify(mainPackageData, null, 2)\n }\n return null\n}\n"]}
1
+ {"version":3,"file":"fileTransformer.js","sourceRoot":"","sources":["../src/fileTransformer.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug, FileTransformer, log } from \"builder-util\"\nimport { readFile } from \"fs/promises\"\nimport * as path from \"path\"\nimport { Configuration } from \"./configuration\"\nimport { Packager } from \"./packager\"\nimport { deepAssign } from \"builder-util-runtime\"\n\n/** @internal */\nexport const NODE_MODULES_PATTERN = `${path.sep}node_modules${path.sep}`\n\n/** @internal */\nexport function isElectronCompileUsed(info: Packager): boolean {\n if (info.config.electronCompile != null) {\n return info.config.electronCompile\n }\n\n // if in devDependencies - it means that babel is used for precompilation or for some reason user decided to not use electron-compile for production\n return hasDep(\"electron-compile\", info)\n}\n\n/** @internal */\nexport function hasDep(name: string, info: Packager) {\n const deps = info.metadata.dependencies\n return deps != null && name in deps\n}\n\n/** @internal */\nexport function createTransformer(srcDir: string, configuration: Configuration, extraMetadata: any, extraTransformer: FileTransformer | null): FileTransformer {\n const mainPackageJson = path.join(srcDir, \"package.json\")\n const isRemovePackageScripts = configuration.removePackageScripts !== false\n const isRemovePackageKeywords = configuration.removePackageKeywords !== false\n const packageJson = path.sep + \"package.json\"\n return file => {\n if (file === mainPackageJson) {\n return modifyMainPackageJson(file, extraMetadata, isRemovePackageScripts, isRemovePackageKeywords)\n }\n\n if (file.endsWith(packageJson) && file.includes(NODE_MODULES_PATTERN)) {\n return readFile(file, \"utf-8\")\n .then(it =>\n cleanupPackageJson(JSON.parse(it), {\n isMain: false,\n isRemovePackageScripts,\n isRemovePackageKeywords,\n })\n )\n .catch((e: any) => log.warn(e))\n } else if (extraTransformer != null) {\n return extraTransformer(file)\n } else {\n return null\n }\n }\n}\n\n/** @internal */\nexport interface CompilerHost {\n compile(file: string): any\n\n saveConfiguration(): Promise<any>\n}\n\n/** @internal */\nexport function createElectronCompilerHost(projectDir: string, cacheDir: string): Promise<CompilerHost> {\n const electronCompilePath = path.join(projectDir, \"node_modules\", \"electron-compile\", \"lib\")\n return require(path.join(electronCompilePath, \"config-parser\")).createCompilerHostFromProjectRoot(projectDir, cacheDir)\n}\n\nconst ignoredPackageMetadataProperties = new Set([\"dist\", \"gitHead\", \"build\", \"jspm\", \"ava\", \"xo\", \"nyc\", \"eslintConfig\", \"contributors\", \"bundleDependencies\", \"tags\"])\n\ninterface CleanupPackageFileOptions {\n readonly isRemovePackageScripts: boolean\n readonly isRemovePackageKeywords: boolean\n readonly isMain: boolean\n}\n\nfunction cleanupPackageJson(data: any, options: CleanupPackageFileOptions): any {\n const deps = data.dependencies\n // https://github.com/electron-userland/electron-builder/issues/507#issuecomment-312772099\n const isRemoveBabel = deps != null && typeof deps === \"object\" && !Object.getOwnPropertyNames(deps).some(it => it.startsWith(\"babel\"))\n try {\n let changed = false\n for (const prop of Object.getOwnPropertyNames(data)) {\n // removing devDependencies from package.json breaks levelup in electron, so, remove it only from main package.json\n if (\n prop[0] === \"_\" ||\n ignoredPackageMetadataProperties.has(prop) ||\n (options.isRemovePackageScripts && prop === \"scripts\") ||\n (options.isRemovePackageKeywords && prop === \"keywords\") ||\n (options.isMain && prop === \"devDependencies\") ||\n (!options.isMain && prop === \"bugs\") ||\n (isRemoveBabel && prop === \"babel\")\n ) {\n delete data[prop]\n changed = true\n }\n }\n\n if (changed) {\n return JSON.stringify(data, null, 2)\n }\n } catch (e: any) {\n debug(e)\n }\n\n return null\n}\n\nasync function modifyMainPackageJson(file: string, extraMetadata: any, isRemovePackageScripts: boolean, isRemovePackageKeywords: boolean) {\n const mainPackageData = JSON.parse(await readFile(file, \"utf-8\"))\n if (extraMetadata != null) {\n deepAssign(mainPackageData, extraMetadata)\n }\n\n // https://github.com/electron-userland/electron-builder/issues/1212\n const serializedDataIfChanged = cleanupPackageJson(mainPackageData, {\n isMain: true,\n isRemovePackageScripts,\n isRemovePackageKeywords,\n })\n if (serializedDataIfChanged != null) {\n return serializedDataIfChanged\n } else if (extraMetadata != null) {\n return JSON.stringify(mainPackageData, null, 2)\n }\n return null\n}\n"]}
@@ -4,13 +4,17 @@ exports.buildForge = buildForge;
4
4
  const path = require("path");
5
5
  const index_1 = require("./index");
6
6
  function buildForge(forgeOptions, options) {
7
- const appDir = forgeOptions.dir;
7
+ // Resolve appDir to an absolute canonical path before deriving any sibling
8
+ // directories from it. Using path.dirname avoids embedding ".." in the
9
+ // resolved path, which keeps downstream path comparisons and CodeQL taint
10
+ // tracking straightforward.
11
+ const appDir = path.resolve(forgeOptions.dir);
8
12
  return (0, index_1.build)({
9
13
  prepackaged: appDir,
10
14
  config: {
11
15
  directories: {
12
16
  // https://github.com/electron-userland/electron-forge/blob/master/src/makers/generic/zip.js
13
- output: path.resolve(appDir, "..", "make"),
17
+ output: path.join(path.dirname(appDir), "make"),
14
18
  },
15
19
  },
16
20
  ...options,
@@ -1 +1 @@
1
- {"version":3,"file":"forge-maker.js","sourceRoot":"","sources":["../src/forge-maker.ts"],"names":[],"mappings":";;AAQA,gCAYC;AApBD,6BAA4B;AAC5B,mCAA+B;AAO/B,SAAgB,UAAU,CAAC,YAA0B,EAAE,OAAwB;IAC7E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAA;IAC/B,OAAO,IAAA,aAAK,EAAC;QACX,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE;YACN,WAAW,EAAE;gBACX,4FAA4F;gBAC5F,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;aAC3C;SACF;QACD,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import * as path from \"path\"\nimport { build } from \"./index\"\nimport { PackagerOptions } from \"./packagerApi\"\n\nexport interface ForgeOptions {\n readonly dir: string\n}\n\nexport function buildForge(forgeOptions: ForgeOptions, options: PackagerOptions) {\n const appDir = forgeOptions.dir\n return build({\n prepackaged: appDir,\n config: {\n directories: {\n // https://github.com/electron-userland/electron-forge/blob/master/src/makers/generic/zip.js\n output: path.resolve(appDir, \"..\", \"make\"),\n },\n },\n ...options,\n })\n}\n"]}
1
+ {"version":3,"file":"forge-maker.js","sourceRoot":"","sources":["../src/forge-maker.ts"],"names":[],"mappings":";;AAQA,gCAgBC;AAxBD,6BAA4B;AAC5B,mCAA+B;AAO/B,SAAgB,UAAU,CAAC,YAA0B,EAAE,OAAwB;IAC7E,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC7C,OAAO,IAAA,aAAK,EAAC;QACX,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE;YACN,WAAW,EAAE;gBACX,4FAA4F;gBAC5F,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;aAChD;SACF;QACD,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import * as path from \"path\"\nimport { build } from \"./index\"\nimport { PackagerOptions } from \"./packagerApi\"\n\nexport interface ForgeOptions {\n readonly dir: string\n}\n\nexport function buildForge(forgeOptions: ForgeOptions, options: PackagerOptions) {\n // Resolve appDir to an absolute canonical path before deriving any sibling\n // directories from it. Using path.dirname avoids embedding \"..\" in the\n // resolved path, which keeps downstream path comparisons and CodeQL taint\n // tracking straightforward.\n const appDir = path.resolve(forgeOptions.dir)\n return build({\n prepackaged: appDir,\n config: {\n directories: {\n // https://github.com/electron-userland/electron-forge/blob/master/src/makers/generic/zip.js\n output: path.join(path.dirname(appDir), \"make\"),\n },\n },\n ...options,\n })\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import type { NotarizeOptionsNotaryTool } from "@electron/notarize/lib/types";
2
+ import type { PerFileSignOptions, SigningDistributionType, SignOptions } from "@electron/osx-sign/dist/cjs/types";
3
+ import type { Identity } from "@electron/osx-sign/dist/cjs/util-identities";
4
+ import { Arch } from "builder-util";
5
+ import { Nullish } from "builder-util-runtime";
6
+ import { CertType } from "../codeSign/macCodeSign";
7
+ import type { MacPackager } from "../macPackager";
8
+ import { MacConfiguration, MasConfiguration } from "../options/macOptions";
9
+ export type PlatformType = "mas" | "mas-dev" | "mac";
10
+ export declare class MacTargetHelper {
11
+ private packager;
12
+ constructor(packager: MacPackager);
13
+ handleNullIdentity(fallBackToAdhoc: boolean): boolean;
14
+ findSigningIdentity(isMas: boolean, isDevelopment: boolean, qualifier: string | undefined, keychainFile: string | Nullish, config: MacConfiguration | MasConfiguration, fallBackToAdhoc: boolean): Promise<Identity | null>;
15
+ buildSignOptions(appPath: string, identity: Identity, type: SigningDistributionType, isMas: boolean, config: MacConfiguration | MasConfiguration, keychainFile: string | Nullish, arch: Arch): Promise<SignOptions>;
16
+ createMasInstaller(appPath: string, outDir: string, masOptions: MasConfiguration, keychainFile: string | Nullish, isDevelopment: boolean, arch: Arch): Promise<void>;
17
+ getOptionsForFile(appPath: string, isMas: boolean, customSignOptions: MacConfiguration | MasConfiguration): Promise<(filePath: string) => PerFileSignOptions>;
18
+ static getCertificateTypes(isMas: boolean, isDevelopment: boolean): CertType[];
19
+ static isMasTarget(targetName: string): boolean;
20
+ static getPlatformTypeFromTarget(targetName: string): PlatformType;
21
+ static assertSafePathForCommandUsage(pathValue: string, description: string): void;
22
+ static getNotarizeOptions(appPath: string): NotarizeOptionsNotaryTool | undefined;
23
+ notarizeIfProvided(appPath: string): Promise<void>;
24
+ }
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MacTargetHelper = void 0;
4
+ const builder_util_1 = require("builder-util");
5
+ const dynamicImport_1 = require("../util/dynamicImport");
6
+ const path = require("path");
7
+ const macCodeSign_1 = require("../codeSign/macCodeSign");
8
+ const pathManager_1 = require("../util/pathManager");
9
+ class MacTargetHelper {
10
+ constructor(packager) {
11
+ this.packager = packager;
12
+ }
13
+ handleNullIdentity(fallBackToAdhoc) {
14
+ if (this.packager.forceCodeSigning) {
15
+ throw new builder_util_1.InvalidConfigurationError("identity explicitly is set to null, but forceCodeSigning is set to true");
16
+ }
17
+ builder_util_1.log.info({ reason: "identity explicitly is set to null" }, "skipped macOS code signing");
18
+ if (fallBackToAdhoc) {
19
+ builder_util_1.log.warn("arm64 requires signing, but identity is set to null and signing is being skipped");
20
+ }
21
+ return false;
22
+ }
23
+ async findSigningIdentity(isMas, isDevelopment, qualifier, keychainFile, config, fallBackToAdhoc) {
24
+ const certificateTypes = MacTargetHelper.getCertificateTypes(isMas, isDevelopment);
25
+ let identity = null;
26
+ for (const certificateType of certificateTypes) {
27
+ identity = await (0, macCodeSign_1.findIdentity)(certificateType, qualifier, keychainFile);
28
+ if (identity != null) {
29
+ break;
30
+ }
31
+ }
32
+ if (identity == null) {
33
+ if (!isMas && !isDevelopment && config.type !== "distribution") {
34
+ identity = await (0, macCodeSign_1.findIdentity)("Mac Developer", qualifier, keychainFile);
35
+ if (identity != null) {
36
+ builder_util_1.log.warn("Mac Developer is used to sign app — it is only for development and testing, not for production");
37
+ }
38
+ }
39
+ const noIdentity = !config.sign && identity == null;
40
+ if (qualifier === "-") {
41
+ const { Identity: IdentityClass } = await (0, dynamicImport_1.dynamicImport)("@electron/osx-sign/dist/cjs/util-identities");
42
+ identity = new IdentityClass("-", undefined);
43
+ }
44
+ else if (noIdentity && fallBackToAdhoc) {
45
+ builder_util_1.log.warn(null, "falling back to ad-hoc signature for macOS application code signing");
46
+ const { Identity: IdentityClass } = await (0, dynamicImport_1.dynamicImport)("@electron/osx-sign/dist/cjs/util-identities");
47
+ identity = new IdentityClass("-", undefined);
48
+ }
49
+ else if (noIdentity) {
50
+ await (0, macCodeSign_1.reportError)(isMas, certificateTypes, qualifier, keychainFile, this.packager.forceCodeSigning);
51
+ return null;
52
+ }
53
+ }
54
+ return identity;
55
+ }
56
+ async buildSignOptions(appPath, identity, type, isMas, config, keychainFile, arch) {
57
+ let filter = config.signIgnore;
58
+ if (Array.isArray(filter)) {
59
+ if (filter.length == 0) {
60
+ filter = null;
61
+ }
62
+ }
63
+ else if (filter != null) {
64
+ filter = filter.length === 0 ? null : [filter];
65
+ }
66
+ const filterRe = filter == null
67
+ ? null
68
+ : filter.map(it => {
69
+ try {
70
+ return new RegExp(it);
71
+ }
72
+ catch (e) {
73
+ throw new builder_util_1.InvalidConfigurationError(`Invalid regex filter pattern: ${it}. ${e.message}`);
74
+ }
75
+ });
76
+ let binaries = config.binaries || undefined;
77
+ if (binaries) {
78
+ // Accept absolute paths for external binaries, else resolve relative paths from the artifact's app Contents path.
79
+ binaries = (await Promise.all(binaries.flatMap(async (destination) => {
80
+ const expandedDestination = this.packager.expandArch(destination, arch);
81
+ return await Promise.all(expandedDestination.map(async (d) => {
82
+ if (await (0, builder_util_1.statOrNull)(d)) {
83
+ return d;
84
+ }
85
+ return path.resolve(appPath, d);
86
+ }));
87
+ }))).flat();
88
+ builder_util_1.log.info({ binaries, arch: arch == null ? null : builder_util_1.Arch[arch] }, "signing additional user-defined binaries for arch");
89
+ }
90
+ const signOptions = {
91
+ identityValidation: false,
92
+ // https://github.com/electron-userland/electron-builder/issues/1699
93
+ // kext are signed by the chipset manufacturers. You need a special certificate (only available on request) from Apple to be able to sign kext.
94
+ ignore: (file) => {
95
+ if (filterRe != null) {
96
+ for (const regExp of filterRe) {
97
+ if (regExp.test(file)) {
98
+ return true;
99
+ }
100
+ }
101
+ }
102
+ return (file.endsWith(".kext") ||
103
+ file.startsWith("/Contents/PlugIns", appPath.length) ||
104
+ file.includes("/node_modules/puppeteer/.local-chromium") ||
105
+ file.includes("/node_modules/playwright-firefox/.local-browsers") ||
106
+ file.includes("/node_modules/playwright/.local-browsers"));
107
+ /* Those are browser automating modules, browser (chromium, nightly) cannot be signed
108
+ https://github.com/electron-userland/electron-builder/issues/2010
109
+ https://github.com/electron-userland/electron-builder/issues/5383
110
+ */
111
+ },
112
+ identity: identity ? identity.hash || identity.name : undefined,
113
+ type,
114
+ platform: isMas ? "mas" : "darwin",
115
+ version: this.packager.config.electronVersion || undefined,
116
+ app: appPath,
117
+ keychain: keychainFile || undefined,
118
+ binaries,
119
+ // https://github.com/electron-userland/electron-builder/issues/1480
120
+ strictVerify: config.strictVerify,
121
+ preAutoEntitlements: config.preAutoEntitlements,
122
+ optionsForFile: await this.getOptionsForFile(appPath, isMas, config),
123
+ provisioningProfile: config.provisioningProfile || undefined,
124
+ };
125
+ return signOptions;
126
+ }
127
+ async createMasInstaller(appPath, outDir, masOptions, keychainFile, isDevelopment, arch) {
128
+ const certType = isDevelopment ? "Mac Developer" : "3rd Party Mac Developer Installer";
129
+ const masInstallerIdentity = await (0, macCodeSign_1.findIdentity)(certType, masOptions.identity, keychainFile);
130
+ if (masInstallerIdentity == null) {
131
+ throw new builder_util_1.InvalidConfigurationError(`Cannot find valid "${certType}" identity to sign MAS installer, please see https://electron.build/code-signing`);
132
+ }
133
+ MacTargetHelper.assertSafePathForCommandUsage(outDir, "output directory");
134
+ // mas uploaded to AppStore, so, use "-" instead of space for name
135
+ // path.basename prevents path traversal if a crafted artifactName contains "../"
136
+ const artifactName = path.basename(this.packager.expandArtifactNamePattern(masOptions, "pkg", arch));
137
+ MacTargetHelper.assertSafePathForCommandUsage(artifactName, "artifact name");
138
+ const artifactPath = path.resolve(outDir, artifactName);
139
+ await this.packager.doFlat(appPath, artifactPath, masInstallerIdentity, keychainFile);
140
+ await this.packager.info.emitArtifactBuildCompleted({
141
+ file: artifactPath,
142
+ target: null,
143
+ arch: builder_util_1.Arch.x64,
144
+ safeArtifactName: this.packager.computeSafeArtifactName(artifactName, "pkg", arch, true, this.packager.platformSpecificBuildOptions.defaultArch),
145
+ packager: this.packager,
146
+ });
147
+ }
148
+ async getOptionsForFile(appPath, isMas, customSignOptions) {
149
+ const resourceList = await this.packager.resourceList;
150
+ const entitlementsSuffix = isMas ? "mas" : "mac";
151
+ const getEntitlements = (filePath) => {
152
+ if (filePath === appPath) {
153
+ if (customSignOptions.entitlements) {
154
+ return customSignOptions.entitlements;
155
+ }
156
+ const p = `entitlements.${entitlementsSuffix}.plist`;
157
+ if (resourceList.includes(p)) {
158
+ return path.join(this.packager.info.buildResourcesDir, p);
159
+ }
160
+ else {
161
+ return (0, pathManager_1.getTemplatePath)("entitlements.mac.plist");
162
+ }
163
+ }
164
+ if (filePath.includes("Library/LoginItems")) {
165
+ return customSignOptions.entitlementsLoginHelper;
166
+ }
167
+ if (customSignOptions.entitlementsInherit) {
168
+ return customSignOptions.entitlementsInherit;
169
+ }
170
+ const p = `entitlements.${entitlementsSuffix}.inherit.plist`;
171
+ if (resourceList.includes(p)) {
172
+ return path.join(this.packager.info.buildResourcesDir, p);
173
+ }
174
+ else {
175
+ return (0, pathManager_1.getTemplatePath)("entitlements.mac.plist");
176
+ }
177
+ };
178
+ const requirements = isMas || this.packager.platformSpecificBuildOptions.requirements == null
179
+ ? undefined
180
+ : await this.packager.getResource(this.packager.platformSpecificBuildOptions.requirements);
181
+ // harden by default for mac builds. Only harden mas builds if explicitly true (backward compatibility)
182
+ const hardenedRuntime = isMas ? customSignOptions.hardenedRuntime === true : customSignOptions.hardenedRuntime !== false;
183
+ return (filePath) => {
184
+ const entitlements = getEntitlements(filePath);
185
+ return {
186
+ entitlements: entitlements || undefined,
187
+ hardenedRuntime: hardenedRuntime !== null && hardenedRuntime !== void 0 ? hardenedRuntime : undefined,
188
+ timestamp: customSignOptions.timestamp || undefined,
189
+ requirements: requirements || undefined,
190
+ additionalArguments: customSignOptions.additionalArguments || [],
191
+ };
192
+ };
193
+ }
194
+ static getCertificateTypes(isMas, isDevelopment) {
195
+ if (isDevelopment) {
196
+ return isMas ? ["Mac Developer", "Apple Development"] : ["Mac Developer", "Developer ID Application"];
197
+ }
198
+ return isMas ? ["Apple Distribution", "3rd Party Mac Developer Application"] : ["Developer ID Application"];
199
+ }
200
+ static isMasTarget(targetName) {
201
+ return targetName === "mas" || targetName === "mas-dev";
202
+ }
203
+ static getPlatformTypeFromTarget(targetName) {
204
+ if (targetName === "mas")
205
+ return "mas";
206
+ if (targetName === "mas-dev")
207
+ return "mas-dev";
208
+ return "mac";
209
+ }
210
+ static assertSafePathForCommandUsage(pathValue, description) {
211
+ if (/[\0\r\n"'`$;&|<>]/.test(pathValue)) {
212
+ throw new builder_util_1.InvalidConfigurationError(`Invalid ${description}: contains unsupported shell-special characters`);
213
+ }
214
+ }
215
+ static getNotarizeOptions(appPath) {
216
+ const tool = "notarytool";
217
+ const teamId = process.env.APPLE_TEAM_ID;
218
+ const appleId = process.env.APPLE_ID;
219
+ const appleIdPassword = process.env.APPLE_APP_SPECIFIC_PASSWORD;
220
+ if (appleId || appleIdPassword) {
221
+ if (!appleId) {
222
+ throw new builder_util_1.InvalidConfigurationError(`APPLE_ID env var needs to be set`);
223
+ }
224
+ if (!appleIdPassword) {
225
+ throw new builder_util_1.InvalidConfigurationError(`APPLE_APP_SPECIFIC_PASSWORD env var needs to be set`);
226
+ }
227
+ if (!teamId) {
228
+ throw new builder_util_1.InvalidConfigurationError(`APPLE_TEAM_ID env var needs to be set`);
229
+ }
230
+ return { tool, appPath, appleId, appleIdPassword, teamId };
231
+ }
232
+ const appleApiKey = process.env.APPLE_API_KEY;
233
+ const appleApiKeyId = process.env.APPLE_API_KEY_ID;
234
+ const appleApiIssuer = process.env.APPLE_API_ISSUER;
235
+ if (appleApiKey || appleApiKeyId || appleApiIssuer) {
236
+ if (!appleApiKey || !appleApiKeyId || !appleApiIssuer) {
237
+ throw new builder_util_1.InvalidConfigurationError(`Env vars APPLE_API_KEY, APPLE_API_KEY_ID and APPLE_API_ISSUER need to be set`);
238
+ }
239
+ return { tool, appPath, appleApiKey, appleApiKeyId, appleApiIssuer };
240
+ }
241
+ const keychain = process.env.APPLE_KEYCHAIN;
242
+ const keychainProfile = process.env.APPLE_KEYCHAIN_PROFILE;
243
+ if (keychainProfile) {
244
+ let args = { keychainProfile };
245
+ if (keychain) {
246
+ args = { ...args, keychain };
247
+ }
248
+ return { tool, appPath, ...args };
249
+ }
250
+ return undefined;
251
+ }
252
+ async notarizeIfProvided(appPath) {
253
+ const notarizeOptions = this.packager.platformSpecificBuildOptions.notarize;
254
+ if (notarizeOptions === false) {
255
+ builder_util_1.log.info({ reason: "`notarize` options were set explicitly `false`" }, "skipped macOS notarization");
256
+ return;
257
+ }
258
+ const options = MacTargetHelper.getNotarizeOptions(appPath);
259
+ if (!options) {
260
+ builder_util_1.log.warn({ reason: "`notarize` options were unable to be generated" }, "skipped macOS notarization");
261
+ return;
262
+ }
263
+ const { notarize } = await (0, dynamicImport_1.dynamicImport)("@electron/notarize");
264
+ await notarize(options);
265
+ builder_util_1.log.info(null, "notarization successful");
266
+ }
267
+ }
268
+ exports.MacTargetHelper = MacTargetHelper;
269
+ //# sourceMappingURL=MacTargetHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MacTargetHelper.js","sourceRoot":"","sources":["../../src/mac/MacTargetHelper.ts"],"names":[],"mappings":";;;AAGA,+CAA+E;AAC/E,yDAAqD;AAErD,6BAA4B;AAC5B,yDAA6E;AAG7E,qDAAqD;AAIrD,MAAa,eAAe;IAC1B,YAAoB,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;IAAG,CAAC;IAE7C,kBAAkB,CAAC,eAAwB;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACnC,MAAM,IAAI,wCAAyB,CAAC,yEAAyE,CAAC,CAAA;QAChH,CAAC;QACD,kBAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,EAAE,4BAA4B,CAAC,CAAA;QACxF,IAAI,eAAe,EAAE,CAAC;YACpB,kBAAG,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAA;QAC9F,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,KAAc,EACd,aAAsB,EACtB,SAA6B,EAC7B,YAA8B,EAC9B,MAA2C,EAC3C,eAAwB;QAExB,MAAM,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QAElF,IAAI,QAAQ,GAAoB,IAAI,CAAA;QACpC,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;YAC/C,QAAQ,GAAG,MAAM,IAAA,0BAAY,EAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;YACvE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAK;YACP,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC/D,QAAQ,GAAG,MAAM,IAAA,0BAAY,EAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;gBACvE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrB,kBAAG,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAA;gBAC5G,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAA;YACnD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBACtB,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,6BAAa,EAA8D,6CAA6C,CAAC,CAAA;gBACnK,QAAQ,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,UAAU,IAAI,eAAe,EAAE,CAAC;gBACzC,kBAAG,CAAC,IAAI,CAAC,IAAI,EAAE,qEAAqE,CAAC,CAAA;gBACrF,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,6BAAa,EAA8D,6CAA6C,CAAC,CAAA;gBACnK,QAAQ,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,MAAM,IAAA,yBAAW,EAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;gBACnG,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,OAAe,EACf,QAAkB,EAClB,IAA6B,EAC7B,KAAc,EACd,MAA2C,EAC3C,YAA8B,EAC9B,IAAU;QAEV,IAAI,MAAM,GAAG,MAAM,CAAC,UAAU,CAAA;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,IAAI,CAAA;YACf,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAChD,CAAC;QAED,MAAM,QAAQ,GACZ,MAAM,IAAI,IAAI;YACZ,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACd,IAAI,CAAC;oBACH,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;gBACvB,CAAC;gBAAC,OAAO,CAAM,EAAE,CAAC;oBAChB,MAAM,IAAI,wCAAyB,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC1F,CAAC;YACH,CAAC,CAAC,CAAA;QAER,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAA;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,kHAAkH;YAClH,QAAQ,GAAG,CACT,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;gBACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;gBACvE,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;oBAChC,IAAI,MAAM,IAAA,yBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;wBACxB,OAAO,CAAC,CAAA;oBACV,CAAC;oBACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBACjC,CAAC,CAAC,CACH,CAAA;YACH,CAAC,CAAC,CACH,CACF,CAAC,IAAI,EAAE,CAAA;YACR,kBAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAA;QACrH,CAAC;QAED,MAAM,WAAW,GAAgB;YAC/B,kBAAkB,EAAE,KAAK;YACzB,oEAAoE;YACpE,+IAA+I;YAC/I,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACvB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;wBAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BACtB,OAAO,IAAI,CAAA;wBACb,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACtB,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC;oBACpD,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC;oBACxD,IAAI,CAAC,QAAQ,CAAC,kDAAkD,CAAC;oBACjE,IAAI,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAC1D,CAAA;gBAED;;;oBAGI;YACN,CAAC;YACD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC/D,IAAI;YACJ,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YAClC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,IAAI,SAAS;YAC1D,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,YAAY,IAAI,SAAS;YACnC,QAAQ;YACR,oEAAoE;YACpE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,cAAc,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;YACpE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,SAAS;SAC7D,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,MAAc,EAAE,UAA4B,EAAE,YAA8B,EAAE,aAAsB,EAAE,IAAU;QACxJ,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mCAAmC,CAAA;QACtF,MAAM,oBAAoB,GAAG,MAAM,IAAA,0BAAY,EAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAE5F,IAAI,oBAAoB,IAAI,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,wCAAyB,CAAC,sBAAsB,QAAQ,kFAAkF,CAAC,CAAA;QACvJ,CAAC;QAED,eAAe,CAAC,6BAA6B,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QAEzE,kEAAkE;QAClE,iFAAiF;QACjF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;QACpG,eAAe,CAAC,6BAA6B,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;QAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QACvD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAA;QACrF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC;YAClD,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,mBAAI,CAAC,GAAG;YACd,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,WAAW,CAAC;YAChJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,KAAc,EAAE,iBAAsD;QAC7G,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAA;QACrD,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QAEhD,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE;YAC3C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;oBACnC,OAAO,iBAAiB,CAAC,YAAY,CAAA;gBACvC,CAAC;gBACD,MAAM,CAAC,GAAG,gBAAgB,kBAAkB,QAAQ,CAAA;gBACpD,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;gBAC3D,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAA,6BAAe,EAAC,wBAAwB,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC5C,OAAO,iBAAiB,CAAC,uBAAuB,CAAA;YAClD,CAAC;YAED,IAAI,iBAAiB,CAAC,mBAAmB,EAAE,CAAC;gBAC1C,OAAO,iBAAiB,CAAC,mBAAmB,CAAA;YAC9C,CAAC;YACD,MAAM,CAAC,GAAG,gBAAgB,kBAAkB,gBAAgB,CAAA;YAC5D,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAA,6BAAe,EAAC,wBAAwB,CAAC,CAAA;YAClD,CAAC;QACH,CAAC,CAAA;QAED,MAAM,YAAY,GAChB,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,YAAY,IAAI,IAAI;YACtE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAA;QAE9F,uGAAuG;QACvG,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,eAAe,KAAK,KAAK,CAAA;QAExH,OAAO,CAAC,QAAgB,EAAsB,EAAE;YAC9C,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;YAC9C,OAAO;gBACL,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,eAAe,EAAE,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,SAAS;gBAC7C,SAAS,EAAE,iBAAiB,CAAC,SAAS,IAAI,SAAS;gBACnD,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,mBAAmB,EAAE,iBAAiB,CAAC,mBAAmB,IAAI,EAAE;aACjE,CAAA;QACH,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,KAAc,EAAE,aAAsB;QAC/D,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,0BAA0B,CAAC,CAAA;QACvG,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,qCAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAA;IAC7G,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,UAAkB;QACnC,OAAO,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,SAAS,CAAA;IACzD,CAAC;IAED,MAAM,CAAC,yBAAyB,CAAC,UAAkB;QACjD,IAAI,UAAU,KAAK,KAAK;YAAE,OAAO,KAAK,CAAA;QACtC,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC9C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,6BAA6B,CAAC,SAAiB,EAAE,WAAmB;QACzE,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,wCAAyB,CAAC,WAAW,WAAW,iDAAiD,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,OAAe;QACvC,MAAM,IAAI,GAAG,YAAY,CAAA;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;QACpC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAA;QAE/D,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,wCAAyB,CAAC,kCAAkC,CAAC,CAAA;YACzE,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,wCAAyB,CAAC,qDAAqD,CAAC,CAAA;YAC5F,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,wCAAyB,CAAC,uCAAuC,CAAC,CAAA;YAC9E,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAA;QAC5D,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;QAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;QAClD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;QACnD,IAAI,WAAW,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;YACnD,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtD,MAAM,IAAI,wCAAyB,CAAC,8EAA8E,CAAC,CAAA;YACrH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA;QACtE,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;QAC3C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAA;QAC1D,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,IAAI,GAAkC,EAAE,eAAe,EAAE,CAAA;YAC7D,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAA;YAC9B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAA;QACnC,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,QAAQ,CAAA;QAC3E,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;YAC9B,kBAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gDAAgD,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACpG,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,kBAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gDAAgD,EAAE,EAAE,4BAA4B,CAAC,CAAA;YACpG,OAAM;QACR,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,6BAAa,EAAsC,oBAAoB,CAAC,CAAA;QACnG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;QACvB,kBAAG,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IAC3C,CAAC;CACF;AAlTD,0CAkTC","sourcesContent":["import type { NotarizeOptionsNotaryTool, NotaryToolKeychainCredentials } from \"@electron/notarize/lib/types\"\nimport type { PerFileSignOptions, SigningDistributionType, SignOptions } from \"@electron/osx-sign/dist/cjs/types\"\nimport type { Identity } from \"@electron/osx-sign/dist/cjs/util-identities\"\nimport { Arch, InvalidConfigurationError, log, statOrNull } from \"builder-util\"\nimport { dynamicImport } from \"../util/dynamicImport\"\nimport { Nullish } from \"builder-util-runtime\"\nimport * as path from \"path\"\nimport { CertType, findIdentity, reportError } from \"../codeSign/macCodeSign\"\nimport type { MacPackager } from \"../macPackager\"\nimport { MacConfiguration, MasConfiguration } from \"../options/macOptions\"\nimport { getTemplatePath } from \"../util/pathManager\"\n\nexport type PlatformType = \"mas\" | \"mas-dev\" | \"mac\"\n\nexport class MacTargetHelper {\n constructor(private packager: MacPackager) {}\n\n handleNullIdentity(fallBackToAdhoc: boolean): boolean {\n if (this.packager.forceCodeSigning) {\n throw new InvalidConfigurationError(\"identity explicitly is set to null, but forceCodeSigning is set to true\")\n }\n log.info({ reason: \"identity explicitly is set to null\" }, \"skipped macOS code signing\")\n if (fallBackToAdhoc) {\n log.warn(\"arm64 requires signing, but identity is set to null and signing is being skipped\")\n }\n return false\n }\n\n async findSigningIdentity(\n isMas: boolean,\n isDevelopment: boolean,\n qualifier: string | undefined,\n keychainFile: string | Nullish,\n config: MacConfiguration | MasConfiguration,\n fallBackToAdhoc: boolean\n ): Promise<Identity | null> {\n const certificateTypes = MacTargetHelper.getCertificateTypes(isMas, isDevelopment)\n\n let identity: Identity | null = null\n for (const certificateType of certificateTypes) {\n identity = await findIdentity(certificateType, qualifier, keychainFile)\n if (identity != null) {\n break\n }\n }\n\n if (identity == null) {\n if (!isMas && !isDevelopment && config.type !== \"distribution\") {\n identity = await findIdentity(\"Mac Developer\", qualifier, keychainFile)\n if (identity != null) {\n log.warn(\"Mac Developer is used to sign app — it is only for development and testing, not for production\")\n }\n }\n\n const noIdentity = !config.sign && identity == null\n if (qualifier === \"-\") {\n const { Identity: IdentityClass } = await dynamicImport<{ Identity: new (name: string, hash?: string) => Identity }>(\"@electron/osx-sign/dist/cjs/util-identities\")\n identity = new IdentityClass(\"-\", undefined)\n } else if (noIdentity && fallBackToAdhoc) {\n log.warn(null, \"falling back to ad-hoc signature for macOS application code signing\")\n const { Identity: IdentityClass } = await dynamicImport<{ Identity: new (name: string, hash?: string) => Identity }>(\"@electron/osx-sign/dist/cjs/util-identities\")\n identity = new IdentityClass(\"-\", undefined)\n } else if (noIdentity) {\n await reportError(isMas, certificateTypes, qualifier, keychainFile, this.packager.forceCodeSigning)\n return null\n }\n }\n\n return identity\n }\n\n async buildSignOptions(\n appPath: string,\n identity: Identity,\n type: SigningDistributionType,\n isMas: boolean,\n config: MacConfiguration | MasConfiguration,\n keychainFile: string | Nullish,\n arch: Arch\n ): Promise<SignOptions> {\n let filter = config.signIgnore\n if (Array.isArray(filter)) {\n if (filter.length == 0) {\n filter = null\n }\n } else if (filter != null) {\n filter = filter.length === 0 ? null : [filter]\n }\n\n const filterRe =\n filter == null\n ? null\n : filter.map(it => {\n try {\n return new RegExp(it)\n } catch (e: any) {\n throw new InvalidConfigurationError(`Invalid regex filter pattern: ${it}. ${e.message}`)\n }\n })\n\n let binaries = config.binaries || undefined\n if (binaries) {\n // Accept absolute paths for external binaries, else resolve relative paths from the artifact's app Contents path.\n binaries = (\n await Promise.all(\n binaries.flatMap(async destination => {\n const expandedDestination = this.packager.expandArch(destination, arch)\n return await Promise.all(\n expandedDestination.map(async d => {\n if (await statOrNull(d)) {\n return d\n }\n return path.resolve(appPath, d)\n })\n )\n })\n )\n ).flat()\n log.info({ binaries, arch: arch == null ? null : Arch[arch] }, \"signing additional user-defined binaries for arch\")\n }\n\n const signOptions: SignOptions = {\n identityValidation: false,\n // https://github.com/electron-userland/electron-builder/issues/1699\n // kext are signed by the chipset manufacturers. You need a special certificate (only available on request) from Apple to be able to sign kext.\n ignore: (file: string) => {\n if (filterRe != null) {\n for (const regExp of filterRe) {\n if (regExp.test(file)) {\n return true\n }\n }\n }\n return (\n file.endsWith(\".kext\") ||\n file.startsWith(\"/Contents/PlugIns\", appPath.length) ||\n file.includes(\"/node_modules/puppeteer/.local-chromium\") ||\n file.includes(\"/node_modules/playwright-firefox/.local-browsers\") ||\n file.includes(\"/node_modules/playwright/.local-browsers\")\n )\n\n /* Those are browser automating modules, browser (chromium, nightly) cannot be signed\n https://github.com/electron-userland/electron-builder/issues/2010\n https://github.com/electron-userland/electron-builder/issues/5383\n */\n },\n identity: identity ? identity.hash || identity.name : undefined,\n type,\n platform: isMas ? \"mas\" : \"darwin\",\n version: this.packager.config.electronVersion || undefined,\n app: appPath,\n keychain: keychainFile || undefined,\n binaries,\n // https://github.com/electron-userland/electron-builder/issues/1480\n strictVerify: config.strictVerify,\n preAutoEntitlements: config.preAutoEntitlements,\n optionsForFile: await this.getOptionsForFile(appPath, isMas, config),\n provisioningProfile: config.provisioningProfile || undefined,\n }\n\n return signOptions\n }\n\n async createMasInstaller(appPath: string, outDir: string, masOptions: MasConfiguration, keychainFile: string | Nullish, isDevelopment: boolean, arch: Arch): Promise<void> {\n const certType = isDevelopment ? \"Mac Developer\" : \"3rd Party Mac Developer Installer\"\n const masInstallerIdentity = await findIdentity(certType, masOptions.identity, keychainFile)\n\n if (masInstallerIdentity == null) {\n throw new InvalidConfigurationError(`Cannot find valid \"${certType}\" identity to sign MAS installer, please see https://electron.build/code-signing`)\n }\n\n MacTargetHelper.assertSafePathForCommandUsage(outDir, \"output directory\")\n\n // mas uploaded to AppStore, so, use \"-\" instead of space for name\n // path.basename prevents path traversal if a crafted artifactName contains \"../\"\n const artifactName = path.basename(this.packager.expandArtifactNamePattern(masOptions, \"pkg\", arch))\n MacTargetHelper.assertSafePathForCommandUsage(artifactName, \"artifact name\")\n const artifactPath = path.resolve(outDir, artifactName)\n await this.packager.doFlat(appPath, artifactPath, masInstallerIdentity, keychainFile)\n await this.packager.info.emitArtifactBuildCompleted({\n file: artifactPath,\n target: null,\n arch: Arch.x64,\n safeArtifactName: this.packager.computeSafeArtifactName(artifactName, \"pkg\", arch, true, this.packager.platformSpecificBuildOptions.defaultArch),\n packager: this.packager,\n })\n }\n\n async getOptionsForFile(appPath: string, isMas: boolean, customSignOptions: MacConfiguration | MasConfiguration): Promise<(filePath: string) => PerFileSignOptions> {\n const resourceList = await this.packager.resourceList\n const entitlementsSuffix = isMas ? \"mas\" : \"mac\"\n\n const getEntitlements = (filePath: string) => {\n if (filePath === appPath) {\n if (customSignOptions.entitlements) {\n return customSignOptions.entitlements\n }\n const p = `entitlements.${entitlementsSuffix}.plist`\n if (resourceList.includes(p)) {\n return path.join(this.packager.info.buildResourcesDir, p)\n } else {\n return getTemplatePath(\"entitlements.mac.plist\")\n }\n }\n\n if (filePath.includes(\"Library/LoginItems\")) {\n return customSignOptions.entitlementsLoginHelper\n }\n\n if (customSignOptions.entitlementsInherit) {\n return customSignOptions.entitlementsInherit\n }\n const p = `entitlements.${entitlementsSuffix}.inherit.plist`\n if (resourceList.includes(p)) {\n return path.join(this.packager.info.buildResourcesDir, p)\n } else {\n return getTemplatePath(\"entitlements.mac.plist\")\n }\n }\n\n const requirements =\n isMas || this.packager.platformSpecificBuildOptions.requirements == null\n ? undefined\n : await this.packager.getResource(this.packager.platformSpecificBuildOptions.requirements)\n\n // harden by default for mac builds. Only harden mas builds if explicitly true (backward compatibility)\n const hardenedRuntime = isMas ? customSignOptions.hardenedRuntime === true : customSignOptions.hardenedRuntime !== false\n\n return (filePath: string): PerFileSignOptions => {\n const entitlements = getEntitlements(filePath)\n return {\n entitlements: entitlements || undefined,\n hardenedRuntime: hardenedRuntime ?? undefined,\n timestamp: customSignOptions.timestamp || undefined,\n requirements: requirements || undefined,\n additionalArguments: customSignOptions.additionalArguments || [],\n }\n }\n }\n\n static getCertificateTypes(isMas: boolean, isDevelopment: boolean): CertType[] {\n if (isDevelopment) {\n return isMas ? [\"Mac Developer\", \"Apple Development\"] : [\"Mac Developer\", \"Developer ID Application\"]\n }\n return isMas ? [\"Apple Distribution\", \"3rd Party Mac Developer Application\"] : [\"Developer ID Application\"]\n }\n\n static isMasTarget(targetName: string): boolean {\n return targetName === \"mas\" || targetName === \"mas-dev\"\n }\n\n static getPlatformTypeFromTarget(targetName: string): PlatformType {\n if (targetName === \"mas\") return \"mas\"\n if (targetName === \"mas-dev\") return \"mas-dev\"\n return \"mac\"\n }\n\n static assertSafePathForCommandUsage(pathValue: string, description: string): void {\n if (/[\\0\\r\\n\"'`$;&|<>]/.test(pathValue)) {\n throw new InvalidConfigurationError(`Invalid ${description}: contains unsupported shell-special characters`)\n }\n }\n\n static getNotarizeOptions(appPath: string): NotarizeOptionsNotaryTool | undefined {\n const tool = \"notarytool\"\n const teamId = process.env.APPLE_TEAM_ID\n const appleId = process.env.APPLE_ID\n const appleIdPassword = process.env.APPLE_APP_SPECIFIC_PASSWORD\n\n if (appleId || appleIdPassword) {\n if (!appleId) {\n throw new InvalidConfigurationError(`APPLE_ID env var needs to be set`)\n }\n if (!appleIdPassword) {\n throw new InvalidConfigurationError(`APPLE_APP_SPECIFIC_PASSWORD env var needs to be set`)\n }\n if (!teamId) {\n throw new InvalidConfigurationError(`APPLE_TEAM_ID env var needs to be set`)\n }\n return { tool, appPath, appleId, appleIdPassword, teamId }\n }\n\n const appleApiKey = process.env.APPLE_API_KEY\n const appleApiKeyId = process.env.APPLE_API_KEY_ID\n const appleApiIssuer = process.env.APPLE_API_ISSUER\n if (appleApiKey || appleApiKeyId || appleApiIssuer) {\n if (!appleApiKey || !appleApiKeyId || !appleApiIssuer) {\n throw new InvalidConfigurationError(`Env vars APPLE_API_KEY, APPLE_API_KEY_ID and APPLE_API_ISSUER need to be set`)\n }\n return { tool, appPath, appleApiKey, appleApiKeyId, appleApiIssuer }\n }\n\n const keychain = process.env.APPLE_KEYCHAIN\n const keychainProfile = process.env.APPLE_KEYCHAIN_PROFILE\n if (keychainProfile) {\n let args: NotaryToolKeychainCredentials = { keychainProfile }\n if (keychain) {\n args = { ...args, keychain }\n }\n return { tool, appPath, ...args }\n }\n\n return undefined\n }\n\n async notarizeIfProvided(appPath: string): Promise<void> {\n const notarizeOptions = this.packager.platformSpecificBuildOptions.notarize\n if (notarizeOptions === false) {\n log.info({ reason: \"`notarize` options were set explicitly `false`\" }, \"skipped macOS notarization\")\n return\n }\n const options = MacTargetHelper.getNotarizeOptions(appPath)\n if (!options) {\n log.warn({ reason: \"`notarize` options were unable to be generated\" }, \"skipped macOS notarization\")\n return\n }\n const { notarize } = await dynamicImport<typeof import(\"@electron/notarize\")>(\"@electron/notarize\")\n await notarize(options)\n log.info(null, \"notarization successful\")\n }\n}\n"]}
@@ -6,30 +6,44 @@ import { AppInfo } from "./appInfo";
6
6
  import { CodeSigningInfo, CreateKeychainOptions } from "./codeSign/macCodeSign";
7
7
  import { Target } from "./core";
8
8
  import { AfterPackContext } from "./index";
9
- import { MacConfiguration } from "./options/macOptions";
9
+ import { MacTargetHelper } from "./mac/MacTargetHelper";
10
+ import { MacConfiguration, MasConfiguration } from "./options/macOptions";
10
11
  import { Packager } from "./packager";
11
12
  import { DoPackOptions, PlatformPackager } from "./platformPackager";
12
13
  export type CustomMacSignOptions = SignOptions;
13
14
  export type CustomMacSign = (configuration: CustomMacSignOptions, packager: MacPackager) => Promise<void>;
14
- export declare class MacPackager extends PlatformPackager<MacConfiguration> {
15
+ export declare class MacPackager extends PlatformPackager<MacConfiguration | MasConfiguration> {
15
16
  readonly codeSigningInfo: MemoLazy<CreateKeychainOptions | null, CodeSigningInfo>;
16
17
  private _iconPath;
18
+ private _activePackConfig;
19
+ readonly helper: MacTargetHelper;
17
20
  constructor(info: Packager);
18
21
  get defaultTarget(): Array<string>;
22
+ /**
23
+ * Get the merged configuration for a specific platform type
24
+ */
25
+ private getPlatformConfig;
19
26
  expandArch(pattern: string, arch?: Arch | null): string[];
20
27
  protected prepareAppInfo(appInfo: AppInfo): AppInfo;
21
28
  getIconPath(): Promise<string | null>;
22
29
  createTargets(targets: Array<string>, mapper: (name: string, factory: (outDir: string) => Target) => void): void;
23
30
  protected doPack(config: DoPackOptions<MacConfiguration>): Promise<any>;
31
+ /**
32
+ * Handle universal build packing
33
+ */
34
+ private doUniversalPack;
24
35
  pack(outDir: string, arch: Arch, targets: Array<Target>, taskManager: AsyncTaskManager): Promise<void>;
36
+ private packMasTargets;
37
+ private packMacTargets;
38
+ private signMas;
39
+ /**
40
+ * Main signing method with platform awareness
41
+ */
25
42
  private sign;
26
- private getOptionsForFile;
27
- protected doSign(opts: SignOptions, customSignOptions: MacConfiguration, identity: Identity | null): Promise<void>;
28
- protected doFlat(appPath: string, outFile: string, identity: Identity, keychain: string | Nullish): Promise<any>;
43
+ protected doSign(opts: SignOptions, customSignOptions: MacConfiguration | MasConfiguration, identity: Identity | null): Promise<void>;
44
+ doFlat(appPath: string, outFile: string, identity: Identity, keychain: string | Nullish): Promise<any>;
29
45
  getElectronSrcDir(dist: string): string;
30
46
  getElectronDestinationDir(appOutDir: string): string;
31
47
  applyCommonInfo(appPlist: any, contentsPath: string): Promise<void>;
32
48
  protected signApp(packContext: AfterPackContext, isAsar: boolean): Promise<boolean>;
33
- notarizeIfProvided(appPath: string): Promise<void>;
34
- private getNotarizeOptions;
35
49
  }