summaryrefslogtreecommitdiff
path: root/desktop/node_modules/electron/install.js
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/node_modules/electron/install.js')
-rw-r--r--desktop/node_modules/electron/install.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/desktop/node_modules/electron/install.js b/desktop/node_modules/electron/install.js
new file mode 100644
index 0000000..8fb438e
--- /dev/null
+++ b/desktop/node_modules/electron/install.js
@@ -0,0 +1,107 @@
+#!/usr/bin/env node
+
+const { version } = require('./package');
+
+const childProcess = require('child_process');
+const fs = require('fs');
+const os = require('os');
+const path = require('path');
+const extract = require('extract-zip');
+const { downloadArtifact } = require('@electron/get');
+
+if (process.env.ELECTRON_SKIP_BINARY_DOWNLOAD) {
+ process.exit(0);
+}
+
+const platformPath = getPlatformPath();
+
+if (isInstalled()) {
+ process.exit(0);
+}
+
+const platform = process.env.npm_config_platform || process.platform;
+let arch = process.env.npm_config_arch || process.arch;
+
+if (platform === 'darwin' && process.platform === 'darwin' && arch === 'x64' &&
+ process.env.npm_config_arch === undefined) {
+ // When downloading for macOS ON macOS and we think we need x64 we should
+ // check if we're running under rosetta and download the arm64 version if appropriate
+ try {
+ const output = childProcess.execSync('sysctl -in sysctl.proc_translated');
+ if (output.toString().trim() === '1') {
+ arch = 'arm64';
+ }
+ } catch {
+ // Ignore failure
+ }
+}
+
+// downloads if not cached
+downloadArtifact({
+ version,
+ artifactName: 'electron',
+ force: process.env.force_no_cache === 'true',
+ cacheRoot: process.env.electron_config_cache,
+ checksums: process.env.electron_use_remote_checksums ? undefined : require('./checksums.json'),
+ platform,
+ arch
+}).then(extractFile).catch(err => {
+ console.error(err.stack);
+ process.exit(1);
+});
+
+function isInstalled () {
+ try {
+ if (fs.readFileSync(path.join(__dirname, 'dist', 'version'), 'utf-8').replace(/^v/, '') !== version) {
+ return false;
+ }
+
+ if (fs.readFileSync(path.join(__dirname, 'path.txt'), 'utf-8') !== platformPath) {
+ return false;
+ }
+ } catch (ignored) {
+ return false;
+ }
+
+ const electronPath = process.env.ELECTRON_OVERRIDE_DIST_PATH || path.join(__dirname, 'dist', platformPath);
+
+ return fs.existsSync(electronPath);
+}
+
+// unzips and makes path.txt point at the correct executable
+function extractFile (zipPath) {
+ const distPath = process.env.ELECTRON_OVERRIDE_DIST_PATH || path.join(__dirname, 'dist');
+
+ return extract(zipPath, { dir: path.join(__dirname, 'dist') }).then(() => {
+ // If the zip contains an "electron.d.ts" file,
+ // move that up
+ const srcTypeDefPath = path.join(distPath, 'electron.d.ts');
+ const targetTypeDefPath = path.join(__dirname, 'electron.d.ts');
+ const hasTypeDefinitions = fs.existsSync(srcTypeDefPath);
+
+ if (hasTypeDefinitions) {
+ fs.renameSync(srcTypeDefPath, targetTypeDefPath);
+ }
+
+ // Write a "path.txt" file.
+ return fs.promises.writeFile(path.join(__dirname, 'path.txt'), platformPath);
+ });
+}
+
+function getPlatformPath () {
+ const platform = process.env.npm_config_platform || os.platform();
+
+ switch (platform) {
+ case 'mas':
+ case 'darwin':
+ return 'Electron.app/Contents/MacOS/Electron';
+ case 'freebsd':
+ case 'openbsd':
+ case 'linux':
+ return 'electron';
+ case 'win32':
+ return 'electron.exe';
+ default:
+ throw new Error('Electron builds are not available on platform: ' + platform);
+ }
+}