UNPKG

@quenty/cli-output-helpers

Version:

Helpers to generate Nevermore package and game templates

87 lines 2.56 kB
import { BaseReporter } from '../reporter.js'; /** * Centralized state container for a live batch run. * Extends BaseReporter to receive lifecycle hooks and mutate state. * Reporters read from it via the IStateTracker interface. */ export class LiveStateTracker extends BaseReporter { _packages; _startTimeMs = 0; _completed = 0; _failures = []; _allResults = []; constructor(packageNames) { super(); this._packages = new Map(); for (const name of packageNames) { this._packages.set(name, { name, status: 'pending' }); } } get total() { return this._packages.size; } get completed() { return this._completed; } get startTimeMs() { return this._startTimeMs; } getPackage(name) { return this._packages.get(name); } getAllPackages() { return [...this._packages.values()]; } getResults() { return this._allResults; } getFailures() { return this._failures; } getCurrentPhase(name) { return this._packages.get(name)?.status; } async startAsync() { this._startTimeMs = Date.now(); } onPackageStart(name) { const state = this._packages.get(name); if (!state) return; state.status = 'building'; state.startMs = Date.now(); } onPackagePhaseChange(name, phase) { const state = this._packages.get(name); if (!state) return; if (state.status === 'passed' || state.status === 'failed') return; // don't regress terminal states state.status = phase; state.progress = undefined; // clear progress on phase transition } onPackageProgressUpdate(name, progress) { const state = this._packages.get(name); if (!state) return; state.progress = progress; } onPackageResult(result, bufferedOutput) { const state = this._packages.get(result.packageName); if (!state) return; state.status = result.success ? 'passed' : 'failed'; state.durationMs = result.durationMs; state.result = result; state.bufferedOutput = bufferedOutput; if (result.progressSummary) { state.progress = result.progressSummary; } this._completed++; this._allResults.push(result); if (!result.success) { this._failures.push(result); } } } //# sourceMappingURL=live-state-tracker.js.map