fix(kafka): support cluster address separators
Co-authored-by: zipg <4047349+zipg@users.noreply.github.com>
This commit is contained in:
1 parent
51693bf296
commit
a212ccbfa7
3 files changed
+60
-28
No files matched your search
@@ -0,0 +1,33 @@
|
||||
const KAFKA_BOOTSTRAP_SERVER_SEPARATOR = /[\s,;,;]+/u;
|
||||
|
||||
function requireKafkaBootstrapServers(value: string): string {
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed) throw new Error("Kafka bootstrap servers are required");
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
function normalizeKafkaBootstrapServer(server: string): string {
|
||||
if (server.includes("://")) {
|
||||
throw new Error("Kafka bootstrap servers must be host:port values without a URL scheme");
|
||||
}
|
||||
let parsed: URL;
|
||||
try {
|
||||
parsed = new URL(`kafka://${server}`);
|
||||
} catch {
|
||||
throw new Error("Kafka bootstrap servers are invalid");
|
||||
}
|
||||
if (!parsed.hostname || parsed.username || parsed.password || parsed.search || parsed.hash || (parsed.pathname && parsed.pathname !== "/")) {
|
||||
throw new Error("Kafka bootstrap servers are invalid");
|
||||
}
|
||||
return server;
|
||||
}
|
||||
|
||||
export function normalizeKafkaBootstrapServers(value: string): string {
|
||||
const servers = requireKafkaBootstrapServers(value)
|
||||
.split(KAFKA_BOOTSTRAP_SERVER_SEPARATOR)
|
||||
.map((server) => server.trim())
|
||||
.filter(Boolean)
|
||||
.map(normalizeKafkaBootstrapServer);
|
||||
if (!servers.length) throw new Error("Kafka bootstrap servers are required");
|
||||
return servers.join(",");
|
||||
}
|
||||
Reference in new issue
Block a user