@openapi-qraft/react 1.14.0-beta.4 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @openapi-qraft/react
2
2
 
3
+ ## 1.14.0
4
+
5
+ ## 1.14.0-beta.5
6
+
3
7
  ## 1.14.0-beta.4
4
8
 
5
9
  ## 1.14.0-beta.3
@@ -88,22 +88,22 @@ function getQueryString(params) {
88
88
  const append = (key, value)=>{
89
89
  qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
90
90
  };
91
- const process1 = (key, value)=>{
91
+ const process = (key, value)=>{
92
92
  if (typeof value === 'undefined' || value === null) return;
93
93
  if (Array.isArray(value)) {
94
94
  value.forEach((v)=>{
95
- process1(key, v);
95
+ process(key, v);
96
96
  });
97
97
  } else if (typeof value === 'object') {
98
98
  Object.entries(value).forEach(([k, v])=>{
99
- process1(`${key}[${k}]`, v);
99
+ process(`${key}[${k}]`, v);
100
100
  });
101
101
  } else {
102
102
  append(key, value);
103
103
  }
104
104
  };
105
105
  Object.entries(params).forEach(([key, value])=>{
106
- process1(key, value);
106
+ process(key, value);
107
107
  });
108
108
  if (qs.length > 0) {
109
109
  return `?${qs.join('&')}`;
@@ -146,7 +146,7 @@ function getRequestBodyFormData({ body }) {
146
146
  if (typeof body === 'string') throw new Error('String not supported in form-data');
147
147
  if (typeof body !== 'object') throw new Error(`Unsupported body type ${typeof body} in form-data.`);
148
148
  const formData = new FormData();
149
- const process1 = (key, value)=>{
149
+ const process = (key, value)=>{
150
150
  if (typeof value === 'string' || value instanceof Blob) {
151
151
  formData.append(key, value);
152
152
  } else {
@@ -155,9 +155,9 @@ function getRequestBodyFormData({ body }) {
155
155
  };
156
156
  Object.entries(body).filter(([_, value])=>typeof value !== 'undefined' && value !== null).forEach(([key, value])=>{
157
157
  if (Array.isArray(value)) {
158
- value.forEach((v)=>process1(key, v));
158
+ value.forEach((v)=>process(key, v));
159
159
  } else {
160
- process1(key, value);
160
+ process(key, value);
161
161
  }
162
162
  });
163
163
  return formData;
@@ -177,9 +177,6 @@ async function getResponseBody(response) {
177
177
  if (response.ok) return response.json();
178
178
  const errorFallbackResponse = response.clone(); // clone to allow multiple reads
179
179
  return response.json().catch(()=>{
180
- if (process.env.NODE_ENV === 'development') {
181
- console.warn('Failed to parse response body as JSON. Falling back to .text()');
182
- }
183
180
  // falling back to .text() when necessary for error messages
184
181
  return errorFallbackResponse.text();
185
182
  });
@@ -1 +1 @@
1
- {"version":3,"file":"requestFn.cjs","sources":["../../../src/lib/requestFn.ts"],"sourcesContent":["/**\n * This function is used to make a request to a specified endpoint.\n *\n * @template T The expected return type of the request.\n *\n * @param schema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param [options] Optional. Additional options for the request. It includes custom urlSerializer, bodySerializer, and fetch function.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function requestFn<T>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo,\n options?: RequestFnOptions\n): Promise<T> {\n return baseRequestFn(schema, requestInfo, {\n urlSerializer,\n bodySerializer,\n ...options,\n });\n}\n\n/**\n * This function is used to make a request to a specified endpoint.\n * It's needed to create a custom `requestFn` with a custom `urlSerializer`\n * and `bodySerializer`, with the tree-shaking of the default `requestFn`\n * and its serializers.\n *\n * @template T The expected return type of the request.\n *\n * @param requestSchema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param options The options for the request. It includes urlSerializer, bodySerializer, and fetch function. The 'urlSerializer' and 'bodySerializer' are required.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function baseRequestFn<T>(\n requestSchema: OperationSchema,\n requestInfo: RequestFnInfo,\n options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>\n): Promise<T> {\n const { parameters, headers, body, ...requestInfoRest } = requestInfo;\n\n const requestBody = options.bodySerializer(requestSchema, requestInfo);\n\n const baseFetch = options.fetch ?? fetch;\n\n const response = await baseFetch(\n options.urlSerializer(requestSchema, requestInfo),\n {\n method: requestSchema.method.toUpperCase(),\n body: requestBody,\n headers: mergeHeaders(\n {\n Accept: 'application/json',\n 'Content-Type': requestSchema.mediaType ?? getBodyContentType(body),\n },\n headers,\n parameters?.header,\n requestBody instanceof FormData\n ? // remove `Content-Type` if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n { 'Content-Type': null }\n : undefined\n ),\n ...requestInfoRest,\n }\n );\n\n // clone response to allow multiple reads\n const clonedResponse = response.clone();\n\n if (!response.ok) {\n throw await getResponseBody(clonedResponse);\n }\n\n return (await getResponseBody(clonedResponse)) as T;\n}\n\n/**\n * Serializes the given schema and request payload into a URL string.\n *\n * This function is implemented according to the URI Template standard\n * defined in RFC 6570. It supports the expansion of path and query parameters,\n * correctly handling empty arrays, `null`, and `undefined` values by ignoring\n * them during the expansion process, as specified by the standard.\n *\n * For more information, refer to the official documentation:\n * https://datatracker.ietf.org/doc/html/rfc6570\n *\n * @param schema - The operation schema containing the URL template and method.\n * @param info - The request payload including baseUrl, path parameters, and query parameters.\n * @returns The fully constructed URL string.\n */\nexport function urlSerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n): string {\n const path = schema.url.replace(\n /{(.*?)}/g,\n (substring: string, group: string) => {\n if (\n info.parameters?.path &&\n Object.prototype.hasOwnProperty.call(info.parameters.path, group)\n ) {\n return encodeURI(String(info.parameters?.path[group]));\n }\n return substring;\n }\n );\n\n const baseUrl = info.baseUrl ?? '';\n\n if (info.parameters?.query) {\n return `${baseUrl}${path}${getQueryString(info.parameters.query)}`;\n }\n\n return `${baseUrl}${path}`;\n}\n\nfunction getQueryString(params: Record<string, any>): string {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (typeof value === 'undefined' || value === null) return;\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n}\n\nexport function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]) {\n const headers = new Headers();\n\n for (const headerSet of allHeaders) {\n if (!headerSet || typeof headerSet !== 'object') {\n continue;\n }\n\n const headersIterator =\n headerSet instanceof Headers\n ? headerSet.entries()\n : Object.entries(headerSet);\n\n for (const [headerKey, headerValue] of headersIterator) {\n if (headerValue === null) {\n headers.delete(headerKey);\n } else if (headerValue !== undefined) {\n headers.set(headerKey, headerValue);\n }\n }\n }\n\n return headers;\n}\n\nexport function bodySerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n) {\n if (info.body === undefined) return;\n\n if (\n schema.method === 'get' ||\n schema.method === 'head' ||\n schema.method === 'options'\n )\n return;\n\n if (schema.mediaType?.includes('/form-data'))\n return getRequestBodyFormData(info);\n\n if (\n !schema.mediaType?.includes('/json') &&\n (typeof info.body === 'string' ||\n info.body instanceof Blob ||\n info.body instanceof FormData)\n ) {\n return info.body;\n }\n\n return JSON.stringify(info.body);\n}\n\nfunction getRequestBodyFormData({\n body,\n}: Pick<RequestFnPayload, 'body'>): FormData | undefined {\n if (body instanceof FormData) return body;\n if (body === null) return;\n\n if (body instanceof Blob) throw new Error('Blob not supported in form-data');\n if (body instanceof ArrayBuffer)\n throw new Error('ArrayBuffer not supported in form-data');\n if (body instanceof URLSearchParams)\n throw new Error('URLSearchParams not supported in form-data');\n if (body instanceof ReadableStream)\n throw new Error('ReadableStream not supported in form-data');\n if (typeof body === 'string')\n throw new Error('String not supported in form-data');\n if (typeof body !== 'object')\n throw new Error(`Unsupported body type ${typeof body} in form-data.`);\n\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(body)\n .filter(([_, value]) => typeof value !== 'undefined' && value !== null)\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n}\n\nfunction getBodyContentType(body: RequestFnPayload['body']) {\n if (!body) return;\n if (body instanceof Blob) return body.type || 'application/octet-stream';\n if (typeof body === 'string') return 'text/plain';\n if (!(body instanceof FormData)) return 'application/json';\n}\n\nasync function getResponseBody<T>(response: Response): Promise<T | undefined> {\n if (response.status === 204 || response.headers.get('Content-Length') === '0')\n return undefined;\n\n const contentType = response.headers.get('Content-Type')?.toLowerCase();\n const isJSON =\n contentType?.includes('/json') || contentType?.includes('+json');\n\n if (isJSON) {\n // attempt to parse JSON for successful responses, otherwise fail\n if (response.ok) return response.json();\n\n const errorFallbackResponse = response.clone(); // clone to allow multiple reads\n\n return response.json().catch(() => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n 'Failed to parse response body as JSON. Falling back to .text()'\n );\n }\n // falling back to .text() when necessary for error messages\n return errorFallbackResponse.text();\n });\n }\n\n return response.text() as Promise<T>;\n}\n\n// To have definitely typed headers without a conversion to stings\nexport type HeadersOptions =\n | HeadersInit\n | Record<string, string | number | boolean | null | undefined>;\n\nexport interface OperationSchema {\n /**\n * Operation path\n * @example /user/{id}\n */\n readonly url: string; //todo::rename to `path`\n\n /**\n * Operation method\n */\n readonly method:\n | 'get'\n | 'put'\n | 'post'\n | 'patch'\n | 'delete'\n | 'options'\n | 'head'\n | 'trace';\n\n /**\n * Media type of the request body\n * @example application/json\n */\n readonly mediaType?: string;\n\n readonly security?: string[];\n}\n\nexport interface RequestFnPayload {\n /**\n * Base URL to use for the request\n * @example 'https://api.example.com'\n */\n baseUrl: string | undefined;\n\n /**\n * OpenAPI parameters\n * @example\n * ```ts\n * { path: {id: 1}, query: {search: 'hello'} }\n * ```\n */\n readonly parameters?: {\n readonly path?: Record<string, any>;\n readonly header?: Record<string, any>;\n readonly query?: Record<string, any>;\n };\n\n /**\n * Request body\n * @example { name: 'John' }\n */\n readonly body?: BodyInit | Record<string, unknown> | null;\n\n /**\n * Tanstack Query Meta\n */\n meta?: Record<string, unknown>;\n\n /** An AbortSignal to set request's signal. */\n signal?: AbortSignal | null;\n}\n\nexport interface RequestFnInfo\n extends RequestFnPayload,\n Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {\n /**\n * Request headers\n * @example { 'X-Auth': '123' }\n */\n readonly headers?: HeadersOptions;\n}\n\nexport interface RequestFnOptions {\n urlSerializer?: typeof urlSerializer;\n bodySerializer?: typeof bodySerializer;\n fetch?: typeof fetch;\n}\n\nexport type RequestFn<T> = typeof requestFn<T>;\n\ntype WithRequired<T, K extends keyof T> = T & {\n [_ in K]: {};\n};\n"],"names":["requestFn","schema","requestInfo","options","baseRequestFn","urlSerializer","bodySerializer","requestSchema","parameters","headers","body","requestInfoRest","requestBody","baseFetch","fetch","response","method","toUpperCase","mergeHeaders","Accept","mediaType","getBodyContentType","header","FormData","undefined","clonedResponse","clone","ok","getResponseBody","info","path","url","replace","substring","group","Object","prototype","hasOwnProperty","call","encodeURI","String","baseUrl","query","getQueryString","params","qs","append","key","value","push","encodeURIComponent","process","Array","isArray","forEach","v","entries","k","length","join","allHeaders","Headers","headerSet","headersIterator","headerKey","headerValue","delete","set","includes","getRequestBodyFormData","Blob","JSON","stringify","Error","ArrayBuffer","URLSearchParams","ReadableStream","formData","filter","_","type","status","get","contentType","toLowerCase","isJSON","json","errorFallbackResponse","catch","env","NODE_ENV","console","warn","text"],"mappings":";;AAAA;;;;;;;;;;;;AAYC,IACM,eAAeA,SAAAA,CACpBC,MAAuB,EACvBC,WAA0B,EAC1BC,OAA0B,EAAA;IAE1B,OAAOC,aAAAA,CAAcH,QAAQC,WAAa,EAAA;AACxCG,QAAAA,aAAAA;AACAC,QAAAA,cAAAA;AACA,QAAA,GAAGH,OAAO;AACZ,KAAA,CAAA,CAAA;AACF,CAAA;AAEA;;;;;;;;;;;;;;;AAeC,IACM,eAAeC,aAAAA,CACpBG,aAA8B,EAC9BL,WAA0B,EAC1BC,OAA2E,EAAA;IAE3E,MAAM,EAAEK,UAAU,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGC,eAAAA,EAAiB,GAAGT,WAAAA,CAAAA;AAE1D,IAAA,MAAMU,WAAcT,GAAAA,OAAAA,CAAQG,cAAc,CAACC,aAAeL,EAAAA,WAAAA,CAAAA,CAAAA;IAE1D,MAAMW,SAAAA,GAAYV,OAAQW,CAAAA,KAAK,IAAIA,KAAAA,CAAAA;AAEnC,IAAA,MAAMC,WAAW,MAAMF,SAAAA,CACrBV,QAAQE,aAAa,CAACE,eAAeL,WACrC,CAAA,EAAA;QACEc,MAAQT,EAAAA,aAAAA,CAAcS,MAAM,CAACC,WAAW,EAAA;QACxCP,IAAME,EAAAA,WAAAA;AACNH,QAAAA,OAAAA,EAASS,YACP,CAAA;YACEC,MAAQ,EAAA,kBAAA;YACR,cAAgBZ,EAAAA,aAAAA,CAAca,SAAS,IAAIC,kBAAmBX,CAAAA,IAAAA,CAAAA;AAChE,SAAA,EACAD,OACAD,EAAAA,UAAAA,EAAYc,MACZV,EAAAA,WAAAA,YAAuBW,QAEnB,GAAA;YAAE,cAAgB,EAAA,IAAA;SAClBC,GAAAA,SAAAA,CAAAA;AAEN,QAAA,GAAGb,eAAe;AACpB,KAAA,CAAA,CAAA;;IAIF,MAAMc,cAAAA,GAAiBV,SAASW,KAAK,EAAA,CAAA;IAErC,IAAI,CAACX,QAASY,CAAAA,EAAE,EAAE;AAChB,QAAA,MAAM,MAAMC,eAAgBH,CAAAA,cAAAA,CAAAA,CAAAA;AAC9B,KAAA;AAEA,IAAA,OAAQ,MAAMG,eAAgBH,CAAAA,cAAAA,CAAAA,CAAAA;AAChC,CAAA;AAEA;;;;;;;;;;;;;;AAcC,IACM,SAASpB,aACdJ,CAAAA,MAAuB,EACvB4B,IAAsB,EAAA;IAEtB,MAAMC,IAAAA,GAAO7B,OAAO8B,GAAG,CAACC,OAAO,CAC7B,UAAA,EACA,CAACC,SAAmBC,EAAAA,KAAAA,GAAAA;AAClB,QAAA,IACEL,KAAKrB,UAAU,EAAEsB,IACjBK,IAAAA,MAAAA,CAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACT,IAAKrB,CAAAA,UAAU,CAACsB,IAAI,EAAEI,KAC3D,CAAA,EAAA;AACA,YAAA,OAAOK,UAAUC,MAAOX,CAAAA,IAAAA,CAAKrB,UAAU,EAAEsB,IAAI,CAACI,KAAM,CAAA,CAAA,CAAA,CAAA;AACtD,SAAA;QACA,OAAOD,SAAAA,CAAAA;AACT,KAAA,CAAA,CAAA;IAGF,MAAMQ,OAAAA,GAAUZ,IAAKY,CAAAA,OAAO,IAAI,EAAA,CAAA;IAEhC,IAAIZ,IAAAA,CAAKrB,UAAU,EAAEkC,KAAO,EAAA;AAC1B,QAAA,OAAO,CAAC,EAAED,OAAQ,CAAA,EAAEX,IAAK,CAAA,EAAEa,cAAed,CAAAA,IAAAA,CAAKrB,UAAU,CAACkC,KAAK,CAAA,CAAE,CAAC,CAAA;AACpE,KAAA;AAEA,IAAA,OAAO,CAAC,EAAED,OAAQ,CAAA,EAAEX,KAAK,CAAC,CAAA;AAC5B,CAAA;AAEA,SAASa,eAAeC,MAA2B,EAAA;AACjD,IAAA,MAAMC,KAAe,EAAE,CAAA;IAEvB,MAAMC,MAAAA,GAAS,CAACC,GAAaC,EAAAA,KAAAA,GAAAA;QAC3BH,EAAGI,CAAAA,IAAI,CAAC,CAAC,EAAEC,kBAAAA,CAAmBH,GAAK,CAAA,CAAA,CAAC,EAAEG,kBAAAA,CAAmBV,MAAOQ,CAAAA,KAAAA,CAAAA,CAAAA,CAAQ,CAAC,CAAA,CAAA;AAC3E,KAAA,CAAA;IAEA,MAAMG,QAAAA,GAAU,CAACJ,GAAaC,EAAAA,KAAAA,GAAAA;AAC5B,QAAA,IAAI,OAAOA,KAAAA,KAAU,WAAeA,IAAAA,KAAAA,KAAU,IAAM,EAAA,OAAA;QAEpD,IAAII,KAAAA,CAAMC,OAAO,CAACL,KAAQ,CAAA,EAAA;YACxBA,KAAMM,CAAAA,OAAO,CAAC,CAACC,CAAAA,GAAAA;AACbJ,gBAAAA,QAAAA,CAAQJ,GAAKQ,EAAAA,CAAAA,CAAAA,CAAAA;AACf,aAAA,CAAA,CAAA;SACK,MAAA,IAAI,OAAOP,KAAAA,KAAU,QAAU,EAAA;YACpCb,MAAOqB,CAAAA,OAAO,CAACR,KAAOM,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACG,GAAGF,CAAE,CAAA,GAAA;gBACnCJ,QAAQ,CAAA,CAAC,EAAEJ,GAAI,CAAA,CAAC,EAAEU,CAAE,CAAA,CAAC,CAAC,EAAEF,CAAAA,CAAAA,CAAAA;AAC1B,aAAA,CAAA,CAAA;SACK,MAAA;AACLT,YAAAA,MAAAA,CAAOC,GAAKC,EAAAA,KAAAA,CAAAA,CAAAA;AACd,SAAA;AACF,KAAA,CAAA;IAEAb,MAAOqB,CAAAA,OAAO,CAACZ,MAAQU,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACP,KAAKC,KAAM,CAAA,GAAA;AAC1CG,QAAAA,QAAAA,CAAQJ,GAAKC,EAAAA,KAAAA,CAAAA,CAAAA;AACf,KAAA,CAAA,CAAA;IAEA,IAAIH,EAAAA,CAAGa,MAAM,GAAG,CAAG,EAAA;AACjB,QAAA,OAAO,CAAC,CAAC,EAAEb,GAAGc,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3B,KAAA;IAEA,OAAO,EAAA,CAAA;AACT,CAAA;AAEO,SAASzC,YAAa,CAAA,GAAG0C,UAA0C,EAAA;AACxE,IAAA,MAAMnD,UAAU,IAAIoD,OAAAA,EAAAA,CAAAA;IAEpB,KAAK,MAAMC,aAAaF,UAAY,CAAA;AAClC,QAAA,IAAI,CAACE,SAAAA,IAAa,OAAOA,SAAAA,KAAc,QAAU,EAAA;AAC/C,YAAA,SAAA;AACF,SAAA;QAEA,MAAMC,eAAAA,GACJD,qBAAqBD,OACjBC,GAAAA,SAAAA,CAAUN,OAAO,EACjBrB,GAAAA,MAAAA,CAAOqB,OAAO,CAACM,SAAAA,CAAAA,CAAAA;AAErB,QAAA,KAAK,MAAM,CAACE,SAAWC,EAAAA,WAAAA,CAAY,IAAIF,eAAiB,CAAA;AACtD,YAAA,IAAIE,gBAAgB,IAAM,EAAA;AACxBxD,gBAAAA,OAAAA,CAAQyD,MAAM,CAACF,SAAAA,CAAAA,CAAAA;aACV,MAAA,IAAIC,gBAAgBzC,SAAW,EAAA;gBACpCf,OAAQ0D,CAAAA,GAAG,CAACH,SAAWC,EAAAA,WAAAA,CAAAA,CAAAA;AACzB,aAAA;AACF,SAAA;AACF,KAAA;IAEA,OAAOxD,OAAAA,CAAAA;AACT,CAAA;AAEO,SAASH,cAAAA,CACdL,MAAuB,EACvB4B,IAAsB,EAAA;IAEtB,IAAIA,IAAAA,CAAKnB,IAAI,KAAKc,SAAW,EAAA,OAAA;IAE7B,IACEvB,MAAAA,CAAOe,MAAM,KAAK,KAClBf,IAAAA,MAAAA,CAAOe,MAAM,KAAK,MAClBf,IAAAA,MAAAA,CAAOe,MAAM,KAAK,SAElB,EAAA,OAAA;AAEF,IAAA,IAAIf,OAAOmB,SAAS,EAAEgD,QAAS,CAAA,YAAA,CAAA,EAC7B,OAAOC,sBAAuBxC,CAAAA,IAAAA,CAAAA,CAAAA;IAEhC,IACE,CAAC5B,OAAOmB,SAAS,EAAEgD,SAAS,OAC3B,CAAA,KAAA,OAAOvC,IAAKnB,CAAAA,IAAI,KAAK,QACpBmB,IAAAA,IAAAA,CAAKnB,IAAI,YAAY4D,IAAAA,IACrBzC,KAAKnB,IAAI,YAAYa,QAAO,CAC9B,EAAA;AACA,QAAA,OAAOM,KAAKnB,IAAI,CAAA;AAClB,KAAA;AAEA,IAAA,OAAO6D,IAAKC,CAAAA,SAAS,CAAC3C,IAAAA,CAAKnB,IAAI,CAAA,CAAA;AACjC,CAAA;AAEA,SAAS2D,sBAAAA,CAAuB,EAC9B3D,IAAI,EAC2B,EAAA;IAC/B,IAAIA,IAAAA,YAAgBa,UAAU,OAAOb,IAAAA,CAAAA;AACrC,IAAA,IAAIA,SAAS,IAAM,EAAA,OAAA;AAEnB,IAAA,IAAIA,IAAgB4D,YAAAA,IAAAA,EAAM,MAAM,IAAIG,KAAM,CAAA,iCAAA,CAAA,CAAA;AAC1C,IAAA,IAAI/D,IAAgBgE,YAAAA,WAAAA,EAClB,MAAM,IAAID,KAAM,CAAA,wCAAA,CAAA,CAAA;AAClB,IAAA,IAAI/D,IAAgBiE,YAAAA,eAAAA,EAClB,MAAM,IAAIF,KAAM,CAAA,4CAAA,CAAA,CAAA;AAClB,IAAA,IAAI/D,IAAgBkE,YAAAA,cAAAA,EAClB,MAAM,IAAIH,KAAM,CAAA,2CAAA,CAAA,CAAA;AAClB,IAAA,IAAI,OAAO/D,IAAAA,KAAS,QAClB,EAAA,MAAM,IAAI+D,KAAM,CAAA,mCAAA,CAAA,CAAA;AAClB,IAAA,IAAI,OAAO/D,IAAAA,KAAS,QAClB,EAAA,MAAM,IAAI+D,KAAAA,CAAM,CAAC,sBAAsB,EAAE,OAAO/D,IAAK,CAAA,cAAc,CAAC,CAAA,CAAA;AAEtE,IAAA,MAAMmE,WAAW,IAAItD,QAAAA,EAAAA,CAAAA;IAErB,MAAM4B,QAAAA,GAAU,CAACJ,GAAaC,EAAAA,KAAAA,GAAAA;AAC5B,QAAA,IAAI,OAAOA,KAAAA,KAAU,QAAYA,IAAAA,KAAAA,YAAiBsB,IAAM,EAAA;YACtDO,QAAS/B,CAAAA,MAAM,CAACC,GAAKC,EAAAA,KAAAA,CAAAA,CAAAA;SAChB,MAAA;AACL6B,YAAAA,QAAAA,CAAS/B,MAAM,CAACC,GAAKwB,EAAAA,IAAAA,CAAKC,SAAS,CAACxB,KAAAA,CAAAA,CAAAA,CAAAA;AACtC,SAAA;AACF,KAAA,CAAA;IAEAb,MAAOqB,CAAAA,OAAO,CAAC9C,IACZoE,CAAAA,CAAAA,MAAM,CAAC,CAAC,CAACC,GAAG/B,KAAM,CAAA,GAAK,OAAOA,KAAU,KAAA,WAAA,IAAeA,UAAU,IACjEM,CAAAA,CAAAA,OAAO,CAAC,CAAC,CAACP,KAAKC,KAAM,CAAA,GAAA;QACpB,IAAII,KAAAA,CAAMC,OAAO,CAACL,KAAQ,CAAA,EAAA;AACxBA,YAAAA,KAAAA,CAAMM,OAAO,CAAC,CAACC,CAAAA,GAAMJ,SAAQJ,GAAKQ,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA;SAC7B,MAAA;AACLJ,YAAAA,QAAAA,CAAQJ,GAAKC,EAAAA,KAAAA,CAAAA,CAAAA;AACf,SAAA;AACF,KAAA,CAAA,CAAA;IAEF,OAAO6B,QAAAA,CAAAA;AACT,CAAA;AAEA,SAASxD,mBAAmBX,IAA8B,EAAA;AACxD,IAAA,IAAI,CAACA,IAAM,EAAA,OAAA;AACX,IAAA,IAAIA,IAAgB4D,YAAAA,IAAAA,EAAM,OAAO5D,IAAAA,CAAKsE,IAAI,IAAI,0BAAA,CAAA;IAC9C,IAAI,OAAOtE,IAAS,KAAA,QAAA,EAAU,OAAO,YAAA,CAAA;AACrC,IAAA,IAAI,EAAEA,IAAgBa,YAAAA,QAAO,GAAI,OAAO,kBAAA,CAAA;AAC1C,CAAA;AAEA,eAAeK,gBAAmBb,QAAkB,EAAA;IAClD,IAAIA,QAAAA,CAASkE,MAAM,KAAK,GAAOlE,IAAAA,QAAAA,CAASN,OAAO,CAACyE,GAAG,CAAC,gBAAsB,CAAA,KAAA,GAAA,EACxE,OAAO1D,SAAAA,CAAAA;AAET,IAAA,MAAM2D,cAAcpE,QAASN,CAAAA,OAAO,CAACyE,GAAG,CAAC,cAAiBE,CAAAA,EAAAA,WAAAA,EAAAA,CAAAA;AAC1D,IAAA,MAAMC,MACJF,GAAAA,WAAAA,EAAaf,QAAS,CAAA,OAAA,CAAA,IAAYe,aAAaf,QAAS,CAAA,OAAA,CAAA,CAAA;AAE1D,IAAA,IAAIiB,MAAQ,EAAA;;AAEV,QAAA,IAAItE,QAASY,CAAAA,EAAE,EAAE,OAAOZ,SAASuE,IAAI,EAAA,CAAA;AAErC,QAAA,MAAMC,qBAAwBxE,GAAAA,QAAAA,CAASW,KAAK,EAAA,CAAA;AAE5C,QAAA,OAAOX,QAASuE,CAAAA,IAAI,EAAGE,CAAAA,KAAK,CAAC,IAAA;AAC3B,YAAA,IAAIrC,OAAQsC,CAAAA,GAAG,CAACC,QAAQ,KAAK,aAAe,EAAA;AAC1CC,gBAAAA,OAAAA,CAAQC,IAAI,CACV,gEAAA,CAAA,CAAA;AAEJ,aAAA;;AAEA,YAAA,OAAOL,sBAAsBM,IAAI,EAAA,CAAA;AACnC,SAAA,CAAA,CAAA;AACF,KAAA;AAEA,IAAA,OAAO9E,SAAS8E,IAAI,EAAA,CAAA;AACtB;;;;;;;;"}
1
+ {"version":3,"file":"requestFn.cjs","sources":["../../../src/lib/requestFn.ts"],"sourcesContent":["/**\n * This function is used to make a request to a specified endpoint.\n *\n * @template T The expected return type of the request.\n *\n * @param schema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param [options] Optional. Additional options for the request. It includes custom urlSerializer, bodySerializer, and fetch function.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function requestFn<T>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo,\n options?: RequestFnOptions\n): Promise<T> {\n return baseRequestFn(schema, requestInfo, {\n urlSerializer,\n bodySerializer,\n ...options,\n });\n}\n\n/**\n * This function is used to make a request to a specified endpoint.\n * It's needed to create a custom `requestFn` with a custom `urlSerializer`\n * and `bodySerializer`, with the tree-shaking of the default `requestFn`\n * and its serializers.\n *\n * @template T The expected return type of the request.\n *\n * @param requestSchema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param options The options for the request. It includes urlSerializer, bodySerializer, and fetch function. The 'urlSerializer' and 'bodySerializer' are required.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function baseRequestFn<T>(\n requestSchema: OperationSchema,\n requestInfo: RequestFnInfo,\n options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>\n): Promise<T> {\n const { parameters, headers, body, ...requestInfoRest } = requestInfo;\n\n const requestBody = options.bodySerializer(requestSchema, requestInfo);\n\n const baseFetch = options.fetch ?? fetch;\n\n const response = await baseFetch(\n options.urlSerializer(requestSchema, requestInfo),\n {\n method: requestSchema.method.toUpperCase(),\n body: requestBody,\n headers: mergeHeaders(\n {\n Accept: 'application/json',\n 'Content-Type': requestSchema.mediaType ?? getBodyContentType(body),\n },\n headers,\n parameters?.header,\n requestBody instanceof FormData\n ? // remove `Content-Type` if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n { 'Content-Type': null }\n : undefined\n ),\n ...requestInfoRest,\n }\n );\n\n // clone response to allow multiple reads\n const clonedResponse = response.clone();\n\n if (!response.ok) {\n throw await getResponseBody(clonedResponse);\n }\n\n return (await getResponseBody(clonedResponse)) as T;\n}\n\n/**\n * Serializes the given schema and request payload into a URL string.\n *\n * This function is implemented according to the URI Template standard\n * defined in RFC 6570. It supports the expansion of path and query parameters,\n * correctly handling empty arrays, `null`, and `undefined` values by ignoring\n * them during the expansion process, as specified by the standard.\n *\n * For more information, refer to the official documentation:\n * https://datatracker.ietf.org/doc/html/rfc6570\n *\n * @param schema - The operation schema containing the URL template and method.\n * @param info - The request payload including baseUrl, path parameters, and query parameters.\n * @returns The fully constructed URL string.\n */\nexport function urlSerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n): string {\n const path = schema.url.replace(\n /{(.*?)}/g,\n (substring: string, group: string) => {\n if (\n info.parameters?.path &&\n Object.prototype.hasOwnProperty.call(info.parameters.path, group)\n ) {\n return encodeURI(String(info.parameters?.path[group]));\n }\n return substring;\n }\n );\n\n const baseUrl = info.baseUrl ?? '';\n\n if (info.parameters?.query) {\n return `${baseUrl}${path}${getQueryString(info.parameters.query)}`;\n }\n\n return `${baseUrl}${path}`;\n}\n\nfunction getQueryString(params: Record<string, any>): string {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (typeof value === 'undefined' || value === null) return;\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n}\n\nexport function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]) {\n const headers = new Headers();\n\n for (const headerSet of allHeaders) {\n if (!headerSet || typeof headerSet !== 'object') {\n continue;\n }\n\n const headersIterator =\n headerSet instanceof Headers\n ? headerSet.entries()\n : Object.entries(headerSet);\n\n for (const [headerKey, headerValue] of headersIterator) {\n if (headerValue === null) {\n headers.delete(headerKey);\n } else if (headerValue !== undefined) {\n headers.set(headerKey, headerValue);\n }\n }\n }\n\n return headers;\n}\n\nexport function bodySerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n) {\n if (info.body === undefined) return;\n\n if (\n schema.method === 'get' ||\n schema.method === 'head' ||\n schema.method === 'options'\n )\n return;\n\n if (schema.mediaType?.includes('/form-data'))\n return getRequestBodyFormData(info);\n\n if (\n !schema.mediaType?.includes('/json') &&\n (typeof info.body === 'string' ||\n info.body instanceof Blob ||\n info.body instanceof FormData)\n ) {\n return info.body;\n }\n\n return JSON.stringify(info.body);\n}\n\nfunction getRequestBodyFormData({\n body,\n}: Pick<RequestFnPayload, 'body'>): FormData | undefined {\n if (body instanceof FormData) return body;\n if (body === null) return;\n\n if (body instanceof Blob) throw new Error('Blob not supported in form-data');\n if (body instanceof ArrayBuffer)\n throw new Error('ArrayBuffer not supported in form-data');\n if (body instanceof URLSearchParams)\n throw new Error('URLSearchParams not supported in form-data');\n if (body instanceof ReadableStream)\n throw new Error('ReadableStream not supported in form-data');\n if (typeof body === 'string')\n throw new Error('String not supported in form-data');\n if (typeof body !== 'object')\n throw new Error(`Unsupported body type ${typeof body} in form-data.`);\n\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(body)\n .filter(([_, value]) => typeof value !== 'undefined' && value !== null)\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n}\n\nfunction getBodyContentType(body: RequestFnPayload['body']) {\n if (!body) return;\n if (body instanceof Blob) return body.type || 'application/octet-stream';\n if (typeof body === 'string') return 'text/plain';\n if (!(body instanceof FormData)) return 'application/json';\n}\n\nasync function getResponseBody<T>(response: Response): Promise<T | undefined> {\n if (response.status === 204 || response.headers.get('Content-Length') === '0')\n return undefined;\n\n const contentType = response.headers.get('Content-Type')?.toLowerCase();\n const isJSON =\n contentType?.includes('/json') || contentType?.includes('+json');\n\n if (isJSON) {\n // attempt to parse JSON for successful responses, otherwise fail\n if (response.ok) return response.json();\n\n const errorFallbackResponse = response.clone(); // clone to allow multiple reads\n\n return response.json().catch(() => {\n // falling back to .text() when necessary for error messages\n return errorFallbackResponse.text();\n });\n }\n\n return response.text() as Promise<T>;\n}\n\n// To have definitely typed headers without a conversion to stings\nexport type HeadersOptions =\n | HeadersInit\n | Record<string, string | number | boolean | null | undefined>;\n\nexport interface OperationSchema {\n /**\n * Operation path\n * @example /user/{id}\n */\n readonly url: string; //todo::rename to `path`\n\n /**\n * Operation method\n */\n readonly method:\n | 'get'\n | 'put'\n | 'post'\n | 'patch'\n | 'delete'\n | 'options'\n | 'head'\n | 'trace';\n\n /**\n * Media type of the request body\n * @example application/json\n */\n readonly mediaType?: string;\n\n readonly security?: string[];\n}\n\nexport interface RequestFnPayload {\n /**\n * Base URL to use for the request\n * @example 'https://api.example.com'\n */\n baseUrl: string | undefined;\n\n /**\n * OpenAPI parameters\n * @example\n * ```ts\n * { path: {id: 1}, query: {search: 'hello'} }\n * ```\n */\n readonly parameters?: {\n readonly path?: Record<string, any>;\n readonly header?: Record<string, any>;\n readonly query?: Record<string, any>;\n };\n\n /**\n * Request body\n * @example { name: 'John' }\n */\n readonly body?: BodyInit | Record<string, unknown> | null;\n\n /**\n * Tanstack Query Meta\n */\n meta?: Record<string, unknown>;\n\n /** An AbortSignal to set request's signal. */\n signal?: AbortSignal | null;\n}\n\nexport interface RequestFnInfo\n extends RequestFnPayload,\n Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {\n /**\n * Request headers\n * @example { 'X-Auth': '123' }\n */\n readonly headers?: HeadersOptions;\n}\n\nexport interface RequestFnOptions {\n urlSerializer?: typeof urlSerializer;\n bodySerializer?: typeof bodySerializer;\n fetch?: typeof fetch;\n}\n\nexport type RequestFn<T> = typeof requestFn<T>;\n\ntype WithRequired<T, K extends keyof T> = T & {\n [_ in K]: {};\n};\n"],"names":["requestFn","schema","requestInfo","options","baseRequestFn","urlSerializer","bodySerializer","requestSchema","parameters","headers","body","requestInfoRest","requestBody","baseFetch","fetch","response","method","toUpperCase","mergeHeaders","Accept","mediaType","getBodyContentType","header","FormData","undefined","clonedResponse","clone","ok","getResponseBody","info","path","url","replace","substring","group","Object","prototype","hasOwnProperty","call","encodeURI","String","baseUrl","query","getQueryString","params","qs","append","key","value","push","encodeURIComponent","process","Array","isArray","forEach","v","entries","k","length","join","allHeaders","Headers","headerSet","headersIterator","headerKey","headerValue","delete","set","includes","getRequestBodyFormData","Blob","JSON","stringify","Error","ArrayBuffer","URLSearchParams","ReadableStream","formData","filter","_","type","status","get","contentType","toLowerCase","isJSON","json","errorFallbackResponse","catch","text"],"mappings":"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"}
@@ -86,22 +86,22 @@ function getQueryString(params) {
86
86
  const append = (key, value)=>{
87
87
  qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
88
88
  };
89
- const process1 = (key, value)=>{
89
+ const process = (key, value)=>{
90
90
  if (typeof value === 'undefined' || value === null) return;
91
91
  if (Array.isArray(value)) {
92
92
  value.forEach((v)=>{
93
- process1(key, v);
93
+ process(key, v);
94
94
  });
95
95
  } else if (typeof value === 'object') {
96
96
  Object.entries(value).forEach(([k, v])=>{
97
- process1(`${key}[${k}]`, v);
97
+ process(`${key}[${k}]`, v);
98
98
  });
99
99
  } else {
100
100
  append(key, value);
101
101
  }
102
102
  };
103
103
  Object.entries(params).forEach(([key, value])=>{
104
- process1(key, value);
104
+ process(key, value);
105
105
  });
106
106
  if (qs.length > 0) {
107
107
  return `?${qs.join('&')}`;
@@ -144,7 +144,7 @@ function getRequestBodyFormData({ body }) {
144
144
  if (typeof body === 'string') throw new Error('String not supported in form-data');
145
145
  if (typeof body !== 'object') throw new Error(`Unsupported body type ${typeof body} in form-data.`);
146
146
  const formData = new FormData();
147
- const process1 = (key, value)=>{
147
+ const process = (key, value)=>{
148
148
  if (typeof value === 'string' || value instanceof Blob) {
149
149
  formData.append(key, value);
150
150
  } else {
@@ -153,9 +153,9 @@ function getRequestBodyFormData({ body }) {
153
153
  };
154
154
  Object.entries(body).filter(([_, value])=>typeof value !== 'undefined' && value !== null).forEach(([key, value])=>{
155
155
  if (Array.isArray(value)) {
156
- value.forEach((v)=>process1(key, v));
156
+ value.forEach((v)=>process(key, v));
157
157
  } else {
158
- process1(key, value);
158
+ process(key, value);
159
159
  }
160
160
  });
161
161
  return formData;
@@ -175,9 +175,6 @@ async function getResponseBody(response) {
175
175
  if (response.ok) return response.json();
176
176
  const errorFallbackResponse = response.clone(); // clone to allow multiple reads
177
177
  return response.json().catch(()=>{
178
- if (process.env.NODE_ENV === 'development') {
179
- console.warn('Failed to parse response body as JSON. Falling back to .text()');
180
- }
181
178
  // falling back to .text() when necessary for error messages
182
179
  return errorFallbackResponse.text();
183
180
  });
@@ -1 +1 @@
1
- {"version":3,"file":"requestFn.js","sources":["../../../src/lib/requestFn.ts"],"sourcesContent":["/**\n * This function is used to make a request to a specified endpoint.\n *\n * @template T The expected return type of the request.\n *\n * @param schema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param [options] Optional. Additional options for the request. It includes custom urlSerializer, bodySerializer, and fetch function.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function requestFn<T>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo,\n options?: RequestFnOptions\n): Promise<T> {\n return baseRequestFn(schema, requestInfo, {\n urlSerializer,\n bodySerializer,\n ...options,\n });\n}\n\n/**\n * This function is used to make a request to a specified endpoint.\n * It's needed to create a custom `requestFn` with a custom `urlSerializer`\n * and `bodySerializer`, with the tree-shaking of the default `requestFn`\n * and its serializers.\n *\n * @template T The expected return type of the request.\n *\n * @param requestSchema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param options The options for the request. It includes urlSerializer, bodySerializer, and fetch function. The 'urlSerializer' and 'bodySerializer' are required.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function baseRequestFn<T>(\n requestSchema: OperationSchema,\n requestInfo: RequestFnInfo,\n options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>\n): Promise<T> {\n const { parameters, headers, body, ...requestInfoRest } = requestInfo;\n\n const requestBody = options.bodySerializer(requestSchema, requestInfo);\n\n const baseFetch = options.fetch ?? fetch;\n\n const response = await baseFetch(\n options.urlSerializer(requestSchema, requestInfo),\n {\n method: requestSchema.method.toUpperCase(),\n body: requestBody,\n headers: mergeHeaders(\n {\n Accept: 'application/json',\n 'Content-Type': requestSchema.mediaType ?? getBodyContentType(body),\n },\n headers,\n parameters?.header,\n requestBody instanceof FormData\n ? // remove `Content-Type` if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n { 'Content-Type': null }\n : undefined\n ),\n ...requestInfoRest,\n }\n );\n\n // clone response to allow multiple reads\n const clonedResponse = response.clone();\n\n if (!response.ok) {\n throw await getResponseBody(clonedResponse);\n }\n\n return (await getResponseBody(clonedResponse)) as T;\n}\n\n/**\n * Serializes the given schema and request payload into a URL string.\n *\n * This function is implemented according to the URI Template standard\n * defined in RFC 6570. It supports the expansion of path and query parameters,\n * correctly handling empty arrays, `null`, and `undefined` values by ignoring\n * them during the expansion process, as specified by the standard.\n *\n * For more information, refer to the official documentation:\n * https://datatracker.ietf.org/doc/html/rfc6570\n *\n * @param schema - The operation schema containing the URL template and method.\n * @param info - The request payload including baseUrl, path parameters, and query parameters.\n * @returns The fully constructed URL string.\n */\nexport function urlSerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n): string {\n const path = schema.url.replace(\n /{(.*?)}/g,\n (substring: string, group: string) => {\n if (\n info.parameters?.path &&\n Object.prototype.hasOwnProperty.call(info.parameters.path, group)\n ) {\n return encodeURI(String(info.parameters?.path[group]));\n }\n return substring;\n }\n );\n\n const baseUrl = info.baseUrl ?? '';\n\n if (info.parameters?.query) {\n return `${baseUrl}${path}${getQueryString(info.parameters.query)}`;\n }\n\n return `${baseUrl}${path}`;\n}\n\nfunction getQueryString(params: Record<string, any>): string {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (typeof value === 'undefined' || value === null) return;\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n}\n\nexport function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]) {\n const headers = new Headers();\n\n for (const headerSet of allHeaders) {\n if (!headerSet || typeof headerSet !== 'object') {\n continue;\n }\n\n const headersIterator =\n headerSet instanceof Headers\n ? headerSet.entries()\n : Object.entries(headerSet);\n\n for (const [headerKey, headerValue] of headersIterator) {\n if (headerValue === null) {\n headers.delete(headerKey);\n } else if (headerValue !== undefined) {\n headers.set(headerKey, headerValue);\n }\n }\n }\n\n return headers;\n}\n\nexport function bodySerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n) {\n if (info.body === undefined) return;\n\n if (\n schema.method === 'get' ||\n schema.method === 'head' ||\n schema.method === 'options'\n )\n return;\n\n if (schema.mediaType?.includes('/form-data'))\n return getRequestBodyFormData(info);\n\n if (\n !schema.mediaType?.includes('/json') &&\n (typeof info.body === 'string' ||\n info.body instanceof Blob ||\n info.body instanceof FormData)\n ) {\n return info.body;\n }\n\n return JSON.stringify(info.body);\n}\n\nfunction getRequestBodyFormData({\n body,\n}: Pick<RequestFnPayload, 'body'>): FormData | undefined {\n if (body instanceof FormData) return body;\n if (body === null) return;\n\n if (body instanceof Blob) throw new Error('Blob not supported in form-data');\n if (body instanceof ArrayBuffer)\n throw new Error('ArrayBuffer not supported in form-data');\n if (body instanceof URLSearchParams)\n throw new Error('URLSearchParams not supported in form-data');\n if (body instanceof ReadableStream)\n throw new Error('ReadableStream not supported in form-data');\n if (typeof body === 'string')\n throw new Error('String not supported in form-data');\n if (typeof body !== 'object')\n throw new Error(`Unsupported body type ${typeof body} in form-data.`);\n\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(body)\n .filter(([_, value]) => typeof value !== 'undefined' && value !== null)\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n}\n\nfunction getBodyContentType(body: RequestFnPayload['body']) {\n if (!body) return;\n if (body instanceof Blob) return body.type || 'application/octet-stream';\n if (typeof body === 'string') return 'text/plain';\n if (!(body instanceof FormData)) return 'application/json';\n}\n\nasync function getResponseBody<T>(response: Response): Promise<T | undefined> {\n if (response.status === 204 || response.headers.get('Content-Length') === '0')\n return undefined;\n\n const contentType = response.headers.get('Content-Type')?.toLowerCase();\n const isJSON =\n contentType?.includes('/json') || contentType?.includes('+json');\n\n if (isJSON) {\n // attempt to parse JSON for successful responses, otherwise fail\n if (response.ok) return response.json();\n\n const errorFallbackResponse = response.clone(); // clone to allow multiple reads\n\n return response.json().catch(() => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n 'Failed to parse response body as JSON. Falling back to .text()'\n );\n }\n // falling back to .text() when necessary for error messages\n return errorFallbackResponse.text();\n });\n }\n\n return response.text() as Promise<T>;\n}\n\n// To have definitely typed headers without a conversion to stings\nexport type HeadersOptions =\n | HeadersInit\n | Record<string, string | number | boolean | null | undefined>;\n\nexport interface OperationSchema {\n /**\n * Operation path\n * @example /user/{id}\n */\n readonly url: string; //todo::rename to `path`\n\n /**\n * Operation method\n */\n readonly method:\n | 'get'\n | 'put'\n | 'post'\n | 'patch'\n | 'delete'\n | 'options'\n | 'head'\n | 'trace';\n\n /**\n * Media type of the request body\n * @example application/json\n */\n readonly mediaType?: string;\n\n readonly security?: string[];\n}\n\nexport interface RequestFnPayload {\n /**\n * Base URL to use for the request\n * @example 'https://api.example.com'\n */\n baseUrl: string | undefined;\n\n /**\n * OpenAPI parameters\n * @example\n * ```ts\n * { path: {id: 1}, query: {search: 'hello'} }\n * ```\n */\n readonly parameters?: {\n readonly path?: Record<string, any>;\n readonly header?: Record<string, any>;\n readonly query?: Record<string, any>;\n };\n\n /**\n * Request body\n * @example { name: 'John' }\n */\n readonly body?: BodyInit | Record<string, unknown> | null;\n\n /**\n * Tanstack Query Meta\n */\n meta?: Record<string, unknown>;\n\n /** An AbortSignal to set request's signal. */\n signal?: AbortSignal | null;\n}\n\nexport interface RequestFnInfo\n extends RequestFnPayload,\n Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {\n /**\n * Request headers\n * @example { 'X-Auth': '123' }\n */\n readonly headers?: HeadersOptions;\n}\n\nexport interface RequestFnOptions {\n urlSerializer?: typeof urlSerializer;\n bodySerializer?: typeof bodySerializer;\n fetch?: typeof fetch;\n}\n\nexport type RequestFn<T> = typeof requestFn<T>;\n\ntype WithRequired<T, K extends keyof T> = T & {\n [_ in K]: {};\n};\n"],"names":["requestFn","schema","requestInfo","options","baseRequestFn","urlSerializer","bodySerializer","requestSchema","parameters","headers","body","requestInfoRest","requestBody","baseFetch","fetch","response","method","toUpperCase","mergeHeaders","Accept","mediaType","getBodyContentType","header","FormData","undefined","clonedResponse","clone","ok","getResponseBody","info","path","url","replace","substring","group","Object","prototype","hasOwnProperty","call","encodeURI","String","baseUrl","query","getQueryString","params","qs","append","key","value","push","encodeURIComponent","process","Array","isArray","forEach","v","entries","k","length","join","allHeaders","Headers","headerSet","headersIterator","headerKey","headerValue","delete","set","includes","getRequestBodyFormData","Blob","JSON","stringify","Error","ArrayBuffer","URLSearchParams","ReadableStream","formData","filter","_","type","status","get","contentType","toLowerCase","isJSON","json","errorFallbackResponse","catch","env","NODE_ENV","console","warn","text"],"mappings":"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"}
1
+ {"version":3,"file":"requestFn.js","sources":["../../../src/lib/requestFn.ts"],"sourcesContent":["/**\n * This function is used to make a request to a specified endpoint.\n *\n * @template T The expected return type of the request.\n *\n * @param schema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param [options] Optional. Additional options for the request. It includes custom urlSerializer, bodySerializer, and fetch function.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function requestFn<T>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo,\n options?: RequestFnOptions\n): Promise<T> {\n return baseRequestFn(schema, requestInfo, {\n urlSerializer,\n bodySerializer,\n ...options,\n });\n}\n\n/**\n * This function is used to make a request to a specified endpoint.\n * It's needed to create a custom `requestFn` with a custom `urlSerializer`\n * and `bodySerializer`, with the tree-shaking of the default `requestFn`\n * and its serializers.\n *\n * @template T The expected return type of the request.\n *\n * @param requestSchema The schema of the operation to be performed. It includes the OpenAPI path, HTTP method and media type.\n * @param requestInfo The information required to make the request. It includes parameters, headers, body, etc.\n * @param options The options for the request. It includes urlSerializer, bodySerializer, and fetch function. The 'urlSerializer' and 'bodySerializer' are required.\n *\n * @returns {Promise<T>} Returns a promise that resolves with the response of the request.\n *\n * @throws {error: object|string, response: Response} Throws an error if the request fails. The error includes the error message and the response from the server.\n */\nexport async function baseRequestFn<T>(\n requestSchema: OperationSchema,\n requestInfo: RequestFnInfo,\n options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>\n): Promise<T> {\n const { parameters, headers, body, ...requestInfoRest } = requestInfo;\n\n const requestBody = options.bodySerializer(requestSchema, requestInfo);\n\n const baseFetch = options.fetch ?? fetch;\n\n const response = await baseFetch(\n options.urlSerializer(requestSchema, requestInfo),\n {\n method: requestSchema.method.toUpperCase(),\n body: requestBody,\n headers: mergeHeaders(\n {\n Accept: 'application/json',\n 'Content-Type': requestSchema.mediaType ?? getBodyContentType(body),\n },\n headers,\n parameters?.header,\n requestBody instanceof FormData\n ? // remove `Content-Type` if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n { 'Content-Type': null }\n : undefined\n ),\n ...requestInfoRest,\n }\n );\n\n // clone response to allow multiple reads\n const clonedResponse = response.clone();\n\n if (!response.ok) {\n throw await getResponseBody(clonedResponse);\n }\n\n return (await getResponseBody(clonedResponse)) as T;\n}\n\n/**\n * Serializes the given schema and request payload into a URL string.\n *\n * This function is implemented according to the URI Template standard\n * defined in RFC 6570. It supports the expansion of path and query parameters,\n * correctly handling empty arrays, `null`, and `undefined` values by ignoring\n * them during the expansion process, as specified by the standard.\n *\n * For more information, refer to the official documentation:\n * https://datatracker.ietf.org/doc/html/rfc6570\n *\n * @param schema - The operation schema containing the URL template and method.\n * @param info - The request payload including baseUrl, path parameters, and query parameters.\n * @returns The fully constructed URL string.\n */\nexport function urlSerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n): string {\n const path = schema.url.replace(\n /{(.*?)}/g,\n (substring: string, group: string) => {\n if (\n info.parameters?.path &&\n Object.prototype.hasOwnProperty.call(info.parameters.path, group)\n ) {\n return encodeURI(String(info.parameters?.path[group]));\n }\n return substring;\n }\n );\n\n const baseUrl = info.baseUrl ?? '';\n\n if (info.parameters?.query) {\n return `${baseUrl}${path}${getQueryString(info.parameters.query)}`;\n }\n\n return `${baseUrl}${path}`;\n}\n\nfunction getQueryString(params: Record<string, any>): string {\n const qs: string[] = [];\n\n const append = (key: string, value: any) => {\n qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n };\n\n const process = (key: string, value: any) => {\n if (typeof value === 'undefined' || value === null) return;\n\n if (Array.isArray(value)) {\n value.forEach((v) => {\n process(key, v);\n });\n } else if (typeof value === 'object') {\n Object.entries(value).forEach(([k, v]) => {\n process(`${key}[${k}]`, v);\n });\n } else {\n append(key, value);\n }\n };\n\n Object.entries(params).forEach(([key, value]) => {\n process(key, value);\n });\n\n if (qs.length > 0) {\n return `?${qs.join('&')}`;\n }\n\n return '';\n}\n\nexport function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]) {\n const headers = new Headers();\n\n for (const headerSet of allHeaders) {\n if (!headerSet || typeof headerSet !== 'object') {\n continue;\n }\n\n const headersIterator =\n headerSet instanceof Headers\n ? headerSet.entries()\n : Object.entries(headerSet);\n\n for (const [headerKey, headerValue] of headersIterator) {\n if (headerValue === null) {\n headers.delete(headerKey);\n } else if (headerValue !== undefined) {\n headers.set(headerKey, headerValue);\n }\n }\n }\n\n return headers;\n}\n\nexport function bodySerializer(\n schema: OperationSchema,\n info: RequestFnPayload\n) {\n if (info.body === undefined) return;\n\n if (\n schema.method === 'get' ||\n schema.method === 'head' ||\n schema.method === 'options'\n )\n return;\n\n if (schema.mediaType?.includes('/form-data'))\n return getRequestBodyFormData(info);\n\n if (\n !schema.mediaType?.includes('/json') &&\n (typeof info.body === 'string' ||\n info.body instanceof Blob ||\n info.body instanceof FormData)\n ) {\n return info.body;\n }\n\n return JSON.stringify(info.body);\n}\n\nfunction getRequestBodyFormData({\n body,\n}: Pick<RequestFnPayload, 'body'>): FormData | undefined {\n if (body instanceof FormData) return body;\n if (body === null) return;\n\n if (body instanceof Blob) throw new Error('Blob not supported in form-data');\n if (body instanceof ArrayBuffer)\n throw new Error('ArrayBuffer not supported in form-data');\n if (body instanceof URLSearchParams)\n throw new Error('URLSearchParams not supported in form-data');\n if (body instanceof ReadableStream)\n throw new Error('ReadableStream not supported in form-data');\n if (typeof body === 'string')\n throw new Error('String not supported in form-data');\n if (typeof body !== 'object')\n throw new Error(`Unsupported body type ${typeof body} in form-data.`);\n\n const formData = new FormData();\n\n const process = (key: string, value: any) => {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n } else {\n formData.append(key, JSON.stringify(value));\n }\n };\n\n Object.entries(body)\n .filter(([_, value]) => typeof value !== 'undefined' && value !== null)\n .forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => process(key, v));\n } else {\n process(key, value);\n }\n });\n\n return formData;\n}\n\nfunction getBodyContentType(body: RequestFnPayload['body']) {\n if (!body) return;\n if (body instanceof Blob) return body.type || 'application/octet-stream';\n if (typeof body === 'string') return 'text/plain';\n if (!(body instanceof FormData)) return 'application/json';\n}\n\nasync function getResponseBody<T>(response: Response): Promise<T | undefined> {\n if (response.status === 204 || response.headers.get('Content-Length') === '0')\n return undefined;\n\n const contentType = response.headers.get('Content-Type')?.toLowerCase();\n const isJSON =\n contentType?.includes('/json') || contentType?.includes('+json');\n\n if (isJSON) {\n // attempt to parse JSON for successful responses, otherwise fail\n if (response.ok) return response.json();\n\n const errorFallbackResponse = response.clone(); // clone to allow multiple reads\n\n return response.json().catch(() => {\n // falling back to .text() when necessary for error messages\n return errorFallbackResponse.text();\n });\n }\n\n return response.text() as Promise<T>;\n}\n\n// To have definitely typed headers without a conversion to stings\nexport type HeadersOptions =\n | HeadersInit\n | Record<string, string | number | boolean | null | undefined>;\n\nexport interface OperationSchema {\n /**\n * Operation path\n * @example /user/{id}\n */\n readonly url: string; //todo::rename to `path`\n\n /**\n * Operation method\n */\n readonly method:\n | 'get'\n | 'put'\n | 'post'\n | 'patch'\n | 'delete'\n | 'options'\n | 'head'\n | 'trace';\n\n /**\n * Media type of the request body\n * @example application/json\n */\n readonly mediaType?: string;\n\n readonly security?: string[];\n}\n\nexport interface RequestFnPayload {\n /**\n * Base URL to use for the request\n * @example 'https://api.example.com'\n */\n baseUrl: string | undefined;\n\n /**\n * OpenAPI parameters\n * @example\n * ```ts\n * { path: {id: 1}, query: {search: 'hello'} }\n * ```\n */\n readonly parameters?: {\n readonly path?: Record<string, any>;\n readonly header?: Record<string, any>;\n readonly query?: Record<string, any>;\n };\n\n /**\n * Request body\n * @example { name: 'John' }\n */\n readonly body?: BodyInit | Record<string, unknown> | null;\n\n /**\n * Tanstack Query Meta\n */\n meta?: Record<string, unknown>;\n\n /** An AbortSignal to set request's signal. */\n signal?: AbortSignal | null;\n}\n\nexport interface RequestFnInfo\n extends RequestFnPayload,\n Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {\n /**\n * Request headers\n * @example { 'X-Auth': '123' }\n */\n readonly headers?: HeadersOptions;\n}\n\nexport interface RequestFnOptions {\n urlSerializer?: typeof urlSerializer;\n bodySerializer?: typeof bodySerializer;\n fetch?: typeof fetch;\n}\n\nexport type RequestFn<T> = typeof requestFn<T>;\n\ntype WithRequired<T, K extends keyof T> = T & {\n [_ in K]: {};\n};\n"],"names":["requestFn","schema","requestInfo","options","baseRequestFn","urlSerializer","bodySerializer","requestSchema","parameters","headers","body","requestInfoRest","requestBody","baseFetch","fetch","response","method","toUpperCase","mergeHeaders","Accept","mediaType","getBodyContentType","header","FormData","undefined","clonedResponse","clone","ok","getResponseBody","info","path","url","replace","substring","group","Object","prototype","hasOwnProperty","call","encodeURI","String","baseUrl","query","getQueryString","params","qs","append","key","value","push","encodeURIComponent","process","Array","isArray","forEach","v","entries","k","length","join","allHeaders","Headers","headerSet","headersIterator","headerKey","headerValue","delete","set","includes","getRequestBodyFormData","Blob","JSON","stringify","Error","ArrayBuffer","URLSearchParams","ReadableStream","formData","filter","_","type","status","get","contentType","toLowerCase","isJSON","json","errorFallbackResponse","catch","text"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"requestFn.d.ts","sourceRoot":"","sources":["../../../src/lib/requestFn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,aAAa,EAAE,eAAe,EAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAqBR;AAoCD,wBAAgB,YAAY,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,WAuBzE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,wCAwBvB;AA+ED,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,MAAM,EACX,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE1D;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAC3C,CAAC,IAAI,CAAC,GAAG,EAAE;CACb,CAAC"}
1
+ {"version":3,"file":"requestFn.d.ts","sourceRoot":"","sources":["../../../src/lib/requestFn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,aAAa,EAAE,eAAe,EAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,YAAY,CAAC,gBAAgB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAC1E,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,GACrB,MAAM,CAqBR;AAoCD,wBAAgB,YAAY,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,WAuBzE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,gBAAgB,wCAwBvB;AA0ED,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,MAAM,EACX,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAE1D;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aACf,SAAQ,gBAAgB,EACtB,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG;KAC3C,CAAC,IAAI,CAAC,GAAG,EAAE;CACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/react",
3
- "version": "1.14.0-beta.4",
3
+ "version": "1.14.0",
4
4
  "description": "API client for React, providing type-safe requests and dynamic Tanstack Query React Hooks via a modular, Proxy-based architecture.",
5
5
  "scripts": {
6
6
  "build": "NODE_ENV=production rollup --config rollup.config.mjs && tsc --project tsconfig.build.json --emitDeclarationOnly",
@@ -15,9 +15,9 @@
15
15
  },
16
16
  "sideEffects": false,
17
17
  "devDependencies": {
18
- "@openapi-qraft/cli": "1.14.0-beta.4",
18
+ "@openapi-qraft/cli": "1.14.0",
19
19
  "@openapi-qraft/eslint-config": "1.0.0",
20
- "@openapi-qraft/openapi-typescript-plugin": "^1.1.0-beta.4",
20
+ "@openapi-qraft/openapi-typescript-plugin": "^1.1.0",
21
21
  "@openapi-qraft/rollup-config": "1.0.0",
22
22
  "@openapi-qraft/test-fixtures": "1.0.0",
23
23
  "@tanstack/react-query": "^5.17.3",
@@ -272,11 +272,6 @@ async function getResponseBody<T>(response: Response): Promise<T | undefined> {
272
272
  const errorFallbackResponse = response.clone(); // clone to allow multiple reads
273
273
 
274
274
  return response.json().catch(() => {
275
- if (process.env.NODE_ENV === 'development') {
276
- console.warn(
277
- 'Failed to parse response body as JSON. Falling back to .text()'
278
- );
279
- }
280
275
  // falling back to .text() when necessary for error messages
281
276
  return errorFallbackResponse.text();
282
277
  });