@atlaskit/util-service-support
Version:
A library of support classes for integrating React components with REST HTTP services
62 lines • 1.94 kB
JavaScript
export const defaultRequestServiceOptions = {};
export const buildUrl = (baseUrl, path = '', queryParams, secOptions) => {
const searchParam = new URLSearchParams(
// For relative urls, the URL class requires base to be set. It's ignored if a url is not relative.
// Since we only care about search params it is fine to have any base url here.
new URL(baseUrl, 'https://BASE_FALLBACK').search || undefined);
baseUrl = baseUrl.split('?')[0];
if (queryParams) {
for (const key in queryParams) {
if ({}.hasOwnProperty.call(queryParams, key)) {
searchParam.append(key, queryParams[key]);
}
}
}
if (secOptions && secOptions.params) {
for (const key in secOptions.params) {
if ({}.hasOwnProperty.call(secOptions.params, key)) {
const values = secOptions.params[key];
if (Array.isArray(values)) {
for (let i = 0; i < values.length; i++) {
searchParam.append(key, values[i]);
}
} else {
searchParam.append(key, values);
}
}
}
}
let separator = '';
if (path && baseUrl.substr(-1) !== '/' && !path.startsWith('/')) {
separator = '/';
}
let params = searchParam.toString();
if (params) {
params = '?' + params;
}
return `${baseUrl}${separator}${path}${params}`;
};
const addToHeaders = (headers, keyValues) => {
if (keyValues) {
for (const key in keyValues) {
if ({}.hasOwnProperty.call(keyValues, key)) {
const values = keyValues[key];
if (Array.isArray(values)) {
for (let i = 0; i < values.length; i++) {
headers[key] = values[i];
}
} else {
headers[key] = values;
}
}
}
}
};
export const buildHeaders = (secOptions, extraHeaders) => {
const headers = {};
addToHeaders(headers, extraHeaders);
if (secOptions) {
addToHeaders(headers, secOptions.headers);
}
return headers;
};