From 2a62bb0252b8b47b8c5ff0e26516c62f7ae3c680 Mon Sep 17 00:00:00 2001 From: itsspriyansh Date: Fri, 17 May 2024 14:59:48 +0530 Subject: [PATCH] replace download with alternate package --- package-lock.json | 18 +++++++++ package.json | 2 + src/commands/android/utils/common.ts | 56 +++++++++++++++++++++------- 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b3e5c9..d31e1fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,10 +14,12 @@ "axios": "^1.1.2", "boxen": "5.1.2", "cli-progress": "^3.11.2", + "decompress": "^4.2.1", "dotenv": "^16.0.3", "download": "^8.0.0", "inquirer": "^8.2.4", "minimist": "^1.2.6", + "node-downloader-helper": "^2.1.6", "untildify": "^4.0.0", "which": "^2.0.2" }, @@ -5860,6 +5862,17 @@ "dev": true, "optional": true }, + "node_modules/node-downloader-helper": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", + "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==", + "bin": { + "ndh": "bin/ndh" + }, + "engines": { + "node": ">=14.18" + } + }, "node_modules/node-gyp-build": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", @@ -12253,6 +12266,11 @@ "dev": true, "optional": true }, + "node-downloader-helper": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", + "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==" + }, "node-gyp-build": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", diff --git a/package.json b/package.json index 84ff5ab..50b6897 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,12 @@ "axios": "^1.1.2", "boxen": "5.1.2", "cli-progress": "^3.11.2", + "decompress": "^4.2.1", "dotenv": "^16.0.3", "download": "^8.0.0", "inquirer": "^8.2.4", "minimist": "^1.2.6", + "node-downloader-helper": "^2.1.6", "untildify": "^4.0.0", "which": "^2.0.2" } diff --git a/src/commands/android/utils/common.ts b/src/commands/android/utils/common.ts index 5f6c2fc..ada0dd9 100644 --- a/src/commands/android/utils/common.ts +++ b/src/commands/android/utils/common.ts @@ -1,11 +1,13 @@ import colors from 'ansi-colors'; import axios, {AxiosResponse} from 'axios'; import cliProgress from 'cli-progress'; -import download from 'download'; +import decompress from 'decompress'; +import {DownloaderHelper} from 'node-downloader-helper'; import fs from 'fs'; import os from 'os'; import path from 'path'; import which from 'which'; +import fsP from 'fs/promises'; import {symbols} from '../../../utils'; import {ABI, AVAILABLE_OPTIONS, DEFAULT_CHROME_VERSIONS, DEFAULT_FIREFOX_VERSION, SDK_BINARY_LOCATIONS} from '../constants'; @@ -93,27 +95,53 @@ export const getBinaryLocation = (sdkRoot: string, platform: Platform, binaryNam }; export const downloadWithProgressBar = async (url: string, dest: string, extract = false) => { + const absoluteFolderPath = path.resolve(dest); + + // Check if the destination directory exists, if not, create it + if (!fs.existsSync(absoluteFolderPath)) { + fs.mkdirSync(absoluteFolderPath, { recursive: true }); + } + const progressBar = new cliProgress.Bar({ format: ' [{bar}] {percentage}% | ETA: {eta}s' }, cliProgress.Presets.shades_classic); - try { - const stream = download(url, dest, { - extract + const downloader = new DownloaderHelper(url, dest, { override: { skip: true } }); + + downloader.on('start', () => progressBar.start(100, 0)); + downloader.on('progress', (stats) => { + progressBar.update(stats.progress); + }); + + // Return a new promise to handle the asynchronous operation of decompressing the installed zip file. + return new Promise((resolve, reject) => { + downloader.on('end', async (downloadInfo) => { + progressBar.stop(); + if (extract) { + try { + await decompress(downloadInfo.filePath, dest); + // remove the zip file after extraction + await fsP.unlink(downloadInfo.filePath); + resolve(true); + } catch (error) { + console.error(`Error during decompression: ${error}`); + reject(error); + } + } else { + resolve(true); + } }); - progressBar.start(100, 0); - await stream.on('downloadProgress', function(progress) { - progressBar.update(progress.percent*100); + downloader.on('error', (error) => { + progressBar.stop(); + reject(error); }); - progressBar.stop(); - return true; - } catch { - progressBar.stop(); - - return false; - } + downloader.start().catch((error) => { + progressBar.stop(); + reject(error); + }); + }); }; export const getLatestVersion = async (browser: 'firefox' | 'chrome'): Promise => {