imodel 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.mts ADDED
@@ -0,0 +1,2179 @@
1
+ /*!
2
+ * imodel v0.1.0
3
+ * (c) 2019-2025 undefined
4
+ * @license undefined
5
+ */
6
+
7
+ declare const now: unique symbol;
8
+ declare const increment$1: unique symbol;
9
+ declare const decrement$1: unique symbol;
10
+ declare const multiply$1: unique symbol;
11
+ declare const divide$1: unique symbol;
12
+
13
+ declare const values_now: typeof now;
14
+ declare namespace values {
15
+ export { decrement$1 as decrement, divide$1 as divide, increment$1 as increment, multiply$1 as multiply, values_now as now };
16
+ }
17
+
18
+ interface Environment<T extends object> {
19
+ transaction: T | null;
20
+ isDevelopment: boolean;
21
+ names?: Record<string, string> | null;
22
+ getName(table: string): string;
23
+ values: typeof values;
24
+ }
25
+
26
+ /**
27
+ * @param {WhereValue[]?} [items]
28
+ * @returns {WhereValue[]?}
29
+ */
30
+ declare function toNot(items?: WhereValue[] | null): WhereValue[] | null;
31
+ type WhereLike = {
32
+ toWhereValue(): WhereValue[][];
33
+ };
34
+ type Wheres = WhereLike | Record<string, any> | (WhereLike | Record<string, any>)[];
35
+ type WhereItem = {
36
+ where?: null | undefined;
37
+ or?: null | undefined;
38
+ field: string | {
39
+ table?: string;
40
+ field: string;
41
+ } | (string | {
42
+ table?: string;
43
+ field: string;
44
+ })[];
45
+ value: any;
46
+ not?: boolean | undefined;
47
+ operator?: string | null | undefined;
48
+ };
49
+ type WhereRaw = {
50
+ field?: null | undefined;
51
+ or?: null | undefined;
52
+ where: readonly string[];
53
+ values: readonly any[];
54
+ not?: boolean | undefined;
55
+ };
56
+ type WhereOr = {
57
+ where?: null | undefined;
58
+ field?: null | undefined;
59
+ or: WhereValue[][];
60
+ not?: boolean | undefined;
61
+ };
62
+ type WhereValue = WhereItem | WhereRaw | WhereOr;
63
+ declare class Where {
64
+ /**
65
+ * @overload
66
+ * @param {Wheres} matches
67
+ * @returns {WhereValue[]?}
68
+ */
69
+ static parse(matches: Wheres): WhereValue[] | null;
70
+ /**
71
+ * @overload
72
+ * @param {string | string[]} field
73
+ * @param {any} value
74
+ * @returns {WhereValue[]?}
75
+ */
76
+ static parse(field: string | string[], value: any): WhereValue[] | null;
77
+ /**
78
+ * @overload
79
+ * @param {string | string[]} field
80
+ * @param {string} operator
81
+ * @param {any} value
82
+ * @param {boolean} [not]
83
+ * @returns {WhereValue[]?}
84
+ */
85
+ static parse(field: string | string[], operator: string, value: any, not?: boolean | undefined): WhereValue[] | null;
86
+ /**
87
+ * @overload
88
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
89
+ * @returns {WhereValue[]?}
90
+ */
91
+ static parse(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): WhereValue[] | null;
92
+ /**
93
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
94
+ * @returns {WhereValue[]?}
95
+ */
96
+ static parseParams(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): WhereValue[] | null;
97
+ /**
98
+ * @overload
99
+ * @param {Wheres} matches
100
+ * @returns {Where}
101
+ */
102
+ static and(matches: Wheres): Where;
103
+ /**
104
+ *
105
+ * @overload
106
+ * @param {TemplateStringsArray} where
107
+ * @param {...any} values
108
+ * @returns {Where}
109
+ */
110
+ static and(where: TemplateStringsArray, ...values: any[]): Where;
111
+ /**
112
+ * @overload
113
+ * @param {string} field
114
+ * @param {any} value
115
+ * @returns {Where}
116
+ */
117
+ static and(field: string, value: any): Where;
118
+ /**
119
+ * @overload
120
+ * @param {string[]} field
121
+ * @param {any[]} value
122
+ * @returns {Where}
123
+ */
124
+ static and(field: string[], value: any[]): Where;
125
+ /**
126
+ * @overload
127
+ * @param {string} field
128
+ * @param {string} operator
129
+ * @param {any} value
130
+ * @param {boolean} [not]
131
+ * @returns {Where}
132
+ */
133
+ static and(field: string, operator: string, value: any, not?: boolean | undefined): Where;
134
+ /**
135
+ * @overload
136
+ * @param {string[]} field
137
+ * @param {string} operator
138
+ * @param {any[]} value
139
+ * @param {boolean} [not]
140
+ * @returns {Where}
141
+ */
142
+ static and(field: string[], operator: string, value: any[], not?: boolean | undefined): Where;
143
+ /**
144
+ * @overload
145
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
146
+ * @returns {Where}
147
+ */
148
+ static and(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): Where;
149
+ /**
150
+ * @overload
151
+ * @param {Wheres} matches
152
+ * @returns {Where}
153
+ */
154
+ static or(matches: Wheres): Where;
155
+ /**
156
+ *
157
+ * @overload
158
+ * @param {TemplateStringsArray} where
159
+ * @param {...any} values
160
+ * @returns {Where}
161
+ */
162
+ static or(where: TemplateStringsArray, ...values: any[]): Where;
163
+ /**
164
+ * @overload
165
+ * @param {string} field
166
+ * @param {any} value
167
+ * @returns {Where}
168
+ */
169
+ static or(field: string, value: any): Where;
170
+ /**
171
+ * @overload
172
+ * @param {string[]} field
173
+ * @param {any[]} value
174
+ * @returns {Where}
175
+ */
176
+ static or(field: string[], value: any[]): Where;
177
+ /**
178
+ * @overload
179
+ * @param {string} field
180
+ * @param {string} operator
181
+ * @param {any} value
182
+ * @param {boolean} [not]
183
+ * @returns {Where}
184
+ */
185
+ static or(field: string, operator: string, value: any, not?: boolean | undefined): Where;
186
+ /**
187
+ * @overload
188
+ * @param {string[]} field
189
+ * @param {string} operator
190
+ * @param {any[]} value
191
+ * @param {boolean} [not]
192
+ * @returns {Where}
193
+ */
194
+ static or(field: string[], operator: string, value: any[], not?: boolean | undefined): Where;
195
+ /**
196
+ * @overload
197
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
198
+ * @returns {Where}
199
+ */
200
+ static or(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): Where;
201
+ /**
202
+ * @overload
203
+ * @param {Wheres} matches
204
+ * @returns {Where}
205
+ */
206
+ static not(matches: Wheres): Where;
207
+ /**
208
+ *
209
+ * @overload
210
+ * @param {TemplateStringsArray} where
211
+ * @param {...any} values
212
+ * @returns {Where}
213
+ */
214
+ static not(where: TemplateStringsArray, ...values: any[]): Where;
215
+ /**
216
+ * @overload
217
+ * @param {string} field
218
+ * @param {any} value
219
+ * @returns {Where}
220
+ */
221
+ static not(field: string, value: any): Where;
222
+ /**
223
+ * @overload
224
+ * @param {string[]} field
225
+ * @param {any[]} value
226
+ * @returns {Where}
227
+ */
228
+ static not(field: string[], value: any[]): Where;
229
+ /**
230
+ * @overload
231
+ * @param {string} field
232
+ * @param {string} operator
233
+ * @param {any} value
234
+ * @param {boolean} [not]
235
+ * @returns {Where}
236
+ */
237
+ static not(field: string, operator: string, value: any, not?: boolean | undefined): Where;
238
+ /**
239
+ * @overload
240
+ * @param {string[]} field
241
+ * @param {string} operator
242
+ * @param {any[]} value
243
+ * @param {boolean} [not]
244
+ * @returns {Where}
245
+ */
246
+ static not(field: string[], operator: string, value: any[], not?: boolean | undefined): Where;
247
+ /**
248
+ * @overload
249
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
250
+ * @returns {Where}
251
+ */
252
+ static not(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): Where;
253
+ /**
254
+ * @overload
255
+ * @param {Wheres} matches
256
+ * @returns {Where}
257
+ */
258
+ static orNot(matches: Wheres): Where;
259
+ /**
260
+ *
261
+ * @overload
262
+ * @param {TemplateStringsArray} where
263
+ * @param {...any} values
264
+ * @returns {Where}
265
+ */
266
+ static orNot(where: TemplateStringsArray, ...values: any[]): Where;
267
+ /**
268
+ * @overload
269
+ * @param {string} field
270
+ * @param {any} value
271
+ * @returns {Where}
272
+ */
273
+ static orNot(field: string, value: any): Where;
274
+ /**
275
+ * @overload
276
+ * @param {string[]} field
277
+ * @param {any[]} value
278
+ * @returns {Where}
279
+ */
280
+ static orNot(field: string[], value: any[]): Where;
281
+ /**
282
+ * @overload
283
+ * @param {string} field
284
+ * @param {string} operator
285
+ * @param {any} value
286
+ * @param {boolean} [not]
287
+ * @returns {Where}
288
+ */
289
+ static orNot(field: string, operator: string, value: any, not?: boolean | undefined): Where;
290
+ /**
291
+ * @overload
292
+ * @param {string[]} field
293
+ * @param {string} operator
294
+ * @param {any[]} value
295
+ * @param {boolean} [not]
296
+ * @returns {Where}
297
+ */
298
+ static orNot(field: string[], operator: string, value: any[], not?: boolean | undefined): Where;
299
+ /**
300
+ * @overload
301
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
302
+ * @returns {Where}
303
+ */
304
+ static orNot(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): Where;
305
+ toWhereValue(): WhereValue[][];
306
+ /**
307
+ * @overload
308
+ * @param {Wheres} matches
309
+ * @returns {this}
310
+ */
311
+ and(matches: Wheres): this;
312
+ /**
313
+ *
314
+ * @overload
315
+ * @param {TemplateStringsArray} where
316
+ * @param {...any} values
317
+ * @returns {this}
318
+ */
319
+ and(where: TemplateStringsArray, ...values: any[]): this;
320
+ /**
321
+ * @overload
322
+ * @param {string} field
323
+ * @param {any} value
324
+ * @returns {this}
325
+ */
326
+ and(field: string, value: any): this;
327
+ /**
328
+ * @overload
329
+ * @param {string[]} field
330
+ * @param {any[]} value
331
+ * @returns {this}
332
+ */
333
+ and(field: string[], value: any[]): this;
334
+ /**
335
+ * @overload
336
+ * @param {string} field
337
+ * @param {string} operator
338
+ * @param {any} value
339
+ * @param {boolean} [not]
340
+ * @returns {this}
341
+ */
342
+ and(field: string, operator: string, value: any, not?: boolean | undefined): this;
343
+ /**
344
+ * @overload
345
+ * @param {string[]} field
346
+ * @param {string} operator
347
+ * @param {any[]} value
348
+ * @param {boolean} [not]
349
+ * @returns {this}
350
+ */
351
+ and(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
352
+ /**
353
+ * @overload
354
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
355
+ * @returns {this}
356
+ */
357
+ and(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
358
+ /**
359
+ * @overload
360
+ * @param {Wheres} matches
361
+ * @returns {this}
362
+ */
363
+ or(matches: Wheres): this;
364
+ /**
365
+ *
366
+ * @overload
367
+ * @param {TemplateStringsArray} where
368
+ * @param {...any} values
369
+ * @returns {this}
370
+ */
371
+ or(where: TemplateStringsArray, ...values: any[]): this;
372
+ /**
373
+ * @overload
374
+ * @param {string} field
375
+ * @param {any} value
376
+ * @returns {this}
377
+ */
378
+ or(field: string, value: any): this;
379
+ /**
380
+ * @overload
381
+ * @param {string[]} field
382
+ * @param {any[]} value
383
+ * @returns {this}
384
+ */
385
+ or(field: string[], value: any[]): this;
386
+ /**
387
+ * @overload
388
+ * @param {string} field
389
+ * @param {string} operator
390
+ * @param {any} value
391
+ * @param {boolean} [not]
392
+ * @returns {this}
393
+ */
394
+ or(field: string, operator: string, value: any, not?: boolean | undefined): this;
395
+ /**
396
+ * @overload
397
+ * @param {string[]} field
398
+ * @param {string} operator
399
+ * @param {any[]} value
400
+ * @param {boolean} [not]
401
+ * @returns {this}
402
+ */
403
+ or(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
404
+ /**
405
+ * @overload
406
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
407
+ * @returns {this}
408
+ */
409
+ or(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
410
+ /**
411
+ * @overload
412
+ * @param {Wheres} matches
413
+ * @returns {this}
414
+ */
415
+ not(matches: Wheres): this;
416
+ /**
417
+ *
418
+ * @overload
419
+ * @param {TemplateStringsArray} where
420
+ * @param {...any} values
421
+ * @returns {this}
422
+ */
423
+ not(where: TemplateStringsArray, ...values: any[]): this;
424
+ /**
425
+ * @overload
426
+ * @param {string} field
427
+ * @param {any} value
428
+ * @returns {this}
429
+ */
430
+ not(field: string, value: any): this;
431
+ /**
432
+ * @overload
433
+ * @param {string[]} field
434
+ * @param {any[]} value
435
+ * @returns {this}
436
+ */
437
+ not(field: string[], value: any[]): this;
438
+ /**
439
+ * @overload
440
+ * @param {string} field
441
+ * @param {string} operator
442
+ * @param {any} value
443
+ * @param {boolean} [not]
444
+ * @returns {this}
445
+ */
446
+ not(field: string, operator: string, value: any, not?: boolean | undefined): this;
447
+ /**
448
+ * @overload
449
+ * @param {string[]} field
450
+ * @param {string} operator
451
+ * @param {any[]} value
452
+ * @param {boolean} [not]
453
+ * @returns {this}
454
+ */
455
+ not(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
456
+ /**
457
+ * @overload
458
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
459
+ * @returns {this}
460
+ */
461
+ not(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
462
+ /**
463
+ * @overload
464
+ * @param {Wheres} matches
465
+ * @returns {this}
466
+ */
467
+ orNot(matches: Wheres): this;
468
+ /**
469
+ *
470
+ * @overload
471
+ * @param {TemplateStringsArray} where
472
+ * @param {...any} values
473
+ * @returns {this}
474
+ */
475
+ orNot(where: TemplateStringsArray, ...values: any[]): this;
476
+ /**
477
+ * @overload
478
+ * @param {string} field
479
+ * @param {any} value
480
+ * @returns {this}
481
+ */
482
+ orNot(field: string, value: any): this;
483
+ /**
484
+ * @overload
485
+ * @param {string[]} field
486
+ * @param {any[]} value
487
+ * @returns {this}
488
+ */
489
+ orNot(field: string[], value: any[]): this;
490
+ /**
491
+ * @overload
492
+ * @param {string} field
493
+ * @param {string} operator
494
+ * @param {any} value
495
+ * @param {boolean} [not]
496
+ * @returns {this}
497
+ */
498
+ orNot(field: string, operator: string, value: any, not?: boolean | undefined): this;
499
+ /**
500
+ * @overload
501
+ * @param {string[]} field
502
+ * @param {string} operator
503
+ * @param {any[]} value
504
+ * @param {boolean} [not]
505
+ * @returns {this}
506
+ */
507
+ orNot(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
508
+ /**
509
+ * @overload
510
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
511
+ * @returns {this}
512
+ */
513
+ orNot(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
514
+ #private;
515
+ }
516
+
517
+ /** @typedef {SetValue.Increment | SetValue.Decrement | SetValue.Multiply | SetValue.Divide | string | number | bigint | boolean | null | typeof now} SetValue */
518
+ /** @typedef {{[values.increment]: number | bigint}} SetValue.Increment */
519
+ /** @typedef {{[values.decrement]: number | bigint}} SetValue.Decrement */
520
+ /** @typedef {{[values.multiply]: number | bigint}} SetValue.Multiply */
521
+ /** @typedef {{[values.divide]: number | bigint}} SetValue.Divide */
522
+ /**
523
+ * @param {number | bigint} value
524
+ * @returns {SetValue.Increment}
525
+ */
526
+ declare function increment(value: number | bigint): SetValue.Increment;
527
+ /**
528
+ * @param {number | bigint} value
529
+ * @returns {SetValue.Decrement}
530
+ */
531
+ declare function decrement(value: number | bigint): SetValue.Decrement;
532
+ /**
533
+ * @param {number | bigint} value
534
+ * @returns {SetValue.Multiply}
535
+ */
536
+ declare function multiply(value: number | bigint): SetValue.Multiply;
537
+ /**
538
+ * @param {number | bigint} value
539
+ * @returns {SetValue.Divide}
540
+ */
541
+ declare function divide(value: number | bigint): SetValue.Divide;
542
+
543
+ type SetValue = SetValue.Increment | SetValue.Decrement | SetValue.Multiply | SetValue.Divide | string | number | bigint | boolean | null | typeof now;
544
+ declare namespace SetValue {
545
+ type Increment = {
546
+ [increment$1]: number | bigint;
547
+ };
548
+ type Decrement = {
549
+ [decrement$1]: number | bigint;
550
+ };
551
+ type Multiply = {
552
+ [multiply$1]: number | bigint;
553
+ };
554
+ type Divide = {
555
+ [divide$1]: number | bigint;
556
+ };
557
+ }
558
+
559
+ interface VirtualTable<E extends object = object> {
560
+ insert(environment: Environment<E>, conn: IConnection<E>, table: string, fields: Fields<keyof FieldType>, data: object[], key: string[]): PromiseLike<any[]>;
561
+ update(environment: Environment<E>, conn: IConnection<E>, args: MatchArg, update: Record<string, SetValue>): PromiseLike<number>;
562
+ updateReturn(environment: Environment<E>, conn: IConnection<E>, args: MatchArg, update: Record<string, SetValue>, returning: string[]): PromiseLike<any[]>;
563
+ updateMany(environment: Environment<E>, conn: IConnection<E>, table: string, fields: Fields<keyof FieldType>, update: Record<string, any>, pKeys: string[], setKeys: string[], list: Record<string, any>[], where: WhereValue[]): PromiseLike<number>;
564
+ updateManyReturn(environment: Environment<E>, conn: IConnection<E>, table: string, fields: Fields<keyof FieldType>, update: Record<string, any>, pKeys: string[], setKeys: string[], list: Record<string, any>[], where: WhereValue[], returning: string[]): PromiseLike<any[]>;
565
+ count(environment: Environment<E>, conn: IConnection<E>, argv: CountArg): PromiseLike<number>;
566
+ select(environment: Environment<E>, conn: IConnection<E>, argv: SelectArg): PromiseLike<any[]>;
567
+ delete(environment: Environment<E>, conn: IConnection<E>, argv: MatchArg): PromiseLike<number>;
568
+ deleteReturn(environment: Environment<E>, conn: IConnection<E>, argv: MatchArg, returning: string[]): PromiseLike<any[]>;
569
+ }
570
+
571
+ /** 字段基本类型 */
572
+ interface FieldType {
573
+ /** 基本的 Id 类型,具体数据库实现由数据库决定 */
574
+ id: string;
575
+ /** 引用类型,具体数据库实现由数据库决定,需要与 id 类型一致 */
576
+ rid: string;
577
+ /** 弱引用类型,需要考虑跨数据库引擎实现 */
578
+ ref: string;
579
+ i16: number;
580
+ i32: number;
581
+ i64: bigint;
582
+ u16: number;
583
+ u32: number;
584
+ u64: bigint;
585
+ f32: number;
586
+ f64: number;
587
+ decimal: number;
588
+ numeric: number;
589
+ money: number;
590
+ /** 文本类型(含字符串类型) */
591
+ string: string;
592
+ text: string;
593
+ char: string;
594
+ uuid: string;
595
+ ip: string;
596
+ ipv4: string;
597
+ ipv6: string;
598
+ mac48: string;
599
+ mac64: string;
600
+ /** 布尔型 */
601
+ bool: boolean;
602
+ /** 二进制类型 */
603
+ binary: ArrayBuffer | ArrayBufferView;
604
+ /** 日期类型 */
605
+ date: Date;
606
+ /** 时间类型 */
607
+ time: Date;
608
+ /** 时间类型 */
609
+ timetz: Date;
610
+ /** 日期时间类型 */
611
+ datetime: Date;
612
+ /** 时间戳类型 */
613
+ timestamp: Date;
614
+ interval: number | bigint;
615
+ /** 对象类型 */
616
+ object: Record<string, unknown>;
617
+ /** JSON 类型 */
618
+ json: any;
619
+ }
620
+ interface Constraint {
621
+ noField?: boolean;
622
+ field?: string;
623
+ value?: any;
624
+ }
625
+ type MainFieldType = keyof FieldType | TableDefine;
626
+ type ToFieldType<T> = T extends keyof FieldType ? FieldType[T] : unknown;
627
+ interface FieldDefineOption {
628
+ /** 精确度 */
629
+ precision?: number;
630
+ /** 缩放比 */
631
+ scale?: number;
632
+ /** 占用空间大小 */
633
+ size?: number;
634
+ /** 是否为主键 */
635
+ primary?: number | boolean;
636
+ /** 序列字段 */
637
+ serial?: boolean;
638
+ /** 唯一索引? */
639
+ unique?: boolean;
640
+ /** 索引信息 */
641
+ index?: string | boolean;
642
+ /** 创建时,作为时间戳 */
643
+ timestampCreating?: boolean;
644
+ /** 更新时,作为时间戳 */
645
+ timestampUpdating?: boolean;
646
+ /** 伪删除时,作为时间戳 */
647
+ timestampDeleting?: boolean;
648
+ /** 是否为固定值 */
649
+ immutable?: boolean;
650
+ /** 文本查询 */
651
+ text?: boolean;
652
+ /** 排序顺序,绝对值表示在排序列表中的顺序,负数表示逆序排序, 0 表示不排序 */
653
+ sort?: number;
654
+ }
655
+ /** 字段类型信息 */
656
+ interface FieldDefine<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> extends FieldTypeDefine<T, A, N>, FieldDefineOption {
657
+ /** 默认值 */
658
+ default?: ToType<T, A, N>;
659
+ }
660
+ /** 字段类型信息 */
661
+ interface FieldDefine<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> extends FieldTypeDefine<T, A, N>, FieldDefineOption {
662
+ /** 默认值 */
663
+ default?: ToType<T, A, N>;
664
+ constraints?: Record<string, Constraint>;
665
+ }
666
+ interface FieldTypeDefine<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> {
667
+ /** 字段的基本类型 */
668
+ type: T;
669
+ /** 是否可为空 */
670
+ nullable: N;
671
+ /** 是否为数组 */
672
+ array: A;
673
+ }
674
+ type ToType<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> = N extends false ? A extends false ? ToFieldType<T> : A extends true ? ToFieldType<T>[] : ToFieldType<T> | ToFieldType<T>[] : A extends false ? ToFieldType<T> | null : A extends true ? ToFieldType<T>[] | null : ToFieldType<T> | ToFieldType<T>[] | null;
675
+ type FieldDefineType<F extends FieldTypeDefine> = F extends FieldTypeDefine<infer T, infer A, infer N> ? ToType<T, A, N> : never;
676
+ type Fields<T extends MainFieldType = MainFieldType> = Record<string, FieldDefine<T>>;
677
+ type FieldValue<T extends Fields> = {
678
+ [K in keyof T]: FieldDefineType<T[K]>;
679
+ };
680
+ interface IndexOptions {
681
+ unique?: boolean;
682
+ name?: string;
683
+ include?: string[];
684
+ }
685
+ interface IndexInfo extends IndexOptions {
686
+ fields: string[];
687
+ }
688
+ interface Index extends IndexInfo {
689
+ name: string;
690
+ }
691
+ interface TableDefine<T extends Fields = Fields> {
692
+ /** 字段信息 */
693
+ readonly fields: T;
694
+ /** 表名 */
695
+ readonly table?: string | VirtualTable;
696
+ /** 是否启用软删除 */
697
+ readonly pseudo?: string;
698
+ /** 索引信息 */
699
+ readonly indexes?: readonly IndexInfo[];
700
+ }
701
+
702
+ type deleted = typeof deleted;
703
+ declare const deleted: unique symbol;
704
+ type undeleted = typeof undeleted;
705
+ declare const undeleted: unique symbol;
706
+ type withDeleted = typeof withDeleted;
707
+ declare const withDeleted: unique symbol;
708
+ type FindRange = deleted | undeleted | withDeleted;
709
+
710
+ type Select = {
711
+ field: string;
712
+ table?: string;
713
+ fn?: string;
714
+ };
715
+ declare namespace Select {
716
+ type Param = boolean | string | Select;
717
+ }
718
+ type JoinType = 'left' | 'right' | 'inner' | 'full';
719
+ interface Join<T extends TableDefine = TableDefine> {
720
+ type: JoinType;
721
+ table: T;
722
+ /** 关联项目 { [this table field]: base table field } */
723
+ on: {
724
+ [k: string]: string;
725
+ };
726
+ }
727
+ interface Options {
728
+ range?: FindRange;
729
+ select?: Record<string, Select> | null;
730
+ /** 排序配置,true 表示逆序 */
731
+ sort?: [field: string, desc: boolean][];
732
+ /** 匹配信息 */
733
+ where: WhereValue[];
734
+ /** 偏移量 */
735
+ offset?: number;
736
+ /** 最大返回数 */
737
+ limit?: number;
738
+ update?: Record<string, SetValue>;
739
+ alias?: string;
740
+ }
741
+ interface Queryable<T extends Fields = Fields> extends TableDefine<T> {
742
+ readonly options: Options;
743
+ }
744
+
745
+ interface ColumnOptions<T = unknown> extends FieldDefineOption {
746
+ /**
747
+ * 是否可为空
748
+ * @default true
749
+ */
750
+ nullable?: boolean;
751
+ /** 是否为数组格式 */
752
+ array?: boolean;
753
+ /** 默认值 */
754
+ default?: T extends never ? never : T;
755
+ }
756
+ interface Column<T> extends ColumnOptions<T> {
757
+ name: string;
758
+ type: string;
759
+ }
760
+
761
+ /** 特性支持情况 */
762
+ interface Support {
763
+ /** 是否支持 sql 查询 */
764
+ sql?: boolean;
765
+ /** 是否支持数组类型 */
766
+ array?: boolean;
767
+ /** 是否支持对象存储 */
768
+ object?: boolean;
769
+ /** 是否支持递归查询 */
770
+ recursive?: boolean;
771
+ [key: string]: undefined | boolean;
772
+ }
773
+
774
+ type MaybePromise<T> = PromiseLike<T> | T;
775
+
776
+ declare const Destroy: unique symbol;
777
+ interface Destroy {
778
+ [Destroy](connection: Connection, run: (data: any) => Promise<object | null>, table: TableDefine<Fields<MainFieldType>>): PromiseLike<this | null>;
779
+ }
780
+ declare const PseudoDestroy: unique symbol;
781
+ interface PseudoDestroy {
782
+ [PseudoDestroy](connection: Connection, update: Record<string, SetValue>, run: (data: any) => Promise<object | null>, table: TableDefine<Fields<MainFieldType>>): PromiseLike<this | null>;
783
+ }
784
+ declare const Save: unique symbol;
785
+ interface Save {
786
+ [Save](connection: Connection, run: (data: any, newData?: any) => Promise<object | null>, table: TableDefine): PromiseLike<this | null>;
787
+ }
788
+ declare const Create: unique symbol;
789
+ interface Create<T = unknown> {
790
+ [Create](connection: Connection, data: object, run: (data: any) => Promise<object>, table: TableDefine): PromiseLike<T>;
791
+ }
792
+ declare const Build: unique symbol;
793
+ interface Build<T = unknown> {
794
+ [Build](data: object, others: object | boolean): T;
795
+ }
796
+
797
+ type TableType = '' | 'table' | 'view';
798
+ interface CountArg extends Omit<TableDefine, 'table'>, Omit<Options, 'select'> {
799
+ table: string;
800
+ }
801
+ interface SelectArg extends CountArg {
802
+ select: [string, Select][];
803
+ }
804
+ type GetName = (table?: string) => string;
805
+ interface MatchArg extends Omit<TableDefine<Fields<keyof FieldType>>, 'table'> {
806
+ table: string;
807
+ where?: WhereValue[];
808
+ }
809
+ type BuildValue<T extends TableDefine> = T extends Build<infer R> ? R : object;
810
+ interface IConnection<E extends object = object> {
811
+ /** 数据库类型 */
812
+ readonly dbType: string;
813
+ /** 数据库版本 */
814
+ dbVersion(environment: Environment<E>): PromiseLike<string>;
815
+ exec(environment: Environment<E>, ...values: any): Promise<number>;
816
+ /**
817
+ * 执行一条语句
818
+ * @param sql 要执行的 SQL 语句
819
+ */
820
+ query(environment: Environment<E>, ...values: any): PromiseLike<any[]>;
821
+ type(environment: Environment<E>, table: string): PromiseLike<TableType | null>;
822
+ insert(environment: Environment<E>, table: string, fields: Fields<keyof FieldType>, data: object[], key: string[]): PromiseLike<any[]>;
823
+ update(environment: Environment<E>, args: MatchArg, update: Record<string, SetValue>): PromiseLike<number>;
824
+ updateReturn(environment: Environment<E>, args: MatchArg, update: Record<string, SetValue>, returning: string[]): PromiseLike<any[]>;
825
+ updateMany(environment: Environment<E>, table: string, fields: Fields<keyof FieldType>, update: Record<string, any>, pKeys: string[], setKeys: string[], list: Record<string, any>[], where: WhereValue[]): PromiseLike<number>;
826
+ updateManyReturn(environment: Environment<E>, table: string, fields: Fields<keyof FieldType>, update: Record<string, any>, pKeys: string[], setKeys: string[], list: Record<string, any>[], where: WhereValue[], returning: string[]): PromiseLike<any[]>;
827
+ count(environment: Environment<E>, argv: CountArg): PromiseLike<number>;
828
+ select(environment: Environment<E>, argv: SelectArg): PromiseLike<any[]>;
829
+ delete(environment: Environment<E>, argv: MatchArg): PromiseLike<number>;
830
+ deleteReturn(environment: Environment<E>, argv: MatchArg, returning: string[]): PromiseLike<any[]>;
831
+ createTable(environment: Environment<E>, table: string, fields: Column<any>[]): PromiseLike<number>;
832
+ dropTable(environment: Environment<E>, table: string): PromiseLike<number>;
833
+ renameTable(environment: Environment<E>, table: string, newName: string): PromiseLike<number>;
834
+ addColumn(environment: Environment<E>, table: string, column: string, type: string, options: ColumnOptions<any>): PromiseLike<number>;
835
+ changeColumn(environment: Environment<E>, table: string, column: string, type: string, options: ColumnOptions<any>): PromiseLike<number>;
836
+ changeColumnNull(environment: Environment<E>, table: string, column: string, nullable: boolean): PromiseLike<number>;
837
+ dropColumn(environment: Environment<E>, table: string, column: string): PromiseLike<number>;
838
+ renameColumn(environment: Environment<E>, table: string, column: string, newName: string): PromiseLike<number>;
839
+ addIndex(environment: Environment<E>, table: string, name: string, fields: string[], options: IndexOptions): PromiseLike<number>;
840
+ dropIndex(environment: Environment<E>, table: string, name: string): PromiseLike<number>;
841
+ createView(environment: Environment<E>, name: string, q: SelectArg): PromiseLike<number>;
842
+ dropView(environment: Environment<E>, name: string): PromiseLike<number>;
843
+ createMaterializedView(environment: Environment<E>, name: string, q: SelectArg): PromiseLike<number>;
844
+ dropMaterializedView(environment: Environment<E>, name: string): PromiseLike<number>;
845
+ transaction<R>(environment: Environment<E>, fn: (t: E) => R | PromiseLike<R>): PromiseLike<R>;
846
+ }
847
+ interface TransactionFn {
848
+ <T>(fn: (t: Connection) => PromiseLike<T> | T): Promise<T>;
849
+ }
850
+ /** @deprecated */
851
+ interface Querier<T> {
852
+ (t: Connection): PromiseLike<T> | T;
853
+ }
854
+
855
+ /**
856
+ * @template {{}} [E={}]
857
+ */
858
+ declare class Connection<E extends {} = {}> {
859
+ /**
860
+ *
861
+ * @param {PromiseLike<IConnection<E>> | IConnection<E>} connection
862
+ * @param {E?} [transaction]
863
+ * @param {Record<string, string>?} [names]
864
+ */
865
+ constructor(connection: PromiseLike<IConnection<E>> | IConnection<E>, transaction?: E | null, names?: Record<string, string> | null);
866
+ /**
867
+ *
868
+ * @param {object} [options]
869
+ * @param {Record<string, string>?} [options.names]
870
+ * @returns {Connection<E>}
871
+ */
872
+ clone({ names }?: {
873
+ names?: Record<string, string> | null | undefined;
874
+ }): Connection<E>;
875
+ /** @return {Promise<string>} */
876
+ dbType(): Promise<string>;
877
+ /** @return {Promise<string>} */
878
+ dbVersion(): Promise<string>;
879
+ /**
880
+ *
881
+ * @param {...any} values
882
+ * @returns {Promise<any[]>}
883
+ */
884
+ query(...values: any[]): Promise<any[]>;
885
+ /**
886
+ *
887
+ * @param {...any} values
888
+ * @returns {Promise<number>}
889
+ */
890
+ exec(...values: any[]): Promise<number>;
891
+ /**
892
+ *
893
+ * @param {string} table
894
+ * @returns {Promise<TableType?>}
895
+ */
896
+ type(table: string): Promise<TableType | null>;
897
+ /**
898
+ * @template T
899
+ * @overload
900
+ * @param {Build<T>} build
901
+ * @param {object} data
902
+ * @param {object | boolean} [saved]
903
+ * @returns {T}
904
+ */
905
+ build<T extends Fields>(build: Build<T>, data: object, saved?: object | boolean): T;
906
+ /**
907
+ * @template {Fields} T
908
+ * @overload
909
+ * @param {TableDefine<T>} table
910
+ * @param {object} data
911
+ * @param {object | boolean} [saved]
912
+ * @returns {FieldValue<T>}
913
+ */
914
+ build<T extends Fields>(table: TableDefine<T>, data: object, saved?: object | boolean): FieldValue<T>;
915
+ /**
916
+ * @template {TableDefine} T
917
+ * @overload
918
+ * @param {T} model
919
+ * @param {object[]} list
920
+ * @returns {Promise<object[]>}
921
+ */
922
+ create<T extends TableDefine>(model: T, list: object[]): Promise<object[]>;
923
+ /**
924
+ * @template {TableDefine} T
925
+ * @overload
926
+ * @param {T} model
927
+ * @param {object} value
928
+ * @returns {Promise<T extends Build<infer R> ? R : object>}
929
+ */
930
+ create<T extends TableDefine>(model: T, value: object): Promise<T extends Build<infer R> ? R : object>;
931
+ /**
932
+ * @template {TableDefine} T
933
+ * @overload
934
+ * @param {T} model
935
+ * @param {object | object[]} value
936
+ * @returns {Promise<object[] | (T extends Build<infer R> ? R : object)>}
937
+ */
938
+ create<T extends TableDefine>(model: T, value: object | object[]): Promise<object[] | (T extends Build<infer R> ? R : object)>;
939
+ /**
940
+ *
941
+ * @template {TableDefine} T
942
+ * @param {T} sql
943
+ * @returns {Promise<T extends Build<infer R > ? R[] : T extends TableDefine<infer F> ? FieldValue<F>[] : never>}
944
+ */
945
+ find<T extends TableDefine>(sql: T): Promise<T extends Build<infer R> ? R[] : T extends TableDefine<infer F> ? FieldValue<F>[] : never>;
946
+ /**
947
+ *
948
+ * @template {TableDefine} T
949
+ * @param {T} sql
950
+ * @returns {Promise<T extends Build<infer R > ? R : T extends TableDefine<infer F> ? FieldValue<F> : never>}
951
+ */
952
+ first<T extends TableDefine>(sql: T): Promise<T extends Build<infer R> ? R : T extends TableDefine<infer F> ? FieldValue<F> : never>;
953
+ /**
954
+ * @template T
955
+ * @param {TableDefine} model
956
+ * @param {T} data
957
+ * @returns {Promise<(T extends Save ? T : object)?>}
958
+ */
959
+ save<T>(model: TableDefine, data: T): Promise<(T extends Save ? T : object) | null>;
960
+ /**
961
+ *
962
+ * @template T
963
+ * @param {TableDefine} tableDef
964
+ * @param {T} data
965
+ * @returns {Promise<(T extends Destroy ? T : object)?>}
966
+ */
967
+ completelyDestroy<T>(tableDef: TableDefine, data: T): Promise<(T extends Destroy ? T : object) | null>;
968
+ /**
969
+ *
970
+ * @template {object} T
971
+ * @param {TableDefine} tableDef
972
+ * @param {T} data
973
+ * @param {Record<string, SetValue>} value
974
+ * @returns {Promise<(T extends PseudoDestroy ? T : object)?>}
975
+ */
976
+ pseudoDestroy<T extends unknown>(tableDef: TableDefine, data: T, value: Record<string, SetValue>): Promise<(T extends PseudoDestroy ? T : object) | null>;
977
+ /**
978
+ * @template {Destroy & PseudoDestroy} T
979
+ * @overload
980
+ * @param {TableDefine} table
981
+ * @param {T} data
982
+ * @param {Record<string, any> | boolean} [update]
983
+ * @returns {Promise<T?>}
984
+ */
985
+ destroy<T extends Destroy & PseudoDestroy>(table: TableDefine, data: T, update?: boolean | Record<string, any> | undefined): Promise<T | null>;
986
+ /**
987
+ * @template {Destroy & PseudoDestroy} T
988
+ * @overload
989
+ * @param {TableDefine} table
990
+ * @param {T} data
991
+ * @param {Record<string, any> | boolean} [update]
992
+ * @returns {Promise<T | object | null>}
993
+ */
994
+ destroy<T extends Destroy & PseudoDestroy>(table: TableDefine, data: T, update?: boolean | Record<string, any> | undefined): Promise<T | object | null>;
995
+ /**
996
+ * @overload
997
+ * @param {TableDefine} table
998
+ * @param {any} data
999
+ * @param {Record<string, any> | boolean} [update]
1000
+ * @returns {Promise<object?>}
1001
+ */
1002
+ destroy(table: TableDefine, data: any, update?: boolean | Record<string, any> | undefined): Promise<object | null>;
1003
+ /**
1004
+ * @param {Queryable} queryable
1005
+ * @param {Record<string, SetValue> | boolean} [update]
1006
+ * @returns {Promise<number>}
1007
+ */
1008
+ destroyMany(queryable: Queryable, update?: Record<string, SetValue> | boolean): Promise<number>;
1009
+ /**
1010
+ * @template {object | object[]} T
1011
+ * @param {TableDefine} tableDefine
1012
+ * @param {T} data
1013
+ * @param {string[]} [keys]
1014
+ * @returns {Promise<T extends object[] ? object[] : object>}
1015
+ */
1016
+ insert<T extends unknown>({ table, fields }: TableDefine, data: T, keys?: string[]): Promise<T extends object[] ? object[] : object>;
1017
+ /**
1018
+ * @param {TableDefine} tableDefine
1019
+ * @param {Record<string, any>} update
1020
+ * @param {WhereValue[]?} [where]
1021
+ * @param {boolean} [skip]
1022
+ * @returns {Promise<number>}
1023
+ */
1024
+ update({ table, fields }: TableDefine, update: Record<string, any>, where?: WhereValue[] | null, skip?: boolean): Promise<number>;
1025
+ /**
1026
+ * @template {Fields<MainFieldType>} T
1027
+ * @param {TableDefine<T>} tableDefine
1028
+ * @param {Record<string, any>} update
1029
+ * @param {string[]?} [returning]
1030
+ * @param {WhereValue[]?} [where]
1031
+ * @param {boolean} [skip]
1032
+ * @returns {Promise<any[]>}
1033
+ */
1034
+ updateReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, update: Record<string, any>, returning?: string[] | null, where?: WhereValue[] | null, skip?: boolean): Promise<any[]>;
1035
+ /**
1036
+ * @param {TableDefine} tableDefine
1037
+ * @param {string[]} pKeys
1038
+ * @param {string[]} setKeys
1039
+ * @param {Record<string, any>[]} list
1040
+ * @param {boolean} [skip]
1041
+ * @returns {Promise<number>}
1042
+ */
1043
+ updateMany({ table, fields }: TableDefine, pKeys: string[], setKeys: string[], list: Record<string, any>[], skip?: boolean): Promise<number>;
1044
+ /**
1045
+ * @template {Fields<MainFieldType>} T
1046
+ * @param {TableDefine<T>} tableDefine
1047
+ * @param {string[]} pKeys
1048
+ * @param {string[]} setKeys
1049
+ * @param {Record<string, any>[]} list
1050
+ * @param {string[]?} [returning]
1051
+ * @param {boolean} [skip]
1052
+ * @returns {Promise<any[]>}
1053
+ */
1054
+ updateManyReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, pKeys: string[], setKeys: string[], list: Record<string, any>[], returning?: string[] | null, skip?: boolean): Promise<any[]>;
1055
+ /**
1056
+ * @param {TableDefine} tableDefine
1057
+ * @param {WhereValue[]} [where]
1058
+ * @returns {Promise<number>}
1059
+ */
1060
+ delete({ table, fields }: TableDefine, where?: WhereValue[]): Promise<number>;
1061
+ /**
1062
+ * @template {Fields<MainFieldType>} T
1063
+ * @param {TableDefine<T>} tableDefine
1064
+ * @param {string[]?} [returning]
1065
+ * @param {WhereValue[]} [where]
1066
+ * @returns {Promise<any[]>}
1067
+ */
1068
+ deleteReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, returning?: string[] | null, where?: WhereValue[]): Promise<any[]>;
1069
+ /**
1070
+ *
1071
+ * @param {Queryable} queryable
1072
+ * @returns {Promise<number>}
1073
+ */
1074
+ count(queryable: Queryable): Promise<number>;
1075
+ /**
1076
+ * @param {Queryable} queryable
1077
+ * @returns {Promise<any[]>}
1078
+ */
1079
+ select(queryable: Queryable): Promise<any[]>;
1080
+ /**
1081
+ * @param {string} table
1082
+ * @param {string} column
1083
+ * @param {string} type
1084
+ * @param {ColumnOptions<any>} options
1085
+ * @returns {Promise<number>}
1086
+ */
1087
+ addColumn(table: string, column: string, type: string, options: ColumnOptions<any>): Promise<number>;
1088
+ /**
1089
+ * @param {string} table
1090
+ * @param {string} column
1091
+ * @param {string} type
1092
+ * @param {ColumnOptions<any>} options
1093
+ * @returns {Promise<number>}
1094
+ */
1095
+ changeColumn(table: string, column: string, type: string, options: ColumnOptions<any>): Promise<number>;
1096
+ /**
1097
+ * @param {string} table
1098
+ * @param {string} column
1099
+ * @param {boolean} nullable
1100
+ * @returns {Promise<number>}
1101
+ */
1102
+ changeColumnNull(table: string, column: string, nullable: boolean): Promise<number>;
1103
+ /**
1104
+ * @param {string} table
1105
+ * @param {string} column
1106
+ * @returns {Promise<number>}
1107
+ */
1108
+ dropColumn(table: string, column: string): Promise<number>;
1109
+ /**
1110
+ * @param {string} table
1111
+ * @param {string} column
1112
+ * @param {string} newName
1113
+ * @returns {Promise<number>}
1114
+ */
1115
+ renameColumn(table: string, column: string, newName: string): Promise<number>;
1116
+ /**
1117
+ * @param {string} table
1118
+ * @param {string} name
1119
+ * @param {string[]} fields
1120
+ * @param {IndexOptions} [options]
1121
+ * @returns {Promise<number>}
1122
+ */
1123
+ addIndex(table: string, name: string, fields: string[], options?: IndexOptions): Promise<number>;
1124
+ /**
1125
+ * @param {string} table
1126
+ * @param {string} name
1127
+ * @returns {Promise<number>}
1128
+ */
1129
+ dropIndex(table: string, name: string): Promise<number>;
1130
+ /**
1131
+ * @param {string} table
1132
+ * @param {Column<any>[]} fields
1133
+ * @returns {Promise<number>}
1134
+ */
1135
+ createTable(table: string, fields: Column<any>[]): Promise<number>;
1136
+ /**
1137
+ * @param {string} table
1138
+ * @returns {Promise<number>}
1139
+ */
1140
+ dropTable(table: string): Promise<number>;
1141
+ /**
1142
+ * @param {string} table
1143
+ * @param {string} newName
1144
+ * @returns {Promise<number>}
1145
+ */
1146
+ renameTable(table: string, newName: string): Promise<number>;
1147
+ /**
1148
+ * @param {string} view
1149
+ * @param {Queryable} queryable
1150
+ * @returns {Promise<number>}
1151
+ */
1152
+ createView(view: string, queryable: Queryable): Promise<number>;
1153
+ /**
1154
+ * @param {string} view
1155
+ * @returns {Promise<number>}
1156
+ */
1157
+ dropView(view: string): Promise<number>;
1158
+ /**
1159
+ * @param {string} view
1160
+ * @param {Queryable} queryable
1161
+ * @returns {Promise<number>}
1162
+ */
1163
+ createMaterializedView(view: string, queryable: Queryable): Promise<number>;
1164
+ /**
1165
+ * @param {string} view
1166
+ * @returns {Promise<number>}
1167
+ */
1168
+ dropMaterializedView(view: string): Promise<number>;
1169
+ abort(): boolean;
1170
+ /**
1171
+ * @template T
1172
+ * @overload
1173
+ * @param {(t: Connection) => PromiseLike<T> | T} fn
1174
+ * @returns {Promise<T>}
1175
+ */
1176
+ transaction<T>(fn: (t: Connection) => PromiseLike<T> | T): Promise<T>;
1177
+ /**
1178
+ * @overload
1179
+ * @returns {[Promise<void>, commit: () => Promise<void>, rollback: (e?: any) => Promise<void>]}
1180
+ */
1181
+ transaction(): [Promise<void>, commit: () => Promise<void>, rollback: (e?: any) => Promise<void>];
1182
+ #private;
1183
+ }
1184
+
1185
+ /** @import { Fields } from './types' */
1186
+ /**
1187
+ *
1188
+ * @param {Fields} fields
1189
+ * @returns {string[]}
1190
+ */
1191
+ declare function getPrimaryKeys(fields: Fields): string[];
1192
+
1193
+ /**
1194
+ *
1195
+ * @param {Queryable} model
1196
+ * @returns
1197
+ */
1198
+ declare function isPseudo(model: Queryable): boolean;
1199
+
1200
+ /**
1201
+ * @template {keyof FieldType} T
1202
+ * @overload
1203
+ * @param {T} type
1204
+ * @param {{
1205
+ * nullable?: false;
1206
+ * array?: false;
1207
+ * default?: ToType<T, false, false>;
1208
+ * [k: string]: any;
1209
+ * } & FieldDefineOption} [options]
1210
+ * @returns {FieldDecorator<ToType<T, false, false>>}
1211
+ */
1212
+ declare function field$1<T extends keyof FieldType>(type: T, options?: ({
1213
+ [k: string]: any;
1214
+ nullable?: false;
1215
+ array?: false;
1216
+ default?: ToType<T, false, false>;
1217
+ } & FieldDefineOption) | undefined): FieldDecorator<ToType<T, false, false>>;
1218
+ /**
1219
+ * @template {keyof FieldType} T
1220
+ * @overload
1221
+ * @param {T} type
1222
+ * @param {{
1223
+ * nullable?: false;
1224
+ * array: true;
1225
+ * default?: ToType<T, true, false>;
1226
+ * [k: string]: any;
1227
+ * } & FieldDefineOption} options
1228
+ * @returns {FieldDecorator<ToType<T, true, false>>}
1229
+ */
1230
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1231
+ nullable?: false;
1232
+ array: true;
1233
+ default?: ToType<T, true, false>;
1234
+ [k: string]: any;
1235
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, false>>;
1236
+ /**
1237
+ * @template {keyof FieldType} T
1238
+ * @overload
1239
+ * @param {T} type
1240
+ * @param {true} array
1241
+ * @param {{
1242
+ * nullable?: false;
1243
+ * default?: ToType<T, true, false>;
1244
+ * [k: string]: any;
1245
+ * } & FieldDefineOption} options
1246
+ * @returns {FieldDecorator<ToType<T, true, false>>}
1247
+ */
1248
+ declare function field$1<T extends keyof FieldType>(type: T, array: true, options: {
1249
+ nullable?: false;
1250
+ default?: ToType<T, true, false>;
1251
+ [k: string]: any;
1252
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, false>>;
1253
+ /**
1254
+ * @template {keyof FieldType} T
1255
+ * @overload
1256
+ * @param {T} type
1257
+ * @param {{
1258
+ * nullable: true;
1259
+ * array?: false;
1260
+ * default?: ToType<T, false, true>;
1261
+ * [k: string]: any;
1262
+ * } & FieldDefineOption} options
1263
+ * @returns {FieldDecorator<ToType<T, false, true>>}
1264
+ */
1265
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1266
+ nullable: true;
1267
+ array?: false;
1268
+ default?: ToType<T, false, true>;
1269
+ [k: string]: any;
1270
+ } & FieldDefineOption): FieldDecorator<ToType<T, false, true>>;
1271
+ /**
1272
+ * @template {keyof FieldType} T
1273
+ * @overload
1274
+ * @param {T} type
1275
+ * @param {{
1276
+ * nullable: true;
1277
+ * array: true;
1278
+ * default?: ToType<T, true, true>;
1279
+ * [k: string]: any;
1280
+ * } & FieldDefineOption} options
1281
+ * @returns {FieldDecorator<ToType<T, true, true>>}
1282
+ */
1283
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1284
+ nullable: true;
1285
+ array: true;
1286
+ default?: ToType<T, true, true>;
1287
+ [k: string]: any;
1288
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, true>>;
1289
+ /**
1290
+ * @template {keyof FieldType} T
1291
+ * @overload
1292
+ * @param {T} type
1293
+ * @param {true} array
1294
+ * @param {{
1295
+ * nullable: true;
1296
+ * default?: ToType<T, true, true>;
1297
+ * [k: string]: any;
1298
+ * } & FieldDefineOption} options
1299
+ * @returns {FieldDecorator<ToType<T, true, true>>}
1300
+ */
1301
+ declare function field$1<T extends keyof FieldType>(type: T, array: true, options: {
1302
+ nullable: true;
1303
+ default?: ToType<T, true, true>;
1304
+ [k: string]: any;
1305
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, true>>;
1306
+ /**
1307
+ * @template {keyof FieldType} T
1308
+ * @template {boolean} A
1309
+ * @overload
1310
+ * @param {T} type
1311
+ * @param {{
1312
+ * nullable: true;
1313
+ * array: A;
1314
+ * default?: ToType<T, A, true>;
1315
+ * [k: string]: any;
1316
+ * } & FieldDefineOption} options
1317
+ * @returns {FieldDecorator<ToType<T, A, true>>}
1318
+ */
1319
+ declare function field$1<T extends keyof FieldType, A extends boolean>(type: T, options: {
1320
+ nullable: true;
1321
+ array: A;
1322
+ default?: ToType<T, A, true>;
1323
+ [k: string]: any;
1324
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, true>>;
1325
+ /**
1326
+ * @template {keyof FieldType} T
1327
+ * @template {boolean} A
1328
+ * @overload
1329
+ * @param {T} type
1330
+ * @param {{
1331
+ * nullable?: false;
1332
+ * array: A;
1333
+ * default?: ToType<T, A, false>;
1334
+ * [k: string]: any;
1335
+ * } & FieldDefineOption} options
1336
+ * @returns {FieldDecorator<ToType<T, A, false>>}
1337
+ */
1338
+ declare function field$1<T extends keyof FieldType, A extends boolean>(type: T, options: {
1339
+ nullable?: false;
1340
+ array: A;
1341
+ default?: ToType<T, A, false>;
1342
+ [k: string]: any;
1343
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, false>>;
1344
+ /**
1345
+ * @template {keyof FieldType} T
1346
+ * @template {boolean} N
1347
+ * @overload
1348
+ * @param {T} type
1349
+ * @param {{
1350
+ * nullable: N;
1351
+ * array?: false;
1352
+ * default?: ToType<T, false, N>;
1353
+ * [k: string]: any;
1354
+ * } & FieldDefineOption} options
1355
+ * @returns {FieldDecorator<ToType<T, false, N>>}
1356
+ */
1357
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, options: {
1358
+ nullable: N;
1359
+ array?: false;
1360
+ default?: ToType<T, false, N>;
1361
+ [k: string]: any;
1362
+ } & FieldDefineOption): FieldDecorator<ToType<T, false, N>>;
1363
+ /**
1364
+ * @template {keyof FieldType} T
1365
+ * @template {boolean} N
1366
+ * @overload
1367
+ * @param {T} type
1368
+ * @param {{
1369
+ * nullable: N;
1370
+ * array: true;
1371
+ * default?: ToType<T, true, N>;
1372
+ * [k: string]: any;
1373
+ * } & FieldDefineOption} options
1374
+ * @returns {FieldDecorator<ToType<T, true, N>>}
1375
+ */
1376
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, options: {
1377
+ nullable: N;
1378
+ array: true;
1379
+ default?: ToType<T, true, N>;
1380
+ [k: string]: any;
1381
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, N>>;
1382
+ /**
1383
+ * @template {keyof FieldType} T
1384
+ * @template {boolean} N
1385
+ * @overload
1386
+ * @param {T} type
1387
+ * @param {true} array
1388
+ * @param {{
1389
+ * nullable: N;
1390
+ * default?: ToType<T, true, N>;
1391
+ * [k: string]: any;
1392
+ * } & FieldDefineOption} options
1393
+ * @returns {FieldDecorator<ToType<T, true, N>>}
1394
+ */
1395
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, array: true, options: {
1396
+ nullable: N;
1397
+ default?: ToType<T, true, N>;
1398
+ [k: string]: any;
1399
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, N>>;
1400
+ /**
1401
+ * @template {keyof FieldType} T
1402
+ * @template {boolean} A
1403
+ * @template {boolean} N
1404
+ * @overload
1405
+ * @param {T} type
1406
+ * @param {{
1407
+ * nullable: N;
1408
+ * array: A;
1409
+ * default?: ToType<T, A, N>;
1410
+ * [k: string]: any;
1411
+ * } & FieldDefineOption} options
1412
+ * @returns {FieldDecorator<ToType<T, A, N>>}
1413
+ */
1414
+ declare function field$1<T extends keyof FieldType, A extends boolean, N extends boolean>(type: T, options: {
1415
+ nullable: N;
1416
+ array: A;
1417
+ default?: ToType<T, A, N>;
1418
+ [k: string]: any;
1419
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, N>>;
1420
+ /**
1421
+ * @template {keyof FieldType} T
1422
+ * @overload
1423
+ * @param {T} type
1424
+ * @param {{
1425
+ * nullable?: boolean;
1426
+ * array?: boolean;
1427
+ * default?: ToType<T, boolean, boolean>;
1428
+ * [k: string]: any;
1429
+ * } & FieldDefineOption} options
1430
+ * @returns {FieldDecorator<ToType<T, boolean, boolean>>}
1431
+ */
1432
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1433
+ nullable?: boolean;
1434
+ array?: boolean;
1435
+ default?: ToType<T, boolean, boolean>;
1436
+ [k: string]: any;
1437
+ } & FieldDefineOption): FieldDecorator<ToType<T, boolean, boolean>>;
1438
+
1439
+ /** @import { ToFieldType } from '../types' */
1440
+ /** @import { FieldDecorator } from './index.mjs' */
1441
+ /**
1442
+ * @param {object} [options]
1443
+ * @param {number?} [options.sort]
1444
+ * @returns {FieldDecorator<ToFieldType<'id'>>}
1445
+ */
1446
+ declare function id({ sort }?: {
1447
+ sort?: number | null | undefined;
1448
+ }): FieldDecorator<ToFieldType<"id">>;
1449
+
1450
+ /** @import { FieldDecorator } from './index.mjs' */
1451
+ /**
1452
+ * @param {string} prop
1453
+ * @param {any} value
1454
+ * @returns {FieldDecorator<any>}
1455
+ */
1456
+ declare function prop(prop: string, value: any): FieldDecorator<any>;
1457
+
1458
+ /** @import { FieldDecorator } from './index.mjs' */
1459
+ /**
1460
+ *
1461
+ * @param {number} [primary]
1462
+ * @returns {FieldDecorator<any>}
1463
+ */
1464
+ declare function primary(primary?: number): FieldDecorator<any>;
1465
+
1466
+ /** @import { FieldDecorator } from './index.mjs' */
1467
+ /** @returns {FieldDecorator<any>} */
1468
+ declare function immutable(): FieldDecorator<any>;
1469
+
1470
+ /**
1471
+ * 索引信息
1472
+ * @overload
1473
+ * @param {string[]} fields
1474
+ * @param {IndexOptions} [options]
1475
+ * @returns {ClassDecorator}
1476
+ */
1477
+ declare function index(fields: string[], options?: IndexOptions | undefined): ClassDecorator;
1478
+ /**
1479
+ * 索引信息
1480
+ * @overload
1481
+ * @param {string} [name]
1482
+ * @param {boolean} [unique]
1483
+ * @returns {FieldDecorator<any>}
1484
+ */
1485
+ declare function index(name?: string | undefined, unique?: boolean | undefined): FieldDecorator<any>;
1486
+ /**
1487
+ * 索引信息
1488
+ * @overload
1489
+ * @param {boolean} [unique]
1490
+ * @returns {FieldDecorator<any>}
1491
+ */
1492
+ declare function index(unique?: boolean | undefined): FieldDecorator<any>;
1493
+
1494
+ /** @import { FieldDecorator } from './index.mjs' */
1495
+ /**
1496
+ * 默认排序顺序,绝对值表示在排序列表中的顺序,负数表示逆序排序, 0 表示不排序
1497
+ * @param {number} sort
1498
+ * @returns {FieldDecorator<any>}
1499
+ */
1500
+ declare function sort(sort: number): FieldDecorator<any>;
1501
+
1502
+ /** @import { ClassDecorator } from './index.mjs' */
1503
+ /**
1504
+ *
1505
+ * @param {string} pseudo
1506
+ * @returns {ClassDecorator}
1507
+ */
1508
+ declare function pseudo(pseudo: string): ClassDecorator;
1509
+
1510
+ /**
1511
+ *
1512
+ * @overload
1513
+ * @param {string} table
1514
+ * @returns {ClassDecorator}
1515
+ */
1516
+ declare function submodel(table: string): ClassDecorator;
1517
+ /**
1518
+ * @template {Record<string, any>} T
1519
+ * @overload
1520
+ * @param {TableDefine & {new(...a: any): T}} type
1521
+ * @param {Record<string, Constraint>} constraints
1522
+ * @param {true} array
1523
+ * @param {FieldDefineOption} [options]
1524
+ * @returns {FieldDecorator<T[]>}
1525
+ */
1526
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1527
+ new (...a: any): T;
1528
+ }, constraints: Record<string, Constraint>, array: true, options?: FieldDefineOption | undefined): FieldDecorator<T[]>;
1529
+ /**
1530
+ * @template {Record<string, any>} T
1531
+ * @overload
1532
+ * @param {TableDefine & {new(...a: any): T}} type
1533
+ * @param {Record<string, Constraint>} constraints
1534
+ * @param {false} [array]
1535
+ * @param {FieldDefineOption} [options]
1536
+ * @returns {FieldDecorator<T>}
1537
+ */
1538
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1539
+ new (...a: any): T;
1540
+ }, constraints: Record<string, Constraint>, array?: false | undefined, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1541
+ /**
1542
+ * @template {Record<string, any>} T
1543
+ * @overload
1544
+ * @param {TableDefine & {new(...a: any): T}} type
1545
+ * @param {Record<string, Constraint>} constraints
1546
+ * @param {FieldDefineOption} [options]
1547
+ * @returns {FieldDecorator<T>}
1548
+ */
1549
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1550
+ new (...a: any): T;
1551
+ }, constraints: Record<string, Constraint>, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1552
+ /**
1553
+ * @template {Record<string, any>} T
1554
+ * @template {boolean} [A=boolean]
1555
+ * @overload
1556
+ * @param {TableDefine & {new(...a: any): T}} type
1557
+ * @param {Record<string, Constraint>} constraints
1558
+ * @param {A} array
1559
+ * @param {FieldDefineOption} [options]
1560
+ * @returns {FieldDecorator<A extends false ? T : A extends true ? T[] : T | T[]>}
1561
+ */
1562
+ declare function submodel<T extends Record<string, any>, A extends boolean = boolean>(type: TableDefine & {
1563
+ new (...a: any): T;
1564
+ }, constraints: Record<string, Constraint>, array: A, options?: FieldDefineOption | undefined): FieldDecorator<A extends false ? T : A extends true ? T[] : T | T[]>;
1565
+ /**
1566
+ * @template {object} T
1567
+ * @overload
1568
+ * @param {TableDefine} type
1569
+ * @param {Record<string, Constraint>} constraints
1570
+ * @param {true} array
1571
+ * @param {FieldDefineOption} [options]
1572
+ * @returns {FieldDecorator<T[]>}
1573
+ */
1574
+ declare function submodel<T extends Record<string, any>>(type: TableDefine, constraints: Record<string, Constraint>, array: true, options?: FieldDefineOption | undefined): FieldDecorator<T[]>;
1575
+ /**
1576
+ * @template {object} T
1577
+ * @overload
1578
+ * @param {TableDefine} type
1579
+ * @param {Record<string, Constraint>} constraints
1580
+ * @param {false} [array]
1581
+ * @param {FieldDefineOption} [options]
1582
+ * @returns {FieldDecorator<T>}
1583
+ */
1584
+ declare function submodel<T extends Record<string, any>>(type: TableDefine, constraints: Record<string, Constraint>, array?: false | undefined, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1585
+ /**
1586
+ * @template {object} T
1587
+ * @overload
1588
+ * @param {TableDefine} type
1589
+ * @param {Record<string, Constraint>} constraints
1590
+ * @param {FieldDefineOption} [options]
1591
+ * @returns {FieldDecorator<T>}
1592
+ */
1593
+ declare function submodel<T extends Record<string, any>>(type: TableDefine, constraints: Record<string, Constraint>, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1594
+ /**
1595
+ * @template {object} T
1596
+ * @template {boolean} [A=boolean]
1597
+ * @overload
1598
+ * @param {TableDefine} type
1599
+ * @param {Record<string, Constraint>} constraints
1600
+ * @param {A} array
1601
+ * @param {FieldDefineOption} [options]
1602
+ * @returns {FieldDecorator<A extends false ? T :A extends true ? T[] : T | T[]>}
1603
+ */
1604
+ declare function submodel<T extends Record<string, any>, A extends boolean = boolean>(type: TableDefine, constraints: Record<string, Constraint>, array: A, options?: FieldDefineOption | undefined): FieldDecorator<A extends false ? T : A extends true ? T[] : T | T[]>;
1605
+
1606
+ /**
1607
+ * @param {number} [precision]
1608
+ * @returns {FieldDecorator<Date?>}
1609
+ */
1610
+ declare function creating(precision?: number): FieldDecorator<Date | null>;
1611
+ /**
1612
+ * @param {number} [precision]
1613
+ * @returns {FieldDecorator<Date?>}
1614
+ */
1615
+ declare function updating(precision?: number): FieldDecorator<Date | null>;
1616
+ /**
1617
+ * @param {number} [precision]
1618
+ * @returns {FieldDecorator<Date?>}
1619
+ */
1620
+ declare function deleting(precision?: number): FieldDecorator<Date | null>;
1621
+
1622
+ type ClassDecorator = (val: Function, ctx: ClassDecoratorContext) => any;
1623
+ type FieldDecorator<T> = (val: {
1624
+ get(): T;
1625
+ set(v: T): void;
1626
+ }, ctx: ClassAccessorDecoratorContext) => any;
1627
+
1628
+ type QueryOptions<T extends Fields, TB extends unknown = any> = {
1629
+ table: string;
1630
+ fields: T;
1631
+ pseudo?: string | undefined;
1632
+ build?: ((a: object, b?: object | boolean) => TB) | null | undefined;
1633
+ };
1634
+ /**
1635
+ * @template {Fields} T
1636
+ * @template {object} [TB=object]
1637
+ * @typedef {object} QueryOptions
1638
+ * @property {string} table
1639
+ * @property {T} fields
1640
+ * @property {string} [pseudo]
1641
+ * @property {((a: object, b?: object | boolean) => TB)?} [build]
1642
+ */
1643
+ /**
1644
+ * @template {Fields} T
1645
+ * @template {object} [TB=object]
1646
+ * @implements {Queryable<T>}
1647
+ */
1648
+ declare class Query<T extends Fields, TB extends unknown = any> implements Queryable {
1649
+ /**
1650
+ * @template {Fields} F
1651
+ * @template {new (o: QueryOptions<F>) => Query<F>} T
1652
+ * @this {T}
1653
+ * @param {string} table
1654
+ * @param {F} fields
1655
+ * @param {string} [pseudo]
1656
+ * @returns {InstanceType<T>}
1657
+ */
1658
+ static table<F extends Fields, T_1 extends new (o: QueryOptions<F>) => Query<F>>(this: T_1, table: string, fields: F, pseudo?: string): InstanceType<T_1>;
1659
+ /**
1660
+ * @param {QueryOptions<T, TB> | Query<T, TB>} options
1661
+ */
1662
+ constructor(options: QueryOptions<T, TB> | Query<T, TB>);
1663
+ /** @readonly @type {string} */
1664
+ readonly table: string;
1665
+ /** @readonly @type {T} */
1666
+ readonly fields: T;
1667
+ /** @readonly @type {string} */
1668
+ readonly pseudo: string;
1669
+ get options(): Options;
1670
+ /**
1671
+ * @param {QueryOptions<T, TB> | Query<T, TB>} options
1672
+ * @returns {Query<T, TB>}
1673
+ */
1674
+ _create(options: QueryOptions<T, TB> | Query<T, TB>): Query<T, TB>;
1675
+ /**
1676
+ * @returns {ReturnType<this['_create']>}
1677
+ */
1678
+ clone(): ReturnType<this["_create"]>;
1679
+ /** @returns {this} */
1680
+ deleted(): this;
1681
+ /** @returns {this} */
1682
+ undeleted(): this;
1683
+ /** @returns {this} */
1684
+ withDeleted(): this;
1685
+ /**
1686
+ * 增加排序项
1687
+ * @param {...string | boolean | [string, boolean?]} sort
1688
+ * @returns {this}
1689
+ */
1690
+ sort(...sort: (string | boolean | [string, boolean?])[]): this;
1691
+ /**
1692
+ * 设置获取到的最大数量
1693
+ * @param {number} [limit]
1694
+ * @returns {this}
1695
+ */
1696
+ limit(limit?: number): this;
1697
+ /**
1698
+ * 跳过的记录数
1699
+ * @param {number} [offset]
1700
+ * @returns {this}
1701
+ */
1702
+ offset(offset?: number): this;
1703
+ /**
1704
+ * @overload
1705
+ * @param {Wheres} matches
1706
+ * @returns {this}
1707
+ */
1708
+ where(matches: Wheres): this;
1709
+ /**
1710
+ *
1711
+ * @overload
1712
+ * @param {TemplateStringsArray} where
1713
+ * @param {...any} values
1714
+ * @returns {this}
1715
+ */
1716
+ where(where: TemplateStringsArray, ...values: any[]): this;
1717
+ /**
1718
+ * @overload
1719
+ * @param {string} field
1720
+ * @param {any} value
1721
+ * @returns {this}
1722
+ */
1723
+ where(field: string, value: any): this;
1724
+ /**
1725
+ * @overload
1726
+ * @param {string[]} field
1727
+ * @param {any[]} value
1728
+ * @returns {this}
1729
+ */
1730
+ where(field: string[], value: any[]): this;
1731
+ /**
1732
+ * @overload
1733
+ * @param {string} field
1734
+ * @param {string} operator
1735
+ * @param {any} value
1736
+ * @param {boolean} [not]
1737
+ * @returns {this}
1738
+ */
1739
+ where(field: string, operator: string, value: any, not?: boolean | undefined): this;
1740
+ /**
1741
+ * @overload
1742
+ * @param {string[]} field
1743
+ * @param {string} operator
1744
+ * @param {any[]} value
1745
+ * @param {boolean} [not]
1746
+ * @returns {this}
1747
+ */
1748
+ where(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
1749
+ /**
1750
+ * @overload
1751
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
1752
+ * @returns {this}
1753
+ */
1754
+ where(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
1755
+ /**
1756
+ * 选择字段
1757
+ * @param {...string | string[] | Record<string, Select.Param>} newSelect
1758
+ * @returns {this}
1759
+ */
1760
+ select(...newSelect: (string | string[] | Record<string, Select.Param>)[]): this;
1761
+ /**
1762
+ * 字段求和
1763
+ * @param {...string | string[] | Record<string, string>} newSelect
1764
+ * @returns {this}
1765
+ */
1766
+ sum(...newSelect: (string | string[] | Record<string, string>)[]): this;
1767
+ /**
1768
+ * 字段最小值
1769
+ * @param {...string | string[] | Record<string, string>} newSelect
1770
+ * @returns {this}
1771
+ */
1772
+ min(...newSelect: (string | string[] | Record<string, string>)[]): this;
1773
+ /**
1774
+ * 字段最大值
1775
+ * @param {...string | string[] | Record<string, string>} newSelect
1776
+ * @returns {this}
1777
+ */
1778
+ max(...newSelect: (string | string[] | Record<string, string>)[]): this;
1779
+ /**
1780
+ * 字段平均值
1781
+ * @param {...string | string[] | Record<string, string>} newSelect
1782
+ * @returns {this}
1783
+ */
1784
+ avg(...newSelect: (string | string[] | Record<string, string>)[]): this;
1785
+ /**
1786
+ * 字段计数
1787
+ * @param {...string | string[] | Record<string, string>} newSelect
1788
+ * @returns {this}
1789
+ */
1790
+ count(...newSelect: (string | string[] | Record<string, string>)[]): this;
1791
+ /**
1792
+ *
1793
+ * @param {Record<string, any>} update
1794
+ * @returns {this}
1795
+ */
1796
+ set(update: Record<string, any>): this;
1797
+ /**
1798
+ *
1799
+ * @param {string} alias
1800
+ * @returns
1801
+ */
1802
+ as(alias: string): ReturnType<this["_create"]>;
1803
+ /**
1804
+ *
1805
+ * @param {string} [text]
1806
+ * @returns {this}
1807
+ */
1808
+ contains(text?: string): this;
1809
+ /**
1810
+ * @param {any} [primary]
1811
+ * @returns {this}
1812
+ */
1813
+ primary(primary?: any, ...args: any[]): this;
1814
+ /**
1815
+ *
1816
+ * @param {object} a
1817
+ * @param {object | boolean | null} [b]
1818
+ * @returns {TB}
1819
+ */
1820
+ [Build](a: object, b?: object | boolean | null): TB;
1821
+ #private;
1822
+ }
1823
+
1824
+ /**
1825
+ * @implements {Save}
1826
+ * @implements {Destroy}
1827
+ * @implements {PseudoDestroy}
1828
+ */
1829
+ declare class Model implements Save, Destroy, PseudoDestroy {
1830
+ /** @readonly @type {string | undefined} */
1831
+ static readonly pseudo: string | undefined;
1832
+ /** @readonly @type {string} */
1833
+ static readonly table: string;
1834
+ /** @readonly @type {Fields} */
1835
+ static readonly fields: Fields;
1836
+ /** @readonly @type {readonly IndexInfo[]} */
1837
+ static readonly indexes: readonly IndexInfo[];
1838
+ /**
1839
+ * @template {typeof Model} T
1840
+ * @this {T}
1841
+ * @returns {Query<T['fields'], InstanceType<T>>}
1842
+ */
1843
+ static toQuery<T extends typeof Model>(this: T): Query<T["fields"], InstanceType<T>>;
1844
+ /**
1845
+ * @template {typeof Model} T
1846
+ * @this {T}
1847
+ * @param {string[]} [fields]
1848
+ * @returns {T}
1849
+ */
1850
+ static bindFields<T extends typeof Model>(this: T, fields?: string[]): T;
1851
+ /**
1852
+ * @template {typeof Model} T
1853
+ * @this {T}
1854
+ * @param {Connection} t
1855
+ * @param {object} p
1856
+ * @param {(data: object) => Promise<object>} run
1857
+ * @returns {Promise<InstanceType<T>>}
1858
+ */
1859
+ static [Create]<T extends typeof Model>(this: T, t: Connection, p: object, run: (data: object) => Promise<object>): Promise<InstanceType<T>>;
1860
+ /**
1861
+ * @template {typeof Model} T
1862
+ * @this {T}
1863
+ * @param {object} a
1864
+ * @param {object | boolean} [b]
1865
+ * @returns {InstanceType<T>}
1866
+ */
1867
+ static [Build]<T extends typeof Model>(this: T, a: object, b?: object | boolean): InstanceType<T>;
1868
+ /**
1869
+ * @param {object} data
1870
+ * @param {boolean | object} [saved]
1871
+ */
1872
+ constructor(data: object, saved?: boolean | object);
1873
+ get $model(): typeof Model;
1874
+ get $saved(): boolean;
1875
+ get $deleted(): boolean;
1876
+ get $oldData(): Record<string, any> | undefined;
1877
+ get $savedData(): {
1878
+ [x: string]: any;
1879
+ };
1880
+ get $changedData(): {
1881
+ [x: string]: any;
1882
+ };
1883
+ $clone(): Model;
1884
+ toJSON(): {
1885
+ [x: string]: any;
1886
+ };
1887
+ get $fieldChanged(): boolean;
1888
+ /**
1889
+ * @overload
1890
+ * @param {Record<string, any>} key
1891
+ * @param {any} [value]
1892
+ * @returns {boolean}
1893
+ */
1894
+ $set(key: Record<string, any>, value?: any): boolean;
1895
+ /**
1896
+ * @overload
1897
+ * @param {string} key
1898
+ * @param {any} value
1899
+ * @returns {boolean}
1900
+ */
1901
+ $set(key: string, value: any): boolean;
1902
+ /**
1903
+ * @template {Record<string, any>} T
1904
+ * @overload
1905
+ * @param {string} [key]
1906
+ * @param {boolean} [saved]
1907
+ * @returns {T}
1908
+ */
1909
+ $get<T extends Record<string, any>>(key?: string | undefined, saved?: boolean | undefined): T;
1910
+ /**
1911
+ * @template T
1912
+ * @overload
1913
+ * @param {string} key
1914
+ * @param {boolean} [saved]
1915
+ * @returns {T | undefined}
1916
+ */
1917
+ $get<T extends Record<string, any>>(key: string, saved?: boolean | undefined): T | undefined;
1918
+ /**
1919
+ * @param {(this: this)=> PromiseLike<boolean> | boolean} q
1920
+ * @returns {PromiseLike<boolean> | boolean}
1921
+ */
1922
+ $exec(q: (this: this) => PromiseLike<boolean> | boolean): PromiseLike<boolean> | boolean;
1923
+ /**
1924
+ * @param {Connection} t
1925
+ * @param {boolean} update
1926
+ * @returns {VoidReturn}
1927
+ */
1928
+ $onBeforeSave(t: Connection, update: boolean): VoidReturn;
1929
+ /**
1930
+ * @param {Connection} t
1931
+ * @param {boolean} update
1932
+ * @returns {VoidReturn}
1933
+ */
1934
+ $onAfterSave(t: Connection, update: boolean): VoidReturn;
1935
+ /**
1936
+ * @param {Connection} t
1937
+ * @param {boolean} update
1938
+ * @returns {VoidReturn}
1939
+ */
1940
+ $_onBeforeSave(t: Connection, update: boolean): VoidReturn;
1941
+ /**
1942
+ * @param {Connection} t
1943
+ * @param {boolean} update
1944
+ * @returns {VoidReturn}
1945
+ */
1946
+ $_onAfterSave(t: Connection, update: boolean): VoidReturn;
1947
+ /**
1948
+ * @param {Connection} t
1949
+ * @param {object?} update
1950
+ * @returns {VoidReturn}
1951
+ */
1952
+ $onBeforeDelete(t: Connection, update: object | null): VoidReturn;
1953
+ /**
1954
+ * @param {Connection} t
1955
+ * @param {object?} update
1956
+ * @returns {VoidReturn}
1957
+ */
1958
+ $onAfterDelete(t: Connection, update: object | null): VoidReturn;
1959
+ /**
1960
+ * @param {Connection} t
1961
+ * @param {object?} update
1962
+ * @returns {VoidReturn}
1963
+ */
1964
+ $_onBeforeDelete(t: Connection, update: object | null): VoidReturn;
1965
+ /**
1966
+ * @param {Connection} t
1967
+ * @param {object?} update
1968
+ * @returns {VoidReturn}
1969
+ */
1970
+ $_onAfterDelete(t: Connection, update: object | null): VoidReturn;
1971
+ /**
1972
+ * @param {Connection} t
1973
+ * @param {(data: any, newData?: any) => Promise<object?>} run
1974
+ * @returns {Promise<this?>}
1975
+ */
1976
+ [Save](t: Connection, run: (data: any, newData?: any) => Promise<object | null>): Promise<this | null>;
1977
+ /**
1978
+ * @param {Connection} t
1979
+ * @param {(data: any) => Promise<object?>} run
1980
+ * @returns {Promise<this?>}
1981
+ */
1982
+ [Destroy](t: Connection, run: (data: any) => Promise<object | null>): Promise<this | null>;
1983
+ /**
1984
+ * @param {Connection} t
1985
+ * @param {object} update
1986
+ * @param {(data: any) => Promise<object?>} run
1987
+ * @returns {Promise<this?>}
1988
+ */
1989
+ [PseudoDestroy](t: Connection, update: object, run: (data: any) => Promise<object | null>): Promise<this | null>;
1990
+ #private;
1991
+ }
1992
+ type VoidReturn = PromiseLike<void> | void;
1993
+
1994
+ /** @import { FieldDefine, FieldType, IndexInfo } from './types' */
1995
+ declare class Submodel {
1996
+ /** @readonly @type {string} */
1997
+ static readonly table: string;
1998
+ /** @readonly @type {Record<string, FieldDefine<keyof FieldType>>} */
1999
+ static readonly fields: Record<string, FieldDefine<keyof FieldType>>;
2000
+ /** @readonly @type {readonly IndexInfo[]} */
2001
+ static readonly indexes: readonly IndexInfo[];
2002
+ #private;
2003
+ }
2004
+
2005
+ /**
2006
+ * @template {MainFieldType} T
2007
+ * @overload
2008
+ * @param {T} type
2009
+ * @param {{
2010
+ * nullable?: false;
2011
+ * array?: false;
2012
+ * default?: ToType<T, false, false>;
2013
+ * } & FieldDefineOption} [options]
2014
+ * @returns {FieldDefine<T, false, false>}
2015
+ */
2016
+ declare function field<T extends MainFieldType>(type: T, options?: ({
2017
+ nullable?: false;
2018
+ array?: false;
2019
+ default?: ToType<T, false, false>;
2020
+ } & FieldDefineOption) | undefined): FieldDefine<T, false, false>;
2021
+ /**
2022
+ * @template {MainFieldType} T
2023
+ * @overload
2024
+ * @param {T} type
2025
+ * @param {{
2026
+ * nullable?: false;
2027
+ * array: true;
2028
+ * default?: ToType<T, true, false>;
2029
+ * } & FieldDefineOption} options
2030
+ * @returns {FieldDefine<T, true, false>}
2031
+ */
2032
+ declare function field<T extends MainFieldType>(type: T, options: {
2033
+ nullable?: false;
2034
+ array: true;
2035
+ default?: ToType<T, true, false>;
2036
+ } & FieldDefineOption): FieldDefine<T, true, false>;
2037
+ /**
2038
+ * @template {MainFieldType} T
2039
+ * @overload
2040
+ * @param {T} type
2041
+ * @param {{
2042
+ * nullable: true;
2043
+ * array?: false;
2044
+ * default?: ToType<T, false, true>;
2045
+ * } & FieldDefineOption} options
2046
+ * @returns {FieldDefine<T, false, true>}
2047
+ */
2048
+ declare function field<T extends MainFieldType>(type: T, options: {
2049
+ nullable: true;
2050
+ array?: false;
2051
+ default?: ToType<T, false, true>;
2052
+ } & FieldDefineOption): FieldDefine<T, false, true>;
2053
+ /**
2054
+ * @template {MainFieldType} T
2055
+ * @overload
2056
+ * @param {T} type
2057
+ * @param {{
2058
+ * nullable: true;
2059
+ * array: true;
2060
+ * default?: ToType<T, true, true>;
2061
+ * } & FieldDefineOption} options
2062
+ * @returns {FieldDefine<T, true, true>}
2063
+ */
2064
+ declare function field<T extends MainFieldType>(type: T, options: {
2065
+ nullable: true;
2066
+ array: true;
2067
+ default?: ToType<T, true, true>;
2068
+ } & FieldDefineOption): FieldDefine<T, true, true>;
2069
+ /**
2070
+ * @template {MainFieldType} T
2071
+ * @template {boolean} A
2072
+ * @overload
2073
+ * @param {T} type
2074
+ * @param {{
2075
+ * nullable: true;
2076
+ * array: A;
2077
+ * default?: ToType<T, A, true>;
2078
+ * } & FieldDefineOption} options
2079
+ * @returns {FieldDefine<T, A, true>}
2080
+ */
2081
+ declare function field<T extends MainFieldType, A extends boolean>(type: T, options: {
2082
+ nullable: true;
2083
+ array: A;
2084
+ default?: ToType<T, A, true>;
2085
+ } & FieldDefineOption): FieldDefine<T, A, true>;
2086
+ /**
2087
+ * @template {MainFieldType} T
2088
+ * @template {boolean} A
2089
+ * @overload
2090
+ * @param {T} type
2091
+ * @param {{
2092
+ * nullable?: false;
2093
+ * array: A;
2094
+ * default?: ToType<T, A, false>;
2095
+ * } & FieldDefineOption} options
2096
+ * @returns {FieldDefine<T, A, false>}
2097
+ */
2098
+ declare function field<T extends MainFieldType, A extends boolean>(type: T, options: {
2099
+ nullable?: false;
2100
+ array: A;
2101
+ default?: ToType<T, A, false>;
2102
+ } & FieldDefineOption): FieldDefine<T, A, false>;
2103
+ /**
2104
+ * @template {MainFieldType} T
2105
+ * @template {boolean} N
2106
+ * @overload
2107
+ * @param {T} type
2108
+ * @param {{
2109
+ * nullable: N;
2110
+ * array?: false;
2111
+ * default?: ToType<T, false, N>;
2112
+ * } & FieldDefineOption} options
2113
+ * @returns {FieldDefine<T, false, N>}
2114
+ */
2115
+ declare function field<T extends MainFieldType, N extends boolean>(type: T, options: {
2116
+ nullable: N;
2117
+ array?: false;
2118
+ default?: ToType<T, false, N>;
2119
+ } & FieldDefineOption): FieldDefine<T, false, N>;
2120
+ /**
2121
+ * @template {MainFieldType} T
2122
+ * @template {boolean} N
2123
+ * @overload
2124
+ * @param {T} type
2125
+ * @param {{
2126
+ * nullable: N;
2127
+ * array: true;
2128
+ * default?: ToType<T, true, N>;
2129
+ * } & FieldDefineOption} options
2130
+ * @returns {FieldDefine<T, true, N>}
2131
+ */
2132
+ declare function field<T extends MainFieldType, N extends boolean>(type: T, options: {
2133
+ nullable: N;
2134
+ array: true;
2135
+ default?: ToType<T, true, N>;
2136
+ } & FieldDefineOption): FieldDefine<T, true, N>;
2137
+ /**
2138
+ * @template {MainFieldType} T
2139
+ * @template {boolean} A
2140
+ * @template {boolean} N
2141
+ * @overload
2142
+ * @param {T} type
2143
+ * @param {{
2144
+ * nullable: N;
2145
+ * array: A;
2146
+ * default?: ToType<T, A, N>;
2147
+ * } & FieldDefineOption} options
2148
+ * @returns {FieldDefine<T, A, N>}
2149
+ */
2150
+ declare function field<T extends MainFieldType, A extends boolean, N extends boolean>(type: T, options: {
2151
+ nullable: N;
2152
+ array: A;
2153
+ default?: ToType<T, A, N>;
2154
+ } & FieldDefineOption): FieldDefine<T, A, N>;
2155
+ /**
2156
+ * @template {MainFieldType} T
2157
+ * @overload
2158
+ * @param {T} type
2159
+ * @param {{
2160
+ * nullable?: boolean;
2161
+ * array?: boolean;
2162
+ * default?: ToType<T, boolean, boolean>;
2163
+ * } & FieldDefineOption} options
2164
+ * @returns {FieldDefine<T, boolean, boolean>}
2165
+ */
2166
+ declare function field<T extends MainFieldType>(type: T, options: {
2167
+ nullable?: boolean;
2168
+ array?: boolean;
2169
+ default?: ToType<T, boolean, boolean>;
2170
+ } & FieldDefineOption): FieldDefine<T, boolean, boolean>;
2171
+
2172
+ /**
2173
+ *
2174
+ * @param {boolean} [d]
2175
+ */
2176
+ declare function setDevelopment(d?: boolean): void;
2177
+ declare let isDevelopment: boolean;
2178
+
2179
+ export { Build, type BuildValue, type ClassDecorator, type Column, type ColumnOptions, Connection, type Constraint, type CountArg, Create, Destroy, type Environment, type FieldDecorator, type FieldDefine, type FieldDefineOption, type FieldDefineType, type FieldType, type FieldTypeDefine, type FieldValue, type Fields, type FindRange, type GetName, type IConnection, type Index, type IndexInfo, type IndexOptions, type Join, type JoinType, type MainFieldType, type MatchArg, type MaybePromise, Model, type Options, PseudoDestroy, type Querier, Query, type QueryOptions, type Queryable, Save, Select, type SelectArg, SetValue, Submodel, type Support, type TableDefine, type TableType, type ToFieldType, type ToType, type TransactionFn, Where, type WhereItem, type WhereLike, type WhereOr, type WhereRaw, type WhereValue, type Wheres, creating, decrement, field as define, deleted, deleting, divide, field$1 as field, getPrimaryKeys, id, immutable, increment, index, isDevelopment, isPseudo, submodel as model, multiply, now, primary, prop, pseudo, setDevelopment, sort, submodel, toNot, undeleted, updating, values, withDeleted };