aptechka 0.92.4 → 0.92.5

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.
@@ -1 +1 @@
1
- "use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties;var __getOwnPropDescs=Object.getOwnPropertyDescriptors;var __getOwnPropSymbols=Object.getOwnPropertySymbols;var __hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const cache_index=require("../cache/index.cjs");require("../Store-B96mD8mD.cjs");require("../index-BoGx2BWX.cjs");require("construct-style-sheets-polyfill");const url=require("../url-D0rESDQq.cjs"),cache=new cache_index.Cache;function apiFetcher(input,options){return __async(this,null,function*(){var _a,_b;const startTime=Date.now(),baseResult={data:null,error:null,status:"unknown",headers:new Headers};try{let url$1=input;if(options!=null&&options.params){const params=url.searchParamsObjectToString(options.params);if(params){const separator=url$1.includes("?")?"&":"?";url$1+=`${separator}${params}`}}const cacheKey=(_a=options==null?void 0:options.cacheKey)!=null?_a:url$1,cacheTTL=(_b=options==null?void 0:options.cacheTTLMinutes)!=null?_b:0,cacheAllowed=cacheTTL>0;if((options!=null&&options.forceClearCache||globalThis.forceClearCache)&&cache.delete(cacheKey),cacheAllowed){const cached=cache.get(cacheKey);if(cached)return __spreadProps(__spreadValues({},baseResult),{data:cached,cached:!0,status:"success",time:Date.now()-startTime})}const response=yield fetch(url$1,options==null?void 0:options.init);if(!response.ok){const errorText=yield response.text();return __spreadProps(__spreadValues({},baseResult),{error:errorText,status:"error",time:Date.now()-startTime,headers:response.headers})}const contentType=response.headers.get("content-type");if(!(contentType!=null&&contentType.includes("application/json")))return __spreadProps(__spreadValues({},baseResult),{error:"Endpoint did not return JSON",status:"error",time:Date.now()-startTime,headers:response.headers});const jsonData=yield response.json();return cacheAllowed&&cache.set(cacheKey,jsonData,cacheTTL),__spreadProps(__spreadValues({},baseResult),{data:jsonData,status:"success",time:Date.now()-startTime,headers:response.headers})}catch(error){const errorMessage=error instanceof Error?error.message:String(error);return __spreadProps(__spreadValues({},baseResult),{error:errorMessage,status:"error",time:Date.now()-startTime})}})}__name(apiFetcher,"apiFetcher");exports.apiFetcher=apiFetcher;
1
+ "use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties;var __getOwnPropDescs=Object.getOwnPropertyDescriptors;var __getOwnPropSymbols=Object.getOwnPropertySymbols;var __hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const cache_index=require("../cache/index.cjs");require("../Store-B96mD8mD.cjs");require("../index-BoGx2BWX.cjs");require("construct-style-sheets-polyfill");const url=require("../url-D0rESDQq.cjs"),apiFetcherCache=new cache_index.Cache,pendingRequests=new Map;function apiFetcherClearPendingRequests(){pendingRequests.clear()}__name(apiFetcherClearPendingRequests,"apiFetcherClearPendingRequests");function apiFetcherGetPendingRequestsCount(){return pendingRequests.size}__name(apiFetcherGetPendingRequestsCount,"apiFetcherGetPendingRequestsCount");function apiFetcher(input,options){return __async(this,null,function*(){var _a,_b;const startTime=Date.now(),baseResult={data:null,error:null,status:"unknown",headers:new Headers};try{let url$1=input;if(options!=null&&options.params){const params=url.searchParamsObjectToString(options.params);if(params){const separator=url$1.includes("?")?"&":"?";url$1+=`${separator}${params}`}}const cacheKey=(_a=options==null?void 0:options.cacheKey)!=null?_a:url$1,cacheTTL=(_b=options==null?void 0:options.cacheTTLMinutes)!=null?_b:0,cacheAllowed=cacheTTL>0;if((options!=null&&options.forceClearCache||globalThis.forceClearCache)&&(apiFetcherCache.delete(cacheKey),pendingRequests.delete(cacheKey)),cacheAllowed){const cached=apiFetcherCache.get(cacheKey);if(cached)return __spreadProps(__spreadValues({},baseResult),{data:cached,cached:!0,status:"success",time:Date.now()-startTime})}const pendingRequest=pendingRequests.get(cacheKey);if(pendingRequest)return pendingRequest;const requestPromise=__async(this,null,function*(){try{const response=yield fetch(url$1,options==null?void 0:options.init);if(!response.ok){const errorText=yield response.text();return __spreadProps(__spreadValues({},baseResult),{error:errorText,status:"error",time:Date.now()-startTime,headers:response.headers})}const contentType=response.headers.get("content-type");if(!(contentType!=null&&contentType.includes("application/json")))return __spreadProps(__spreadValues({},baseResult),{error:"Endpoint did not return JSON",status:"error",time:Date.now()-startTime,headers:response.headers});const jsonData=yield response.json();return cacheAllowed&&apiFetcherCache.set(cacheKey,jsonData,cacheTTL),__spreadProps(__spreadValues({},baseResult),{data:jsonData,status:"success",time:Date.now()-startTime,headers:response.headers})}finally{pendingRequests.delete(cacheKey)}});return pendingRequests.set(cacheKey,requestPromise),yield requestPromise}catch(error){const errorMessage=error instanceof Error?error.message:String(error);return __spreadProps(__spreadValues({},baseResult),{error:errorMessage,status:"error",time:Date.now()-startTime})}})}__name(apiFetcher,"apiFetcher");exports.apiFetcher=apiFetcher;exports.apiFetcherCache=apiFetcherCache;exports.apiFetcherClearPendingRequests=apiFetcherClearPendingRequests;exports.apiFetcherGetPendingRequestsCount=apiFetcherGetPendingRequestsCount;
@@ -1,3 +1,4 @@
1
+ import { Cache } from '../cache';
1
2
  export interface IAPIFetcherOptions<Params extends object = {}> {
2
3
  init?: RequestInit;
3
4
  cacheKey?: string;
@@ -13,4 +14,7 @@ export interface IAPIResponseJSON<T = null> {
13
14
  cached?: boolean;
14
15
  headers: Headers;
15
16
  }
17
+ export declare const apiFetcherCache: Cache;
18
+ export declare function apiFetcherClearPendingRequests(): void;
19
+ export declare function apiFetcherGetPendingRequestsCount(): number;
16
20
  export declare function apiFetcher<Params extends object = {}, Result = any>(input: string, options?: IAPIFetcherOptions<Params>): Promise<IAPIResponseJSON<Result>>;
@@ -31,7 +31,15 @@ import "../Store-CAGUSjFX.js";
31
31
  import "../index-DAG0CtYo.js";
32
32
  import "construct-style-sheets-polyfill";
33
33
  import { s as searchParamsObjectToString } from "../url-DTxLpq5m.js";
34
- const cache = new Cache();
34
+ const apiFetcherCache = new Cache(), pendingRequests = /* @__PURE__ */ new Map();
35
+ function apiFetcherClearPendingRequests() {
36
+ pendingRequests.clear();
37
+ }
38
+ __name(apiFetcherClearPendingRequests, "apiFetcherClearPendingRequests");
39
+ function apiFetcherGetPendingRequestsCount() {
40
+ return pendingRequests.size;
41
+ }
42
+ __name(apiFetcherGetPendingRequestsCount, "apiFetcherGetPendingRequestsCount");
35
43
  function apiFetcher(input, options) {
36
44
  return __async(this, null, function* () {
37
45
  var _a, _b;
@@ -51,8 +59,8 @@ function apiFetcher(input, options) {
51
59
  }
52
60
  }
53
61
  const cacheKey = (_a = options == null ? void 0 : options.cacheKey) != null ? _a : url, cacheTTL = (_b = options == null ? void 0 : options.cacheTTLMinutes) != null ? _b : 0, cacheAllowed = cacheTTL > 0;
54
- if ((options != null && options.forceClearCache || globalThis.forceClearCache) && cache.delete(cacheKey), cacheAllowed) {
55
- const cached = cache.get(cacheKey);
62
+ if ((options != null && options.forceClearCache || globalThis.forceClearCache) && (apiFetcherCache.delete(cacheKey), pendingRequests.delete(cacheKey)), cacheAllowed) {
63
+ const cached = apiFetcherCache.get(cacheKey);
56
64
  if (cached)
57
65
  return __spreadProps(__spreadValues({}, baseResult), {
58
66
  data: cached,
@@ -61,31 +69,41 @@ function apiFetcher(input, options) {
61
69
  time: Date.now() - startTime
62
70
  });
63
71
  }
64
- const response = yield fetch(url, options == null ? void 0 : options.init);
65
- if (!response.ok) {
66
- const errorText = yield response.text();
67
- return __spreadProps(__spreadValues({}, baseResult), {
68
- error: errorText,
69
- status: "error",
70
- time: Date.now() - startTime,
71
- headers: response.headers
72
- });
73
- }
74
- const contentType = response.headers.get("content-type");
75
- if (!(contentType != null && contentType.includes("application/json")))
76
- return __spreadProps(__spreadValues({}, baseResult), {
77
- error: "Endpoint did not return JSON",
78
- status: "error",
79
- time: Date.now() - startTime,
80
- headers: response.headers
81
- });
82
- const jsonData = yield response.json();
83
- return cacheAllowed && cache.set(cacheKey, jsonData, cacheTTL), __spreadProps(__spreadValues({}, baseResult), {
84
- data: jsonData,
85
- status: "success",
86
- time: Date.now() - startTime,
87
- headers: response.headers
72
+ const pendingRequest = pendingRequests.get(cacheKey);
73
+ if (pendingRequest)
74
+ return pendingRequest;
75
+ const requestPromise = __async(this, null, function* () {
76
+ try {
77
+ const response = yield fetch(url, options == null ? void 0 : options.init);
78
+ if (!response.ok) {
79
+ const errorText = yield response.text();
80
+ return __spreadProps(__spreadValues({}, baseResult), {
81
+ error: errorText,
82
+ status: "error",
83
+ time: Date.now() - startTime,
84
+ headers: response.headers
85
+ });
86
+ }
87
+ const contentType = response.headers.get("content-type");
88
+ if (!(contentType != null && contentType.includes("application/json")))
89
+ return __spreadProps(__spreadValues({}, baseResult), {
90
+ error: "Endpoint did not return JSON",
91
+ status: "error",
92
+ time: Date.now() - startTime,
93
+ headers: response.headers
94
+ });
95
+ const jsonData = yield response.json();
96
+ return cacheAllowed && apiFetcherCache.set(cacheKey, jsonData, cacheTTL), __spreadProps(__spreadValues({}, baseResult), {
97
+ data: jsonData,
98
+ status: "success",
99
+ time: Date.now() - startTime,
100
+ headers: response.headers
101
+ });
102
+ } finally {
103
+ pendingRequests.delete(cacheKey);
104
+ }
88
105
  });
106
+ return pendingRequests.set(cacheKey, requestPromise), yield requestPromise;
89
107
  } catch (error) {
90
108
  const errorMessage = error instanceof Error ? error.message : String(error);
91
109
  return __spreadProps(__spreadValues({}, baseResult), {
@@ -98,5 +116,8 @@ function apiFetcher(input, options) {
98
116
  }
99
117
  __name(apiFetcher, "apiFetcher");
100
118
  export {
101
- apiFetcher
119
+ apiFetcher,
120
+ apiFetcherCache,
121
+ apiFetcherClearPendingRequests,
122
+ apiFetcherGetPendingRequestsCount
102
123
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aptechka",
3
- "version": "0.92.4",
3
+ "version": "0.92.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/denisavitski/aptechka.git"