feat(boulder-state): add formatDurationHuman utility

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-05-11 13:35:59 +09:00
parent 0c6805cc62
commit 42db7078af
3 changed files with 49 additions and 0 deletions
@@ -0,0 +1,32 @@
import { describe, expect, it } from "bun:test"
import { formatDurationHuman } from "./format-duration"
describe("formatDurationHuman", () => {
it("returns 0s for 0ms", () => {
expect(formatDurationHuman(0)).toBe("0s")
})
it("returns 0s for 999ms", () => {
expect(formatDurationHuman(999)).toBe("0s")
})
it("returns 1s for 1000ms", () => {
expect(formatDurationHuman(1000)).toBe("1s")
})
it("returns 1m 0s for 60_000ms", () => {
expect(formatDurationHuman(60_000)).toBe("1m 0s")
})
it("returns 1h 0m 0s for 3_600_000ms", () => {
expect(formatDurationHuman(3_600_000)).toBe("1h 0m 0s")
})
it("returns 1h 2m 3s for 3_723_456ms", () => {
expect(formatDurationHuman(3_723_456)).toBe("1h 2m 3s")
})
it("returns 24h 0m 0s for 86_400_000ms", () => {
expect(formatDurationHuman(86_400_000)).toBe("24h 0m 0s")
})
})
@@ -0,0 +1,16 @@
export function formatDurationHuman(milliseconds: number): string {
const totalSeconds = Math.max(0, Math.floor(milliseconds / 1000))
const hours = Math.floor(totalSeconds / 3600)
const minutes = Math.floor((totalSeconds % 3600) / 60)
const seconds = totalSeconds % 60
if (hours > 0) {
return `${hours}h ${minutes}m ${seconds}s`
}
if (minutes > 0) {
return `${minutes}m ${seconds}s`
}
return `${seconds}s`
}
+1
View File
@@ -2,3 +2,4 @@ export * from "./types"
export * from "./constants"
export * from "./storage"
export * from "./top-level-task"
export * from "./format-duration"