import { createUseFetch } from '#imports' /** 与 `R.success` / `R.error` 返回结构对齐 */ export type ApiResponse = { code: number message: string data: T } /** Wraps API error responses, preserving the data field for field-level error handling */ export class ApiError extends Error { constructor(message: string, public data: unknown) { super(message) this.name = 'ApiError' } } /** 从 Nitro 推断的响应体上剥离一层 `ApiResponse`,得到 `data` 字段类型 */ export type UnwrapApiResponse = T extends ApiResponse ? D : T export function unwrapApiBody(payload: ApiResponse): T { if (payload.code !== 0) { throw new ApiError(payload.message, payload.data) } return payload.data } export const request = $fetch.create({}) const httpFetchDefaults = { retry: 0, $fetch: request, transform: unwrapApiBody, } export const _useHttpFetch = createUseFetch(httpFetchDefaults) export const _useLazyHttpFetch = createUseFetch({ ...httpFetchDefaults, lazy: true, })