UNPKG

5.44 kBTypeScriptView Raw
1export namespace KV {
2 type Metadata = Record<string, any>;
3 type Value = string | ReadableStream | ArrayBuffer;
4
5 type GetFormat = 'text' | 'json' | 'arrayBuffer' | 'stream';
6
7 type GetMetadata<T, M extends Metadata = Metadata> = {
8 value: T | null;
9 metadata: M | null;
10 }
11
12 interface KeyInfo<M extends Metadata = Metadata> {
13 name: string;
14 expiration?: number;
15 metadata?: M;
16 }
17
18 interface KeyList<M extends Metadata = Metadata> {
19 keys: KeyInfo<M>[];
20 list_complete: boolean;
21 cursor?: string;
22 }
23
24 namespace Options {
25 type List = {
26 prefix?: string;
27 cursor?: string;
28 limit?: number;
29 }
30
31 type Get<T extends GetFormat = GetFormat> = {
32 type: T;
33 cacheTtl?: number;
34 }
35
36 type Put<M extends Metadata = Metadata> = {
37 expiration?: number;
38 expirationTtl?: number;
39 metadata?: M;
40 }
41 }
42
43 interface Namespace {
44 get<T>(key: string, options: 'json' | Options.Get<'json'>): Promise<T|null>;
45 get<T extends ReadableStream>(key: string, options: 'stream' | Options.Get<'stream'>): Promise<T|null>;
46 get<T extends ArrayBuffer>(key: string, options: 'arrayBuffer' | Options.Get<'arrayBuffer'>): Promise<T|null>;
47 get<T extends string>(key: string, options?: 'text' | Options.Get<'text'>): Promise<T|null>;
48
49 getWithMetadata<T, M extends Metadata>(key: string, options: 'json' | Options.Get<'json'>): Promise<GetMetadata<T, M>>;
50 getWithMetadata<T extends ReadableStream, M extends Metadata>(key: string, options: 'stream' | Options.Get<'stream'>): Promise<GetMetadata<T, M>>;
51 getWithMetadata<T extends ArrayBuffer, M extends Metadata>(key: string, options: 'arrayBuffer' | Options.Get<'arrayBuffer'>): Promise<GetMetadata<T, M>>;
52 getWithMetadata<T extends string, M extends Metadata>(key: string, options?: 'text' | Options.Get<'text'>): Promise<GetMetadata<T, M>>;
53
54 put<M extends Metadata>(key: string, value: Value, options?: Options.Put<M>): Promise<void>;
55 list<M extends Metadata>(options?: Options.List): Promise<KeyList<M>>;
56 delete(key: string): Promise<void>;
57 }
58}
59
60export declare class Database<Models, Identifiers extends Record<keyof Models, string> = { [P in keyof Models]: string}> {
61 constructor(binding: KV.Namespace);
62 get<K extends keyof Models>(type: K, uid: Identifiers[K], options: Options.Read & { metadata: true }): Promise<KV.GetMetadata<Models[K]>>;
63 get<K extends keyof Models>(type: K, uid: Identifiers[K], options?: KV.GetFormat | (Options.Read & { metadata?: false })): Promise<Models[K] | null>;
64
65 put<K extends keyof Models>(type: K, uid: Identifiers[K], value: Models[K], options?: Options.Write): Promise<boolean>;
66 del<K extends keyof Models>(type: K, uid: Identifiers[K]): Promise<boolean>;
67}
68
69// Custom method options
70export namespace Options {
71 type Read<T extends KV.GetFormat = KV.GetFormat> = KV.Options.Get<T> & { metadata?: boolean };
72 type Write<M extends KV.Metadata = KV.Metadata> = KV.Options.Put<M> & { toJSON?: boolean };
73 type List = KV.Options.List & { metadata?: boolean };
74 type Paginate = {
75 page?: number;
76 limit?: number;
77 prefix?: string;
78 metadata?: boolean;
79 }
80}
81
82// Get item value with metadata
83export function read<T extends ArrayBuffer, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, options: Options.Read<'arrayBuffer'> & { metadata: true }): Promise<KV.GetMetadata<T, M>>;
84export function read<T extends ReadableStream, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, options: Options.Read<'stream'> & { metadata: true }): Promise<KV.GetMetadata<T, M>>;
85export function read<T extends string, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, options: Options.Read<'text'> & { metadata: true }): Promise<KV.GetMetadata<T, M>>;
86export function read<T, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, options: Options.Read<'json'> & { metadata: true }): Promise<KV.GetMetadata<T, M>>;
87
88// Get raw item value (no metadata)
89export function read<T extends ArrayBuffer>(binding: KV.Namespace, key: string, options: 'arrayBuffer' | Options.Read<'arrayBuffer'>): Promise<T|null>;
90export function read<T extends ReadableStream>(binding: KV.Namespace, key: string, options: 'stream' | Options.Read<'stream'>): Promise<T|null>;
91export function read<T extends string>(binding: KV.Namespace, key: string, options: 'text' | Options.Read<'text'>): Promise<T|null>;
92export function read<T>(binding: KV.Namespace, key: string, options?: 'json' | Options.Read<'json'>): Promise<T|null>;
93
94export function write<T, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, value: T, options?: Options.Write<M>): Promise<boolean>;
95export function remove(binding: KV.Namespace, key: string): Promise<boolean>;
96
97export function list<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.List & { metadata: true }): AsyncGenerator<{ done: boolean; keys: KV.KeyInfo<M>[] }>;
98export function list<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.List): AsyncGenerator<{ done: boolean; keys: string[] }>;
99
100export function paginate<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.Paginate & { metadata: true }): Promise<KV.KeyInfo<M>[]>;
101export function paginate<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.Paginate & { metadata?: false }): Promise<string[]>;
102
103export function until<X extends string>(
104 toMake: () => X,
105 toSearch: (val: X) => Promise<unknown | false>
106): Promise<X>;