PostgresEndpoint.fromOptions constructor

PostgresEndpoint.fromOptions(
  1. Map<String, Object?> options
)

Parses options — either a lone url key or manual keys; mixing the two (or passing an unknown key) throws ArgumentError.

Implementation

factory PostgresEndpoint.fromOptions(Map<String, Object?> options) {
  for (final key in options.keys) {
    if (!_knownKeys.contains(key)) {
      throw ArgumentError(
        "postgres adapter: unknown database option '$key' "
        '(expected: ${_knownKeys.join(', ')}).',
      );
    }
  }
  if (options['url'] case final Object? url?) {
    if (options.length > 1) {
      throw ArgumentError(
        "postgres adapter: 'url' cannot be combined with other "
        'database options.',
      );
    }
    if (url is! String || url.trim().isEmpty) {
      throw ArgumentError(
        "postgres adapter: 'url' must be a non-empty string.",
      );
    }
    return PostgresEndpoint._parseUrl(url.trim());
  }
  final database = options['database'];
  if (database is! String || database.trim().isEmpty) {
    throw ArgumentError(
      "postgres adapter: `database:` requires a non-empty 'database' name "
      "(or a single 'url').",
    );
  }
  return PostgresEndpoint(
    host: _string(options, 'host') ?? 'localhost',
    port: _port(options['port']),
    database: database.trim(),
    username: _string(options, 'username') ?? 'postgres',
    password: _string(options, 'password') ?? '',
    ssl: _bool(options, 'ssl') ?? true,
  );
}