UNPKG

@lobehub/editor

Version:

A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.

43 lines (40 loc) 1.34 kB
// Re-export shared URL validation from utils export { isValidUrl } from "../../../utils/url"; // URL validation regex that matches common URL patterns for extraction var urlRegExp = new RegExp(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\w$&+,:;=-]+@)?[\d.A-Za-z-]+|(?:www.|[\w$&+,:;=-]+@)[\d.A-Za-z-]+)((?:\/[%+./~\w-_]*)?\??[\w%&+.;=@-]*#?\w*)?)/); /** * Sanitizes a URL to ensure it's safe to use * @param url - The URL to sanitize * @returns The sanitized URL */ export function sanitizeUrl(url) { var SUPPORTED_URL_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'sms:', 'tel:']); try { var parsedUrl = new URL(url); if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) { return 'about:blank'; } } catch (_unused) { return url; } return url; } /** * Extracts URL from text * @param text - The text to extract URL from * @returns The extracted URL information or null */ export function extractUrlFromText(text) { var _index; var match = urlRegExp.exec(text); if (!match) return null; var raw = match[0]; var start = (_index = match.index) !== null && _index !== void 0 ? _index : text.indexOf(raw); // Trim trailing punctuation that often follows inline links var trimmed = raw.replace(/[\),\.:;\]]+$/, ''); return { index: start, length: trimmed.length, url: trimmed }; }