imodel 0.0.0 → 0.2.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,2190 @@
1
+ /*!
2
+ * imodel v0.2.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 | (string | number | bigint | boolean)[]} 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 | (string | number | bigint | boolean)[];
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
+ type FieldSpecificValue = (string | number | bigint | boolean)[] | string | number | bigint | boolean | null | typeof now;
628
+ type FieldSpecific = FieldSpecificValue | {
629
+ value: FieldSpecificValue;
630
+ computed?(): PromiseLike<FieldSpecificValue> | FieldSpecificValue;
631
+ };
632
+ interface FieldDefineOption {
633
+ /** 精确度 */
634
+ precision?: number;
635
+ /** 缩放比 */
636
+ scale?: number;
637
+ /** 占用空间大小 */
638
+ size?: number;
639
+ /** 是否为主键 */
640
+ primary?: number | boolean;
641
+ /** 序列字段 */
642
+ serial?: boolean;
643
+ /** 唯一索引? */
644
+ unique?: boolean;
645
+ /** 索引信息 */
646
+ index?: string | boolean;
647
+ /** 创建时,自定义数据 */
648
+ creating?: FieldSpecific;
649
+ /** 更新时,自定义数据 */
650
+ updating?: FieldSpecific;
651
+ /** 伪删除时,自定义数据 */
652
+ deleting?: FieldSpecific;
653
+ /** 是否为固定值 */
654
+ immutable?: boolean;
655
+ /** 文本查询 */
656
+ text?: boolean;
657
+ /** 排序顺序,绝对值表示在排序列表中的顺序,负数表示逆序排序, 0 表示不排序 */
658
+ sort?: number;
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
+ }
665
+ /** 字段类型信息 */
666
+ interface FieldDefine<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> extends FieldTypeDefine<T, A, N>, FieldDefineOption {
667
+ /** 默认值 */
668
+ default?: ToType<T, A, N>;
669
+ constraints?: Record<string, Constraint>;
670
+ }
671
+ interface FieldTypeDefine<T extends MainFieldType = MainFieldType, A extends boolean = boolean, N extends boolean = boolean> {
672
+ /** 字段的基本类型 */
673
+ type: T;
674
+ /** 是否可为空 */
675
+ nullable: N;
676
+ /** 是否为数组 */
677
+ array: A;
678
+ }
679
+ 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;
680
+ type FieldDefineType<F extends FieldTypeDefine> = F extends FieldTypeDefine<infer T, infer A, infer N> ? ToType<T, A, N> : never;
681
+ type Fields<T extends MainFieldType = MainFieldType> = Record<string, FieldDefine<T>>;
682
+ type FieldValue<T extends Fields> = {
683
+ [K in keyof T]: FieldDefineType<T[K]>;
684
+ };
685
+ interface IndexOptions {
686
+ unique?: boolean;
687
+ name?: string;
688
+ include?: string[];
689
+ }
690
+ interface IndexInfo extends IndexOptions {
691
+ fields: string[];
692
+ }
693
+ interface Index extends IndexInfo {
694
+ name: string;
695
+ }
696
+ interface TableDefine<T extends Fields = Fields> {
697
+ /** 字段信息 */
698
+ readonly fields: T;
699
+ /** 表名 */
700
+ readonly table?: string | VirtualTable;
701
+ /** 是否启用软删除 */
702
+ readonly pseudo?: string;
703
+ /** 索引信息 */
704
+ readonly indexes?: readonly IndexInfo[];
705
+ }
706
+
707
+ type deleted = typeof deleted;
708
+ declare const deleted: unique symbol;
709
+ type undeleted = typeof undeleted;
710
+ declare const undeleted: unique symbol;
711
+ type withDeleted = typeof withDeleted;
712
+ declare const withDeleted: unique symbol;
713
+ type FindRange = deleted | undeleted | withDeleted;
714
+
715
+ type Select = {
716
+ field: string;
717
+ table?: string;
718
+ fn?: string;
719
+ };
720
+ declare namespace Select {
721
+ type Param = boolean | string | Select;
722
+ }
723
+ type JoinType = 'left' | 'right' | 'inner' | 'full';
724
+ interface Join<T extends TableDefine = TableDefine> {
725
+ type: JoinType;
726
+ table: T;
727
+ /** 关联项目 { [this table field]: base table field } */
728
+ on: {
729
+ [k: string]: string;
730
+ };
731
+ }
732
+ interface Options {
733
+ range?: FindRange;
734
+ select?: Record<string, Select> | null;
735
+ /** 排序配置,true 表示逆序 */
736
+ sort?: [field: string, desc: boolean][];
737
+ /** 匹配信息 */
738
+ where: WhereValue[];
739
+ /** 偏移量 */
740
+ offset?: number;
741
+ /** 最大返回数 */
742
+ limit?: number;
743
+ update?: Record<string, SetValue>;
744
+ alias?: string;
745
+ }
746
+ interface Queryable<T extends Fields = Fields> extends TableDefine<T> {
747
+ readonly options: Options;
748
+ }
749
+
750
+ interface ColumnOptions<T = unknown> extends FieldDefineOption {
751
+ /**
752
+ * 是否可为空
753
+ * @default true
754
+ */
755
+ nullable?: boolean;
756
+ /** 是否为数组格式 */
757
+ array?: boolean;
758
+ /** 默认值 */
759
+ default?: T extends never ? never : T;
760
+ }
761
+ interface Column<T> extends ColumnOptions<T> {
762
+ name: string;
763
+ type: string;
764
+ }
765
+
766
+ /** 特性支持情况 */
767
+ interface Support {
768
+ /** 是否支持 sql 查询 */
769
+ sql?: boolean;
770
+ /** 是否支持数组类型 */
771
+ array?: boolean;
772
+ /** 是否支持对象存储 */
773
+ object?: boolean;
774
+ /** 是否支持递归查询 */
775
+ recursive?: boolean;
776
+ [key: string]: undefined | boolean;
777
+ }
778
+
779
+ type MaybePromise<T> = PromiseLike<T> | T;
780
+
781
+ declare const Destroy: unique symbol;
782
+ interface Destroy {
783
+ [Destroy](connection: Connection, run: (data: any) => Promise<object | null>, table: TableDefine<Fields<MainFieldType>>): PromiseLike<this | null>;
784
+ }
785
+ declare const PseudoDestroy: unique symbol;
786
+ interface PseudoDestroy {
787
+ [PseudoDestroy](connection: Connection, update: Record<string, SetValue>, run: (data: any) => Promise<object | null>, table: TableDefine<Fields<MainFieldType>>): PromiseLike<this | null>;
788
+ }
789
+ declare const Save: unique symbol;
790
+ interface Save {
791
+ [Save](connection: Connection, run: (data: any, newData?: any) => Promise<object | null>, newData: Record<string, any> | null, table: TableDefine): PromiseLike<this | null>;
792
+ }
793
+ declare const Create: unique symbol;
794
+ interface Create<T = unknown> {
795
+ [Create](connection: Connection, data: object, run: (data: any) => Promise<object>, table: TableDefine): PromiseLike<T>;
796
+ }
797
+ declare const Build: unique symbol;
798
+ interface Build<T = unknown> {
799
+ [Build](data: object, others: object | boolean): T;
800
+ }
801
+
802
+ type TableType = '' | 'table' | 'view';
803
+ interface CountArg extends Omit<TableDefine, 'table'>, Omit<Options, 'select'> {
804
+ table: string;
805
+ }
806
+ interface SelectArg extends CountArg {
807
+ select: [string, Select][];
808
+ }
809
+ type GetName = (table?: string) => string;
810
+ interface MatchArg extends Omit<TableDefine<Fields<keyof FieldType>>, 'table'> {
811
+ table: string;
812
+ where?: WhereValue[];
813
+ }
814
+ type BuildValue<T extends TableDefine> = T extends Build<infer R> ? R : object;
815
+ interface IConnection<E extends object = object> {
816
+ /** 数据库类型 */
817
+ readonly dbType: string;
818
+ /** 数据库版本 */
819
+ dbVersion(environment: Environment<E>): PromiseLike<string>;
820
+ exec(environment: Environment<E>, ...values: any): Promise<number>;
821
+ /**
822
+ * 执行一条语句
823
+ * @param sql 要执行的 SQL 语句
824
+ */
825
+ query(environment: Environment<E>, ...values: any): PromiseLike<any[]>;
826
+ type(environment: Environment<E>, table: string): PromiseLike<TableType | null>;
827
+ insert(environment: Environment<E>, table: string, fields: Fields<keyof FieldType>, data: object[], key: string[]): PromiseLike<any[]>;
828
+ update(environment: Environment<E>, args: MatchArg, update: Record<string, SetValue>): PromiseLike<number>;
829
+ updateReturn(environment: Environment<E>, args: MatchArg, update: Record<string, SetValue>, returning: string[]): PromiseLike<any[]>;
830
+ 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>;
831
+ 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[]>;
832
+ count(environment: Environment<E>, argv: CountArg): PromiseLike<number>;
833
+ select(environment: Environment<E>, argv: SelectArg): PromiseLike<any[]>;
834
+ delete(environment: Environment<E>, argv: MatchArg): PromiseLike<number>;
835
+ deleteReturn(environment: Environment<E>, argv: MatchArg, returning: string[]): PromiseLike<any[]>;
836
+ createTable(environment: Environment<E>, table: string, fields: Column<any>[]): PromiseLike<number>;
837
+ dropTable(environment: Environment<E>, table: string): PromiseLike<number>;
838
+ renameTable(environment: Environment<E>, table: string, newName: string): PromiseLike<number>;
839
+ addColumn(environment: Environment<E>, table: string, column: string, type: string, options: ColumnOptions<any>): PromiseLike<number>;
840
+ changeColumn(environment: Environment<E>, table: string, column: string, type: string, options: ColumnOptions<any>): PromiseLike<number>;
841
+ changeColumnNull(environment: Environment<E>, table: string, column: string, nullable: boolean): PromiseLike<number>;
842
+ dropColumn(environment: Environment<E>, table: string, column: string): PromiseLike<number>;
843
+ renameColumn(environment: Environment<E>, table: string, column: string, newName: string): PromiseLike<number>;
844
+ addIndex(environment: Environment<E>, table: string, name: string, fields: string[], options: IndexOptions): PromiseLike<number>;
845
+ dropIndex(environment: Environment<E>, table: string, name: string): PromiseLike<number>;
846
+ createView(environment: Environment<E>, name: string, q: SelectArg): PromiseLike<number>;
847
+ dropView(environment: Environment<E>, name: string): PromiseLike<number>;
848
+ createMaterializedView(environment: Environment<E>, name: string, q: SelectArg): PromiseLike<number>;
849
+ dropMaterializedView(environment: Environment<E>, name: string): PromiseLike<number>;
850
+ transaction<R>(environment: Environment<E>, fn: (t: E) => R | PromiseLike<R>): PromiseLike<R>;
851
+ }
852
+ interface Skip {
853
+ immutable?: boolean;
854
+ specific?: boolean;
855
+ }
856
+ interface TransactionFn {
857
+ <T>(fn: (t: Connection) => PromiseLike<T> | T): Promise<T>;
858
+ }
859
+ /** @deprecated */
860
+ interface Querier<T> {
861
+ (t: Connection): PromiseLike<T> | T;
862
+ }
863
+
864
+ /**
865
+ * @template {{}} [E={}]
866
+ */
867
+ declare class Connection<E extends {} = {}> {
868
+ /**
869
+ *
870
+ * @param {PromiseLike<IConnection<E>> | IConnection<E>} connection
871
+ * @param {E?} [transaction]
872
+ * @param {Record<string, string>?} [names]
873
+ */
874
+ constructor(connection: PromiseLike<IConnection<E>> | IConnection<E>, transaction?: E | null, names?: Record<string, string> | null);
875
+ /**
876
+ *
877
+ * @param {object} [options]
878
+ * @param {Record<string, string>?} [options.names]
879
+ * @returns {Connection<E>}
880
+ */
881
+ clone({ names }?: {
882
+ names?: Record<string, string> | null | undefined;
883
+ }): Connection<E>;
884
+ /** @return {Promise<string>} */
885
+ dbType(): Promise<string>;
886
+ /** @return {Promise<string>} */
887
+ dbVersion(): Promise<string>;
888
+ /**
889
+ *
890
+ * @param {...any} values
891
+ * @returns {Promise<any[]>}
892
+ */
893
+ query(...values: any[]): Promise<any[]>;
894
+ /**
895
+ *
896
+ * @param {...any} values
897
+ * @returns {Promise<number>}
898
+ */
899
+ exec(...values: any[]): Promise<number>;
900
+ /**
901
+ *
902
+ * @param {string} table
903
+ * @returns {Promise<TableType?>}
904
+ */
905
+ type(table: string): Promise<TableType | null>;
906
+ /**
907
+ * @template T
908
+ * @overload
909
+ * @param {Build<T>} build
910
+ * @param {object} data
911
+ * @param {object | boolean} [saved]
912
+ * @returns {T}
913
+ */
914
+ build<T extends Fields>(build: Build<T>, data: object, saved?: object | boolean): T;
915
+ /**
916
+ * @template {Fields} T
917
+ * @overload
918
+ * @param {TableDefine<T>} table
919
+ * @param {object} data
920
+ * @param {object | boolean} [saved]
921
+ * @returns {FieldValue<T>}
922
+ */
923
+ build<T extends Fields>(table: TableDefine<T>, data: object, saved?: object | boolean): FieldValue<T>;
924
+ /**
925
+ * @template {TableDefine} T
926
+ * @overload
927
+ * @param {T} model
928
+ * @param {object[]} list
929
+ * @returns {Promise<object[]>}
930
+ */
931
+ create<T extends TableDefine>(model: T, list: object[]): Promise<object[]>;
932
+ /**
933
+ * @template {TableDefine} T
934
+ * @overload
935
+ * @param {T} model
936
+ * @param {object} value
937
+ * @returns {Promise<T extends Build<infer R> ? R : object>}
938
+ */
939
+ create<T extends TableDefine>(model: T, value: object): Promise<T extends Build<infer R> ? R : object>;
940
+ /**
941
+ * @template {TableDefine} T
942
+ * @overload
943
+ * @param {T} model
944
+ * @param {object | object[]} value
945
+ * @returns {Promise<object[] | (T extends Build<infer R> ? R : object)>}
946
+ */
947
+ create<T extends TableDefine>(model: T, value: object | object[]): Promise<object[] | (T extends Build<infer R> ? R : object)>;
948
+ /**
949
+ *
950
+ * @template {TableDefine} T
951
+ * @param {T} sql
952
+ * @returns {Promise<T extends Build<infer R > ? R[] : T extends TableDefine<infer F> ? FieldValue<F>[] : never>}
953
+ */
954
+ find<T extends TableDefine>(sql: T): Promise<T extends Build<infer R> ? R[] : T extends TableDefine<infer F> ? FieldValue<F>[] : never>;
955
+ /**
956
+ *
957
+ * @template {TableDefine} T
958
+ * @param {T} sql
959
+ * @returns {Promise<T extends Build<infer R > ? R : T extends TableDefine<infer F> ? FieldValue<F> : never>}
960
+ */
961
+ first<T extends TableDefine>(sql: T): Promise<T extends Build<infer R> ? R : T extends TableDefine<infer F> ? FieldValue<F> : never>;
962
+ /**
963
+ * @template T
964
+ * @param {TableDefine} model
965
+ * @param {T} data
966
+ * @param {Record<string, any>?} [newData]
967
+ * @returns {Promise<(T extends Save ? T : object)?>}
968
+ */
969
+ save<T>(model: TableDefine, data: T, newData?: Record<string, any> | null): Promise<(T extends Save ? T : object) | null>;
970
+ /**
971
+ *
972
+ * @template T
973
+ * @param {TableDefine} tableDef
974
+ * @param {T} data
975
+ * @returns {Promise<(T extends Destroy ? T : object)?>}
976
+ */
977
+ completelyDestroy<T>(tableDef: TableDefine, data: T): Promise<(T extends Destroy ? T : object) | null>;
978
+ /**
979
+ *
980
+ * @template {object} T
981
+ * @param {TableDefine} tableDef
982
+ * @param {T} data
983
+ * @param {Record<string, SetValue>} value
984
+ * @returns {Promise<(T extends PseudoDestroy ? T : object)?>}
985
+ */
986
+ pseudoDestroy<T extends unknown>(tableDef: TableDefine, data: T, value: Record<string, SetValue>): Promise<(T extends PseudoDestroy ? T : object) | null>;
987
+ /**
988
+ * @template {Destroy & PseudoDestroy} T
989
+ * @overload
990
+ * @param {TableDefine} table
991
+ * @param {T} data
992
+ * @param {Record<string, any> | boolean} [update]
993
+ * @returns {Promise<T?>}
994
+ */
995
+ destroy<T extends Destroy & PseudoDestroy>(table: TableDefine, data: T, update?: boolean | Record<string, any> | undefined): Promise<T | null>;
996
+ /**
997
+ * @template {Destroy & PseudoDestroy} T
998
+ * @overload
999
+ * @param {TableDefine} table
1000
+ * @param {T} data
1001
+ * @param {Record<string, any> | boolean} [update]
1002
+ * @returns {Promise<T | object | null>}
1003
+ */
1004
+ destroy<T extends Destroy & PseudoDestroy>(table: TableDefine, data: T, update?: boolean | Record<string, any> | undefined): Promise<T | object | null>;
1005
+ /**
1006
+ * @overload
1007
+ * @param {TableDefine} table
1008
+ * @param {any} data
1009
+ * @param {Record<string, any> | boolean} [update]
1010
+ * @returns {Promise<object?>}
1011
+ */
1012
+ destroy(table: TableDefine, data: any, update?: boolean | Record<string, any> | undefined): Promise<object | null>;
1013
+ /**
1014
+ * @param {Queryable} queryable
1015
+ * @param {Record<string, SetValue> | boolean} [update]
1016
+ * @returns {Promise<number>}
1017
+ */
1018
+ destroyMany(queryable: Queryable, update?: Record<string, SetValue> | boolean): Promise<number>;
1019
+ /**
1020
+ * @template {object | object[]} T
1021
+ * @param {TableDefine} tableDefine
1022
+ * @param {T} data
1023
+ * @param {string[]} [keys]
1024
+ * @returns {Promise<T extends object[] ? object[] : object>}
1025
+ */
1026
+ insert<T extends unknown>({ table, fields }: TableDefine, data: T, keys?: string[]): Promise<T extends object[] ? object[] : object>;
1027
+ /**
1028
+ * @param {TableDefine} tableDefine
1029
+ * @param {Record<string, any>} update
1030
+ * @param {WhereValue[]?} [where]
1031
+ * @param {boolean | Skip} [skip]
1032
+ * @returns {Promise<number>}
1033
+ */
1034
+ update({ table, fields }: TableDefine, update: Record<string, any>, where?: WhereValue[] | null, skip?: boolean | Skip): Promise<number>;
1035
+ /**
1036
+ * @template {Fields<MainFieldType>} T
1037
+ * @param {TableDefine<T>} tableDefine
1038
+ * @param {Record<string, any>} update
1039
+ * @param {string[]?} [returning]
1040
+ * @param {WhereValue[]?} [where]
1041
+ * @param {boolean | Skip} [skip]
1042
+ * @returns {Promise<any[]>}
1043
+ */
1044
+ updateReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, update: Record<string, any>, returning?: string[] | null, where?: WhereValue[] | null, skip?: boolean | Skip): Promise<any[]>;
1045
+ /**
1046
+ * @param {TableDefine} tableDefine
1047
+ * @param {string[]} pKeys
1048
+ * @param {string[]} setKeys
1049
+ * @param {Record<string, any>[]} list
1050
+ * @param {boolean | Skip} [skip]
1051
+ * @returns {Promise<number>}
1052
+ */
1053
+ updateMany({ table, fields }: TableDefine, pKeys: string[], setKeys: string[], list: Record<string, any>[], skip?: boolean | Skip): Promise<number>;
1054
+ /**
1055
+ * @template {Fields<MainFieldType>} T
1056
+ * @param {TableDefine<T>} tableDefine
1057
+ * @param {string[]} pKeys
1058
+ * @param {string[]} setKeys
1059
+ * @param {Record<string, any>[]} list
1060
+ * @param {string[]?} [returning]
1061
+ * @param {boolean | Skip} [skip]
1062
+ * @returns {Promise<any[]>}
1063
+ */
1064
+ updateManyReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, pKeys: string[], setKeys: string[], list: Record<string, any>[], returning?: string[] | null, skip?: boolean | Skip): Promise<any[]>;
1065
+ /**
1066
+ * @param {TableDefine} tableDefine
1067
+ * @param {WhereValue[]} [where]
1068
+ * @returns {Promise<number>}
1069
+ */
1070
+ delete({ table, fields }: TableDefine, where?: WhereValue[]): Promise<number>;
1071
+ /**
1072
+ * @template {Fields<MainFieldType>} T
1073
+ * @param {TableDefine<T>} tableDefine
1074
+ * @param {string[]?} [returning]
1075
+ * @param {WhereValue[]} [where]
1076
+ * @returns {Promise<any[]>}
1077
+ */
1078
+ deleteReturn<T extends Fields<MainFieldType>>({ table, fields }: TableDefine<T>, returning?: string[] | null, where?: WhereValue[]): Promise<any[]>;
1079
+ /**
1080
+ *
1081
+ * @param {Queryable} queryable
1082
+ * @returns {Promise<number>}
1083
+ */
1084
+ count(queryable: Queryable): Promise<number>;
1085
+ /**
1086
+ * @param {Queryable} queryable
1087
+ * @returns {Promise<any[]>}
1088
+ */
1089
+ select(queryable: Queryable): Promise<any[]>;
1090
+ /**
1091
+ * @param {string} table
1092
+ * @param {string} column
1093
+ * @param {string} type
1094
+ * @param {ColumnOptions<any>} options
1095
+ * @returns {Promise<number>}
1096
+ */
1097
+ addColumn(table: string, column: string, type: string, options: ColumnOptions<any>): Promise<number>;
1098
+ /**
1099
+ * @param {string} table
1100
+ * @param {string} column
1101
+ * @param {string} type
1102
+ * @param {ColumnOptions<any>} options
1103
+ * @returns {Promise<number>}
1104
+ */
1105
+ changeColumn(table: string, column: string, type: string, options: ColumnOptions<any>): Promise<number>;
1106
+ /**
1107
+ * @param {string} table
1108
+ * @param {string} column
1109
+ * @param {boolean} nullable
1110
+ * @returns {Promise<number>}
1111
+ */
1112
+ changeColumnNull(table: string, column: string, nullable: boolean): Promise<number>;
1113
+ /**
1114
+ * @param {string} table
1115
+ * @param {string} column
1116
+ * @returns {Promise<number>}
1117
+ */
1118
+ dropColumn(table: string, column: string): Promise<number>;
1119
+ /**
1120
+ * @param {string} table
1121
+ * @param {string} column
1122
+ * @param {string} newName
1123
+ * @returns {Promise<number>}
1124
+ */
1125
+ renameColumn(table: string, column: string, newName: string): Promise<number>;
1126
+ /**
1127
+ * @param {string} table
1128
+ * @param {string} name
1129
+ * @param {string[]} fields
1130
+ * @param {IndexOptions} [options]
1131
+ * @returns {Promise<number>}
1132
+ */
1133
+ addIndex(table: string, name: string, fields: string[], options?: IndexOptions): Promise<number>;
1134
+ /**
1135
+ * @param {string} table
1136
+ * @param {string} name
1137
+ * @returns {Promise<number>}
1138
+ */
1139
+ dropIndex(table: string, name: string): Promise<number>;
1140
+ /**
1141
+ * @param {string} table
1142
+ * @param {Column<any>[]} fields
1143
+ * @returns {Promise<number>}
1144
+ */
1145
+ createTable(table: string, fields: Column<any>[]): Promise<number>;
1146
+ /**
1147
+ * @param {string} table
1148
+ * @returns {Promise<number>}
1149
+ */
1150
+ dropTable(table: string): Promise<number>;
1151
+ /**
1152
+ * @param {string} table
1153
+ * @param {string} newName
1154
+ * @returns {Promise<number>}
1155
+ */
1156
+ renameTable(table: string, newName: string): Promise<number>;
1157
+ /**
1158
+ * @param {string} view
1159
+ * @param {Queryable} queryable
1160
+ * @returns {Promise<number>}
1161
+ */
1162
+ createView(view: string, queryable: Queryable): Promise<number>;
1163
+ /**
1164
+ * @param {string} view
1165
+ * @returns {Promise<number>}
1166
+ */
1167
+ dropView(view: string): Promise<number>;
1168
+ /**
1169
+ * @param {string} view
1170
+ * @param {Queryable} queryable
1171
+ * @returns {Promise<number>}
1172
+ */
1173
+ createMaterializedView(view: string, queryable: Queryable): Promise<number>;
1174
+ /**
1175
+ * @param {string} view
1176
+ * @returns {Promise<number>}
1177
+ */
1178
+ dropMaterializedView(view: string): Promise<number>;
1179
+ abort(): boolean;
1180
+ /**
1181
+ * @template T
1182
+ * @overload
1183
+ * @param {(t: Connection) => PromiseLike<T> | T} fn
1184
+ * @returns {Promise<T>}
1185
+ */
1186
+ transaction<T>(fn: (t: Connection) => PromiseLike<T> | T): Promise<T>;
1187
+ /**
1188
+ * @overload
1189
+ * @returns {[Promise<void>, commit: () => Promise<void>, rollback: (e?: any) => Promise<void>]}
1190
+ */
1191
+ transaction(): [Promise<void>, commit: () => Promise<void>, rollback: (e?: any) => Promise<void>];
1192
+ #private;
1193
+ }
1194
+
1195
+ /** @import { Fields } from './types' */
1196
+ /**
1197
+ *
1198
+ * @param {Fields} fields
1199
+ * @returns {string[]}
1200
+ */
1201
+ declare function getPrimaryKeys(fields: Fields): string[];
1202
+
1203
+ /**
1204
+ *
1205
+ * @param {Queryable} model
1206
+ * @returns
1207
+ */
1208
+ declare function isPseudo(model: Queryable): boolean;
1209
+
1210
+ /**
1211
+ * @template {keyof FieldType} T
1212
+ * @overload
1213
+ * @param {T} type
1214
+ * @param {{
1215
+ * nullable?: false;
1216
+ * array?: false;
1217
+ * default?: ToType<T, false, false>;
1218
+ * [k: string]: any;
1219
+ * } & FieldDefineOption} [options]
1220
+ * @returns {FieldDecorator<ToType<T, false, false>>}
1221
+ */
1222
+ declare function field$1<T extends keyof FieldType>(type: T, options?: ({
1223
+ [k: string]: any;
1224
+ nullable?: false;
1225
+ array?: false;
1226
+ default?: ToType<T, false, false>;
1227
+ } & FieldDefineOption) | undefined): FieldDecorator<ToType<T, false, false>>;
1228
+ /**
1229
+ * @template {keyof FieldType} T
1230
+ * @overload
1231
+ * @param {T} type
1232
+ * @param {{
1233
+ * nullable?: false;
1234
+ * array: true;
1235
+ * default?: ToType<T, true, false>;
1236
+ * [k: string]: any;
1237
+ * } & FieldDefineOption} options
1238
+ * @returns {FieldDecorator<ToType<T, true, false>>}
1239
+ */
1240
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1241
+ nullable?: false;
1242
+ array: true;
1243
+ default?: ToType<T, true, false>;
1244
+ [k: string]: any;
1245
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, false>>;
1246
+ /**
1247
+ * @template {keyof FieldType} T
1248
+ * @overload
1249
+ * @param {T} type
1250
+ * @param {true} array
1251
+ * @param {{
1252
+ * nullable?: false;
1253
+ * default?: ToType<T, true, false>;
1254
+ * [k: string]: any;
1255
+ * } & FieldDefineOption} options
1256
+ * @returns {FieldDecorator<ToType<T, true, false>>}
1257
+ */
1258
+ declare function field$1<T extends keyof FieldType>(type: T, array: true, options: {
1259
+ nullable?: false;
1260
+ default?: ToType<T, true, false>;
1261
+ [k: string]: any;
1262
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, false>>;
1263
+ /**
1264
+ * @template {keyof FieldType} T
1265
+ * @overload
1266
+ * @param {T} type
1267
+ * @param {{
1268
+ * nullable: true;
1269
+ * array?: false;
1270
+ * default?: ToType<T, false, true>;
1271
+ * [k: string]: any;
1272
+ * } & FieldDefineOption} options
1273
+ * @returns {FieldDecorator<ToType<T, false, true>>}
1274
+ */
1275
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1276
+ nullable: true;
1277
+ array?: false;
1278
+ default?: ToType<T, false, true>;
1279
+ [k: string]: any;
1280
+ } & FieldDefineOption): FieldDecorator<ToType<T, false, true>>;
1281
+ /**
1282
+ * @template {keyof FieldType} T
1283
+ * @overload
1284
+ * @param {T} type
1285
+ * @param {{
1286
+ * nullable: true;
1287
+ * array: true;
1288
+ * default?: ToType<T, true, true>;
1289
+ * [k: string]: any;
1290
+ * } & FieldDefineOption} options
1291
+ * @returns {FieldDecorator<ToType<T, true, true>>}
1292
+ */
1293
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1294
+ nullable: true;
1295
+ array: true;
1296
+ default?: ToType<T, true, true>;
1297
+ [k: string]: any;
1298
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, true>>;
1299
+ /**
1300
+ * @template {keyof FieldType} T
1301
+ * @overload
1302
+ * @param {T} type
1303
+ * @param {true} array
1304
+ * @param {{
1305
+ * nullable: true;
1306
+ * default?: ToType<T, true, true>;
1307
+ * [k: string]: any;
1308
+ * } & FieldDefineOption} options
1309
+ * @returns {FieldDecorator<ToType<T, true, true>>}
1310
+ */
1311
+ declare function field$1<T extends keyof FieldType>(type: T, array: true, options: {
1312
+ nullable: true;
1313
+ default?: ToType<T, true, true>;
1314
+ [k: string]: any;
1315
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, true>>;
1316
+ /**
1317
+ * @template {keyof FieldType} T
1318
+ * @template {boolean} A
1319
+ * @overload
1320
+ * @param {T} type
1321
+ * @param {{
1322
+ * nullable: true;
1323
+ * array: A;
1324
+ * default?: ToType<T, A, true>;
1325
+ * [k: string]: any;
1326
+ * } & FieldDefineOption} options
1327
+ * @returns {FieldDecorator<ToType<T, A, true>>}
1328
+ */
1329
+ declare function field$1<T extends keyof FieldType, A extends boolean>(type: T, options: {
1330
+ nullable: true;
1331
+ array: A;
1332
+ default?: ToType<T, A, true>;
1333
+ [k: string]: any;
1334
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, true>>;
1335
+ /**
1336
+ * @template {keyof FieldType} T
1337
+ * @template {boolean} A
1338
+ * @overload
1339
+ * @param {T} type
1340
+ * @param {{
1341
+ * nullable?: false;
1342
+ * array: A;
1343
+ * default?: ToType<T, A, false>;
1344
+ * [k: string]: any;
1345
+ * } & FieldDefineOption} options
1346
+ * @returns {FieldDecorator<ToType<T, A, false>>}
1347
+ */
1348
+ declare function field$1<T extends keyof FieldType, A extends boolean>(type: T, options: {
1349
+ nullable?: false;
1350
+ array: A;
1351
+ default?: ToType<T, A, false>;
1352
+ [k: string]: any;
1353
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, false>>;
1354
+ /**
1355
+ * @template {keyof FieldType} T
1356
+ * @template {boolean} N
1357
+ * @overload
1358
+ * @param {T} type
1359
+ * @param {{
1360
+ * nullable: N;
1361
+ * array?: false;
1362
+ * default?: ToType<T, false, N>;
1363
+ * [k: string]: any;
1364
+ * } & FieldDefineOption} options
1365
+ * @returns {FieldDecorator<ToType<T, false, N>>}
1366
+ */
1367
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, options: {
1368
+ nullable: N;
1369
+ array?: false;
1370
+ default?: ToType<T, false, N>;
1371
+ [k: string]: any;
1372
+ } & FieldDefineOption): FieldDecorator<ToType<T, false, N>>;
1373
+ /**
1374
+ * @template {keyof FieldType} T
1375
+ * @template {boolean} N
1376
+ * @overload
1377
+ * @param {T} type
1378
+ * @param {{
1379
+ * nullable: N;
1380
+ * array: true;
1381
+ * default?: ToType<T, true, N>;
1382
+ * [k: string]: any;
1383
+ * } & FieldDefineOption} options
1384
+ * @returns {FieldDecorator<ToType<T, true, N>>}
1385
+ */
1386
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, options: {
1387
+ nullable: N;
1388
+ array: true;
1389
+ default?: ToType<T, true, N>;
1390
+ [k: string]: any;
1391
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, N>>;
1392
+ /**
1393
+ * @template {keyof FieldType} T
1394
+ * @template {boolean} N
1395
+ * @overload
1396
+ * @param {T} type
1397
+ * @param {true} array
1398
+ * @param {{
1399
+ * nullable: N;
1400
+ * default?: ToType<T, true, N>;
1401
+ * [k: string]: any;
1402
+ * } & FieldDefineOption} options
1403
+ * @returns {FieldDecorator<ToType<T, true, N>>}
1404
+ */
1405
+ declare function field$1<T extends keyof FieldType, N extends boolean>(type: T, array: true, options: {
1406
+ nullable: N;
1407
+ default?: ToType<T, true, N>;
1408
+ [k: string]: any;
1409
+ } & FieldDefineOption): FieldDecorator<ToType<T, true, N>>;
1410
+ /**
1411
+ * @template {keyof FieldType} T
1412
+ * @template {boolean} A
1413
+ * @template {boolean} N
1414
+ * @overload
1415
+ * @param {T} type
1416
+ * @param {{
1417
+ * nullable: N;
1418
+ * array: A;
1419
+ * default?: ToType<T, A, N>;
1420
+ * [k: string]: any;
1421
+ * } & FieldDefineOption} options
1422
+ * @returns {FieldDecorator<ToType<T, A, N>>}
1423
+ */
1424
+ declare function field$1<T extends keyof FieldType, A extends boolean, N extends boolean>(type: T, options: {
1425
+ nullable: N;
1426
+ array: A;
1427
+ default?: ToType<T, A, N>;
1428
+ [k: string]: any;
1429
+ } & FieldDefineOption): FieldDecorator<ToType<T, A, N>>;
1430
+ /**
1431
+ * @template {keyof FieldType} T
1432
+ * @overload
1433
+ * @param {T} type
1434
+ * @param {{
1435
+ * nullable?: boolean;
1436
+ * array?: boolean;
1437
+ * default?: ToType<T, boolean, boolean>;
1438
+ * [k: string]: any;
1439
+ * } & FieldDefineOption} options
1440
+ * @returns {FieldDecorator<ToType<T, boolean, boolean>>}
1441
+ */
1442
+ declare function field$1<T extends keyof FieldType>(type: T, options: {
1443
+ nullable?: boolean;
1444
+ array?: boolean;
1445
+ default?: ToType<T, boolean, boolean>;
1446
+ [k: string]: any;
1447
+ } & FieldDefineOption): FieldDecorator<ToType<T, boolean, boolean>>;
1448
+
1449
+ /** @import { ToFieldType } from '../types' */
1450
+ /** @import { FieldDecorator } from './index.mjs' */
1451
+ /**
1452
+ * @param {object} [options]
1453
+ * @param {number?} [options.sort]
1454
+ * @returns {FieldDecorator<ToFieldType<'id'>>}
1455
+ */
1456
+ declare function id({ sort }?: {
1457
+ sort?: number | null | undefined;
1458
+ }): FieldDecorator<ToFieldType<"id">>;
1459
+
1460
+ /** @import { FieldDecorator } from './index.mjs' */
1461
+ /**
1462
+ * @param {string} prop
1463
+ * @param {any} value
1464
+ * @returns {FieldDecorator<any>}
1465
+ */
1466
+ declare function prop(prop: string, value: any): FieldDecorator<any>;
1467
+
1468
+ /** @import { FieldDecorator } from './index.mjs' */
1469
+ /**
1470
+ *
1471
+ * @param {number} [primary]
1472
+ * @returns {FieldDecorator<any>}
1473
+ */
1474
+ declare function primary(primary?: number): FieldDecorator<any>;
1475
+
1476
+ /** @import { FieldDecorator } from './index.mjs' */
1477
+ /** @returns {FieldDecorator<any>} */
1478
+ declare function immutable(): FieldDecorator<any>;
1479
+
1480
+ /**
1481
+ * 索引信息
1482
+ * @overload
1483
+ * @param {string[]} fields
1484
+ * @param {IndexOptions} [options]
1485
+ * @returns {ClassDecorator}
1486
+ */
1487
+ declare function index(fields: string[], options?: IndexOptions | undefined): ClassDecorator;
1488
+ /**
1489
+ * 索引信息
1490
+ * @overload
1491
+ * @param {string} [name]
1492
+ * @param {boolean} [unique]
1493
+ * @returns {FieldDecorator<any>}
1494
+ */
1495
+ declare function index(name?: string | undefined, unique?: boolean | undefined): FieldDecorator<any>;
1496
+ /**
1497
+ * 索引信息
1498
+ * @overload
1499
+ * @param {boolean} [unique]
1500
+ * @returns {FieldDecorator<any>}
1501
+ */
1502
+ declare function index(unique?: boolean | undefined): FieldDecorator<any>;
1503
+
1504
+ /** @import { FieldDecorator } from './index.mjs' */
1505
+ /**
1506
+ * 默认排序顺序,绝对值表示在排序列表中的顺序,负数表示逆序排序, 0 表示不排序
1507
+ * @param {number} sort
1508
+ * @returns {FieldDecorator<any>}
1509
+ */
1510
+ declare function sort(sort: number): FieldDecorator<any>;
1511
+
1512
+ /** @import { ClassDecorator } from './index.mjs' */
1513
+ /**
1514
+ *
1515
+ * @param {string} pseudo
1516
+ * @returns {ClassDecorator}
1517
+ */
1518
+ declare function pseudo(pseudo: string): ClassDecorator;
1519
+
1520
+ /**
1521
+ *
1522
+ * @overload
1523
+ * @param {string} table
1524
+ * @returns {ClassDecorator}
1525
+ */
1526
+ declare function submodel(table: string): ClassDecorator;
1527
+ /**
1528
+ * @template {Record<string, any>} T
1529
+ * @overload
1530
+ * @param {TableDefine & {new(...a: any): T}} type
1531
+ * @param {Record<string, Constraint>} constraints
1532
+ * @param {true} array
1533
+ * @param {FieldDefineOption} [options]
1534
+ * @returns {FieldDecorator<T[]>}
1535
+ */
1536
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1537
+ new (...a: any): T;
1538
+ }, constraints: Record<string, Constraint>, array: true, options?: FieldDefineOption | undefined): FieldDecorator<T[]>;
1539
+ /**
1540
+ * @template {Record<string, any>} T
1541
+ * @overload
1542
+ * @param {TableDefine & {new(...a: any): T}} type
1543
+ * @param {Record<string, Constraint>} constraints
1544
+ * @param {false} [array]
1545
+ * @param {FieldDefineOption} [options]
1546
+ * @returns {FieldDecorator<T>}
1547
+ */
1548
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1549
+ new (...a: any): T;
1550
+ }, constraints: Record<string, Constraint>, array?: false | undefined, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1551
+ /**
1552
+ * @template {Record<string, any>} T
1553
+ * @overload
1554
+ * @param {TableDefine & {new(...a: any): T}} type
1555
+ * @param {Record<string, Constraint>} constraints
1556
+ * @param {FieldDefineOption} [options]
1557
+ * @returns {FieldDecorator<T>}
1558
+ */
1559
+ declare function submodel<T extends Record<string, any>>(type: TableDefine & {
1560
+ new (...a: any): T;
1561
+ }, constraints: Record<string, Constraint>, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1562
+ /**
1563
+ * @template {Record<string, any>} T
1564
+ * @template {boolean} [A=boolean]
1565
+ * @overload
1566
+ * @param {TableDefine & {new(...a: any): T}} type
1567
+ * @param {Record<string, Constraint>} constraints
1568
+ * @param {A} array
1569
+ * @param {FieldDefineOption} [options]
1570
+ * @returns {FieldDecorator<A extends false ? T : A extends true ? T[] : T | T[]>}
1571
+ */
1572
+ declare function submodel<T extends Record<string, any>, A extends boolean = boolean>(type: TableDefine & {
1573
+ new (...a: any): T;
1574
+ }, constraints: Record<string, Constraint>, array: A, options?: FieldDefineOption | undefined): FieldDecorator<A extends false ? T : A extends true ? T[] : T | T[]>;
1575
+ /**
1576
+ * @template {object} T
1577
+ * @overload
1578
+ * @param {TableDefine} type
1579
+ * @param {Record<string, Constraint>} constraints
1580
+ * @param {true} 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: true, options?: FieldDefineOption | undefined): FieldDecorator<T[]>;
1585
+ /**
1586
+ * @template {object} T
1587
+ * @overload
1588
+ * @param {TableDefine} type
1589
+ * @param {Record<string, Constraint>} constraints
1590
+ * @param {false} [array]
1591
+ * @param {FieldDefineOption} [options]
1592
+ * @returns {FieldDecorator<T>}
1593
+ */
1594
+ declare function submodel<T extends Record<string, any>>(type: TableDefine, constraints: Record<string, Constraint>, array?: false | undefined, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1595
+ /**
1596
+ * @template {object} T
1597
+ * @overload
1598
+ * @param {TableDefine} type
1599
+ * @param {Record<string, Constraint>} constraints
1600
+ * @param {FieldDefineOption} [options]
1601
+ * @returns {FieldDecorator<T>}
1602
+ */
1603
+ declare function submodel<T extends Record<string, any>>(type: TableDefine, constraints: Record<string, Constraint>, options?: FieldDefineOption | undefined): FieldDecorator<T>;
1604
+ /**
1605
+ * @template {object} T
1606
+ * @template {boolean} [A=boolean]
1607
+ * @overload
1608
+ * @param {TableDefine} type
1609
+ * @param {Record<string, Constraint>} constraints
1610
+ * @param {A} array
1611
+ * @param {FieldDefineOption} [options]
1612
+ * @returns {FieldDecorator<A extends false ? T :A extends true ? T[] : T | T[]>}
1613
+ */
1614
+ 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[]>;
1615
+
1616
+ /**
1617
+ * @param {number} [precision]
1618
+ * @returns {FieldDecorator<Date?>}
1619
+ */
1620
+ declare function creating(precision?: number): FieldDecorator<Date | null>;
1621
+ /**
1622
+ * @param {number} [precision]
1623
+ * @returns {FieldDecorator<Date?>}
1624
+ */
1625
+ declare function updating(precision?: number): FieldDecorator<Date | null>;
1626
+ /**
1627
+ * @param {number} [precision]
1628
+ * @returns {FieldDecorator<Date?>}
1629
+ */
1630
+ declare function deleting(precision?: number): FieldDecorator<Date | null>;
1631
+
1632
+ type ClassDecorator = (val: Function, ctx: ClassDecoratorContext) => any;
1633
+ type FieldDecorator<T> = (val: {
1634
+ get(): T;
1635
+ set(v: T): void;
1636
+ }, ctx: ClassAccessorDecoratorContext) => any;
1637
+
1638
+ type QueryOptions<T extends Fields, TB extends unknown = any> = {
1639
+ table: string;
1640
+ fields: T;
1641
+ pseudo?: string | undefined;
1642
+ build?: ((a: object, b?: object | boolean) => TB) | null | undefined;
1643
+ };
1644
+ /**
1645
+ * @template {Fields} T
1646
+ * @template {object} [TB=object]
1647
+ * @typedef {object} QueryOptions
1648
+ * @property {string} table
1649
+ * @property {T} fields
1650
+ * @property {string} [pseudo]
1651
+ * @property {((a: object, b?: object | boolean) => TB)?} [build]
1652
+ */
1653
+ /**
1654
+ * @template {Fields} T
1655
+ * @template {object} [TB=object]
1656
+ * @implements {Queryable<T>}
1657
+ */
1658
+ declare class Query<T extends Fields, TB extends unknown = any> implements Queryable {
1659
+ /**
1660
+ * @template {Fields} F
1661
+ * @template {new (o: QueryOptions<F>) => Query<F>} T
1662
+ * @this {T}
1663
+ * @param {string} table
1664
+ * @param {F} fields
1665
+ * @param {string} [pseudo]
1666
+ * @returns {InstanceType<T>}
1667
+ */
1668
+ 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>;
1669
+ /**
1670
+ * @param {QueryOptions<T, TB> | Query<T, TB>} options
1671
+ */
1672
+ constructor(options: QueryOptions<T, TB> | Query<T, TB>);
1673
+ /** @readonly @type {string} */
1674
+ readonly table: string;
1675
+ /** @readonly @type {T} */
1676
+ readonly fields: T;
1677
+ /** @readonly @type {string} */
1678
+ readonly pseudo: string;
1679
+ get options(): Options;
1680
+ /**
1681
+ * @param {QueryOptions<T, TB> | Query<T, TB>} options
1682
+ * @returns {Query<T, TB>}
1683
+ */
1684
+ _create(options: QueryOptions<T, TB> | Query<T, TB>): Query<T, TB>;
1685
+ /**
1686
+ * @returns {ReturnType<this['_create']>}
1687
+ */
1688
+ clone(): ReturnType<this["_create"]>;
1689
+ /** @returns {this} */
1690
+ deleted(): this;
1691
+ /** @returns {this} */
1692
+ undeleted(): this;
1693
+ /** @returns {this} */
1694
+ withDeleted(): this;
1695
+ /**
1696
+ * 增加排序项
1697
+ * @param {...string | boolean | [string, boolean?]} sort
1698
+ * @returns {this}
1699
+ */
1700
+ sort(...sort: (string | boolean | [string, boolean?])[]): this;
1701
+ /**
1702
+ * 设置获取到的最大数量
1703
+ * @param {number} [limit]
1704
+ * @returns {this}
1705
+ */
1706
+ limit(limit?: number): this;
1707
+ /**
1708
+ * 跳过的记录数
1709
+ * @param {number} [offset]
1710
+ * @returns {this}
1711
+ */
1712
+ offset(offset?: number): this;
1713
+ /**
1714
+ * @overload
1715
+ * @param {Wheres} matches
1716
+ * @returns {this}
1717
+ */
1718
+ where(matches: Wheres): this;
1719
+ /**
1720
+ *
1721
+ * @overload
1722
+ * @param {TemplateStringsArray} where
1723
+ * @param {...any} values
1724
+ * @returns {this}
1725
+ */
1726
+ where(where: TemplateStringsArray, ...values: any[]): this;
1727
+ /**
1728
+ * @overload
1729
+ * @param {string} field
1730
+ * @param {any} value
1731
+ * @returns {this}
1732
+ */
1733
+ where(field: string, value: any): this;
1734
+ /**
1735
+ * @overload
1736
+ * @param {string[]} field
1737
+ * @param {any[]} value
1738
+ * @returns {this}
1739
+ */
1740
+ where(field: string[], value: any[]): this;
1741
+ /**
1742
+ * @overload
1743
+ * @param {string} field
1744
+ * @param {string} operator
1745
+ * @param {any} value
1746
+ * @param {boolean} [not]
1747
+ * @returns {this}
1748
+ */
1749
+ where(field: string, operator: string, value: any, not?: boolean | undefined): this;
1750
+ /**
1751
+ * @overload
1752
+ * @param {string[]} field
1753
+ * @param {string} operator
1754
+ * @param {any[]} value
1755
+ * @param {boolean} [not]
1756
+ * @returns {this}
1757
+ */
1758
+ where(field: string[], operator: string, value: any[], not?: boolean | undefined): this;
1759
+ /**
1760
+ * @overload
1761
+ * @param {[Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]} items
1762
+ * @returns {this}
1763
+ */
1764
+ where(items: [Wheres] | [TemplateStringsArray, ...any] | [string | string[], any] | [string | string[], string, any, boolean?]): this;
1765
+ /**
1766
+ * 选择字段
1767
+ * @param {...string | string[] | Record<string, Select.Param>} newSelect
1768
+ * @returns {this}
1769
+ */
1770
+ select(...newSelect: (string | string[] | Record<string, Select.Param>)[]): this;
1771
+ /**
1772
+ * 字段求和
1773
+ * @param {...string | string[] | Record<string, string>} newSelect
1774
+ * @returns {this}
1775
+ */
1776
+ sum(...newSelect: (string | string[] | Record<string, string>)[]): this;
1777
+ /**
1778
+ * 字段最小值
1779
+ * @param {...string | string[] | Record<string, string>} newSelect
1780
+ * @returns {this}
1781
+ */
1782
+ min(...newSelect: (string | string[] | Record<string, string>)[]): this;
1783
+ /**
1784
+ * 字段最大值
1785
+ * @param {...string | string[] | Record<string, string>} newSelect
1786
+ * @returns {this}
1787
+ */
1788
+ max(...newSelect: (string | string[] | Record<string, string>)[]): this;
1789
+ /**
1790
+ * 字段平均值
1791
+ * @param {...string | string[] | Record<string, string>} newSelect
1792
+ * @returns {this}
1793
+ */
1794
+ avg(...newSelect: (string | string[] | Record<string, string>)[]): this;
1795
+ /**
1796
+ * 字段计数
1797
+ * @param {...string | string[] | Record<string, string>} newSelect
1798
+ * @returns {this}
1799
+ */
1800
+ count(...newSelect: (string | string[] | Record<string, string>)[]): this;
1801
+ /**
1802
+ *
1803
+ * @param {Record<string, any>} update
1804
+ * @returns {this}
1805
+ */
1806
+ set(update: Record<string, any>): this;
1807
+ /**
1808
+ *
1809
+ * @param {string} alias
1810
+ * @returns
1811
+ */
1812
+ as(alias: string): ReturnType<this["_create"]>;
1813
+ /**
1814
+ *
1815
+ * @param {string} [text]
1816
+ * @returns {this}
1817
+ */
1818
+ contains(text?: string): this;
1819
+ /**
1820
+ * @param {any} [primary]
1821
+ * @returns {this}
1822
+ */
1823
+ primary(primary?: any, ...args: any[]): this;
1824
+ /**
1825
+ *
1826
+ * @param {object} a
1827
+ * @param {object | boolean | null} [b]
1828
+ * @returns {TB}
1829
+ */
1830
+ [Build](a: object, b?: object | boolean | null): TB;
1831
+ #private;
1832
+ }
1833
+
1834
+ /**
1835
+ * @implements {Save}
1836
+ * @implements {Destroy}
1837
+ * @implements {PseudoDestroy}
1838
+ */
1839
+ declare class Model implements Save, Destroy, PseudoDestroy {
1840
+ /** @readonly @type {string | undefined} */
1841
+ static readonly pseudo: string | undefined;
1842
+ /** @readonly @type {string} */
1843
+ static readonly table: string;
1844
+ /** @readonly @type {Fields} */
1845
+ static readonly fields: Fields;
1846
+ /** @readonly @type {readonly IndexInfo[]} */
1847
+ static readonly indexes: readonly IndexInfo[];
1848
+ /**
1849
+ * @template {typeof Model} T
1850
+ * @this {T}
1851
+ * @returns {Query<T['fields'], InstanceType<T>>}
1852
+ */
1853
+ static toQuery<T extends typeof Model>(this: T): Query<T["fields"], InstanceType<T>>;
1854
+ /**
1855
+ * @template {typeof Model} T
1856
+ * @this {T}
1857
+ * @param {string[]} [fields]
1858
+ * @returns {T}
1859
+ */
1860
+ static bindFields<T extends typeof Model>(this: T, fields?: string[]): T;
1861
+ /**
1862
+ * @template {typeof Model} T
1863
+ * @this {T}
1864
+ * @param {Connection} t
1865
+ * @param {object} p
1866
+ * @param {(data: object) => Promise<object>} run
1867
+ * @returns {Promise<InstanceType<T>>}
1868
+ */
1869
+ static [Create]<T extends typeof Model>(this: T, t: Connection, p: object, run: (data: object) => Promise<object>): Promise<InstanceType<T>>;
1870
+ /**
1871
+ * @template {typeof Model} T
1872
+ * @this {T}
1873
+ * @param {object} a
1874
+ * @param {object | boolean} [b]
1875
+ * @returns {InstanceType<T>}
1876
+ */
1877
+ static [Build]<T extends typeof Model>(this: T, a: object, b?: object | boolean): InstanceType<T>;
1878
+ /**
1879
+ * @param {object} data
1880
+ * @param {boolean | object} [saved]
1881
+ */
1882
+ constructor(data: object, saved?: boolean | object);
1883
+ get $model(): typeof Model;
1884
+ get $saved(): boolean;
1885
+ get $deleted(): boolean;
1886
+ get $oldData(): Record<string, any> | undefined;
1887
+ get $savedData(): {
1888
+ [x: string]: any;
1889
+ };
1890
+ get $changedData(): {
1891
+ [x: string]: any;
1892
+ };
1893
+ $clone(): Model;
1894
+ toJSON(): {
1895
+ [x: string]: any;
1896
+ };
1897
+ get $fieldChanged(): boolean;
1898
+ /**
1899
+ * @overload
1900
+ * @param {Record<string, any>} key
1901
+ * @param {any} [value]
1902
+ * @returns {boolean}
1903
+ */
1904
+ $set(key: Record<string, any>, value?: any): boolean;
1905
+ /**
1906
+ * @overload
1907
+ * @param {string} key
1908
+ * @param {any} value
1909
+ * @returns {boolean}
1910
+ */
1911
+ $set(key: string, value: any): boolean;
1912
+ /**
1913
+ * @template {Record<string, any>} T
1914
+ * @overload
1915
+ * @param {string} [key]
1916
+ * @param {boolean} [saved]
1917
+ * @returns {T}
1918
+ */
1919
+ $get<T extends Record<string, any>>(key?: string | undefined, saved?: boolean | undefined): T;
1920
+ /**
1921
+ * @template T
1922
+ * @overload
1923
+ * @param {string} key
1924
+ * @param {boolean} [saved]
1925
+ * @returns {T | undefined}
1926
+ */
1927
+ $get<T extends Record<string, any>>(key: string, saved?: boolean | undefined): T | undefined;
1928
+ /**
1929
+ * @param {(this: this)=> PromiseLike<boolean> | boolean} q
1930
+ * @returns {PromiseLike<boolean> | boolean}
1931
+ */
1932
+ $exec(q: (this: this) => PromiseLike<boolean> | boolean): PromiseLike<boolean> | boolean;
1933
+ /**
1934
+ * @param {Connection} t
1935
+ * @param {boolean} update
1936
+ * @returns {VoidReturn}
1937
+ */
1938
+ $onBeforeSave(t: Connection, update: boolean): VoidReturn;
1939
+ /**
1940
+ * @param {Connection} t
1941
+ * @param {boolean} update
1942
+ * @returns {VoidReturn}
1943
+ */
1944
+ $onAfterSave(t: Connection, update: boolean): VoidReturn;
1945
+ /**
1946
+ * @param {Connection} t
1947
+ * @param {boolean} update
1948
+ * @returns {VoidReturn}
1949
+ */
1950
+ $_onBeforeSave(t: Connection, update: boolean): VoidReturn;
1951
+ /**
1952
+ * @param {Connection} t
1953
+ * @param {boolean} update
1954
+ * @returns {VoidReturn}
1955
+ */
1956
+ $_onAfterSave(t: Connection, update: boolean): VoidReturn;
1957
+ /**
1958
+ * @param {Connection} t
1959
+ * @param {object?} update
1960
+ * @returns {VoidReturn}
1961
+ */
1962
+ $onBeforeDelete(t: Connection, update: object | null): VoidReturn;
1963
+ /**
1964
+ * @param {Connection} t
1965
+ * @param {object?} update
1966
+ * @returns {VoidReturn}
1967
+ */
1968
+ $onAfterDelete(t: Connection, update: object | null): VoidReturn;
1969
+ /**
1970
+ * @param {Connection} t
1971
+ * @param {object?} update
1972
+ * @returns {VoidReturn}
1973
+ */
1974
+ $_onBeforeDelete(t: Connection, update: object | null): VoidReturn;
1975
+ /**
1976
+ * @param {Connection} t
1977
+ * @param {object?} update
1978
+ * @returns {VoidReturn}
1979
+ */
1980
+ $_onAfterDelete(t: Connection, update: object | null): VoidReturn;
1981
+ /**
1982
+ * @param {Connection} t
1983
+ * @param {(data: any, newData?: any) => Promise<object?>} run
1984
+ * @param {Record<string, any>?} newData
1985
+ * @returns {Promise<this?>}
1986
+ */
1987
+ [Save](t: Connection, run: (data: any, newData?: any) => Promise<object | null>, newData: Record<string, any> | null): Promise<this | null>;
1988
+ /**
1989
+ * @param {Connection} t
1990
+ * @param {(data: any) => Promise<object?>} run
1991
+ * @returns {Promise<this?>}
1992
+ */
1993
+ [Destroy](t: Connection, run: (data: any) => Promise<object | null>): Promise<this | null>;
1994
+ /**
1995
+ * @param {Connection} t
1996
+ * @param {object} update
1997
+ * @param {(data: any) => Promise<object?>} run
1998
+ * @returns {Promise<this?>}
1999
+ */
2000
+ [PseudoDestroy](t: Connection, update: object, run: (data: any) => Promise<object | null>): Promise<this | null>;
2001
+ #private;
2002
+ }
2003
+ type VoidReturn = PromiseLike<void> | void;
2004
+
2005
+ /** @import { FieldDefine, FieldType, IndexInfo } from './types' */
2006
+ declare class Submodel {
2007
+ /** @readonly @type {string} */
2008
+ static readonly table: string;
2009
+ /** @readonly @type {Record<string, FieldDefine<keyof FieldType>>} */
2010
+ static readonly fields: Record<string, FieldDefine<keyof FieldType>>;
2011
+ /** @readonly @type {readonly IndexInfo[]} */
2012
+ static readonly indexes: readonly IndexInfo[];
2013
+ #private;
2014
+ }
2015
+
2016
+ /**
2017
+ * @template {MainFieldType} T
2018
+ * @overload
2019
+ * @param {T} type
2020
+ * @param {{
2021
+ * nullable?: false;
2022
+ * array?: false;
2023
+ * default?: ToType<T, false, false>;
2024
+ * } & FieldDefineOption} [options]
2025
+ * @returns {FieldDefine<T, false, false>}
2026
+ */
2027
+ declare function field<T extends MainFieldType>(type: T, options?: ({
2028
+ nullable?: false;
2029
+ array?: false;
2030
+ default?: ToType<T, false, false>;
2031
+ } & FieldDefineOption) | undefined): FieldDefine<T, false, false>;
2032
+ /**
2033
+ * @template {MainFieldType} T
2034
+ * @overload
2035
+ * @param {T} type
2036
+ * @param {{
2037
+ * nullable?: false;
2038
+ * array: true;
2039
+ * default?: ToType<T, true, false>;
2040
+ * } & FieldDefineOption} options
2041
+ * @returns {FieldDefine<T, true, false>}
2042
+ */
2043
+ declare function field<T extends MainFieldType>(type: T, options: {
2044
+ nullable?: false;
2045
+ array: true;
2046
+ default?: ToType<T, true, false>;
2047
+ } & FieldDefineOption): FieldDefine<T, true, false>;
2048
+ /**
2049
+ * @template {MainFieldType} T
2050
+ * @overload
2051
+ * @param {T} type
2052
+ * @param {{
2053
+ * nullable: true;
2054
+ * array?: false;
2055
+ * default?: ToType<T, false, true>;
2056
+ * } & FieldDefineOption} options
2057
+ * @returns {FieldDefine<T, false, true>}
2058
+ */
2059
+ declare function field<T extends MainFieldType>(type: T, options: {
2060
+ nullable: true;
2061
+ array?: false;
2062
+ default?: ToType<T, false, true>;
2063
+ } & FieldDefineOption): FieldDefine<T, false, true>;
2064
+ /**
2065
+ * @template {MainFieldType} T
2066
+ * @overload
2067
+ * @param {T} type
2068
+ * @param {{
2069
+ * nullable: true;
2070
+ * array: true;
2071
+ * default?: ToType<T, true, true>;
2072
+ * } & FieldDefineOption} options
2073
+ * @returns {FieldDefine<T, true, true>}
2074
+ */
2075
+ declare function field<T extends MainFieldType>(type: T, options: {
2076
+ nullable: true;
2077
+ array: true;
2078
+ default?: ToType<T, true, true>;
2079
+ } & FieldDefineOption): FieldDefine<T, true, true>;
2080
+ /**
2081
+ * @template {MainFieldType} T
2082
+ * @template {boolean} A
2083
+ * @overload
2084
+ * @param {T} type
2085
+ * @param {{
2086
+ * nullable: true;
2087
+ * array: A;
2088
+ * default?: ToType<T, A, true>;
2089
+ * } & FieldDefineOption} options
2090
+ * @returns {FieldDefine<T, A, true>}
2091
+ */
2092
+ declare function field<T extends MainFieldType, A extends boolean>(type: T, options: {
2093
+ nullable: true;
2094
+ array: A;
2095
+ default?: ToType<T, A, true>;
2096
+ } & FieldDefineOption): FieldDefine<T, A, true>;
2097
+ /**
2098
+ * @template {MainFieldType} T
2099
+ * @template {boolean} A
2100
+ * @overload
2101
+ * @param {T} type
2102
+ * @param {{
2103
+ * nullable?: false;
2104
+ * array: A;
2105
+ * default?: ToType<T, A, false>;
2106
+ * } & FieldDefineOption} options
2107
+ * @returns {FieldDefine<T, A, false>}
2108
+ */
2109
+ declare function field<T extends MainFieldType, A extends boolean>(type: T, options: {
2110
+ nullable?: false;
2111
+ array: A;
2112
+ default?: ToType<T, A, false>;
2113
+ } & FieldDefineOption): FieldDefine<T, A, false>;
2114
+ /**
2115
+ * @template {MainFieldType} T
2116
+ * @template {boolean} N
2117
+ * @overload
2118
+ * @param {T} type
2119
+ * @param {{
2120
+ * nullable: N;
2121
+ * array?: false;
2122
+ * default?: ToType<T, false, N>;
2123
+ * } & FieldDefineOption} options
2124
+ * @returns {FieldDefine<T, false, N>}
2125
+ */
2126
+ declare function field<T extends MainFieldType, N extends boolean>(type: T, options: {
2127
+ nullable: N;
2128
+ array?: false;
2129
+ default?: ToType<T, false, N>;
2130
+ } & FieldDefineOption): FieldDefine<T, false, N>;
2131
+ /**
2132
+ * @template {MainFieldType} T
2133
+ * @template {boolean} N
2134
+ * @overload
2135
+ * @param {T} type
2136
+ * @param {{
2137
+ * nullable: N;
2138
+ * array: true;
2139
+ * default?: ToType<T, true, N>;
2140
+ * } & FieldDefineOption} options
2141
+ * @returns {FieldDefine<T, true, N>}
2142
+ */
2143
+ declare function field<T extends MainFieldType, N extends boolean>(type: T, options: {
2144
+ nullable: N;
2145
+ array: true;
2146
+ default?: ToType<T, true, N>;
2147
+ } & FieldDefineOption): FieldDefine<T, true, N>;
2148
+ /**
2149
+ * @template {MainFieldType} T
2150
+ * @template {boolean} A
2151
+ * @template {boolean} N
2152
+ * @overload
2153
+ * @param {T} type
2154
+ * @param {{
2155
+ * nullable: N;
2156
+ * array: A;
2157
+ * default?: ToType<T, A, N>;
2158
+ * } & FieldDefineOption} options
2159
+ * @returns {FieldDefine<T, A, N>}
2160
+ */
2161
+ declare function field<T extends MainFieldType, A extends boolean, N extends boolean>(type: T, options: {
2162
+ nullable: N;
2163
+ array: A;
2164
+ default?: ToType<T, A, N>;
2165
+ } & FieldDefineOption): FieldDefine<T, A, N>;
2166
+ /**
2167
+ * @template {MainFieldType} T
2168
+ * @overload
2169
+ * @param {T} type
2170
+ * @param {{
2171
+ * nullable?: boolean;
2172
+ * array?: boolean;
2173
+ * default?: ToType<T, boolean, boolean>;
2174
+ * } & FieldDefineOption} options
2175
+ * @returns {FieldDefine<T, boolean, boolean>}
2176
+ */
2177
+ declare function field<T extends MainFieldType>(type: T, options: {
2178
+ nullable?: boolean;
2179
+ array?: boolean;
2180
+ default?: ToType<T, boolean, boolean>;
2181
+ } & FieldDefineOption): FieldDefine<T, boolean, boolean>;
2182
+
2183
+ /**
2184
+ *
2185
+ * @param {boolean} [d]
2186
+ */
2187
+ declare function setDevelopment(d?: boolean): void;
2188
+ declare let isDevelopment: boolean;
2189
+
2190
+ 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 FieldSpecific, type FieldSpecificValue, 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, type Skip, 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 };