//#region src/components/pisellUrl/utils/urlValidator.ts
/**
* URL 校验工具函数
*/
/**
* URL 格式校验（使用 URL 构造函数）
* @param url URL 地址
* @returns 是否通过校验
* 
* @example
* validateUrl('https://example.com') // true
* validateUrl('invalid-url') // false
*/
function validateUrl(url) {
	if (!url) return true;
	try {
		new URL(url);
		return true;
	} catch (error) {
		return false;
	}
}
/**
* 解析 URL 各部分
* @param url URL 地址
* @returns URL 各部分或 null
* 
* @example
* parseUrl('https://example.com:8080/path?key=value#hash')
* // { protocol: 'https', host: 'example.com', port: '8080', ... }
*/
function parseUrl(url) {
	try {
		const urlObj = new URL(url);
		return {
			protocol: urlObj.protocol.replace(":", ""),
			host: urlObj.hostname,
			port: urlObj.port,
			pathname: urlObj.pathname,
			search: urlObj.search,
			hash: urlObj.hash
		};
	} catch (_unused) {
		return null;
	}
}
/**
* 协议白名单校验
* @param url URL 地址
* @param allowedProtocols 允许的协议列表
* @returns 校验结果
*/
function validateUrlProtocol(url, allowedProtocols) {
	const errors = [];
	const parts = parseUrl(url);
	if (!parts) return {
		isValid: true,
		errors
	};
	if (parts.protocol && !allowedProtocols.includes(parts.protocol)) errors.push(`只允许以下协议：${allowedProtocols.join(", ")}`);
	return {
		isValid: errors.length === 0,
		errors
	};
}
//#endregion
export { validateUrl, validateUrlProtocol };
