@hyperttp/cache 1.0.9 → 1.0.13

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperttp/cache",
3
- "version": "1.0.9",
3
+ "version": "1.0.13",
4
4
  "description": "High-performance LRU caching plugin for Hyperttp client",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -18,6 +18,6 @@
18
18
  "lru-cache": "^11.5.0"
19
19
  },
20
20
  "peerDependencies": {
21
- "@hyperttp/core": "^1.1.5"
21
+ "@hyperttp/core": "^1.1.6"
22
22
  }
23
23
  }
package/plugin.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAMZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,aAAa;QACrB,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB;IACD,UAAU,iBAAiB;QACzB,KAAK,CAAC,EAAE,mBAAmB,GAAG;YAC5B,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;KACH;IACD,UAAU,SAAS;QACjB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC;CACF;AAMD,wBAAgB,SAAS,IAAI,WAAW,CA0FvC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,aAAa;QACrB,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB;IACD,UAAU,iBAAiB;QACzB,KAAK,CAAC,EAAE,mBAAmB,GAAG;YAC5B,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;KACH;IACD,UAAU,SAAS;QACjB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC;CACF;AAED,wBAAgB,SAAS,IAAI,WAAW,CA+FvC"}
package/plugin.js CHANGED
@@ -1,10 +1,8 @@
1
1
  import { CacheManager } from "./utils/CacheManager.js";
2
- function isCloneable(obj) {
3
- return typeof obj?.clone === "function";
4
- }
5
2
  export function withCache() {
6
3
  let cache;
7
4
  let allowedMethods;
5
+ const inFlight = new Map();
8
6
  return {
9
7
  name: "hyperttp-cache",
10
8
  phase: "PREPARE",
@@ -31,37 +29,35 @@ export function withCache() {
31
29
  },
32
30
  wrapDispatch: (next) => {
33
31
  return (req) => {
34
- if (!allowedMethods.has(req.method.toUpperCase())) {
32
+ const method = req.method.toUpperCase();
33
+ if (!allowedMethods.has(method)) {
35
34
  return next(req);
36
35
  }
37
36
  const cacheKey = req.url;
38
37
  const cachedEntry = cache.getWithMetadata(cacheKey);
39
38
  if (cachedEntry !== undefined) {
40
- if (cachedEntry.etag || cachedEntry.lastModified) {
41
- req.headers = { ...req.headers };
42
- if (cachedEntry.etag)
43
- req.headers["if-none-match"] = cachedEntry.etag;
44
- if (cachedEntry.lastModified)
45
- req.headers["if-modified-since"] = cachedEntry.lastModified;
46
- }
47
- else {
48
- return Promise.resolve(isCloneable(cachedEntry.data)
49
- ? cachedEntry.data.clone()
50
- : cachedEntry.data);
39
+ if (!cachedEntry.etag && !cachedEntry.lastModified) {
40
+ return Promise.resolve(cachedEntry.data.clone());
51
41
  }
42
+ req.headers = { ...req.headers };
43
+ if (cachedEntry.etag)
44
+ req.headers["if-none-match"] = cachedEntry.etag;
45
+ if (cachedEntry.lastModified)
46
+ req.headers["if-modified-since"] = cachedEntry.lastModified;
47
+ }
48
+ if (inFlight.has(cacheKey)) {
49
+ return inFlight.get(cacheKey);
52
50
  }
53
- return next(req).then((response) => {
51
+ const requestPromise = next(req)
52
+ .then((response) => {
53
+ inFlight.delete(cacheKey);
54
54
  if (!response)
55
55
  return response;
56
56
  if (response.status === 304 && cachedEntry !== undefined) {
57
- return isCloneable(cachedEntry.data)
58
- ? cachedEntry.data.clone()
59
- : cachedEntry.data;
57
+ return cachedEntry.data.clone();
60
58
  }
61
59
  if (response.status >= 200 && response.status < 300) {
62
- const valueToCache = isCloneable(response)
63
- ? response.clone()
64
- : response;
60
+ const valueToCache = response.clone();
65
61
  const headers = response.headers;
66
62
  const etag = headers?.["etag"] || headers?.["ETag"];
67
63
  const lastModified = headers?.["last-modified"] || headers?.["Last-Modified"];
@@ -71,7 +67,13 @@ export function withCache() {
71
67
  });
72
68
  }
73
69
  return response;
70
+ })
71
+ .catch((err) => {
72
+ inFlight.delete(cacheKey);
73
+ throw err;
74
74
  });
75
+ inFlight.set(cacheKey, requestPromise);
76
+ return requestPromise;
75
77
  };
76
78
  },
77
79
  };
package/plugin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}