app-builder-lib 27.0.0-alpha.4 → 27.0.0-alpha.6

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 (240) hide show
  1. package/dist/appInfo.d.ts +1 -1
  2. package/dist/appInfo.d.ts.map +1 -1
  3. package/dist/appInfo.js +3 -3
  4. package/dist/appInfo.js.map +1 -1
  5. package/dist/codeSign/mac/macCodeSign.d.ts.map +1 -1
  6. package/dist/codeSign/mac/macCodeSign.js +3 -6
  7. package/dist/codeSign/mac/macCodeSign.js.map +1 -1
  8. package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -1
  9. package/dist/codeSign/win/signtoolBaseSignManager.js +6 -4
  10. package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -1
  11. package/dist/codeSign/win/windowsSignAzureManager.d.ts.map +1 -1
  12. package/dist/codeSign/win/windowsSignAzureManager.js +31 -21
  13. package/dist/codeSign/win/windowsSignAzureManager.js.map +1 -1
  14. package/dist/configuration.d.ts +84 -44
  15. package/dist/configuration.d.ts.map +1 -1
  16. package/dist/configuration.js +11 -1
  17. package/dist/configuration.js.map +1 -1
  18. package/dist/electron/ElectronFramework.d.ts +2 -1
  19. package/dist/electron/ElectronFramework.d.ts.map +1 -1
  20. package/dist/electron/ElectronFramework.js +32 -28
  21. package/dist/electron/ElectronFramework.js.map +1 -1
  22. package/dist/electron/electronArchSupport.d.ts +12 -0
  23. package/dist/electron/electronArchSupport.d.ts.map +1 -0
  24. package/dist/electron/electronArchSupport.js +58 -0
  25. package/dist/electron/electronArchSupport.js.map +1 -0
  26. package/dist/electron/electronVersion.d.ts.map +1 -1
  27. package/dist/electron/electronVersion.js +1 -11
  28. package/dist/electron/electronVersion.js.map +1 -1
  29. package/dist/electron/mac/electronMac.js +12 -21
  30. package/dist/electron/mac/electronMac.js.map +1 -1
  31. package/dist/electron/mac/electronMacUtils.d.ts +24 -0
  32. package/dist/electron/mac/electronMacUtils.d.ts.map +1 -0
  33. package/dist/electron/mac/electronMacUtils.js +42 -0
  34. package/dist/electron/mac/electronMacUtils.js.map +1 -0
  35. package/dist/fileMatcher.d.ts +27 -2
  36. package/dist/fileMatcher.d.ts.map +1 -1
  37. package/dist/fileMatcher.js +204 -16
  38. package/dist/fileMatcher.js.map +1 -1
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/indexInternal.d.ts +8 -5
  43. package/dist/indexInternal.d.ts.map +1 -1
  44. package/dist/indexInternal.js +8 -4
  45. package/dist/indexInternal.js.map +1 -1
  46. package/dist/macPackager.d.ts.map +1 -1
  47. package/dist/macPackager.js +15 -3
  48. package/dist/macPackager.js.map +1 -1
  49. package/dist/node-module-collector/moduleManager.d.ts +3 -1
  50. package/dist/node-module-collector/moduleManager.d.ts.map +1 -1
  51. package/dist/node-module-collector/moduleManager.js +9 -1
  52. package/dist/node-module-collector/moduleManager.js.map +1 -1
  53. package/dist/node-module-collector/nodeModulesCollector.d.ts +17 -1
  54. package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
  55. package/dist/node-module-collector/nodeModulesCollector.js +67 -1
  56. package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
  57. package/dist/node-module-collector/pnpmNodeModulesCollector.js +5 -5
  58. package/dist/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  59. package/dist/node-module-collector/types.d.ts +2 -0
  60. package/dist/node-module-collector/types.d.ts.map +1 -1
  61. package/dist/node-module-collector/types.js.map +1 -1
  62. package/dist/options/MsixOptions.d.ts +126 -0
  63. package/dist/options/MsixOptions.d.ts.map +1 -0
  64. package/dist/options/MsixOptions.js +2 -0
  65. package/dist/options/MsixOptions.js.map +1 -0
  66. package/dist/options/PlatformSpecificBuildOptions.d.ts +0 -6
  67. package/dist/options/PlatformSpecificBuildOptions.d.ts.map +1 -1
  68. package/dist/options/PlatformSpecificBuildOptions.js.map +1 -1
  69. package/dist/options/SnapOptions.d.ts +15 -13
  70. package/dist/options/SnapOptions.d.ts.map +1 -1
  71. package/dist/options/SnapOptions.js.map +1 -1
  72. package/dist/options/macOptions.d.ts +4 -4
  73. package/dist/options/macOptions.d.ts.map +1 -1
  74. package/dist/options/macOptions.js.map +1 -1
  75. package/dist/options/winOptions.d.ts +166 -36
  76. package/dist/options/winOptions.d.ts.map +1 -1
  77. package/dist/options/winOptions.js.map +1 -1
  78. package/dist/packager.d.ts +2 -0
  79. package/dist/packager.d.ts.map +1 -1
  80. package/dist/packager.js +26 -21
  81. package/dist/packager.js.map +1 -1
  82. package/dist/platformPackager.d.ts +2 -0
  83. package/dist/platformPackager.d.ts.map +1 -1
  84. package/dist/platformPackager.js +6 -0
  85. package/dist/platformPackager.js.map +1 -1
  86. package/dist/publish/PublishManager.d.ts +1 -0
  87. package/dist/publish/PublishManager.d.ts.map +1 -1
  88. package/dist/publish/PublishManager.js +20 -6
  89. package/dist/publish/PublishManager.js.map +1 -1
  90. package/dist/publish/updateInfoBuilder.d.ts.map +1 -1
  91. package/dist/publish/updateInfoBuilder.js +20 -22
  92. package/dist/publish/updateInfoBuilder.js.map +1 -1
  93. package/dist/targets/archive.d.ts +11 -0
  94. package/dist/targets/archive.d.ts.map +1 -1
  95. package/dist/targets/archive.js +40 -22
  96. package/dist/targets/archive.js.map +1 -1
  97. package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
  98. package/dist/targets/linux/FpmTarget.js +3 -3
  99. package/dist/targets/linux/FpmTarget.js.map +1 -1
  100. package/dist/targets/linux/appimage/AppImageTarget.d.ts.map +1 -1
  101. package/dist/targets/linux/appimage/AppImageTarget.js +5 -6
  102. package/dist/targets/linux/appimage/AppImageTarget.js.map +1 -1
  103. package/dist/targets/linux/snap/SnapTarget.d.ts +1 -1
  104. package/dist/targets/linux/snap/SnapTarget.d.ts.map +1 -1
  105. package/dist/targets/linux/snap/SnapTarget.js +23 -1
  106. package/dist/targets/linux/snap/SnapTarget.js.map +1 -1
  107. package/dist/targets/linux/snap/core24.d.ts +1 -1
  108. package/dist/targets/linux/snap/core24.d.ts.map +1 -1
  109. package/dist/targets/linux/snap/core24.js +3 -2
  110. package/dist/targets/linux/snap/core24.js.map +1 -1
  111. package/dist/targets/linux/snap/coreCustom.d.ts +1 -1
  112. package/dist/targets/linux/snap/coreCustom.d.ts.map +1 -1
  113. package/dist/targets/linux/snap/coreCustom.js +2 -2
  114. package/dist/targets/linux/snap/coreCustom.js.map +1 -1
  115. package/dist/targets/linux/snap/coreLegacy.d.ts +1 -1
  116. package/dist/targets/linux/snap/coreLegacy.d.ts.map +1 -1
  117. package/dist/targets/linux/snap/coreLegacy.js +2 -1
  118. package/dist/targets/linux/snap/coreLegacy.js.map +1 -1
  119. package/dist/targets/linux/snap/snapcraft.d.ts +190 -0
  120. package/dist/targets/linux/snap/snapcraft.d.ts.map +1 -0
  121. package/dist/targets/linux/snap/snapcraft.js +11 -0
  122. package/dist/targets/linux/snap/snapcraft.js.map +1 -0
  123. package/dist/targets/linux/snap/snapcraftBuilder.d.ts +7 -1
  124. package/dist/targets/linux/snap/snapcraftBuilder.d.ts.map +1 -1
  125. package/dist/targets/linux/snap/snapcraftBuilder.js +57 -20
  126. package/dist/targets/linux/snap/snapcraftBuilder.js.map +1 -1
  127. package/dist/targets/mac/MacTargetHelper.d.ts +6 -0
  128. package/dist/targets/mac/MacTargetHelper.d.ts.map +1 -1
  129. package/dist/targets/mac/MacTargetHelper.js +22 -1
  130. package/dist/targets/mac/MacTargetHelper.js.map +1 -1
  131. package/dist/targets/targetFactory.d.ts +7 -0
  132. package/dist/targets/targetFactory.d.ts.map +1 -1
  133. package/dist/targets/targetFactory.js +28 -0
  134. package/dist/targets/targetFactory.js.map +1 -1
  135. package/dist/targets/win/AppxTarget.d.ts +0 -2
  136. package/dist/targets/win/AppxTarget.d.ts.map +1 -1
  137. package/dist/targets/win/AppxTarget.js +37 -317
  138. package/dist/targets/win/AppxTarget.js.map +1 -1
  139. package/dist/targets/win/MsixTarget.d.ts +22 -0
  140. package/dist/targets/win/MsixTarget.d.ts.map +1 -0
  141. package/dist/targets/win/MsixTarget.js +214 -0
  142. package/dist/targets/win/MsixTarget.js.map +1 -0
  143. package/dist/targets/win/nsis/NsisTarget.d.ts +3 -2
  144. package/dist/targets/win/nsis/NsisTarget.d.ts.map +1 -1
  145. package/dist/targets/win/nsis/NsisTarget.js +28 -46
  146. package/dist/targets/win/nsis/NsisTarget.js.map +1 -1
  147. package/dist/targets/win/nsis/nsisScriptGenerator.d.ts.map +1 -1
  148. package/dist/targets/win/nsis/nsisScriptGenerator.js +2 -1
  149. package/dist/targets/win/nsis/nsisScriptGenerator.js.map +1 -1
  150. package/dist/targets/win/nsis/nsisUtil.d.ts +5 -2
  151. package/dist/targets/win/nsis/nsisUtil.d.ts.map +1 -1
  152. package/dist/targets/win/nsis/nsisUtil.js +46 -22
  153. package/dist/targets/win/nsis/nsisUtil.js.map +1 -1
  154. package/dist/targets/win/nsis/progId.d.ts +21 -0
  155. package/dist/targets/win/nsis/progId.d.ts.map +1 -0
  156. package/dist/targets/win/nsis/progId.js +60 -0
  157. package/dist/targets/win/nsis/progId.js.map +1 -0
  158. package/dist/targets/win/winAppUtil.d.ts +115 -0
  159. package/dist/targets/win/winAppUtil.d.ts.map +1 -0
  160. package/dist/targets/win/winAppUtil.js +407 -0
  161. package/dist/targets/win/winAppUtil.js.map +1 -0
  162. package/dist/toolsets/7zip.d.ts.map +1 -1
  163. package/dist/toolsets/7zip.js +3 -1
  164. package/dist/toolsets/7zip.js.map +1 -1
  165. package/dist/toolsets/appimage.d.ts +3 -3
  166. package/dist/toolsets/appimage.d.ts.map +1 -1
  167. package/dist/toolsets/appimage.js +9 -6
  168. package/dist/toolsets/appimage.js.map +1 -1
  169. package/dist/toolsets/custom.d.ts +1 -3
  170. package/dist/toolsets/custom.d.ts.map +1 -1
  171. package/dist/toolsets/custom.js +4 -133
  172. package/dist/toolsets/custom.js.map +1 -1
  173. package/dist/toolsets/fpm.d.ts.map +1 -1
  174. package/dist/toolsets/fpm.js +11 -5
  175. package/dist/toolsets/fpm.js.map +1 -1
  176. package/dist/toolsets/icons.d.ts.map +1 -1
  177. package/dist/toolsets/icons.js +4 -1
  178. package/dist/toolsets/icons.js.map +1 -1
  179. package/dist/toolsets/linuxToolsMac.d.ts.map +1 -1
  180. package/dist/toolsets/linuxToolsMac.js +4 -1
  181. package/dist/toolsets/linuxToolsMac.js.map +1 -1
  182. package/dist/toolsets/nsis.d.ts.map +1 -1
  183. package/dist/toolsets/nsis.js +6 -3
  184. package/dist/toolsets/nsis.js.map +1 -1
  185. package/dist/toolsets/version.d.ts +12 -0
  186. package/dist/toolsets/version.d.ts.map +1 -0
  187. package/dist/toolsets/version.js +13 -0
  188. package/dist/toolsets/version.js.map +1 -0
  189. package/dist/toolsets/winCodeSign.d.ts +20 -3
  190. package/dist/toolsets/winCodeSign.d.ts.map +1 -1
  191. package/dist/toolsets/winCodeSign.js +56 -27
  192. package/dist/toolsets/winCodeSign.js.map +1 -1
  193. package/dist/toolsets/wine.d.ts +2 -1
  194. package/dist/toolsets/wine.d.ts.map +1 -1
  195. package/dist/toolsets/wine.js +15 -13
  196. package/dist/toolsets/wine.js.map +1 -1
  197. package/dist/util/NodeModuleCopyHelper.js +3 -3
  198. package/dist/util/NodeModuleCopyHelper.js.map +1 -1
  199. package/dist/util/appFileCopier.d.ts +39 -0
  200. package/dist/util/appFileCopier.d.ts.map +1 -1
  201. package/dist/util/appFileCopier.js +88 -22
  202. package/dist/util/appFileCopier.js.map +1 -1
  203. package/dist/util/config/config.d.ts +1 -0
  204. package/dist/util/config/config.d.ts.map +1 -1
  205. package/dist/util/config/config.js +4 -1
  206. package/dist/util/config/config.js.map +1 -1
  207. package/dist/util/config/load.d.ts +2 -2
  208. package/dist/util/config/load.d.ts.map +1 -1
  209. package/dist/util/config/load.js +3 -12
  210. package/dist/util/config/load.js.map +1 -1
  211. package/dist/util/config/schemaValidator.js +1 -1
  212. package/dist/util/config/schemaValidator.js.map +1 -1
  213. package/dist/util/electronGet.d.ts +6 -3
  214. package/dist/util/electronGet.d.ts.map +1 -1
  215. package/dist/util/electronGet.js +40 -20
  216. package/dist/util/electronGet.js.map +1 -1
  217. package/dist/util/flags.d.ts +0 -2
  218. package/dist/util/flags.d.ts.map +1 -1
  219. package/dist/util/flags.js +0 -6
  220. package/dist/util/flags.js.map +1 -1
  221. package/dist/util/hash.d.ts +1 -1
  222. package/dist/util/hash.d.ts.map +1 -1
  223. package/dist/util/hash.js +1 -15
  224. package/dist/util/hash.js.map +1 -1
  225. package/dist/util/packageMetadata.js +0 -10
  226. package/dist/util/packageMetadata.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.js +1 -1
  229. package/dist/version.js.map +1 -1
  230. package/dist/vm/ParallelsVm.d.ts.map +1 -1
  231. package/dist/vm/ParallelsVm.js +18 -5
  232. package/dist/vm/ParallelsVm.js.map +1 -1
  233. package/dist/winPackager.d.ts.map +1 -1
  234. package/dist/winPackager.js +3 -0
  235. package/dist/winPackager.js.map +1 -1
  236. package/package.json +8 -8
  237. package/scheme.json +556 -133
  238. package/templates/appx/appxmanifest.xml +1 -1
  239. package/templates/msix/appxmanifest.xml +45 -0
  240. package/templates/nsis/installSection.nsh +14 -0
