impl/typescript.ts
1,094 bytes · the TypeScript implementation · view raw
Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.
import { type CheckStatus } from "./monitor_check_status.ts"; ← from monitor.check-status ^1.0.0 · built alongside by fune
import { type ComponentState } from "./monitor_component_state_types.ts";
/**
* One component's state in Atlassian Statuspage's vocabulary. Maintenance
* wins, so planned work never pages anyone as an outage; the statuses are
* still checked, so a bad feed fails loudly even during maintenance.
*/
export function componentState(statuses: readonly CheckStatus[], underMaintenance: boolean): ComponentState {
if (statuses.length === 0) throw new RangeError("statuses must not be empty");
if (typeof underMaintenance !== "boolean") throw new TypeError("underMaintenance must be true or false");
let down = 0;
let degraded = 0;
for (const s of statuses) {
if (s === "down") down += 1;
else if (s === "degraded") degraded += 1;
else if (s !== "up") throw new RangeError(`unknown check status: ${String(s)}`);
}
if (underMaintenance) return "maintenance";
if (down === statuses.length) return "major-outage";
if (down > 0) return "partial-outage";
return degraded > 0 ? "degraded" : "operational";
}