UNPKG

@slonik/utilities

Version:

A Node.js PostgreSQL client with strict types, detailed logging and assertions.

65 lines (49 loc) 1.25 kB
import { type ConnectionOptions } from '@slonik/types'; import { stringify } from 'node:querystring'; type NamedParameters = { application_name?: string; options?: string; sslmode?: string; }; export const stringifyDsn = (connectionOptions: ConnectionOptions): string => { const { applicationName, databaseName, host, options, password, port, sslMode, username, } = connectionOptions; const tokens = ['postgresql://']; if (username) { tokens.push(encodeURIComponent(username)); if (password) { tokens.push(':', encodeURIComponent(password)); } tokens.push('@'); } tokens.push(host ?? ''); if (port) { tokens.push(':', String(port)); } if (databaseName) { tokens.push('/', encodeURIComponent(databaseName)); } const namedParameters: NamedParameters = {}; if (applicationName) { // eslint-disable-next-line canonical/id-match namedParameters.application_name = applicationName; } if (options) { namedParameters.options = options; } if (sslMode) { namedParameters.sslmode = sslMode; } if (Object.keys(namedParameters).length > 0) { tokens.push('?', stringify(namedParameters as {})); } return tokens.join(''); };