@dtinsight/dt-utils
Version:
54 lines (53 loc) • 2.11 kB
JavaScript
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;