app-builder-lib 26.12.1 → 26.13.1

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 (84) 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 +4 -4
  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 +8 -7
  13. package/out/codeSign/macCodeSign.js.map +1 -1
  14. package/out/codeSign/windowsSignToolManager.d.ts +2 -0
  15. package/out/codeSign/windowsSignToolManager.js +10 -9
  16. package/out/codeSign/windowsSignToolManager.js.map +1 -1
  17. package/out/configuration.d.ts +5 -0
  18. package/out/configuration.js.map +1 -1
  19. package/out/index.d.ts +2 -1
  20. package/out/index.js +3 -1
  21. package/out/index.js.map +1 -1
  22. package/out/mac/MacTargetHelper.d.ts +3 -3
  23. package/out/mac/MacTargetHelper.js +7 -5
  24. package/out/mac/MacTargetHelper.js.map +1 -1
  25. package/out/macPackager.js +3 -2
  26. package/out/macPackager.js.map +1 -1
  27. package/out/node-module-collector/moduleManager.d.ts +15 -3
  28. package/out/node-module-collector/moduleManager.js +24 -0
  29. package/out/node-module-collector/moduleManager.js.map +1 -1
  30. package/out/node-module-collector/nodeModulesCollector.d.ts +6 -0
  31. package/out/node-module-collector/nodeModulesCollector.js +40 -21
  32. package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
  33. package/out/options/linuxOptions.d.ts +4 -3
  34. package/out/options/linuxOptions.js.map +1 -1
  35. package/out/options/macOptions.d.ts +6 -0
  36. package/out/options/macOptions.js.map +1 -1
  37. package/out/options/metadata.d.ts +2 -0
  38. package/out/options/metadata.js.map +1 -1
  39. package/out/platformPackager.d.ts +1 -1
  40. package/out/platformPackager.js +19 -17
  41. package/out/platformPackager.js.map +1 -1
  42. package/out/targets/LinuxTargetHelper.js +12 -5
  43. package/out/targets/LinuxTargetHelper.js.map +1 -1
  44. package/out/targets/appimage/AppImageTarget.d.ts +0 -2
  45. package/out/targets/appimage/AppImageTarget.js +25 -41
  46. package/out/targets/appimage/AppImageTarget.js.map +1 -1
  47. package/out/targets/appimage/appImageUtil.d.ts +3 -1
  48. package/out/targets/appimage/appImageUtil.js +33 -0
  49. package/out/targets/appimage/appImageUtil.js.map +1 -1
  50. package/out/targets/nsis/NsisTarget.js +29 -9
  51. package/out/targets/nsis/NsisTarget.js.map +1 -1
  52. package/out/targets/nsis/WebInstallerTarget.js +2 -2
  53. package/out/targets/nsis/WebInstallerTarget.js.map +1 -1
  54. package/out/targets/nsis/nsisValidation.d.ts +18 -0
  55. package/out/targets/nsis/nsisValidation.js +52 -0
  56. package/out/targets/nsis/nsisValidation.js.map +1 -0
  57. package/out/toolsets/linux.d.ts +3 -1
  58. package/out/toolsets/linux.js +49 -21
  59. package/out/toolsets/linux.js.map +1 -1
  60. package/out/util/config/config.js +6 -7
  61. package/out/util/config/config.js.map +1 -1
  62. package/out/util/config/schemaValidator.d.ts +7 -0
  63. package/out/util/config/schemaValidator.js +154 -0
  64. package/out/util/config/schemaValidator.js.map +1 -0
  65. package/out/util/dynamicImport.d.ts +1 -0
  66. package/out/util/dynamicImport.js +14 -0
  67. package/out/util/dynamicImport.js.map +1 -0
  68. package/out/util/electronGet.js +31 -1
  69. package/out/util/electronGet.js.map +1 -1
  70. package/out/util/rebuild.d.ts +1 -1
  71. package/out/util/rebuild.js.map +1 -1
  72. package/out/util/resEdit.js +16 -15
  73. package/out/util/resEdit.js.map +1 -1
  74. package/out/util/yarn.js.map +1 -1
  75. package/out/version.d.ts +1 -1
  76. package/out/version.js +1 -1
  77. package/out/version.js.map +1 -1
  78. package/out/winPackager.d.ts +1 -0
  79. package/out/winPackager.js +12 -9
  80. package/out/winPackager.js.map +1 -1
  81. package/package.json +12 -9
  82. package/scheme.json +22 -1
  83. package/templates/linux/after-remove.tpl +14 -2
  84. package/templates/nsis/include/allowOnlyOneInstallerInstance.nsh +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/toolsets/linux.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch } from \"builder-util\"\nimport * as path from \"path\"\nimport { getBinFromUrl } from \"../binDownload\"\nimport { ToolsetConfig } from \"../configuration\"\nimport { downloadBuilderToolset } from \"../util/electronGet\"\nimport { resolveEnvToolsetPath } from \"builder-util\"\n\nconst fpmChecksums = {\n \"fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z\": \"6cc6d4785875bc7d79bdf52ca146080a4c300e1d663376ae79615fb548030ede\",\n \"fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z\": \"f7cb468c5e64177124c9d3a5f400ac20ffcb411aa5aa0ea224a808ff5a2d3bbf\",\n \"fpm-1.17.0-ruby-3.4.3-linux-amd64.7z\": \"44b0ec6025c14ec137f56180e62675c0eae36233cdce53d0953d9c73ced8989f\",\n \"fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z\": \"338b50cfa7f12d745a997d1a3d000bcd0410008050fa7d8c4476a78a61c0564e\",\n \"fpm-1.17.0-ruby-3.4.3-linux-i386.7z\": \"181124e2e9856855c21229ea9096bb7006a9e3e712d133ce332597ba878cd7b6\",\n} as const\n\nexport const appimageChecksums = {\n \"0.0.0\": {\n // legacy\n },\n \"1.0.2\": {\n \"appimage-tools-runtime-20251108.tar.gz\": \"a784a8c26331ec2e945c23d6bdb14af5c9df27f5939825d84b8709c61dc81eb0\",\n },\n \"1.0.3\": {\n \"appimage-tools-runtime-20251108.tar.gz\": \"84021a78ee214ae6fd33a2d62a92ba25542dd10bc86bf117a9b2d0bba44e7665\",\n },\n} as const\n\n// no legacy toolset as macos arm64 BSD gtar/ar/lzip are not compatible with linux targets, so we always use newer toolset on macos for linux archives\nconst linuxToolsMacChecksums = {\n \"linux-tools-mac-darwin-arm64.tar.gz\": \"204e76f08364352edb28a6a4be87e8f9bd9340213865d9a0d1c664aa46fcf053\",\n \"linux-tools-mac-darwin-x86_64.tar.gz\": \"7ee26dfbd0d2a4c2c83b55a9416a30cc84876eef01c6497ca49bb016a190c726\",\n} as const\n\nexport async function getLinuxToolsPath(): Promise<string> {\n const envPath = await resolveEnvToolsetPath(\"LINUX_TOOLS_MAC_PATH\", \"directory\")\n if (envPath != null) {\n return envPath\n }\n const arch = process.arch === \"arm64\" ? \"arm64\" : \"x86_64\"\n const toolsetVersion = \"1.0.0\"\n const filename: keyof typeof linuxToolsMacChecksums = `linux-tools-mac-darwin-${arch}.tar.gz`\n return await downloadBuilderToolset({\n releaseName: `linux-tools-mac@${toolsetVersion}`,\n filenameWithExt: filename,\n checksums: {\n [filename]: linuxToolsMacChecksums[filename],\n },\n githubOrgRepo: \"electron-userland/electron-builder-binaries\",\n })\n}\n\nexport async function getLinuxToolsMacToolset() {\n const linuxToolsPath = await getLinuxToolsPath()\n const bin = (pkg: string) => path.join(linuxToolsPath, \"bin\", pkg)\n return {\n ar: bin(\"ar\"),\n lzip: bin(\"lzip\"),\n gtar: bin(\"gtar\"),\n }\n}\n\nexport async function getFpmPath() {\n const customFpmPath = await resolveEnvToolsetPath(\"CUSTOM_FPM_PATH\", \"file\")\n if (customFpmPath != null) {\n return customFpmPath\n }\n const exec = \"fpm\"\n if (process.platform === \"win32\" || process.env.USE_SYSTEM_FPM === \"true\") {\n return exec\n }\n const getKey = () => {\n if (process.platform === \"linux\") {\n if (process.arch == \"x64\") {\n return \"fpm-1.17.0-ruby-3.4.3-linux-amd64.7z\"\n } else if (process.arch === \"arm64\") {\n return \"fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z\"\n }\n return \"fpm-1.17.0-ruby-3.4.3-linux-i386.7z\"\n }\n // darwin arm64\n if (process.arch === \"arm64\") {\n return \"fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z\"\n }\n return \"fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z\"\n }\n\n const filename = getKey()\n const fpmPath = await getBinFromUrl(\"fpm@2.1.4\", filename, fpmChecksums[filename])\n return path.join(fpmPath, exec)\n}\n\nexport async function getAppImageTools(appimageToolVersion: ToolsetConfig[\"appimage\"], targetArch: Arch) {\n // nullish and 0.0.0 are both considered legacy, but utilize an upstream dependency to download runtimes, so thus, we ignore logic here\n if (appimageToolVersion == null || appimageToolVersion === \"0.0.0\") {\n throw new Error(\n \"Legacy AppImage toolset was selected, but electron-builder is attempting to download newer runtime. Please file a GH issue if you see this error. Exiting early\"\n )\n }\n\n const runtimeArch = targetArch === Arch.armv7l ? \"arm32\" : targetArch === Arch.arm64 ? \"arm64\" : targetArch === Arch.ia32 ? \"ia32\" : \"x64\"\n\n const getPaths = (artifactPath: string) => ({\n mksquashfs: path.resolve(artifactPath, \"mksquashfs\"),\n desktopFileValidate: path.resolve(artifactPath, \"desktop-file-validate\"),\n runtime: path.resolve(artifactPath, \"runtimes\", `runtime-${runtimeArch}`),\n runtimeLibraries: path.resolve(artifactPath, \"lib\", runtimeArch),\n })\n\n const filenameWithExt = \"appimage-tools-runtime-20251108.tar.gz\"\n const envPath = await resolveEnvToolsetPath(\"APPIMAGE_TOOLS_PATH\", \"directory\")\n if (envPath != null) {\n return getPaths(envPath)\n }\n const artifact = await downloadBuilderToolset({\n releaseName: `appimage@${appimageToolVersion}`,\n filenameWithExt,\n checksums: {\n [filenameWithExt]: appimageChecksums[appimageToolVersion][filenameWithExt],\n },\n githubOrgRepo: \"electron-userland/electron-builder-binaries\",\n })\n\n return getPaths(artifact)\n}\n"]}
