Files
JiboSDK/node_modules/electron-download/index.js
2026-03-22 03:21:45 +02:00

84 lines
2.9 KiB
JavaScript

var os = require('os')
var path = require('path')
var pathExists = require('path-exists')
var mkdir = require('mkdirp')
var nugget = require('nugget')
var homePath = require('home-path')
var mv = require('mv')
var debug = require('debug')('electron-download')
var npmrc = require('rc')('npm')
module.exports = function download (opts, cb) {
var platform = opts.platform || os.platform()
var arch = opts.arch || os.arch()
var version = opts.version
var symbols = opts.symbols || false
if (!version) return cb(new Error('must specify version'))
var filename = 'electron-v' + version + '-' + platform + '-' + arch + (symbols ? '-symbols' : '') + '.zip'
var url = process.env.NPM_CONFIG_ELECTRON_MIRROR ||
process.env.ELECTRON_MIRROR ||
opts.mirror ||
'https://github.com/atom/electron/releases/download/v'
url += version + '/electron-v' + version + '-' + platform + '-' + arch + (symbols ? '-symbols' : '') + '.zip'
var homeDir = homePath()
var cache = opts.cache || path.join(homeDir, './.electron')
var strictSSL = true
if (opts.strictSSL === false) {
strictSSL = false
}
var proxy
if (npmrc && npmrc.proxy) proxy = npmrc.proxy
if (npmrc && npmrc['https-proxy']) proxy = npmrc['https-proxy']
debug('info', {cache: cache, filename: filename, url: url})
var cachedZip = path.join(cache, filename)
pathExists(cachedZip, function (err, exists) {
if (err) return cb(err)
if (exists) {
debug('zip exists', cachedZip)
return cb(null, cachedZip)
}
debug('creating cache/tmp dirs')
// otherwise download it
mkCacheDir(function (err, actualCache) {
if (err) return cb(err)
cachedZip = path.join(actualCache, filename) // in case cache dir changed
// download to tmpdir
var tmpdir = path.join(os.tmpdir(), 'electron-tmp-download-' + process.pid + '-' + Date.now())
mkdir(tmpdir, function (err) {
if (err) return cb(err)
debug('downloading zip', url, 'to', tmpdir)
var nuggetOpts = {target: filename, dir: tmpdir, resume: true, verbose: true, strictSSL: strictSSL, proxy: proxy}
nugget(url, nuggetOpts, function (err) {
if (err) return cb(err)
// when dl is done then put in cache
debug('moving zip to', cachedZip)
mv(path.join(tmpdir, filename), cachedZip, function (err) {
if (err) return cb(err)
cb(null, cachedZip)
})
})
})
})
})
function mkCacheDir (cb) {
mkdir(cache, function (err) {
if (err) {
if (err.code !== 'EACCES') return cb(err)
// try local folder if homedir is off limits (e.g. some linuxes return '/' as homedir)
var localCache = path.resolve('./.electron')
return mkdir(localCache, function (err) {
if (err) return cb(err)
cb(null, localCache)
})
}
cb(null, cache)
})
}
}