export type BooleanParseOptions = { truthy?: string[]; falsy?: string[]; }; const DEFAULT_TRUTHY = ["true", "1", "yes", "on"] as const; const DEFAULT_FALSY = ["false", "0", "no", "off"] as const; const DEFAULT_TRUTHY_SET = new Set(DEFAULT_TRUTHY); const DEFAULT_FALSY_SET = new Set(DEFAULT_FALSY); export function parseBooleanValue( value: unknown, options: BooleanParseOptions = {}, ): boolean | undefined { if (typeof value === "boolean") return value; if (typeof value !== "string") return undefined; const normalized = value.trim().toLowerCase(); if (!normalized) return undefined; const truthy = options.truthy ?? DEFAULT_TRUTHY; const falsy = options.falsy ?? DEFAULT_FALSY; const truthySet = truthy === DEFAULT_TRUTHY ? DEFAULT_TRUTHY_SET : new Set(truthy); const falsySet = falsy === DEFAULT_FALSY ? DEFAULT_FALSY_SET : new Set(falsy); if (truthySet.has(normalized)) return true; if (falsySet.has(normalized)) return false; return undefined; }