refactor(channels): share prefixed target parsing

This commit is contained in:
Peter Steinberger
2026-02-17 00:29:34 +00:00
parent 10b060dbd3
commit 64fc82844e
3 changed files with 35 additions and 34 deletions

View File

@@ -67,6 +67,23 @@ export function parseTargetPrefix(params: {
return id ? buildMessagingTarget(params.kind, id, params.raw) : undefined; return id ? buildMessagingTarget(params.kind, id, params.raw) : undefined;
} }
export function parseTargetPrefixes(params: {
raw: string;
prefixes: Array<{ prefix: string; kind: MessagingTargetKind }>;
}): MessagingTarget | undefined {
for (const entry of params.prefixes) {
const parsed = parseTargetPrefix({
raw: params.raw,
prefix: entry.prefix,
kind: entry.kind,
});
if (parsed) {
return parsed;
}
}
return undefined;
}
export function requireTargetKind(params: { export function requireTargetKind(params: {
platform: string; platform: string;
target: MessagingTarget | undefined; target: MessagingTarget | undefined;

View File

@@ -3,7 +3,7 @@ import {
buildMessagingTarget, buildMessagingTarget,
ensureTargetId, ensureTargetId,
parseTargetMention, parseTargetMention,
parseTargetPrefix, parseTargetPrefixes,
requireTargetKind, requireTargetKind,
type MessagingTarget, type MessagingTarget,
type MessagingTargetKind, type MessagingTargetKind,
@@ -33,22 +33,14 @@ export function parseDiscordTarget(
if (mentionTarget) { if (mentionTarget) {
return mentionTarget; return mentionTarget;
} }
const prefixedTarget = const prefixedTarget = parseTargetPrefixes({
parseTargetPrefix({ raw: trimmed,
raw: trimmed, prefixes: [
prefix: "user:", { prefix: "user:", kind: "user" },
kind: "user", { prefix: "channel:", kind: "channel" },
}) ?? { prefix: "discord:", kind: "user" },
parseTargetPrefix({ ],
raw: trimmed, });
prefix: "channel:",
kind: "channel",
}) ??
parseTargetPrefix({
raw: trimmed,
prefix: "discord:",
kind: "user",
});
if (prefixedTarget) { if (prefixedTarget) {
return prefixedTarget; return prefixedTarget;
} }

View File

@@ -2,7 +2,7 @@ import {
buildMessagingTarget, buildMessagingTarget,
ensureTargetId, ensureTargetId,
parseTargetMention, parseTargetMention,
parseTargetPrefix, parseTargetPrefixes,
requireTargetKind, requireTargetKind,
type MessagingTarget, type MessagingTarget,
type MessagingTargetKind, type MessagingTargetKind,
@@ -31,22 +31,14 @@ export function parseSlackTarget(
if (mentionTarget) { if (mentionTarget) {
return mentionTarget; return mentionTarget;
} }
const prefixedTarget = const prefixedTarget = parseTargetPrefixes({
parseTargetPrefix({ raw: trimmed,
raw: trimmed, prefixes: [
prefix: "user:", { prefix: "user:", kind: "user" },
kind: "user", { prefix: "channel:", kind: "channel" },
}) ?? { prefix: "slack:", kind: "user" },
parseTargetPrefix({ ],
raw: trimmed, });
prefix: "channel:",
kind: "channel",
}) ??
parseTargetPrefix({
raw: trimmed,
prefix: "slack:",
kind: "user",
});
if (prefixedTarget) { if (prefixedTarget) {
return prefixedTarget; return prefixedTarget;
} }