@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.
@@ -1,6 +1,12 @@
1
- type Options = {
2
- ttlSec?: number;
1
+ export type CacheOptions = {
2
+ ttlSec: number;
3
3
  forceRefresh?: boolean;
4
4
  };
5
- export declare function getCachedOrFetch<T>(key: string, fetcher: () => Promise<T>, options?: Options): Promise<T>;
6
- export {};
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>;
@@ -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
- // L1: memory (skip if forceRefresh)
5
- if (!options?.forceRefresh && memory.has(key)) {
6
- return memory.get(key);
7
- }
8
- // L2: edge cache (skip if forceRefresh)
9
- if (!options?.forceRefresh) {
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 back
26
+ // Write back to both layers — edge write is best-effort
19
27
  memory.set(key, value);
20
- await setEdgeCache(key, value, options?.ttlSec ?? 3000);
28
+ try {
29
+ await setEdgeCache(key, value, ttlSec);
30
+ }
31
+ catch {
32
+ // non-fatal
33
+ }
21
34
  return value;
22
35
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vizamodo/edge-cache-core",
3
- "version": "0.3.26",
3
+ "version": "0.3.27",
4
4
  "description": "Edge cache primitives for Cloudflare Workers (L1 memory + L2 edge cache)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",