in src/js/bun/sql.ts [209:270]
function loadOptions(o) {
var hostname, port, username, password, database, tls, url, query, adapter;
const env = Bun.env;
if (o === undefined || (typeof o === "string" && o.length === 0)) {
const urlString = env.POSTGRES_URL || env.DATABASE_URL || env.PGURL || env.PG_URL;
if (urlString) {
url = new URL(urlString);
o = {};
}
} else if (o && typeof o === "object") {
if (o instanceof URL) {
url = o;
} else if (o?.url) {
const _url = o.url;
if (typeof _url === "string") {
url = new URL(_url);
} else if (_url && typeof _url === "object" && _url instanceof URL) {
url = _url;
}
}
} else if (typeof o === "string") {
url = new URL(o);
}
if (url) {
({ hostname, port, username, password, protocol: adapter } = o = url);
if (adapter[adapter.length - 1] === ":") {
adapter = adapter.slice(0, -1);
}
const queryObject = url.searchParams.toJSON();
query = "";
for (const key in queryObject) {
query += `${encodeURIComponent(key)}=${encodeURIComponent(queryObject[key])} `;
}
query = query.trim();
}
if (!o) {
o = {};
}
hostname ||= o.hostname || o.host || env.PGHOST || "localhost";
port ||= Number(o.port || env.PGPORT || 5432);
username ||= o.username || o.user || env.PGUSERNAME || env.PGUSER || env.USER || env.USERNAME || "postgres";
database ||= o.database || o.db || (url?.pathname ?? "").slice(1) || env.PGDATABASE || username;
password ||= o.password || o.pass || env.PGPASSWORD || "";
tls ||= o.tls || o.ssl;
adapter ||= o.adapter || "postgres";
port = Number(port);
if (!Number.isSafeInteger(port) || port < 1 || port > 65535) {
throw new Error(`Invalid port: ${port}`);
}
if (adapter && !(adapter === "postgres" || adapter === "postgresql")) {
throw new Error(`Unsupported adapter: ${adapter}. Only \"postgres\" is supported for now`);
}
return { hostname, port, username, password, database, tls, query };
}