@@ -7,6 +7,7 @@ import { normalizeExt } from "../../platformPackager.js";
7
7
  import { savePlistFile, parsePlistFile } from "../../util/mac/plist.js";
8
8
  import { createBrandingOpts } from "../ElectronFramework.js";
9
9
  import { MacTargetHelper } from "../../targets/mac/MacTargetHelper.js";
10
+ import { assertSafeHelperName, getAvailableHelperSuffixes } from "./electronMacUtils.js";
10
11
  function doRename(basePath, oldName, newName) {
11
12
  return rename(path.join(basePath, oldName), path.join(basePath, newName));
12
13
  }
@@ -16,25 +17,6 @@ function moveHelpers(helperSuffixes, frameworksPath, appName, prefix) {
16
17
  return doRename(executableBasePath, `${prefix}${suffix}`, appName + suffix).then(() => doRename(frameworksPath, `${prefix}${suffix}.app`, `${appName}${suffix}.app`));
17
18
  }));
18
19
  }
19
- function getAvailableHelperSuffixes(helperEHPlist, helperNPPlist, helperRendererPlist, helperPluginPlist, helperGPUPlist) {
20
- const result = [" Helper"];
21
- if (helperEHPlist != null) {
22
- result.push(" Helper EH");
23
- }
24
- if (helperNPPlist != null) {
25
- result.push(" Helper NP");
26
- }
27
- if (helperRendererPlist != null) {
28
- result.push(" Helper (Renderer)");
29
- }
30
- if (helperPluginPlist != null) {
31
- result.push(" Helper (Plugin)");
32
- }
33
- if (helperGPUPlist != null) {
34
- result.push(" Helper (GPU)");
35
- }
36
- return result;
37
- }
38
20
  /** @internal */
