UNPKG

@dtinsight/dt-utils

Version:

袋鼠云前端常用工具库

54 lines (53 loc) 2.11 kB
import getTypeOfValue from '../getTypeOfValue'; /** * 生成带查询参数的 URL * * @category Utils * @description * 将基础 URL 路径与查询参数组合, * 生成一个完整的 URL 字符串。它会自动处理参数编码并移除无效值。 * * @param {string} pathname - 基础 URL 路径(例如:'/api/users') * @param {QueryParams} queryParams - 查询参数对象(例如:{ id: 123, name: 'john' }) * @returns {string} 完整的 URL 字符串 * * @example * ```typescript * import { generateUrlWithQuery } from 'dt-utils'; * * // 基础用法 * generateUrlWithQuery('/api/users', { id: 123 }) // => '/api/users?id=123' * * // 多个参数 * generateUrlWithQuery('/search', { q: 'test', page: 1, sort: 'desc' }) // => '/search?q=test&page=1&sort=desc' * * // 处理无效值 * generateUrlWithQuery('/api/data', { id: 123, name: null, status: undefined }) // => '/api/data?id=123' * ``` */ var generateUrlWithQuery = function (pathname, queryParams) { if (queryParams === void 0) { queryParams = {}; } // Remove null, undefined and empty string values var filteredParams = Object.fromEntries(Object.entries(queryParams).filter(function (_a) { var _ = _a[0], value = _a[1]; return value !== null && value !== undefined && value !== ''; })); // Remove trailing slashes from pathname var normalizedPathname = pathname.replace(/\/+$/, ''); try { var params_1 = new URLSearchParams(); Object.entries(filteredParams).forEach(function (_a) { var key = _a[0], value = _a[1]; if (['string', 'number', 'boolean'].includes(getTypeOfValue(value))) { params_1.append(key, String(value)); } }); var queryString = params_1.toString(); return queryString ? "".concat(normalizedPathname, "?").concat(queryString) : normalizedPathname; } catch (error) { console.error('Error generating URL:', error instanceof Error ? error.message : error); return normalizedPathname; } }; export default generateUrlWithQuery;