import { {{name.pascalCase}}Error } from './errors/{{name.kebabCase}}.error' import type { QueryParams } from './types/{{name.kebabCase}}-client.type' /** * REST-клиент {{name.pascalCase}}. */ export class {{name.pascalCase}}Client { constructor( private readonly baseUrl: string, private readonly defaultHeaders: Record = {}, ) {} /** * Выполняет GET-запрос к API {{name.pascalCase}}. */ async get(path: string, params: QueryParams = {}): Promise { const base = `${this.baseUrl.replace(/\/+$/, '')}/` const url = new URL(path.replace(/^\/+/, ''), base) Object.entries(params).forEach(([key, value]) => { if (value !== null && value !== undefined) { url.searchParams.set(key, String(value)) } }) const response = await fetch(url, { headers: { Accept: 'application/json', ...this.defaultHeaders, }, }) if (!response.ok) { throw new {{name.pascalCase}}Error(response.status, response.statusText) } return response.json() as Promise } } /** * Создаёт REST-клиент {{name.pascalCase}} с заданным base URL. */ export const create{{name.pascalCase}}Client = (baseUrl: string) => new {{name.pascalCase}}Client(baseUrl)