@kubb/plugin-client
Version:
API client generator plugin for Kubb, creating type-safe HTTP clients (Axios, Fetch) from OpenAPI specifications for making API requests.
1 lines • 3.74 kB
Source Map (JSON)
{"version":3,"sources":["../../src/clients/fetch.ts"],"names":[],"mappings":";;;;;AA8BA,IAAI,UAAkC,EAAC;AAEhC,IAAM,YAAY,MAAM;AAElB,IAAA,SAAA,GAAY,CAAC,MAAmC,KAAA;AAC3D,EAAU,OAAA,GAAA,MAAA;AACV,EAAA,OAAO,SAAU,EAAA;AACnB;AAIa,IAAA,MAAA,GAAS,OAAuD,YAA4E,KAAA;AACvJ,EAAM,MAAA,gBAAA,GAAmB,IAAI,eAAgB,EAAA;AAE7C,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAA,MAAM,MAAS,GAAA,EAAE,GAAG,YAAA,EAAc,GAAG,YAAa,EAAA;AAElD,EAAO,MAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,IAAU,EAAE,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AAC5D,IAAA,IAAI,UAAU,MAAW,EAAA;AACvB,MAAA,gBAAA,CAAiB,OAAO,GAAK,EAAA,KAAA,KAAU,OAAO,MAAS,GAAA,KAAA,CAAM,UAAU,CAAA;AAAA;AACzE,GACD,CAAA;AAED,EAAI,IAAA,SAAA,GAAY,CAAC,MAAA,CAAO,OAAS,EAAA,MAAA,CAAO,GAAG,CAAA,CAAE,MAAO,CAAA,OAAO,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAEpE,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAA,SAAA,IAAa,IAAI,gBAAgB,CAAA,CAAA;AAAA;AAGnC,EAAM,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,SAAW,EAAA;AAAA,IACtC,WAAA,EAAa,OAAO,WAAe,IAAA,aAAA;AAAA,IACnC,MAAA,EAAQ,MAAO,CAAA,MAAA,EAAQ,WAAY,EAAA;AAAA,IACnC,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,IAChC,QAAQ,MAAO,CAAA,MAAA;AAAA,IACf,SAAS,MAAO,CAAA;AAAA,GACjB,CAAA;AAED,EAAA,MAAM,OAAO,CAAC,GAAA,EAAK,GAAK,EAAA,GAAG,EAAE,QAAS,CAAA,QAAA,CAAS,MAAM,CAAA,IAAK,CAAC,QAAS,CAAA,IAAA,GAAO,EAAK,GAAA,MAAM,SAAS,IAAK,EAAA;AAEpG,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,QAAQ,QAAS,CAAA,MAAA;AAAA,IACjB,YAAY,QAAS,CAAA,UAAA;AAAA,IACrB,SAAS,QAAS,CAAA;AAAA,GACpB;AACF;AAEA,MAAA,CAAO,SAAY,GAAA,SAAA;AACnB,MAAA,CAAO,SAAY,GAAA,SAAA;AAEnB,IAAO,aAAQ,GAAA","file":"fetch.cjs","sourcesContent":["/**\n * RequestCredentials\n */\nexport type RequestCredentials = 'omit' | 'same-origin' | 'include'\n\n/**\n * Subset of FetchRequestConfig\n */\nexport type RequestConfig<TData = unknown> = {\n baseURL?: string\n url?: string\n method?: 'GET' | 'PUT' | 'PATCH' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD'\n params?: unknown\n data?: TData | FormData\n responseType?: 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream'\n signal?: AbortSignal\n headers?: [string, string][] | Record<string, string>\n credentials?: RequestCredentials\n}\n\n/**\n * Subset of FetchResponse\n */\nexport type ResponseConfig<TData = unknown> = {\n data: TData\n status: number\n statusText: string\n headers: Headers\n}\n\nlet _config: Partial<RequestConfig> = {}\n\nexport const getConfig = () => _config\n\nexport const setConfig = (config: Partial<RequestConfig>) => {\n _config = config\n return getConfig()\n}\n\nexport type ResponseErrorConfig<TError = unknown> = TError\n\nexport const client = async <TData, _TError = unknown, TVariables = unknown>(paramsConfig: RequestConfig<TVariables>): Promise<ResponseConfig<TData>> => {\n const normalizedParams = new URLSearchParams()\n\n const globalConfig = getConfig()\n const config = { ...globalConfig, ...paramsConfig }\n\n Object.entries(config.params || {}).forEach(([key, value]) => {\n if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : value.toString())\n }\n })\n\n let targetUrl = [config.baseURL, config.url].filter(Boolean).join('')\n\n if (config.params) {\n targetUrl += `?${normalizedParams}`\n }\n\n const response = await fetch(targetUrl, {\n credentials: config.credentials || 'same-origin',\n method: config.method?.toUpperCase(),\n body: JSON.stringify(config.data),\n signal: config.signal,\n headers: config.headers,\n })\n\n const data = [204, 205, 304].includes(response.status) || !response.body ? {} : await response.json()\n\n return {\n data: data as TData,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers as Headers,\n }\n}\n\nclient.getConfig = getConfig\nclient.setConfig = setConfig\n\nexport default client\n"]}