UNPKG

electron-updater

Version:

Cross platform auto-updater for electron applications

80 lines (75 loc) 2.75 kB
var directory = require('./directory.js'), path = require('path'), fs = require('fs'), async = require('async'), file = require('./file.js') var defaultRegistry = "https://registry.npmjs.org" function isDevDirectory(appDir, callback) { var gitDir = path.join(appDir, '.git') var svnDir = path.join(appDir, '.svn') fs.readdir(gitDir, function (err) { if(!err) return callback(true) fs.readdir(svnDir, function (err) { if(!err) return callback(true) callback(false) }) }) } function readNpmrc(appDir, callback) { var npmrc = path.join(appDir, '.npmrc') fs.readFile(npmrc, {encoding:'utf8'}, function (err, contents) { if (err) return callback(defaultRegistry) var registry = defaultRegistry var match = 'registry=' contents.split('\n').forEach(function (line) { line = line.trim() if(line.indexOf(match) === 0) { registry = line.substring(match.length).replace(/\n/g, '') return false } }) callback(registry) }) } function load(appDir, callback) { if(!appDir || !callback) throw new Error('Failed to load app context: invalid argument') isDevDirectory(appDir, function (dev) { readNpmrc(appDir, function (registry) { var packagePath = path.join(appDir, 'package.json') file.readJson(packagePath, function (err, package) { if (err) return callback(err) var name = package.name var version = package.version var publisher = package.publisher || name var defaultChannel = package.defaultChannel || 'latest' var appData = directory.appDir(publisher, name) var pendingUpdatePath = path.join(appData, '.update') var channelPath = path.join(appData, '.channel') fs.readFile(channelPath, {encoding: 'utf8'}, function (err, channel) { channel = channel || defaultChannel fs.readFile(pendingUpdatePath, {encoding: 'utf8'}, function (err, updateContents) { var updatePending = !err && updateContents === 'PENDING' var updateInProgress = !err && updateContents === 'INPROGRESS' var ctx = { name: name, version: version, publisher: publisher, channel: channel, dev: dev, updatePending: updatePending, updateInProgress: updateInProgress, registry: registry, appDir: appDir, dependencies: package.dependencies || {}, plugins: package.plugins || {} } callback(null, ctx) }) }) }) }) }) } module.exports = { load: load }