type ParsedDsn = {
    db?: string;
    driver: string;
    host: string;
    /** Query params */
    params?: Record<string, boolean | number | string>;
    pass?: string;
    port?: number;
    user?: string;
};
type ParseDsnOptions = {
    /** Whether to lowercase parsed driver name, default: false */
    lowercaseDriver?: boolean;
    /** Overrides parsed values by those one (except query params) */
    overrides?: Omit<Partial<ParsedDsn>, 'params'>;
};
declare const errorReasons: {
    readonly EMPTY_DSN: "DSN cannot be empty";
    readonly INVALID_ARGUMENT: "DSN must be a string";
    readonly INVALID_PORT: "Invalid port";
    readonly PARSE_ERROR: "Cannot parse DSN";
};
type ErrorReasons = keyof typeof errorReasons;
type ParserSuccessResult = {
    success: true;
    value: ParsedDsn;
};
type ParserErrorResult = {
    message: string;
    reason: ErrorReasons;
    success: false;
};
type ParserResult = ParserErrorResult | ParserSuccessResult;
declare const tag: unique symbol;
type WeakOpaqueContainer<Token> = {
    readonly [tag]: Token;
};
type ParsableDsn = string & WeakOpaqueContainer<'ParsableDsn'>;

/**
 * @throws Error when not parsable
 */
declare const assertParsableDsn: (dsn: unknown, msg?: string) => asserts dsn is ParsableDsn;

declare const convertJdbcToDsn: (jdbc: string) => string;

declare const isParsableDsn: (dsn: unknown) => dsn is ParsableDsn;

declare const parseDsn: (dsn: unknown, options?: ParseDsnOptions) => ParserResult;

declare const parseDsnOrThrow: (dsn: unknown, options?: ParseDsnOptions & {
    errorMsgPrefix?: string;
}) => ParsedDsn;

export { type ParsableDsn, type ParseDsnOptions, type ParsedDsn, assertParsableDsn, convertJdbcToDsn, isParsableDsn, parseDsn, parseDsnOrThrow };
