kitsu-core
Version:
Simple, lightweight & framework agnostic JSON:API (de)serialsation components
21 lines (19 loc) • 965 B
JavaScript
function queryFormat(value, key, traditional) {
if (traditional && value !== null && Array.isArray(value)) return value.map(v => queryFormat(v, key, traditional)).join('&');
if (!traditional && value !== null && Array.isArray(value)) return value.map(v => queryFormat(v, `${key}[]`, traditional)).join('&');else if (value !== null && typeof value === 'object') return query(value, key, traditional);else return encodeURIComponent(key) + '=' + encodeURIComponent(value);
}
function paramKeyName(param) {
if (param === null || param === undefined) return '';
if (['[]', ']['].includes(param.slice(-2))) {
return `[${param.slice(0, -2)}][]`;
}
return `[${param}]`;
}
function query(params, prefix = undefined, traditional = true) {
const str = [];
for (const param in params) {
str.push(queryFormat(params[param], prefix ? `${prefix}${paramKeyName(param)}` : param, traditional));
}
return str.join('&');
}
export { paramKeyName, query };