0.1.5Updated 12 days ago
import type { ClientOptions } from 'jsr:@db/postgres';

const HOST = Deno.env.get('POSTGRESQL_HOST')!;
const PORT = Deno.env.get('POSTGRESQL_PORT')!;
const USERNAME = Deno.env.get('POSTGRESQL_USERNAME')!;
const PASSWORD = Deno.env.get('POSTGRESQL_PASSWORD')!;
const DATABASE = Deno.env.get('POSTGRESQL_DATABASE')!;

const tls_input = Deno.env.get('POSTGRESQL_TLS')?.toLowerCase();
const TLS = (tls_input !== undefined) && (tls_input == 'true' || tls_input == '1' || tls_input.startsWith('y'));

const auto_input = Deno.env.get('POSTGRESQL_AUTO_CONNECT')?.toLowerCase();
const AUTO_CONNECT = (auto_input !== undefined) && (auto_input == 'true' || auto_input == '1' || auto_input.startsWith('y'));

let POOL_COUNT = Number(Deno.env.get('POSTGRESQL_POOL_COUNT'));
if(!Number.isSafeInteger(POOL_COUNT) || POOL_COUNT < 1 || POOL_COUNT > 20) POOL_COUNT = 3;

if(AUTO_CONNECT) {
  const errors: string[] = [];
  
  if(!HOST) errors.push('POSTGRESQL_HOST');
  if(!PORT) errors.push('POSTGRESQL_PORT');
  if(!USERNAME) errors.push('POSTGRESQL_USERNAME');
  if(!PASSWORD) errors.push('POSTGRESQL_PASSWORD');
  if(!DATABASE) errors.push('POSTGRESQL_DATABASE');
  
  if(errors.length > 0) throw new Error(`Missing PostgreSQL environment variables! [${errors.join(' | ')}]`);
}

const Environment = {
  options: {
    hostname: HOST,
    port: PORT,
    user: USERNAME,
    password: PASSWORD,
    database: DATABASE,
    tls: {
      enabled: TLS
    }
  } satisfies ClientOptions,
  values: {
    HOST,
    PORT,
    USERNAME,
    PASSWORD,
    DATABASE,
  },
  POOL_COUNT,
  AUTO_CONNECT
};

export default Environment;