UNPKG

9.46 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/electron/electron-download.ts"],"names":[],"mappings":"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","sourcesContent":["const debug = require(\"debug\")(\"electron-download\")\nconst envPaths = require(\"env-paths\")\nimport { download } from \"builder-util/out/binDownload\"\nimport { ensureDir, pathExists, rename, unlink } from \"fs-extra-p\"\nimport * as os from \"os\"\nimport * as path from \"path\"\n\nconst ChecksumValidator = require(\"sumchecker\").ChecksumValidator\n\nlet tmpFileCounter = 0\n\nexport type ElectronPlatformName = \"darwin\" | \"linux\" | \"win32\" | \"mas\"\n\nexport interface ElectronDownloadOptions {\n // https://github.com/electron-userland/electron-builder/issues/3077\n // must be optional\n version?: string\n\n /**\n * The [cache location](https://github.com/electron-userland/electron-download#cache-location).\n */\n cache?: string | null\n\n /**\n * The mirror.\n */\n mirror?: string | null\n\n /** @private */\n customDir?: string | null\n /** @private */\n customFilename?: string | null\n\n quiet?: boolean\n\n strictSSL?: boolean\n isVerifyChecksum?: boolean\n\n /** @private */\n force?: boolean\n\n platform?: ElectronPlatformName\n arch?: string\n}\n\n// noinspection SpellCheckingInspection\nconst checksumFilename = \"SHASUMS256.txt\"\n\nclass ElectronDownloader {\n private readonly options: ElectronDownloadOptions\n private cacheDir: string\n\n constructor(options: ElectronDownloadOptions) {\n if (!options.version) {\n throw new Error(\"version not specified\")\n }\n\n // use passed argument or XDG environment variable fallback to OS default\n this.options = {\n platform: os.platform() as ElectronPlatformName,\n arch: os.arch(),\n ...options,\n }\n\n this.options.isVerifyChecksum = this.options.isVerifyChecksum !== false\n this.cacheDir = this.options.cache || process.env.ELECTRON_CACHE || envPaths(\"electron\", {suffix: \"\"}).cache\n }\n\n get baseUrl() {\n return process.env.NPM_CONFIG_ELECTRON_MIRROR ||\n process.env.npm_config_electron_mirror ||\n process.env.ELECTRON_MIRROR ||\n this.options.mirror ||\n \"https://github.com/electron/electron/releases/download/v\"\n }\n\n get middleUrl() {\n return process.env.ELECTRON_CUSTOM_DIR || this.options.customDir || this.options.version\n }\n\n get urlSuffix() {\n return process.env.ELECTRON_CUSTOM_FILENAME || this.options.customFilename || this.filename\n }\n\n private get cachedChecksum() {\n return path.join(this.cacheDir, `${checksumFilename}-${this.options.version}`)\n }\n\n get checksumUrl() {\n return `${this.baseUrl}${this.middleUrl}/${checksumFilename}`\n }\n\n private get filename() {\n const type = `${this.options.platform}-${this.options.arch}`\n const suffix = `v${this.options.version}-${type}`\n return `electron-${suffix}.zip`\n }\n\n private async verifyFile(cachedFile: string, removeIfInvalid: boolean): Promise<boolean> {\n if (!this.options.isVerifyChecksum) {\n return true\n }\n\n debug(\"Verifying file with checksum\")\n if (!await pathExists(this.cachedChecksum)) {\n await this.downloadFile(this.checksumUrl, this.cachedChecksum)\n }\n\n const checker = new ChecksumValidator(\"sha256\", this.cachedChecksum)\n try {\n await checker.validate(path.dirname(cachedFile), path.basename(cachedFile))\n }\n catch (e) {\n if (!removeIfInvalid) {\n throw e\n }\n\n try {\n await unlink(cachedFile)\n }\n catch (ignore) {\n // ignore\n }\n return false\n }\n return true\n }\n\n private async downloadFile(url: string, destination: string) {\n const tempFileName = `tmp-${process.pid}-${(tmpFileCounter++).toString(16)}-${path.basename(destination)}`\n const cacheDir = this.cacheDir\n debug(\"downloading\", url, \"to\", cacheDir)\n const tempFile = path.join(cacheDir, tempFileName)\n await download(url, tempFile)\n\n debug(\"moving\", tempFile, \"from\", cacheDir, \"to\", destination)\n try {\n await rename(tempFile, destination)\n }\n catch (e) {\n try {\n await unlink(tempFile)\n }\n catch (cleanupError) {\n try {\n console.error(`Error deleting cache file: ${cleanupError.message}`)\n }\n catch (ignore) {\n // ignore\n }\n throw e\n }\n }\n }\n\n private get cachedZip() {\n return path.join(this.cacheDir, this.options.customFilename || this.filename)\n }\n\n async downloadIfNotCached(): Promise<string> {\n const url = `${this.baseUrl}${this.middleUrl}/${this.urlSuffix}`\n let cachedFile = this.cachedZip\n debug(\"info\", {cachedFile, url})\n const exists = await pathExists(cachedFile)\n if (exists) {\n debug(\"file exists\", cachedFile)\n if (await this.verifyFile(cachedFile, true)) {\n return cachedFile\n }\n }\n\n debug(\"creating cache dir\")\n try {\n await ensureDir(this.cacheDir)\n }\n catch (e) {\n if (e.code !== \"EACCES\") {\n throw e\n }\n\n // try local folder if homedir is off limits (e.g. some linuxes return '/' as homedir)\n const localCache = path.resolve(\"./.electron\")\n await ensureDir(localCache)\n this.cacheDir = localCache\n cachedFile = this.cachedZip\n }\n\n await this.downloadFile(url, cachedFile)\n await this.verifyFile(cachedFile, false)\n return cachedFile\n }\n}\n\nexport function downloadElectron(options: ElectronDownloadOptions): Promise<string> {\n return new ElectronDownloader(options).downloadIfNotCached()\n}\n"],"sourceRoot":""}