84 lines
2.9 KiB
JavaScript
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)
|
|
})
|
|
}
|
|
}
|