nlcurl 0.7.0 → 0.8.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.
Files changed (350) hide show
  1. package/README.md +143 -140
  2. package/dist/cache/groups.d.ts +75 -0
  3. package/dist/cache/groups.d.ts.map +1 -0
  4. package/dist/cache/groups.js +118 -0
  5. package/dist/cache/groups.js.map +1 -0
  6. package/dist/cache/no-vary-search.d.ts +33 -0
  7. package/dist/cache/no-vary-search.d.ts.map +1 -0
  8. package/dist/cache/no-vary-search.js +148 -0
  9. package/dist/cache/no-vary-search.js.map +1 -0
  10. package/dist/cache/range.d.ts +120 -0
  11. package/dist/cache/range.d.ts.map +1 -0
  12. package/dist/cache/range.js +193 -0
  13. package/dist/cache/range.js.map +1 -0
  14. package/dist/cache/store.d.ts +58 -36
  15. package/dist/cache/store.d.ts.map +1 -1
  16. package/dist/cache/store.js +58 -46
  17. package/dist/cache/store.js.map +1 -1
  18. package/dist/cache/types.d.ts +7 -39
  19. package/dist/cache/types.d.ts.map +1 -1
  20. package/dist/cli/args.d.ts +4 -37
  21. package/dist/cli/args.d.ts.map +1 -1
  22. package/dist/cli/args.js +3 -4
  23. package/dist/cli/args.js.map +1 -1
  24. package/dist/cli/index.d.ts +0 -5
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +1 -6
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/cli/output.d.ts +14 -20
  29. package/dist/cli/output.d.ts.map +1 -1
  30. package/dist/cli/output.js +14 -20
  31. package/dist/cli/output.js.map +1 -1
  32. package/dist/cookies/jar.d.ts +30 -39
  33. package/dist/cookies/jar.d.ts.map +1 -1
  34. package/dist/cookies/jar.js +27 -37
  35. package/dist/cookies/jar.js.map +1 -1
  36. package/dist/cookies/parser.d.ts +13 -17
  37. package/dist/cookies/parser.d.ts.map +1 -1
  38. package/dist/cookies/parser.js +17 -14
  39. package/dist/cookies/parser.js.map +1 -1
  40. package/dist/cookies/psl-data.d.ts +1 -1
  41. package/dist/cookies/psl-data.js +1 -1
  42. package/dist/cookies/public-suffix.d.ts +5 -27
  43. package/dist/cookies/public-suffix.d.ts.map +1 -1
  44. package/dist/cookies/public-suffix.js +5 -37
  45. package/dist/cookies/public-suffix.js.map +1 -1
  46. package/dist/core/auth.d.ts +30 -0
  47. package/dist/core/auth.d.ts.map +1 -0
  48. package/dist/core/auth.js +34 -0
  49. package/dist/core/auth.js.map +1 -0
  50. package/dist/core/client.d.ts +28 -40
  51. package/dist/core/client.d.ts.map +1 -1
  52. package/dist/core/client.js +31 -41
  53. package/dist/core/client.js.map +1 -1
  54. package/dist/core/errors.d.ts +64 -88
  55. package/dist/core/errors.d.ts.map +1 -1
  56. package/dist/core/errors.js +64 -88
  57. package/dist/core/errors.js.map +1 -1
  58. package/dist/core/request.d.ts +23 -111
  59. package/dist/core/request.d.ts.map +1 -1
  60. package/dist/core/response.d.ts +49 -66
  61. package/dist/core/response.d.ts.map +1 -1
  62. package/dist/core/response.js +45 -59
  63. package/dist/core/response.js.map +1 -1
  64. package/dist/core/session.d.ts +66 -78
  65. package/dist/core/session.d.ts.map +1 -1
  66. package/dist/core/session.js +105 -76
  67. package/dist/core/session.js.map +1 -1
  68. package/dist/core/validation.d.ts +44 -43
  69. package/dist/core/validation.d.ts.map +1 -1
  70. package/dist/core/validation.js +44 -56
  71. package/dist/core/validation.js.map +1 -1
  72. package/dist/dns/cache.d.ts +59 -0
  73. package/dist/dns/cache.d.ts.map +1 -0
  74. package/dist/dns/cache.js +99 -0
  75. package/dist/dns/cache.js.map +1 -0
  76. package/dist/dns/codec.d.ts +20 -18
  77. package/dist/dns/codec.d.ts.map +1 -1
  78. package/dist/dns/codec.js +20 -36
  79. package/dist/dns/codec.js.map +1 -1
  80. package/dist/dns/doh-resolver.d.ts +17 -31
  81. package/dist/dns/doh-resolver.d.ts.map +1 -1
  82. package/dist/dns/doh-resolver.js +46 -47
  83. package/dist/dns/doh-resolver.js.map +1 -1
  84. package/dist/dns/dot-resolver.d.ts +89 -0
  85. package/dist/dns/dot-resolver.d.ts.map +1 -0
  86. package/dist/dns/dot-resolver.js +158 -0
  87. package/dist/dns/dot-resolver.js.map +1 -0
  88. package/dist/dns/https-rr.d.ts +19 -30
  89. package/dist/dns/https-rr.d.ts.map +1 -1
  90. package/dist/dns/https-rr.js +22 -40
  91. package/dist/dns/https-rr.js.map +1 -1
  92. package/dist/dns/types.d.ts +31 -59
  93. package/dist/dns/types.d.ts.map +1 -1
  94. package/dist/dns/types.js +3 -14
  95. package/dist/dns/types.js.map +1 -1
  96. package/dist/fingerprints/akamai.d.ts +3 -11
  97. package/dist/fingerprints/akamai.d.ts.map +1 -1
  98. package/dist/fingerprints/akamai.js +3 -11
  99. package/dist/fingerprints/akamai.js.map +1 -1
  100. package/dist/fingerprints/database.d.ts +6 -14
  101. package/dist/fingerprints/database.d.ts.map +1 -1
  102. package/dist/fingerprints/database.js +6 -14
  103. package/dist/fingerprints/database.js.map +1 -1
  104. package/dist/fingerprints/extensions.d.ts +56 -71
  105. package/dist/fingerprints/extensions.d.ts.map +1 -1
  106. package/dist/fingerprints/extensions.js +58 -71
  107. package/dist/fingerprints/extensions.js.map +1 -1
  108. package/dist/fingerprints/ja3.d.ts +12 -30
  109. package/dist/fingerprints/ja3.d.ts.map +1 -1
  110. package/dist/fingerprints/ja3.js +12 -30
  111. package/dist/fingerprints/ja3.js.map +1 -1
  112. package/dist/fingerprints/ja4.d.ts +18 -0
  113. package/dist/fingerprints/ja4.d.ts.map +1 -0
  114. package/dist/fingerprints/ja4.js +83 -0
  115. package/dist/fingerprints/ja4.js.map +1 -0
  116. package/dist/fingerprints/profiles/chrome.d.ts +18 -21
  117. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
  118. package/dist/fingerprints/profiles/chrome.js +35 -31
  119. package/dist/fingerprints/profiles/chrome.js.map +1 -1
  120. package/dist/fingerprints/profiles/edge.d.ts +7 -10
  121. package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
  122. package/dist/fingerprints/profiles/edge.js +7 -10
  123. package/dist/fingerprints/profiles/edge.js.map +1 -1
  124. package/dist/fingerprints/profiles/firefox.d.ts +8 -11
  125. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
  126. package/dist/fingerprints/profiles/firefox.js +8 -11
  127. package/dist/fingerprints/profiles/firefox.js.map +1 -1
  128. package/dist/fingerprints/profiles/safari.d.ts +11 -14
  129. package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
  130. package/dist/fingerprints/profiles/safari.js +11 -14
  131. package/dist/fingerprints/profiles/safari.js.map +1 -1
  132. package/dist/fingerprints/profiles/tor.d.ts +5 -8
  133. package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
  134. package/dist/fingerprints/profiles/tor.js +5 -8
  135. package/dist/fingerprints/profiles/tor.js.map +1 -1
  136. package/dist/fingerprints/types.d.ts +42 -73
  137. package/dist/fingerprints/types.d.ts.map +1 -1
  138. package/dist/hsts/store.d.ts +19 -21
  139. package/dist/hsts/store.d.ts.map +1 -1
  140. package/dist/hsts/store.js +20 -28
  141. package/dist/hsts/store.js.map +1 -1
  142. package/dist/hsts/types.d.ts +10 -14
  143. package/dist/hsts/types.d.ts.map +1 -1
  144. package/dist/http/alt-svc.d.ts +31 -49
  145. package/dist/http/alt-svc.d.ts.map +1 -1
  146. package/dist/http/alt-svc.js +21 -55
  147. package/dist/http/alt-svc.js.map +1 -1
  148. package/dist/http/early-hints.d.ts +23 -0
  149. package/dist/http/early-hints.d.ts.map +1 -0
  150. package/dist/http/early-hints.js +33 -0
  151. package/dist/http/early-hints.js.map +1 -0
  152. package/dist/http/form-data.d.ts +17 -35
  153. package/dist/http/form-data.d.ts.map +1 -1
  154. package/dist/http/form-data.js +12 -34
  155. package/dist/http/form-data.js.map +1 -1
  156. package/dist/http/h1/client.d.ts +14 -26
  157. package/dist/http/h1/client.d.ts.map +1 -1
  158. package/dist/http/h1/client.js +14 -23
  159. package/dist/http/h1/client.js.map +1 -1
  160. package/dist/http/h1/encoder.d.ts +10 -17
  161. package/dist/http/h1/encoder.d.ts.map +1 -1
  162. package/dist/http/h1/encoder.js +10 -17
  163. package/dist/http/h1/encoder.js.map +1 -1
  164. package/dist/http/h1/parser.d.ts +22 -59
  165. package/dist/http/h1/parser.d.ts.map +1 -1
  166. package/dist/http/h1/parser.js +15 -47
  167. package/dist/http/h1/parser.js.map +1 -1
  168. package/dist/http/h2/client.d.ts +18 -59
  169. package/dist/http/h2/client.d.ts.map +1 -1
  170. package/dist/http/h2/client.js +29 -64
  171. package/dist/http/h2/client.js.map +1 -1
  172. package/dist/http/h2/frames.d.ts +53 -84
  173. package/dist/http/h2/frames.d.ts.map +1 -1
  174. package/dist/http/h2/frames.js +48 -76
  175. package/dist/http/h2/frames.js.map +1 -1
  176. package/dist/http/h2/hpack.d.ts +16 -35
  177. package/dist/http/h2/hpack.d.ts.map +1 -1
  178. package/dist/http/h2/hpack.js +16 -35
  179. package/dist/http/h2/hpack.js.map +1 -1
  180. package/dist/http/h3/detection.d.ts +5 -7
  181. package/dist/http/h3/detection.d.ts.map +1 -1
  182. package/dist/http/h3/detection.js +5 -23
  183. package/dist/http/h3/detection.js.map +1 -1
  184. package/dist/http/negotiator.d.ts +25 -38
  185. package/dist/http/negotiator.d.ts.map +1 -1
  186. package/dist/http/negotiator.js +16 -28
  187. package/dist/http/negotiator.js.map +1 -1
  188. package/dist/http/pool.d.ts +32 -62
  189. package/dist/http/pool.d.ts.map +1 -1
  190. package/dist/http/pool.js +22 -41
  191. package/dist/http/pool.js.map +1 -1
  192. package/dist/http/resumable-upload.d.ts +76 -0
  193. package/dist/http/resumable-upload.d.ts.map +1 -0
  194. package/dist/http/resumable-upload.js +104 -0
  195. package/dist/http/resumable-upload.js.map +1 -0
  196. package/dist/http/trailers.d.ts +29 -0
  197. package/dist/http/trailers.d.ts.map +1 -0
  198. package/dist/http/trailers.js +57 -0
  199. package/dist/http/trailers.js.map +1 -0
  200. package/dist/index.d.ts +21 -8
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +21 -2
  203. package/dist/index.js.map +1 -1
  204. package/dist/middleware/interceptor.d.ts +13 -32
  205. package/dist/middleware/interceptor.d.ts.map +1 -1
  206. package/dist/middleware/interceptor.js +11 -16
  207. package/dist/middleware/interceptor.js.map +1 -1
  208. package/dist/middleware/rate-limiter.d.ts +8 -17
  209. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  210. package/dist/middleware/rate-limiter.js +11 -12
  211. package/dist/middleware/rate-limiter.js.map +1 -1
  212. package/dist/middleware/retry-after.d.ts +15 -0
  213. package/dist/middleware/retry-after.d.ts.map +1 -0
  214. package/dist/middleware/retry-after.js +36 -0
  215. package/dist/middleware/retry-after.js.map +1 -0
  216. package/dist/middleware/retry.d.ts +9 -18
  217. package/dist/middleware/retry.d.ts.map +1 -1
  218. package/dist/middleware/retry.js +12 -9
  219. package/dist/middleware/retry.js.map +1 -1
  220. package/dist/proxy/auth.d.ts +73 -0
  221. package/dist/proxy/auth.d.ts.map +1 -0
  222. package/dist/proxy/auth.js +128 -0
  223. package/dist/proxy/auth.js.map +1 -0
  224. package/dist/proxy/env-proxy.d.ts +5 -15
  225. package/dist/proxy/env-proxy.d.ts.map +1 -1
  226. package/dist/proxy/env-proxy.js +5 -23
  227. package/dist/proxy/env-proxy.js.map +1 -1
  228. package/dist/proxy/http-proxy.d.ts +12 -19
  229. package/dist/proxy/http-proxy.d.ts.map +1 -1
  230. package/dist/proxy/http-proxy.js +5 -8
  231. package/dist/proxy/http-proxy.js.map +1 -1
  232. package/dist/proxy/socks.d.ts +13 -20
  233. package/dist/proxy/socks.d.ts.map +1 -1
  234. package/dist/proxy/socks.js +5 -8
  235. package/dist/proxy/socks.js.map +1 -1
  236. package/dist/sse/parser.d.ts +14 -37
  237. package/dist/sse/parser.d.ts.map +1 -1
  238. package/dist/sse/parser.js +14 -28
  239. package/dist/sse/parser.js.map +1 -1
  240. package/dist/tls/constants.d.ts +15 -74
  241. package/dist/tls/constants.d.ts.map +1 -1
  242. package/dist/tls/constants.js +15 -74
  243. package/dist/tls/constants.js.map +1 -1
  244. package/dist/tls/ct.d.ts +78 -0
  245. package/dist/tls/ct.d.ts.map +1 -0
  246. package/dist/tls/ct.js +175 -0
  247. package/dist/tls/ct.js.map +1 -0
  248. package/dist/tls/early-data.d.ts +45 -0
  249. package/dist/tls/early-data.d.ts.map +1 -0
  250. package/dist/tls/early-data.js +46 -0
  251. package/dist/tls/early-data.js.map +1 -0
  252. package/dist/tls/ech.d.ts +68 -85
  253. package/dist/tls/ech.d.ts.map +1 -1
  254. package/dist/tls/ech.js +54 -102
  255. package/dist/tls/ech.js.map +1 -1
  256. package/dist/tls/keylog.d.ts +34 -0
  257. package/dist/tls/keylog.d.ts.map +1 -0
  258. package/dist/tls/keylog.js +64 -0
  259. package/dist/tls/keylog.js.map +1 -0
  260. package/dist/tls/node-engine.d.ts +10 -17
  261. package/dist/tls/node-engine.d.ts.map +1 -1
  262. package/dist/tls/node-engine.js +20 -18
  263. package/dist/tls/node-engine.js.map +1 -1
  264. package/dist/tls/ocsp.d.ts +55 -0
  265. package/dist/tls/ocsp.d.ts.map +1 -0
  266. package/dist/tls/ocsp.js +131 -0
  267. package/dist/tls/ocsp.js.map +1 -0
  268. package/dist/tls/pin-verification.d.ts +5 -4
  269. package/dist/tls/pin-verification.d.ts.map +1 -1
  270. package/dist/tls/pin-verification.js +5 -11
  271. package/dist/tls/pin-verification.js.map +1 -1
  272. package/dist/tls/session-cache.d.ts +27 -39
  273. package/dist/tls/session-cache.d.ts.map +1 -1
  274. package/dist/tls/session-cache.js +20 -24
  275. package/dist/tls/session-cache.js.map +1 -1
  276. package/dist/tls/stealth/client-hello.d.ts +25 -44
  277. package/dist/tls/stealth/client-hello.d.ts.map +1 -1
  278. package/dist/tls/stealth/client-hello.js +17 -28
  279. package/dist/tls/stealth/client-hello.js.map +1 -1
  280. package/dist/tls/stealth/engine.d.ts +5 -15
  281. package/dist/tls/stealth/engine.d.ts.map +1 -1
  282. package/dist/tls/stealth/engine.js +11 -17
  283. package/dist/tls/stealth/engine.js.map +1 -1
  284. package/dist/tls/stealth/handshake.d.ts +21 -31
  285. package/dist/tls/stealth/handshake.d.ts.map +1 -1
  286. package/dist/tls/stealth/handshake.js +15 -43
  287. package/dist/tls/stealth/handshake.js.map +1 -1
  288. package/dist/tls/stealth/key-schedule.d.ts +59 -86
  289. package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
  290. package/dist/tls/stealth/key-schedule.js +46 -58
  291. package/dist/tls/stealth/key-schedule.js.map +1 -1
  292. package/dist/tls/stealth/record-layer.d.ts +52 -75
  293. package/dist/tls/stealth/record-layer.d.ts.map +1 -1
  294. package/dist/tls/stealth/record-layer.js +47 -63
  295. package/dist/tls/stealth/record-layer.js.map +1 -1
  296. package/dist/tls/stealth/tls12-handshake.d.ts +16 -0
  297. package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
  298. package/dist/tls/stealth/tls12-handshake.js +8 -0
  299. package/dist/tls/stealth/tls12-handshake.js.map +1 -1
  300. package/dist/tls/types.d.ts +42 -60
  301. package/dist/tls/types.d.ts.map +1 -1
  302. package/dist/utils/buffer-reader.d.ts +26 -81
  303. package/dist/utils/buffer-reader.d.ts.map +1 -1
  304. package/dist/utils/buffer-reader.js +26 -81
  305. package/dist/utils/buffer-reader.js.map +1 -1
  306. package/dist/utils/buffer-writer.d.ts +30 -66
  307. package/dist/utils/buffer-writer.d.ts.map +1 -1
  308. package/dist/utils/buffer-writer.js +30 -66
  309. package/dist/utils/buffer-writer.js.map +1 -1
  310. package/dist/utils/compression.d.ts +18 -0
  311. package/dist/utils/compression.d.ts.map +1 -0
  312. package/dist/utils/compression.js +34 -0
  313. package/dist/utils/compression.js.map +1 -0
  314. package/dist/utils/dictionary-transport.d.ts +97 -0
  315. package/dist/utils/dictionary-transport.d.ts.map +1 -0
  316. package/dist/utils/dictionary-transport.js +171 -0
  317. package/dist/utils/dictionary-transport.js.map +1 -0
  318. package/dist/utils/encoding.d.ts +12 -30
  319. package/dist/utils/encoding.d.ts.map +1 -1
  320. package/dist/utils/encoding.js +15 -46
  321. package/dist/utils/encoding.js.map +1 -1
  322. package/dist/utils/happy-eyeballs.d.ts +18 -8
  323. package/dist/utils/happy-eyeballs.d.ts.map +1 -1
  324. package/dist/utils/happy-eyeballs.js +19 -27
  325. package/dist/utils/happy-eyeballs.js.map +1 -1
  326. package/dist/utils/logger.d.ts +54 -81
  327. package/dist/utils/logger.d.ts.map +1 -1
  328. package/dist/utils/logger.js +92 -64
  329. package/dist/utils/logger.js.map +1 -1
  330. package/dist/utils/tcp-fast-open.d.ts +30 -0
  331. package/dist/utils/tcp-fast-open.d.ts.map +1 -0
  332. package/dist/utils/tcp-fast-open.js +36 -0
  333. package/dist/utils/tcp-fast-open.js.map +1 -0
  334. package/dist/utils/url.d.ts +18 -25
  335. package/dist/utils/url.d.ts.map +1 -1
  336. package/dist/utils/url.js +18 -25
  337. package/dist/utils/url.js.map +1 -1
  338. package/dist/ws/client.d.ts +33 -53
  339. package/dist/ws/client.d.ts.map +1 -1
  340. package/dist/ws/client.js +29 -30
  341. package/dist/ws/client.js.map +1 -1
  342. package/dist/ws/frame.d.ts +24 -41
  343. package/dist/ws/frame.d.ts.map +1 -1
  344. package/dist/ws/frame.js +18 -33
  345. package/dist/ws/frame.js.map +1 -1
  346. package/dist/ws/permessage-deflate.d.ts +23 -28
  347. package/dist/ws/permessage-deflate.d.ts.map +1 -1
  348. package/dist/ws/permessage-deflate.js +18 -26
  349. package/dist/ws/permessage-deflate.js.map +1 -1
  350. package/package.json +62 -62
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Parses a No-Vary-Search header value into a structured directive.
3
+ *
4
+ * @param {string} header - The raw No-Vary-Search header value.
5
+ * @returns {NoVarySearchDirective|null} The parsed directive, or `null` if the header is empty.
6
+ */
7
+ export function parseNoVarySearch(header) {
8
+ if (!header)
9
+ return null;
10
+ const directive = {
11
+ params: false,
12
+ except: [],
13
+ keyOrder: false,
14
+ };
15
+ const parts = header.split(",").map((s) => s.trim());
16
+ for (const part of parts) {
17
+ if (part === "params") {
18
+ directive.params = true;
19
+ }
20
+ else if (part === "key-order") {
21
+ directive.keyOrder = true;
22
+ }
23
+ else if (part.startsWith("params=")) {
24
+ const listStr = part.substring("params=".length).trim();
25
+ const parsed = parseInnerList(listStr);
26
+ if (parsed)
27
+ directive.params = parsed;
28
+ }
29
+ else if (part.startsWith("except=")) {
30
+ const listStr = part.substring("except=".length).trim();
31
+ const parsed = parseInnerList(listStr);
32
+ if (parsed)
33
+ directive.except = parsed;
34
+ }
35
+ }
36
+ return directive;
37
+ }
38
+ /**
39
+ * Determines whether two URLs match according to a No-Vary-Search directive.
40
+ *
41
+ * @param {string} cachedUrl - The URL of the cached response.
42
+ * @param {string} requestUrl - The URL of the incoming request.
43
+ * @param {NoVarySearchDirective} directive - The No-Vary-Search directive to apply.
44
+ * @returns {boolean} `true` if the URLs are considered equivalent under the directive.
45
+ */
46
+ export function urlsMatchWithNoVarySearch(cachedUrl, requestUrl, directive) {
47
+ let cached;
48
+ let request;
49
+ try {
50
+ cached = new URL(cachedUrl);
51
+ request = new URL(requestUrl);
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ if (cached.origin !== request.origin)
57
+ return false;
58
+ if (cached.pathname !== request.pathname)
59
+ return false;
60
+ const cachedParams = new URLSearchParams(cached.search);
61
+ const requestParams = new URLSearchParams(request.search);
62
+ const filteredCached = filterParams(cachedParams, directive);
63
+ const filteredRequest = filterParams(requestParams, directive);
64
+ if (directive.keyOrder) {
65
+ return paramsEqualUnordered(filteredCached, filteredRequest);
66
+ }
67
+ return paramsEqualOrdered(filteredCached, filteredRequest);
68
+ }
69
+ /**
70
+ * Normalizes a URL for cache key generation by applying No-Vary-Search filtering.
71
+ *
72
+ * @param {string} url - The URL to normalize.
73
+ * @param {NoVarySearchDirective} directive - The No-Vary-Search directive to apply.
74
+ * @returns {string} The normalized URL string.
75
+ */
76
+ export function normalizeUrlForCache(url, directive) {
77
+ let parsed;
78
+ try {
79
+ parsed = new URL(url);
80
+ }
81
+ catch {
82
+ return url;
83
+ }
84
+ const params = new URLSearchParams(parsed.search);
85
+ const filtered = filterParams(params, directive);
86
+ if (directive.keyOrder) {
87
+ filtered.sort();
88
+ }
89
+ parsed.search = filtered.toString();
90
+ return parsed.href;
91
+ }
92
+ function filterParams(params, directive) {
93
+ const result = new URLSearchParams();
94
+ if (directive.params === true) {
95
+ for (const [key, value] of params) {
96
+ if (directive.except.includes(key)) {
97
+ result.append(key, value);
98
+ }
99
+ }
100
+ }
101
+ else if (Array.isArray(directive.params)) {
102
+ for (const [key, value] of params) {
103
+ if (!directive.params.includes(key)) {
104
+ result.append(key, value);
105
+ }
106
+ }
107
+ }
108
+ else {
109
+ for (const [key, value] of params) {
110
+ result.append(key, value);
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+ function paramsEqualUnordered(a, b) {
116
+ const aEntries = [...a.entries()].sort(([k1, v1], [k2, v2]) => (k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0));
117
+ const bEntries = [...b.entries()].sort(([k1, v1], [k2, v2]) => (k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0));
118
+ if (aEntries.length !== bEntries.length)
119
+ return false;
120
+ for (let i = 0; i < aEntries.length; i++) {
121
+ if (aEntries[i][0] !== bEntries[i][0] || aEntries[i][1] !== bEntries[i][1]) {
122
+ return false;
123
+ }
124
+ }
125
+ return true;
126
+ }
127
+ function paramsEqualOrdered(a, b) {
128
+ const aEntries = [...a.entries()];
129
+ const bEntries = [...b.entries()];
130
+ if (aEntries.length !== bEntries.length)
131
+ return false;
132
+ for (let i = 0; i < aEntries.length; i++) {
133
+ if (aEntries[i][0] !== bEntries[i][0] || aEntries[i][1] !== bEntries[i][1]) {
134
+ return false;
135
+ }
136
+ }
137
+ return true;
138
+ }
139
+ function parseInnerList(str) {
140
+ const match = str.match(/^\(([^)]*)\)/);
141
+ if (!match)
142
+ return null;
143
+ return match[1]
144
+ .split(/\s+/)
145
+ .map((s) => s.replace(/"/g, "").trim())
146
+ .filter(Boolean);
147
+ }
148
+ //# sourceMappingURL=no-vary-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-vary-search.js","sourceRoot":"","sources":["../../src/cache/no-vary-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Parsed Content-Range header fields.
3
+ */
4
+ export interface ContentRange {
5
+ unit: string;
6
+ start: number;
7
+ end: number;
8
+ total: number;
9
+ }
10
+ /**
11
+ * A contiguous byte range segment stored in cache.
12
+ */
13
+ export interface RangeSegment {
14
+ start: number;
15
+ end: number;
16
+ data: Buffer;
17
+ etag?: string;
18
+ storedAt: number;
19
+ }
20
+ /**
21
+ * Represents all cached range segments for a given URL.
22
+ */
23
+ export interface RangeCacheEntry {
24
+ url: string;
25
+ segments: RangeSegment[];
26
+ totalSize: number;
27
+ etag?: string;
28
+ lastModified?: string;
29
+ }
30
+ /**
31
+ * Parses a Content-Range header value into its component fields.
32
+ *
33
+ * @param {string} header - The raw Content-Range header value.
34
+ * @returns {ContentRange|null} The parsed range, or `null` if the header is malformed.
35
+ */
36
+ export declare function parseContentRange(header: string): ContentRange | null;
37
+ /**
38
+ * Parses a Range request header into an array of byte ranges.
39
+ *
40
+ * @param {string} header - The raw Range header value (e.g. "bytes=0-499,1000-1499").
41
+ * @returns {Array<[number, number|undefined]>|null} Parsed ranges, or `null` if invalid.
42
+ */
43
+ export declare function parseRangeHeader(header: string): Array<[number, number | undefined]> | null;
44
+ /**
45
+ * Caches partial HTTP responses (206 Partial Content) and reassembles
46
+ * byte ranges on subsequent lookups.
47
+ *
48
+ * @class
49
+ */
50
+ export declare class RangeCache {
51
+ private readonly entries;
52
+ private readonly maxEntries;
53
+ private readonly maxSegmentsPerEntry;
54
+ /**
55
+ * Creates a new RangeCache.
56
+ *
57
+ * @param {Object} [config] - Optional cache limits.
58
+ * @param {number} [config.maxEntries=200] - Maximum number of URLs to cache.
59
+ * @param {number} [config.maxSegmentsPerEntry=100] - Maximum segments per URL.
60
+ */
61
+ constructor(config?: {
62
+ maxEntries?: number;
63
+ maxSegmentsPerEntry?: number;
64
+ });
65
+ /**
66
+ * Stores a range segment for the given URL.
67
+ *
68
+ * @param {string} url - The resource URL.
69
+ * @param {ContentRange} range - The content range descriptor.
70
+ * @param {Buffer} data - The response body bytes for this range.
71
+ * @param {Object} [meta] - Optional metadata.
72
+ * @param {string} [meta.etag] - The entity tag for cache coherence.
73
+ * @param {string} [meta.lastModified] - The Last-Modified date.
74
+ */
75
+ store(url: string, range: ContentRange, data: Buffer, meta?: {
76
+ etag?: string;
77
+ lastModified?: string;
78
+ }): void;
79
+ /**
80
+ * Looks up cached bytes for a given byte range.
81
+ *
82
+ * @param {string} url - The resource URL.
83
+ * @param {number} start - Start byte offset (inclusive).
84
+ * @param {number} end - End byte offset (inclusive).
85
+ * @returns {Buffer|null} The cached bytes, or `null` on a miss.
86
+ */
87
+ lookup(url: string, start: number, end: number): Buffer | null;
88
+ /**
89
+ * Checks whether all bytes for a URL have been cached.
90
+ *
91
+ * @param {string} url - The resource URL.
92
+ * @returns {boolean} `true` if the full resource is cached.
93
+ */
94
+ isComplete(url: string): boolean;
95
+ /**
96
+ * Returns the range cache entry for a URL, if present.
97
+ *
98
+ * @param {string} url - The resource URL.
99
+ * @returns {RangeCacheEntry|undefined} The cached entry.
100
+ */
101
+ get(url: string): RangeCacheEntry | undefined;
102
+ /**
103
+ * Removes the cache entry for a URL.
104
+ *
105
+ * @param {string} url - The resource URL to evict.
106
+ * @returns {boolean} `true` if an entry was removed.
107
+ */
108
+ delete(url: string): boolean;
109
+ /**
110
+ * Removes all cached range entries.
111
+ */
112
+ clear(): void;
113
+ /**
114
+ * Returns the number of URLs with cached ranges.
115
+ *
116
+ * @returns {number} The entry count.
117
+ */
118
+ get size(): number;
119
+ }
120
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/cache/range.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAarE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CA2B3F;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAE7C;;;;;;OAMG;gBACS,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE;IAK1E;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA0C5G;;;;;;;OAOG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgB9D;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYhC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI7C;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Parses a Content-Range header value into its component fields.
3
+ *
4
+ * @param {string} header - The raw Content-Range header value.
5
+ * @returns {ContentRange|null} The parsed range, or `null` if the header is malformed.
6
+ */
7
+ export function parseContentRange(header) {
8
+ const match = header.match(/^(\w+)\s+(\d+)-(\d+)\/(\d+|\*)/);
9
+ if (!match)
10
+ return null;
11
+ const unit = match[1];
12
+ const start = parseInt(match[2], 10);
13
+ const end = parseInt(match[3], 10);
14
+ const total = match[4] === "*" ? -1 : parseInt(match[4], 10);
15
+ if (start > end)
16
+ return null;
17
+ if (total !== -1 && end >= total)
18
+ return null;
19
+ return { unit, start, end, total };
20
+ }
21
+ /**
22
+ * Parses a Range request header into an array of byte ranges.
23
+ *
24
+ * @param {string} header - The raw Range header value (e.g. "bytes=0-499,1000-1499").
25
+ * @returns {Array<[number, number|undefined]>|null} Parsed ranges, or `null` if invalid.
26
+ */
27
+ export function parseRangeHeader(header) {
28
+ const match = header.match(/^bytes=(.+)/);
29
+ if (!match)
30
+ return null;
31
+ const ranges = [];
32
+ const parts = match[1].split(",");
33
+ for (const part of parts) {
34
+ const trimmed = part.trim();
35
+ const dashIdx = trimmed.indexOf("-");
36
+ if (dashIdx === -1)
37
+ return null;
38
+ const startStr = trimmed.substring(0, dashIdx);
39
+ const endStr = trimmed.substring(dashIdx + 1);
40
+ if (startStr === "" && endStr === "")
41
+ return null;
42
+ const start = startStr === "" ? -parseInt(endStr, 10) : parseInt(startStr, 10);
43
+ const end = endStr === "" ? undefined : parseInt(endStr, 10);
44
+ if (Number.isNaN(start))
45
+ return null;
46
+ if (end !== undefined && Number.isNaN(end))
47
+ return null;
48
+ ranges.push([start, end]);
49
+ }
50
+ return ranges.length > 0 ? ranges : null;
51
+ }
52
+ /**
53
+ * Caches partial HTTP responses (206 Partial Content) and reassembles
54
+ * byte ranges on subsequent lookups.
55
+ *
56
+ * @class
57
+ */
58
+ export class RangeCache {
59
+ entries = new Map();
60
+ maxEntries;
61
+ maxSegmentsPerEntry;
62
+ /**
63
+ * Creates a new RangeCache.
64
+ *
65
+ * @param {Object} [config] - Optional cache limits.
66
+ * @param {number} [config.maxEntries=200] - Maximum number of URLs to cache.
67
+ * @param {number} [config.maxSegmentsPerEntry=100] - Maximum segments per URL.
68
+ */
69
+ constructor(config) {
70
+ this.maxEntries = config?.maxEntries ?? 200;
71
+ this.maxSegmentsPerEntry = config?.maxSegmentsPerEntry ?? 100;
72
+ }
73
+ /**
74
+ * Stores a range segment for the given URL.
75
+ *
76
+ * @param {string} url - The resource URL.
77
+ * @param {ContentRange} range - The content range descriptor.
78
+ * @param {Buffer} data - The response body bytes for this range.
79
+ * @param {Object} [meta] - Optional metadata.
80
+ * @param {string} [meta.etag] - The entity tag for cache coherence.
81
+ * @param {string} [meta.lastModified] - The Last-Modified date.
82
+ */
83
+ store(url, range, data, meta) {
84
+ let entry = this.entries.get(url);
85
+ if (entry) {
86
+ if (meta?.etag && entry.etag && meta.etag !== entry.etag) {
87
+ entry.segments = [];
88
+ entry.etag = meta.etag;
89
+ }
90
+ }
91
+ else {
92
+ if (this.entries.size >= this.maxEntries) {
93
+ const firstKey = this.entries.keys().next().value;
94
+ if (firstKey)
95
+ this.entries.delete(firstKey);
96
+ }
97
+ entry = {
98
+ url,
99
+ segments: [],
100
+ totalSize: range.total,
101
+ etag: meta?.etag,
102
+ lastModified: meta?.lastModified,
103
+ };
104
+ this.entries.set(url, entry);
105
+ }
106
+ if (range.total !== -1) {
107
+ entry.totalSize = range.total;
108
+ }
109
+ entry.segments = entry.segments.filter((s) => s.end < range.start || s.start > range.end);
110
+ if (entry.segments.length < this.maxSegmentsPerEntry) {
111
+ entry.segments.push({
112
+ start: range.start,
113
+ end: range.end,
114
+ data: Buffer.from(data),
115
+ etag: meta?.etag,
116
+ storedAt: Date.now(),
117
+ });
118
+ entry.segments.sort((a, b) => a.start - b.start);
119
+ }
120
+ }
121
+ /**
122
+ * Looks up cached bytes for a given byte range.
123
+ *
124
+ * @param {string} url - The resource URL.
125
+ * @param {number} start - Start byte offset (inclusive).
126
+ * @param {number} end - End byte offset (inclusive).
127
+ * @returns {Buffer|null} The cached bytes, or `null` on a miss.
128
+ */
129
+ lookup(url, start, end) {
130
+ const entry = this.entries.get(url);
131
+ if (!entry)
132
+ return null;
133
+ const covering = entry.segments.filter((s) => s.start <= start && s.end >= end);
134
+ if (covering.length > 0) {
135
+ const segment = covering[0];
136
+ const offsetStart = start - segment.start;
137
+ const offsetEnd = end - segment.start + 1;
138
+ return segment.data.subarray(offsetStart, offsetEnd);
139
+ }
140
+ return null;
141
+ }
142
+ /**
143
+ * Checks whether all bytes for a URL have been cached.
144
+ *
145
+ * @param {string} url - The resource URL.
146
+ * @returns {boolean} `true` if the full resource is cached.
147
+ */
148
+ isComplete(url) {
149
+ const entry = this.entries.get(url);
150
+ if (!entry || entry.totalSize <= 0)
151
+ return false;
152
+ let covered = 0;
153
+ for (const segment of entry.segments) {
154
+ if (segment.start > covered)
155
+ return false;
156
+ covered = Math.max(covered, segment.end + 1);
157
+ }
158
+ return covered >= entry.totalSize;
159
+ }
160
+ /**
161
+ * Returns the range cache entry for a URL, if present.
162
+ *
163
+ * @param {string} url - The resource URL.
164
+ * @returns {RangeCacheEntry|undefined} The cached entry.
165
+ */
166
+ get(url) {
167
+ return this.entries.get(url);
168
+ }
169
+ /**
170
+ * Removes the cache entry for a URL.
171
+ *
172
+ * @param {string} url - The resource URL to evict.
173
+ * @returns {boolean} `true` if an entry was removed.
174
+ */
175
+ delete(url) {
176
+ return this.entries.delete(url);
177
+ }
178
+ /**
179
+ * Removes all cached range entries.
180
+ */
181
+ clear() {
182
+ this.entries.clear();
183
+ }
184
+ /**
185
+ * Returns the number of URLs with cached ranges.
186
+ *
187
+ * @returns {number} The entry count.
188
+ */
189
+ get size() {
190
+ return this.entries.size;
191
+ }
192
+ }
193
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/cache/range.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,10 @@ import type { CacheConfig, CacheDirectives, CacheEntry, CacheLookupResult, Cache
2
2
  import type { NLcURLRequest } from "../core/request.js";
3
3
  import { NLcURLResponse } from "../core/response.js";
4
4
  /**
5
- * In-memory HTTP response cache implementing RFC 9111.
5
+ * In-memory HTTP response cache implementing RFC 9111 semantics with LRU eviction,
6
+ * Vary-based matching, and conditional revalidation support.
6
7
  *
7
- * Features:
8
- * - Cache-Control directive parsing and freshness calculation
9
- * - ETag / Last-Modified conditional request header injection
10
- * - 304 Not Modified response merging
11
- * - Vary header support
12
- * - LRU eviction by entry count and total body size
13
- * - Range request passthrough (does not cache partial responses by default)
8
+ * @class
14
9
  */
15
10
  export declare class CacheStore {
16
11
  private readonly entries;
@@ -18,26 +13,35 @@ export declare class CacheStore {
18
13
  private readonly maxSize;
19
14
  private currentSize;
20
15
  private readonly mode;
21
- /** Monotonic counter for deterministic LRU ordering within the same ms. */
22
16
  private accessCounter;
17
+ /**
18
+ * Creates a new CacheStore with the given limits and default mode.
19
+ *
20
+ * @param {CacheConfig} [config] - Cache configuration.
21
+ */
23
22
  constructor(config?: CacheConfig);
24
23
  /**
25
- * Generates a cache key from a request. The key is `METHOD:URL`.
24
+ * Generates a deterministic cache key from an HTTP method and URL.
25
+ *
26
+ * @param {string} method - The HTTP method.
27
+ * @param {string} url - The request URL.
28
+ * @returns {string} The cache key.
26
29
  */
27
30
  static cacheKey(method: string, url: string): string;
28
31
  /**
29
- * Looks up a cached response and evaluates its freshness.
32
+ * Looks up a request in the cache and evaluates freshness.
30
33
  *
31
- * @param req - The outgoing request to match against cache.
32
- * @returns A lookup result with the entry and freshness status.
34
+ * @param {NLcURLRequest} req - The request to look up.
35
+ * @returns {CacheLookupResult} Freshness status and the matched entry, if any.
33
36
  */
34
37
  lookup(req: NLcURLRequest): CacheLookupResult;
35
38
  /**
36
- * Determines what action to take for a request given the cache state
37
- * and the configured cache mode.
39
+ * Evaluates a request against the cache and returns instructions for
40
+ * serving, revalidating, or storing the response.
38
41
  *
39
- * Returns conditional headers to add (If-None-Match / If-Modified-Since)
40
- * when the entry is stale and needs revalidation.
42
+ * @param {NLcURLRequest} req - The incoming request.
43
+ * @param {CacheMode} [modeOverride] - Overrides the store's default cache mode.
44
+ * @returns {Object} Evaluation decision with conditional headers and matched entry.
41
45
  */
42
46
  evaluate(req: NLcURLRequest, modeOverride?: CacheMode): {
43
47
  conditionalHeaders?: Record<string, string>;
@@ -46,44 +50,62 @@ export declare class CacheStore {
46
50
  serveCached?: CacheEntry;
47
51
  };
48
52
  /**
49
- * Stores a response in the cache if it is cacheable per RFC 9111 §3.
53
+ * Stores a response in the cache, subject to cacheability rules.
54
+ *
55
+ * @param {NLcURLRequest} req - The originating request.
56
+ * @param {NLcURLResponse} response - The response to cache.
50
57
  */
51
58
  store(req: NLcURLRequest, response: NLcURLResponse): void;
52
59
  /**
53
- * Merges a 304 Not Modified response with a cached entry, producing
54
- * a full response with updated headers.
60
+ * Merges a 304 Not Modified response with a stale cache entry, producing
61
+ * a fresh response with updated headers.
62
+ *
63
+ * @param {CacheEntry} entry - The stale cache entry.
64
+ * @param {NLcURLResponse} response304 - The 304 response.
65
+ * @returns {NLcURLResponse} A new response with merged headers and the cached body.
55
66
  */
56
67
  mergeNotModified(entry: CacheEntry, response304: NLcURLResponse): NLcURLResponse;
57
68
  /**
58
- * Constructs a full NLcURLResponse from a cache entry for direct serving.
69
+ * Constructs a full NLcURLResponse from a cache entry.
70
+ *
71
+ * @param {CacheEntry} entry - The cache entry to serve.
72
+ * @param {NLcURLRequest} req - The request context.
73
+ * @returns {NLcURLResponse} The reconstituted response.
59
74
  */
60
75
  responseFromEntry(entry: CacheEntry, req: NLcURLRequest): NLcURLResponse;
61
- /** Returns the number of cached entries. */
62
- get size(): number;
63
- /** Returns the total byte size of all cached response bodies. */
64
- get totalSize(): number;
65
- /** Clears all cached entries. */
66
- clear(): void;
67
76
  /**
68
- * Removes a specific cache entry by method and URL.
77
+ * Returns the number of entries in the cache.
78
+ *
79
+ * @returns {number} The entry count.
69
80
  */
70
- delete(method: string, url: string): boolean;
81
+ get size(): number;
71
82
  /**
72
- * Checks whether request headers match the stored Vary fields.
83
+ * Returns the total size of cached bodies in bytes.
84
+ *
85
+ * @returns {number} Total cached body size.
73
86
  */
74
- private varyMatches;
87
+ get totalSize(): number;
75
88
  /**
76
- * Finds the key of the least recently accessed entry.
89
+ * Removes all entries from the cache.
77
90
  */
78
- private findLRUKey;
91
+ clear(): void;
79
92
  /**
80
- * Evicts least-recently-used entries until there is room for a new entry
81
- * of the given size.
93
+ * Removes a single cache entry by method and URL.
94
+ *
95
+ * @param {string} method - The HTTP method.
96
+ * @param {string} url - The request URL.
97
+ * @returns {boolean} `true` if an entry was removed.
82
98
  */
99
+ delete(method: string, url: string): boolean;
100
+ private varyMatches;
101
+ private findLRUKey;
83
102
  private evictIfNeeded;
84
103
  }
85
104
  /**
86
- * Parses a `Cache-Control` header value into structured directives.
105
+ * Parses a Cache-Control header value into structured directives.
106
+ *
107
+ * @param {string} value - The raw Cache-Control header value.
108
+ * @returns {CacheDirectives} The parsed directives.
87
109
  */
88
110
  export declare function parseCacheControl(value: string): CacheDirectives;
89
111
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWrD;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAK;gBAEd,MAAM,CAAC,EAAE,WAAW;IAMhC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,iBAAiB;IA8B7C;;;;;;OAMG;IACH,QAAQ,CACN,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,SAAS,GACvB;QACD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,UAAU,CAAC;QAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;KAC1B;IA6CD;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAyDzD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,GAAG,cAAc;IA0BhF;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,GAAG,cAAc;IAcxE,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,iEAAiE;IACjE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,iCAAiC;IACjC,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAW5C;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAiBtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA0EhE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AASrD;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,aAAa,CAAK;IAE1B;;;;OAIG;gBACS,MAAM,CAAC,EAAE,WAAW;IAMhC;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,iBAAiB;IA8B7C;;;;;;;OAOG;IACH,QAAQ,CACN,GAAG,EAAE,aAAa,EAClB,YAAY,CAAC,EAAE,SAAS,GACvB;QACD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,UAAU,CAAC;QAC1B,WAAW,CAAC,EAAE,UAAU,CAAC;KAC1B;IA6CD;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAyDzD;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,GAAG,cAAc;IA0BhF;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,GAAG,cAAc;IAcxE;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAW5C,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,aAAa;CAiBtB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA0EhE"}