@tech-arelius/api-client
Version:
Configurable HTTP client with builder pattern for Node.js/TypeScript
56 lines • 2.04 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.EndpointBuilder = void 0;
/**
* Utility for safe URL construction with path and query parameters
*/
class EndpointBuilder {
/**
* Builds a complete URL with path parameters and query parameters
* @param baseUrl - The base URL or path template
* @param pathParams - Path parameters to replace placeholders
* @param queryParams - Query parameters to append
* @returns The complete URL
*/
static build(baseUrl, pathParams = {}, queryParams = {}) {
// Replace path parameters
let url = baseUrl;
for (const [key, value] of Object.entries(pathParams)) {
url = url.replace(new RegExp(`\\{${key}\\}`, 'g'), encodeURIComponent(value));
}
// Add query parameters
const queryString = this.buildQueryString(queryParams);
if (queryString) {
url += (url.includes('?') ? '&' : '?') + queryString;
}
return url;
}
/**
* Builds a query string from parameters
* @param params - Query parameters
* @returns Query string
*/
static buildQueryString(params) {
const queryParts = [];
for (const [key, value] of Object.entries(params)) {
if (value === undefined || value === null) {
continue;
}
if (Array.isArray(value)) {
// Handle array parameters
for (const item of value) {
if (item !== undefined && item !== null) {
queryParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(item)}`);
}
}
}
else {
// Handle single value parameters
queryParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
}
}
return queryParts.join('&');
}
}
exports.EndpointBuilder = EndpointBuilder;
//# sourceMappingURL=EndpointBuilder.js.map
;