diff --git a/packages/cloudflare-worker-mock/src/index.ts b/packages/cloudflare-worker-mock/src/index.ts index 6eb6534..665bbb7 100644 --- a/packages/cloudflare-worker-mock/src/index.ts +++ b/packages/cloudflare-worker-mock/src/index.ts @@ -96,9 +96,13 @@ export function makeCloudflareWorkerKVEnv( return Promise.resolve(undefined); }, list( - _prefix: string, - _limit: number, - _cursor: string, + _params: + | { + prefix?: string | undefined; + limit?: number | undefined; + cursor?: string | undefined; + } + | undefined, ): Promise { return Promise.resolve({ cursor: '1234567890', diff --git a/packages/types-cloudflare-worker/src/global.ts b/packages/types-cloudflare-worker/src/global.ts index 62b59a0..658e38a 100644 --- a/packages/types-cloudflare-worker/src/global.ts +++ b/packages/types-cloudflare-worker/src/global.ts @@ -665,11 +665,11 @@ export interface CloudflareWorkerKV { * cursor: "6Ck1la0VxJ0djhidm1MdX2FyD" * } */ - list( - prefix?: string, - limit?: number, - cursor?: string, - ): Promise; + list(params?: { + prefix?: string; + limit?: number; + cursor?: string; + }): Promise; } /** diff --git a/src/helloworkerclass.ts b/src/helloworkerclass.ts index cfd587d..997f2ef 100644 --- a/src/helloworkerclass.ts +++ b/src/helloworkerclass.ts @@ -60,9 +60,10 @@ export class HelloWorkerClass { const country = request.cf.country; countryCodeKV.put(country, '!', { expiration: 100 }); const countryCode = await countryCodeKV.get(country); + const countryList = await countryCodeKV.list({ prefix: 'countries' }); response = new Response( - `${body} ${request.cf.country} ${countryCode}!`, + `${body} ${request.cf.country} ${countryCode} ${countryList.keys[0].name}!`, this.responseInit, ); } diff --git a/test/helloworker.test.ts b/test/helloworker.test.ts index 2a448f1..ca1bac4 100644 --- a/test/helloworker.test.ts +++ b/test/helloworker.test.ts @@ -44,6 +44,7 @@ limitations under the License. import { CloudflareWorkerGlobalScope, CloudflareWorkerKVOptions, + CloudflareWorkerKVList, } from 'types-cloudflare-worker'; declare var self: CloudflareWorkerGlobalScope; @@ -82,7 +83,7 @@ describe('helloworker', () => { return Promise.resolve(undefined); }; - // Setup mock responses for the KV put() and get(). + // Setup mock responses for the KV put(), get(), and list(). let putKVCalled = false; countryCodeKV.put = ( _key: string, @@ -102,6 +103,28 @@ describe('helloworker', () => { return Promise.resolve('+1'); }; + let listKVCalled = false; + countryCodeKV.list = ( + params: + | { + prefix?: string; + limit?: number; + cursor?: string; + } + | undefined, + ): Promise => { + listKVCalled = true; + let prefix = 'empty'; + if (params) { + prefix = params.prefix || 'missing'; + } + return Promise.resolve({ + keys: [{ name: prefix, expiration: 1234 }], + list_complete: false, + cursor: 'CursorID', + }); + }; + const request = makeCloudflareWorkerRequest('/path', { cf: { colo: 'SFO', @@ -115,9 +138,10 @@ describe('helloworker', () => { expect(fetchMock).toBeCalledTimes(1); expect(response.status).toBe(200); - expect(await response.text()).toBe('Hello US +1!'); + expect(await response.text()).toBe('Hello US +1 countries!'); expect(putCacheCalled).toBe(true); expect(putKVCalled).toBe(true); expect(getKVCalled).toBe(true); + expect(listKVCalled).toBe(true); }); });