| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- "use strict";
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.makeConsoleReporter = exports.SilentReporter = exports.ProgressReportStage = void 0;
- /** Stages of progress while downloading VS Code */
- var ProgressReportStage;
- (function (ProgressReportStage) {
- /** Initial fetch of the latest version if not explicitly given */
- ProgressReportStage["FetchingVersion"] = "fetchingVersion";
- /** Always fired when the version is determined. */
- ProgressReportStage["ResolvedVersion"] = "resolvedVersion";
- /** Fired before fetching info about the latest Insiders version, when requesting insiders builds */
- ProgressReportStage["FetchingInsidersMetadata"] = "fetchingInsidersMetadata";
- /** Fired if the current Insiders is out of date */
- ProgressReportStage["ReplacingOldInsiders"] = "replacingOldInsiders";
- /** Fired when an existing install is found which does not require a download */
- ProgressReportStage["FoundMatchingInstall"] = "foundMatchingInstall";
- /** Fired before the URL to the download zip or tarball is looked up */
- ProgressReportStage["ResolvingCDNLocation"] = "resolvingCDNLocation";
- /** Fired continuously while a download happens */
- ProgressReportStage["Downloading"] = "downloading";
- /** Fired when the command is issued to do a synchronous extraction. May not fire depending on the platform and options. */
- ProgressReportStage["ExtractingSynchonrously"] = "extractingSynchonrously";
- /** Fired when the download fails and a retry will be attempted */
- ProgressReportStage["Retrying"] = "retrying";
- /** Fired after folder is downloaded and unzipped */
- ProgressReportStage["NewInstallComplete"] = "newInstallComplete";
- })(ProgressReportStage || (exports.ProgressReportStage = ProgressReportStage = {}));
- /** Silent progress reporter */
- class SilentReporter {
- report() {
- // no-op
- }
- error() {
- // no-op
- }
- }
- exports.SilentReporter = SilentReporter;
- /** Default progress reporter that logs VS Code download progress to console */
- const makeConsoleReporter = async () => {
- // needs to be async targeting Node 16 because ora is an es module that cannot be required
- const { default: ora } = await import('ora');
- let version;
- let spinner = ora('Resolving version...').start();
- function toMB(bytes) {
- return (bytes / 1024 / 1024).toFixed(2);
- }
- return {
- error(err) {
- if (spinner) {
- spinner?.fail(`Error: ${err}`);
- spinner = undefined;
- }
- else {
- console.error(err);
- }
- },
- report(report) {
- switch (report.stage) {
- case ProgressReportStage.ResolvedVersion:
- version = report.version;
- spinner?.succeed(`Validated version: ${version}`);
- spinner = undefined;
- break;
- case ProgressReportStage.ReplacingOldInsiders:
- spinner?.succeed();
- spinner = ora(`Updating Insiders ${report.oldHash} (${report.oldDate.toISOString()}) -> ${report.newHash}`).start();
- break;
- case ProgressReportStage.FoundMatchingInstall:
- spinner?.succeed();
- spinner = undefined;
- ora(`Found existing install in ${report.downloadedPath}`).succeed();
- break;
- case ProgressReportStage.ResolvingCDNLocation:
- spinner?.succeed();
- spinner = ora(`Found at ${report.url}`).start();
- break;
- case ProgressReportStage.Downloading:
- if (report.bytesSoFar === 0) {
- spinner?.succeed();
- spinner = ora(`Downloading (${toMB(report.totalBytes)} MB)`).start();
- }
- else if (spinner) {
- if (report.bytesSoFar === report.totalBytes) {
- spinner.text = 'Extracting...';
- }
- else {
- const percent = Math.max(0, Math.min(1, report.bytesSoFar / report.totalBytes));
- const size = `${toMB(report.bytesSoFar)}/${toMB(report.totalBytes)}MB`;
- spinner.text = `Downloading VS Code: ${size} (${(percent * 100).toFixed()}%)`;
- }
- }
- break;
- case ProgressReportStage.Retrying:
- spinner?.fail(`Error downloading, retrying (attempt ${report.attempt} of ${report.totalAttempts}): ${report.error.message}`);
- spinner = undefined;
- break;
- case ProgressReportStage.NewInstallComplete:
- spinner?.succeed(`Downloaded VS Code into ${report.downloadedPath}`);
- spinner = undefined;
- break;
- }
- },
- };
- };
- exports.makeConsoleReporter = makeConsoleReporter;
|