@quenty/cli-output-helpers
Version:
Helpers to generate Nevermore package and game templates
66 lines • 2.05 kB
JavaScript
import * as fs from 'fs/promises';
/**
* Batch state loaded from a previously-saved BatchSummary JSON file.
* All packages are already in their final passed/failed state.
*/
export class LoadedStateTracker {
_packages;
_results;
_failures;
_startTimeMs;
constructor(packages, results, failures, startTimeMs) {
this._packages = packages;
this._results = results;
this._failures = failures;
this._startTimeMs = startTimeMs;
}
static async fromFileAsync(filePath) {
const raw = await fs.readFile(filePath, 'utf-8');
const summary = JSON.parse(raw);
return LoadedStateTracker.fromSummary(summary);
}
static fromSummary(summary) {
const packages = new Map();
const failures = [];
for (const result of summary.packages) {
packages.set(result.packageName, {
name: result.packageName,
status: result.success ? 'passed' : 'failed',
durationMs: result.durationMs,
result,
progress: result.progressSummary,
});
if (!result.success) {
failures.push(result);
}
}
// Set startTimeMs so that Date.now() - startTimeMs ≈ summary.durationMs
const startTimeMs = Date.now() - summary.summary.durationMs;
return new LoadedStateTracker(packages, summary.packages, failures, startTimeMs);
}
get total() {
return this._packages.size;
}
get completed() {
return this._packages.size;
}
get startTimeMs() {
return this._startTimeMs;
}
getPackage(name) {
return this._packages.get(name);
}
getAllPackages() {
return [...this._packages.values()];
}
getResults() {
return this._results;
}
getFailures() {
return this._failures;
}
getCurrentPhase(name) {
return this._packages.get(name)?.status;
}
}
//# sourceMappingURL=loaded-state-tracker.js.map