import { Bech32Regex } from "@snort/shared"; import { ReactNode } from "react"; import AppleMusicEmbed from "@/Components/Embed/AppleMusicEmbed"; import LinkPreview from "@/Components/Embed/LinkPreview"; import MagnetLink from "@/Components/Embed/MagnetLink"; import MixCloudEmbed from "@/Components/Embed/MixCloudEmbed"; import NostrLink from "@/Components/Embed/NostrLink"; import SoundCloudEmbed from "@/Components/Embed/SoundCloudEmded"; import SpotifyEmbed from "@/Components/Embed/SpotifyEmbed"; import TidalEmbed from "@/Components/Embed/TidalEmbed"; import TwitchEmbed from "@/Components/Embed/TwitchEmbed"; import WavlakeEmbed from "@/Components/Embed/WavlakeEmbed"; import YoutubeEmbed from "@/Components/Embed/YoutubeEmbed"; import { magnetURIDecode } from "@/Utils"; import { AppleMusicRegex, MixCloudRegex, SoundCloudRegex, SpotifyRegex, TidalRegex, TwitchRegex, WavlakeRegex, YoutubeUrlRegex, } from "@/Utils/Const"; interface HypeTextProps { link: string; children?: ReactNode | Array | null; depth?: number; showLinkPreview?: boolean; } export default function HyperText({ link, depth, showLinkPreview, children }: HypeTextProps) { const a = link; try { const url = new URL(a); let m = null; if (a.match(YoutubeUrlRegex)) { return ; } else if (a.match(TidalRegex)) { return ; } else if (a.match(SoundCloudRegex)) { return ; } else if (a.match(MixCloudRegex)) { return ; } else if (a.match(SpotifyRegex)) { return ; } else if (a.match(TwitchRegex)) { return ; } else if (a.match(AppleMusicRegex)) { return ; } else if (a.match(WavlakeRegex)) { return ; } else if (url.protocol === "nostr:" || url.protocol === "web+nostr:") { return ; } else if (url.protocol === "magnet:") { const parsed = magnetURIDecode(a); if (parsed) { return ; } } else if ((m = a.match(Bech32Regex)) != null) { return ; } else if (showLinkPreview ?? true) { return ; } } catch { // Ignore the error. } return ( e.stopPropagation()} target="_blank" rel="noreferrer" className="ext"> {children ?? a} ); }