@hyperttp/cache 1.0.6 → 1.0.7

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.6",
3
+ "version": "1.0.7",
4
4
  "description": "High-performance LRU caching plugin for Hyperttp client",
5
5
  "type": "module",
6
6
  "main": "./index.js",
package/plugin.d.ts CHANGED
@@ -1,14 +1,15 @@
1
1
  import type { HyperPlugin } from "@hyperttp/core";
2
2
  import type { CacheManagerOptions } from "./types/cache.js";
3
+ import { CacheManager } from "./utils/CacheManager.js";
3
4
  declare module "@hyperttp/core" {
5
+ interface PluginContext {
6
+ cache?: CacheManager;
7
+ }
4
8
  interface HttpClientOptions {
5
9
  cache?: CacheManagerOptions & {
6
10
  enabled: boolean;
7
11
  };
8
12
  }
9
- interface HyperCore {
10
- clearCache?: () => void;
11
- }
12
13
  }
13
14
  export declare function withCache(): HyperPlugin;
14
15
  //# sourceMappingURL=plugin.d.ts.map
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,EAIZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,iBAAiB;QACzB,KAAK,CAAC,EAAE,mBAAmB,GAAG;YAC5B,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;KACH;IAED,UAAU,SAAS;QACjB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;KACzB;CACF;AAED,wBAAgB,SAAS,IAAI,WAAW,CA8DvC"}
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;CACF;AAED,wBAAgB,SAAS,IAAI,WAAW,CA4FvC"}
package/plugin.js CHANGED
@@ -1,50 +1,73 @@
1
1
  import { CacheManager } from "./utils/CacheManager.js";
2
2
  export function withCache() {
3
3
  let cache;
4
+ let allowedMethods;
4
5
  return {
5
6
  name: "hyperttp-cache",
6
7
  phase: "PREPARE",
7
8
  enabled: (config) => !!config.cache?.enabled,
8
- setup(core, config) {
9
- cache = new CacheManager(config.cache);
10
- core.clearCache = () => cache.clear();
9
+ setup(ctx) {
10
+ const { core, config } = ctx;
11
+ cache = new CacheManager(config?.cache);
12
+ ctx.cache = cache;
13
+ const methods = config?.cache?.methods ?? ["GET"];
14
+ allowedMethods = new Set(methods.map((m) => m.toUpperCase()));
11
15
  if (core && typeof core.getStats === "function") {
12
- const originalGetStats = core.getStats.bind(core);
13
- core.getStats = () => ({
14
- ...originalGetStats(),
15
- cacheSize: cache?.size ?? 0,
16
- });
16
+ const originalGetStats = core.getStats;
17
+ core.getStats = function () {
18
+ const stats = originalGetStats.call(this);
19
+ if (stats) {
20
+ stats.cacheSize = cache.size;
21
+ }
22
+ return stats;
23
+ };
17
24
  }
18
25
  },
19
26
  wrapDispatch: (next) => {
20
- return async (req) => {
21
- if (req.method !== "GET")
27
+ return (req) => {
28
+ if (!allowedMethods.has(req.method.toUpperCase())) {
22
29
  return next(req);
23
- const cached = await cache.get(req.url);
24
- if (cached !== undefined) {
25
- return (typeof cached.clone === "function"
26
- ? cached.clone()
27
- : cached);
28
30
  }
29
- const response = await next(req);
30
- if (response !== undefined) {
31
- const valueToCache = typeof response.clone === "function"
32
- ? response.clone()
33
- : response;
34
- const headers = response.headers;
35
- if (headers) {
36
- const etag = headers["etag"] || headers["ETag"];
37
- const lastModified = headers["last-modified"] || headers["Last-Modified"];
38
- cache.setWithMetadata(req.url, valueToCache, {
39
- etag: typeof etag === "string" ? etag : undefined,
40
- lastModified: typeof lastModified === "string" ? lastModified : undefined,
41
- });
31
+ const cacheKey = req.url;
32
+ const cachedEntry = cache.getWithMetadata(cacheKey);
33
+ if (cachedEntry !== undefined) {
34
+ if (cachedEntry.etag || cachedEntry.lastModified) {
35
+ req.headers = { ...req.headers };
36
+ if (cachedEntry.etag) {
37
+ req.headers["if-none-match"] = cachedEntry.etag;
38
+ }
39
+ if (cachedEntry.lastModified) {
40
+ req.headers["if-modified-since"] = cachedEntry.lastModified;
41
+ }
42
42
  }
43
43
  else {
44
- cache.set(req.url, valueToCache);
44
+ return Promise.resolve(typeof cachedEntry.data.clone === "function"
45
+ ? cachedEntry.data.clone()
46
+ : cachedEntry.data);
45
47
  }
46
48
  }
47
- return response;
49
+ return next(req).then((response) => {
50
+ if (!response)
51
+ return response;
52
+ if (response.status === 304 && cachedEntry !== undefined) {
53
+ return (typeof cachedEntry.data.clone === "function"
54
+ ? cachedEntry.data.clone()
55
+ : cachedEntry.data);
56
+ }
57
+ if (response.status >= 200 && response.status < 300) {
58
+ const valueToCache = typeof response.clone === "function"
59
+ ? response.clone()
60
+ : response;
61
+ const headers = response.headers;
62
+ const etag = headers?.["etag"] || headers?.["ETag"];
63
+ const lastModified = headers?.["last-modified"] || headers?.["Last-Modified"];
64
+ cache.setWithMetadata(cacheKey, valueToCache, {
65
+ etag: typeof etag === "string" ? etag : undefined,
66
+ lastModified: typeof lastModified === "string" ? lastModified : undefined,
67
+ });
68
+ }
69
+ return response;
70
+ });
48
71
  };
49
72
  },
50
73
  };
package/plugin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAcvD,MAAM,UAAU,SAAS;IACvB,IAAI,KAAoB,CAAC;IAEzB,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;QAE/D,KAAK,CAAC,IAAI,EAAE,MAAM;YAChB,KAAK,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,KAAM,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAChD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;oBACrB,GAAG,gBAAgB,EAAE;oBACrB,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;iBAC5B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,OAAO,KAAK,EAAK,GAAoB,EAA4B,EAAE;gBACjE,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;oBAAE,OAAO,IAAI,CAAI,GAAG,CAAC,CAAC;gBAE9C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,CACL,OAAQ,MAAc,CAAC,KAAK,KAAK,UAAU;wBACzC,CAAC,CAAE,MAAc,CAAC,KAAK,EAAE;wBACzB,CAAC,CAAC,MAAM,CACQ,CAAC;gBACvB,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAI,GAAG,CAAC,CAAC;gBAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,YAAY,GAChB,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU;wBAC3C,CAAC,CAAE,QAAgB,CAAC,KAAK,EAAE;wBAC3B,CAAC,CAAC,QAAQ,CAAC;oBAEf,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;oBAEjC,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChD,MAAM,YAAY,GAChB,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;wBAEvD,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE;4BAC3C,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;4BACjD,YAAY,EACV,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;yBAC9D,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;gBAED,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}