39
21
  export async function createMacApp(packager, appOutDir, asarIntegrity, targetPlatform) {
40
22
  const appInfo = packager.appInfo;
@@ -43,6 +25,9 @@ export async function createMacApp(packager, appOutDir, asarIntegrity, targetPla
43
25
  // https://github.com/electron-userland/electron-builder/issues/6962
44
26
  const appFilename = appInfo.sanitizedProductName;
45
27
  const electronBranding = createBrandingOpts(packager.config);
28
+ // The branding name is the on-disk prefix of every helper bundle we read from the Electron dist,
29
+ // so reject values that could escape the Frameworks directory.
30
+ assertSafeHelperName(electronBranding.productName, "electronBranding.productName");
46
31
  const contentsPath = path.join(appOutDir, packager.framework.distMacOsAppName, "Contents");
47
32
  const frameworksPath = path.join(contentsPath, "Frameworks");
48
33
  const loginItemPath = path.join(contentsPath, "Library", "LoginItems");
@@ -64,7 +49,7 @@ export async function createMacApp(packager, appOutDir, asarIntegrity, targetPla
64
49
  if (appPlist == null) {
65
50
  throw new Error("corrupted Electron dist");
66
51
  }
67
- // Replace the multiple parsePlistFile calls with:
52
+ // Parse each helper plist; variants absent from the current Electron dist resolve to null.
68
53
  const helperPlist = await safeParsePlistFile(helperPlistFilename);
69
54
  const helperEHPlist = await safeParsePlistFile(helperEHPlistFilename);
70
55
  const helperNPPlist = await safeParsePlistFile(helperNPPlistFilename);
@@ -213,7 +198,13 @@ export async function createMacApp(packager, appOutDir, asarIntegrity, targetPla
213
198
  unlinkIfExists(path.join(appOutDir, "LICENSE")),
214
199
  unlinkIfExists(path.join(appOutDir, "LICENSES.chromium.html")),
215
200
  ]);
216
- await moveHelpers(getAvailableHelperSuffixes(helperEHPlist, helperNPPlist, helperRendererPlist, helperPluginPlist, helperGPUPlist), frameworksPath, appFilename, electronBranding.productName);
201
+ await moveHelpers(getAvailableHelperSuffixes({
202
+ EH: helperEHPlist != null,
203
+ NP: helperNPPlist != null,
204
+ Renderer: helperRendererPlist != null,
205
+ Plugin: helperPluginPlist != null,
206
+ GPU: helperGPUPlist != null,
207
+ }), frameworksPath, appFilename, electronBranding.productName);
217
208
  if (helperLoginPlist != null) {
218
209
  const prefix = electronBranding.productName;
219
210
  const suffix = " Login Helper";
@@ -1 +1 @@
1
- {"version":3,"file":"electronMac.js","sourceRoot":"","sources":["../../../src/electron/mac/electronMac.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, copyOrLinkFile, getPlatformIconFileName, InvalidConfigurationError, unlinkIfExists } from \"builder-util\"\nimport { rename, utimes } from \"fs/promises\"\nimport * as path from \"path\"\nimport * as fs from \"fs\"\nimport { filterCFBundleIdentifier } from \"../../appInfo.js\"\nimport { AsarIntegrity } from \"../../asar/integrity.js\"\nimport { MacPackager } from \"../../macPackager.js\"\nimport { normalizeExt } from \"../../platformPackager.js\"\nimport { savePlistFile, parsePlistFile, PlistObject, PlistValue } from \"../../util/mac/plist.js\"\nimport { createBrandingOpts } from \"../ElectronFramework.js\"\nimport { MacTargetHelper, PlatformType } from \"../../targets/mac/MacTargetHelper.js\"\n\nfunction doRename(basePath: string, oldName: string, newName: string) {\n return rename(path.join(basePath, oldName), path.join(basePath, newName))\n}\n\nfunction moveHelpers(helperSuffixes: Array<string>, frameworksPath: string, appName: string, prefix: string): Promise<any> {\n return Promise.all(\n helperSuffixes.map(suffix => {\n const executableBasePath = path.join(frameworksPath, `${prefix}${suffix}.app`, \"Contents\", \"MacOS\")\n return doRename(executableBasePath, `${prefix}${suffix}`, appName + suffix).then(() => doRename(frameworksPath, `${prefix}${suffix}.app`, `${appName}${suffix}.app`))\n })\n )\n}\n\nfunction getAvailableHelperSuffixes(\n helperEHPlist: PlistObject | null,\n helperNPPlist: PlistObject | null,\n helperRendererPlist: PlistObject | null,\n helperPluginPlist: PlistObject | null,\n helperGPUPlist: PlistObject | null\n) {\n const result = [\" Helper\"]\n if (helperEHPlist != null) {\n result.push(\" Helper EH\")\n }\n if (helperNPPlist != null) {\n result.push(\" Helper NP\")\n }\n if (helperRendererPlist != null) {\n result.push(\" Helper (Renderer)\")\n }\n if (helperPluginPlist != null) {\n result.push(\" Helper (Plugin)\")\n }\n if (helperGPUPlist != null) {\n result.push(\" Helper (GPU)\")\n }\n return result\n}\n\n/** @internal */\nexport async function createMacApp(packager: MacPackager, appOutDir: string, asarIntegrity: AsarIntegrity | null, targetPlatform: PlatformType) {\n const appInfo = packager.appInfo\n // Electon uses the application name (CFBundleName) to resolve helper apps\n // https://github.com/electron/electron/blob/main/shell/app/electron_main_delegate_mac.mm\n // https://github.com/electron-userland/electron-builder/issues/6962\n const appFilename = appInfo.sanitizedProductName\n const electronBranding = createBrandingOpts(packager.config)\n\n const contentsPath = path.join(appOutDir, packager.framework.distMacOsAppName, \"Contents\")\n const frameworksPath = path.join(contentsPath, \"Frameworks\")\n const loginItemPath = path.join(contentsPath, \"Library\", \"LoginItems\")\n\n const appPlistFilename = path.join(contentsPath, \"Info.plist\")\n const helperPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper.app`, \"Contents\", \"Info.plist\")\n const helperEHPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper EH.app`, \"Contents\", \"Info.plist\")\n const helperNPPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper NP.app`, \"Contents\", \"Info.plist\")\n const helperRendererPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (Renderer).app`, \"Contents\", \"Info.plist\")\n const helperPluginPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (Plugin).app`, \"Contents\", \"Info.plist\")\n const helperGPUPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (GPU).app`, \"Contents\", \"Info.plist\")\n const helperLoginPlistFilename = path.join(loginItemPath, `${electronBranding.productName} Login Helper.app`, \"Contents\", \"Info.plist\")\n\n const safeParsePlistFile = async (filePath: string): Promise<PlistObject | null> => {\n if (!fs.existsSync(filePath)) {\n return null\n }\n return await parsePlistFile(filePath)\n }\n\n const appPlist = (await safeParsePlistFile(appPlistFilename))!\n if (appPlist == null) {\n throw new Error(\"corrupted Electron dist\")\n }\n\n // Replace the multiple parsePlistFile calls with:\n const helperPlist = await safeParsePlistFile(helperPlistFilename)\n const helperEHPlist = await safeParsePlistFile(helperEHPlistFilename)\n const helperNPPlist = await safeParsePlistFile(helperNPPlistFilename)\n const helperRendererPlist = await safeParsePlistFile(helperRendererPlistFilename)\n const helperPluginPlist = await safeParsePlistFile(helperPluginPlistFilename)\n const helperGPUPlist = await safeParsePlistFile(helperGPUPlistFilename)\n const helperLoginPlist = await safeParsePlistFile(helperLoginPlistFilename)\n\n const buildMetadata = packager.config\n\n /**\n * Configure bundleIdentifier for the generic Electron Helper process\n *\n * This was the only Helper in Electron 5 and before. Allow users to configure\n * the bundleIdentifier for continuity.\n */\n\n // `targetPlatform` is the authoritative 3-way flavor, so the cascaded config (incl. masDev overrides) is correct for mas-dev too.\n const cascadedOptions = packager.getPlatformConfig(targetPlatform).config\n const cfBundleIdentifier = filterCFBundleIdentifier(cascadedOptions?.appId || appInfo.macBundleIdentifier)\n const helperBundleIdentifier = filterCFBundleIdentifier(cascadedOptions?.helperBundleId || `${cfBundleIdentifier}.helper`)\n\n appPlist.CFBundleIdentifier = cfBundleIdentifier\n\n await packager.applyCommonInfo(appPlist, contentsPath, cascadedOptions)\n\n // required for electron-updater proxy. Both mas and mas-dev are sandboxed App Store flavors, so skip ATS for either.\n const isMasFlavor = MacTargetHelper.isMasTarget(targetPlatform)\n if (!isMasFlavor) {\n configureLocalhostAts(appPlist)\n }\n\n if (helperPlist != null) {\n helperPlist.CFBundleExecutable = `${appFilename} Helper`\n helperPlist.CFBundleDisplayName = `${appInfo.productName} Helper`\n helperPlist.CFBundleIdentifier = helperBundleIdentifier\n helperPlist.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n /**\n * Configure bundleIdentifier for Electron 5+ Helper processes\n *\n * In Electron 6, parts of the generic Electron Helper process were split into\n * individual helper processes. Allow users to configure the bundleIdentifiers\n * for continuity, specifically because macOS keychain access relies on\n * bundleIdentifiers not changing (i.e. across versions of Electron).\n */\n\n function configureHelper(helper: any, postfix: string, userProvidedBundleIdentifier?: string | null) {\n helper.CFBundleExecutable = `${appFilename} Helper ${postfix}`\n helper.CFBundleDisplayName = `${appInfo.productName} Helper ${postfix}`\n helper.CFBundleIdentifier = userProvidedBundleIdentifier\n ? filterCFBundleIdentifier(userProvidedBundleIdentifier)\n : filterCFBundleIdentifier(`${helperBundleIdentifier}.${postfix}`)\n helper.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n if (helperRendererPlist != null) {\n configureHelper(helperRendererPlist, \"(Renderer)\", packager.platformOptions.helperRendererBundleId)\n }\n if (helperPluginPlist != null) {\n configureHelper(helperPluginPlist, \"(Plugin)\", packager.platformOptions.helperPluginBundleId)\n }\n if (helperGPUPlist != null) {\n configureHelper(helperGPUPlist, \"(GPU)\", packager.platformOptions.helperGPUBundleId)\n }\n if (helperEHPlist != null) {\n configureHelper(helperEHPlist, \"EH\", packager.platformOptions.helperEHBundleId)\n }\n if (helperNPPlist != null) {\n configureHelper(helperNPPlist, \"NP\", packager.platformOptions.helperNPBundleId)\n }\n if (helperLoginPlist != null) {\n helperLoginPlist.CFBundleExecutable = `${appFilename} Login Helper`\n helperLoginPlist.CFBundleDisplayName = `${appInfo.productName} Login Helper`\n // noinspection SpellCheckingInspection\n helperLoginPlist.CFBundleIdentifier = `${cfBundleIdentifier}.loginhelper`\n helperLoginPlist.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n const protocols = asArray(buildMetadata.protocols).concat(asArray(packager.platformOptions.protocols))\n if (protocols.length > 0) {\n appPlist.CFBundleURLTypes = protocols.map(protocol => {\n const schemes = asArray(protocol.schemes)\n if (schemes.length === 0) {\n throw new InvalidConfigurationError(`Protocol \"${protocol.name}\": must be at least one scheme specified`)\n }\n return {\n CFBundleURLName: protocol.name,\n CFBundleTypeRole: protocol.role || \"Editor\",\n CFBundleURLSchemes: schemes.slice(),\n }\n })\n }\n\n const fileAssociations = packager.fileAssociations\n if (fileAssociations.length > 0) {\n const documentTypes = await Promise.all(\n fileAssociations.map(async fileAssociation => {\n const extensions = asArray(fileAssociation.ext).map(normalizeExt)\n const customIcon = await packager.getResource(getPlatformIconFileName(fileAssociation.icon, true), `${extensions[0]}.icns`)\n let iconFile = appPlist.CFBundleIconFile\n if (customIcon != null) {\n iconFile = path.basename(customIcon)\n await copyOrLinkFile(customIcon, path.join(path.join(contentsPath, \"Resources\"), iconFile))\n }\n\n const result = {\n CFBundleTypeExtensions: extensions,\n CFBundleTypeName: fileAssociation.name || extensions[0],\n CFBundleTypeRole: fileAssociation.role || \"Editor\",\n LSHandlerRank: fileAssociation.rank || \"Default\",\n CFBundleTypeIconFile: iconFile,\n } as any\n\n if (fileAssociation.isPackage) {\n result.LSTypeIsPackage = true\n }\n return result\n })\n )\n\n // `CFBundleDocumentTypes` may be defined in `mac.extendInfo`, so we need to merge it in that case\n appPlist.CFBundleDocumentTypes = [...((appPlist.CFBundleDocumentTypes as PlistValue[]) || []), ...documentTypes]\n }\n\n const toPlistObject = (asarIntegrity: AsarIntegrity): PlistObject => {\n const result: PlistObject = {}\n for (const [filePath, headerHash] of Object.entries(asarIntegrity)) {\n result[filePath] = {\n algorithm: headerHash.algorithm,\n hash: headerHash.hash,\n }\n }\n return result\n }\n\n if (asarIntegrity != null) {\n appPlist.ElectronAsarIntegrity = toPlistObject(asarIntegrity)\n }\n\n if (helperEHPlist != null) {\n await savePlistFile(helperEHPlistFilename, helperEHPlist)\n }\n\n if (helperNPPlist != null) {\n await savePlistFile(helperNPPlistFilename, helperNPPlist)\n }\n\n if (helperRendererPlist != null) {\n await savePlistFile(helperRendererPlistFilename, helperRendererPlist)\n }\n\n if (helperPluginPlist != null) {\n await savePlistFile(helperPluginPlistFilename, helperPluginPlist)\n }\n\n if (helperGPUPlist != null) {\n await savePlistFile(helperGPUPlistFilename, helperGPUPlist)\n }\n\n if (helperLoginPlist != null) {\n await savePlistFile(helperLoginPlistFilename, helperLoginPlist)\n }\n\n await savePlistFile(appPlistFilename, appPlist)\n if (helperPlist != null) {\n await savePlistFile(helperPlistFilename, helperPlist)\n }\n\n await Promise.all([\n doRename(path.join(contentsPath, \"MacOS\"), electronBranding.productName, appPlist.CFBundleExecutable as string),\n unlinkIfExists(path.join(appOutDir, \"LICENSE\")),\n unlinkIfExists(path.join(appOutDir, \"LICENSES.chromium.html\")),\n ])\n\n await moveHelpers(\n getAvailableHelperSuffixes(helperEHPlist, helperNPPlist, helperRendererPlist, helperPluginPlist, helperGPUPlist),\n frameworksPath,\n appFilename,\n electronBranding.productName\n )\n\n if (helperLoginPlist != null) {\n const prefix = electronBranding.productName\n const suffix = \" Login Helper\"\n const executableBasePath = path.join(loginItemPath, `${prefix}${suffix}.app`, \"Contents\", \"MacOS\")\n await doRename(executableBasePath, `${prefix}${suffix}`, appFilename + suffix).then(() => doRename(loginItemPath, `${prefix}${suffix}.app`, `${appFilename}${suffix}.app`))\n }\n\n const appPath = path.join(appOutDir, `${appInfo.productFilename}.app`)\n await rename(path.dirname(contentsPath), appPath)\n // https://github.com/electron-userland/electron-builder/issues/840\n const now = Date.now() / 1000\n await utimes(appPath, now, now)\n}\n\nfunction configureLocalhostAts(appPlist: any) {\n // https://bencoding.com/2015/07/20/app-transport-security-and-localhost/\n let ats = appPlist.NSAppTransportSecurity\n if (ats == null) {\n ats = {}\n appPlist.NSAppTransportSecurity = ats\n }\n\n ats.NSAllowsLocalNetworking = true\n // https://github.com/electron-userland/electron-builder/issues/3377#issuecomment-446035814\n ats.NSAllowsArbitraryLoads = true\n\n let exceptionDomains = ats.NSExceptionDomains\n if (exceptionDomains == null) {\n exceptionDomains = {}\n ats.NSExceptionDomains = exceptionDomains\n }\n\n if (exceptionDomains.localhost == null) {\n const allowHttp = {\n NSTemporaryExceptionAllowsInsecureHTTPSLoads: false,\n NSIncludesSubdomains: false,\n NSTemporaryExceptionAllowsInsecureHTTPLoads: true,\n NSTemporaryExceptionMinimumTLSVersion: \"1.0\",\n NSTemporaryExceptionRequiresForwardSecrecy: false,\n }\n exceptionDomains.localhost = allowHttp\n exceptionDomains[\"127.0.0.1\"] = allowHttp\n }\n}\n"]}
1
+ {"version":3,"file":"electronMac.js","sourceRoot":"","sources":["../../../src/electron/mac/electronMac.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, copyOrLinkFile, getPlatformIconFileName, InvalidConfigurationError, unlinkIfExists } from \"builder-util\"\nimport { rename, utimes } from \"fs/promises\"\nimport * as path from \"path\"\nimport * as fs from \"fs\"\nimport { filterCFBundleIdentifier } from \"../../appInfo.js\"\nimport { AsarIntegrity } from \"../../asar/integrity.js\"\nimport { MacPackager } from \"../../macPackager.js\"\nimport { normalizeExt } from \"../../platformPackager.js\"\nimport { savePlistFile, parsePlistFile, PlistObject, PlistValue } from \"../../util/mac/plist.js\"\nimport { createBrandingOpts } from \"../ElectronFramework.js\"\nimport { MacTargetHelper, PlatformType } from \"../../targets/mac/MacTargetHelper.js\"\nimport { assertSafeHelperName, getAvailableHelperSuffixes } from \"./electronMacUtils.js\"\n\nfunction doRename(basePath: string, oldName: string, newName: string) {\n return rename(path.join(basePath, oldName), path.join(basePath, newName))\n}\n\nfunction moveHelpers(helperSuffixes: Array<string>, frameworksPath: string, appName: string, prefix: string): Promise<any> {\n return Promise.all(\n helperSuffixes.map(suffix => {\n const executableBasePath = path.join(frameworksPath, `${prefix}${suffix}.app`, \"Contents\", \"MacOS\")\n return doRename(executableBasePath, `${prefix}${suffix}`, appName + suffix).then(() => doRename(frameworksPath, `${prefix}${suffix}.app`, `${appName}${suffix}.app`))\n })\n )\n}\n\n/** @internal */\nexport async function createMacApp(packager: MacPackager, appOutDir: string, asarIntegrity: AsarIntegrity | null, targetPlatform: PlatformType) {\n const appInfo = packager.appInfo\n // Electon uses the application name (CFBundleName) to resolve helper apps\n // https://github.com/electron/electron/blob/main/shell/app/electron_main_delegate_mac.mm\n // https://github.com/electron-userland/electron-builder/issues/6962\n const appFilename = appInfo.sanitizedProductName\n const electronBranding = createBrandingOpts(packager.config)\n // The branding name is the on-disk prefix of every helper bundle we read from the Electron dist,\n // so reject values that could escape the Frameworks directory.\n assertSafeHelperName(electronBranding.productName, \"electronBranding.productName\")\n\n const contentsPath = path.join(appOutDir, packager.framework.distMacOsAppName, \"Contents\")\n const frameworksPath = path.join(contentsPath, \"Frameworks\")\n const loginItemPath = path.join(contentsPath, \"Library\", \"LoginItems\")\n\n const appPlistFilename = path.join(contentsPath, \"Info.plist\")\n const helperPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper.app`, \"Contents\", \"Info.plist\")\n const helperEHPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper EH.app`, \"Contents\", \"Info.plist\")\n const helperNPPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper NP.app`, \"Contents\", \"Info.plist\")\n const helperRendererPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (Renderer).app`, \"Contents\", \"Info.plist\")\n const helperPluginPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (Plugin).app`, \"Contents\", \"Info.plist\")\n const helperGPUPlistFilename = path.join(frameworksPath, `${electronBranding.productName} Helper (GPU).app`, \"Contents\", \"Info.plist\")\n const helperLoginPlistFilename = path.join(loginItemPath, `${electronBranding.productName} Login Helper.app`, \"Contents\", \"Info.plist\")\n\n const safeParsePlistFile = async (filePath: string): Promise<PlistObject | null> => {\n if (!fs.existsSync(filePath)) {\n return null\n }\n return await parsePlistFile(filePath)\n }\n\n const appPlist = (await safeParsePlistFile(appPlistFilename))!\n if (appPlist == null) {\n throw new Error(\"corrupted Electron dist\")\n }\n\n // Parse each helper plist; variants absent from the current Electron dist resolve to null.\n const helperPlist = await safeParsePlistFile(helperPlistFilename)\n const helperEHPlist = await safeParsePlistFile(helperEHPlistFilename)\n const helperNPPlist = await safeParsePlistFile(helperNPPlistFilename)\n const helperRendererPlist = await safeParsePlistFile(helperRendererPlistFilename)\n const helperPluginPlist = await safeParsePlistFile(helperPluginPlistFilename)\n const helperGPUPlist = await safeParsePlistFile(helperGPUPlistFilename)\n const helperLoginPlist = await safeParsePlistFile(helperLoginPlistFilename)\n\n const buildMetadata = packager.config\n\n /**\n * Configure bundleIdentifier for the generic Electron Helper process\n *\n * This was the only Helper in Electron 5 and before. Allow users to configure\n * the bundleIdentifier for continuity.\n */\n\n // `targetPlatform` is the authoritative 3-way flavor, so the cascaded config (incl. masDev overrides) is correct for mas-dev too.\n const cascadedOptions = packager.getPlatformConfig(targetPlatform).config\n const cfBundleIdentifier = filterCFBundleIdentifier(cascadedOptions?.appId || appInfo.macBundleIdentifier)\n const helperBundleIdentifier = filterCFBundleIdentifier(cascadedOptions?.helperBundleId || `${cfBundleIdentifier}.helper`)\n\n appPlist.CFBundleIdentifier = cfBundleIdentifier\n\n await packager.applyCommonInfo(appPlist, contentsPath, cascadedOptions)\n\n // required for electron-updater proxy. Both mas and mas-dev are sandboxed App Store flavors, so skip ATS for either.\n const isMasFlavor = MacTargetHelper.isMasTarget(targetPlatform)\n if (!isMasFlavor) {\n configureLocalhostAts(appPlist)\n }\n\n if (helperPlist != null) {\n helperPlist.CFBundleExecutable = `${appFilename} Helper`\n helperPlist.CFBundleDisplayName = `${appInfo.productName} Helper`\n helperPlist.CFBundleIdentifier = helperBundleIdentifier\n helperPlist.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n /**\n * Configure bundleIdentifier for Electron 5+ Helper processes\n *\n * In Electron 6, parts of the generic Electron Helper process were split into\n * individual helper processes. Allow users to configure the bundleIdentifiers\n * for continuity, specifically because macOS keychain access relies on\n * bundleIdentifiers not changing (i.e. across versions of Electron).\n */\n\n function configureHelper(helper: any, postfix: string, userProvidedBundleIdentifier?: string | null) {\n helper.CFBundleExecutable = `${appFilename} Helper ${postfix}`\n helper.CFBundleDisplayName = `${appInfo.productName} Helper ${postfix}`\n helper.CFBundleIdentifier = userProvidedBundleIdentifier\n ? filterCFBundleIdentifier(userProvidedBundleIdentifier)\n : filterCFBundleIdentifier(`${helperBundleIdentifier}.${postfix}`)\n helper.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n if (helperRendererPlist != null) {\n configureHelper(helperRendererPlist, \"(Renderer)\", packager.platformOptions.helperRendererBundleId)\n }\n if (helperPluginPlist != null) {\n configureHelper(helperPluginPlist, \"(Plugin)\", packager.platformOptions.helperPluginBundleId)\n }\n if (helperGPUPlist != null) {\n configureHelper(helperGPUPlist, \"(GPU)\", packager.platformOptions.helperGPUBundleId)\n }\n if (helperEHPlist != null) {\n configureHelper(helperEHPlist, \"EH\", packager.platformOptions.helperEHBundleId)\n }\n if (helperNPPlist != null) {\n configureHelper(helperNPPlist, \"NP\", packager.platformOptions.helperNPBundleId)\n }\n if (helperLoginPlist != null) {\n helperLoginPlist.CFBundleExecutable = `${appFilename} Login Helper`\n helperLoginPlist.CFBundleDisplayName = `${appInfo.productName} Login Helper`\n // noinspection SpellCheckingInspection\n helperLoginPlist.CFBundleIdentifier = `${cfBundleIdentifier}.loginhelper`\n helperLoginPlist.CFBundleVersion = appPlist.CFBundleVersion\n }\n\n const protocols = asArray(buildMetadata.protocols).concat(asArray(packager.platformOptions.protocols))\n if (protocols.length > 0) {\n appPlist.CFBundleURLTypes = protocols.map(protocol => {\n const schemes = asArray(protocol.schemes)\n if (schemes.length === 0) {\n throw new InvalidConfigurationError(`Protocol \"${protocol.name}\": must be at least one scheme specified`)\n }\n return {\n CFBundleURLName: protocol.name,\n CFBundleTypeRole: protocol.role || \"Editor\",\n CFBundleURLSchemes: schemes.slice(),\n }\n })\n }\n\n const fileAssociations = packager.fileAssociations\n if (fileAssociations.length > 0) {\n const documentTypes = await Promise.all(\n fileAssociations.map(async fileAssociation => {\n const extensions = asArray(fileAssociation.ext).map(normalizeExt)\n const customIcon = await packager.getResource(getPlatformIconFileName(fileAssociation.icon, true), `${extensions[0]}.icns`)\n let iconFile = appPlist.CFBundleIconFile\n if (customIcon != null) {\n iconFile = path.basename(customIcon)\n await copyOrLinkFile(customIcon, path.join(path.join(contentsPath, \"Resources\"), iconFile))\n }\n\n const result = {\n CFBundleTypeExtensions: extensions,\n CFBundleTypeName: fileAssociation.name || extensions[0],\n CFBundleTypeRole: fileAssociation.role || \"Editor\",\n LSHandlerRank: fileAssociation.rank || \"Default\",\n CFBundleTypeIconFile: iconFile,\n } as any\n\n if (fileAssociation.isPackage) {\n result.LSTypeIsPackage = true\n }\n return result\n })\n )\n\n // `CFBundleDocumentTypes` may be defined in `mac.extendInfo`, so we need to merge it in that case\n appPlist.CFBundleDocumentTypes = [...((appPlist.CFBundleDocumentTypes as PlistValue[]) || []), ...documentTypes]\n }\n\n const toPlistObject = (asarIntegrity: AsarIntegrity): PlistObject => {\n const result: PlistObject = {}\n for (const [filePath, headerHash] of Object.entries(asarIntegrity)) {\n result[filePath] = {\n algorithm: headerHash.algorithm,\n hash: headerHash.hash,\n }\n }\n return result\n }\n\n if (asarIntegrity != null) {\n appPlist.ElectronAsarIntegrity = toPlistObject(asarIntegrity)\n }\n\n if (helperEHPlist != null) {\n await savePlistFile(helperEHPlistFilename, helperEHPlist)\n }\n\n if (helperNPPlist != null) {\n await savePlistFile(helperNPPlistFilename, helperNPPlist)\n }\n\n if (helperRendererPlist != null) {\n await savePlistFile(helperRendererPlistFilename, helperRendererPlist)\n }\n\n if (helperPluginPlist != null) {\n await savePlistFile(helperPluginPlistFilename, helperPluginPlist)\n }\n\n if (helperGPUPlist != null) {\n await savePlistFile(helperGPUPlistFilename, helperGPUPlist)\n }\n\n if (helperLoginPlist != null) {\n await savePlistFile(helperLoginPlistFilename, helperLoginPlist)\n }\n\n await savePlistFile(appPlistFilename, appPlist)\n if (helperPlist != null) {\n await savePlistFile(helperPlistFilename, helperPlist)\n }\n\n await Promise.all([\n doRename(path.join(contentsPath, \"MacOS\"), electronBranding.productName, appPlist.CFBundleExecutable as string),\n unlinkIfExists(path.join(appOutDir, \"LICENSE\")),\n unlinkIfExists(path.join(appOutDir, \"LICENSES.chromium.html\")),\n ])\n\n await moveHelpers(\n getAvailableHelperSuffixes({\n EH: helperEHPlist != null,\n NP: helperNPPlist != null,\n Renderer: helperRendererPlist != null,\n Plugin: helperPluginPlist != null,\n GPU: helperGPUPlist != null,\n }),\n frameworksPath,\n appFilename,\n electronBranding.productName\n )\n\n if (helperLoginPlist != null) {\n const prefix = electronBranding.productName\n const suffix = \" Login Helper\"\n const executableBasePath = path.join(loginItemPath, `${prefix}${suffix}.app`, \"Contents\", \"MacOS\")\n await doRename(executableBasePath, `${prefix}${suffix}`, appFilename + suffix).then(() => doRename(loginItemPath, `${prefix}${suffix}.app`, `${appFilename}${suffix}.app`))\n }\n\n const appPath = path.join(appOutDir, `${appInfo.productFilename}.app`)\n await rename(path.dirname(contentsPath), appPath)\n // https://github.com/electron-userland/electron-builder/issues/840\n const now = Date.now() / 1000\n await utimes(appPath, now, now)\n}\n\nfunction configureLocalhostAts(appPlist: any) {\n // https://bencoding.com/2015/07/20/app-transport-security-and-localhost/\n let ats = appPlist.NSAppTransportSecurity\n if (ats == null) {\n ats = {}\n appPlist.NSAppTransportSecurity = ats\n }\n\n ats.NSAllowsLocalNetworking = true\n // https://github.com/electron-userland/electron-builder/issues/3377#issuecomment-446035814\n ats.NSAllowsArbitraryLoads = true\n\n let exceptionDomains = ats.NSExceptionDomains\n if (exceptionDomains == null) {\n exceptionDomains = {}\n ats.NSExceptionDomains = exceptionDomains\n }\n\n if (exceptionDomains.localhost == null) {\n const allowHttp = {\n NSTemporaryExceptionAllowsInsecureHTTPSLoads: false,\n NSIncludesSubdomains: false,\n NSTemporaryExceptionAllowsInsecureHTTPLoads: true,\n NSTemporaryExceptionMinimumTLSVersion: \"1.0\",\n NSTemporaryExceptionRequiresForwardSecrecy: false,\n }\n exceptionDomains.localhost = allowHttp\n exceptionDomains[\"127.0.0.1\"] = allowHttp\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * At runtime Electron locates its helper apps relative to the main application name, resolving each
3
+ * one as `${CFBundleName} Helper.app` (see `electron_main_delegate_mac.mm`). electron-builder uses
4
+ * the product name verbatim for both `CFBundleName` and the on-disk helper/app bundle names, so the
5
+ * name must be usable as a filename without modification.
6
+ *
7
+ * If the name would be altered by filename sanitization, the on-disk bundle (sanitized) and
8
+ * `CFBundleName` (verbatim) would diverge and break helper discovery. Reject such names up front with
9
+ * a clear error so the user can choose a valid name, rather than silently changing it for them.
10
+ */
11
+ export declare function assertSafeHelperName(name: string, field: string): void;
12
+ export interface AvailableHelpers {
13
+ EH?: boolean;
14
+ NP?: boolean;
15
+ Renderer?: boolean;
16
+ Plugin?: boolean;
17
+ GPU?: boolean;
18
+ }
19
+ /**
20
+ * Returns the helper bundle suffixes present in the current Electron distribution. The generic
21
+ * `" Helper"` bundle is always present; the remaining variants vary by Electron version.
22
+ */
23
+ export declare function getAvailableHelperSuffixes(present: AvailableHelpers): string[];
24
+ //# sourceMappingURL=electronMacUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electronMacUtils.d.ts","sourceRoot":"","sources":["../../../src/electron/mac/electronMacUtils.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOtE;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAkB9E"}
@@ -0,0 +1,42 @@
1
+ import { InvalidConfigurationError } from "builder-util";
2
+ import { sanitizeFileName } from "builder-util/internal";
3
+ /**
4
+ * At runtime Electron locates its helper apps relative to the main application name, resolving each
5
+ * one as `${CFBundleName} Helper.app` (see `electron_main_delegate_mac.mm`). electron-builder uses
6
+ * the product name verbatim for both `CFBundleName` and the on-disk helper/app bundle names, so the
7
+ * name must be usable as a filename without modification.
8
+ *
9
+ * If the name would be altered by filename sanitization, the on-disk bundle (sanitized) and
10
+ * `CFBundleName` (verbatim) would diverge and break helper discovery. Reject such names up front with
11
+ * a clear error so the user can choose a valid name, rather than silently changing it for them.
12
+ */
13
+ export function assertSafeHelperName(name, field) {
14
+ const sanitized = sanitizeFileName(name);
15
+ if (sanitized !== name) {
16
+ throw new InvalidConfigurationError(`${field} "${name}" is not a valid macOS app bundle name (it would be sanitized to "${sanitized}"). Set a ${field} that requires no filename sanitization.`);
17
+ }
18
+ }
19
+ /**
20
+ * Returns the helper bundle suffixes present in the current Electron distribution. The generic
21
+ * `" Helper"` bundle is always present; the remaining variants vary by Electron version.
22
+ */
23
+ export function getAvailableHelperSuffixes(present) {
24
+ const result = [" Helper"];
25
+ if (present.EH) {
26
+ result.push(" Helper EH");
27
+ }
28
+ if (present.NP) {
29
+ result.push(" Helper NP");
30
+ }
31
+ if (present.Renderer) {
32
+ result.push(" Helper (Renderer)");
33
+ }
34
+ if (present.Plugin) {
35
+ result.push(" Helper (Plugin)");
36
+ }
37
+ if (present.GPU) {
38
+ result.push(" Helper (GPU)");
39
+ }
40
+ return result;
41
+ }
42
+ //# sourceMappingURL=electronMacUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"electronMacUtils.js","sourceRoot":"","sources":["../../../src/electron/mac/electronMacUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAa;IAC9D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,yBAAyB,CACjC,GAAG,KAAK,KAAK,IAAI,qEAAqE,SAAS,aAAa,KAAK,0CAA0C,CAC5J,CAAA;IACH,CAAC;AACH,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAyB;IAClE,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1B,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { InvalidConfigurationError } from \"builder-util\"\nimport { sanitizeFileName } from \"builder-util/internal\"\n\n/**\n * At runtime Electron locates its helper apps relative to the main application name, resolving each\n * one as `${CFBundleName} Helper.app` (see `electron_main_delegate_mac.mm`). electron-builder uses\n * the product name verbatim for both `CFBundleName` and the on-disk helper/app bundle names, so the\n * name must be usable as a filename without modification.\n *\n * If the name would be altered by filename sanitization, the on-disk bundle (sanitized) and\n * `CFBundleName` (verbatim) would diverge and break helper discovery. Reject such names up front with\n * a clear error so the user can choose a valid name, rather than silently changing it for them.\n */\nexport function assertSafeHelperName(name: string, field: string): void {\n const sanitized = sanitizeFileName(name)\n if (sanitized !== name) {\n throw new InvalidConfigurationError(\n `${field} \"${name}\" is not a valid macOS app bundle name (it would be sanitized to \"${sanitized}\"). Set a ${field} that requires no filename sanitization.`\n )\n }\n}\n\nexport interface AvailableHelpers {\n EH?: boolean\n NP?: boolean\n Renderer?: boolean\n Plugin?: boolean\n GPU?: boolean\n}\n\n/**\n * Returns the helper bundle suffixes present in the current Electron distribution. The generic\n * `\" Helper\"` bundle is always present; the remaining variants vary by Electron version.\n */\nexport function getAvailableHelperSuffixes(present: AvailableHelpers): string[] {\n const result = [\" Helper\"]\n if (present.EH) {\n result.push(\" Helper EH\")\n }\n if (present.NP) {\n result.push(\" Helper NP\")\n }\n if (present.Renderer) {\n result.push(\" Helper (Renderer)\")\n }\n if (present.Plugin) {\n result.push(\" Helper (Plugin)\")\n }\n if (present.GPU) {\n result.push(\" Helper (GPU)\")\n }\n return result\n}\n"]}
@@ -2,8 +2,33 @@ import { Filter } from "builder-util";
2
2
  import { Minimatch } from "minimatch";
3
3
  import type { Configuration } from "./configuration.js";
4
4
  import { PlatformSpecificBuildOptions } from "./options/PlatformSpecificBuildOptions.js";
5
- export declare const excludedNames: string;
6
- export declare const excludedExts: string;
5
+ export declare const DEFAULT_EXCLUDED_NAMES: ReadonlyArray<string>;
6
+ export declare const DEFAULT_EXCLUDED_EXTENSIONS: ReadonlyArray<string>;
7
+ /**
8
+ * Determines which default-excluded extensions and names a user has explicitly opted back in to via
9
+ * their `files` patterns, so the corresponding defaults are not re-applied.
10
+ *
11
+ * A default is treated as opted back in only when a non-negated pattern references it concretely:
12
+ * an extension when a pattern's basename ends with `.<ext>` (e.g. `**\/*.obj`, `assets/*.{obj,gltf}`,
13
+ * `**\/*.d.ts`); a name when any path segment equals it (e.g. `**\/.github/**`, `**\/yarn.lock`).
14
+ * Broad patterns such as `**\/*` reference nothing concrete and therefore opt nothing in.
15
+ */
16
+ export declare function collectExplicitReincludes(patterns: ReadonlyArray<string>): {
17
+ extensions: Set<string>;
18
+ names: Set<string>;
19
+ };
20
+ /**
21
+ * Builds the trailing list of default ignore globs appended to the main app file matcher. Extensions
22
+ * and names the user has explicitly re-included (see {@link collectExplicitReincludes}) are omitted,
23
+ * so a `files` entry like `**\/*.obj` overrides the matching built-in exclusion.
24
+ */
25
+ export declare function getDefaultIgnoredPatterns(userPatterns: ReadonlyArray<string>, includePdb: boolean): Array<string>;
26
+ /**
27
+ * Returns the default-excluded names/extensions that the given `files` patterns opt back in, formatted
28
+ * for display (extensions as `*.<ext>`, names verbatim). Empty when nothing default-excluded is
29
+ * re-included. Used to warn that files normally kept out of the package will now be included.
30
+ */
31
+ export declare function getReincludedDefaultExclusions(patterns: ReadonlyArray<string>): Array<string>;
7
32
  export declare class FileMatcher {
8
33
  readonly macroExpander: (pattern: string) => string;
9
34
  readonly from: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fileMatcher.d.ts","sourceRoot":"","sources":["../src/fileMatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,MAAM,EAAmC,MAAM,cAAc,CAAA;AAGzH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,EAAW,4BAA4B,EAAE,MAAM,2CAA2C,CAAA;AAQjG,eAAO,MAAM,aAAa,QAK6D,CAAA;AAEvF,eAAO,MAAM,YAAY,QAGA,CAAA;AAiBzB,qBAAa,WAAW;IAapB,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;IAZrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAEhC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAO;IAE/C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;gBAGvC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAQ1C,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAOhC,UAAU,CAAC,OAAO,EAAE,MAAM;IAI1B,cAAc,CAAC,OAAO,EAAE,MAAM;IAI9B,OAAO;IAIP,kBAAkB,IAAI,OAAO;IAI7B,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IA0BvE,YAAY,IAAI,MAAM;IAMtB,QAAQ;CAGT;AAyJD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACnD,QAAQ,CAAC,kBAAkB,EAAE,4BAA4B,CAAA;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,EAClE,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CA4C3B"}
1
+ {"version":3,"file":"fileMatcher.d.ts","sourceRoot":"","sources":["../src/fileMatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,MAAM,EAAmC,MAAM,cAAc,CAAA;AAGzH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,EAAW,4BAA4B,EAAE,MAAM,2CAA2C,CAAA;AAUjG,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAoCxD,CAAA;AAGD,eAAO,MAAM,2BAA2B,EAAE,aAAa,CAAC,MAAM,CAoB7D,CAAA;AAiED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG;IAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAmB1H;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CA8BjH;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAG7F;AAiBD,qBAAa,WAAW;IAapB,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM;IAZrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAEhC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAO;IAE/C,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;gBAGvC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAQ1C,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAOhC,UAAU,CAAC,OAAO,EAAE,MAAM;IAI1B,cAAc,CAAC,OAAO,EAAE,MAAM;IAI9B,OAAO;IAIP,kBAAkB,IAAI,OAAO;IAI7B,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IA0BvE,YAAY,IAAI,MAAM;IAMtB,QAAQ;CAGT;AAyJD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACnD,QAAQ,CAAC,kBAAkB,EAAE,4BAA4B,CAAA;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAE7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,EAClE,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CA4C3B"}
@@ -6,14 +6,202 @@ import { createFilter, hasMagic } from "./util/filter.js";
6
6
  // https://github.com/electron-userland/electron-builder/issues/733
7
7
  const minimatchOptions = { dot: true };
8
8
  // noinspection SpellCheckingInspection
9
- export const excludedNames = ".git,.hg,.svn,CVS,RCS,SCCS," +
10
- "__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore," +
11
- ".idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci," +
12
- ".yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,pnpm-lock.yaml,bun.lock,bun.lockb," +
13
- "appveyor.yml,.travis.yml,circle.yml,.nyc_output,.husky,.github,electron-builder.env";
14
- export const excludedExts = "iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts," +
9
+ // File/dir names excluded by default from the packaged app. A `files` entry may opt any of these
10
+ // back in (see collectExplicitReincludes / getDefaultIgnoredPatterns).
11
+ export const DEFAULT_EXCLUDED_NAMES = [
12
+ ".git",
13
+ ".hg",
14
+ ".svn",
15
+ "CVS",
16
+ "RCS",
17
+ "SCCS",
18
+ "__pycache__",
19
+ ".DS_Store",
20
+ "thumbs.db",
21
+ ".gitignore",
22
+ ".gitkeep",
23
+ ".gitattributes",
24
+ ".npmignore",
25
+ ".idea",
26
+ ".vs",
27
+ ".flowconfig",
28
+ ".jshintrc",
29
+ ".eslintrc",
30
+ ".circleci",
31
+ ".yarn-integrity",
32
+ ".yarn-metadata.json",
33
+ "yarn-error.log",
34
+ "yarn.lock",
35
+ "package-lock.json",
36
+ "npm-debug.log",
37
+ "pnpm-lock.yaml",
38
+ "bun.lock",
39
+ "bun.lockb",
40
+ "appveyor.yml",
41
+ ".travis.yml",
42
+ "circle.yml",
43
+ ".nyc_output",
44
+ ".husky",
45
+ ".github",
46
+ "electron-builder.env",
47
+ ];
48
+ // File extensions (without leading dot) excluded by default from the packaged app.
49
+ export const DEFAULT_EXCLUDED_EXTENSIONS = [
50
+ "iml",
51
+ "hprof",
52
+ "orig",
53
+ "pyc",
54
+ "pyo",
55
+ "rbc",
56
+ "swp",
57
+ "csproj",
58
+ "sln",
59
+ "suo",
60
+ "xproj",
61
+ "cc",
62
+ "d.ts",
15
63
  // https://github.com/electron-userland/electron-builder/issues/7512
16
- "mk,a,o,obj,forge-meta";
64
+ "mk",
65
+ "a",
66
+ "o",
67
+ "obj",
68
+ "forge-meta",
69
+ ];
70
+ // Hard cap on the number of strings a single pattern may expand to. Real opt-in patterns expand to a
71
+ // handful (`{obj,gltf,glb}`); this bound makes the expansion provably finite so a pathological pattern
72
+ // (e.g. nested or many large `{...}` groups whose product is huge) degrades to "treated literally"
73
+ // rather than hanging/OOM-ing the build. minimatch performs the authoritative expansion downstream.
74
+ const MAX_BRACE_EXPANSIONS = 64;
75
+ // Expands `{a,b,c}` brace alternations in a pattern, honoring nesting. Returns the value unchanged
76
+ // when it has no braces or would expand beyond MAX_BRACE_EXPANSIONS. Used only to detect which
77
+ // extensions/names a `files` entry references — not for matching.
78
+ function expandBraces(value) {
79
+ const open = value.indexOf("{");
80
+ if (open === -1) {
81
+ return [value];
82
+ }
83
+ // Find the `}` that closes the first `{`, accounting for nested braces.
84
+ let depth = 0;
85
+ let close = -1;
86
+ for (let i = open; i < value.length; i++) {
87
+ if (value[i] === "{") {
88
+ depth++;
89
+ }
90
+ else if (value[i] === "}" && --depth === 0) {
91
+ close = i;
92
+ break;
93
+ }
94
+ }
95
+ if (close === -1) {
96
+ return [value];
97
+ }
98
+ const prefix = value.slice(0, open);
99
+ const suffix = value.slice(close + 1);
100
+ const result = [];
101
+ for (const alternative of splitTopLevel(value.slice(open + 1, close))) {
102
+ for (const expanded of expandBraces(`${prefix}${alternative}${suffix}`)) {
103
+ if (result.length >= MAX_BRACE_EXPANSIONS) {
104
+ return [value];
105
+ }
106
+ result.push(expanded);
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ // Splits on commas that are not inside a nested brace group, so `a,{b,c}` yields ["a", "{b,c}"].
112
+ function splitTopLevel(value) {
113
+ const parts = [];
114
+ let depth = 0;
115
+ let start = 0;
116
+ for (let i = 0; i < value.length; i++) {
117
+ const ch = value[i];
118
+ if (ch === "{") {
119
+ depth++;
120
+ }
121
+ else if (ch === "}") {
122
+ depth--;
123
+ }
124
+ else if (ch === "," && depth === 0) {
125
+ parts.push(value.slice(start, i));
126
+ start = i + 1;
127
+ }
128
+ }
129
+ parts.push(value.slice(start));
130
+ return parts;
131
+ }
132
+ /**
133
+ * Determines which default-excluded extensions and names a user has explicitly opted back in to via
134
+ * their `files` patterns, so the corresponding defaults are not re-applied.
135
+ *
136
+ * A default is treated as opted back in only when a non-negated pattern references it concretely:
137
+ * an extension when a pattern's basename ends with `.<ext>` (e.g. `**\/*.obj`, `assets/*.{obj,gltf}`,
138
+ * `**\/*.d.ts`); a name when any path segment equals it (e.g. `**\/.github/**`, `**\/yarn.lock`).
139
+ * Broad patterns such as `**\/*` reference nothing concrete and therefore opt nothing in.
140
+ */
141
+ export function collectExplicitReincludes(patterns) {
142
+ const segments = new Set();
143
+ const basenames = [];
144
+ for (const pattern of patterns) {
145
+ if (pattern.startsWith("!")) {
146
+ continue;
147
+ }
148
+ for (const expanded of expandBraces(pattern)) {
149
+ const parts = expanded.split("/");
150
+ for (const part of parts) {
151
+ segments.add(part);
152
+ }
153
+ basenames.push(parts[parts.length - 1]);
154
+ }
155
+ }
156
+ const extensions = new Set(DEFAULT_EXCLUDED_EXTENSIONS.filter(ext => basenames.some(name => name.endsWith(`.${ext}`))));
157
+ const names = new Set(DEFAULT_EXCLUDED_NAMES.filter(name => segments.has(name)));
158
+ return { extensions, names };
159
+ }
160
+ /**
161
+ * Builds the trailing list of default ignore globs appended to the main app file matcher. Extensions
162
+ * and names the user has explicitly re-included (see {@link collectExplicitReincludes}) are omitted,
163
+ * so a `files` entry like `**\/*.obj` overrides the matching built-in exclusion.
164
+ */
165
+ export function getDefaultIgnoredPatterns(userPatterns, includePdb) {
166
+ const reincluded = collectExplicitReincludes(userPatterns);
167
+ const extensions = DEFAULT_EXCLUDED_EXTENSIONS.filter(ext => !reincluded.extensions.has(ext));
168
+ if (!includePdb) {
169
+ extensions.push("pdb");
170
+ }
171
+ const names = DEFAULT_EXCLUDED_NAMES.filter(name => !reincluded.names.has(name));
172
+ const patterns = [];
173
+ // minimatch does not expand a single-member brace (`{x}` is matched literally), so emit a bare
174
+ // glob when only one extension/name survives the opt-in filtering.
175
+ if (extensions.length === 1) {
176
+ patterns.push(`!**/*.${extensions[0]}`);
177
+ }
178
+ else if (extensions.length > 1) {
179
+ patterns.push(`!**/*.{${extensions.join(",")}}`);
180
+ }
181
+ patterns.push("!**/._*");
182
+ patterns.push("!**/electron-builder.{yaml,yml,json,json5,toml,ts}");
183
+ if (names.length === 1) {
184
+ patterns.push(`!**/${names[0]}`);
185
+ }
186
+ else if (names.length > 1) {
187
+ patterns.push(`!**/{${names.join(",")}}`);
188
+ }
189
+ patterns.push("!.yarn{,/**/*}");
190
+ // https://github.com/electron-userland/electron-builder/issues/1969
191
+ // exclude only for app root, use .yarnclean to clean node_modules
192
+ patterns.push("!.editorconfig");
193
+ patterns.push("!.yarnrc.yml");
194
+ return patterns;
195
+ }
196
+ /**
197
+ * Returns the default-excluded names/extensions that the given `files` patterns opt back in, formatted
198
+ * for display (extensions as `*.<ext>`, names verbatim). Empty when nothing default-excluded is
199
+ * re-included. Used to warn that files normally kept out of the package will now be included.
200
+ */
201
+ export function getReincludedDefaultExclusions(patterns) {
202
+ const reincluded = collectExplicitReincludes(patterns);
203
+ return [...[...reincluded.extensions].map(ext => `*.${ext}`), ...reincluded.names];
204
+ }
17
205
  function ensureNoEndSlash(file) {
18
206
  if (path.sep !== "/") {
19
207
  file = file.replace(/\//g, path.sep);
@@ -106,6 +294,9 @@ export function getMainFileMatchers(appDir, destination, macroExpander, platform
106
294
  }
107
295
  // https://github.com/electron-userland/electron-builder/issues/1741#issuecomment-311111418 so, do not use inclusive patterns
108
296
  const patterns = matcher.patterns;
297
+ // Snapshot the user-specified patterns before the default/auto patterns are injected so a `files`
298
+ // entry can opt back in to a default-excluded extension/name (see getDefaultIgnoredPatterns).
299
+ const userSpecifiedPatterns = patterns.slice();
109
300
  const customFirstPatterns = [];
110
301
  // electron-webpack - we need to copy only package.json and node_modules from root dir (and these files are added by default), so, explicit empty array is specified
111
302
  if (!matcher.isSpecifiedAsEmptyArray && (matcher.isEmpty() || matcher.containsOnlyIgnore())) {
@@ -145,15 +336,12 @@ export function getMainFileMatchers(appDir, destination, macroExpander, platform
145
336
  }
146
337
  }
147
338
  patterns.splice(insertIndex, 0, ...customFirstPatterns);
148
- patterns.push(`!**/*.{${excludedExts}${platformPackager.config.includePdb === true ? "" : ",pdb"}}`);
149
- patterns.push("!**/._*");
150
- patterns.push("!**/electron-builder.{yaml,yml,json,json5,toml,ts}");
151
- patterns.push(`!**/{${excludedNames}}`);
152
- patterns.push("!.yarn{,/**/*}");
153
- // https://github.com/electron-userland/electron-builder/issues/1969
154
- // exclude ony for app root, use .yarnclean to clean node_modules
155
- patterns.push("!.editorconfig");
156
- patterns.push("!.yarnrc.yml");
339
+ const reincludedDefaults = getReincludedDefaultExclusions(userSpecifiedPatterns);
340
+ if (reincludedDefaults.length > 0) {
341
+ // These files are kept out of the package by default; a user `files` pattern is opting them back in.
342
+ log.warn({ files: reincludedDefaults.join(", ") }, "`files` configuration re-includes files that are excluded by default — verify this is intentional");
343
+ }
344
+ patterns.push(...getDefaultIgnoredPatterns(userSpecifiedPatterns, platformPackager.config.includePdb === true));
157
345
  const debugLogger = platformPackager.debugLogger;
158
346
  if (debugLogger.isEnabled) {
159
347
  //tslint:disable-next-line:no-invalid-template-strings