masquerade-orm 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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/bin/universalTsInit.js +59 -0
  4. package/docs/deletion.md +186 -0
  5. package/docs/find.md +265 -0
  6. package/docs/getting-started-javascript.md +112 -0
  7. package/docs/getting-started-typescript.md +159 -0
  8. package/docs/in-depth-class-definitions.md +193 -0
  9. package/docs/jsdoc-ux-tips.md +17 -0
  10. package/docs/managing-the-database.md +37 -0
  11. package/docs/saving-to-database.md +37 -0
  12. package/index.d.ts +7 -0
  13. package/index.js +11 -0
  14. package/jsconfig.json +29 -0
  15. package/package.json +40 -0
  16. package/src/ORM/DbManager.js +76 -0
  17. package/src/ORM/ORM.js +181 -0
  18. package/src/ORM/bootOrm.js +929 -0
  19. package/src/changeLogger/changeLogger.js +55 -0
  20. package/src/changeLogger/save.js +237 -0
  21. package/src/changeLogger/sqlClients/postgres.js +97 -0
  22. package/src/changeLogger/sqlClients/sqlite.js +120 -0
  23. package/src/entity/delete/delete.js +20 -0
  24. package/src/entity/delete/getDependents.js +46 -0
  25. package/src/entity/entity.d.ts +46 -0
  26. package/src/entity/entity.js +228 -0
  27. package/src/entity/find/find.js +157 -0
  28. package/src/entity/find/joins.js +52 -0
  29. package/src/entity/find/queryBuilder.js +95 -0
  30. package/src/entity/find/relations.js +23 -0
  31. package/src/entity/find/scopeProxies.js +60 -0
  32. package/src/entity/find/sqlClients/postgresFuncs.js +171 -0
  33. package/src/entity/find/sqlClients/sqliteFuncs.js +211 -0
  34. package/src/entity/find/where/relationalWhere.js +142 -0
  35. package/src/entity/find/where/where.js +244 -0
  36. package/src/entity/find/where/whereArgsFunctions.js +49 -0
  37. package/src/misc/classes.js +63 -0
  38. package/src/misc/constants.js +42 -0
  39. package/src/misc/miscFunctions.js +167 -0
  40. package/src/misc/ormStore.js +18 -0
  41. package/src/misc/types.d.ts +560 -0
  42. package/src/proxies/instanceProxy.js +544 -0
  43. package/src/proxies/nonRelationalArrayProxy.js +76 -0
  44. package/src/proxies/objectProxy.js +50 -0
  45. package/src/proxies/relationalArrayProxy.js +130 -0
  46. package/src/webpack/masquerade-loader.js +14 -0
  47. package/src/webpack/plugin.js +43 -0
  48. package/src/webpack/store.js +2 -0
  49. package/src/webpack/webpack.config.js +41 -0
  50. package/testing/dev-doc.md +7 -0
  51. package/testing/generationFuncs.js +21 -0
  52. package/testing/miscFunctions.js +97 -0
  53. package/testing/postgres.test.js +254 -0
  54. package/testing/sqlite.test.js +257 -0
  55. package/testing/testing-classes.js +102 -0