1
+ {"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/toolsets/linux.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, exists, resolveEnvToolsetPath, use } from \"builder-util\"\nimport * as path from \"path\"\nimport { getBinFromUrl } from \"../binDownload\"\nimport { ToolsetConfig } from \"../configuration\"\nimport { downloadBuilderToolset } from \"../util/electronGet\"\n\nconst fpmChecksums = {\n \"fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z\": \"6cc6d4785875bc7d79bdf52ca146080a4c300e1d663376ae79615fb548030ede\",\n \"fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z\": \"f7cb468c5e64177124c9d3a5f400ac20ffcb411aa5aa0ea224a808ff5a2d3bbf\",\n \"fpm-1.17.0-ruby-3.4.3-linux-amd64.7z\": \"44b0ec6025c14ec137f56180e62675c0eae36233cdce53d0953d9c73ced8989f\",\n \"fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z\": \"338b50cfa7f12d745a997d1a3d000bcd0410008050fa7d8c4476a78a61c0564e\",\n \"fpm-1.17.0-ruby-3.4.3-linux-i386.7z\": \"181124e2e9856855c21229ea9096bb7006a9e3e712d133ce332597ba878cd7b6\",\n} as const\n\nexport const appimageChecksums = {\n \"0.0.0\": {\n \"appimage-12.0.1.7z\": \"d12ff7eb8f1d1ec4652ca5237a7fbdca33acc0c758045636feca62dc6ecb8ec4\",\n },\n \"1.0.2\": {\n \"appimage-tools-runtime-20251108.tar.gz\": \"a784a8c26331ec2e945c23d6bdb14af5c9df27f5939825d84b8709c61dc81eb0\",\n },\n \"1.0.3\": {\n \"appimage-tools-runtime-20251108.tar.gz\": \"84021a78ee214ae6fd33a2d62a92ba25542dd10bc86bf117a9b2d0bba44e7665\",\n },\n} as const\n\n// no legacy toolset as macos arm64 BSD gtar/ar/lzip are not compatible with linux targets, so we always use newer toolset on macos for linux archives\nconst linuxToolsMacChecksums = {\n \"linux-tools-mac-darwin-arm64.tar.gz\": \"204e76f08364352edb28a6a4be87e8f9bd9340213865d9a0d1c664aa46fcf053\",\n \"linux-tools-mac-darwin-x86_64.tar.gz\": \"7ee26dfbd0d2a4c2c83b55a9416a30cc84876eef01c6497ca49bb016a190c726\",\n} as const\n\nexport async function getLinuxToolsPath(): Promise<string> {\n const envPath = await resolveEnvToolsetPath(\"LINUX_TOOLS_MAC_PATH\", \"directory\")\n if (envPath != null) {\n return envPath\n }\n const arch = process.arch === \"arm64\" ? \"arm64\" : \"x86_64\"\n const toolsetVersion = \"1.0.0\"\n const filename: keyof typeof linuxToolsMacChecksums = `linux-tools-mac-darwin-${arch}.tar.gz`\n return await downloadBuilderToolset({\n releaseName: `linux-tools-mac@${toolsetVersion}`,\n filenameWithExt: filename,\n checksums: {\n [filename]: linuxToolsMacChecksums[filename],\n },\n githubOrgRepo: \"electron-userland/electron-builder-binaries\",\n })\n}\n\nexport async function getLinuxToolsMacToolset() {\n const linuxToolsPath = await getLinuxToolsPath()\n const bin = (pkg: string) => path.join(linuxToolsPath, \"bin\", pkg)\n return {\n ar: bin(\"ar\"),\n lzip: bin(\"lzip\"),\n gtar: bin(\"gtar\"),\n }\n}\n\nexport async function getFpmPath() {\n const customFpmPath = await resolveEnvToolsetPath(\"CUSTOM_FPM_PATH\", \"file\")\n if (customFpmPath != null) {\n return customFpmPath\n }\n const exec = \"fpm\"\n if (process.platform === \"win32\" || process.env.USE_SYSTEM_FPM === \"true\") {\n return exec\n }\n const getKey = () => {\n if (process.platform === \"linux\") {\n if (process.arch == \"x64\") {\n return \"fpm-1.17.0-ruby-3.4.3-linux-amd64.7z\"\n } else if (process.arch === \"arm64\") {\n return \"fpm-1.17.0-ruby-3.4.3-linux-arm64v8.7z\"\n }\n return \"fpm-1.17.0-ruby-3.4.3-linux-i386.7z\"\n }\n // darwin arm64\n if (process.arch === \"arm64\") {\n return \"fpm-1.17.0-ruby-3.4.3-darwin-arm64.7z\"\n }\n return \"fpm-1.17.0-ruby-3.4.3-darwin-x86_64.7z\"\n }\n\n const filename = getKey()\n const fpmPath = await getBinFromUrl(\"fpm@2.1.4\", filename, fpmChecksums[filename])\n return path.join(fpmPath, exec)\n}\n\nexport async function getAppImageTools(appimageToolVersion: ToolsetConfig[\"appimage\"], targetArch: Arch) {\n const runtimeArch = targetArch === Arch.armv7l ? \"arm32\" : targetArch === Arch.arm64 ? \"arm64\" : targetArch === Arch.ia32 ? \"ia32\" : \"x64\"\n\n // Static-runtime layout: tools at root, runtimes/ subdir, lib/{arch}/ subdir\n const getPaths = (artifactPath: string) => ({\n mksquashfs: path.resolve(artifactPath, \"mksquashfs\"),\n desktopFileValidate: path.resolve(artifactPath, \"desktop-file-validate\"),\n runtime: path.resolve(artifactPath, \"runtimes\", `runtime-${runtimeArch}`),\n runtimeLibraries: path.resolve(artifactPath, \"lib\", runtimeArch),\n })\n\n // FUSE2 layout: tools under a host-platform subdir; runtime files at root with target-arch suffix\n const getFuse2Paths = (artifactPath: string) => {\n // mksquashfs/desktop-file-validate are HOST binaries — use process.arch, not targetArch\n const hostArch = process.arch === \"arm\" ? \"arm32\" : process.arch === \"arm64\" ? \"arm64\" : process.arch === \"ia32\" ? \"ia32\" : \"x64\"\n const toolRoot = process.platform === \"linux\" ? `linux-${hostArch}` : \"darwin\"\n // Runtime files live at root; armv7l target uses \"armv7l\" filename, not the internal \"arm32\" alias\n const runtimeSuffix = targetArch === Arch.armv7l ? \"armv7l\" : runtimeArch\n // FUSE2 tree only ships lib/ia32 and lib/x64; arm targets fall back to x64 here\n // but buildLegacyFuse2AppImage only copies runtimeLibraries for x64/ia32.\n const libArch = targetArch === Arch.ia32 ? \"ia32\" : \"x64\"\n return {\n mksquashfs: path.resolve(artifactPath, toolRoot, \"mksquashfs\"),\n desktopFileValidate: path.resolve(artifactPath, toolRoot, \"desktop-file-validate\"),\n runtime: path.resolve(artifactPath, `runtime-${runtimeSuffix}`),\n runtimeLibraries: path.resolve(artifactPath, \"lib\", libArch),\n }\n }\n\n const isFuse2 = appimageToolVersion === \"0.0.0\" || appimageToolVersion == null\n\n const download = async () => {\n if (isFuse2) {\n const filenameWithExt = \"appimage-12.0.1.7z\"\n const artifactPath = await downloadBuilderToolset({\n releaseName: \"appimage-12.0.1\",\n filenameWithExt,\n checksums: { [filenameWithExt]: appimageChecksums[\"0.0.0\"][filenameWithExt] },\n githubOrgRepo: \"electron-userland/electron-builder-binaries\",\n })\n return getFuse2Paths(artifactPath)\n }\n\n const filenameWithExt = \"appimage-tools-runtime-20251108.tar.gz\"\n const artifactPath = await downloadBuilderToolset({\n releaseName: `appimage@${appimageToolVersion}`,\n filenameWithExt,\n checksums: { [filenameWithExt]: appimageChecksums[appimageToolVersion][filenameWithExt] },\n githubOrgRepo: \"electron-userland/electron-builder-binaries\",\n })\n return getPaths(artifactPath)\n }\n\n const artifact = use(await resolveEnvToolsetPath(\"APPIMAGE_TOOLS_PATH\", \"directory\"), it => (isFuse2 ? getFuse2Paths(it) : getPaths(it))) ?? (await download())\n for (const entry of Object.entries(artifact)) {\n if (!(await exists(entry[1]))) {\n throw new Error(`AppImage tool ${entry[0]} not found at path: ${entry[1]}`)\n }\n }\n return artifact\n}\n"]}
@@ -12,7 +12,7 @@ const path = require("path");
12
12
  const rectCra_1 = require("../../presets/rectCra");
