Files
sci-gui-agent-benchmark/vscodeEvalExtension/node_modules/@vscode/test-electron/out/progress.js
2024-01-08 23:09:12 +08:00

107 lines
5.2 KiB
JavaScript

"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.ConsoleReporter = 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 || (exports.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 */
class ConsoleReporter {
constructor(showDownloadProgress) {
this.showDownloadProgress = showDownloadProgress;
}
report(report) {
switch (report.stage) {
case ProgressReportStage.ResolvedVersion:
this.version = report.version;
break;
case ProgressReportStage.ReplacingOldInsiders:
console.log(`Removing outdated Insiders at ${report.downloadedPath} and re-downloading.`);
console.log(`Old: ${report.oldHash} | ${report.oldDate.toISOString()}`);
console.log(`New: ${report.newHash} | ${report.newDate.toISOString()}`);
break;
case ProgressReportStage.FoundMatchingInstall:
console.log(`Found existing install in ${report.downloadedPath}. Skipping download`);
break;
case ProgressReportStage.ResolvingCDNLocation:
console.log(`Downloading VS Code ${this.version} from ${report.url}`);
break;
case ProgressReportStage.Downloading:
if (!this.showDownloadProgress && report.bytesSoFar === 0) {
console.log(`Downloading VS Code (${report.totalBytes}B)`);
}
else if (!this.downloadReport) {
this.downloadReport = { timeout: setTimeout(() => this.reportDownload(), 100), report };
}
else {
this.downloadReport.report = report;
}
break;
case ProgressReportStage.Retrying:
this.flushDownloadReport();
console.log(`Error downloading, retrying (attempt ${report.attempt} of ${report.totalAttempts}): ${report.error.message}`);
break;
case ProgressReportStage.NewInstallComplete:
this.flushDownloadReport();
console.log(`Downloaded VS Code into ${report.downloadedPath}`);
break;
}
}
error(err) {
console.error(err);
}
flushDownloadReport() {
if (this.showDownloadProgress) {
this.reportDownload();
console.log('');
}
}
reportDownload() {
if (!this.downloadReport) {
return;
}
const { totalBytes, bytesSoFar } = this.downloadReport.report;
this.downloadReport = undefined;
const percent = Math.max(0, Math.min(1, bytesSoFar / totalBytes));
const progressBarSize = 30;
const barTicks = Math.floor(percent * progressBarSize);
const progressBar = '='.repeat(barTicks) + '-'.repeat(progressBarSize - barTicks);
process.stdout.write(`\x1b[G\x1b[0KDownloading VS Code [${progressBar}] ${(percent * 100).toFixed()}%`);
}
}
exports.ConsoleReporter = ConsoleReporter;