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.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/bin/universalTsInit.js +59 -0
- package/docs/deletion.md +186 -0
- package/docs/find.md +265 -0
- package/docs/getting-started-javascript.md +112 -0
- package/docs/getting-started-typescript.md +159 -0
- package/docs/in-depth-class-definitions.md +193 -0
- package/docs/jsdoc-ux-tips.md +17 -0
- package/docs/managing-the-database.md +37 -0
- package/docs/saving-to-database.md +37 -0
- package/index.d.ts +7 -0
- package/index.js +11 -0
- package/jsconfig.json +29 -0
- package/package.json +40 -0
- package/src/ORM/DbManager.js +76 -0
- package/src/ORM/ORM.js +181 -0
- package/src/ORM/bootOrm.js +929 -0
- package/src/changeLogger/changeLogger.js +55 -0
- package/src/changeLogger/save.js +237 -0
- package/src/changeLogger/sqlClients/postgres.js +97 -0
- package/src/changeLogger/sqlClients/sqlite.js +120 -0
- package/src/entity/delete/delete.js +20 -0
- package/src/entity/delete/getDependents.js +46 -0
- package/src/entity/entity.d.ts +46 -0
- package/src/entity/entity.js +228 -0
- package/src/entity/find/find.js +157 -0
- package/src/entity/find/joins.js +52 -0
- package/src/entity/find/queryBuilder.js +95 -0
- package/src/entity/find/relations.js +23 -0
- package/src/entity/find/scopeProxies.js +60 -0
- package/src/entity/find/sqlClients/postgresFuncs.js +171 -0
- package/src/entity/find/sqlClients/sqliteFuncs.js +211 -0
- package/src/entity/find/where/relationalWhere.js +142 -0
- package/src/entity/find/where/where.js +244 -0
- package/src/entity/find/where/whereArgsFunctions.js +49 -0
- package/src/misc/classes.js +63 -0
- package/src/misc/constants.js +42 -0
- package/src/misc/miscFunctions.js +167 -0
- package/src/misc/ormStore.js +18 -0
- package/src/misc/types.d.ts +560 -0
- package/src/proxies/instanceProxy.js +544 -0
- package/src/proxies/nonRelationalArrayProxy.js +76 -0
- package/src/proxies/objectProxy.js +50 -0
- package/src/proxies/relationalArrayProxy.js +130 -0
- package/src/webpack/masquerade-loader.js +14 -0
- package/src/webpack/plugin.js +43 -0
- package/src/webpack/store.js +2 -0
- package/src/webpack/webpack.config.js +41 -0
- package/testing/dev-doc.md +7 -0
- package/testing/generationFuncs.js +21 -0
- package/testing/miscFunctions.js +97 -0
- package/testing/postgres.test.js +254 -0
- package/testing/sqlite.test.js +257 -0
- 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
|