@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
JavaScript
// 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
};
}