Генерация API
Установка
Заголовок раздела «Установка»https://heyapi.dev/openapi-ts/get-started#installation
pnpm add @hey-api/client-fetch && pnpm add @hey-api/openapi-ts -D{  "scripts": {    "generate-api": "openapi-ts"  }}VITE_API_SWAGGER=https://api.spaceapp.ru/swagger.jsonVITE_API_URL=https://api.spaceapp.ruimport { defaultPlugins, defineConfig } from "@hey-api/openapi-ts";import { loadEnv } from "vite";
export default defineConfig({  input: loadEnv("production", process.cwd()).VITE_API_SWAGGER,  output: "src/shared/api/generated",  plugins: [    ...defaultPlugins,    { name: "@hey-api/client-fetch" },    { name: "@tanstack/react-query" },    { name: "@hey-api/typescript", enums: "typescript" },    { name: "@hey-api/sdk" },  ],});Next.js
Заголовок раздела «Next.js»pnpm add @next/envNEXT_API_SWAGGER=https://api.spaceapp.ru/swagger.jsonNEXT_PUBLIC_API_URL=https://api.spaceapp.ruimport { loadEnvConfig } from "@next/env";
const projectDir = process.cwd();loadEnvConfig(projectDir);import { defaultPlugins, defineConfig } from "@hey-api/openapi-ts";import "./envConfig.ts";
export default defineConfig({  input: process.env.NEXT_API_SWAGGER!,  output: "src/shared/api/generated",  plugins: [    ...defaultPlugins,    { name: "@hey-api/client-fetch" },    { name: "@tanstack/react-query" },    { name: "@hey-api/typescript", enums: "typescript" },    { name: "@hey-api/sdk" },  ],});Генерация API
Заголовок раздела «Генерация API»pnpm generate-apiexport * from "./generated";export * from "./generated/@tanstack/react-query.gen";Client Setup
Заголовок раздела «Client Setup»https://heyapi.dev/openapi-ts/clients/fetch
import { createClient } from "@hey-api/client-fetch";
/** * Fetch клиент для API, пробрасывается в хуки Tanstack Query */export const apiClient = createClient({  // Vite  baseUrl: import.meta.env.VITE_API_URL,  // Next.js  baseUrl: process.env.NEXT_PUBLIC_API_URL,});
apiClient.interceptors.request.use((config) => {  return config;});
apiClient.interceptors.response.use(async (res) => {  return res;});Пример использования с TanStackQuery
Заголовок раздела «Пример использования с TanStackQuery»import { GetV1ProductsData, getV1ProductsOptions } from "@/shared/api";import { apiClient } from "@/shared/lib";import { Options } from "@hey-api/client-fetch";import { useQuery } from "@tanstack/react-query";
export const useGetProducts = (options?: Options<GetV1ProductsData>) =>  useQuery(getV1ProductsOptions({ client: apiClient, ...options }));import { useGetProducts } from "@/shared/lib";---const { data } = useGetProducts();