import {
normalizeOptionalString,
normalizeOptionalThreadValue,
} from "../../shared/string-coerce.js" ;
import { normalizeChatChannelId } from "../registry.js" ;
import { getChannelPlugin, normalizeChannelId } from "./index.js" ;
import type {
ComparableChannelTarget,
ParsedChannelExplicitTarget,
} from "./target-parsing-loaded.js" ;
export {
comparableChannelTargetsMatch,
comparableChannelTargetsShareRoute,
parseExplicitTargetForLoadedChannel,
resolveComparableTargetForLoadedChannel,
} from "./target-parsing-loaded.js" ;
export type {
ComparableChannelTarget,
ParsedChannelExplicitTarget,
} from "./target-parsing-loaded.js" ;
function parseWithPlugin(
getPlugin: (channel: string) => ReturnType<typeof getChannelPlugin>,
rawChannel: string,
rawTarget: string,
): ParsedChannelExplicitTarget | null {
const channel = normalizeChatChannelId(rawChannel) ?? normalizeChannelId(rawChannel);
if (!channel) {
return null ;
}
return getPlugin(channel)?.messaging?.parseExplicitTarget?.({ raw: rawTarget }) ?? null ;
}
export function parseExplicitTargetForChannel(
channel: string,
rawTarget: string,
): ParsedChannelExplicitTarget | null {
return parseWithPlugin(getChannelPlugin, channel, rawTarget);
}
export function resolveComparableTargetForChannel(params: {
channel: string;
rawTarget?: string | null ;
fallbackThreadId?: string | number | null ;
}): ComparableChannelTarget | null {
const rawTo = normalizeOptionalString(params.rawTarget);
if (!rawTo) {
return null ;
}
const parsed = parseExplicitTargetForChannel(params.channel, rawTo);
const fallbackThreadId = normalizeOptionalThreadValue(params.fallbackThreadId);
return {
rawTo,
to: parsed?.to ?? rawTo,
threadId: normalizeOptionalThreadValue(parsed?.threadId ?? fallbackThreadId),
chatType: parsed?.chatType,
};
}
Messung V0.5 in Prozent C=97 H=98 G=97
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-04)
¤
*© Formatika GbR, Deutschland