1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | import { LoDashStatic, ObjectChain } from "lodash";
|
9 | declare module "lodash" {
|
10 | interface ObjectChain<T> {
|
11 | |
12 |
|
13 |
|
14 | write(): T & Promise<T>;
|
15 | }
|
16 | interface PrimitiveChain<T> {
|
17 | write(): T & Promise<T>;
|
18 | }
|
19 | interface CollectionChain<T> {
|
20 | write(): ArrayLike<T> & Promise<ArrayLike<T>>;
|
21 | }
|
22 | interface FunctionChain<T> {
|
23 | write(): T & Promise<T>;
|
24 | }
|
25 | interface StringChain {
|
26 | write(): string & Promise<string>;
|
27 | }
|
28 | }
|
29 |
|
30 | declare let Lowdb: Lowdb.lowdb;
|
31 | export = Lowdb;
|
32 |
|
33 | declare namespace Lowdb {
|
34 | interface AdapterOptions<SchemaT = any> {
|
35 | defaultValue?: SchemaT | undefined;
|
36 | serialize?: ((data: SchemaT) => string) | undefined;
|
37 | deserialize?: ((serializedData: string) => SchemaT) | undefined;
|
38 | }
|
39 |
|
40 | interface BaseAdapter<SchemaT = any> extends AdapterOptions<SchemaT> {
|
41 | readonly "@@reference": SchemaT;
|
42 | new <SchemaT = any>(
|
43 | source: string,
|
44 | options?: AdapterOptions<SchemaT>
|
45 | ): BaseAdapter<SchemaT>;
|
46 | source: string;
|
47 | }
|
48 |
|
49 | interface AdapterSync<SchemaT = any> extends BaseAdapter<SchemaT> {
|
50 | new <SchemaT = any>(
|
51 | source: string,
|
52 | options?: AdapterOptions<SchemaT>
|
53 | ): AdapterSync<SchemaT>;
|
54 | write(state: object): void;
|
55 | }
|
56 |
|
57 | interface AdapterAsync<SchemaT = any> extends BaseAdapter<SchemaT> {
|
58 | new <SchemaT = any>(
|
59 | source: string,
|
60 | options?: AdapterOptions<SchemaT>
|
61 | ): AdapterAsync<SchemaT>;
|
62 | write(state: object): Promise<void>;
|
63 | }
|
64 |
|
65 | interface LowdbBase<SchemaT> {
|
66 | getState: () => SchemaT;
|
67 | setState: (state: SchemaT) => this;
|
68 | }
|
69 |
|
70 | interface LowdbSync<SchemaT> extends LowdbBase<SchemaT>, ObjectChain<SchemaT> {
|
71 | _: LoDashStatic;
|
72 | read: () => this;
|
73 | |
74 |
|
75 |
|
76 | write<T = void>(returnValue?: T): T & Promise<T>;
|
77 | }
|
78 |
|
79 | interface LowdbAsync<SchemaT> extends LowdbBase<SchemaT>, ObjectChain<SchemaT> {
|
80 | _: LoDashStatic;
|
81 | read: () => Promise<this>;
|
82 | |
83 |
|
84 |
|
85 | write<T = void>(returnValue?: T): T & Promise<T>;
|
86 | }
|
87 |
|
88 | interface LowdbFpSync<SchemaT> extends LowdbBase<SchemaT> {
|
89 | |
90 |
|
91 |
|
92 | write<T = void>(returnValue?: T): T;
|
93 | |
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 | <TKey extends keyof SchemaT>(
|
103 | path: TKey | [TKey],
|
104 | defaultValue?: SchemaT[TKey]
|
105 | ): FpReturnSync<SchemaT[TKey]>;
|
106 | <TKey extends keyof SchemaT, TSubKey extends keyof SchemaT[TKey]>(
|
107 | path: [TKey, TSubKey],
|
108 | defaultValue?: SchemaT[TKey][TSubKey]
|
109 | ): FpReturnSync<SchemaT[TKey][TSubKey]>;
|
110 | <
|
111 | TKey extends keyof SchemaT,
|
112 | TSubKey extends keyof SchemaT[TKey],
|
113 | TSubKey2 extends keyof SchemaT[TKey][TSubKey]
|
114 | >(
|
115 | path: [TKey, TSubKey, TSubKey2],
|
116 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2]
|
117 | ): FpReturnSync<SchemaT[TKey][TSubKey][TSubKey2]>;
|
118 | <
|
119 | TKey extends keyof SchemaT,
|
120 | TSubKey extends keyof SchemaT[TKey],
|
121 | TSubKey2 extends keyof SchemaT[TKey][TSubKey],
|
122 | TSubKey3 extends keyof SchemaT[TKey][TSubKey][TSubKey2]
|
123 | >(
|
124 | path: [TKey, TSubKey, TSubKey2, TSubKey3],
|
125 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]
|
126 | ): FpReturnSync<SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]>;
|
127 | <
|
128 | TKey extends keyof SchemaT,
|
129 | TSubKey extends keyof SchemaT[TKey],
|
130 | TSubKey2 extends keyof SchemaT[TKey][TSubKey],
|
131 | TSubKey3 extends keyof SchemaT[TKey][TSubKey][TSubKey2],
|
132 | TSubKey4 extends keyof SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]
|
133 | >(
|
134 | path: [TKey, TSubKey, TSubKey2, TSubKey3, TSubKey4],
|
135 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2][TSubKey3][TSubKey4]
|
136 | ): FpReturnSync<SchemaT[TKey][TSubKey][TSubKey2][TSubKey3][TSubKey4]>;
|
137 | <T = any>(path: string | string[], defaultValue?: T): FpReturnSync<T>;
|
138 | }
|
139 |
|
140 | interface LowdbFpAsync<SchemaT> extends LowdbBase<SchemaT> {
|
141 | |
142 |
|
143 |
|
144 | write<T = void>(returnValue?: T): Promise<T>;
|
145 | |
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 | <TKey extends keyof SchemaT>(
|
155 | path: TKey | [TKey],
|
156 | defaultValue?: SchemaT[TKey]
|
157 | ): FpReturnAsync<SchemaT[TKey]>;
|
158 | <TKey extends keyof SchemaT, TSubKey extends keyof SchemaT[TKey]>(
|
159 | path: [TKey, TSubKey],
|
160 | defaultValue?: SchemaT[TKey][TSubKey]
|
161 | ): FpReturnAsync<SchemaT[TKey][TSubKey]>;
|
162 | <
|
163 | TKey extends keyof SchemaT,
|
164 | TSubKey extends keyof SchemaT[TKey],
|
165 | TSubKey2 extends keyof SchemaT[TKey][TSubKey]
|
166 | >(
|
167 | path: [TKey, TSubKey, TSubKey2],
|
168 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2]
|
169 | ): FpReturnAsync<SchemaT[TKey][TSubKey][TSubKey2]>;
|
170 | <
|
171 | TKey extends keyof SchemaT,
|
172 | TSubKey extends keyof SchemaT[TKey],
|
173 | TSubKey2 extends keyof SchemaT[TKey][TSubKey],
|
174 | TSubKey3 extends keyof SchemaT[TKey][TSubKey][TSubKey2]
|
175 | >(
|
176 | path: [TKey, TSubKey, TSubKey2, TSubKey3],
|
177 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]
|
178 | ): FpReturnAsync<SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]>;
|
179 | <
|
180 | TKey extends keyof SchemaT,
|
181 | TSubKey extends keyof SchemaT[TKey],
|
182 | TSubKey2 extends keyof SchemaT[TKey][TSubKey],
|
183 | TSubKey3 extends keyof SchemaT[TKey][TSubKey][TSubKey2],
|
184 | TSubKey4 extends keyof SchemaT[TKey][TSubKey][TSubKey2][TSubKey3]
|
185 | >(
|
186 | path: [TKey, TSubKey, TSubKey2, TSubKey3, TSubKey4],
|
187 | defaultValue?: SchemaT[TKey][TSubKey][TSubKey2][TSubKey3][TSubKey4]
|
188 | ): FpReturnAsync<SchemaT[TKey][TSubKey][TSubKey2][TSubKey3][TSubKey4]>;
|
189 | <T = any>(path: string | string[], defaultValue?: T): FpReturnAsync<T>;
|
190 | }
|
191 |
|
192 | interface FpReturnBase<PathT> {
|
193 | |
194 |
|
195 |
|
196 |
|
197 |
|
198 | <R1>(f1: (a1: PathT) => R1): R1;
|
199 | // <R1>(f1: [(a1: PathT) => R1]): R1;
|
200 | <R1, R2>(f1: [(a1: PathT) => R1, (a: R1) => R2]): R2;
|
201 | <R1, R2, R3>(f1: [(a1: PathT) => R1, (a: R1) => R2, (a: R2) => R3]): R3;
|
202 | <R1, R2, R3, R4>(
|
203 | f1: [(a1: PathT) => R1, (a: R1) => R2, (a: R2) => R3, (a: R3) => R4]
|
204 | ): R4;
|
205 | <R1, R2, R3, R4, R5>(
|
206 | f1: [
|
207 | (a1: PathT) => R1,
|
208 | (a: R1) => R2,
|
209 | (a: R2) => R3,
|
210 | (a: R3) => R4,
|
211 | (a: R4) => R5
|
212 | ]
|
213 | ): R5;
|
214 | <R1, R2, R3, R4, R5, R6>(
|
215 | f1: [
|
216 | (a1: PathT) => R1,
|
217 | (a: R1) => R2,
|
218 | (a: R2) => R3,
|
219 | (a: R3) => R4,
|
220 | (a: R4) => R5,
|
221 | (a: R5) => R6
|
222 | ]
|
223 | ): R6;
|
224 | <R1, R2, R3, R4, R5, R6, R7>(
|
225 | f1: [
|
226 | (a1: PathT) => R1,
|
227 | (a: R1) => R2,
|
228 | (a: R2) => R3,
|
229 | (a: R3) => R4,
|
230 | (a: R4) => R5,
|
231 | (a: R5) => R6,
|
232 | (a: R6) => R7
|
233 | ]
|
234 | ): R7;
|
235 | (funcs: Array<(a: any) => any>): any;
|
236 | }
|
237 | interface FpReturnSync<PathT> extends FpReturnBase<PathT> {
|
238 | /**
|
239 | * @description Writes the change to the database, based on the callback's return value.
|
240 | * @example
|
241 | * ```js
|
242 | * posts.write((allPosts) => [...allPosts, {title: 'Yup!'}])
|
243 | * ```
|
244 | */
|
245 | write<R1 extends PathT>(f1: (a1: PathT) => R1): R1;
|
246 | }
|
247 | interface FpReturnAsync<PathT> extends FpReturnBase<PathT> {
|
248 | /**
|
249 | * @description Writes the change to the database, based on the callback's return value.
|
250 | * @example
|
251 | * ```js
|
252 | * posts.write((allPosts) => [...allPosts, {title: 'Yup!'}])
|
253 | * ```
|
254 | */
|
255 | write<R1 extends PathT>(f1: (a1: PathT) => R1): Promise<R1>;
|
256 | }
|
257 |
|
258 | interface lowdb {
|
259 | <AdapterT extends AdapterAsync>(adapter: AdapterT): Promise<LowdbAsync<AdapterT[ReferenceProperty]>>;
|
260 | <AdapterT extends AdapterSync>(adapter: AdapterT): LowdbSync<AdapterT[ReferenceProperty]>;
|
261 | }
|
262 |
|
263 | interface lowdbFp {
|
264 | <AdapterT extends AdapterAsync>(adapter: AdapterT): Promise<LowdbFpAsync<AdapterT[ReferenceProperty]>>;
|
265 | <AdapterT extends AdapterSync>(adapter: AdapterT): LowdbFpSync<AdapterT[ReferenceProperty]>;
|
266 | }
|
267 | }
|
268 |
|
269 | type ReferenceProperty = "@@reference";
|
270 |
|
\ | No newline at end of file |