@hyperttp/cache 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 IT IF OR
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # @hyperttp/cache
2
+
3
+ Высокопроизводительный плагин кэширования для HTTP-клиента **Hyperttp**,
4
+ работающий на базе `lru-cache`.
5
+ Перехватывает идемпотентные запросы на фазе управления (`CONTROL`),
6
+ сводя к нулю нагрузку на сеть при повторных вызовах.
7
+
8
+ ## Особенности
9
+
10
+ - ⚡ **Нулевая задержка**: Проверяет кэш на фазе `CONTROL`,
11
+ полностью минуя сетевой стек.
12
+ - 📦 **LRU Стратегия**:
13
+ Автоматически вытесняет старые данные при достижении лимитов (благодаря `lru-cache`).
14
+ - 📊 **Прозрачная статистика**: Интегрируется в системный вызов `client.getStats()`,
15
+ добавляя метрику `cacheSize`.
16
+ - 🧹 **Ручное управление**:
17
+ Добавляет метод `client.clearCache()` для принудительного сброса данных.
18
+ - 🔒 **Строгая типизация**:
19
+ Полная поддержка TypeScript «из коробки» через Module Augmentation.
20
+
21
+ ## Установка
22
+
23
+ ```bash
24
+ # Использованием bun (рекомендуется)
25
+ bun add @hyperttp/cache
26
+
27
+ # Или через npm/pnpm
28
+ npm install @hyperttp/cache
29
+
30
+ ```
31
+
32
+ ## Использование
33
+
34
+ Плагин автоматически обнаруживается менеджером плагинов `Hyperttp`
35
+ (если настроен автоскан `package.json`), либо его можно передать явно.
36
+
37
+ ### Настройка при инициализации клиента
38
+
39
+ ```typescript
40
+ import { HyperClient } from "@hyperttp/core";
41
+ // Импорт нужен для того, чтобы TypeScript подтянул расширение типов для HttpClientOptions
42
+ import "@hyperttp/cache";
43
+
44
+ const client = new HyperClient({
45
+ verbose: true,
46
+ cache: {
47
+ enabled: true,
48
+ max: 500, // Максимальное количество объектов в кэше
49
+ ttl: 1000 * 60 * 5, // Время жизни кэша (5 минут)
50
+ }
51
+ });
52
+
53
+ // Первый запрос пойдет в сеть
54
+ const data1 = await client.get("https://api.example.com/data");
55
+
56
+ // Второй запрос вернется мгновенно из кэша
57
+ const data2 = await client.get("https://api.example.com/data");
58
+
59
+ ```
60
+
61
+ ### Метрики и управление кэшем
62
+
63
+ Плагин динамически расширяет инстанс ядра, добавляя методы управления:
64
+
65
+ ```typescript
66
+ // Получить текущий размер кэша вместе с общими метриками ядра
67
+ console.log(client.getStats());
68
+ // Выведет: { requests: 2, ..., cacheSize: 1 }
69
+
70
+ // Полная очистка кэша вручную
71
+ (client as any).clearCache();
72
+
73
+ ```
74
+
75
+ ## Как это работает (Архитектура)
76
+
77
+ Плагин встраивается в «луковичную» (onion) архитектуру запроса на фазе **`CONTROL`**:
78
+
79
+ ```mermaid
80
+ graph LR
81
+ Req([Запрос]) --> MONITOR --> LOGIC --> CONTROL{Проверка кэша}
82
+
83
+ CONTROL -- Кэш-хит --> Return([Возврат данных])
84
+ CONTROL -- Кэш-мисс --> FORMAT --> NETWORK --> Save[Запись в Кэш] --> Return
85
+
86
+ style CONTROL fill:#f9f,stroke:#333,stroke-width:2px
87
+ style Return fill:#bbf,stroke:#333,stroke-width:2px
88
+ ```
89
+
90
+ Он перехватывает исключительно `GET` запросы (проверка через флаг `req.isGet`).
91
+ Если URL уже есть в памяти, выполнение сетевой цепочки прерывается,
92
+ и клиент моментально возвращает сохраненный результат.
93
+
94
+ ## Лицензия
95
+
96
+ MIT © dirold2
@@ -0,0 +1,16 @@
1
+ import type { HyperCore, HyperPlugin } from "@hyperttp/core";
2
+ import type { CacheManagerOptions } from "./types/cache.js";
3
+ interface CacheableHyperCore extends HyperCore {
4
+ clearCache?: () => void;
5
+ }
6
+ export declare function withCache(client: HyperCore, options: CacheManagerOptions): CacheableHyperCore;
7
+ declare module "@hyperttp/core" {
8
+ interface HyperttpPluginsExtension {
9
+ cache?: CacheManagerOptions & {
10
+ enabled: boolean;
11
+ };
12
+ }
13
+ }
14
+ export declare const CachePlugin: HyperPlugin;
15
+ export {};
16
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CA0BpB;AAED,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,wBAAwB;QAChC,KAAK,CAAC,EAAE,mBAAmB,GAAG;YAC5B,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;KACH;CACF;AAED,eAAO,MAAM,WAAW,EAAE,WAQzB,CAAC"}
package/dist/plugin.js ADDED
@@ -0,0 +1,34 @@
1
+ import { CacheManager } from "./utils/CacheManager.js";
2
+ export function withCache(client, options) {
3
+ const cache = new CacheManager(options);
4
+ const next = client.dispatch;
5
+ const originalGetStats = client.getStats.bind(client);
6
+ client.getStats = () => ({
7
+ ...originalGetStats(),
8
+ cacheSize: cache.size ?? 0,
9
+ });
10
+ client.dispatch = async (req) => {
11
+ if (!req.isGet)
12
+ return next(req);
13
+ const urlString = typeof req.url === "string" ? req.url : req.url.getURL();
14
+ const cached = await cache.get(urlString);
15
+ if (cached !== undefined)
16
+ return cached;
17
+ const result = await next(req);
18
+ if (result !== undefined)
19
+ cache.set(urlString, result);
20
+ return result;
21
+ };
22
+ const extendedClient = client;
23
+ extendedClient.clearCache = () => cache.clear();
24
+ return extendedClient;
25
+ }
26
+ export const CachePlugin = {
27
+ name: "hyperttp-cache",
28
+ phase: "CONTROL",
29
+ enabled: (config) => !!config.cache?.enabled,
30
+ apply: (client, config) => {
31
+ return withCache(client, config.cache);
32
+ },
33
+ };
34
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAMvD,MAAM,UAAU,SAAS,CACvB,MAAiB,EACjB,OAA4B;IAE5B,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEtD,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;QACvB,GAAG,gBAAgB,EAAE;QACrB,SAAS,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,MAAM,CAAC,QAAQ,GAAG,KAAK,EAAW,GAAoB,EAAc,EAAE;QACpE,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,GAAG,CAAM,CAAC;QAEtC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAW,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,MAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,MAA4B,CAAC;IACpD,cAAc,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAEhD,OAAO,cAAc,CAAC;AACxB,CAAC;AAUD,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAE/D,KAAK,EAAE,CAAC,MAAiB,EAAE,MAAyB,EAAE,EAAE;QACtD,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,KAAM,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ export type Method = "GET" | "POST" | "PUT" | "PATCH" | "OPTIONS" | "DELETE" | "HEAD";
2
+ export interface CacheManagerOptions {
3
+ /**
4
+ * @ru Включить кэш
5
+ * @en Enable cache
6
+ */
7
+ enabled?: boolean;
8
+ /**
9
+ * @ru Время жизни кэша (мс)
10
+ * @en Cache time-to-live in milliseconds
11
+ */
12
+ ttl?: number;
13
+ /**
14
+ * @ru Максимальный размер кэша
15
+ * @en Maximum cache size
16
+ */
17
+ maxSize?: number;
18
+ /**
19
+ * @ru HTTP методы, которые можно кэшировать
20
+ * @en HTTP methods allowed to be cached
21
+ */
22
+ methods?: readonly Method[];
23
+ }
24
+ export interface CacheEntry<T> {
25
+ data: T;
26
+ etag?: string;
27
+ lastModified?: string;
28
+ }
29
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/types/cache.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/types/cache.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import type { CacheManagerOptions } from "../types/cache.ts";
2
+ /**
3
+ * @class CacheManager
4
+ * @en High-performance in-memory cache based on LRU strategy.
5
+ * Provides TTL support, metadata storage (etag, lastModified) and fast key-value access.
6
+ *
7
+ * @ru Высокопроизводительный in-memory кэш на основе LRU стратегии.
8
+ * Поддерживает TTL, хранение метаданных (etag, lastModified) и быстрый доступ по ключу.
9
+ */
10
+ export declare class CacheManager {
11
+ private readonly cache;
12
+ constructor(options?: CacheManagerOptions);
13
+ /**
14
+ * @en Retrieves cached value by key.
15
+ * @ru Получает значение из кэша по ключу.
16
+ *
17
+ * @template T
18
+ * @param key Cache key
19
+ * @returns Cached value or undefined if not found
20
+ */
21
+ get<T>(key: string): T | undefined;
22
+ /**
23
+ * @en Stores value in cache.
24
+ * @ru Сохраняет значение в кэш.
25
+ *
26
+ * @template T
27
+ * @param key Cache key
28
+ * @param value Value to store
29
+ */
30
+ set<T>(key: string, value: T): void;
31
+ /**
32
+ * @en Retrieves cached entry with metadata (etag, lastModified).
33
+ * @ru Получает запись кэша вместе с метаданными (etag, lastModified).
34
+ *
35
+ * @template T
36
+ * @param key Cache key
37
+ * @returns Cached entry with metadata or undefined
38
+ */
39
+ getWithMetadata<T>(key: string): {
40
+ data: T;
41
+ etag?: string;
42
+ lastModified?: string;
43
+ } | undefined;
44
+ /**
45
+ * @en Stores value with optional HTTP metadata (etag, lastModified).
46
+ * @ru Сохраняет значение с дополнительными HTTP метаданными (etag, lastModified).
47
+ *
48
+ * @template T
49
+ * @param key Cache key
50
+ * @param data Value to store
51
+ * @param meta Optional HTTP metadata
52
+ */
53
+ setWithMetadata<T>(key: string, data: T, meta?: {
54
+ etag?: string;
55
+ lastModified?: string;
56
+ }): void;
57
+ /**
58
+ * @en Checks if key exists in cache.
59
+ * @ru Проверяет наличие ключа в кэше.
60
+ *
61
+ * @param key Cache key
62
+ * @returns true if exists, otherwise false
63
+ */
64
+ has(key: string): boolean;
65
+ /**
66
+ * @en Deletes value from cache by key.
67
+ * @ru Удаляет значение из кэша по ключу.
68
+ *
69
+ * @param key Cache key
70
+ * @returns true if value was removed
71
+ */
72
+ delete(key: string): boolean;
73
+ /**
74
+ * @en Clears entire cache.
75
+ * @ru Очищает весь кэш.
76
+ */
77
+ clear(): void;
78
+ /**
79
+ * @en Returns current cache size.
80
+ * @ru Возвращает текущий размер кэша.
81
+ */
82
+ get size(): number;
83
+ }
84
+ //# sourceMappingURL=CacheManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../src/utils/CacheManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;gBAE9C,OAAO,CAAC,EAAE,mBAAmB;IAQzC;;;;;;;OAOG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC;;;;;;;OAOG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMnC;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAC1B;QACE,IAAI,EAAE,CAAC,CAAC;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACD,SAAS;IAIb;;;;;;;;OAQG;IACH,eAAe,CAAC,CAAC,EACf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,IAAI;IAQP;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,105 @@
1
+ import { LRUCache } from "lru-cache";
2
+ /**
3
+ * @class CacheManager
4
+ * @en High-performance in-memory cache based on LRU strategy.
5
+ * Provides TTL support, metadata storage (etag, lastModified) and fast key-value access.
6
+ *
7
+ * @ru Высокопроизводительный in-memory кэш на основе LRU стратегии.
8
+ * Поддерживает TTL, хранение метаданных (etag, lastModified) и быстрый доступ по ключу.
9
+ */
10
+ export class CacheManager {
11
+ cache;
12
+ constructor(options) {
13
+ this.cache = new LRUCache({
14
+ max: options?.maxSize ?? 500,
15
+ ttl: options?.ttl ?? 300_000,
16
+ updateAgeOnGet: true,
17
+ });
18
+ }
19
+ /**
20
+ * @en Retrieves cached value by key.
21
+ * @ru Получает значение из кэша по ключу.
22
+ *
23
+ * @template T
24
+ * @param key Cache key
25
+ * @returns Cached value or undefined if not found
26
+ */
27
+ get(key) {
28
+ return this.cache.get(key)?.data;
29
+ }
30
+ /**
31
+ * @en Stores value in cache.
32
+ * @ru Сохраняет значение в кэш.
33
+ *
34
+ * @template T
35
+ * @param key Cache key
36
+ * @param value Value to store
37
+ */
38
+ set(key, value) {
39
+ this.cache.set(key, {
40
+ data: value,
41
+ });
42
+ }
43
+ /**
44
+ * @en Retrieves cached entry with metadata (etag, lastModified).
45
+ * @ru Получает запись кэша вместе с метаданными (etag, lastModified).
46
+ *
47
+ * @template T
48
+ * @param key Cache key
49
+ * @returns Cached entry with metadata or undefined
50
+ */
51
+ getWithMetadata(key) {
52
+ return this.cache.get(key);
53
+ }
54
+ /**
55
+ * @en Stores value with optional HTTP metadata (etag, lastModified).
56
+ * @ru Сохраняет значение с дополнительными HTTP метаданными (etag, lastModified).
57
+ *
58
+ * @template T
59
+ * @param key Cache key
60
+ * @param data Value to store
61
+ * @param meta Optional HTTP metadata
62
+ */
63
+ setWithMetadata(key, data, meta) {
64
+ this.cache.set(key, {
65
+ data,
66
+ etag: meta?.etag,
67
+ lastModified: meta?.lastModified,
68
+ });
69
+ }
70
+ /**
71
+ * @en Checks if key exists in cache.
72
+ * @ru Проверяет наличие ключа в кэше.
73
+ *
74
+ * @param key Cache key
75
+ * @returns true if exists, otherwise false
76
+ */
77
+ has(key) {
78
+ return this.cache.has(key);
79
+ }
80
+ /**
81
+ * @en Deletes value from cache by key.
82
+ * @ru Удаляет значение из кэша по ключу.
83
+ *
84
+ * @param key Cache key
85
+ * @returns true if value was removed
86
+ */
87
+ delete(key) {
88
+ return this.cache.delete(key);
89
+ }
90
+ /**
91
+ * @en Clears entire cache.
92
+ * @ru Очищает весь кэш.
93
+ */
94
+ clear() {
95
+ this.cache.clear();
96
+ }
97
+ /**
98
+ * @en Returns current cache size.
99
+ * @ru Возвращает текущий размер кэша.
100
+ */
101
+ get size() {
102
+ return this.cache.size;
103
+ }
104
+ }
105
+ //# sourceMappingURL=CacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../src/utils/CacheManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACN,KAAK,CAAoC;IAE1D,YAAY,OAA6B;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC;YACxB,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,GAAG;YAC5B,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO;YAC5B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CAAI,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CAAI,GAAW,EAAE,KAAQ;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAAI,GAAW;QAO5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CACb,GAAW,EACX,IAAO,EACP,IAGC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI;YACJ,IAAI,EAAE,IAAI,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI,EAAE,YAAY;SACjC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@hyperttp/cache",
3
+ "version": "1.0.0",
4
+ "description": "High-performance LRU caching plugin for Hyperttp client",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "keywords": [
12
+ "hyperttp"
13
+ ],
14
+ "author": "dirold2",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/IT-IF-OR/hyperttp-cache.git"
19
+ },
20
+ "dependencies": {
21
+ "@hyperttp/core": "^1.0.5",
22
+ "lru-cache": "^11.5.0"
23
+ }
24
+ }