@@ -0,0 +1,560 @@
1
+ import type { UUID } from "crypto"
2
+ import { Entity } from "../entity/entity"
3
+ import { Alias, AND, OR } from "../entity/find/where/whereArgsFunctions"
4
+ import { OrArray, AndArray, SqlWhereObj, LazyPromise } from "./classes"
5
+ import type { Pool } from "pg"
6
+ import { DatabaseSync } from "node:sqlite"
7
+
8
+ type integer = number
9
+
10
+ type DbConnection<T extends 'pg' | 'sqlite'> =
11
+ T extends 'pg' ? Pool : DatabaseSync
12
+
13
+ type SqlClient = "postgresql" | "sqlite"
14
+
15
+ type DbPrimaryKey = "UUID" | "INT" | "BIGINT"
16
+
17
+ type OrmConfigObj = {
18
+ dbConnection: Pool | DatabaseSync,
19
+ //dbConnection: DbConnection,
20
+ idTypeDefault: DbPrimaryKey,
21
+ skipTableCreation?: boolean
22
+ }
23
+
24
+ type ConsoleLogType = "success" | "failure" | "warning"
25
+
26
+ type ColumnBase = {
27
+ nullable?: boolean
28
+ unique?: boolean
29
+ }
30
+
31
+ type ColumnTypeMap = {
32
+ TEXT: ColumnBase & { type: "TEXT"; defaultValue?: string }
33
+ INT: ColumnBase & { type: "INT"; defaultValue?: number }
34
+ BOOLEAN: ColumnBase & { type: "BOOLEAN"; defaultValue?: boolean }
35
+ TIMESTAMPTZ: ColumnBase & { type: "TIMESTAMPTZ"; defaultValue?: string }
36
+ JSONB: ColumnBase & { type: "JSONB"; defaultValue?: Object }
37
+ UUID: ColumnBase & { type: "UUID"; defaultValue?: string }
38
+ }
39
+
40
+ type ColumnDefinition = ColumnTypeMap[keyof ColumnTypeMap]
41
+
42
+ type TABLE = {
43
+ name: string
44
+ columns: {
45
+ [key: string]: ColumnDefinition
46
+ }
47
+ references?: string
48
+ junctions?: TABLE[]
49
+ refTable?: string
50
+ parent?: TABLE
51
+ }
52
+
53
+ type Unique = never
54
+ // type Primary = never
55
+ type ForeignKey<T, K extends keyof T> = T
56
+
57
+ // ---------------------------------------------------------
58
+ // 🔑 RELATIONS
59
+ // ---------------------------------------------------------
60
+
61
+ type RelationsProperties<T> = {
62
+ [K in keyof T]: NonNullable<T[K]> extends Entity
63
+ ? K
64
+ : NonNullable<T[K]> extends Array<infer U>
65
+ ? U extends Entity
66
+ ? K
67
+ : never
68
+ : never
69
+ }[keyof T]
70
+
71
+ type RelationsOnly<T> = {
72
+ [K in RelationsProperties<T>]: NonNullable<T[K]> extends Array<infer C>
73
+ ? Partial<RelationsOnly<NonNullable<C>>> | true
74
+ : Partial<RelationsOnly<NonNullable<T[K]>>> | true
75
+ }
76
+
77
+ // ---------------------------------------------------------
78
+ // 🔑 WHERE
79
+ // ---------------------------------------------------------
80
+
81
+ type ValidColumnKeys<T> = {
82
+ [K in keyof T]: NonNullable<T[K]> extends Array<infer C>
83
+ ? never
84
+ : NonNullable<T[K]> extends Function
85
+ ? never
86
+ : NonNullable<T[K]> extends Entity
87
+ ? never
88
+ : K
89
+ }[keyof T]
90
+
91
+ type ValidColumnKeysArr<T> = {
92
+ [K in keyof T]: NonNullable<T[K]> extends Array<infer C>
93
+ ? NonNullable<C> extends Function
94
+ ? never
95
+ : NonNullable<C> extends Entity
96
+ ? never
97
+ : K
98
+ : never
99
+ }[keyof T]
100
+
101
+
102
+ type ColumnProperties<T> = Partial<{
103
+ [K in ValidColumnKeys<T>]:
104
+ | T[K]
105
+ | SqlWhereObj<T[K]>
106
+ | AndArray<
107
+ NonNullable<T[K]> | undefined | OrArray<NonNullable<T[K]> | undefined | SqlWhereObj<T[K]>>
108
+ >
109
+ | OrArray<
110
+ NonNullable<T[K]> | undefined | AndArray<NonNullable<T[K]> | undefined | SqlWhereObj<T[K]>>
111
+ >
112
+ | sqlArrowFn<Alias>
113
+ | null
114
+ }>
115
+
116
+ // type ColumnProperties<T> = Partial<{
117
+ // [K in ValidColumnKeys<T>]:
118
+ // | NonNullable<T[K]>
119
+ // | SqlWhereObj
120
+ // | AndArray
121
+ // | OrArray
122
+ // | sqlArrowFn<NonNullable<T[K]>>
123
+ // | null
124
+ // | undefined
125
+ // }>
126
+
127
+ // type ColumnPropertiesArr<T> = Partial<{
128
+ // [K in ValidColumnKeysArr<T>]: NonNullable<T[K]> extends Array<infer C>
129
+ // ?
130
+ // | (NonNullable<C> | null | undefined)[]
131
+ // | SqlWhereObj
132
+ // | AndArray
133
+ // | OrArray
134
+ // | sqlArrowFn<NonNullable<C>>
135
+ // | null
136
+ // | undefined
137
+ // : never
138
+ // }>
139
+
140
+ type ColumnPropertiesArr<T> = Partial<{
141
+ [K in ValidColumnKeysArr<T>]: NonNullable<T[K]> extends Array<infer C>
142
+ ?
143
+ | T[K]
144
+ | SqlWhereObj<T[K] | C>
145
+ | AndArray<
146
+ | NonNullable<T[K]>
147
+ | undefined
148
+ | OrArray<NonNullable<T[K]> | SqlWhereObj<T[K] | C> | undefined>
149
+ >
150
+ | OrArray<
151
+ | NonNullable<T[K]>
152
+ | undefined
153
+ | AndArray<NonNullable<T[K]> | SqlWhereObj<T[K] | C> | undefined>
154
+ >
155
+ | sqlArrowFn<Alias>
156
+ | null
157
+ : never
158
+ }>
159
+
160
+
161
+ type WhereProperties<T> =
162
+ ColumnProperties<T> &
163
+ ColumnPropertiesArr<T> &
164
+ Partial<RelationsWhere<T>>
165
+
166
+ type RelationsWhere<T> = {
167
+ [K in RelationsProperties<T>]?: NonNullable<T[K]> extends Array<infer C>
168
+ ? EnhancedWhereProperties<NonNullable<C>> | sqlArrowFnTable<NonNullable<C>> | sqlArrowFnTable<NonNullable<C>>[]
169
+ : EnhancedWhereProperties<NonNullable<T[K]>> | sqlArrowFnTable<NonNullable<T[K]>> | sqlArrowFnTable<NonNullable<T[K]>>[]
170
+ }
171
+
172
+ type EnhancedWhereProperties<T> = WhereProperties<T> & {
173
+ _relationalWhere?: sqlArrowFnTable<T> | sqlArrowFnTable<T>[]
174
+ }
175
+
176
+ // ---------------------------------------------------------
177
+ // 🔑SQL
178
+ // ---------------------------------------------------------
179
+
180
+ type sqlArrowFn<T> = (AliasObj: AliasObj<T>) => SqlWhereObj<PrimitivesNoNull | AliasObj<T>>
181
+
182
+ type sqlArrowFnTable<T> = (AliasObj: AliasObj<T>) => SqlWhereObj<any>
183
+
184
+ type AliasObj<T> = T extends Entity
185
+ ? AliasObjProperties<T> & AliasObjRelations<T>
186
+ : Alias
187
+
188
+ type AliasObjRelations<T> = {
189
+ [K in RelationsProperties<T>]: NonNullable<T[K]> extends Array<infer C>
190
+ ? AliasObj<NonNullable<C>>
191
+ : AliasObj<NonNullable<T[K]>>
192
+ }
193
+
194
+ type AliasObjProperties<T> = {
195
+ [K in ValidColumnKeys<T> | ValidColumnKeysArr<T>]: Alias
196
+ }
197
+
198
+ type NonRelationsProperties<T> = Exclude<keyof T, RelationsProperties<T>>
199
+
200
+ // ---------------------------------------------------------
201
+ // 🔑 FindObj
202
+ // ---------------------------------------------------------
203
+
204
+ export type FindObj<T> = {
205
+ relations?: Partial<RelationsOnly<T>>
206
+ where?: WhereProperties<T>
207
+ relationalWhere?: sqlArrowFnTable<T> | (sqlArrowFn<T> | null)[] | null
208
+ }
209
+
210
+ // ---------------------------------------------------------
211
+ // 🔑 Misc helpers
212
+ // ---------------------------------------------------------
213
+
214
+ type JSONValue =
215
+ | string
216
+ | number
217
+ | boolean
218
+ | null
219
+ | undefined
220
+ | JSONValue[]
221
+
222
+
223
+
224
+ type PlainObject = { [k: string]: Primitives }
225
+
226
+ export type Primitives =
227
+ | string
228
+ | number
229
+ | boolean
230
+ | Date
231
+ | PlainObject
232
+ | undefined
233
+ | null
234
+
235
+
236
+ export type PrimitivesNoNull =
237
+ | string
238
+ | number
239
+ | boolean
240
+ | Date
241
+ | PlainObject
242
+ | undefined
243
+
244
+ type ArrColumnsRawParams =
245
+ | (string | undefined)[]
246
+ | (number | undefined)[]
247
+ | (boolean | undefined)[]
248
+ | (Date | undefined)[]
249
+ | (PlainObject | undefined)[]
250
+
251
+
252
+
253
+ // #region
254
+ ///*
255
+ /////////////
256
+
257
+
258
+ ///OLD
259
+ // import type { UUID } from "crypto"
260
+
261
+ // import { Entity } from "./entities/entity"
262
+ // import { Alias, SqlWhereObj } from "./ormClasses"
263
+ // import { OrArray, AndArray } from "./ormClasses"
264
+ // import { AND, OR } from "./entities/entityFunctions"
265
+
266
+
267
+ // type COLUMN_TYPE = "TEXT" | "INT" | "BOOLEAN" | "TIMESTAMPTZ" | "JSONB" | "UUID"
268
+
269
+ // type ColumnBase = {
270
+ // nullable?: boolean
271
+ // unique?: boolean
272
+ // // primary?: boolean
273
+ // }
274
+
275
+ // type ColumnTypeMap = {
276
+ // TEXT: ColumnBase & { type: "TEXT"; defaultValue?: string }
277
+ // INT: ColumnBase & { type: "INT"; defaultValue?: number }
278
+ // BOOLEAN: ColumnBase & { type: "BOOLEAN"; defaultValue?: boolean }
279
+ // TIMESTAMPTZ: ColumnBase & { type: "TIMESTAMPTZ"; defaultValue?: string }
280
+ // JSONB: ColumnBase & { type: "JSONB"; defaultValue?: Object }
281
+ // UUID: ColumnBase & { type: "UUID"; defaultValue?: string }
282
+ // }
283
+
284
+ // type ColumnDefinition = ColumnTypeMap[keyof ColumnTypeMap]
285
+
286
+ // type TABLE = {
287
+ // name: string
288
+ // columns: {
289
+ // [key: string]: ColumnDefinition
290
+ // }
291
+ // references?: string
292
+ // junctions?: TABLE[]
293
+ // }
294
+
295
+ // type Unique = never
296
+ // // type Primary = never
297
+ // type ForeignKey<T, K extends keyof T> = T
298
+
299
+ // // ---------------------------------------------------------
300
+ // // 🔑 RELATIONS
301
+ // // ---------------------------------------------------------
302
+
303
+ // type RelationsProperties<T> = {
304
+ // [K in keyof T]: NonNullable<T[K]> extends Entity
305
+ // ? K
306
+ // : NonNullable<T[K]> extends Array<infer U>
307
+ // ? U extends Entity
308
+ // ? K
309
+ // : never
310
+ // : never
311
+ // }[keyof T]
312
+
313
+ // type RelationsOnly<T> = {
314
+ // [K in RelationsProperties<T>]: NonNullable<T[K]> extends Array<infer C>
315
+ // ? Partial<RelationsOnly<NonNullable<C>>> | true
316
+ // : Partial<RelationsOnly<NonNullable<T[K]>>> | true
317
+ // }
318
+
319
+ // // ---------------------------------------------------------
320
+ // // 🔑 WHERE
321
+ // // ---------------------------------------------------------
322
+
323
+ // type ValidColumnKeys<T> = {
324
+ // [K in keyof T]: NonNullable<T[K]> extends Array<infer C>
325
+ // ? never
326
+ // : NonNullable<T[K]> extends Function
327
+ // ? never
328
+ // : NonNullable<T[K]> extends Entity
329
+ // ? never
330
+ // : K
331
+ // }[keyof T]
332
+
333
+ // type ValidColumnKeysArr<T> = {
334
+ // [K in keyof T]: NonNullable<T[K]> extends Array<infer C>
335
+ // ? NonNullable<C> extends Function
336
+ // ? never
337
+ // : NonNullable<C> extends Entity
338
+ // ? never
339
+ // : K
340
+ // : never
341
+ // }[keyof T]
342
+
343
+ // // type AliasMap<T> = {
344
+ // // [K in ValidColumnKeys<T> | ValidColumnKeysArr<T>]: string
345
+ // // }
346
+
347
+ // type ColumnProperties<T> = Partial<{
348
+ // [K in ValidColumnKeys<T>]:
349
+ // | T[K]
350
+ // | SqlWhereObj
351
+ // | AndArray<
352
+ // NonNullable<T[K]> | undefined | OrArray<NonNullable<T[K]> | undefined>
353
+ // >
354
+ // | OrArray<
355
+ // NonNullable<T[K]> | undefined | AndArray<NonNullable<T[K]> | undefined>
356
+ // >
357
+ // | sqlArrowFn<Alias>
358
+ // | null
359
+ // }>
360
+
361
+ // // type ColumnProperties<T> = Partial<{
362
+ // // [K in ValidColumnKeys<T>]:
363
+ // // | NonNullable<T[K]>
364
+ // // | SqlWhereObj
365
+ // // | AndArray
366
+ // // | OrArray
367
+ // // | sqlArrowFn<NonNullable<T[K]>>
368
+ // // | null
369
+ // // | undefined
370
+ // // }>
371
+
372
+ // // type ColumnPropertiesArr<T> = Partial<{
373
+ // // [K in ValidColumnKeysArr<T>]: NonNullable<T[K]> extends Array<infer C>
374
+ // // ?
375
+ // // | (NonNullable<C> | null | undefined)[]
376
+ // // | SqlWhereObj
377
+ // // | AndArray
378
+ // // | OrArray
379
+ // // | sqlArrowFn<NonNullable<C>>
380
+ // // | null
381
+ // // | undefined
382
+ // // : never
383
+ // // }>
384
+
385
+ // type ColumnPropertiesArr<T> = Partial<{
386
+ // [K in ValidColumnKeysArr<T>]: NonNullable<T[K]> extends Array<infer C>
387
+ // ?
388
+ // | T[K]
389
+ // | SqlWhereObj
390
+ // | AndArray<
391
+ // | NonNullable<T[K]>
392
+ // | undefined
393
+ // | OrArray<NonNullable<T[K]> | undefined>
394
+ // >
395
+ // | OrArray<
396
+ // | NonNullable<T[K]>
397
+ // | undefined
398
+ // | AndArray<NonNullable<T[K]> | undefined>
399
+ // >
400
+ // | sqlArrowFn<Alias>
401
+ // | null
402
+ // : never
403
+ // }>
404
+
405
+ // type RelationsWhere<T> = {
406
+ // [K in RelationsProperties<T>]: NonNullable<T[K]> extends Array<infer C>
407
+ // ? WhereProperties<NonNullable<C>> | sqlArrowFn<NonNullable<C>>
408
+ // : WhereProperties<NonNullable<T[K]>> | sqlArrowFn<NonNullable<T[K]>>
409
+ // }
410
+
411
+
412
+ // type WhereProperties<T> = Exclude<
413
+ // ColumnProperties<T> &
414
+ // ColumnPropertiesArr<T> &
415
+ // Partial<RelationsWhere<T>>,
416
+ // undefined
417
+ // >
418
+
419
+ // type RelationsWhere<T> = {
420
+ // [K in RelationsProperties<T>]?: NonNullable<T[K]> extends Array<infer C>
421
+ // ? EnhancedWhereProperties<NonNullable<C>> | sqlArrowFn<NonNullable<C>> | sqlArrowFn<NonNullable<C>>[]
422
+ // : EnhancedWhereProperties<NonNullable<T[K]>> | sqlArrowFn<NonNullable<T[K]>> | sqlArrowFn<NonNullable<T[K]>>[]
423
+ // }
424
+
425
+ // type EnhancedWhereProperties<T> = WhereProperties<T> & {
426
+ // _relationalWhere?: sqlArrowFn<T> | sqlArrowFn<T>[]
427
+ // }
428
+
429
+ // // ---------------------------------------------------------
430
+ // // 🔑SQL
431
+ // // ---------------------------------------------------------
432
+
433
+ // type sqlArrowFn<T> = (AliasObj: AliasObj<T>) => SqlWhereObj
434
+
435
+ // type AliasObj<T> = T extends Entity
436
+ // ? AliasObjProperties<T> & AliasObjRelations<T>
437
+ // : Alias
438
+
439
+ // type AliasObjRelations<T> = {
440
+ // [K in RelationsProperties<T>]: NonNullable<T[K]> extends Array<infer C>
441
+ // ? AliasObj<NonNullable<C>>
442
+ // : AliasObj<NonNullable<T[K]>>
443
+ // }
444
+
445
+ // type AliasObjProperties<T> = {
446
+ // [K in ValidColumnKeys<T> | ValidColumnKeysArr<T>]: Alias
447
+ // }
448
+
449
+ // type NonRelationsProperties<T> = Exclude<keyof T, RelationsProperties<T>>
450
+
451
+ // // ---------------------------------------------------------
452
+ // // 🔑 FindObj
453
+ // // ---------------------------------------------------------
454
+
455
+ // export type FindObj<T> = {
456
+ // relations?: Partial<RelationsOnly<T>>
457
+ // where?: WhereProperties<T>
458
+ // relationalWhere?: sqlArrowFn<T> | sqlArrowFn<T>[]
459
+ // }
460
+
461
+ // // ---------------------------------------------------------
462
+ // // 🔑 Misc helpers
463
+ // // ---------------------------------------------------------
464
+
465
+ // type JSONValue =
466
+ // | string
467
+ // | number
468
+ // | boolean
469
+ // | null
470
+ // | undefined
471
+ // | { [key: string]: JSONValue }
472
+ // | JSONValue[]
473
+
474
+ // type OrmJSON = {
475
+ // [key: string]: JSONValue
476
+ // }
477
+
478
+ // type DbPrimaryKey = "UUID" | "INT" | "BIGINT"
479
+
480
+ // // ---------------------------------------------------------
481
+ // // 🔑 Raw
482
+ // // ---------------------------------------------------------
483
+
484
+ // // type RelationNames<T> = {
485
+ // // [K in keyof T]: NonNullable<T[K]> extends Entity
486
+ // // ? K
487
+ // // : NonNullable<T[K]> extends Array<infer U>
488
+ // // ? U extends Entity
489
+ // // ? K
490
+ // // : never
491
+ // // : never
492
+ // // }[keyof T]
493
+
494
+ // // type RelationsOnly<T> = {
495
+ // // [K in RelationNames<T>]: NonNullable<T[K]> extends Array<infer C>
496
+ // // ? Partial<RelationsOnly<NonNullable<C>>> | true
497
+ // // : Partial<RelationsOnly<NonNullable<T[K]>>> | true
498
+ // // }
499
+
500
+ // // type AliasObj<User2> = {
501
+ // // username: Alias
502
+ // // email: Alias
503
+ // // password: Alias
504
+ // // isBlocked: Alias
505
+ // // isAdmin: Alias
506
+ // // previouslyPaid: Alias
507
+ // // sessions: Alias
508
+ // // //NON DB BELOW
509
+ // // consultations = undefined
510
+ // // /**@type {ConsultancyForm2[] }*/ consultancyForms = []
511
+ // // /**@type {number}*/ maxSessions = 3
512
+ // // }
513
+
514
+ // function sql(
515
+ // str: TemplateStringsArray,
516
+ // ...args: (AliasObj | Primitives)[]
517
+ // ): SqlWhereObj
518
+
519
+ // type PlainObject = { [k: string]: Primitives }
520
+
521
+ // export type Primitives =
522
+ // | string
523
+ // | number
524
+ // | boolean
525
+ // | Date
526
+ // | PlainObject
527
+ // | undefined
528
+ // | null
529
+
530
+ // type ArrColumnsRawParams =
531
+ // | (string | undefined)[]
532
+ // | (number | undefined)[]
533
+ // | (boolean | undefined)[]
534
+ // | (Date | undefined)[]
535
+ // | (PlainObject | undefined)[]
536
+
537
+ // // type RawParam = Primitives | ArrColumnsRawParams
538
+
539
+ // // ---------------------------------------------------------
540
+ // // 🔑 AND & OR
541
+ // // ---------------------------------------------------------
542
+
543
+ // //TODO GET PROPER INTELLISENSE FOR ORS AND ANDS
544
+
545
+ // // export type AndOrArgs = (
546
+ // // | OrArray
547
+ // // | AndArray
548
+ // // | SqlWhereObj
549
+ // // | Exclude<Primitives, null>
550
+ // // | undefined
551
+ // // )[]
552
+
553
+ // // type OrArray<T> = (SqlWhereObj | T & Primitives)[]
554
+
555
+ // // type AndArray<T> = (SqlWhereObj | T & Primitives)[]
556
+
557
+ // // type AND<T> = (...args: T) => AndArray<T>
558
+
559
+ // // type OR<T> = (...args: T) => OrArray<T>
560
+ // #endregion