13
13
  const version_1 = require("../../version");
14
14
  const load_1 = require("./load");
15
- const validateSchema = require("@develar/schema-utils");
15
+ const schemaValidator_1 = require("./schemaValidator");
16
16
  // https://github.com/electron-userland/electron-builder/issues/1847
17
17
  function mergePublish(config, configFromOptions) {
18
18
  // if config from disk doesn't have publish (or object), no need to handle, it will be simply merged by deepAssign
@@ -204,20 +204,19 @@ async function validateConfiguration(config, debugLogger) {
204
204
  if (oldConfig.appImage != null && oldConfig.appImage.systemIntegration != null) {
205
205
  throw new builder_util_1.InvalidConfigurationError(`appImage.systemIntegration is deprecated, https://github.com/TheAssassin/AppImageLauncher is used for desktop integration"`);
206
206
  }
207
- // noinspection JSUnusedGlobalSymbols
208
- validateSchema(await schemeDataPromise.value, config, {
207
+ (0, schemaValidator_1.validateSchema)(await schemeDataPromise.value, config, {
209
208
  name: `electron-builder ${version_1.PACKAGE_VERSION}`,
210
209
  postFormatter: (formattedError, error) => {
210
+ var _a, _b;
211
211
  if (debugLogger.isEnabled) {
212
212
  debugLogger.add("invalidConfig", (0, builder_util_1.safeStringifyJson)(error));
213
213
  }
214
214
  const site = "https://www.electron.build";
215
215
  let url = `${site}/configuration`;
216
216
  const targets = new Set(["mac", "dmg", "pkg", "mas", "win", "nsis", "appx", "linux", "appimage", "snap"]);
217
- const dataPath = error.dataPath == null ? null : error.dataPath;
218
- const targetPath = dataPath.startsWith(".") ? dataPath.substr(1).toLowerCase() : null;
219
- if (targetPath != null && targets.has(targetPath)) {
220
- url = `${site}/${targetPath}`;
217
+ const firstSegment = (_b = ((_a = error.instancePath) !== null && _a !== void 0 ? _a : "").split("/").filter(Boolean)[0]) === null || _b === void 0 ? void 0 : _b.toLowerCase();
218
+ if (firstSegment != null && targets.has(firstSegment)) {
219
+ url = `${site}/${firstSegment}`;
221
220
  }
222
221
  return `${formattedError}\n How to fix:
223
222
  1. Open ${url}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/util/config/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { DebugLogger, InvalidConfigurationError, log, safeStringifyJson, statOrNull } from \"builder-util\"\nimport { deepAssign, Nullish } from \"builder-util-runtime\"\nimport { readJson } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Configuration } from \"../../configuration\"\nimport { FileSet } from \"../../options/PlatformSpecificBuildOptions\"\nimport { reactCra } from \"../../presets/rectCra\"\nimport { PACKAGE_VERSION } from \"../../version\"\nimport { getConfig as _getConfig, loadParentConfig, orNullIfFileNotExist, ReadConfigRequest } from \"./load\"\nconst validateSchema = require(\"@develar/schema-utils\")\n\n// https://github.com/electron-userland/electron-builder/issues/1847\nfunction mergePublish(config: Configuration, configFromOptions: Configuration) {\n // if config from disk doesn't have publish (or object), no need to handle, it will be simply merged by deepAssign\n const publish = Array.isArray(config.publish) ? configFromOptions.publish : null\n if (publish != null) {\n delete (configFromOptions as any).publish\n }\n\n deepAssign(config, configFromOptions)\n\n if (publish == null) {\n return\n }\n\n const listOnDisk = config.publish as Array<any>\n if (listOnDisk.length === 0) {\n config.publish = publish\n } else {\n // apply to first\n deepAssign(listOnDisk[0], publish)\n }\n}\n\nexport async function getConfig(\n projectDir: string,\n configPath: string | null,\n configFromOptions: Configuration | Nullish,\n packageMetadata: Lazy<Record<string, any> | null> = new Lazy(() => orNullIfFileNotExist(readJson(path.join(projectDir, \"package.json\"))))\n): Promise<Configuration> {\n const configRequest: ReadConfigRequest = { packageKey: \"build\", configFilename: \"electron-builder\", projectDir, packageMetadata }\n const configAndEffectiveFile = await _getConfig<Configuration>(configRequest, configPath)\n const config = configAndEffectiveFile == null ? {} : configAndEffectiveFile.result\n if (configFromOptions != null) {\n mergePublish(config, configFromOptions)\n }\n\n if (configAndEffectiveFile != null) {\n log.info({ file: configAndEffectiveFile.configFile == null ? 'package.json (\"build\" field)' : configAndEffectiveFile.configFile }, \"loaded configuration\")\n }\n\n if (config.extends == null && config.extends !== null) {\n const metadata = (await packageMetadata.value) || {}\n const devDependencies = metadata.devDependencies\n const dependencies = metadata.dependencies\n if ((dependencies != null && \"react-scripts\" in dependencies) || (devDependencies != null && \"react-scripts\" in devDependencies)) {\n config.extends = \"react-cra\"\n } else if (devDependencies != null && \"electron-webpack\" in devDependencies) {\n let file = \"electron-webpack/out/electron-builder.js\"\n try {\n file = require.resolve(file)\n } catch (_ignore) {\n file = require.resolve(\"electron-webpack/electron-builder.yml\")\n }\n config.extends = `file:${file}`\n }\n }\n\n const parentConfigs = await loadParentConfigsRecursively(config.extends, async configExtend => {\n if (configExtend === \"react-cra\") {\n const result = await reactCra(projectDir)\n log.info({ preset: configExtend }, \"loaded parent configuration\")\n return result\n } else {\n const { configFile, result } = await loadParentConfig<Configuration>(configRequest, configExtend)\n log.info({ file: configFile }, \"loaded parent configuration\")\n return result\n }\n })\n\n return doMergeConfigs([...parentConfigs, config])\n}\n\nfunction asArray(value: string[] | string | Nullish): string[] {\n return Array.isArray(value) ? value : typeof value === \"string\" ? [value] : []\n}\n\nasync function loadParentConfigsRecursively(configExtends: Configuration[\"extends\"], loader: (configExtend: string) => Promise<Configuration>): Promise<Configuration[]> {\n const configs = []\n\n for (const configExtend of asArray(configExtends)) {\n const result = await loader(configExtend)\n const parentConfigs = await loadParentConfigsRecursively(result.extends, loader)\n configs.push(...parentConfigs, result)\n }\n\n return configs\n}\n\n// normalize for easy merge\nfunction normalizeFiles(configuration: Configuration, name: \"files\" | \"extraFiles\" | \"extraResources\") {\n let value = configuration[name]\n if (value == null) {\n return\n }\n\n if (!Array.isArray(value)) {\n value = [value]\n }\n\n itemLoop: for (let i = 0; i < value.length; i++) {\n let item = value[i]\n if (typeof item === \"string\") {\n // merge with previous if possible\n if (i !== 0) {\n let prevItemIndex = i - 1\n let prevItem: FileSet\n do {\n prevItem = value[prevItemIndex--] as FileSet\n } while (prevItem == null)\n\n if (prevItem.from == null && prevItem.to == null) {\n if (prevItem.filter == null) {\n prevItem.filter = [item]\n } else {\n ;(prevItem.filter as Array<string>).push(item)\n }\n value[i] = null as any\n continue itemLoop\n }\n }\n\n item = {\n filter: [item],\n }\n value[i] = item\n } else if (Array.isArray(item)) {\n throw new Error(`${name} configuration is invalid, nested array not expected for index ${i}: ${item}`)\n }\n\n // make sure that merge logic is not complex - unify different presentations\n if (item.from === \".\") {\n item.from = undefined\n }\n\n if (item.to === \".\") {\n item.to = undefined\n }\n\n if (item.filter != null && typeof item.filter === \"string\") {\n item.filter = [item.filter]\n }\n }\n\n configuration[name] = value.filter(it => it != null)\n}\n\nfunction isSimilarFileSet(value: FileSet, other: FileSet): boolean {\n return value.from === other.from && value.to === other.to\n}\n\ntype Filter = FileSet[\"filter\"]\n\nfunction mergeFilters(value: Filter, other: Filter): string[] {\n return asArray(value).concat(asArray(other))\n}\n\nfunction mergeFileSets(lists: FileSet[][]): FileSet[] {\n const result: FileSet[] = []\n\n for (const list of lists) {\n for (const item of list) {\n const existingItem = result.find(i => isSimilarFileSet(i, item))\n if (existingItem) {\n existingItem.filter = mergeFilters(item.filter, existingItem.filter)\n } else {\n result.push(item)\n }\n }\n }\n\n return result\n}\n\n/**\n * `doMergeConfigs` takes configs in the order you would pass them to\n * Object.assign as sources.\n */\nexport function doMergeConfigs(configs: Configuration[]): Configuration {\n for (const config of configs) {\n normalizeFiles(config, \"files\")\n normalizeFiles(config, \"extraFiles\")\n normalizeFiles(config, \"extraResources\")\n }\n\n const result = deepAssign(getDefaultConfig(), ...configs)\n\n // `deepAssign` prioritises latter configs, while `mergeFilesSets` prioritises\n // former configs, so we have to reverse the order, because latter configs\n // must have higher priority.\n configs = configs.slice().reverse()\n\n result.files = mergeFileSets(configs.map(config => (config.files ?? []) as FileSet[]))\n return result\n}\n\nfunction getDefaultConfig(): Configuration {\n return {\n directories: {\n output: \"dist\",\n buildResources: \"build\",\n },\n }\n}\n\nconst schemeDataPromise = new Lazy(() => readJson(path.join(__dirname, \"..\", \"..\", \"..\", \"scheme.json\")))\n\nexport async function validateConfiguration(config: Configuration, debugLogger: DebugLogger) {\n const extraMetadata = config.extraMetadata\n if (extraMetadata != null) {\n if (extraMetadata.build != null) {\n throw new InvalidConfigurationError(`--em.build is deprecated, please specify as -c\"`)\n }\n if (extraMetadata.directories != null) {\n throw new InvalidConfigurationError(`--em.directories is deprecated, please specify as -c.directories\"`)\n }\n }\n\n const oldConfig: any = config\n if (oldConfig.npmSkipBuildFromSource === false) {\n throw new InvalidConfigurationError(`npmSkipBuildFromSource is deprecated, please use buildDependenciesFromSource\"`)\n }\n if (oldConfig.appImage != null && oldConfig.appImage.systemIntegration != null) {\n throw new InvalidConfigurationError(`appImage.systemIntegration is deprecated, https://github.com/TheAssassin/AppImageLauncher is used for desktop integration\"`)\n }\n\n // noinspection JSUnusedGlobalSymbols\n validateSchema(await schemeDataPromise.value, config, {\n name: `electron-builder ${PACKAGE_VERSION}`,\n postFormatter: (formattedError: string, error: any): string => {\n if (debugLogger.isEnabled) {\n debugLogger.add(\"invalidConfig\", safeStringifyJson(error))\n }\n\n const site = \"https://www.electron.build\"\n let url = `${site}/configuration`\n const targets = new Set([\"mac\", \"dmg\", \"pkg\", \"mas\", \"win\", \"nsis\", \"appx\", \"linux\", \"appimage\", \"snap\"])\n const dataPath: string = error.dataPath == null ? null : error.dataPath\n const targetPath = dataPath.startsWith(\".\") ? dataPath.substr(1).toLowerCase() : null\n if (targetPath != null && targets.has(targetPath)) {\n url = `${site}/${targetPath}`\n }\n\n return `${formattedError}\\n How to fix:\n 1. Open ${url}\n 2. Search the option name on the page (or type in into Search to find across the docs).\n * Not found? The option was deprecated or not exists (check spelling).\n * Found? Check that the option in the appropriate place. e.g. \"title\" only in the \"dmg\", not in the root.\n`\n },\n })\n}\n\nconst DEFAULT_APP_DIR_NAMES = [\"app\", \"www\"]\n\nexport async function computeDefaultAppDirectory(projectDir: string, userAppDir: string | Nullish): Promise<string> {\n if (userAppDir != null) {\n const absolutePath = path.resolve(projectDir, userAppDir)\n const stat = await statOrNull(absolutePath)\n if (stat == null) {\n throw new InvalidConfigurationError(`Application directory ${userAppDir} doesn't exist`)\n } else if (!stat.isDirectory()) {\n throw new InvalidConfigurationError(`Application directory ${userAppDir} is not a directory`)\n } else if (projectDir === absolutePath) {\n log.warn({ appDirectory: userAppDir }, `Specified application directory equals to project dir — superfluous or wrong configuration`)\n }\n return absolutePath\n }\n\n for (const dir of DEFAULT_APP_DIR_NAMES) {\n const absolutePath = path.join(projectDir, dir)\n const packageJson = path.join(absolutePath, \"package.json\")\n const stat = await statOrNull(packageJson)\n if (stat != null && stat.isFile()) {\n return absolutePath\n }\n }\n return projectDir\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/util/config/config.ts"],"names":[],"mappings":"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","sourcesContent":["import { DebugLogger, InvalidConfigurationError, log, safeStringifyJson, statOrNull } from \"builder-util\"\nimport { deepAssign, Nullish } from \"builder-util-runtime\"\nimport { readJson } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Configuration } from \"../../configuration\"\nimport { FileSet } from \"../../options/PlatformSpecificBuildOptions\"\nimport { reactCra } from \"../../presets/rectCra\"\nimport { PACKAGE_VERSION } from \"../../version\"\nimport { getConfig as _getConfig, loadParentConfig, orNullIfFileNotExist, ReadConfigRequest } from \"./load\"\nimport { validateSchema } from \"./schemaValidator\"\n\n// https://github.com/electron-userland/electron-builder/issues/1847\nfunction mergePublish(config: Configuration, configFromOptions: Configuration) {\n // if config from disk doesn't have publish (or object), no need to handle, it will be simply merged by deepAssign\n const publish = Array.isArray(config.publish) ? configFromOptions.publish : null\n if (publish != null) {\n delete (configFromOptions as any).publish\n }\n\n deepAssign(config, configFromOptions)\n\n if (publish == null) {\n return\n }\n\n const listOnDisk = config.publish as Array<any>\n if (listOnDisk.length === 0) {\n config.publish = publish\n } else {\n // apply to first\n deepAssign(listOnDisk[0], publish)\n }\n}\n\nexport async function getConfig(\n projectDir: string,\n configPath: string | null,\n configFromOptions: Configuration | Nullish,\n packageMetadata: Lazy<Record<string, any> | null> = new Lazy(() => orNullIfFileNotExist(readJson(path.join(projectDir, \"package.json\"))))\n): Promise<Configuration> {\n const configRequest: ReadConfigRequest = { packageKey: \"build\", configFilename: \"electron-builder\", projectDir, packageMetadata }\n const configAndEffectiveFile = await _getConfig<Configuration>(configRequest, configPath)\n const config = configAndEffectiveFile == null ? {} : configAndEffectiveFile.result\n if (configFromOptions != null) {\n mergePublish(config, configFromOptions)\n }\n\n if (configAndEffectiveFile != null) {\n log.info({ file: configAndEffectiveFile.configFile == null ? 'package.json (\"build\" field)' : configAndEffectiveFile.configFile }, \"loaded configuration\")\n }\n\n if (config.extends == null && config.extends !== null) {\n const metadata = (await packageMetadata.value) || {}\n const devDependencies = metadata.devDependencies\n const dependencies = metadata.dependencies\n if ((dependencies != null && \"react-scripts\" in dependencies) || (devDependencies != null && \"react-scripts\" in devDependencies)) {\n config.extends = \"react-cra\"\n } else if (devDependencies != null && \"electron-webpack\" in devDependencies) {\n let file = \"electron-webpack/out/electron-builder.js\"\n try {\n file = require.resolve(file)\n } catch (_ignore) {\n file = require.resolve(\"electron-webpack/electron-builder.yml\")\n }\n config.extends = `file:${file}`\n }\n }\n\n const parentConfigs = await loadParentConfigsRecursively(config.extends, async configExtend => {\n if (configExtend === \"react-cra\") {\n const result = await reactCra(projectDir)\n log.info({ preset: configExtend }, \"loaded parent configuration\")\n return result\n } else {\n const { configFile, result } = await loadParentConfig<Configuration>(configRequest, configExtend)\n log.info({ file: configFile }, \"loaded parent configuration\")\n return result\n }\n })\n\n return doMergeConfigs([...parentConfigs, config])\n}\n\nfunction asArray(value: string[] | string | Nullish): string[] {\n return Array.isArray(value) ? value : typeof value === \"string\" ? [value] : []\n}\n\nasync function loadParentConfigsRecursively(configExtends: Configuration[\"extends\"], loader: (configExtend: string) => Promise<Configuration>): Promise<Configuration[]> {\n const configs = []\n\n for (const configExtend of asArray(configExtends)) {\n const result = await loader(configExtend)\n const parentConfigs = await loadParentConfigsRecursively(result.extends, loader)\n configs.push(...parentConfigs, result)\n }\n\n return configs\n}\n\n// normalize for easy merge\nfunction normalizeFiles(configuration: Configuration, name: \"files\" | \"extraFiles\" | \"extraResources\") {\n let value = configuration[name]\n if (value == null) {\n return\n }\n\n if (!Array.isArray(value)) {\n value = [value]\n }\n\n itemLoop: for (let i = 0; i < value.length; i++) {\n let item = value[i]\n if (typeof item === \"string\") {\n // merge with previous if possible\n if (i !== 0) {\n let prevItemIndex = i - 1\n let prevItem: FileSet\n do {\n prevItem = value[prevItemIndex--] as FileSet\n } while (prevItem == null)\n\n if (prevItem.from == null && prevItem.to == null) {\n if (prevItem.filter == null) {\n prevItem.filter = [item]\n } else {\n ;(prevItem.filter as Array<string>).push(item)\n }\n value[i] = null as any\n continue itemLoop\n }\n }\n\n item = {\n filter: [item],\n }\n value[i] = item\n } else if (Array.isArray(item)) {\n throw new Error(`${name} configuration is invalid, nested array not expected for index ${i}: ${item}`)\n }\n\n // make sure that merge logic is not complex - unify different presentations\n if (item.from === \".\") {\n item.from = undefined\n }\n\n if (item.to === \".\") {\n item.to = undefined\n }\n\n if (item.filter != null && typeof item.filter === \"string\") {\n item.filter = [item.filter]\n }\n }\n\n configuration[name] = value.filter(it => it != null)\n}\n\nfunction isSimilarFileSet(value: FileSet, other: FileSet): boolean {\n return value.from === other.from && value.to === other.to\n}\n\ntype Filter = FileSet[\"filter\"]\n\nfunction mergeFilters(value: Filter, other: Filter): string[] {\n return asArray(value).concat(asArray(other))\n}\n\nfunction mergeFileSets(lists: FileSet[][]): FileSet[] {\n const result: FileSet[] = []\n\n for (const list of lists) {\n for (const item of list) {\n const existingItem = result.find(i => isSimilarFileSet(i, item))\n if (existingItem) {\n existingItem.filter = mergeFilters(item.filter, existingItem.filter)\n } else {\n result.push(item)\n }\n }\n }\n\n return result\n}\n\n/**\n * `doMergeConfigs` takes configs in the order you would pass them to\n * Object.assign as sources.\n */\nexport function doMergeConfigs(configs: Configuration[]): Configuration {\n for (const config of configs) {\n normalizeFiles(config, \"files\")\n normalizeFiles(config, \"extraFiles\")\n normalizeFiles(config, \"extraResources\")\n }\n\n const result = deepAssign(getDefaultConfig(), ...configs)\n\n // `deepAssign` prioritises latter configs, while `mergeFilesSets` prioritises\n // former configs, so we have to reverse the order, because latter configs\n // must have higher priority.\n configs = configs.slice().reverse()\n\n result.files = mergeFileSets(configs.map(config => (config.files ?? []) as FileSet[]))\n return result\n}\n\nfunction getDefaultConfig(): Configuration {\n return {\n directories: {\n output: \"dist\",\n buildResources: \"build\",\n },\n }\n}\n\nconst schemeDataPromise = new Lazy(() => readJson(path.join(__dirname, \"..\", \"..\", \"..\", \"scheme.json\")))\n\nexport async function validateConfiguration(config: Configuration, debugLogger: DebugLogger) {\n const extraMetadata = config.extraMetadata\n if (extraMetadata != null) {\n if (extraMetadata.build != null) {\n throw new InvalidConfigurationError(`--em.build is deprecated, please specify as -c\"`)\n }\n if (extraMetadata.directories != null) {\n throw new InvalidConfigurationError(`--em.directories is deprecated, please specify as -c.directories\"`)\n }\n }\n\n const oldConfig: any = config\n if (oldConfig.npmSkipBuildFromSource === false) {\n throw new InvalidConfigurationError(`npmSkipBuildFromSource is deprecated, please use buildDependenciesFromSource\"`)\n }\n if (oldConfig.appImage != null && oldConfig.appImage.systemIntegration != null) {\n throw new InvalidConfigurationError(`appImage.systemIntegration is deprecated, https://github.com/TheAssassin/AppImageLauncher is used for desktop integration\"`)\n }\n\n validateSchema(await schemeDataPromise.value, config, {\n name: `electron-builder ${PACKAGE_VERSION}`,\n postFormatter: (formattedError, error): string => {\n if (debugLogger.isEnabled) {\n debugLogger.add(\"invalidConfig\", safeStringifyJson(error))\n }\n\n const site = \"https://www.electron.build\"\n let url = `${site}/configuration`\n const targets = new Set([\"mac\", \"dmg\", \"pkg\", \"mas\", \"win\", \"nsis\", \"appx\", \"linux\", \"appimage\", \"snap\"])\n const firstSegment = (error.instancePath ?? \"\").split(\"/\").filter(Boolean)[0]?.toLowerCase()\n if (firstSegment != null && targets.has(firstSegment)) {\n url = `${site}/${firstSegment}`\n }\n\n return `${formattedError}\\n How to fix:\n 1. Open ${url}\n 2. Search the option name on the page (or type in into Search to find across the docs).\n * Not found? The option was deprecated or not exists (check spelling).\n * Found? Check that the option in the appropriate place. e.g. \"title\" only in the \"dmg\", not in the root.\n`\n },\n })\n}\n\nconst DEFAULT_APP_DIR_NAMES = [\"app\", \"www\"]\n\nexport async function computeDefaultAppDirectory(projectDir: string, userAppDir: string | Nullish): Promise<string> {\n if (userAppDir != null) {\n const absolutePath = path.resolve(projectDir, userAppDir)\n const stat = await statOrNull(absolutePath)\n if (stat == null) {\n throw new InvalidConfigurationError(`Application directory ${userAppDir} doesn't exist`)\n } else if (!stat.isDirectory()) {\n throw new InvalidConfigurationError(`Application directory ${userAppDir} is not a directory`)\n } else if (projectDir === absolutePath) {\n log.warn({ appDirectory: userAppDir }, `Specified application directory equals to project dir — superfluous or wrong configuration`)\n }\n return absolutePath\n }\n\n for (const dir of DEFAULT_APP_DIR_NAMES) {\n const absolutePath = path.join(projectDir, dir)\n const packageJson = path.join(absolutePath, \"package.json\")\n const stat = await statOrNull(packageJson)\n if (stat != null && stat.isFile()) {\n return absolutePath\n }\n }\n return projectDir\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ErrorObject } from "ajv";
2
+ export type PostFormatter = (formattedError: string, error: ErrorObject) => string;
3
+ export interface ValidationConfig {
4
+ name?: string;
5
+ postFormatter?: PostFormatter;
6
+ }
7
+ export declare function validateSchema(schema: unknown, data: unknown, config?: ValidationConfig): void;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSchema = validateSchema;
4
+ const ajv_1 = require("ajv");
5
+ const ajv = new ajv_1.default({
6
+ allErrors: true,
7
+ verbose: true,
8
+ coerceTypes: true,
9
+ strict: false,
10
+ });
11
+ // Cache the compiled validator for the canonical scheme.json so it is only
12
+ // compiled once per process lifetime.
13
+ let _cachedValidate;
14
+ function validateSchema(schema, data, config = {}) {
15
+ var _a, _b;
16
+ if (_cachedValidate == null || _cachedValidate.schema !== schema) {
17
+ _cachedValidate = ajv.compile(schema);
18
+ }
19
+ const validate = _cachedValidate;
20
+ if (validate(data)) {
21
+ return;
22
+ }
23
+ const errors = (_a = validate.errors) !== null && _a !== void 0 ? _a : [];
24
+ const baseDataPath = "configuration";
25
+ const name = (_b = config.name) !== null && _b !== void 0 ? _b : "Object";
26
+ const relevant = filterRelevantErrors(errors);
27
+ const formatted = relevant.map(error => {
28
+ let msg = formatError(error, baseDataPath);
29
+ if (config.postFormatter != null) {
30
+ msg = config.postFormatter(msg, error);
31
+ }
32
+ return ` - ${indentNewlines(msg, " ")}`;
33
+ });
34
+ const header = `Invalid configuration object. ${name} has been initialized using a configuration object that does not match the API schema.`;
35
+ throw new Error(`${header}\n${formatted.join("\n")}`);
36
+ }
37
+ /**
38
+ * Filters the flat list of ajv errors to the most actionable subset.
39
+ * Composite keywords (anyOf/oneOf/if) are suppressed when more specific
40
+ * errors exist at the same or deeper paths. When all errors share the
41
+ * same instancePath and a composite parent for that path exists, the
42
+ * parent is kept instead so the user sees a single "should be one of"
43
+ * message rather than every failed branch listed separately.
44
+ */
45
+ function filterRelevantErrors(errors) {
46
+ const compositeKeywords = new Set(["anyOf", "oneOf", "if"]);
47
+ const specific = errors.filter(e => !compositeKeywords.has(e.keyword));
48
+ if (specific.length === 0) {
49
+ return errors.filter(e => compositeKeywords.has(e.keyword));
50
+ }
51
+ // Group specific errors by instancePath
52
+ const byPath = new Map();
53
+ for (const e of specific) {
54
+ const list = byPath.get(e.instancePath);
55
+ if (list != null) {
56
+ list.push(e);
57
+ }
58
+ else {
59
+ byPath.set(e.instancePath, [e]);
60
+ }
61
+ }
62
+ const result = [];
63
+ for (const [path, group] of byPath) {
64
+ // When multiple branch-failures share the same path, prefer the anyOf
65
+ // parent error (one concise "should be one of these" message).
66
+ if (group.length > 1) {
67
+ const parent = errors.find(e => e.instancePath === path && compositeKeywords.has(e.keyword));
68
+ if (parent != null) {
69
+ result.push(parent);
70
+ continue;
71
+ }
72
+ }
73
+ result.push(...group);
74
+ }
75
+ return result;
76
+ }
77
+ /** Decodes a single RFC 6901 JSON Pointer segment (`~1` → `/`, `~0` → `~`). */
78
+ function decodePointerSegment(segment) {
79
+ return segment.replace(/~1/g, "/").replace(/~0/g, "~");
80
+ }
81
+ function instancePathToLabel(instancePath, baseDataPath) {
82
+ if (!instancePath) {
83
+ return baseDataPath;
84
+ }
85
+ const segments = instancePath.split("/").filter(Boolean).map(decodePointerSegment);
86
+ return [baseDataPath, ...segments].join(".");
87
+ }
88
+ function formatError(error, baseDataPath) {
89
+ var _a;
90
+ const label = instancePathToLabel(error.instancePath, baseDataPath);
91
+ const params = error.params;
92
+ const parentSchema = error.parentSchema;
93
+ switch (error.keyword) {
94
+ case "additionalProperties":
95
+ return `${label} has an unknown property '${params.additionalProperty}'`;
96
+ case "required": {
97
+ const missingProp = String(params.missingProperty).replace(/^\./, "");
98
+ return `${label} misses the property '${missingProp}'`;
99
+ }
100
+ case "type": {
101
+ const type = params.type;
102
+ if (Array.isArray(type)) {
103
+ const typeList = type.join(" | ");
104
+ const desc = descriptionSuffix(parentSchema);
105
+ return `${label} should be:\n${typeList}${desc}`;
106
+ }
107
+ return `${label} should be a ${type}`;
108
+ }
109
+ case "enum": {
110
+ const enumVals = (_a = parentSchema === null || parentSchema === void 0 ? void 0 : parentSchema.enum) !== null && _a !== void 0 ? _a : [];
111
+ if (enumVals.length === 1) {
112
+ return `${label} should be ${JSON.stringify(enumVals[0])}`;
113
+ }
114
+ return `${label} should be one of these:\n${enumVals.map(v => JSON.stringify(v)).join(" | ")}`;
115
+ }
116
+ case "anyOf":
117
+ case "oneOf": {
118
+ const schemaText = formatSchemaType(parentSchema);
119
+ return `${label} should be one of these:\n${schemaText}`;
120
+ }
121
+ default:
122
+ return `${label} ${error.message}`;
123
+ }
124
+ }
125
+ function descriptionSuffix(schema) {
126
+ return typeof (schema === null || schema === void 0 ? void 0 : schema.description) === "string" ? `\n-> ${schema.description}` : "";
127
+ }
128
+ function formatSchemaType(schema) {
129
+ if (schema == null) {
130
+ return "";
131
+ }
132
+ if (Array.isArray(schema.type)) {
133
+ return schema.type.join(" | ");
134
+ }
135
+ if (typeof schema.type === "string") {
136
+ return schema.type;
137
+ }
138
+ if (Array.isArray(schema.anyOf)) {
139
+ return schema.anyOf
140
+ .map(s => {
141
+ if (Array.isArray(s.type)) {
142
+ return s.type.join(" | ");
143
+ }
144
+ return typeof s.type === "string" ? s.type : "";
145
+ })
146
+ .filter(Boolean)
147
+ .join(" | ");
148
+ }
149
+ return JSON.stringify(schema);
150
+ }
151
+ function indentNewlines(str, prefix) {
152
+ return str.replace(/\n(?!$)/g, `\n${prefix}`);
153
+ }
154
+ //# sourceMappingURL=schemaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaValidator.js","sourceRoot":"","sources":["../../../src/util/config/schemaValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import Ajv, { ErrorObject, ValidateFunction } from \"ajv\"\n\nexport type PostFormatter = (formattedError: string, error: ErrorObject) => string\n\nexport interface ValidationConfig {\n name?: string\n postFormatter?: PostFormatter\n}\n\nconst ajv = new Ajv({\n allErrors: true,\n verbose: true,\n coerceTypes: true,\n strict: false,\n})\n\n// Cache the compiled validator for the canonical scheme.json so it is only\n// compiled once per process lifetime.\nlet _cachedValidate: ValidateFunction | undefined\n\nexport function validateSchema(schema: unknown, data: unknown, config: ValidationConfig = {}): void {\n if (_cachedValidate == null || _cachedValidate.schema !== schema) {\n _cachedValidate = ajv.compile(schema as object)\n }\n const validate = _cachedValidate\n\n if (validate(data)) {\n return\n }\n\n const errors = validate.errors ?? []\n const baseDataPath = \"configuration\"\n const name = config.name ?? \"Object\"\n\n const relevant = filterRelevantErrors(errors)\n const formatted = relevant.map(error => {\n let msg = formatError(error, baseDataPath)\n if (config.postFormatter != null) {\n msg = config.postFormatter(msg, error)\n }\n return ` - ${indentNewlines(msg, \" \")}`\n })\n\n const header = `Invalid configuration object. ${name} has been initialized using a configuration object that does not match the API schema.`\n throw new Error(`${header}\\n${formatted.join(\"\\n\")}`)\n}\n\n/**\n * Filters the flat list of ajv errors to the most actionable subset.\n * Composite keywords (anyOf/oneOf/if) are suppressed when more specific\n * errors exist at the same or deeper paths. When all errors share the\n * same instancePath and a composite parent for that path exists, the\n * parent is kept instead so the user sees a single \"should be one of\"\n * message rather than every failed branch listed separately.\n */\nfunction filterRelevantErrors(errors: ErrorObject[]): ErrorObject[] {\n const compositeKeywords = new Set([\"anyOf\", \"oneOf\", \"if\"])\n const specific = errors.filter(e => !compositeKeywords.has(e.keyword))\n\n if (specific.length === 0) {\n return errors.filter(e => compositeKeywords.has(e.keyword))\n }\n\n // Group specific errors by instancePath\n const byPath = new Map<string, ErrorObject[]>()\n for (const e of specific) {\n const list = byPath.get(e.instancePath)\n if (list != null) {\n list.push(e)\n } else {\n byPath.set(e.instancePath, [e])\n }\n }\n\n const result: ErrorObject[] = []\n for (const [path, group] of byPath) {\n // When multiple branch-failures share the same path, prefer the anyOf\n // parent error (one concise \"should be one of these\" message).\n if (group.length > 1) {\n const parent = errors.find(e => e.instancePath === path && compositeKeywords.has(e.keyword))\n if (parent != null) {\n result.push(parent)\n continue\n }\n }\n result.push(...group)\n }\n return result\n}\n\n/** Decodes a single RFC 6901 JSON Pointer segment (`~1` → `/`, `~0` → `~`). */\nfunction decodePointerSegment(segment: string): string {\n return segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nfunction instancePathToLabel(instancePath: string, baseDataPath: string): string {\n if (!instancePath) {\n return baseDataPath\n }\n const segments = instancePath.split(\"/\").filter(Boolean).map(decodePointerSegment)\n return [baseDataPath, ...segments].join(\".\")\n}\n\nfunction formatError(error: ErrorObject, baseDataPath: string): string {\n const label = instancePathToLabel(error.instancePath, baseDataPath)\n const params = error.params as Record<string, unknown>\n const parentSchema = (error as ErrorObject & { parentSchema?: Record<string, unknown> }).parentSchema\n\n switch (error.keyword) {\n case \"additionalProperties\":\n return `${label} has an unknown property '${params.additionalProperty}'`\n\n case \"required\": {\n const missingProp = String(params.missingProperty).replace(/^\\./, \"\")\n return `${label} misses the property '${missingProp}'`\n }\n\n case \"type\": {\n const type = params.type\n if (Array.isArray(type)) {\n const typeList = (type as string[]).join(\" | \")\n const desc = descriptionSuffix(parentSchema)\n return `${label} should be:\\n${typeList}${desc}`\n }\n return `${label} should be a ${type}`\n }\n\n case \"enum\": {\n const enumVals = (parentSchema?.enum as unknown[] | undefined) ?? []\n if (enumVals.length === 1) {\n return `${label} should be ${JSON.stringify(enumVals[0])}`\n }\n return `${label} should be one of these:\\n${enumVals.map(v => JSON.stringify(v)).join(\" | \")}`\n }\n\n case \"anyOf\":\n case \"oneOf\": {\n const schemaText = formatSchemaType(parentSchema)\n return `${label} should be one of these:\\n${schemaText}`\n }\n\n default:\n return `${label} ${error.message}`\n }\n}\n\nfunction descriptionSuffix(schema: Record<string, unknown> | undefined): string {\n return typeof schema?.description === \"string\" ? `\\n-> ${schema.description}` : \"\"\n}\n\nfunction formatSchemaType(schema: Record<string, unknown> | undefined): string {\n if (schema == null) {\n return \"\"\n }\n if (Array.isArray(schema.type)) {\n return (schema.type as string[]).join(\" | \")\n }\n if (typeof schema.type === \"string\") {\n return schema.type\n }\n if (Array.isArray(schema.anyOf)) {\n return (schema.anyOf as Array<Record<string, unknown>>)\n .map(s => {\n if (Array.isArray(s.type)) {\n return (s.type as string[]).join(\" | \")\n }\n return typeof s.type === \"string\" ? s.type : \"\"\n })\n .filter(Boolean)\n .join(\" | \")\n }\n return JSON.stringify(schema)\n}\n\nfunction indentNewlines(str: string, prefix: string): string {\n return str.replace(/\\n(?!$)/g, `\\n${prefix}`)\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare function dynamicImport<T = any>(modulePath: string): Promise<T>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dynamicImport = dynamicImport;
4
+ // TypeScript's "module": "CommonJS" compiles `await import(x)` to
5
+ // `await Promise.resolve().then(() => require(x))`, which fails for ESM-only
6
+ // packages. helpers/dynamic-import.js is plain JS so TypeScript never
7
+ // transforms its native import() call — route through it instead.
8
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
9
+ const _helper = require("../../helpers/dynamic-import");
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ function dynamicImport(modulePath) {
12
+ return _helper.dynamicImport(modulePath);
13
+ }
14
+ //# sourceMappingURL=dynamicImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicImport.js","sourceRoot":"","sources":["../../src/util/dynamicImport.ts"],"names":[],"mappings":";;AAQA,sCAEC;AAVD,kEAAkE;AAClE,6EAA6E;AAC7E,sEAAsE;AACtE,kEAAkE;AAClE,iEAAiE;AACjE,MAAM,OAAO,GAAG,OAAO,CAAC,8BAA8B,CAAkD,CAAA;AAExG,8DAA8D;AAC9D,SAAgB,aAAa,CAAU,UAAkB;IACvD,OAAO,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;AAC1C,CAAC","sourcesContent":["// TypeScript's \"module\": \"CommonJS\" compiles `await import(x)` to\n// `await Promise.resolve().then(() => require(x))`, which fails for ESM-only\n// packages. helpers/dynamic-import.js is plain JS so TypeScript never\n// transforms its native import() call — route through it instead.\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst _helper = require(\"../../helpers/dynamic-import\") as { dynamicImport(path: string): Promise<any> }\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function dynamicImport<T = any>(modulePath: string): Promise<T> {\n return _helper.dynamicImport(modulePath)\n}\n"]}
@@ -12,12 +12,14 @@ const builder_util_1 = require("builder-util");
12
12
  const multiProgress_1 = require("electron-publish/out/multiProgress");
13
13
  const fs_1 = require("fs");
14
14
  const fs = require("fs/promises");
15
+ const crypto = require("crypto");
15
16
  const os = require("os");
16
17
  const path = require("path");
17
18
  const lockfile = require("proper-lockfile");
18
19
  const promises_1 = require("stream/promises");
19
20
  const tar = require("tar");
20
21
  const unzipper = require("unzipper");
22
+ const builder_util_runtime_1 = require("builder-util-runtime");
21
23
  const cacheState_1 = require("./cacheState");
22
24
  function hashUrlSafe(input, length = 6) {
23
25
  let hash = 5381;
@@ -121,6 +123,15 @@ async function extractArchive(file, dir) {
121
123
  // rm + mkdir happen AFTER acquiring the lock so no concurrent caller can clear our tmpDir mid-extraction
122
124
  await fs.rm(tmpDir, { recursive: true, force: true });
123
125
  await fs.mkdir(tmpDir, { recursive: true });
126
+ // Guard against the transient window in @electron/get's non-atomic putFileInCache (remove → move).
127
+ // A concurrent worker may have deleted and not yet replaced the source archive; wait briefly for it.
128
+ for (let i = 0; !(await (0, builder_util_1.exists)(file)); i++) {
129
+ if (i >= 4) {
130
+ throw Object.assign(new Error(`Source archive not found after retries: ${file}`), { code: "ENOENT", path: file });
131
+ }
132
+ builder_util_1.log.warn({ file, attempt: i + 1 }, "source archive transiently missing, retrying");
133
+ await new Promise(r => setTimeout(r, 300 * (i + 1)));
134
+ }
124
135
  if (file.endsWith(".tar.gz") || file.endsWith(".tgz")) {
125
136
  await tar.extract({ file, cwd: tmpDir, strip: 1 });
126
137
  }
@@ -160,6 +171,19 @@ async function extractArchive(file, dir) {
160
171
  }
161
172
  async function downloadArtifactToFile(config, label) {
162
173
  var _a, _b, _c, _d;
174
+ // Serialize concurrent downloads of the same artifact across vitest workers to prevent @electron/get's
175
+ // non-atomic putFileInCache (remove + move) from racing with a concurrent reader.
176
+ const artifactLockKey = crypto
177
+ .createHash("sha256")
178
+ .update(JSON.stringify({ v: config.version, p: config.platform, a: config.arch, n: config.artifactName }))
179
+ .digest("hex")
180
+ .slice(0, 20);
181
+ const artifactLockPath = path.join(os.tmpdir(), `eb-dl-${artifactLockKey}.lock`);
182
+ const releaseArtifactLock = await lockfile.lock(artifactLockPath, {
183
+ retries: { retries: 30, minTimeout: 500, maxTimeout: 5000 },
184
+ stale: 600000,
185
+ realpath: false,
186
+ });
163
187
  let lastLoggedMilestone = -1;
164
188
  const state = { bar: undefined };
165
189
  const downloadOptions = {
@@ -197,7 +221,12 @@ async function downloadArtifactToFile(config, label) {
197
221
  try {
198
222
  let filePath;
199
223
  try {
200
- filePath = await get.downloadArtifact(configWithProgress);
224
+ filePath = await (0, builder_util_runtime_1.retry)(() => get.downloadArtifact(configWithProgress), {
225
+ retries: 3,
226
+ interval: 2000,
227
+ backoff: 2000,
228
+ shouldRetry: (e) => e instanceof builder_util_runtime_1.HttpError ? e.isServerError() : typeof (e === null || e === void 0 ? void 0 : e.code) === "string" && ["ENOTFOUND", "ETIMEDOUT", "ECONNRESET", "EPIPE", "ENOENT"].includes(e.code),
229
+ });
201
230
  }
202
231
  catch (err) {
203
232
  if (typeof (err === null || err === void 0 ? void 0 : err.message) === "string" && err.message.includes("dest already exists")) {
@@ -219,6 +248,7 @@ async function downloadArtifactToFile(config, label) {
219
248
  finally {
220
249
  (_c = state.bar) === null || _c === void 0 ? void 0 : _c.update(100);
221
250
  (_d = state.bar) === null || _d === void 0 ? void 0 : _d.terminate();
251
+ await releaseArtifactLock().catch(err => builder_util_1.log.warn({ err }, "failed to release artifact download lock"));
222
252
  }
223
253
  }
224
254
  /**