@httpx/dsn-parser
Version:
DSN & JDBC string parser with query params support in a tiny and modern package.
56 lines (49 loc) • 1.75 kB
text/typescript
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 };