|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env node
-
- const { version } = require('./package');
-
- 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);
- }
- }
|