export function loadConfig(env = process.env) { const serverName = requireEnv(env, "SERVER_NAME"); const databases = parseList(env.DATABASES); const defaultDatabase = (env.DATABASE_NAME?.trim() || databases[0] || "").trim(); if (!defaultDatabase) { throw new Error("DATABASE_NAME or DATABASES must be configured."); } const allowedDatabases = mergeUnique([defaultDatabase, ...databases]); return { serverName, defaultDatabase, allowedDatabases, user: optional(env.DB_USER), password: optional(env.DB_PASSWORD), readOnly: parseBoolean(env.READONLY, false), enableDdl: parseBoolean(env.ENABLE_DDL, false), encrypt: parseBoolean(env.DB_ENCRYPT ?? env.ENCRYPT, false), trustServerCertificate: parseBoolean(env.TRUST_SERVER_CERTIFICATE, false), connectionTimeoutMs: parsePositiveInt(env.CONNECTION_TIMEOUT, 30) * 1000, requestTimeoutMs: parsePositiveInt(env.QUERY_TIMEOUT_MS, 30000), maxRows: parsePositiveInt(env.MAX_ROWS, 1000), maxWriteRows: parsePositiveInt(env.MAX_WRITE_ROWS, 100) }; } function requireEnv(env, name) { const value = env[name]?.trim(); if (!value) { throw new Error(`${name} must be configured.`); } return value; } function optional(value) { const trimmed = value?.trim(); return trimmed ? trimmed : undefined; } function parseList(value) { return (value ?? "") .split(",") .map((item) => item.trim()) .filter(Boolean); } function parseBoolean(value, fallback) { if (value === undefined || value.trim() === "") { return fallback; } return ["1", "true", "yes", "y", "on"].includes(value.trim().toLowerCase()); } function parsePositiveInt(value, fallback) { if (value === undefined || value.trim() === "") { return fallback; } const parsed = Number.parseInt(value, 10); if (!Number.isFinite(parsed) || parsed <= 0) { throw new Error(`Expected a positive integer but received '${value}'.`); } return parsed; } function mergeUnique(values) { const seen = new Set(); const result = []; for (const value of values) { const key = value.toLowerCase(); if (!seen.has(key)) { seen.add(key); result.push(value); } } return result; } //# sourceMappingURL=config.js.map