datadirect
Version:
Types for working with Blackbaud's front-end APIs
31 lines (30 loc) • 1 kB
JavaScript
export function preparePath(path, pathParams) {
let actual = path.toString();
for (const p in pathParams) {
actual = actual.replace(new RegExp(`(:${p})([^a-z_0-9].*)?$`, 'gi'), '' + pathParams[p] + '$2');
}
const match = Array.from(actual.matchAll(/:([a-z_0-9]+)/g)).map((group) => group[1]);
if (match.length) {
throw new Error(`No values passed for path parameter${match.length > 1 ? 's' : ''} ${match.join(', ')}`);
}
return actual;
}
export function prepare(req) {
const { path, base, method = 'GET', payload, pageSize } = req;
const input = new URL(path, base);
let body = undefined;
switch (method) {
case 'GET':
for (const prop in payload) {
input.searchParams.append(prop, payload[prop]?.toString() || '');
}
break;
case 'POST':
body = JSON.stringify(payload);
}
return {
input,
init: { method, body },
pageSize
};
}