@xtsai/xai-utils
Version:
The xai-utils is an openai nodejs sdk compatible extension library.
87 lines • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildSDKApiUrl = buildSDKApiUrl;
exports.getQueryParams = getQueryParams;
exports.setQueryParam = setQueryParam;
function buildSDKApiUrl(baseUrl, sdkPath, queryParams) {
const apiPath = sdkPath.toString().startsWith('/')
? sdkPath.toString().slice(1)
: sdkPath.toString();
let url = baseUrl.endsWith('/')
? `${baseUrl}${apiPath}`
: `${baseUrl}/${apiPath}`;
if (queryParams && Object.keys(queryParams).length) {
const params = [];
Object.keys(queryParams).forEach((k) => {
params.push(`${k}=${queryParams[k]?.toString ? queryParams[k].toString() : queryParams[k]}`);
});
const hasQuery = url.indexOf('?') > 0;
url = hasQuery
? `${url}&${params.join('&')}`
: `${url}?${params.join('&')}`;
}
return url;
}
/**
* pick
* @param url
* @param query
* @returns
*/
function getQueryParams(url = '', query) {
if (!url?.length || url.indexOf('?') < 0)
return;
const queryStr = url.slice(url.indexOf('?') + 1);
const arr = queryStr.split('&');
const queryParams = {};
arr.forEach((item) => {
const [name, value] = item.split('=');
if (typeof name === 'string' && value !== undefined) {
if (queryParams[name] !== undefined) {
if (Array.isArray(queryParams[name])) {
queryParams[name].push(value);
}
else {
queryParams[name] = [queryParams[name], value];
}
}
}
});
if (!Object.keys(queryParams).length)
return;
return query?.length ? queryParams[query] : queryParams;
}
/**
* url like : tsai.com/api?code=1&name=&has=true
* replace query param or pending
* not support url has href like: xxx?a=1&b=4#some
* @param url
* @param name
* @param value
* @returns url
*/
function setQueryParam(url = '', name, value = '') {
if (!name?.length)
return url;
if (url?.indexOf('?') < 0)
return `${url}?${name}=${value.toString()}`;
const base = url.slice(0, url.indexOf('?'));
let queryParams = getQueryParams(url);
if (!queryParams) {
queryParams = {
[name]: value.toString(),
};
}
else {
queryParams[name] = value.toString();
}
const searchStr = Object.keys(queryParams)
.reduce((prev, curr) => {
const paramStr = `${curr}=${queryParams[curr]}`;
prev.push(paramStr);
return prev;
}, [])
.join('&');
return `${base}?${searchStr}`;
}
//# sourceMappingURL=url.utils.js.map