1 | export 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 |
|
60 | export 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
|
70 | export 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 |
|
83 | export 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>>;
|
84 | export 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>>;
|
85 | export 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>>;
|
86 | export 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 |
|
89 | export function read<T extends ArrayBuffer>(binding: KV.Namespace, key: string, options: 'arrayBuffer' | Options.Read<'arrayBuffer'>): Promise<T|null>;
|
90 | export function read<T extends ReadableStream>(binding: KV.Namespace, key: string, options: 'stream' | Options.Read<'stream'>): Promise<T|null>;
|
91 | export function read<T extends string>(binding: KV.Namespace, key: string, options: 'text' | Options.Read<'text'>): Promise<T|null>;
|
92 | export function read<T>(binding: KV.Namespace, key: string, options?: 'json' | Options.Read<'json'>): Promise<T|null>;
|
93 |
|
94 | export function write<T, M extends KV.Metadata = KV.Metadata>(binding: KV.Namespace, key: string, value: T, options?: Options.Write<M>): Promise<boolean>;
|
95 | export function remove(binding: KV.Namespace, key: string): Promise<boolean>;
|
96 |
|
97 | export function list<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.List & { metadata: true }): AsyncGenerator<{ done: boolean; keys: KV.KeyInfo<M>[] }>;
|
98 | export function list<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.List): AsyncGenerator<{ done: boolean; keys: string[] }>;
|
99 |
|
100 | export function paginate<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.Paginate & { metadata: true }): Promise<KV.KeyInfo<M>[]>;
|
101 | export function paginate<M extends KV.Metadata>(binding: KV.Namespace, options?: Options.Paginate & { metadata?: false }): Promise<string[]>;
|
102 |
|
103 | export function until<X extends string>(
|
104 | toMake: () => X,
|
105 | toSearch: (val: X) => Promise<unknown | false>
|
106 | ): Promise<X>;
|