@clickup/pg-microsharding
Version:
Microshards support for PostgreSQL
25 lines (23 loc) • 759 B
text/typescript
import compact from "lodash/compact";
import uniq from "lodash/uniq";
import { isMasterDsn } from "./isMasterDsn";
import { normalizeDsn } from "./normalizeDsn";
import { promiseAllMap } from "./promiseAllMap";
/**
* Same as normalizeDsn(), but assumes comma separated list of DSNs. Also,
* allows passing numbers instead of DSNs; if so, the actual DSN will be chosen
* by the index from islandDsns argument.
*/
export async function normalizeDsns(
dsnsIn: string | undefined,
): Promise<string[]> {
const dsns = uniq(
compact(dsnsIn?.split(/[,\s]+/s).map((dsn) => normalizeDsn(dsn))),
);
const masterDsns = compact(
await promiseAllMap(dsns, async (dsn) =>
(await isMasterDsn(dsn)) ? dsn : null,
),
);
return masterDsns;
}