diff options
Diffstat (limited to 'node_modules/electron/install.js')
| -rw-r--r-- | node_modules/electron/install.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/node_modules/electron/install.js b/node_modules/electron/install.js new file mode 100644 index 0000000..b613466 --- /dev/null +++ b/node_modules/electron/install.js @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +const version = require('./package').version + +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) +} + +// downloads if not cached +downloadArtifact({ + version, + artifactName: 'electron', + force: process.env.force_no_cache === 'true', + cacheRoot: process.env.electron_config_cache, + platform: process.env.npm_config_platform || process.platform, + arch: process.env.npm_config_arch || process.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) { + return new Promise((resolve, reject) => { + extract(zipPath, { dir: path.join(__dirname, 'dist') }, err => { + if (err) return reject(err) + + fs.writeFile(path.join(__dirname, 'path.txt'), platformPath, err => { + if (err) return reject(err) + + resolve() + }) + }) + }) +} + +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) + } +} |
