@ureq/lib-cache-store 0.0.3-alpha.0 → 0.0.4

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/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # @ureq/lib-cache-store
2
+
3
+ 缓存存储实现,提供内存缓存和 Storage 缓存。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @ureq/lib-cache-store
9
+ # 或
10
+ pnpm add @ureq/lib-cache-store
11
+ ```
12
+
13
+ ## 使用
14
+
15
+ ### MemoryStore
16
+
17
+ 内存缓存实现,适用于浏览器和 Node.js。
18
+
19
+ ```typescript
20
+ import { MemoryStore } from '@ureq/lib-cache-store';
21
+
22
+ const cache = new MemoryStore();
23
+
24
+ // 存储数据(TTL 单位:毫秒)
25
+ cache.set('key', { data: 'value' }, 60000);
26
+
27
+ // 获取数据
28
+ const data = cache.get('key');
29
+
30
+ // 检查是否存在
31
+ const exists = cache.has('key');
32
+
33
+ // 删除数据
34
+ cache.delete('key');
35
+
36
+ // 清空缓存
37
+ cache.clear();
38
+ ```
39
+
40
+ ### StorageStore
41
+
42
+ 基于 Web Storage API 的缓存实现(localStorage/sessionStorage)。
43
+
44
+ ```typescript
45
+ import { StorageStore } from '@ureq/lib-cache-store';
46
+
47
+ // 使用 localStorage
48
+ const localCache = new StorageStore(localStorage);
49
+
50
+ // 使用 sessionStorage
51
+ const sessionCache = new StorageStore(sessionStorage);
52
+
53
+ // 使用方式与 MemoryStore 相同
54
+ localCache.set('user', { id: 1, name: 'John' }, 3600000);
55
+ const user = localCache.get('user');
56
+ ```
57
+
58
+ ## API
59
+
60
+ ### MemoryStore
61
+
62
+ ```typescript
63
+ class MemoryStore {
64
+ set<T>(key: string, value: T, ttl?: number): void;
65
+ get<T>(key: string): T | undefined;
66
+ has(key: string): boolean;
67
+ delete(key: string): void;
68
+ clear(): void;
69
+ }
70
+ ```
71
+
72
+ ### StorageStore
73
+
74
+ ```typescript
75
+ class StorageStore {
76
+ constructor(storage?: Storage);
77
+
78
+ set<T>(key: string, value: T, ttl?: number): void;
79
+ get<T>(key: string): T | undefined;
80
+ has(key: string): boolean;
81
+ delete(key: string): void;
82
+ clear(): void;
83
+ }
84
+ ```
85
+
86
+ ## 特性
87
+
88
+ ### MemoryStore
89
+
90
+ - ✅ 快速访问
91
+ - ✅ 支持浏览器和 Node.js
92
+ - ✅ 自动过期清理
93
+ - ✅ 同步 API
94
+ - ⚠️ 数据不持久化
95
+
96
+ ### StorageStore
97
+
98
+ - ✅ 数据持久化
99
+ - ✅ 跨页面共享(localStorage)
100
+ - ✅ 自动过期清理
101
+ - ✅ 同步 API
102
+ - ⚠️ 仅支持浏览器
103
+ - ⚠️ 存储空间有限(通常 5-10MB)
104
+
105
+ ## 示例
106
+
107
+ ### 基础用法
108
+
109
+ ```typescript
110
+ import { MemoryStore } from '@ureq/lib-cache-store';
111
+
112
+ const cache = new MemoryStore();
113
+
114
+ // 存储数据(TTL: 60 秒)
115
+ cache.set('key', { data: 'value' }, 60000);
116
+
117
+ // 获取数据
118
+ const data = cache.get('key');
119
+
120
+ // 检查是否存在
121
+ if (cache.has('key')) {
122
+ console.log('Key exists');
123
+ }
124
+
125
+ // 删除数据
126
+ cache.delete('key');
127
+
128
+ // 清空缓存
129
+ cache.clear();
130
+ ```
131
+
132
+ ### 持久化缓存
133
+
134
+ ```typescript
135
+ import { StorageStore } from '@ureq/lib-cache-store';
136
+
137
+ const cache = new StorageStore(localStorage);
138
+
139
+ // 数据会保存到 localStorage
140
+ cache.set('user', { id: 1, name: 'John' }, 3600000);
141
+
142
+ // 刷新页面后仍然可以获取
143
+ const user = cache.get('user');
144
+ ```
145
+
146
+ ### 与 @ureq/core 集成
147
+
148
+ ```typescript
149
+ import { Request } from '@ureq/core';
150
+ import { FetchRequestor } from '@ureq/impl-fetch';
151
+ import { LibCacheStore } from '@ureq/business';
152
+ import { MemoryStore } from '@ureq/lib-cache-store';
153
+
154
+ const memoryStore = new MemoryStore();
155
+ const cacheStore = new LibCacheStore(memoryStore);
156
+
157
+ const request = new Request(
158
+ new FetchRequestor(),
159
+ {
160
+ cache: {
161
+ store: cacheStore,
162
+ ttl: 60000
163
+ }
164
+ }
165
+ );
166
+ ```
167
+
168
+ ## 文档
169
+
170
+ 查看完整文档:[https://sunny-117.github.io/ureq](https://sunny-117.github.io/ureq)
171
+
172
+ ## License
173
+
174
+ MIT
package/dist/index.js CHANGED
@@ -1,2 +1,79 @@
1
- 'use strict';var r=class{constructor(){this.store=new Map;}set(t,e,s=0){this.store.set(t,{value:e,timestamp:Date.now(),ttl:s});}get(t){let e=this.store.get(t);if(e){if(e.ttl&&Date.now()-e.timestamp>e.ttl){this.store.delete(t);return}return e.value}}has(t){return this.store.has(t)}delete(t){this.store.delete(t);}clear(){this.store.clear();}};var i=class{constructor(t=localStorage){this.storage=t;}getKey(t){return `cache:${t}`}set(t,e,s=0){let a={value:e,timestamp:Date.now(),ttl:s};this.storage.setItem(this.getKey(t),JSON.stringify(a));}get(t){let e=this.storage.getItem(this.getKey(t));if(!e)return;let s=JSON.parse(e);if(s.ttl&&Date.now()-s.timestamp>s.ttl){this.delete(t);return}return s.value}has(t){return this.storage.getItem(this.getKey(t))!==null}delete(t){this.storage.removeItem(this.getKey(t));}clear(){Object.keys(this.storage).forEach(t=>{t.startsWith("cache:")&&this.storage.removeItem(t);});}};exports.MemoryStore=r;exports.StorageStore=i;//# sourceMappingURL=index.js.map
1
+ 'use strict';
2
+
3
+ // src/memory.ts
4
+ var MemoryStore = class {
5
+ constructor() {
6
+ this.store = /* @__PURE__ */ new Map();
7
+ }
8
+ set(key, value, ttl = 0) {
9
+ this.store.set(key, {
10
+ value,
11
+ timestamp: Date.now(),
12
+ ttl
13
+ });
14
+ }
15
+ get(key) {
16
+ const item = this.store.get(key);
17
+ if (!item) return void 0;
18
+ if (item.ttl && Date.now() - item.timestamp > item.ttl) {
19
+ this.store.delete(key);
20
+ return void 0;
21
+ }
22
+ return item.value;
23
+ }
24
+ has(key) {
25
+ return this.store.has(key);
26
+ }
27
+ delete(key) {
28
+ this.store.delete(key);
29
+ }
30
+ clear() {
31
+ this.store.clear();
32
+ }
33
+ };
34
+
35
+ // src/storage.ts
36
+ var StorageStore = class {
37
+ constructor(storage = localStorage) {
38
+ this.storage = storage;
39
+ }
40
+ getKey(key) {
41
+ return `cache:${key}`;
42
+ }
43
+ set(key, value, ttl = 0) {
44
+ const item = {
45
+ value,
46
+ timestamp: Date.now(),
47
+ ttl
48
+ };
49
+ this.storage.setItem(this.getKey(key), JSON.stringify(item));
50
+ }
51
+ get(key) {
52
+ const data = this.storage.getItem(this.getKey(key));
53
+ if (!data) return void 0;
54
+ const item = JSON.parse(data);
55
+ if (item.ttl && Date.now() - item.timestamp > item.ttl) {
56
+ this.delete(key);
57
+ return void 0;
58
+ }
59
+ return item.value;
60
+ }
61
+ has(key) {
62
+ return this.storage.getItem(this.getKey(key)) !== null;
63
+ }
64
+ delete(key) {
65
+ this.storage.removeItem(this.getKey(key));
66
+ }
67
+ clear() {
68
+ Object.keys(this.storage).forEach((key) => {
69
+ if (key.startsWith("cache:")) {
70
+ this.storage.removeItem(key);
71
+ }
72
+ });
73
+ }
74
+ };
75
+
76
+ exports.MemoryStore = MemoryStore;
77
+ exports.StorageStore = StorageStore;
78
+ //# sourceMappingURL=index.js.map
2
79
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/memory.ts","../src/storage.ts"],"names":["MemoryStore","key","value","ttl","item","StorageStore","storage","data"],"mappings":"aAMaA,IAAAA,CAAAA,CAAN,KAAkB,CAAlB,WACL,EAAA,CAAA,IAAA,CAAQ,MAAQ,IAAI,IAAA,CAEpB,GAAOC,CAAAA,CAAAA,CAAaC,CAAUC,CAAAA,CAAAA,CAAc,EAAS,CACnD,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIF,CAAK,CAAA,CAClB,KAAAC,CAAAA,CAAAA,CACA,SAAW,CAAA,IAAA,CAAK,GAAI,EAAA,CACpB,GAAAC,CAAAA,CACF,CAAC,EACH,CAEA,GAAOF,CAAAA,CAAAA,CAA4B,CACjC,IAAMG,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIH,CAAG,CAAA,CAC/B,GAAKG,CAAAA,CAEL,IAAIA,CAAK,CAAA,GAAA,EAAO,IAAK,CAAA,GAAA,EAAQA,CAAAA,CAAAA,CAAK,SAAYA,CAAAA,CAAAA,CAAK,GAAK,CAAA,CACtD,IAAK,CAAA,KAAA,CAAM,MAAOH,CAAAA,CAAG,EACrB,MACF,CAEA,OAAOG,CAAAA,CAAK,KACd,CAAA,CAEA,IAAIH,CAAsB,CAAA,CACxB,OAAO,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIA,CAAG,CAC3B,CAEA,MAAOA,CAAAA,CAAAA,CAAmB,CACxB,IAAA,CAAK,KAAM,CAAA,MAAA,CAAOA,CAAG,EACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,MAAM,KAAM,GACnB,CACF,ECxCaI,IAAAA,CAAAA,CAAN,KAAmB,CACxB,WAAoBC,CAAAA,CAAAA,CAAmB,YAAc,CAAA,CAAjC,IAAAA,CAAAA,OAAAA,CAAAA,EAAkC,CAE9C,MAAOL,CAAAA,CAAAA,CAAqB,CAClC,OAAO,CAASA,MAAAA,EAAAA,CAAG,CACrB,CAAA,CAEA,GAAOA,CAAAA,CAAAA,CAAaC,CAAUC,CAAAA,CAAAA,CAAc,CAAS,CAAA,CACnD,IAAMC,CAAO,CAAA,CACX,KAAAF,CAAAA,CAAAA,CACA,SAAW,CAAA,IAAA,CAAK,KAChB,CAAA,GAAA,CAAAC,CACF,CAAA,CACA,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,MAAA,CAAOF,CAAG,CAAA,CAAG,IAAK,CAAA,SAAA,CAAUG,CAAI,CAAC,EAC7D,CAEA,GAAOH,CAAAA,CAAAA,CAA4B,CACjC,IAAMM,EAAO,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,MAAON,CAAAA,CAAG,CAAC,CAAA,CAClD,GAAI,CAACM,CAAM,CAAA,OAEX,IAAMH,CAAAA,CAAO,KAAK,KAAMG,CAAAA,CAAI,CAC5B,CAAA,GAAIH,CAAK,CAAA,GAAA,EAAO,IAAK,CAAA,GAAA,EAAQA,CAAAA,CAAAA,CAAK,SAAYA,CAAAA,CAAAA,CAAK,GAAK,CAAA,CACtD,KAAK,MAAOH,CAAAA,CAAG,CACf,CAAA,MACF,CAEA,OAAOG,EAAK,KACd,CAEA,GAAIH,CAAAA,CAAAA,CAAsB,CACxB,OAAO,KAAK,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,CAAOA,CAAG,CAAC,CAAM,GAAA,IACpD,CAEA,MAAA,CAAOA,CAAmB,CAAA,CACxB,IAAK,CAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,MAAA,CAAOA,CAAG,CAAC,EAC1C,CAEA,KAAc,EAAA,CACZ,MAAO,CAAA,IAAA,CAAK,IAAK,CAAA,OAAO,CAAE,CAAA,OAAA,CAAQA,GAAO,CACnCA,CAAAA,CAAI,UAAW,CAAA,QAAQ,CACzB,EAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAWA,CAAG,EAE/B,CAAC,EACH,CACF","file":"index.js","sourcesContent":["interface CacheItem<T> {\n value: T;\n timestamp: number;\n ttl: number;\n}\n\nexport class MemoryStore {\n private store = new Map<string, CacheItem<any>>();\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n this.store.set(key, {\n value,\n timestamp: Date.now(),\n ttl,\n });\n }\n\n get<T>(key: string): T | undefined {\n const item = this.store.get(key);\n if (!item) return undefined;\n\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.store.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.store.has(key);\n }\n\n delete(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n} ","export class StorageStore {\n constructor(private storage: Storage = localStorage) {}\n\n private getKey(key: string): string {\n return `cache:${key}`;\n }\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n const item = {\n value,\n timestamp: Date.now(),\n ttl,\n };\n this.storage.setItem(this.getKey(key), JSON.stringify(item));\n }\n\n get<T>(key: string): T | undefined {\n const data = this.storage.getItem(this.getKey(key));\n if (!data) return undefined;\n\n const item = JSON.parse(data);\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.storage.getItem(this.getKey(key)) !== null;\n }\n\n delete(key: string): void {\n this.storage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(this.storage).forEach(key => {\n if (key.startsWith('cache:')) {\n this.storage.removeItem(key);\n }\n });\n }\n} "]}
1
+ {"version":3,"sources":["../src/memory.ts","../src/storage.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["interface CacheItem<T> {\n value: T;\n timestamp: number;\n ttl: number;\n}\n\nexport class MemoryStore {\n private store = new Map<string, CacheItem<any>>();\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n this.store.set(key, {\n value,\n timestamp: Date.now(),\n ttl,\n });\n }\n\n get<T>(key: string): T | undefined {\n const item = this.store.get(key);\n if (!item) return undefined;\n\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.store.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.store.has(key);\n }\n\n delete(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n} ","export class StorageStore {\n constructor(private storage: Storage = localStorage) {}\n\n private getKey(key: string): string {\n return `cache:${key}`;\n }\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n const item = {\n value,\n timestamp: Date.now(),\n ttl,\n };\n this.storage.setItem(this.getKey(key), JSON.stringify(item));\n }\n\n get<T>(key: string): T | undefined {\n const data = this.storage.getItem(this.getKey(key));\n if (!data) return undefined;\n\n const item = JSON.parse(data);\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.storage.getItem(this.getKey(key)) !== null;\n }\n\n delete(key: string): void {\n this.storage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(this.storage).forEach(key => {\n if (key.startsWith('cache:')) {\n this.storage.removeItem(key);\n }\n });\n }\n} "]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,76 @@
1
- var r=class{constructor(){this.store=new Map;}set(t,e,s=0){this.store.set(t,{value:e,timestamp:Date.now(),ttl:s});}get(t){let e=this.store.get(t);if(e){if(e.ttl&&Date.now()-e.timestamp>e.ttl){this.store.delete(t);return}return e.value}}has(t){return this.store.has(t)}delete(t){this.store.delete(t);}clear(){this.store.clear();}};var i=class{constructor(t=localStorage){this.storage=t;}getKey(t){return `cache:${t}`}set(t,e,s=0){let a={value:e,timestamp:Date.now(),ttl:s};this.storage.setItem(this.getKey(t),JSON.stringify(a));}get(t){let e=this.storage.getItem(this.getKey(t));if(!e)return;let s=JSON.parse(e);if(s.ttl&&Date.now()-s.timestamp>s.ttl){this.delete(t);return}return s.value}has(t){return this.storage.getItem(this.getKey(t))!==null}delete(t){this.storage.removeItem(this.getKey(t));}clear(){Object.keys(this.storage).forEach(t=>{t.startsWith("cache:")&&this.storage.removeItem(t);});}};export{r as MemoryStore,i as StorageStore};//# sourceMappingURL=index.mjs.map
1
+ // src/memory.ts
2
+ var MemoryStore = class {
3
+ constructor() {
4
+ this.store = /* @__PURE__ */ new Map();
5
+ }
6
+ set(key, value, ttl = 0) {
7
+ this.store.set(key, {
8
+ value,
9
+ timestamp: Date.now(),
10
+ ttl
11
+ });
12
+ }
13
+ get(key) {
14
+ const item = this.store.get(key);
15
+ if (!item) return void 0;
16
+ if (item.ttl && Date.now() - item.timestamp > item.ttl) {
17
+ this.store.delete(key);
18
+ return void 0;
19
+ }
20
+ return item.value;
21
+ }
22
+ has(key) {
23
+ return this.store.has(key);
24
+ }
25
+ delete(key) {
26
+ this.store.delete(key);
27
+ }
28
+ clear() {
29
+ this.store.clear();
30
+ }
31
+ };
32
+
33
+ // src/storage.ts
34
+ var StorageStore = class {
35
+ constructor(storage = localStorage) {
36
+ this.storage = storage;
37
+ }
38
+ getKey(key) {
39
+ return `cache:${key}`;
40
+ }
41
+ set(key, value, ttl = 0) {
42
+ const item = {
43
+ value,
44
+ timestamp: Date.now(),
45
+ ttl
46
+ };
47
+ this.storage.setItem(this.getKey(key), JSON.stringify(item));
48
+ }
49
+ get(key) {
50
+ const data = this.storage.getItem(this.getKey(key));
51
+ if (!data) return void 0;
52
+ const item = JSON.parse(data);
53
+ if (item.ttl && Date.now() - item.timestamp > item.ttl) {
54
+ this.delete(key);
55
+ return void 0;
56
+ }
57
+ return item.value;
58
+ }
59
+ has(key) {
60
+ return this.storage.getItem(this.getKey(key)) !== null;
61
+ }
62
+ delete(key) {
63
+ this.storage.removeItem(this.getKey(key));
64
+ }
65
+ clear() {
66
+ Object.keys(this.storage).forEach((key) => {
67
+ if (key.startsWith("cache:")) {
68
+ this.storage.removeItem(key);
69
+ }
70
+ });
71
+ }
72
+ };
73
+
74
+ export { MemoryStore, StorageStore };
75
+ //# sourceMappingURL=index.mjs.map
2
76
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/memory.ts","../src/storage.ts"],"names":["MemoryStore","key","value","ttl","item","StorageStore","storage","data"],"mappings":"AAMaA,IAAAA,CAAAA,CAAN,KAAkB,CAAlB,WACL,EAAA,CAAA,IAAA,CAAQ,MAAQ,IAAI,IAAA,CAEpB,GAAOC,CAAAA,CAAAA,CAAaC,CAAUC,CAAAA,CAAAA,CAAc,EAAS,CACnD,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIF,CAAK,CAAA,CAClB,KAAAC,CAAAA,CAAAA,CACA,SAAW,CAAA,IAAA,CAAK,GAAI,EAAA,CACpB,GAAAC,CAAAA,CACF,CAAC,EACH,CAEA,GAAOF,CAAAA,CAAAA,CAA4B,CACjC,IAAMG,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIH,CAAG,CAAA,CAC/B,GAAKG,CAAAA,CAEL,IAAIA,CAAK,CAAA,GAAA,EAAO,IAAK,CAAA,GAAA,EAAQA,CAAAA,CAAAA,CAAK,SAAYA,CAAAA,CAAAA,CAAK,GAAK,CAAA,CACtD,IAAK,CAAA,KAAA,CAAM,MAAOH,CAAAA,CAAG,EACrB,MACF,CAEA,OAAOG,CAAAA,CAAK,KACd,CAAA,CAEA,IAAIH,CAAsB,CAAA,CACxB,OAAO,IAAA,CAAK,KAAM,CAAA,GAAA,CAAIA,CAAG,CAC3B,CAEA,MAAOA,CAAAA,CAAAA,CAAmB,CACxB,IAAA,CAAK,KAAM,CAAA,MAAA,CAAOA,CAAG,EACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,MAAM,KAAM,GACnB,CACF,ECxCaI,IAAAA,CAAAA,CAAN,KAAmB,CACxB,WAAoBC,CAAAA,CAAAA,CAAmB,YAAc,CAAA,CAAjC,IAAAA,CAAAA,OAAAA,CAAAA,EAAkC,CAE9C,MAAOL,CAAAA,CAAAA,CAAqB,CAClC,OAAO,CAASA,MAAAA,EAAAA,CAAG,CACrB,CAAA,CAEA,GAAOA,CAAAA,CAAAA,CAAaC,CAAUC,CAAAA,CAAAA,CAAc,CAAS,CAAA,CACnD,IAAMC,CAAO,CAAA,CACX,KAAAF,CAAAA,CAAAA,CACA,SAAW,CAAA,IAAA,CAAK,KAChB,CAAA,GAAA,CAAAC,CACF,CAAA,CACA,IAAK,CAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,MAAA,CAAOF,CAAG,CAAA,CAAG,IAAK,CAAA,SAAA,CAAUG,CAAI,CAAC,EAC7D,CAEA,GAAOH,CAAAA,CAAAA,CAA4B,CACjC,IAAMM,EAAO,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,MAAON,CAAAA,CAAG,CAAC,CAAA,CAClD,GAAI,CAACM,CAAM,CAAA,OAEX,IAAMH,CAAAA,CAAO,KAAK,KAAMG,CAAAA,CAAI,CAC5B,CAAA,GAAIH,CAAK,CAAA,GAAA,EAAO,IAAK,CAAA,GAAA,EAAQA,CAAAA,CAAAA,CAAK,SAAYA,CAAAA,CAAAA,CAAK,GAAK,CAAA,CACtD,KAAK,MAAOH,CAAAA,CAAG,CACf,CAAA,MACF,CAEA,OAAOG,EAAK,KACd,CAEA,GAAIH,CAAAA,CAAAA,CAAsB,CACxB,OAAO,KAAK,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,CAAOA,CAAG,CAAC,CAAM,GAAA,IACpD,CAEA,MAAA,CAAOA,CAAmB,CAAA,CACxB,IAAK,CAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,MAAA,CAAOA,CAAG,CAAC,EAC1C,CAEA,KAAc,EAAA,CACZ,MAAO,CAAA,IAAA,CAAK,IAAK,CAAA,OAAO,CAAE,CAAA,OAAA,CAAQA,GAAO,CACnCA,CAAAA,CAAI,UAAW,CAAA,QAAQ,CACzB,EAAA,IAAA,CAAK,OAAQ,CAAA,UAAA,CAAWA,CAAG,EAE/B,CAAC,EACH,CACF","file":"index.mjs","sourcesContent":["interface CacheItem<T> {\n value: T;\n timestamp: number;\n ttl: number;\n}\n\nexport class MemoryStore {\n private store = new Map<string, CacheItem<any>>();\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n this.store.set(key, {\n value,\n timestamp: Date.now(),\n ttl,\n });\n }\n\n get<T>(key: string): T | undefined {\n const item = this.store.get(key);\n if (!item) return undefined;\n\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.store.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.store.has(key);\n }\n\n delete(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n} ","export class StorageStore {\n constructor(private storage: Storage = localStorage) {}\n\n private getKey(key: string): string {\n return `cache:${key}`;\n }\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n const item = {\n value,\n timestamp: Date.now(),\n ttl,\n };\n this.storage.setItem(this.getKey(key), JSON.stringify(item));\n }\n\n get<T>(key: string): T | undefined {\n const data = this.storage.getItem(this.getKey(key));\n if (!data) return undefined;\n\n const item = JSON.parse(data);\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.storage.getItem(this.getKey(key)) !== null;\n }\n\n delete(key: string): void {\n this.storage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(this.storage).forEach(key => {\n if (key.startsWith('cache:')) {\n this.storage.removeItem(key);\n }\n });\n }\n} "]}
1
+ {"version":3,"sources":["../src/memory.ts","../src/storage.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["interface CacheItem<T> {\n value: T;\n timestamp: number;\n ttl: number;\n}\n\nexport class MemoryStore {\n private store = new Map<string, CacheItem<any>>();\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n this.store.set(key, {\n value,\n timestamp: Date.now(),\n ttl,\n });\n }\n\n get<T>(key: string): T | undefined {\n const item = this.store.get(key);\n if (!item) return undefined;\n\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.store.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.store.has(key);\n }\n\n delete(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n} ","export class StorageStore {\n constructor(private storage: Storage = localStorage) {}\n\n private getKey(key: string): string {\n return `cache:${key}`;\n }\n\n set<T>(key: string, value: T, ttl: number = 0): void {\n const item = {\n value,\n timestamp: Date.now(),\n ttl,\n };\n this.storage.setItem(this.getKey(key), JSON.stringify(item));\n }\n\n get<T>(key: string): T | undefined {\n const data = this.storage.getItem(this.getKey(key));\n if (!data) return undefined;\n\n const item = JSON.parse(data);\n if (item.ttl && Date.now() - item.timestamp > item.ttl) {\n this.delete(key);\n return undefined;\n }\n\n return item.value as T;\n }\n\n has(key: string): boolean {\n return this.storage.getItem(this.getKey(key)) !== null;\n }\n\n delete(key: string): void {\n this.storage.removeItem(this.getKey(key));\n }\n\n clear(): void {\n Object.keys(this.storage).forEach(key => {\n if (key.startsWith('cache:')) {\n this.storage.removeItem(key);\n }\n });\n }\n} "]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ureq/lib-cache-store",
3
- "version": "0.0.3-alpha.0",
3
+ "version": "0.0.4",
4
4
  "description": "Cache store implementations for universal request library",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -18,6 +18,6 @@
18
18
  "scripts": {
19
19
  "build": "tsup --config tsup.config.ts",
20
20
  "dev": "tsup --config tsup.config.ts --watch",
21
- "test": "vitest"
21
+ "test": "vitest --run"
22
22
  }
23
23
  }