From 86403a6fc66f52f93ace611631614c2844af5a87 Mon Sep 17 00:00:00 2001 From: Daniel Almaguer Date: Thu, 18 Apr 2024 12:00:25 -0500 Subject: [PATCH] feat(core): vercel kv adapter cache (#789) --- .changeset/four-candles-share.md | 5 +++++ apps/core/lib/kv/adapters/vercel.ts | 19 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 .changeset/four-candles-share.md diff --git a/.changeset/four-candles-share.md b/.changeset/four-candles-share.md new file mode 100644 index 000000000..1023a1ee2 --- /dev/null +++ b/.changeset/four-candles-share.md @@ -0,0 +1,5 @@ +--- +"@bigcommerce/catalyst-core": patch +--- + +best-effort in memory cache for vercel kv adapter diff --git a/apps/core/lib/kv/adapters/vercel.ts b/apps/core/lib/kv/adapters/vercel.ts index 7c17b9029..8ce41b2cf 100644 --- a/apps/core/lib/kv/adapters/vercel.ts +++ b/apps/core/lib/kv/adapters/vercel.ts @@ -2,15 +2,24 @@ import { kv } from '@vercel/kv'; import { KvAdapter, SetCommandOptions } from '../types'; +import { MemoryKvAdapter } from './memory'; + +const memoryKv = new MemoryKvAdapter(); + export class VercelKvAdapter implements KvAdapter { - constructor(private adapter = kv) {} + private vercelKv = kv; + private memoryKv = memoryKv; async get(key: string) { - return this.adapter.get(key); + const memoryValue = await this.memoryKv.get(key); + + return memoryValue ?? this.vercelKv.get(key); } async mget(...keys: string[]) { - return this.adapter.mget(keys); + const memoryValues = await this.memoryKv.mget(...keys); + + return memoryValues.length ? memoryValues : this.vercelKv.mget(keys); } async set( @@ -18,7 +27,9 @@ export class VercelKvAdapter implements KvAdapter { value: Data, opts?: Options, ) { - const response = await this.adapter.set(key, value, opts); + await this.memoryKv.set(key, value, opts); + + const response = await this.vercelKv.set(key, value, opts); if (response === 'OK') { return null;