summaryrefslogtreecommitdiff
path: root/desktop/node_modules/electron-packager/src/universal.js
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/node_modules/electron-packager/src/universal.js')
-rw-r--r--desktop/node_modules/electron-packager/src/universal.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/desktop/node_modules/electron-packager/src/universal.js b/desktop/node_modules/electron-packager/src/universal.js
new file mode 100644
index 0000000..8ae7cb1
--- /dev/null
+++ b/desktop/node_modules/electron-packager/src/universal.js
@@ -0,0 +1,80 @@
+'use strict'
+
+const universal = require('@electron/universal')
+const common = require('./common')
+const fs = require('fs-extra')
+const path = require('path')
+
+async function packageUniversalMac (packageForPlatformAndArchWithOpts, buildDir, comboOpts, downloadOpts, tempBase) {
+ // In order to generate a universal macOS build we actually need to build the x64 and the arm64 app
+ // and then glue them together
+ common.info(`Packaging app for platform ${comboOpts.platform} universal using electron v${comboOpts.electronVersion} - Building x64 and arm64 slices now`, comboOpts.quiet)
+ await fs.mkdirp(tempBase)
+ const tempDir = await fs.mkdtemp(path.resolve(tempBase, 'electron-packager-universal-'))
+
+ const { App } = require('./mac')
+ const app = new App(comboOpts, buildDir)
+ const universalStagingPath = app.stagingPath
+ const finalUniversalPath = common.generateFinalPath(app.opts)
+
+ if (await fs.pathExists(finalUniversalPath)) {
+ if (comboOpts.overwrite) {
+ await fs.remove(finalUniversalPath)
+ } else {
+ common.info(`Skipping ${comboOpts.platform} ${comboOpts.arch} (output dir already exists, use --overwrite to force)`, comboOpts.quiet)
+ return true
+ }
+ }
+
+ const tempPackages = {}
+
+ for (const tempArch of ['x64', 'arm64']) {
+ const tempOpts = {
+ ...comboOpts,
+ arch: tempArch,
+ out: tempDir
+ }
+ const tempDownloadOpts = {
+ ...downloadOpts,
+ arch: tempArch
+ }
+ // Do not sign or notarize the individual slices, we sign and notarize the merged app later
+ delete tempOpts.osxSign
+ delete tempOpts.osxNotarize
+
+ tempPackages[tempArch] = await packageForPlatformAndArchWithOpts(tempOpts, tempDownloadOpts)
+ }
+
+ const x64AppPath = tempPackages.x64
+ const arm64AppPath = tempPackages.arm64
+
+ common.info(`Stitching universal app for platform ${comboOpts.platform}`, comboOpts.quiet)
+
+ const generatedFiles = await fs.readdir(x64AppPath)
+ const appName = generatedFiles.filter(file => path.extname(file) === '.app')[0]
+
+ await universal.makeUniversalApp({
+ ...comboOpts.osxUniversal,
+ x64AppPath: path.resolve(x64AppPath, appName),
+ arm64AppPath: path.resolve(arm64AppPath, appName),
+ outAppPath: path.resolve(universalStagingPath, appName)
+ })
+
+ await app.signAppIfSpecified()
+ await app.notarizeAppIfSpecified()
+ await app.move()
+
+ for (const generatedFile of generatedFiles) {
+ if (path.extname(generatedFile) === '.app') continue
+
+ await fs.copy(path.resolve(x64AppPath, generatedFile), path.resolve(finalUniversalPath, generatedFile))
+ }
+
+ await fs.remove(tempDir)
+
+ return finalUniversalPath
+}
+
+module.exports = {
+ packageUniversalMac
+}