/
inssane
/
Axios-api
Обзор
Документация
Войти
/
inssane
/
Axios-api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/core/createApiClient.ts
56 строк
2 KB
Павел Чернышев
feat(core): добавить createApiClient и инфраструктуру мидлвар
02 июн 2026, 17:41
02 июн 2026, 17:41
1746604
Код
Авторство
О чём код?
import axios from 'axios'; import { addBaseURL } from '../interceptors/baseUrl'; import { isServer } from './runtime'; import type { ApiClientBuilder, CreateApiClientConfig, Middleware, MiddlewareOptions, MiddlewareRuntime } from './types'; /** Применима ли мидлвара с данным рантаймом в текущем окружении. */ const canRun = (runtime: MiddlewareRuntime = 'universal'): boolean => { if (runtime === 'server') return isServer(); if (runtime === 'browser') return !isServer(); return true; }; /** * Создаёт axios-инстанс под конкретный сервис и возвращает fluent-билдер для * подключения мидлвар: * * ```ts * const seoApi = createApiClient({ baseURLS }) * .use(loggerMiddleware, { name: 'seo-api' }) * .build(); * ``` * * baseURL подставляется сразу (нужен всегда); остальное — опциональные мидлвары. */ export const createApiClient = (config: CreateApiClientConfig): ApiClientBuilder => { const instance = axios.create(config.axios); addBaseURL({ axiosClient: instance, baseURLS: config.baseURLS }); const builder: ApiClientBuilder = { use<TOptions>( middleware: Middleware<TOptions>, ...options: MiddlewareOptions<TOptions> ): ApiClientBuilder { if (canRun(middleware.runtime)) { middleware.apply(instance, options[0] as TOptions); } return builder; }, build(): typeof instance { return instance; } }; return builder; };