mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 18:31:52 +00:00
34 lines
883 B
TypeScript
34 lines
883 B
TypeScript
import { Trigger } from "."
|
|
import { HealthStatus } from "../types"
|
|
|
|
export type LastStatusTriggerParams = { [k in HealthStatus]?: Trigger } & {
|
|
default: Trigger
|
|
}
|
|
|
|
export function lastStatus(o: LastStatusTriggerParams): Trigger {
|
|
return async function* (getInput) {
|
|
let trigger = o.default(getInput)
|
|
const triggers: {
|
|
[k in HealthStatus]?: AsyncIterator<unknown, unknown, never>
|
|
} & { default: AsyncIterator<unknown, unknown, never> } = {
|
|
default: trigger,
|
|
}
|
|
while (true) {
|
|
let currentValue = getInput()
|
|
let prev: HealthStatus | "default" | undefined = currentValue.lastResult
|
|
if (!prev) {
|
|
yield
|
|
continue
|
|
}
|
|
if (!(prev in o)) {
|
|
prev = "default"
|
|
}
|
|
if (!triggers[prev]) {
|
|
triggers[prev] = o[prev]!(getInput)
|
|
}
|
|
await triggers[prev]?.next()
|
|
yield
|
|
}
|
|
}
|
|
}
|