refactor: type application config
This commit is contained in:
@@ -1,4 +1,37 @@
|
|||||||
// Configuration for the bot
|
// Configuration for the bot
|
||||||
export const config = {
|
export interface AppConfig {
|
||||||
verbose: process.argv.includes("-v") || process.argv.includes("--verbose"),
|
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