app-builder-lib 26.0.20 → 26.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/helpers/dynamic-import.d.ts +3 -0
- package/helpers/dynamic-import.js +23 -0
- package/helpers/remote-rebuild.js +38 -0
- package/out/binDownload.js +1 -1
- package/out/binDownload.js.map +1 -1
- package/out/codeSign/windowsCodeSign.js +1 -1
- package/out/codeSign/windowsCodeSign.js.map +1 -1
- package/out/electron/electronVersion.js +1 -1
- package/out/electron/electronVersion.js.map +1 -1
- package/out/electron/search-module.d.ts +23 -0
- package/out/electron/search-module.js +73 -0
- package/out/electron/search-module.js.map +1 -0
- package/out/linuxPackager.js +1 -1
- package/out/linuxPackager.js.map +1 -1
- package/out/macPackager.d.ts +1 -0
- package/out/macPackager.js +50 -13
- package/out/macPackager.js.map +1 -1
- package/out/node-module-collector/index.js +14 -2
- package/out/node-module-collector/index.js.map +1 -1
- package/out/node-module-collector/nodeModulesCollector.js +6 -0
- package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
- package/out/node-module-collector/packageManager.d.ts +4 -2
- package/out/node-module-collector/packageManager.js +41 -26
- package/out/node-module-collector/packageManager.js.map +1 -1
- package/out/options/PlatformSpecificBuildOptions.d.ts +2 -1
- package/out/options/PlatformSpecificBuildOptions.js.map +1 -1
- package/out/options/macOptions.d.ts +2 -0
- package/out/options/macOptions.js.map +1 -1
- package/out/options/winOptions.d.ts +1 -1
- package/out/options/winOptions.js.map +1 -1
- package/out/platformPackager.d.ts +5 -0
- package/out/platformPackager.js +50 -0
- package/out/platformPackager.js.map +1 -1
- package/out/publish/PublishManager.js +7 -0
- package/out/publish/PublishManager.js.map +1 -1
- package/out/targets/LinuxTargetHelper.js +2 -1
- package/out/targets/LinuxTargetHelper.js.map +1 -1
- package/out/targets/nsis/nsisUtil.js +6 -0
- package/out/targets/nsis/nsisUtil.js.map +1 -1
- package/out/targets/snap.js +13 -2
- package/out/targets/snap.js.map +1 -1
- package/out/util/macosIconComposer.d.ts +10 -0
- package/out/util/macosIconComposer.js +95 -0
- package/out/util/macosIconComposer.js.map +1 -0
- package/out/util/{rebuild/rebuild.js → rebuild.js} +1 -1
- package/out/util/rebuild.js.map +1 -0
- package/out/util/resolve.js +5 -16
- package/out/util/resolve.js.map +1 -1
- package/out/util/yarn.js +1 -1
- package/out/util/yarn.js.map +1 -1
- package/out/version.d.ts +1 -1
- package/out/version.js +1 -1
- package/out/version.js.map +1 -1
- package/package.json +12 -11
- package/scheme.json +33 -12
- package/templates/nsis/uninstaller.nsh +7 -0
- package/out/util/rebuild/rebuild.js.map +0 -1
- package/out/util/rebuild/remote-rebuild.d.ts +0 -1
- package/out/util/rebuild/remote-rebuild.js +0 -30
- package/out/util/rebuild/remote-rebuild.js.map +0 -1
- /package/out/util/{rebuild/rebuild.d.ts → rebuild.d.ts} +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const url = require("url")
|
|
2
|
+
const fs = require("fs")
|
|
3
|
+
|
|
4
|
+
exports.dynamicImport = async function dynamicImport(path) {
|
|
5
|
+
try {
|
|
6
|
+
return await import(fs.existsSync(path) ? url.pathToFileURL(path).href : path)
|
|
7
|
+
} catch (error) {
|
|
8
|
+
return Promise.reject(error)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
exports.dynamicImportMaybe = async function dynamicImportMaybe(path) {
|
|
13
|
+
try {
|
|
14
|
+
return require(path)
|
|
15
|
+
} catch (e1) {
|
|
16
|
+
try {
|
|
17
|
+
return await exports.dynamicImport(path)
|
|
18
|
+
} catch (e2) {
|
|
19
|
+
e1.message = "\n1. " + e1.message + "\n2. " + e2.message
|
|
20
|
+
throw e1
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
if (!process.send) {
|
|
2
|
+
console.error("The remote rebuilder expects to be spawned with an IPC channel")
|
|
3
|
+
process.exit(1)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const rebuilder = rebuilder => {
|
|
7
|
+
rebuilder.lifecycle.on("module-found", moduleName => process.send?.({ msg: "module-found", moduleName }))
|
|
8
|
+
rebuilder.lifecycle.on("module-done", moduleName => process.send?.({ msg: "module-done", moduleName }))
|
|
9
|
+
rebuilder.lifecycle.on("module-skip", moduleName => process.send?.({ msg: "module-skip", moduleName }))
|
|
10
|
+
|
|
11
|
+
return rebuilder
|
|
12
|
+
.then(() => {
|
|
13
|
+
process.send?.({ msg: "rebuild-done" })
|
|
14
|
+
return process.exit(0)
|
|
15
|
+
})
|
|
16
|
+
.catch(err => {
|
|
17
|
+
process.send?.({
|
|
18
|
+
msg: "rebuild-error",
|
|
19
|
+
err: {
|
|
20
|
+
message: err.message,
|
|
21
|
+
stack: err.stack,
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
process.exit(0)
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const main = () => {
|
|
29
|
+
const options = JSON.parse(process.argv[2])
|
|
30
|
+
|
|
31
|
+
const dynamicImport = require("./dynamic-import").dynamicImportMaybe
|
|
32
|
+
return dynamicImport("@electron/rebuild").then(module => {
|
|
33
|
+
const { rebuild } = module
|
|
34
|
+
return rebuilder(rebuild(options))
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
main()
|
package/out/binDownload.js
CHANGED
package/out/binDownload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binDownload.js","sourceRoot":"","sources":["../src/binDownload.ts"],"names":[],"mappings":";;AAOA,4BAMC;AAED,kDAGC;AAED,sCAsBC;AAED,wBAYC;AAxDD,+CAAgD;AAEhD,wDAA4D;AAC5D,6BAA4B;AAE5B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAA;AAE3D,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAc,EAAE,QAAwB;IAC5E,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IAC3D,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,IAAA,gCAAiB,EAAC,IAAI,CAAiB,CAAA;AAChD,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAAY,EAAE,OAAe,EAAE,cAAsB,EAAE,QAAgB;IACzG,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAA;IACpC,OAAO,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAA;AAClD,CAAC;AAED,SAAgB,aAAa,CAAC,WAAmB,EAAE,eAAuB,EAAE,QAAgB,EAAE,aAAa,GAAG,6CAA6C;IACzJ,IAAI,GAAW,CAAA;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,CAAC;QAChE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,+CAA+C,GAAG,GAAG,GAAG,eAAe,CAAA;IAC3F,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,2CAA2C;YACvD,OAAO,CAAC,GAAG,CAAC,2CAA2C;YACvD,OAAO,CAAC,GAAG,CAAC,mDAAmD;YAC/D,OAAO,CAAC,GAAG,CAAC,gCAAgC;YAC5C,sBAAsB,aAAa,qBAAqB,CAAA;QAC1D,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,+CAA+C;YAC3D,OAAO,CAAC,GAAG,CAAC,+CAA+C;YAC3D,OAAO,CAAC,GAAG,CAAC,uDAAuD;YACnE,OAAO,CAAC,GAAG,CAAC,oCAAoC;YAChD,WAAW,CAAA;QACb,GAAG,GAAG,GAAG,OAAO,GAAG,SAAS,IAAI,eAAe,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAA;IAClG,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;AACxC,CAAC;AAED,SAAgB,MAAM,CAAC,QAAgB,EAAE,GAAmB,EAAE,QAAwB;;IACpF,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAA,2BAAgB,EAAC,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,mCAAI,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;IAC5F,IAAI,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA,CAAC,6CAA6C;IAE3F,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,GAAG,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"binDownload.js","sourceRoot":"","sources":["../src/binDownload.ts"],"names":[],"mappings":"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","sourcesContent":["import { executeAppBuilder } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport * as path from \"path\"\n\nconst versionToPromise = new Map<string, Promise<string>>()\n\nexport function download(url: string, output: string, checksum?: string | null): Promise<void> {\n const args = [\"download\", \"--url\", url, \"--output\", output]\n if (checksum != null) {\n args.push(\"--sha512\", checksum)\n }\n return executeAppBuilder(args) as Promise<any>\n}\n\nexport function getBinFromCustomLoc(name: string, version: string, binariesLocUrl: string, checksum: string): Promise<string> {\n const dirName = `${name}-${version}`\n return getBin(dirName, binariesLocUrl, checksum)\n}\n\nexport function getBinFromUrl(releaseName: string, filenameWithExt: string, checksum: string, githubOrgRepo = \"electron-userland/electron-builder-binaries\"): Promise<string> {\n let url: string\n if (process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL) {\n url = process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL + \"/\" + filenameWithExt\n } else {\n const baseUrl =\n process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_MIRROR ||\n process.env.npm_config_electron_builder_binaries_mirror ||\n process.env.npm_package_config_electron_builder_binaries_mirror ||\n process.env.ELECTRON_BUILDER_BINARIES_MIRROR ||\n `https://github.com/${githubOrgRepo}/releases/download/`\n const middleUrl =\n process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n process.env.npm_config_electron_builder_binaries_custom_dir ||\n process.env.npm_package_config_electron_builder_binaries_custom_dir ||\n process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n releaseName\n url = `${baseUrl}${middleUrl}/${filenameWithExt}`\n }\n\n const cacheKey = `${releaseName}-${path.basename(filenameWithExt, path.extname(filenameWithExt))}`\n return getBin(cacheKey, url, checksum)\n}\n\nexport function getBin(cacheKey: string, url?: string | null, checksum?: string | null): Promise<string> {\n // Old cache is ignored if cache environment variable changes\n const cacheName = sanitizeFileName(`${process.env.ELECTRON_BUILDER_CACHE ?? \"\"}${cacheKey}`)\n let promise = versionToPromise.get(cacheName) // if rejected, we will try to download again\n\n if (promise != null) {\n return promise\n }\n\n promise = doGetBin(cacheKey, url, checksum)\n versionToPromise.set(cacheName, promise)\n return promise\n}\n\nfunction doGetBin(name: string, url: string | Nullish, checksum: string | Nullish): Promise<string> {\n const args = [\"download-artifact\", \"--name\", name]\n if (url != null) {\n args.push(\"--url\", url)\n }\n if (checksum != null) {\n args.push(\"--sha512\", checksum)\n }\n return executeAppBuilder(args)\n}\n"]}
|
|
@@ -7,7 +7,7 @@ async function signWindows(options, packager) {
|
|
|
7
7
|
if (options.options.signtoolOptions) {
|
|
8
8
|
builder_util_1.log.warn(null, "ignoring signtool options, using Azure Trusted Signing; please only configure one");
|
|
9
9
|
}
|
|
10
|
-
builder_util_1.log.info({ path: builder_util_1.log.filePath(options.path) }, "signing with Azure Trusted Signing
|
|
10
|
+
builder_util_1.log.info({ path: builder_util_1.log.filePath(options.path) }, "signing with Azure Trusted Signing");
|
|
11
11
|
}
|
|
12
12
|
else {
|
|
13
13
|
builder_util_1.log.info({ path: builder_util_1.log.filePath(options.path) }, "signing with signtool.exe");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowsCodeSign.js","sourceRoot":"","sources":["../../src/codeSign/windowsCodeSign.ts"],"names":[],"mappings":";;AASA,kCAWC;AApBD,+CAAyC;AASlC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,QAAqB;IAClF,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACpC,kBAAG,CAAC,IAAI,CAAC,IAAI,EAAE,mFAAmF,CAAC,CAAA;QACrG,CAAC;QACD,kBAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"windowsCodeSign.js","sourceRoot":"","sources":["../../src/codeSign/windowsCodeSign.ts"],"names":[],"mappings":";;AASA,kCAWC;AApBD,+CAAyC;AASlC,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,QAAqB;IAClF,IAAI,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACpC,kBAAG,CAAC,IAAI,CAAC,IAAI,EAAE,mFAAmF,CAAC,CAAA;QACrG,CAAC;QACD,kBAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAA;IACtF,CAAC;SAAM,CAAC;QACN,kBAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAA;IAC1D,OAAO,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,aAAa,CAAC,MAA8B;IACnD,OAAO,IAAA,oBAAK,EAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAA;YACzB;YACE,oEAAoE;YACpE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,4BAA4B,CAAC;;gBAC/C,oEAAoE;gBACpE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,gCAAgC,CAAC,CAAA,EACnD,CAAC;gBACD,kBAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sDAAsD,CAAC,CAAA;gBACpF,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { log, retry } from \"builder-util\"\nimport { WindowsConfiguration } from \"../options/winOptions\"\nimport { WinPackager } from \"../winPackager\"\n\nexport interface WindowsSignOptions {\n readonly path: string\n readonly options: WindowsConfiguration\n}\n\nexport async function signWindows(options: WindowsSignOptions, packager: WinPackager): Promise<boolean> {\n if (options.options.azureSignOptions) {\n if (options.options.signtoolOptions) {\n log.warn(null, \"ignoring signtool options, using Azure Trusted Signing; please only configure one\")\n }\n log.info({ path: log.filePath(options.path) }, \"signing with Azure Trusted Signing\")\n } else {\n log.info({ path: log.filePath(options.path) }, \"signing with signtool.exe\")\n }\n const packageManager = await packager.signingManager.value\n return signWithRetry(async () => packageManager.signFile(options))\n}\n\nfunction signWithRetry(signer: () => Promise<boolean>): Promise<boolean> {\n return retry(signer, {\n retries: 3,\n interval: 1000,\n backoff: 1000,\n shouldRetry: (e: any) => {\n const message = e.message\n if (\n // https://github.com/electron-userland/electron-builder/issues/1414\n message?.includes(\"Couldn't resolve host name\") ||\n // https://github.com/electron-userland/electron-builder/issues/8615\n message?.includes(\"being used by another process.\")\n ) {\n log.warn({ error: message }, \"attempt to sign failed, another attempt will be made\")\n return true\n }\n return false\n },\n })\n}\n"]}
|
|
@@ -4,7 +4,6 @@ exports.getElectronVersion = getElectronVersion;
|
|
|
4
4
|
exports.getElectronVersionFromInstalled = getElectronVersionFromInstalled;
|
|
5
5
|
exports.getElectronPackage = getElectronPackage;
|
|
6
6
|
exports.computeElectronVersion = computeElectronVersion;
|
|
7
|
-
const search_module_1 = require("@electron/rebuild/lib/search-module");
|
|
8
7
|
const builder_util_1 = require("builder-util");
|
|
9
8
|
const builder_util_runtime_1 = require("builder-util-runtime");
|
|
10
9
|
const fs_extra_1 = require("fs-extra");
|
|
@@ -12,6 +11,7 @@ const path = require("path");
|
|
|
12
11
|
const semver = require("semver");
|
|
13
12
|
const config_1 = require("../util/config/config");
|
|
14
13
|
const load_1 = require("../util/config/load");
|
|
14
|
+
const search_module_1 = require("./search-module");
|
|
15
15
|
const electronPackages = ["electron", "electron-prebuilt", "electron-prebuilt-compile", "electron-nightly"];
|
|
16
16
|
async function getElectronVersion(projectDir, config) {
|
|
17
17
|
if (config == null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electronVersion.js","sourceRoot":"","sources":["../../src/electron/electronVersion.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"electronVersion.js","sourceRoot":"","sources":["../../src/electron/electronVersion.ts"],"names":[],"mappings":"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","sourcesContent":["import { httpExecutor, InvalidConfigurationError, log } from \"builder-util\"\nimport { parseXml } from \"builder-util-runtime\"\nimport { readJson } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport * as semver from \"semver\"\nimport { Configuration } from \"../configuration\"\nimport { getConfig } from \"../util/config/config\"\nimport { orNullIfFileNotExist } from \"../util/config/load\"\nimport { getProjectRootPath } from \"./search-module\"\n\nexport type MetadataValue = Lazy<Record<string, any> | null>\n\nconst electronPackages = [\"electron\", \"electron-prebuilt\", \"electron-prebuilt-compile\", \"electron-nightly\"]\n\nexport async function getElectronVersion(projectDir: string, config?: Configuration): Promise<string> {\n if (config == null) {\n config = await getConfig(projectDir, null, null)\n }\n if (config.electronVersion != null) {\n return config.electronVersion\n }\n return computeElectronVersion(projectDir)\n}\n\nexport async function getElectronVersionFromInstalled(projectDir: string): Promise<string | null> {\n for (const name of electronPackages) {\n try {\n return (await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))).version\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot read electron version package.json`)\n }\n }\n }\n return null\n}\n\nexport async function getElectronPackage(projectDir: string) {\n for (const name of electronPackages) {\n try {\n return await readJson(path.join(projectDir, \"node_modules\", name, \"package.json\"))\n } catch (e: any) {\n if (e.code !== \"ENOENT\") {\n log.warn({ name, error: e }, `cannot find electron in package.json`)\n }\n }\n }\n return null\n}\n\n/** @internal */\nexport async function computeElectronVersion(projectDir: string): Promise<string> {\n const result = await getElectronVersionFromInstalled(projectDir)\n if (result != null) {\n return result\n }\n\n const potentialRootDirs = [projectDir, await getProjectRootPath(projectDir)]\n let dependency: NameAndVersion | null = null\n for (const dir of potentialRootDirs) {\n const metadata = await orNullIfFileNotExist(readJson(path.join(dir, \"package.json\")))\n dependency = metadata ? findFromPackageMetadata(metadata) : null\n if (dependency) {\n break\n }\n }\n if (dependency?.name === \"electron-nightly\") {\n log.info(\"You are using a nightly version of electron, be warned that those builds are highly unstable.\")\n const feedXml = await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/nightlies/releases.atom`,\n headers: {\n accept: \"application/xml, application/atom+xml, text/xml, */*\",\n },\n })\n const feed = parseXml(feedXml!)\n const latestRelease = feed.element(\"entry\", false, `No published versions on GitHub`)\n const v = /\\/tag\\/v?([^/]+)$/.exec(latestRelease.element(\"link\").attribute(\"href\"))![1]\n return v.startsWith(\"v\") ? v.substring(1) : v\n } else if (dependency?.version === \"latest\") {\n log.warn('Electron version is set to \"latest\", but it is recommended to set it to some more restricted version range.')\n try {\n const releaseInfo = JSON.parse(\n (await httpExecutor.request({\n hostname: \"github.com\",\n path: `/electron/${dependency.name === \"electron-nightly\" ? \"nightlies\" : \"electron\"}/releases/latest`,\n headers: {\n accept: \"application/json\",\n },\n }))!\n )\n const version = releaseInfo.tag_name.startsWith(\"v\") ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name\n log.info({ version }, `resolve ${dependency.name}@${dependency.version}`)\n return version\n } catch (e: any) {\n log.warn(e)\n }\n\n throw new InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, \"package.json\")}'`)\n }\n const version = dependency?.version\n if (version == null || !/^\\d/.test(version)) {\n const versionMessage = version == null ? \"\" : ` and version (\"${version}\") is not fixed in project`\n throw new InvalidConfigurationError(\n `Cannot compute electron version from installed node modules - none of the possible electron modules are installed${versionMessage}.\\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`\n )\n }\n\n return semver.coerce(version)!.format()\n}\n\ninterface NameAndVersion {\n readonly name: string\n readonly version: string\n}\n\nfunction findFromPackageMetadata(packageData: any): NameAndVersion | null {\n for (const name of electronPackages) {\n const devDependencies = packageData.devDependencies\n let dep = devDependencies == null ? null : devDependencies[name]\n if (dep == null) {\n const dependencies = packageData.dependencies\n dep = dependencies == null ? null : dependencies[name]\n }\n if (dep != null) {\n return { name, version: dep }\n }\n }\n return null\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find all instances of a given module in node_modules subdirectories while traversing up
|
|
3
|
+
* ancestor directories.
|
|
4
|
+
*
|
|
5
|
+
* @param cwd the initial directory to traverse
|
|
6
|
+
* @param moduleName the Node module name (should work for scoped modules as well)
|
|
7
|
+
* @param rootPath the project's root path. If provided, the traversal will stop at this path.
|
|
8
|
+
*/
|
|
9
|
+
export declare function searchForModule(cwd: string, moduleName: string, rootPath?: string): Promise<string[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Find all instances of node_modules subdirectories while traversing up ancestor directories.
|
|
12
|
+
*
|
|
13
|
+
* @param cwd the initial directory to traverse
|
|
14
|
+
* @param rootPath the project's root path. If provided, the traversal will stop at this path.
|
|
15
|
+
*/
|
|
16
|
+
export declare function searchForNodeModules(cwd: string, rootPath?: string): Promise<string[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Determine the root directory of a given project, by looking for a directory with an
|
|
19
|
+
* NPM or yarn lockfile or pnpm lockfile.
|
|
20
|
+
*
|
|
21
|
+
* @param cwd the initial directory to traverse
|
|
22
|
+
*/
|
|
23
|
+
export declare function getProjectRootPath(cwd: string): Promise<string>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchForModule = searchForModule;
|
|
4
|
+
exports.searchForNodeModules = searchForNodeModules;
|
|
5
|
+
exports.getProjectRootPath = getProjectRootPath;
|
|
6
|
+
const fs = require("fs-extra");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
async function shouldContinueSearch(traversedPath, rootPath, stopAtPackageJSON) {
|
|
9
|
+
if (rootPath) {
|
|
10
|
+
return Promise.resolve(traversedPath !== path.dirname(rootPath));
|
|
11
|
+
}
|
|
12
|
+
else if (stopAtPackageJSON) {
|
|
13
|
+
return fs.existsSync(path.join(traversedPath, "package.json"));
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function traverseAncestorDirectories(cwd, pathGenerator, rootPath, maxItems, stopAtPackageJSON) {
|
|
20
|
+
const paths = [];
|
|
21
|
+
let traversedPath = path.resolve(cwd);
|
|
22
|
+
while (await shouldContinueSearch(traversedPath, rootPath, stopAtPackageJSON)) {
|
|
23
|
+
const generatedPath = pathGenerator(traversedPath);
|
|
24
|
+
if (fs.existsSync(generatedPath)) {
|
|
25
|
+
paths.push(generatedPath);
|
|
26
|
+
}
|
|
27
|
+
const parentPath = path.dirname(traversedPath);
|
|
28
|
+
if (parentPath === traversedPath || (maxItems && paths.length >= maxItems)) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
traversedPath = parentPath;
|
|
32
|
+
}
|
|
33
|
+
return paths;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Find all instances of a given module in node_modules subdirectories while traversing up
|
|
37
|
+
* ancestor directories.
|
|
38
|
+
*
|
|
39
|
+
* @param cwd the initial directory to traverse
|
|
40
|
+
* @param moduleName the Node module name (should work for scoped modules as well)
|
|
41
|
+
* @param rootPath the project's root path. If provided, the traversal will stop at this path.
|
|
42
|
+
*/
|
|
43
|
+
async function searchForModule(cwd, moduleName, rootPath) {
|
|
44
|
+
const pathGenerator = traversedPath => path.join(traversedPath, "node_modules", moduleName);
|
|
45
|
+
return traverseAncestorDirectories(cwd, pathGenerator, rootPath, undefined, true);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Find all instances of node_modules subdirectories while traversing up ancestor directories.
|
|
49
|
+
*
|
|
50
|
+
* @param cwd the initial directory to traverse
|
|
51
|
+
* @param rootPath the project's root path. If provided, the traversal will stop at this path.
|
|
52
|
+
*/
|
|
53
|
+
async function searchForNodeModules(cwd, rootPath) {
|
|
54
|
+
const pathGenerator = traversedPath => path.join(traversedPath, "node_modules");
|
|
55
|
+
return traverseAncestorDirectories(cwd, pathGenerator, rootPath, undefined, true);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determine the root directory of a given project, by looking for a directory with an
|
|
59
|
+
* NPM or yarn lockfile or pnpm lockfile.
|
|
60
|
+
*
|
|
61
|
+
* @param cwd the initial directory to traverse
|
|
62
|
+
*/
|
|
63
|
+
async function getProjectRootPath(cwd) {
|
|
64
|
+
for (const lockFilename of ["yarn.lock", "package-lock.json", "pnpm-lock.yaml"]) {
|
|
65
|
+
const pathGenerator = traversedPath => path.join(traversedPath, lockFilename);
|
|
66
|
+
const lockPaths = await traverseAncestorDirectories(cwd, pathGenerator, undefined, 1);
|
|
67
|
+
if (lockPaths.length > 0) {
|
|
68
|
+
return path.dirname(lockPaths[0]);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return cwd;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=search-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-module.js","sourceRoot":"","sources":["../../src/electron/search-module.ts"],"names":[],"mappings":";;AAiDA,0CAGC;AAQD,oDAGC;AAQD,gDAUC;AAjFD,+BAA8B;AAC9B,kCAAiC;AAEjC,KAAK,UAAU,oBAAoB,CAAC,aAAqB,EAAE,QAAiB,EAAE,iBAA2B;IACvG,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClE,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAID,KAAK,UAAU,2BAA2B,CACxC,GAAW,EACX,aAAoC,EACpC,QAAiB,EACjB,QAAiB,EACjB,iBAA2B;IAE3B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAErC,OAAO,MAAM,oBAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC9E,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;QAClD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC3B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC9C,IAAI,UAAU,KAAK,aAAa,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;YAC3E,MAAK;QACP,CAAC;QACD,aAAa,GAAG,UAAU,CAAA;IAC5B,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkB,EAAE,QAAiB;IACtF,MAAM,aAAa,GAA0B,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;IAClH,OAAO,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;AACnF,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAiB;IACvE,MAAM,aAAa,GAA0B,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;IACtG,OAAO,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;AACnF,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,KAAK,MAAM,YAAY,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAChF,MAAM,aAAa,GAA0B,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;QACpG,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACrF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC","sourcesContent":["import * as fs from \"fs-extra\"\nimport * as path from \"node:path\"\n\nasync function shouldContinueSearch(traversedPath: string, rootPath?: string, stopAtPackageJSON?: boolean): Promise<boolean> {\n if (rootPath) {\n return Promise.resolve(traversedPath !== path.dirname(rootPath))\n } else if (stopAtPackageJSON) {\n return fs.existsSync(path.join(traversedPath, \"package.json\"))\n } else {\n return true\n }\n}\n\ntype PathGeneratorFunction = (traversedPath: string) => string\n\nasync function traverseAncestorDirectories(\n cwd: string,\n pathGenerator: PathGeneratorFunction,\n rootPath?: string,\n maxItems?: number,\n stopAtPackageJSON?: boolean\n): Promise<string[]> {\n const paths: string[] = []\n let traversedPath = path.resolve(cwd)\n\n while (await shouldContinueSearch(traversedPath, rootPath, stopAtPackageJSON)) {\n const generatedPath = pathGenerator(traversedPath)\n if (fs.existsSync(generatedPath)) {\n paths.push(generatedPath)\n }\n\n const parentPath = path.dirname(traversedPath)\n if (parentPath === traversedPath || (maxItems && paths.length >= maxItems)) {\n break\n }\n traversedPath = parentPath\n }\n\n return paths\n}\n\n/**\n * Find all instances of a given module in node_modules subdirectories while traversing up\n * ancestor directories.\n *\n * @param cwd the initial directory to traverse\n * @param moduleName the Node module name (should work for scoped modules as well)\n * @param rootPath the project's root path. If provided, the traversal will stop at this path.\n */\nexport async function searchForModule(cwd: string, moduleName: string, rootPath?: string): Promise<string[]> {\n const pathGenerator: PathGeneratorFunction = traversedPath => path.join(traversedPath, \"node_modules\", moduleName)\n return traverseAncestorDirectories(cwd, pathGenerator, rootPath, undefined, true)\n}\n\n/**\n * Find all instances of node_modules subdirectories while traversing up ancestor directories.\n *\n * @param cwd the initial directory to traverse\n * @param rootPath the project's root path. If provided, the traversal will stop at this path.\n */\nexport async function searchForNodeModules(cwd: string, rootPath?: string): Promise<string[]> {\n const pathGenerator: PathGeneratorFunction = traversedPath => path.join(traversedPath, \"node_modules\")\n return traverseAncestorDirectories(cwd, pathGenerator, rootPath, undefined, true)\n}\n\n/**\n * Determine the root directory of a given project, by looking for a directory with an\n * NPM or yarn lockfile or pnpm lockfile.\n *\n * @param cwd the initial directory to traverse\n */\nexport async function getProjectRootPath(cwd: string): Promise<string> {\n for (const lockFilename of [\"yarn.lock\", \"package-lock.json\", \"pnpm-lock.yaml\"]) {\n const pathGenerator: PathGeneratorFunction = traversedPath => path.join(traversedPath, lockFilename)\n const lockPaths = await traverseAncestorDirectories(cwd, pathGenerator, undefined, 1)\n if (lockPaths.length > 0) {\n return path.dirname(lockPaths[0])\n }\n }\n\n return cwd\n}\n"]}
|
package/out/linuxPackager.js
CHANGED
|
@@ -13,7 +13,7 @@ class LinuxPackager extends platformPackager_1.PlatformPackager {
|
|
|
13
13
|
var _a;
|
|
14
14
|
super(info, core_1.Platform.LINUX);
|
|
15
15
|
const executableName = (_a = this.platformSpecificBuildOptions.executableName) !== null && _a !== void 0 ? _a : info.config.executableName;
|
|
16
|
-
this.executableName = executableName == null ? this.appInfo.
|
|
16
|
+
this.executableName = executableName == null ? this.appInfo.sanitizedName.toLowerCase() : (0, filename_1.sanitizeFileName)(executableName);
|
|
17
17
|
}
|
|
18
18
|
get defaultTarget() {
|
|
19
19
|
return ["snap", "appimage"];
|
package/out/linuxPackager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linuxPackager.js","sourceRoot":"","sources":["../src/linuxPackager.ts"],"names":[],"mappings":";;;AAyEA,oDAcC;AAvFD,+CAAmC;AACnC,wDAA4D;AAC5D,iCAAqD;AAGrD,yDAAqD;AAIrD,mEAA+D;AAE/D,2DAA4D;AAE5D,MAAa,aAAc,SAAQ,mCAAoC;IAGrE,YAAY,IAAc;;QACxB,KAAK,CAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,CAAC,CAAA;QAE3B,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,4BAA4B,CAAC,cAAc,mCAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAA;QACrG,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"linuxPackager.js","sourceRoot":"","sources":["../src/linuxPackager.ts"],"names":[],"mappings":";;;AAyEA,oDAcC;AAvFD,+CAAmC;AACnC,wDAA4D;AAC5D,iCAAqD;AAGrD,yDAAqD;AAIrD,mEAA+D;AAE/D,2DAA4D;AAE5D,MAAa,aAAc,SAAQ,mCAAoC;IAGrE,YAAY,IAAc;;QACxB,KAAK,CAAC,IAAI,EAAE,eAAQ,CAAC,KAAK,CAAC,CAAA;QAE3B,MAAM,cAAc,GAAG,MAAA,IAAI,CAAC,4BAA4B,CAAC,cAAc,mCAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAA;QACrG,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAA,2BAAgB,EAAC,cAAc,CAAC,CAAA;IAC5H,CAAC;IAED,IAAI,aAAa;QACf,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,aAAa,CAAC,OAAsB,EAAE,MAAmE;QACvG,IAAI,MAAgC,CAAA;QACpC,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,CAAA;YACtC,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,iBAAU,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YAED,MAAM,WAAW,GAA+F,CAAC,GAAG,EAAE;gBACpH,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,UAAU;wBACb,OAAO,OAAO,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAA;oBACpD,KAAK,MAAM;wBACT,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAA;oBAC1C,KAAK,SAAS;wBACZ,OAAO,OAAO,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAA;oBACnD,KAAK,KAAK,CAAC;oBACX,KAAK,KAAK,CAAC;oBACX,KAAK,IAAI,CAAC;oBACV,KAAK,SAAS,CAAC;oBACf,KAAK,QAAQ,CAAC;oBACd,KAAK,KAAK,CAAC;oBACX,KAAK,KAAK;wBACR,OAAO,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAA;oBAC/C;wBACE,OAAO,IAAI,CAAA;gBACf,CAAC;YACH,CAAC,CAAC,EAAE,CAAA;YAEJ,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACpB,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;oBACzB,OAAO,IAAA,kCAAkB,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;gBAC/C,CAAC;gBAED,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAA;YACzD,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF;AA1DD,sCA0DC;AAED,SAAgB,oBAAoB,CAAC,IAAU;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAI,CAAC,GAAG;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,mBAAI,CAAC,IAAI;YACZ,OAAO,MAAM,CAAA;QACf,KAAK,mBAAI,CAAC,MAAM;YACd,OAAO,KAAK,CAAA;QACd,KAAK,mBAAI,CAAC,KAAK;YACb,OAAO,aAAa,CAAA;QAEtB;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC","sourcesContent":["import { Arch } from \"builder-util\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport { DIR_TARGET, Platform, Target } from \"./core\"\nimport { LinuxConfiguration } from \"./options/linuxOptions\"\nimport { Packager } from \"./packager\"\nimport { PlatformPackager } from \"./platformPackager\"\nimport AppImageTarget from \"./targets/AppImageTarget\"\nimport FlatpakTarget from \"./targets/FlatpakTarget\"\nimport FpmTarget from \"./targets/FpmTarget\"\nimport { LinuxTargetHelper } from \"./targets/LinuxTargetHelper\"\nimport SnapTarget from \"./targets/snap\"\nimport { createCommonTarget } from \"./targets/targetFactory\"\n\nexport class LinuxPackager extends PlatformPackager<LinuxConfiguration> {\n readonly executableName: string\n\n constructor(info: Packager) {\n super(info, Platform.LINUX)\n\n const executableName = this.platformSpecificBuildOptions.executableName ?? info.config.executableName\n this.executableName = executableName == null ? this.appInfo.sanitizedName.toLowerCase() : sanitizeFileName(executableName)\n }\n\n get defaultTarget(): Array<string> {\n return [\"snap\", \"appimage\"]\n }\n\n createTargets(targets: Array<string>, mapper: (name: string, factory: (outDir: string) => Target) => void): void {\n let helper: LinuxTargetHelper | null\n const getHelper = () => {\n if (helper == null) {\n helper = new LinuxTargetHelper(this)\n }\n return helper\n }\n\n for (const name of targets) {\n if (name === DIR_TARGET) {\n continue\n }\n\n const targetClass: typeof AppImageTarget | typeof SnapTarget | typeof FlatpakTarget | typeof FpmTarget | null = (() => {\n switch (name) {\n case \"appimage\":\n return require(\"./targets/AppImageTarget\").default\n case \"snap\":\n return require(\"./targets/snap\").default\n case \"flatpak\":\n return require(\"./targets/FlatpakTarget\").default\n case \"deb\":\n case \"rpm\":\n case \"sh\":\n case \"freebsd\":\n case \"pacman\":\n case \"apk\":\n case \"p5p\":\n return require(\"./targets/FpmTarget\").default\n default:\n return null\n }\n })()\n\n mapper(name, outDir => {\n if (targetClass === null) {\n return createCommonTarget(name, outDir, this)\n }\n\n return new targetClass(name, this, getHelper(), outDir)\n })\n }\n }\n}\n\nexport function toAppImageOrSnapArch(arch: Arch): string {\n switch (arch) {\n case Arch.x64:\n return \"x86_64\"\n case Arch.ia32:\n return \"i386\"\n case Arch.armv7l:\n return \"arm\"\n case Arch.arm64:\n return \"arm_aarch64\"\n\n default:\n throw new Error(`Unsupported arch ${arch}`)\n }\n}\n"]}
|
package/out/macPackager.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare class MacPackager extends PlatformPackager<MacConfiguration> {
|
|
|
16
16
|
private _iconPath;
|
|
17
17
|
constructor(info: Packager);
|
|
18
18
|
get defaultTarget(): Array<string>;
|
|
19
|
+
expandArch(pattern: string, arch?: Arch | null): string[];
|
|
19
20
|
protected prepareAppInfo(appInfo: AppInfo): AppInfo;
|
|
20
21
|
getIconPath(): Promise<string | null>;
|
|
21
22
|
createTargets(targets: Array<string>, mapper: (name: string, factory: (outDir: string) => Target) => void): void;
|
package/out/macPackager.js
CHANGED
|
@@ -19,6 +19,7 @@ const targetFactory_1 = require("./targets/targetFactory");
|
|
|
19
19
|
const macosVersion_1 = require("./util/macosVersion");
|
|
20
20
|
const pathManager_1 = require("./util/pathManager");
|
|
21
21
|
const resolve_1 = require("./util/resolve");
|
|
22
|
+
const macroExpander_1 = require("./util/macroExpander");
|
|
22
23
|
class MacPackager extends platformPackager_1.PlatformPackager {
|
|
23
24
|
constructor(info) {
|
|
24
25
|
super(info, core_1.Platform.MAC);
|
|
@@ -53,6 +54,14 @@ class MacPackager extends platformPackager_1.PlatformPackager {
|
|
|
53
54
|
get defaultTarget() {
|
|
54
55
|
return this.info.framework.macOsDefaultTargets;
|
|
55
56
|
}
|
|
57
|
+
expandArch(pattern, arch) {
|
|
58
|
+
if (arch === builder_util_1.Arch.universal) {
|
|
59
|
+
// Universal build has `app-x64.asar.unpacked` & `app-arm64.asar.unpacked`
|
|
60
|
+
return [(0, macroExpander_1.expandMacro)(pattern, builder_util_1.Arch[builder_util_1.Arch.arm64], this.appInfo, {}, false), (0, macroExpander_1.expandMacro)(pattern, builder_util_1.Arch[builder_util_1.Arch.x64], this.appInfo, {}, false)];
|
|
61
|
+
}
|
|
62
|
+
// Every other build keeps the name as `app.asar.unpacked`
|
|
63
|
+
return [(0, macroExpander_1.expandMacro)(pattern, null, this.appInfo, {}, false)];
|
|
64
|
+
}
|
|
56
65
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
57
66
|
prepareAppInfo(appInfo) {
|
|
58
67
|
// codesign requires the filename to be normalized to the NFD form
|
|
@@ -121,6 +130,12 @@ class MacPackager extends platformPackager_1.PlatformPackager {
|
|
|
121
130
|
appOutDir: builder_util_1.log.filePath(appOutDir),
|
|
122
131
|
}, `packaging`);
|
|
123
132
|
const appFile = `${this.appInfo.productFilename}.app`;
|
|
133
|
+
// Make sure the Assets.car file is the same for both architectures
|
|
134
|
+
const sourceCatalogPath = path.join(x64AppOutDir, appFile, "Contents/Resources/Assets.car");
|
|
135
|
+
if (await (0, builder_util_1.exists)(sourceCatalogPath)) {
|
|
136
|
+
const targetCatalogPath = path.join(arm64AppOutPath, appFile, "Contents/Resources/Assets.car");
|
|
137
|
+
await fs.copyFile(sourceCatalogPath, targetCatalogPath);
|
|
138
|
+
}
|
|
124
139
|
const { makeUniversalApp } = require("@electron/universal");
|
|
125
140
|
await makeUniversalApp({
|
|
126
141
|
x64AppPath: path.join(x64AppOutDir, appFile),
|
|
@@ -256,13 +271,16 @@ class MacPackager extends platformPackager_1.PlatformPackager {
|
|
|
256
271
|
let binaries = options.binaries || undefined;
|
|
257
272
|
if (binaries) {
|
|
258
273
|
// Accept absolute paths for external binaries, else resolve relative paths from the artifact's app Contents path.
|
|
259
|
-
binaries = await Promise.all(binaries.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
274
|
+
binaries = (await Promise.all(binaries.flatMap(async (destination) => {
|
|
275
|
+
const expandedDestination = this.expandArch(destination, arch);
|
|
276
|
+
return await Promise.all(expandedDestination.map(async (d) => {
|
|
277
|
+
if (await (0, builder_util_1.statOrNull)(d)) {
|
|
278
|
+
return d;
|
|
279
|
+
}
|
|
280
|
+
return path.resolve(appPath, d);
|
|
281
|
+
}));
|
|
282
|
+
}))).flat();
|
|
283
|
+
builder_util_1.log.info({ binaries, arch: arch == null ? null : builder_util_1.Arch[arch] }, "signing additional user-defined binaries for arch");
|
|
266
284
|
}
|
|
267
285
|
const customSignOptions = (isMas ? masOptions : this.platformSpecificBuildOptions) || this.platformSpecificBuildOptions;
|
|
268
286
|
const signOptions = {
|
|
@@ -410,19 +428,38 @@ class MacPackager extends platformPackager_1.PlatformPackager {
|
|
|
410
428
|
const appFilename = appInfo.productFilename;
|
|
411
429
|
// https://github.com/electron-userland/electron-builder/issues/1278
|
|
412
430
|
appPlist.CFBundleExecutable = appFilename.endsWith(" Helper") ? appFilename.substring(0, appFilename.length - " Helper".length) : appFilename;
|
|
413
|
-
const
|
|
414
|
-
|
|
431
|
+
const resourcesPath = path.join(contentsPath, "Resources");
|
|
432
|
+
// Support both legacy `.icns` and modern `.icon` (Icon Composer) inputs via `mac.icon`.
|
|
433
|
+
// Prefer `.icon` if provided; still accept `.icns`.
|
|
434
|
+
const configuredIcon = this.platformSpecificBuildOptions.icon;
|
|
435
|
+
const isIconComposer = typeof configuredIcon === "string" && configuredIcon.toLowerCase().endsWith(".icon");
|
|
436
|
+
// Set the app name
|
|
437
|
+
appPlist.CFBundleName = appInfo.productName;
|
|
438
|
+
appPlist.CFBundleDisplayName = appInfo.productName;
|
|
439
|
+
// Bundle legacy `icns` format - this should also run when `.icon` is provided
|
|
440
|
+
const setIcnsFile = async (iconPath) => {
|
|
415
441
|
const oldIcon = appPlist.CFBundleIconFile;
|
|
416
|
-
const resourcesPath = path.join(contentsPath, "Resources");
|
|
417
442
|
if (oldIcon != null) {
|
|
418
443
|
await (0, builder_util_1.unlinkIfExists)(path.join(resourcesPath, oldIcon));
|
|
419
444
|
}
|
|
420
445
|
const iconFileName = "icon.icns";
|
|
421
446
|
appPlist.CFBundleIconFile = iconFileName;
|
|
422
|
-
await (0, builder_util_1.copyFile)(
|
|
447
|
+
await (0, builder_util_1.copyFile)(iconPath, path.join(resourcesPath, iconFileName));
|
|
448
|
+
};
|
|
449
|
+
const icnsFilePath = await this.getIconPath();
|
|
450
|
+
if (icnsFilePath != null) {
|
|
451
|
+
await setIcnsFile(icnsFilePath);
|
|
452
|
+
}
|
|
453
|
+
// Bundle new `icon` format
|
|
454
|
+
if (isIconComposer && configuredIcon) {
|
|
455
|
+
const iconComposerPath = await this.getResource(configuredIcon);
|
|
456
|
+
if (iconComposerPath) {
|
|
457
|
+
const { assetCatalog } = await this.generateAssetCatalogData(iconComposerPath);
|
|
458
|
+
// Create and setup the asset catalog
|
|
459
|
+
appPlist.CFBundleIconName = "Icon";
|
|
460
|
+
await fs.writeFile(path.join(resourcesPath, "Assets.car"), assetCatalog);
|
|
461
|
+
}
|
|
423
462
|
}
|
|
424
|
-
appPlist.CFBundleName = appInfo.productName;
|
|
425
|
-
appPlist.CFBundleDisplayName = appInfo.productName;
|
|
426
463
|
const minimumSystemVersion = this.platformSpecificBuildOptions.minimumSystemVersion;
|
|
427
464
|
if (minimumSystemVersion != null) {
|
|
428
465
|
appPlist.LSMinimumSystemVersion = minimumSystemVersion;
|