UNPKG

@tech-arelius/api-client

Version:

Configurable HTTP client with builder pattern for Node.js/TypeScript

56 lines 2.04 kB
"use strict"; 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