@vizamodo/edge-cache-core 0.3.26 → 0.3.27
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/dist/runtime/cache.d.ts +10 -4
- package/dist/runtime/cache.js +23 -10
- package/package.json +1 -1
package/dist/runtime/cache.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
type
|
|
2
|
-
ttlSec
|
|
1
|
+
export type CacheOptions = {
|
|
2
|
+
ttlSec: number;
|
|
3
3
|
forceRefresh?: boolean;
|
|
4
4
|
};
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Two-level cache: L1 in-memory → L2 edge → L3 fetcher.
|
|
7
|
+
*
|
|
8
|
+
* - forceRefresh: skips L1 + L2, always calls the fetcher and writes back.
|
|
9
|
+
* - ttlSec: edge cache TTL in seconds (REQUIRED). Pass 0 to skip edge write.
|
|
10
|
+
* - Edge and memory write failures are non-fatal and will not throw.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCachedOrFetch<T>(key: string, fetcher: () => Promise<T>, options: CacheOptions): Promise<T>;
|
package/dist/runtime/cache.js
CHANGED
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import { getEdgeCache, setEdgeCache } from "./edge-cache";
|
|
2
2
|
const memory = new Map();
|
|
3
|
+
/**
|
|
4
|
+
* Two-level cache: L1 in-memory → L2 edge → L3 fetcher.
|
|
5
|
+
*
|
|
6
|
+
* - forceRefresh: skips L1 + L2, always calls the fetcher and writes back.
|
|
7
|
+
* - ttlSec: edge cache TTL in seconds (REQUIRED). Pass 0 to skip edge write.
|
|
8
|
+
* - Edge and memory write failures are non-fatal and will not throw.
|
|
9
|
+
*/
|
|
3
10
|
export async function getCachedOrFetch(key, fetcher, options) {
|
|
4
|
-
|
|
5
|
-
if (!
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
const { forceRefresh = false, ttlSec } = options;
|
|
12
|
+
if (!forceRefresh) {
|
|
13
|
+
// L1: memory
|
|
14
|
+
if (memory.has(key)) {
|
|
15
|
+
return memory.get(key);
|
|
16
|
+
}
|
|
17
|
+
// L2: edge cache
|
|
10
18
|
const edge = await getEdgeCache(key);
|
|
11
|
-
if (edge) {
|
|
19
|
+
if (edge !== null) {
|
|
12
20
|
memory.set(key, edge);
|
|
13
21
|
return edge;
|
|
14
22
|
}
|
|
15
23
|
}
|
|
16
|
-
// L3: fetch
|
|
24
|
+
// L3: fetch from source
|
|
17
25
|
const value = await fetcher();
|
|
18
|
-
// write
|
|
26
|
+
// Write back to both layers — edge write is best-effort
|
|
19
27
|
memory.set(key, value);
|
|
20
|
-
|
|
28
|
+
try {
|
|
29
|
+
await setEdgeCache(key, value, ttlSec);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// non-fatal
|
|
33
|
+
}
|
|
21
34
|
return value;
|
|
22
35
|
}
|