81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
function toMessageSidPart(value?: string | number | null): string {
|
|
if (typeof value === "string") {
|
|
return value.trim();
|
|
}
|
|
if (typeof value === "number" && Number.isFinite(value)) {
|
|
return String(Math.trunc(value));
|
|
}
|
|
return "";
|
|
}
|
|
|
|
export function parseZalouserMessageSidFull(
|
|
value?: string | number | null,
|
|
): { msgId: string; cliMsgId: string } | null {
|
|
const raw = toMessageSidPart(value);
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
const [msgIdPart, cliMsgIdPart] = raw.split(":").map((entry) => entry.trim());
|
|
if (!msgIdPart || !cliMsgIdPart) {
|
|
return null;
|
|
}
|
|
return { msgId: msgIdPart, cliMsgId: cliMsgIdPart };
|
|
}
|
|
|
|
export function resolveZalouserReactionMessageIds(params: {
|
|
messageId?: string;
|
|
cliMsgId?: string;
|
|
currentMessageId?: string | number;
|
|
}): { msgId: string; cliMsgId: string } | null {
|
|
const explicitMessageId = toMessageSidPart(params.messageId);
|
|
const explicitCliMsgId = toMessageSidPart(params.cliMsgId);
|
|
if (explicitMessageId && explicitCliMsgId) {
|
|
return { msgId: explicitMessageId, cliMsgId: explicitCliMsgId };
|
|
}
|
|
|
|
const parsedFromCurrent = parseZalouserMessageSidFull(params.currentMessageId);
|
|
if (parsedFromCurrent) {
|
|
return parsedFromCurrent;
|
|
}
|
|
|
|
const currentRaw = toMessageSidPart(params.currentMessageId);
|
|
if (!currentRaw) {
|
|
return null;
|
|
}
|
|
if (explicitMessageId && !explicitCliMsgId) {
|
|
return { msgId: explicitMessageId, cliMsgId: currentRaw };
|
|
}
|
|
if (!explicitMessageId && explicitCliMsgId) {
|
|
return { msgId: currentRaw, cliMsgId: explicitCliMsgId };
|
|
}
|
|
return { msgId: currentRaw, cliMsgId: currentRaw };
|
|
}
|
|
|
|
export function formatZalouserMessageSidFull(params: {
|
|
msgId?: string | null;
|
|
cliMsgId?: string | null;
|
|
}): string | undefined {
|
|
const msgId = toMessageSidPart(params.msgId);
|
|
const cliMsgId = toMessageSidPart(params.cliMsgId);
|
|
if (!msgId && !cliMsgId) {
|
|
return undefined;
|
|
}
|
|
if (msgId && cliMsgId) {
|
|
return `${msgId}:${cliMsgId}`;
|
|
}
|
|
return msgId || cliMsgId || undefined;
|
|
}
|
|
|
|
export function resolveZalouserMessageSid(params: {
|
|
msgId?: string | null;
|
|
cliMsgId?: string | null;
|
|
fallback?: string | null;
|
|
}): string | undefined {
|
|
const msgId = toMessageSidPart(params.msgId);
|
|
const cliMsgId = toMessageSidPart(params.cliMsgId);
|
|
if (msgId || cliMsgId) {
|
|
return msgId || cliMsgId;
|
|
}
|
|
return toMessageSidPart(params.fallback) || undefined;
|
|
}
|