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;
}
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: {
platform: string;
target: MessagingTarget | undefined;

View File

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

View File

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