70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
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
|