mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-13 04:03:07 +00:00
75 lines
1.7 KiB
TypeScript
75 lines
1.7 KiB
TypeScript
/**
|
|
* Parse queryString
|
|
* @param {String} str '?q=query&b=test'
|
|
* @return {Object}
|
|
*/
|
|
export function parseQuery(str: string): object {
|
|
const ret: any = {};
|
|
|
|
if (typeof str !== 'string') {
|
|
return ret;
|
|
}
|
|
|
|
const s = str.trim().replace(/^(\?|#|&)/, '');
|
|
|
|
if (!s) {
|
|
return ret;
|
|
}
|
|
|
|
s.split('&').forEach((param) => {
|
|
const parts = param.replace(/\+/g, ' ').split('=');
|
|
let key = parts.shift()!;
|
|
let val: any = parts.length > 0 ? parts.join('=') : undefined;
|
|
|
|
key = decodeURIComponent(key);
|
|
|
|
val = val === undefined ? null : decodeURIComponent(val);
|
|
|
|
if (ret[key] === undefined) {
|
|
ret[key] = val;
|
|
} else if (Array.isArray(ret[key])) {
|
|
ret[key].push(val);
|
|
} else {
|
|
ret[key] = [ret[key], val];
|
|
}
|
|
});
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* Stringify object to query parammeters
|
|
* @param {Object} obj
|
|
* @return {String}
|
|
*/
|
|
export function stringifyQuery(obj: any): string {
|
|
const param: string[] = [];
|
|
Object.keys(obj).forEach((key) => {
|
|
let value = obj[key];
|
|
if (value && typeof value === 'object') {
|
|
value = JSON.stringify(value);
|
|
}
|
|
param.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
|
|
});
|
|
return param.join('&');
|
|
}
|
|
|
|
export function uriEncode(uri: string) {
|
|
return encodeURIComponent(uri);
|
|
}
|
|
|
|
export function uriDecode(uri: string) {
|
|
return decodeURIComponent(uri);
|
|
}
|
|
|
|
export function withQueryParams(url: string, params?: object) {
|
|
const queryStr = params ? stringifyQuery(params) : '';
|
|
if (queryStr === '') {
|
|
return url;
|
|
}
|
|
const urlSplit = url.split('#');
|
|
const hash = urlSplit[1] ? `#${urlSplit[1]}` : '';
|
|
const urlWithoutHash = urlSplit[0];
|
|
return `${urlWithoutHash}${~urlWithoutHash.indexOf('?') ? '&' : '?'}${queryStr}${hash}`;
|
|
}
|