refactor: type application config
This commit is contained in:
@@ -1,4 +1,37 @@
|
||||
// Configuration for the bot
|
||||
export const config = {
|
||||
verbose: process.argv.includes("-v") || process.argv.includes("--verbose"),
|
||||
export interface AppConfig {
|
||||
verbose: boolean;
|
||||
recordingsDir: string;
|
||||
recordingSegmentMs: number;
|
||||
decoderRotateMs: number;
|
||||
decoderCooldownMs: number;
|
||||
}
|
||||
|
||||
export function parseBoolean(
|
||||
value: string | undefined,
|
||||
fallback: boolean,
|
||||
): boolean {
|
||||
if (value === "true") return true;
|
||||
if (value === "false") return false;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
export function parsePositiveNumber(
|
||||
value: string | undefined,
|
||||
fallback: number,
|
||||
): number {
|
||||
const parsed = Number(value);
|
||||
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
||||
}
|
||||
|
||||
export function loadConfig(env: NodeJS.ProcessEnv = process.env): AppConfig {
|
||||
return {
|
||||
verbose: parseBoolean(env.VERBOSE, false),
|
||||
recordingsDir: env.RECORDINGS_DIR ?? "./recordings",
|
||||
recordingSegmentMs: parsePositiveNumber(env.RECORDING_SEGMENT_MS, 5_000),
|
||||
decoderRotateMs: parsePositiveNumber(env.DECODER_ROTATE_MS, 5_000),
|
||||
decoderCooldownMs: 30_000,
|
||||
};
|
||||
}
|
||||
|
||||
export const config = loadConfig();
|
||||
|
||||
17
tests/config.test.ts
Normal file
17
tests/config.test.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { parseBoolean, parsePositiveNumber } from "../src/config";
|
||||
|
||||
describe("config parsers", () => {
|
||||
it("parses boolean values", () => {
|
||||
expect(parseBoolean("true", false)).toBe(true);
|
||||
expect(parseBoolean("false", true)).toBe(false);
|
||||
expect(parseBoolean(undefined, true)).toBe(true);
|
||||
});
|
||||
|
||||
it("parses positive numbers", () => {
|
||||
expect(parsePositiveNumber("5000", 0)).toBe(5000);
|
||||
expect(parsePositiveNumber("0", 123)).toBe(123);
|
||||
expect(parsePositiveNumber("bad", 123)).toBe(123);
|
||||
expect(parsePositiveNumber(undefined, 123)).toBe(123);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user