@gguf/claw
Version:
Multi-channel AI gateway with extensible messaging integrations
45 lines (44 loc) • 1.48 kB
JavaScript
//#region src/channels/targets.ts
function normalizeTargetId(kind, id) {
return `${kind}:${id}`.toLowerCase();
}
function buildMessagingTarget(kind, id, raw) {
return {
kind,
id,
raw,
normalized: normalizeTargetId(kind, id)
};
}
function ensureTargetId(params) {
if (!params.pattern.test(params.candidate)) throw new Error(params.errorMessage);
return params.candidate;
}
function parseTargetMention(params) {
const match = params.raw.match(params.mentionPattern);
if (!match?.[1]) return;
return buildMessagingTarget(params.kind, match[1], params.raw);
}
function parseTargetPrefix(params) {
if (!params.raw.startsWith(params.prefix)) return;
const id = params.raw.slice(params.prefix.length).trim();
return id ? buildMessagingTarget(params.kind, id, params.raw) : void 0;
}
function parseTargetPrefixes(params) {
for (const entry of params.prefixes) {
const parsed = parseTargetPrefix({
raw: params.raw,
prefix: entry.prefix,
kind: entry.kind
});
if (parsed) return parsed;
}
}
function requireTargetKind(params) {
const kindLabel = params.kind;
if (!params.target) throw new Error(`${params.platform} ${kindLabel} id is required.`);
if (params.target.kind !== params.kind) throw new Error(`${params.platform} ${kindLabel} id is required (use ${kindLabel}:<id>).`);
return params.target.id;
}
//#endregion
export { requireTargetKind as a, parseTargetPrefixes as i, ensureTargetId as n, parseTargetMention as r, buildMessagingTarget as t };