UNPKG

7.67 kBSource Map (JSON)View Raw
1{"version":3,"file":"binDownload.js","sourceRoot":"","sources":["../src/binDownload.ts"],"names":[],"mappings":"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","sourcesContent":["import { path7za } from \"7zip-bin\"\nimport BluebirdPromise from \"bluebird-lst\"\nimport _debug from \"debug\"\nimport { CancellationToken, DownloadOptions } from \"electron-builder-http\"\nimport { emptyDir, rename, unlink } from \"fs-extra-p\"\nimport * as path from \"path\"\nimport { getTempName } from \"temp-file\"\nimport { statOrNull } from \"./fs\"\nimport { log, warn } from \"./log\"\nimport { httpExecutor } from \"./nodeHttpExecutor\"\nimport { debug7zArgs, getCacheDirectory, spawn } from \"./util\"\n\nconst debug = _debug(\"electron-builder:binDownload\")\n\nconst versionToPromise = new Map<string, BluebirdPromise<string>>()\n\nexport function getBinFromBintray(name: string, version: string, sha2: string): Promise<string> {\n const dirName = `${name}-${version}`\n return getBin(name, dirName, `https://dl.bintray.com/electron-userland/bin/${dirName}.7z`, sha2)\n}\n\nexport function getBinFromGithub(name: string, version: string, checksum: string): Promise<string> {\n const dirName = `${name}-${version}`\n return getBin(name, dirName, `https://github.com/electron-userland/electron-builder-binaries/releases/download/${dirName}/${dirName}.7z`, checksum)\n}\n\nexport function getBin(name: string, dirName: string, url: string, checksum: string): Promise<string> {\n let promise = versionToPromise.get(dirName)\n // if rejected, we will try to download again\n if (promise != null && !promise.isRejected()) {\n return promise\n }\n\n promise = doGetBin(name, dirName, url, checksum) as BluebirdPromise<string>\n versionToPromise.set(dirName, promise)\n return promise\n}\n\n// we cache in the global location - in the home dir, not in the node_modules/.cache (https://www.npmjs.com/package/find-cache-dir) because\n// * don't need to find node_modules\n// * don't pollute user project dir (important in case of 1-package.json project structure)\n// * simplify/speed-up tests (don't download fpm for each test project)\nasync function doGetBin(name: string, dirName: string, url: string, checksum: string): Promise<string> {\n const cachePath = path.join(getCacheDirectory(), name)\n const dirPath = path.join(cachePath, dirName)\n\n const dirStat = await statOrNull(dirPath)\n //noinspection ES6MissingAwait\n if (dirStat != null && dirStat.isDirectory()) {\n debug(`Found existing ${name} ${dirPath}`)\n return dirPath\n }\n\n log(`Downloading ${dirName}, please wait`)\n\n // 7z cannot be extracted from the input stream, temp file is required\n const tempUnpackDir = path.join(cachePath, getTempName())\n const archiveName = `${tempUnpackDir}.7z`\n debug(`Download ${name} from ${url} to ${archiveName}`)\n // 7z doesn't create out dir, so, we don't create dir in parallel to download - dir creation will create parent dirs for archive file also\n await emptyDir(tempUnpackDir)\n const options: DownloadOptions = {\n skipDirCreation: true,\n cancellationToken: new CancellationToken(),\n }\n\n if (checksum.length === 64 && !checksum.includes(\"+\") && !checksum.includes(\"Z\") && !checksum.includes(\"=\")) {\n (options as any).sha2 = checksum\n }\n else {\n (options as any).sha512 = checksum\n }\n\n for (let attemptNumber = 1; attemptNumber < 4; attemptNumber++) {\n try {\n await httpExecutor.download(url, archiveName, options)\n }\n catch (e) {\n if (attemptNumber >= 3) {\n throw e\n }\n\n warn(`Cannot download ${name}, attempt #${attemptNumber}: ${e}`)\n await new BluebirdPromise((resolve, reject) => {\n setTimeout(() => httpExecutor.download(url, archiveName, options).then(resolve).catch(reject), 1000 * attemptNumber)\n })\n }\n }\n\n await spawn(path7za, debug7zArgs(\"x\").concat(archiveName, `-o${tempUnpackDir}`), {\n cwd: cachePath,\n })\n\n await BluebirdPromise.all([\n rename(tempUnpackDir, dirPath)\n .catch(e => {\n console.warn(`Cannot move downloaded ${name} into final location (another process downloaded faster?): ${e}`)\n }),\n unlink(archiveName),\n ])\n\n debug(`${name}} downloaded to ${dirPath}`)\n return dirPath\n}"]}