@alwatr/fetch 9.20.1 → 9.23.3
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/dist/main.js +3 -3
- package/dist/main.js.map +1 -1
- package/package.json +5 -5
package/dist/main.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* 📦 @alwatr/fetch v9.
|
|
2
|
-
import{delay as C}from"@alwatr/delay";import{getGlobalThis as J}from"@alwatr/global-this";import{hasOwn as j}from"@alwatr/has-own";import{HttpStatusCodes as D,MimeTypes as O}from"@alwatr/http-primer";import{createLogger as P}from"@alwatr/logger";import{parseDuration as v}from"@alwatr/parse-duration";class G extends Error{response;data;reason;constructor(B,X,z,Q){super(X);this.name="FetchError",this.reason=B,this.response=z,this.data=Q}}var Z=P("@alwatr/fetch"),W=J(),$=j(W,"caches"),U={},x={method:"GET",headers:{},timeout:8000,retry:3,retryDelay:1000,removeDuplicate:"never",cacheStrategy:"network_only",cacheStorageName:"fetch_cache"};function N(B,X){Z.logMethodArgs?.("_processOptions",{url:B,options:X});let z={...x,...X,url:B};if(z.window??=null,z.removeDuplicate==="auto")z.removeDuplicate=$?"until_load":"always";if(z.url.lastIndexOf("?")===-1&&z.queryParams!=null){let Q=z.queryParams,V=Object.keys(Q).map((Y)=>`${encodeURIComponent(Y)}=${encodeURIComponent(String(Q[Y]))}`);if(V.length>0)z.url+="?"+V.join("&")}if(z.bodyJson!==void 0)z.body=JSON.stringify(z.bodyJson),z.headers["content-type"]=O.JSON;if(z.bearerToken!==void 0)z.headers.authorization=`Bearer ${z.bearerToken}`;else if(z.alwatrAuth!==void 0)z.headers.authorization=`Alwatr ${z.alwatrAuth.userId}:${z.alwatrAuth.userToken}`;return Z.logProperty?.("fetch.options",z),z}async function K(B){if(B.cacheStrategy==="network_only")return M(B);if(Z.logMethod?.("handleCacheStrategy_"),!$)return Z.incident?.("fetch","fetch_cache_strategy_unsupported",{cacheSupported:$}),B.cacheStrategy="network_only",M(B);let X=await caches.open(B.cacheStorageName),z=new Request(B.url,B);switch(B.cacheStrategy){case"cache_first":{let Q=await X.match(z);if(Q!=null)return Q;let V=await M(B);if(V.ok)X.put(z,V.clone());return V}case"cache_only":{let Q=await X.match(z);if(Q==null)throw new G("cache_not_found","Resource not found in cache");return Q}case"network_first":try{let Q=await M(B);if(Q.ok)X.put(z,Q.clone());return Q}catch(Q){let V=await X.match(z);if(V!=null)return V;throw Q}case"update_cache":{let Q=await M(B);if(Q.ok)X.put(z,Q.clone());return Q}case"stale_while_revalidate":{let Q=await X.match(z),V=M(B).then((Y)=>{if(Y.ok){if(X.put(z,Y.clone()),typeof B.revalidateCallback==="function")setTimeout(B.revalidateCallback,0,Y.clone())}return Y});return Q??V}default:return M(B)}}async function M(B){if(B.removeDuplicate==="never")return I(B);Z.logMethod?.("handleRemoveDuplicate_");let X=typeof B.body==="string"?B.body:"",z=`${B.method} ${B.url} ${X}`;U[z]??=I(B);try{let Q=await U[z];if(U[z]!=null){if(Q.ok!==!0||B.removeDuplicate==="until_load")delete U[z]}return Q.clone()}catch(Q){throw delete U[z],Q}}async function I(B){if(!(B.retry>1))return L(B);Z.logMethod?.("handleRetryPattern_"),B.retry--;let X=B.signal;try{let z=await L(B);if(!z.ok&&z.status>=D.Error_Server_500_Internal_Server_Error)throw new G("http_error",`HTTP error! status: ${z.status} ${z.statusText}`,z);return z}catch(z){if(Z.accident("fetch","fetch_failed_retry",z),W.navigator?.onLine===!1)throw Z.accident("handleRetryPattern_","offline","Skip retry because offline"),z;return await C.by(B.retryDelay),B.signal=X,I(B)}}function L(B){if(B.timeout===0)return W.fetch(B.url,B);return Z.logMethod?.("handleTimeout_"),new Promise((X,z)=>{let Q=typeof AbortController==="function"?new AbortController:null,V=B.signal;if(B.signal=Q?.signal,Q!==null&&V!=null)V.addEventListener("abort",()=>Q.abort(),{once:!0});let Y=setTimeout(()=>{z(new G("timeout","fetch_timeout")),Q?.abort("fetch_timeout")},v(B.timeout));W.fetch(B.url,B).then((H)=>X(H)).catch((H)=>z(H)).finally(()=>{clearTimeout(Y)})})}async function A(B,X={}){Z.logMethodArgs?.("fetch",{url:B,options:X});let z=N(B,X);try{let Q=await K(z);if(!Q.ok)throw new G("http_error",`HTTP error! status: ${Q.status} ${Q.statusText}`,Q);return[Q,null]}catch(Q){let V;if(Q instanceof G){if(V=Q,V.response!==void 0&&V.data===void 0){let Y=await V.response.text().catch(()=>"");if(Y.trim().length>0)try{V.data=JSON.parse(Y)}catch{V.data=Y}}}else if(Q instanceof Error)if(Q.name==="AbortError")V=new G("aborted",Q.message);else V=new G("network_error",Q.message);else V=new G("unknown_error",String(Q??"unknown_error"));return Z.error("fetch",V.reason,{error:V}),[null,V]}}A.version="9.
|
|
1
|
+
/* 📦 @alwatr/fetch v9.23.3 */
|
|
2
|
+
import{delay as C}from"@alwatr/delay";import{getGlobalThis as J}from"@alwatr/global-this";import{hasOwn as j}from"@alwatr/has-own";import{HttpStatusCodes as D,MimeTypes as O}from"@alwatr/http-primer";import{createLogger as P}from"@alwatr/logger";import{parseDuration as v}from"@alwatr/parse-duration";class G extends Error{response;data;reason;constructor(B,X,z,Q){super(X);this.name="FetchError",this.reason=B,this.response=z,this.data=Q}}var Z=P("@alwatr/fetch"),W=J(),$=j(W,"caches"),U={},x={method:"GET",headers:{},timeout:8000,retry:3,retryDelay:1000,removeDuplicate:"never",cacheStrategy:"network_only",cacheStorageName:"fetch_cache"};function N(B,X){Z.logMethodArgs?.("_processOptions",{url:B,options:X});let z={...x,...X,url:B};if(z.window??=null,z.removeDuplicate==="auto")z.removeDuplicate=$?"until_load":"always";if(z.url.lastIndexOf("?")===-1&&z.queryParams!=null){let Q=z.queryParams,V=Object.keys(Q).map((Y)=>`${encodeURIComponent(Y)}=${encodeURIComponent(String(Q[Y]))}`);if(V.length>0)z.url+="?"+V.join("&")}if(z.bodyJson!==void 0)z.body=JSON.stringify(z.bodyJson),z.headers["content-type"]=O.JSON;if(z.bearerToken!==void 0)z.headers.authorization=`Bearer ${z.bearerToken}`;else if(z.alwatrAuth!==void 0)z.headers.authorization=`Alwatr ${z.alwatrAuth.userId}:${z.alwatrAuth.userToken}`;return Z.logProperty?.("fetch.options",z),z}async function K(B){if(B.cacheStrategy==="network_only")return M(B);if(Z.logMethod?.("handleCacheStrategy_"),!$)return Z.incident?.("fetch","fetch_cache_strategy_unsupported",{cacheSupported:$}),B.cacheStrategy="network_only",M(B);let X=await caches.open(B.cacheStorageName),z=new Request(B.url,B);switch(B.cacheStrategy){case"cache_first":{let Q=await X.match(z);if(Q!=null)return Q;let V=await M(B);if(V.ok)X.put(z,V.clone());return V}case"cache_only":{let Q=await X.match(z);if(Q==null)throw new G("cache_not_found","Resource not found in cache");return Q}case"network_first":try{let Q=await M(B);if(Q.ok)X.put(z,Q.clone());return Q}catch(Q){let V=await X.match(z);if(V!=null)return V;throw Q}case"update_cache":{let Q=await M(B);if(Q.ok)X.put(z,Q.clone());return Q}case"stale_while_revalidate":{let Q=await X.match(z),V=M(B).then((Y)=>{if(Y.ok){if(X.put(z,Y.clone()),typeof B.revalidateCallback==="function")setTimeout(B.revalidateCallback,0,Y.clone())}return Y});return Q??V}default:return M(B)}}async function M(B){if(B.removeDuplicate==="never")return I(B);Z.logMethod?.("handleRemoveDuplicate_");let X=typeof B.body==="string"?B.body:"",z=`${B.method} ${B.url} ${X}`;U[z]??=I(B);try{let Q=await U[z];if(U[z]!=null){if(Q.ok!==!0||B.removeDuplicate==="until_load")delete U[z]}return Q.clone()}catch(Q){throw delete U[z],Q}}async function I(B){if(!(B.retry>1))return L(B);Z.logMethod?.("handleRetryPattern_"),B.retry--;let X=B.signal;try{let z=await L(B);if(!z.ok&&z.status>=D.Error_Server_500_Internal_Server_Error)throw new G("http_error",`HTTP error! status: ${z.status} ${z.statusText}`,z);return z}catch(z){if(Z.accident("fetch","fetch_failed_retry",z),W.navigator?.onLine===!1)throw Z.accident("handleRetryPattern_","offline","Skip retry because offline"),z;return await C.by(B.retryDelay),B.signal=X,I(B)}}function L(B){if(B.timeout===0)return W.fetch(B.url,B);return Z.logMethod?.("handleTimeout_"),new Promise((X,z)=>{let Q=typeof AbortController==="function"?new AbortController:null,V=B.signal;if(B.signal=Q?.signal,Q!==null&&V!=null)V.addEventListener("abort",()=>Q.abort(),{once:!0});let Y=setTimeout(()=>{z(new G("timeout","fetch_timeout")),Q?.abort("fetch_timeout")},v(B.timeout));W.fetch(B.url,B).then((H)=>X(H)).catch((H)=>z(H)).finally(()=>{clearTimeout(Y)})})}async function A(B,X={}){Z.logMethodArgs?.("fetch",{url:B,options:X});let z=N(B,X);try{let Q=await K(z);if(!Q.ok)throw new G("http_error",`HTTP error! status: ${Q.status} ${Q.statusText}`,Q);return[Q,null]}catch(Q){let V;if(Q instanceof G){if(V=Q,V.response!==void 0&&V.data===void 0){let Y=await V.response.text().catch(()=>"");if(Y.trim().length>0)try{V.data=JSON.parse(Y)}catch{V.data=Y}}}else if(Q instanceof Error)if(Q.name==="AbortError")V=new G("aborted",Q.message);else V=new G("network_error",Q.message);else V=new G("unknown_error",String(Q??"unknown_error"));return Z.error("fetch",V.reason,{error:V}),[null,V]}}A.version="9.23.3";async function R(B,X={}){Z.logMethodArgs?.("fetchJson",{url:B,options:X});let[z,Q]=await A(B,X);if(Q)return[null,Q];let V=await z.text().catch(()=>"");if(V.trim().length===0){let Y=new G("json_parse_error","Response body is empty, cannot parse JSON",z,V);return Z.error("fetchJson",Y.reason,{error:Y}),[null,Y]}try{let Y=JSON.parse(V);if(X.requireJsonResponseWithOkTrue&&Y.ok!==!0){let H=new G("json_response_error",'Response JSON "ok" property is not true',z,Y);return Z.error("fetchJson",H.reason,{error:H}),[null,H]}return[Y,null]}catch(Y){let H=new G("json_parse_error",Y instanceof Error?Y.message:"Failed to parse JSON response",z,V);return Z.error("fetchJson",H.reason,{error:H}),[null,H]}}export{R as fetchJson,A as fetch,$ as cacheSupported,G as FetchError};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=A69090513E6CC26564756E2164756E21
|
|
5
5
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"/**\n * @module @alwatr/fetch\n *\n * An enhanced, lightweight, and dependency-free wrapper for the native `fetch`\n * API. It provides modern features like caching strategies, request retries,\n * timeouts, and duplicate request handling.\n */\n\nimport type {JsonObject} from '@alwatr/type-helper';\nimport {_processOptions, handleCacheStrategy_, logger_, cacheSupported} from './core.js';\nimport {FetchError} from './error.js';\n\nimport type {FetchJsonOptions, FetchOptions, FetchResponse} from './type.js';\n\nexport {cacheSupported};\nexport * from './error.js';\nexport type * from './type.js';\n\n/**\n * An enhanced wrapper for the native `fetch` function.\n *\n * This function extends the standard `fetch` with additional features such as:\n * - **Timeout**: Aborts the request if it takes too long.\n * - **Retry Pattern**: Automatically retries the request on failure (e.g., server errors or network issues).\n * - **Duplicate Request Handling**: Prevents sending multiple identical requests in parallel.\n * - **Cache Strategies**: Provides various caching mechanisms using the browser's Cache API.\n * - **Simplified API**: Offers convenient options for adding query parameters, JSON bodies, and auth tokens.\n *\n * @see {@link FetchOptions} for a detailed list of available options.\n *\n * @param {string} url - The URL to fetch.\n * @param {FetchOptions} options - Optional configuration for the fetch request.\n * @returns {Promise<FetchResponse>} A promise that resolves to a tuple. On\n * success, it returns `[response, null]`. On failure, it returns `[null,\n * FetchError]`.\n *\n * @example\n * ```typescript\n * import {fetch} from '@alwatr/fetch';\n *\n * async function fetchProducts() {\n * const [response, error] = await fetch('/api/products', {\n * queryParams: { limit: 10 },\n * timeout: 5_000,\n * });\n *\n * if (error) {\n * console.error('Request failed:', error.reason);\n * return;\n * }\n *\n * // At this point, response is guaranteed to be valid and ok.\n * const data = await response.json();\n * console.log('Products:', data);\n * }\n *\n * fetchProducts();\n * ```\n */\nexport async function fetch(url: string, options: FetchOptions = {}): Promise<FetchResponse> {\n logger_.logMethodArgs?.('fetch', {url, options});\n\n const options_ = _processOptions(url, options);\n\n try {\n // Start the fetch lifecycle, beginning with the cache strategy.\n const response = await handleCacheStrategy_(options_);\n\n if (!response.ok) {\n throw new FetchError('http_error', `HTTP error! status: ${response.status} ${response.statusText}`, response);\n }\n\n return [response, null];\n } catch (err) {\n let error: FetchError;\n\n if (err instanceof FetchError) {\n error = err;\n\n if (error.response !== undefined && error.data === undefined) {\n const bodyText = await error.response.text().catch(() => '');\n\n if (bodyText.trim().length > 0) {\n try {\n // Try to parse as JSON\n error.data = JSON.parse(bodyText);\n } catch {\n error.data = bodyText;\n }\n }\n }\n } else if (err instanceof Error) {\n if (err.name === 'AbortError') {\n error = new FetchError('aborted', err.message);\n } else {\n error = new FetchError('network_error', err.message);\n }\n } else {\n error = new FetchError('unknown_error', String(err ?? 'unknown_error'));\n }\n\n logger_.error('fetch', error.reason, {error});\n return [null, error];\n }\n}\n\nfetch.version = __package_version__;\n\n/**\n * An enhanced wrapper for the native `fetch` function that automatically parses JSON responses.\n *\n * This function extends the standard `fetch` with the same features (timeout, retry, caching, etc.)\n * and automatically parses the response body as JSON. It returns a tuple with the parsed data or an error.\n *\n * @template T - The expected type of the JSON response data.\n *\n * @param {string} url - The URL to fetch.\n * @param {FetchOptions} options - Optional configuration for the fetch request.\n * @returns {Promise<[T, null] | [null, FetchError]>} A promise that resolves to a tuple.\n * On success, it returns `[data, null]` where data is the parsed JSON.\n * On failure, it returns `[null, FetchError]`.\n *\n * @example\n * ```typescript\n * import {fetchJson} from '@alwatr/fetch';\n *\n * interface Product {\n * ok: true;\n * id: number;\n * name: string;\n * price: number;\n * }\n *\n * async function getProduct(id: number) {\n * const [data, error] = await fetchJson<Product>(`/api/products/${id}`, {\n * timeout: 5_000,\n * cacheStrategy: 'cache_first',\n * requireResponseJsonWithOkTrue: true,\n * });\n *\n * if (error) {\n * console.error('Failed to fetch product:', error.reason);\n * return;\n * }\n *\n * // data is now typed as Product and guaranteed to be valid\n * console.log('Product name:', data.name);\n * }\n * ```\n */\nexport async function fetchJson<T extends JsonObject = JsonObject>(\n url: string,\n options: FetchJsonOptions = {},\n): Promise<[T, null] | [null, FetchError]> {\n logger_.logMethodArgs?.('fetchJson', {url, options});\n\n const [response, error] = await fetch(url, options);\n\n if (error) {\n return [null, error];\n }\n\n const bodyText = await response.text().catch(() => '');\n if (bodyText.trim().length === 0) {\n const parseError = new FetchError(\n 'json_parse_error',\n 'Response body is empty, cannot parse JSON',\n response,\n bodyText,\n );\n logger_.error('fetchJson', parseError.reason, {error: parseError});\n return [null, parseError];\n }\n\n try {\n const data = JSON.parse(bodyText) as T;\n if (options.requireJsonResponseWithOkTrue && data.ok !== true) {\n const parseError = new FetchError(\n 'json_response_error',\n 'Response JSON \"ok\" property is not true',\n response,\n data,\n );\n logger_.error('fetchJson', parseError.reason, {error: parseError});\n return [null, parseError];\n }\n return [data, null];\n } catch (err) {\n const parseError = new FetchError(\n 'json_parse_error',\n err instanceof Error ? err.message : 'Failed to parse JSON response',\n response,\n bodyText,\n );\n logger_.error('fetchJson', parseError.reason, {error: parseError});\n return [null, parseError];\n }\n}\n"
|
|
8
8
|
],
|
|
9
9
|
"mappings": ";AAAA,gBAAQ,sBACR,wBAAQ,4BACR,iBAAQ,wBACR,0BAAQ,eAAiB,4BACzB,uBAAQ,uBACR,wBAAQ,+BCeD,MAAM,UAAmB,KAAM,CAM7B,SAMA,KAKA,OAEP,WAAW,CAAC,EAA0B,EAAiB,EAAqB,EAA4B,CACtG,MAAM,CAAO,EACb,KAAK,KAAO,aACZ,KAAK,OAAS,EACd,KAAK,SAAW,EAChB,KAAK,KAAO,EAEhB,CDnCO,IAAM,EAAU,EAAa,eAAe,EAE7C,EAAc,EAAc,EAKrB,EAAiC,EAAO,EAAa,QAAQ,EAOpE,EAA8D,CAAC,EAM/D,EAA2C,CAC/C,OAAQ,MACR,QAAS,CAAC,EACV,QAAS,KACT,MAAO,EACP,WAAY,KACZ,gBAAiB,QACjB,cAAe,eACf,iBAAkB,aACpB,EAgBO,SAAS,CAAe,CAAC,EAAa,EAAuC,CAClF,EAAQ,gBAAgB,kBAAmB,CAAC,MAAK,SAAO,CAAC,EAEzD,IAAM,EAA2B,IAC5B,KACA,EACH,KACF,EAIA,GAFA,EAAS,SAAW,KAEhB,EAAS,kBAAoB,OAC/B,EAAS,gBAAkB,EAAiB,aAAe,SAI7D,GAAI,EAAS,IAAI,YAAY,GAAG,IAAM,IAAM,EAAS,aAAe,KAAM,CACxE,IAAM,EAAc,EAAS,YAEvB,EAAa,OAChB,KAAK,CAAW,EAChB,IAAI,KAAO,GAAG,mBAAmB,CAAG,KAAK,mBAAmB,OAAO,EAAY,EAAI,CAAC,GAAG,EAE1F,GAAI,EAAW,OAAS,EACtB,EAAS,KAAO,IAAM,EAAW,KAAK,GAAG,EAK7C,GAAI,EAAS,WAAa,OACxB,EAAS,KAAO,KAAK,UAAU,EAAS,QAAQ,EAChD,EAAS,QAAQ,gBAAkB,EAAU,KAI/C,GAAI,EAAS,cAAgB,OAC3B,EAAS,QAAQ,cAAgB,UAAU,EAAS,cAEjD,QAAI,EAAS,aAAe,OAC/B,EAAS,QAAQ,cAAgB,UAAU,EAAS,WAAW,UAAU,EAAS,WAAW,YAK/F,OAFA,EAAQ,cAAc,gBAAiB,CAAQ,EAExC,EAYT,eAAsB,CAAoB,CAAC,EAA4C,CACrF,GAAI,EAAQ,gBAAkB,eAC5B,OAAO,EAAuB,CAAO,EAMvC,GAFA,EAAQ,YAAY,sBAAsB,EAEtC,CAAC,EAMH,OALA,EAAQ,WAAW,QAAS,mCAAoC,CAC9D,gBACF,CAAC,EAED,EAAQ,cAAgB,eACjB,EAAuB,CAAO,EAIvC,IAAM,EAAe,MAAM,OAAO,KAAK,EAAQ,gBAAgB,EAEzD,EAAU,IAAI,QAAQ,EAAQ,IAAK,CAAO,EAEhD,OAAQ,EAAQ,mBACT,cAAe,CAClB,IAAM,EAAiB,MAAM,EAAa,MAAM,CAAO,EACvD,GAAI,GAAkB,KACpB,OAAO,EAIT,IAAM,EAAW,MAAM,EAAuB,CAAO,EACrD,GAAI,EAAS,GACX,EAAa,IAAI,EAAS,EAAS,MAAM,CAAC,EAE5C,OAAO,CACT,KAEK,aAAc,CACjB,IAAM,EAAiB,MAAM,EAAa,MAAM,CAAO,EACvD,GAAI,GAAkB,KACpB,MAAM,IAAI,EAAW,kBAAmB,6BAA6B,EAIvE,OAAO,CACT,KAEK,gBACH,GAAI,CACF,IAAM,EAAkB,MAAM,EAAuB,CAAO,EAC5D,GAAI,EAAgB,GAClB,EAAa,IAAI,EAAS,EAAgB,MAAM,CAAC,EAEnD,OAAO,EAET,MAAO,EAAK,CACV,IAAM,EAAiB,MAAM,EAAa,MAAM,CAAO,EACvD,GAAI,GAAkB,KACpB,OAAO,EAIT,MAAM,MAIL,eAAgB,CACnB,IAAM,EAAkB,MAAM,EAAuB,CAAO,EAC5D,GAAI,EAAgB,GAClB,EAAa,IAAI,EAAS,EAAgB,MAAM,CAAC,EAEnD,OAAO,CACT,KAEK,yBAA0B,CAC7B,IAAM,EAAiB,MAAM,EAAa,MAAM,CAAO,EACjD,EAAyB,EAAuB,CAAO,EAAE,KAAK,CAAC,IAAoB,CACvF,GAAI,EAAgB,IAElB,GADA,EAAa,IAAI,EAAS,EAAgB,MAAM,CAAC,EAC7C,OAAO,EAAQ,qBAAuB,WACxC,WAAW,EAAQ,mBAAoB,EAAG,EAAgB,MAAM,CAAC,EAGrE,OAAO,EACR,EAED,OAAO,GAAkB,CAC3B,SAGE,OAAO,EAAuB,CAAO,GAgB3C,eAAe,CAAsB,CAAC,EAA4C,CAChF,GAAI,EAAQ,kBAAoB,QAC9B,OAAO,EAAoB,CAAO,EAIpC,EAAQ,YAAY,wBAAwB,EAI5C,IAAM,EAAa,OAAO,EAAQ,OAAS,SAAW,EAAQ,KAAO,GAC/D,EAAW,GAAG,EAAQ,UAAU,EAAQ,OAAO,IAGrD,EAAyB,KAAc,EAAoB,CAAO,EAElE,GAAI,CAEF,IAAM,EAAW,MAAM,EAAyB,GAGhD,GAAI,EAAyB,IAAa,MACxC,GAAI,EAAS,KAAO,IAAQ,EAAQ,kBAAoB,aAEtD,OAAO,EAAyB,GAKpC,OAAO,EAAS,MAAM,EAExB,MAAO,EAAK,CAGV,MADA,OAAO,EAAyB,GAC1B,GAaV,eAAe,CAAmB,CAAC,EAA4C,CAC7E,GAAI,EAAE,EAAQ,MAAQ,GACpB,OAAO,EAAe,CAAO,EAI/B,EAAQ,YAAY,qBAAqB,EACzC,EAAQ,QAER,IAAM,EAAsB,EAAQ,OAEpC,GAAI,CACF,IAAM,EAAW,MAAM,EAAe,CAAO,EAE7C,GAAI,CAAC,EAAS,IAAM,EAAS,QAAU,EAAgB,uCAErD,MAAM,IAAI,EAAW,aAAc,uBAAuB,EAAS,UAAU,EAAS,aAAc,CAAQ,EAG9G,OAAO,EAET,MAAO,EAAK,CAIV,GAHA,EAAQ,SAAS,QAAS,qBAAsB,CAAG,EAG/C,EAAY,WAAW,SAAW,GAEpC,MADA,EAAQ,SAAS,sBAAuB,UAAW,4BAA4B,EACzE,EAOR,OAJA,MAAM,EAAM,GAAG,EAAQ,UAAU,EAGjC,EAAQ,OAAS,EACV,EAAoB,CAAO,GActC,SAAS,CAAc,CAAC,EAA4C,CAClE,GAAI,EAAQ,UAAY,EAEtB,OAAO,EAAY,MAAM,EAAQ,IAAK,CAAO,EAK/C,OAFA,EAAQ,YAAY,gBAAgB,EAE7B,IAAI,QAAQ,CAAC,EAAU,IAAW,CACvC,IAAM,EAAkB,OAAO,kBAAoB,WAAa,IAAI,gBAAoB,KAClF,EAAsB,EAAQ,OAIpC,GAHA,EAAQ,OAAS,GAAiB,OAG9B,IAAoB,MAAQ,GAAuB,KACrD,EAAoB,iBAAiB,QAAS,IAAM,EAAgB,MAAM,EAAG,CAAC,KAAM,EAAI,CAAC,EAG3F,IAAM,EAAY,WAAW,IAAM,CACjC,EAAO,IAAI,EAAW,UAAW,eAAe,CAAC,EACjD,GAAiB,MAAM,eAAe,GACrC,EAAc,EAAQ,OAAQ,CAAC,EAElC,EACG,MAAM,EAAQ,IAAK,CAAO,EAC1B,KAAK,CAAC,IAAa,EAAS,CAAQ,CAAC,EACrC,MAAM,CAAC,IAAW,EAAO,CAAM,CAAC,EAChC,QAAQ,IAAM,CAEb,aAAa,CAAS,EACvB,EACJ,EE7RH,eAAsB,CAAK,CAAC,EAAa,EAAwB,CAAC,EAA2B,CAC3F,EAAQ,gBAAgB,QAAS,CAAC,MAAK,SAAO,CAAC,EAE/C,IAAM,EAAW,EAAgB,EAAK,CAAO,EAE7C,GAAI,CAEF,IAAM,EAAW,MAAM,EAAqB,CAAQ,EAEpD,GAAI,CAAC,EAAS,GACZ,MAAM,IAAI,EAAW,aAAc,uBAAuB,EAAS,UAAU,EAAS,aAAc,CAAQ,EAG9G,MAAO,CAAC,EAAU,IAAI,EACtB,MAAO,EAAK,CACZ,IAAI,EAEJ,GAAI,aAAe,GAGjB,GAFA,EAAQ,EAEJ,EAAM,WAAa,QAAa,EAAM,OAAS,OAAW,CAC5D,IAAM,EAAW,MAAM,EAAM,SAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EAE3D,GAAI,EAAS,KAAK,EAAE,OAAS,EAC3B,GAAI,CAEF,EAAM,KAAO,KAAK,MAAM,CAAQ,EAChC,KAAM,CACN,EAAM,KAAO,IAId,QAAI,aAAe,MACxB,GAAI,EAAI,OAAS,aACf,EAAQ,IAAI,EAAW,UAAW,EAAI,OAAO,EAE7C,OAAQ,IAAI,EAAW,gBAAiB,EAAI,OAAO,EAGrD,OAAQ,IAAI,EAAW,gBAAiB,OAAO,GAAO,eAAe,CAAC,EAIxE,OADA,EAAQ,MAAM,QAAS,EAAM,OAAQ,CAAC,OAAK,CAAC,EACrC,CAAC,KAAM,CAAK,GAIvB,EAAM,QAAU,SA4ChB,eAAsB,CAA4C,CAChE,EACA,EAA4B,CAAC,EACY,CACzC,EAAQ,gBAAgB,YAAa,CAAC,MAAK,SAAO,CAAC,EAEnD,IAAO,EAAU,GAAS,MAAM,EAAM,EAAK,CAAO,EAElD,GAAI,EACF,MAAO,CAAC,KAAM,CAAK,EAGrB,IAAM,EAAW,MAAM,EAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EACrD,GAAI,EAAS,KAAK,EAAE,SAAW,EAAG,CAChC,IAAM,EAAa,IAAI,EACrB,mBACA,4CACA,EACA,CACF,EAEA,OADA,EAAQ,MAAM,YAAa,EAAW,OAAQ,CAAC,MAAO,CAAU,CAAC,EAC1D,CAAC,KAAM,CAAU,EAG1B,GAAI,CACF,IAAM,EAAO,KAAK,MAAM,CAAQ,EAChC,GAAI,EAAQ,+BAAiC,EAAK,KAAO,GAAM,CAC7D,IAAM,EAAa,IAAI,EACrB,sBACA,0CACA,EACA,CACF,EAEA,OADA,EAAQ,MAAM,YAAa,EAAW,OAAQ,CAAC,MAAO,CAAU,CAAC,EAC1D,CAAC,KAAM,CAAU,EAE1B,MAAO,CAAC,EAAM,IAAI,EAClB,MAAO,EAAK,CACZ,IAAM,EAAa,IAAI,EACrB,mBACA,aAAe,MAAQ,EAAI,QAAU,gCACrC,EACA,CACF,EAEA,OADA,EAAQ,MAAM,YAAa,EAAW,OAAQ,CAAC,MAAO,CAAU,CAAC,EAC1D,CAAC,KAAM,CAAU",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "A69090513E6CC26564756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwatr/fetch",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.23.3",
|
|
4
4
|
"description": "`@alwatr/fetch` is an enhanced, lightweight, and dependency-free wrapper for the native `fetch` API. It provides modern features like caching strategies, request retries, timeouts, and intelligent duplicate request handling, all in a compact package.",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"author": "S. Ali Mihandoost <ali.mihandoost@gmail.com> (https://ali.mihandoost.com)",
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@alwatr/delay": "9.
|
|
25
|
-
"@alwatr/global-this": "9.
|
|
24
|
+
"@alwatr/delay": "9.23.3",
|
|
25
|
+
"@alwatr/global-this": "9.23.3",
|
|
26
26
|
"@alwatr/has-own": "9.16.0",
|
|
27
27
|
"@alwatr/http-primer": "9.16.0",
|
|
28
|
-
"@alwatr/logger": "9.
|
|
28
|
+
"@alwatr/logger": "9.23.3",
|
|
29
29
|
"@alwatr/parse-duration": "9.16.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"utility",
|
|
83
83
|
"utils"
|
|
84
84
|
],
|
|
85
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "e38ea606b08ee85402fe112d4e32e741a446dcad"
|
|
86
86
|
}
|