
---@class socket_url_parts*
---@field url? string 原始 URL。
---@field scheme? string scheme。
---@field authority? string authority。
---@field userinfo? string userinfo。
---@field user? string 用户名。
---@field password? string 密码。
---@field host? string 主机。
---@field port? string|integer 端口。
---@field path? string 路径。
---@field params? string 参数。
---@field query? string query。
---@field fragment? string fragment。
---@field is_absolute? boolean 是否绝对路径。
---@field is_directory? boolean 是否目录路径。

---@class socket_url*
---@field _VERSION string URL 模块版本。
---@type socket_url*
local M = {}

M._VERSION = nil

--- 转义 URL 组件。
---@param value string 文本。
---@return string escaped 转义结果。
function M.escape(value) end

--- 反转义 URL 组件。
---@param value string 文本。
---@return string unescaped 反转义结果。
function M.unescape(value) end

--- 解析 URL。
---@param url string URL。
---@param default? socket_url_parts* 默认值。
---@return socket_url_parts* parts 解析结果。
function M.parse(url, default) end

--- 构建 URL。
---@param parsed socket_url_parts* 解析表。
---@return string url URL。
function M.build(parsed) end

--- 解析路径。
---@param path string 路径。
---@return table parts 路径片段。
function M.parse_path(path) end

--- 构建路径。
---@param parsed table 路径片段。
---@param unsafe? boolean 是否保留未转义字符。
---@return string path 路径。
function M.build_path(parsed, unsafe) end

--- 基于 base URL 计算绝对 URL。
---@param base_url string base URL。
---@param relative_url string 相对 URL。
---@return string absolute_url 绝对 URL。
function M.absolute(base_url, relative_url) end

return M
