orange-orm 4.7.10-beta.1 → 4.7.10-beta.2

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.
@@ -14799,6 +14799,7 @@ function requireIndexBrowser () {
14799
14799
  connectViaPool.commit = requireCommit();
14800
14800
  connectViaPool.rollback = requireRollback();
14801
14801
  connectViaPool.end = requirePools().end;
14802
+ connectViaPool.close = connectViaPool.end;
14802
14803
  connectViaPool.log = requireLog().registerLogger;
14803
14804
  connectViaPool.on = requireLog().on;
14804
14805
  connectViaPool.off = requireLog().off;
package/dist/index.mjs CHANGED
@@ -20520,6 +20520,7 @@ function requireSrc () {
20520
20520
  connectViaPool.commit = requireCommit();
20521
20521
  connectViaPool.rollback = requireRollback();
20522
20522
  connectViaPool.end = requirePools().end;
20523
+ connectViaPool.close = connectViaPool.end;
20523
20524
  connectViaPool.log = requireLog().registerLogger;
20524
20525
  connectViaPool.on = requireLog().on;
20525
20526
  connectViaPool.off = requireLog().off;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-orm",
3
- "version": "4.7.10-beta.1",
3
+ "version": "4.7.10-beta.2",
4
4
  "main": "./src/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "browser": "./dist/index.browser.mjs",
package/src/index.js CHANGED
@@ -28,6 +28,7 @@ connectViaPool.filter = require('./emptyFilter');
28
28
  connectViaPool.commit = require('./table/commit');
29
29
  connectViaPool.rollback = require('./table/rollback');
30
30
  connectViaPool.end = require('./pools').end;
31
+ connectViaPool.close = connectViaPool.end;
31
32
  connectViaPool.log = require('./table/log').registerLogger;
32
33
  connectViaPool.on = require('./table/log').on;
33
34
  connectViaPool.off = require('./table/log').off;
@@ -14,6 +14,7 @@ connectViaPool.filter = require('./emptyFilter');
14
14
  connectViaPool.commit = require('./table/commit');
15
15
  connectViaPool.rollback = require('./table/rollback');
16
16
  connectViaPool.end = require('./pools').end;
17
+ connectViaPool.close = connectViaPool.end;
17
18
  connectViaPool.log = require('./table/log').registerLogger;
18
19
  connectViaPool.on = require('./table/log').on;
19
20
  connectViaPool.off = require('./table/log').off;
package/src/map.d.ts CHANGED
@@ -3,30 +3,24 @@ import type { PGliteOptions } from './pglite.d.ts';
3
3
  import type { ConnectionConfiguration } from 'tedious';
4
4
  import type { D1Database } from '@cloudflare/workers-types';
5
5
  import type { PoolAttributes } from 'oracledb';
6
- import type { AxiosInterceptorManager, InternalAxiosRequestConfig, AxiosResponse } from 'axios';
7
6
  import type { DBClient } from './map2';
8
7
 
9
-
10
-
11
- //todo
12
8
  export type MergeProperties<T, V> = {
13
9
  [K in keyof T | keyof V]:
14
- K extends keyof T
15
- ? T[K] extends MappedTableDef<infer M>
16
- ? K extends keyof V
17
- ? V[K] extends MappedTableDef<infer N>
18
- ? MappedTableDef<M & N & TableAlias<K>>
19
- : V[K]
20
- : T[K]
21
- : T[K]
22
- : K extends keyof V
23
- ? V[K] extends MappedTableDef<infer N>
24
- ? MappedTableDef<N & TableAlias<K>>
25
- : V[K]
26
- : never;
27
- };
28
-
29
-
10
+ K extends keyof T
11
+ ? T[K] extends MappedTableDef<infer M>
12
+ ? K extends keyof V
13
+ ? V[K] extends MappedTableDef<infer N>
14
+ ? MappedTableDef<M & N & TableAlias<K>>
15
+ : V[K]
16
+ : T[K]
17
+ : T[K]
18
+ : K extends keyof V
19
+ ? V[K] extends MappedTableDef<infer N>
20
+ ? MappedTableDef<N & TableAlias<K>>
21
+ : V[K]
22
+ : never;
23
+ };
30
24
 
31
25
  export type DbMapper<T> = {
32
26
  table(tableName: string): MappedTableDefInit<{}>;
@@ -88,50 +82,6 @@ export interface PoolOptions {
88
82
  size?: number;
89
83
  }
90
84
 
91
- type MappedDbInstance<T> = {
92
- [K in keyof T]: T[K] extends MappedTableDef<infer U>
93
- ? MappedTable<T[K]>
94
- : never;
95
- } & {
96
- close(): Promise<void>;
97
- filter: Filter;
98
- and(filter: Filter | RawFilter[], ...filters: RawFilter[]): Filter;
99
- or(filter: Filter | RawFilter[], ...filters: RawFilter[]): Filter;
100
- not(): Filter;
101
- query(filter: RawFilter | string): Promise<unknown[]>;
102
- query<T>(filter: RawFilter | string): Promise<T[]>;
103
- createPatch(original: any[], modified: any[]): JsonPatch;
104
- createPatch(original: any, modified: any): JsonPatch;
105
- <O extends DbOptions<T>>(concurrency: O): MappedDbInstance<T>;
106
- transaction(
107
- fn: (db: MappedDbInstance<T>) => Promise<unknown>
108
- ): Promise<void>;
109
- saveChanges(arraysOrRow: { saveChanges(): Promise<void> }): Promise<void>;
110
- express(): import('express').RequestHandler;
111
- express(config: ExpressConfig<T>): import('express').RequestHandler;
112
- readonly metaData: DbConcurrency<T>;
113
- interceptors: WithInterceptors;
114
- } & DbConnectable<T> & WithInterceptors;
115
-
116
- interface WithInterceptors {
117
- request: AxiosInterceptorManager<InternalAxiosRequestConfig>;
118
- response: AxiosInterceptorManager<AxiosResponse>;
119
- }
120
-
121
-
122
- type ExpressConfig<T> = {
123
- [K in keyof T]?: T[K] extends MappedTableDef<infer U>
124
- ? ExpressTableConfig<T>
125
- : never;
126
- } & {
127
- db?: Pool | ((connectors: Connectors) => Pool | Promise<Pool>);
128
- }
129
-
130
- type ExpressTableConfig<T> = {
131
- baseFilter?: RawFilter | ((db: MappedDbInstance<T>, req: import('express').Request, res: import('express').Response) => RawFilter);
132
- }
133
-
134
-
135
85
  type JsonPatch = Array<{
136
86
  op: 'add' | 'remove' | 'replace' | 'copy' | 'move' | 'test';
137
87
  path: string;
@@ -141,399 +91,10 @@ type JsonPatch = Array<{
141
91
 
142
92
  type ToJsonType<M> = M extends JsonOf<infer N> ? N : JsonType;
143
93
 
144
- type PrimaryRowFilter<T> = StrategyToRowDataPrimary<ExtractPrimary<T>>;
145
- type StrategyToRowDataPrimary<T> = {
146
- [K in keyof T]: T[K] extends StringColumnSymbol
147
- ? string
148
- : T[K] extends UuidColumnSymbol
149
- ? string
150
- : T[K] extends NumericColumnSymbol
151
- ? number
152
- : T[K] extends DateColumnSymbol
153
- ? string | Date
154
- : T[K] extends DateWithTimeZoneColumnSymbol
155
- ? string | Date
156
- : T[K] extends BinaryColumnSymbol
157
- ? string
158
- : T[K] extends BooleanColumnSymbol
159
- ? boolean
160
- : T[K] extends JSONColumnType<infer M>
161
- ? ToJsonType<M>
162
- : never;
163
- };
164
-
165
-
166
- type ExpandedFetchingStrategy<T> = {
167
- [K in keyof T &
168
- keyof RemoveNever<
169
- AllowedColumnsAndTablesStrategy<T>
170
- >]?: T[K] extends ColumnSymbols
171
- ? true
172
- : ExpandedFetchingStrategy<T[K]>;
173
- };
174
-
175
- type ExpandedMappedTable<T, FL = ExpandedFetchingStrategy<T>> = {
176
- getOne(
177
- filter?: Filter | PrimaryRowFilter<T>
178
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
179
- getOne<FS extends FetchingStrategy<T>>(
180
- filter?: Filter | PrimaryRowFilter<T>,
181
- fetchingStrategy?: FS
182
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
183
-
184
- update(
185
- values: StrategyToUpdateRowData<T>,
186
- where: FetchingStrategy<T>
187
- ): Promise<void>;
188
-
189
- update<FS extends FetchingStrategy<T>>(
190
- values: StrategyToUpdateRowData<T>,
191
- where: FetchingStrategy<T>,
192
- strategy: FS
193
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
194
-
195
- replace(
196
- row: StrategyToInsertRowData<T> | StrategyToInsertRowData<T>[]
197
- ): Promise<void>;
198
-
199
- replace<FS extends FetchingStrategy<T>>(
200
- row: StrategyToInsertRowData<T>,
201
- strategy: FS
202
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
203
-
204
- replace<FS extends FetchingStrategy<T>>(
205
- rows: StrategyToInsertRowData<T>[],
206
- strategy: FS
207
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
208
-
209
-
210
- updateChanges(
211
- row: StrategyToInsertRowData<T>,
212
- originalRow: StrategyToInsertRowData<T>
213
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
214
-
215
- updateChanges(
216
- rows: StrategyToInsertRowData<T>[],
217
- originalRows: StrategyToInsertRowData<T>[]
218
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
219
-
220
- updateChanges<FS extends FetchingStrategy<T>>(
221
- row: StrategyToInsertRowData<T>,
222
- originalRow: StrategyToInsertRowData<T>,
223
- strategy: FS
224
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
225
-
226
- updateChanges<FS extends FetchingStrategy<T>>(
227
- rows: StrategyToInsertRowData<T>[],
228
- originalRows: StrategyToInsertRowData<T>[],
229
- strategy: FS
230
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
231
-
232
- insert(
233
- row: StrategyToInsertRowData<T>
234
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
235
-
236
- insert(
237
- rows: StrategyToInsertRowData<T>[]
238
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
239
-
240
- insert<FS extends FetchingStrategy<T>>(
241
- row: StrategyToInsertRowData<T>,
242
- strategy: FS
243
- ): Promise<StrategyToRow<FetchedProperties<T, FL>, T>>;
244
-
245
- insert<FS extends FetchingStrategy<T>>(
246
- rows: StrategyToInsertRowData<T>[],
247
- strategy: FS
248
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
249
-
250
- insertAndForget(
251
- row: StrategyToRowData<T>
252
- ): Promise<void>;
253
-
254
- insertAndForget(
255
- row: StrategyToRowData<T>[]
256
- ): Promise<void>;
257
-
258
- getMany(
259
- filter?: Filter | PrimaryRowFilter<T>[]
260
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
261
- getMany<FS extends FetchingStrategy<T>>(
262
- filter?: Filter | PrimaryRowFilter<T>[],
263
- fetchingStrategy?: FS
264
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
265
- getAll(): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
266
- getAll<FS extends FetchingStrategy<T>>(
267
- fetchingStrategy: FS
268
- ): Promise<StrategyToRowArray<FetchedProperties<T, FL>, T>>;
269
- aggregate<FS extends AggregateStrategy<T>>(
270
- fetchingStrategy: FS
271
- ): Promise<StrategyToRowData<FetchedAggregateProperties<T, FL>>[]>;
272
- count(filter?: Filter | PrimaryRowFilter<T>[]): Promise<number>;
273
- delete(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
274
- deleteCascade(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
275
-
276
- proxify(
277
- row: StrategyToInsertRowData<T>
278
- ): StrategyToRow<FetchedProperties<T, FL>, T>;
279
-
280
- proxify(
281
- row: StrategyToInsertRowData<T>[]
282
- ): StrategyToRowArray<FetchedProperties<T, FL>, T>;
283
-
284
- proxify<FS extends FetchingStrategy<T>>(
285
- row: StrategyToInsertRowData<T>,
286
- strategy: FS
287
- ): StrategyToRow<FetchedProperties<T, FL>, T>;
288
-
289
- proxify<FS extends FetchingStrategy<T>>(
290
- row: StrategyToInsertRowData<T>[],
291
- strategy: FS
292
- ): StrategyToRowArray<FetchedProperties<T, FL>, T>;
293
-
294
-
295
- patch<C extends Concurrency<T>>(
296
- patch: JsonPatch,
297
- concurrency?: C
298
- ): Promise<void>;
299
-
300
- tsType<FS extends FetchingStrategy<T>>(
301
- strategy: FS
302
- ): StrategyToRowData<FetchedProperties<T, FS>>;
303
- tsType(
304
- ): StrategyToRowData<FetchedProperties<T, FL>>;
305
-
306
- readonly metaData: Concurrency<T>;
307
- } & MappedColumnsAndRelations<T> &
308
- GetById<T, CountProperties<ExtractPrimary<T>>>;
309
-
310
94
  type ReturnArrayOrObj<W, V1, V2> =
311
95
  W extends any[] ? V2 :
312
96
  V1;
313
97
 
314
- type MappedTable<T> = {
315
- expand(): ExpandedMappedTable<T>
316
- getOne(
317
- filter?: Filter | PrimaryRowFilter<T>
318
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
319
- getOne<FS extends FetchingStrategy<T>>(
320
- filter?: Filter | PrimaryRowFilter<T>,
321
- fetchingStrategy?: FS
322
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
323
-
324
- update(
325
- values: StrategyToUpdateRowData<T>,
326
- where: FetchingStrategy<T>
327
- ): Promise<void>;
328
-
329
- update<FS extends FetchingStrategy<T>>(
330
- values: StrategyToUpdateRowData<T>,
331
- where: FetchingStrategy<T>,
332
- strategy: FS
333
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
334
-
335
- replace(
336
- row: StrategyToInsertRowData<T> | StrategyToInsertRowData<T>[]
337
- ): Promise<void>;
338
-
339
- replace<FS extends FetchingStrategy<T>>(
340
- row: StrategyToInsertRowData<T>,
341
- strategy: FS
342
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
343
-
344
- replace<FS extends FetchingStrategy<T>>(
345
- rows: StrategyToInsertRowData<T>[],
346
- strategy: FS
347
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
348
-
349
- updateChanges(
350
- modifiedRow: StrategyToInsertRowData<T>,
351
- originalRow: StrategyToInsertRowData<T>
352
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
353
-
354
-
355
- updateChanges(
356
- modifiedRows: StrategyToInsertRowData<T>[],
357
- originalRows: StrategyToInsertRowData<T>[]
358
- ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
359
-
360
- updateChanges<FS extends FetchingStrategy<T>>(
361
- modifiedRow: StrategyToInsertRowData<T>,
362
- originalRow: StrategyToInsertRowData<T>,
363
- strategy: FS
364
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
365
-
366
- updateChanges<FS extends FetchingStrategy<T>>(
367
- modifiedRows: StrategyToInsertRowData<T>[],
368
- originalRows: StrategyToInsertRowData<T>[],
369
- strategy: FS
370
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
371
-
372
- insert(
373
- row: StrategyToInsertRowData<T>
374
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
375
-
376
- insert(
377
- rows: StrategyToInsertRowData<T>[]
378
- ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
379
-
380
- insert<FS extends FetchingStrategy<T>>(
381
- row: StrategyToInsertRowData<T>,
382
- strategy: FS
383
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
384
-
385
- insert<FS extends FetchingStrategy<T>>(
386
- rows: StrategyToInsertRowData<T>[],
387
- strategy: FS
388
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
389
-
390
- insertAndForget<TRow extends StrategyToInsertRowData<T> | StrategyToInsertRowData<T>[]>(
391
- row: TRow
392
- ): Promise<void>;
393
- getMany(
394
- filter?: Filter | PrimaryRowFilter<T>[]
395
- ): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
396
- getMany<FS extends FetchingStrategy<T>>(
397
- filter?: Filter | PrimaryRowFilter<T>[],
398
- fetchingStrategy?: FS
399
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
400
- getAll(): Promise<StrategyToRowArray<FetchedProperties<T, {}>, T>>;
401
- getAll<FS extends FetchingStrategy<T>>(
402
- fetchingStrategy: FS
403
- ): Promise<StrategyToRowArray<FetchedProperties<T, FS>, T>>;
404
-
405
- aggregate<FS extends AggregateStrategy<T>>(
406
- fetchingStrategy: FS
407
- ): Promise<StrategyToRowData<FetchedAggregateProperties<T, FS>>[]>;
408
-
409
- count(filter?: Filter | PrimaryRowFilter<T>[]): Promise<number>;
410
- delete(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
411
- deleteCascade(filter?: Filter | PrimaryRowFilter<T>[]): Promise<void>;
412
-
413
- proxify(
414
- row: StrategyToInsertRowData<T>
415
- ): StrategyToRow<FetchedProperties<T, {}>, T>;
416
-
417
- proxify(
418
- row: StrategyToInsertRowData<T>[]
419
- ): StrategyToRowArray<FetchedProperties<T, {}>, T>;
420
-
421
- proxify<FS extends FetchingStrategy<T>>(
422
- row: StrategyToInsertRowData<T>,
423
- strategy: FS
424
- ): StrategyToRow<FetchedProperties<T, FS>, T>;
425
-
426
- proxify<FS extends FetchingStrategy<T>>(
427
- row: StrategyToInsertRowData<T>[],
428
- strategy: FS
429
- ): StrategyToRowArray<FetchedProperties<T, FS>, T>;
430
-
431
- patch<C extends Concurrency<T>>(
432
- patch: JsonPatch,
433
- concurrency?: C
434
- ): Promise<void>;
435
-
436
- tsType<FS extends FetchingStrategy<T>>(
437
- strategy: FS
438
- ): StrategyToRowData<FetchedProperties<T, FS>>;
439
- tsType(
440
- ): StrategyToRowData<FetchedProperties<T, {}>>;
441
-
442
- readonly metaData: Concurrency<T>;
443
- } & MappedColumnsAndRelations<T> &
444
- GetById<T, CountProperties<ExtractPrimary<T>>>;
445
-
446
- type GetById<T, Count extends number> = Count extends 1
447
- ? {
448
- getById(
449
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>
450
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
451
- getById<FS extends FetchingStrategy<T>>(
452
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
453
- fetchingStrategy: FS
454
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
455
- }
456
- : Count extends 2
457
- ? {
458
- getById(
459
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
460
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>
461
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
462
- getById<FS extends FetchingStrategy<T>>(
463
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
464
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
465
- fetchingStrategy: FS
466
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
467
- }
468
- : Count extends 3
469
- ? {
470
- getById(
471
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
472
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
473
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>
474
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
475
- getById<FS extends FetchingStrategy<T>>(
476
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
477
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
478
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
479
- fetchingStrategy: FS
480
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
481
- }
482
- : Count extends 4
483
- ? {
484
- getById(
485
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
486
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
487
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
488
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>
489
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
490
- getById<FS extends FetchingStrategy<T>>(
491
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
492
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
493
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
494
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
495
- fetchingStrategy: FS
496
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
497
- }
498
- : Count extends 5
499
- ? {
500
- getById(
501
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
502
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
503
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
504
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
505
- id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>
506
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
507
- getById<FS extends FetchingStrategy<T>>(
508
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
509
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
510
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
511
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
512
- id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
513
- fetchingStrategy: FS
514
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
515
- }
516
- : Count extends 6
517
- ? {
518
- getById(
519
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
520
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
521
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
522
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
523
- id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
524
- id6: ColumnToType<PickPropertyValue6<PickTypesOf<T, IsPrimary>>>
525
- ): Promise<StrategyToRow<FetchedProperties<T, {}>, T>>;
526
- getById<FS extends FetchingStrategy<T>>(
527
- id: ColumnToType<PickPropertyValue1<PickTypesOf<T, IsPrimary>>>,
528
- id2: ColumnToType<PickPropertyValue2<PickTypesOf<T, IsPrimary>>>,
529
- id3: ColumnToType<PickPropertyValue3<PickTypesOf<T, IsPrimary>>>,
530
- id4: ColumnToType<PickPropertyValue4<PickTypesOf<T, IsPrimary>>>,
531
- id5: ColumnToType<PickPropertyValue5<PickTypesOf<T, IsPrimary>>>,
532
- id6: ColumnToType<PickPropertyValue6<PickTypesOf<T, IsPrimary>>>,
533
- fetchingStrategy: FS
534
- ): Promise<StrategyToRow<FetchedProperties<T, FS>, T>>;
535
- }
536
- : never;
537
98
 
538
99
  type ColumnToType<T> = T extends UuidColumnSymbol
539
100
  ? string
@@ -555,44 +116,6 @@ type ColumnToType<T> = T extends UuidColumnSymbol
555
116
  ? JsonType
556
117
  : never;
557
118
 
558
- type MappedColumnsAndRelations<T> = RemoveNeverFlat<{
559
- [K in keyof T]: T[K] extends StringColumnTypeDef<infer M>
560
- ? StringColumnType<M>
561
- : T[K] extends UuidColumnTypeDef<infer M>
562
- ? UuidColumnType<M>
563
- : T[K] extends NumericColumnTypeDef<infer M>
564
- ? NumericColumnType<M>
565
- : T[K] extends DateColumnTypeDef<infer M>
566
- ? DateColumnType<M>
567
- : T[K] extends DateWithTimeZoneColumnTypeDef<infer M>
568
- ? DateWithTimeZoneColumnType<M>
569
- : T[K] extends BinaryColumnTypeDef<infer M>
570
- ? BinaryColumnType<M>
571
- : T[K] extends BooleanColumnTypeDef<infer M>
572
- ? BooleanColumnType<M>
573
- : T[K] extends JSONColumnTypeDef<infer M>
574
- ? JSONColumnType<M>
575
- : T[K] extends ManyRelation
576
- ? MappedColumnsAndRelations<T[K]> &
577
- ManyTable<T[K]> & OneOrJoinTable<T[K]>
578
- : T[K] extends RelatedTable
579
- ? MappedColumnsAndRelations<T[K]> & OneOrJoinTable<T[K]>
580
- : never;
581
- }>;
582
-
583
- type OneOrJoinTable<T> = ((
584
- fn: (table: MappedColumnsAndRelations<T>) => RawFilter
585
- ) => Filter) & {
586
- exists: () => Filter;
587
- };
588
-
589
- type ManyTable<T> = ((
590
- ) => Filter) & {
591
- all(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
592
- any(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
593
- none(selector: (table: MappedColumnsAndRelations<T>) => RawFilter): Filter;
594
- };
595
-
596
119
  export type AllowedDbMap<T> = {
597
120
  [P in keyof T]: T[P] extends MappedTableDef<infer U> ? T[P] : never;
598
121
  };
@@ -605,64 +128,6 @@ type AllowedColumnsAndTablesConcurrency<T> = {
605
128
  };
606
129
 
607
130
 
608
- type FetchingStrategy<T> = FetchingStrategyBase<T> | AggType<T>
609
-
610
- type AggregateStrategy<T> = AggregateStrategyBase<T> | AggType<T>
611
-
612
- type AggType<T> = {
613
- [name: string]: AggregationFunction<T>;
614
- } & {
615
- where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
616
- };
617
-
618
- type AggregateStrategyBase<T> =
619
- {
620
- limit?: number;
621
- offset?: number;
622
- where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
623
- };
624
-
625
-
626
- type FetchingStrategyBase<T, IsMany = true> =
627
- {
628
- [K in keyof T &
629
- keyof RemoveNever<
630
- AllowedColumnsAndTablesStrategy<T>
631
- >]?: T[K] extends ColumnSymbols
632
- ? boolean
633
- : boolean | FetchingStrategyBase<T[K], T[K] extends ManyRelation ? true: false> | AggType<T[K]>;
634
- } &
635
- (IsMany extends true ? {
636
- limit?: number;
637
- offset?: number;
638
- orderBy?:
639
- | OrderBy<Extract<keyof AllowedColumns<T>, string>>[]
640
- | OrderBy<Extract<keyof AllowedColumns<T>, string>>;
641
- where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
642
- }
643
- : {
644
- where?: (agg: MappedColumnsAndRelations<T>) => RawFilter;
645
- });
646
-
647
- type ExtractAggregates<Agg> = {
648
- [K in keyof Agg as
649
- Required<Agg>[K] extends (agg: Aggregate<infer V>) => ColumnSymbols
650
- ? K extends 'where' ? never : K
651
- : never
652
- ]: Agg[K] extends (agg: Aggregate<infer V>) => infer R ? R : never;
653
- }
654
-
655
- type AggregationFunction<T> = (agg: Aggregate<T>) => ColumnSymbols;
656
-
657
- type Aggregate<T> =
658
- RelatedColumns<T> &
659
- {
660
- sum(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
661
- avg(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
662
- min(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
663
- max(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
664
- count(fn: (x: AggregateColumns<T>) => NumericColumnSymbol): NumericColumnSymbol & NotNull;
665
- }
666
131
 
667
132
  type RelatedColumns<T> = RemoveNeverFlat<{
668
133
  [K in keyof T]:
@@ -738,8 +203,6 @@ type DbConcurrency<T> = {
738
203
  type ConcurrencyValues = 'optimistic' | 'skipOnConflict' | 'overwrite';
739
204
 
740
205
 
741
- type OrderBy<T extends string> = `${T} ${'asc' | 'desc'}` | T;
742
-
743
206
  type RelatedTable = {
744
207
  [' relatedTable']: boolean;
745
208
  };
@@ -979,7 +442,6 @@ type MappedTableDefInit<T> = {
979
442
  ): MappedTableDef<T & V>;
980
443
  } & T;
981
444
 
982
- //todo
983
445
  type MappedTableDef<T> = {
984
446
  map<V extends AllowedColumnsAndTablesMap<V>>(
985
447
  callback: (mapper: ColumnMapper<T>) => V
@@ -1017,33 +479,6 @@ type NullInsertProperties<T> = Pick<
1017
479
  type ColumnTypes = ColumnSymbols;
1018
480
  type ColumnAndTableTypes = ColumnSymbols | RelatedTable;
1019
481
 
1020
- type StrategyToRow<T, U> = StrategyToRowData<T> & {
1021
- saveChanges(): Promise<void>;
1022
- saveChanges<C extends Concurrency<U>>(concurrency?: C): Promise<void>;
1023
- acceptChanges(): void;
1024
- clearChanges(): void;
1025
- refresh(): Promise<void>;
1026
- refresh<FS extends FetchingStrategy<U>>(
1027
- fetchingStrategy?: FS
1028
- ): Promise<StrategyToRow<FetchedProperties<U, FS>, U>>;
1029
- delete(): Promise<void>;
1030
- delete(concurrency: Concurrency<U>): Promise<void>;
1031
- };
1032
-
1033
-
1034
- type StrategyToRowArray<T, U> = StrategyToRowData<T>[] & {
1035
- saveChanges(): Promise<void>;
1036
- saveChanges<C extends Concurrency<U>>(concurrency?: C): Promise<void>;
1037
- acceptChanges(): void;
1038
- clearChanges(): void;
1039
- refresh(): Promise<void>;
1040
- refresh<FS extends FetchingStrategy<U>>(
1041
- fetchingStrategy?: FS
1042
- ): Promise<StrategyToRowArray<FetchedProperties<U, FS>, U>>;
1043
- delete(): Promise<void>;
1044
- delete(concurrency: Concurrency<U>): Promise<void>;
1045
- };
1046
-
1047
482
  type JsonValue = null | boolean | number | string | JsonArray | JsonObject;
1048
483
 
1049
484
  interface JsonArray extends Array<JsonValue> { }
@@ -1102,176 +537,6 @@ type ExtractColumnBools<T, TStrategy> = RemoveNever<{
1102
537
 
1103
538
  type NegotiateNotNull<T> = T extends NotNull ? NotNull : {};
1104
539
 
1105
- type FetchedProperties<T, TStrategy> = FetchedColumnProperties<T, TStrategy> & FetchedRelationProperties<T, TStrategy> & ExtractAggregates<TStrategy>
1106
- type FetchedAggregateProperties<T, TStrategy> = ExtractAggregates<TStrategy>;
1107
-
1108
-
1109
- type FetchedRelationProperties<T, TStrategy> = RemoveNeverFlat<{
1110
- [K in keyof T]: K extends keyof TStrategy
1111
- ? TStrategy[K] extends true
1112
- ? T[K] extends ColumnSymbols
1113
- ? never
1114
- : T[K] extends ManyRelation
1115
- ? FetchedProperties<T[K], {}> & ManyRelation
1116
- : FetchedProperties<T[K], {}> & NegotiateNotNull<T[K]>
1117
- : TStrategy[K] extends false
1118
- ? never
1119
- : T[K] extends ManyRelation
1120
- ? FetchedProperties<T[K], TStrategy[K]> & ManyRelation
1121
- : FetchedProperties<T[K], TStrategy[K]> & NegotiateNotNull<T[K]>
1122
- : never;
1123
- }>;
1124
-
1125
- type FetchedColumnProperties<T, TStrategy> = RemoveNeverFlat<
1126
- AtLeastOneTrue<ExtractColumnBools<T, TStrategy>> extends true
1127
- ? {
1128
- [K in keyof T]: K extends keyof TStrategy
1129
- ? TStrategy[K] extends true
1130
- ? T[K] extends ColumnSymbols
1131
- ? T[K]
1132
- : never
1133
- : never
1134
- : never;
1135
- }
1136
- : {
1137
- [K in keyof T]: K extends keyof TStrategy
1138
- ? TStrategy[K] extends true
1139
- ? T[K] extends ColumnSymbols
1140
- ? T[K]
1141
- : never
1142
- : never
1143
- : NegotiateDefaultStrategy<T[K]>;
1144
- }
1145
- >;
1146
-
1147
- type StrategyToRowData<T> = {
1148
- [K in keyof RemoveNever<
1149
- NotNullProperties<T>
1150
- >]: T[K] extends StringColumnSymbol
1151
- ? string
1152
- : T[K] extends UuidColumnSymbol
1153
- ? string
1154
- : T[K] extends NumericColumnSymbol
1155
- ? number
1156
- : T[K] extends DateColumnSymbol
1157
- ? string | Date
1158
- : T[K] extends DateWithTimeZoneColumnSymbol
1159
- ? string | Date
1160
- : T[K] extends BinaryColumnSymbol
1161
- ? string
1162
- : T[K] extends BooleanColumnSymbol
1163
- ? boolean
1164
- : T[K] extends JsonOf<infer M>
1165
- ? M
1166
- : T[K] extends JSONColumnSymbol
1167
- ? JsonType
1168
- : T[K] extends ManyRelation
1169
- ? StrategyToRowData<T[K]>[]
1170
- : StrategyToRowData<T[K]>;
1171
- } & {
1172
- [K in keyof RemoveNever<
1173
- NullProperties<T>
1174
- >]?: T[K] extends StringColumnSymbol
1175
- ? string | null
1176
- : T[K] extends UuidColumnSymbol
1177
- ? string | null
1178
- : T[K] extends NumericColumnSymbol
1179
- ? number | null
1180
- : T[K] extends DateColumnSymbol
1181
- ? string | Date | null
1182
- : T[K] extends DateWithTimeZoneColumnSymbol
1183
- ? string | Date | null
1184
- : T[K] extends BinaryColumnSymbol
1185
- ? string | null
1186
- : T[K] extends BooleanColumnSymbol
1187
- ? boolean | null
1188
- : T[K] extends JsonOf<infer M>
1189
- ? M | null
1190
- : T[K] extends JSONColumnSymbol
1191
- ? JsonType | null
1192
- : T[K] extends ManyRelation
1193
- ? StrategyToRowData<T[K]>[]
1194
- : StrategyToRowData<T[K]>;
1195
- };
1196
-
1197
- type StrategyToUpdateRowData<T> = Omit<{
1198
- [K in keyof T]?: T[K] extends StringColumnSymbol
1199
- ? string
1200
- : T[K] extends UuidColumnSymbol
1201
- ? string
1202
- : T[K] extends NumericColumnSymbol
1203
- ? number
1204
- : T[K] extends DateColumnSymbol
1205
- ? string | Date
1206
- : T[K] extends DateWithTimeZoneColumnSymbol
1207
- ? string | Date
1208
- : T[K] extends BinaryColumnSymbol
1209
- ? string
1210
- : T[K] extends BooleanColumnSymbol
1211
- ? boolean
1212
- : T[K] extends JsonOf<infer M>
1213
- ? M
1214
- : T[K] extends JSONColumnSymbol
1215
- ? JsonType
1216
- : T[K] extends ManyRelation
1217
- ? StrategyToInsertRowData<T[K]>[]
1218
- : StrategyToInsertRowData<T[K]>;
1219
- }, 'formulaDiscriminators' | 'columnDiscriminators' | ' notNull' | ' notNullExceptInsert' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1220
- ;
1221
-
1222
- type StrategyToInsertRowData<T> = Omit<{
1223
- [K in keyof RemoveNever<
1224
- NotNullInsertProperties<T>
1225
- >]: T[K] extends StringColumnSymbol
1226
- ? string
1227
- : T[K] extends UuidColumnSymbol
1228
- ? string
1229
- : T[K] extends NumericColumnSymbol
1230
- ? number
1231
- : T[K] extends DateColumnSymbol
1232
- ? string | Date
1233
- : T[K] extends DateWithTimeZoneColumnSymbol
1234
- ? string | Date
1235
- : T[K] extends BinaryColumnSymbol
1236
- ? string
1237
- : T[K] extends BooleanColumnSymbol
1238
- ? boolean
1239
- : T[K] extends JsonOf<infer M>
1240
- ? M
1241
- : T[K] extends JSONColumnSymbol
1242
- ? JsonType
1243
- : T[K] extends ManyRelation
1244
- ? StrategyToInsertRowData<T[K]>[]
1245
- : StrategyToInsertRowData<T[K]>;
1246
- } & {
1247
- [K in keyof RemoveNever<
1248
- NullInsertProperties<T>
1249
- >]?: T[K] extends StringColumnSymbol
1250
- ? string | null
1251
- : T[K] extends UuidColumnSymbol
1252
- ? string | null
1253
- : T[K] extends NumericColumnSymbol
1254
- ? number | null
1255
- : T[K] extends DateColumnSymbol
1256
- ? string | Date | null
1257
- : T[K] extends DateWithTimeZoneColumnSymbol
1258
- ? string | Date | null
1259
- : T[K] extends BinaryColumnSymbol
1260
- ? string | null
1261
- : T[K] extends BooleanColumnSymbol
1262
- ? boolean | null
1263
- : T[K] extends JsonOf<infer M>
1264
- ? M | null
1265
- : T[K] extends JSONColumnSymbol
1266
- ? JsonType | null
1267
- : T[K] extends ManyRelation
1268
- ? StrategyToInsertRowData<T[K]>[]
1269
- : StrategyToInsertRowData<T[K]>;
1270
- }, 'formulaDiscriminators' | 'columnDiscriminators' | ' notNull' | ' notNullExceptInsert' | 'map' | ' isManyRelation' | ' relatedTable' | ' isOneRelation'>
1271
- ;
1272
-
1273
- type NegotiateDefaultStrategy<T> = T extends ColumnSymbols ? T : never;
1274
-
1275
540
  type RemoveNever<T> = {
1276
541
  [K in keyof T as T[K] extends never ? never : K]: T[K] extends object
1277
542
  ? RemoveNever<T[K]>
@@ -1285,183 +550,54 @@ type RemoveNeverFlat<T> = {
1285
550
  type UuidColumnSymbol = {
1286
551
  [' isUuid']: true;
1287
552
  };
1288
- type UuidColumnType<M> = {
1289
- equal(value: string | null | undefined): Filter;
1290
- eq(value: string | null | undefined): Filter;
1291
- notEqual(value: string | null | undefined): Filter;
1292
- ne(value: string | null | undefined): Filter;
1293
- lessThan(value: string | null | undefined): Filter;
1294
- lt(value: string | null | undefined): Filter;
1295
- lessThanOrEqual(value: string | null | undefined): Filter;
1296
- le(value: string | null | undefined): Filter;
1297
- greaterThan(value: string | null | undefined): Filter;
1298
- gt(value: string | null | undefined): Filter;
1299
- greaterThanOrEqual(value: string | null | undefined): Filter;
1300
- ge(value: string | null | undefined): Filter;
1301
- between(from: string | null | undefined, to: string | null | undefined): Filter;
1302
- in(values: Array<string | null | undefined>): Filter;
1303
- } & M &
553
+ type UuidColumnType<M> = M &
1304
554
  UuidColumnSymbol;
1305
555
 
1306
556
  type BinaryColumnSymbol = {
1307
557
  [' isBinary']: true;
1308
558
  };
1309
- type BinaryColumnType<M> = {
1310
- equal(value: string | null | undefined): Filter;
1311
- eq(value: string | null | undefined): Filter;
1312
- notEqual(value: string | null | undefined): Filter;
1313
- ne(value: string | null | undefined): Filter;
1314
- lessThan(value: string | null | undefined): Filter;
1315
- lt(value: string | null | undefined): Filter;
1316
- lessThanOrEqual(value: string | null | undefined): Filter;
1317
- le(value: string | null | undefined): Filter;
1318
- greaterThan(value: string | null | undefined): Filter;
1319
- gt(value: string | null | undefined): Filter;
1320
- greaterThanOrEqual(value: string | null | undefined): Filter;
1321
- ge(value: string | null | undefined): Filter;
1322
- between(from: string | null | undefined, to: string | null | undefined): Filter;
1323
- in(values: Array<string | null | undefined>): Filter;
1324
- } & M &
559
+ type BinaryColumnType<M> = M &
1325
560
  BinaryColumnSymbol;
1326
561
 
1327
562
  type BooleanColumnSymbol = {
1328
563
  [' isBoolean']: true;
1329
564
  };
1330
565
 
1331
- type BooleanColumnType<M> = {
1332
- equal(value: boolean | null | undefined): Filter;
1333
- eq(value: boolean | null | undefined): Filter;
1334
- notEqual(value: boolean | null | undefined): Filter;
1335
- ne(value: boolean | null | undefined): Filter;
1336
- lessThan(value: boolean | null | undefined): Filter;
1337
- lt(value: boolean | null | undefined): Filter;
1338
- lessThanOrEqual(value: boolean | null | undefined): Filter;
1339
- le(value: boolean | null | undefined): Filter;
1340
- greaterThan(value: boolean | null | undefined): Filter;
1341
- gt(value: boolean | null | undefined): Filter;
1342
- greaterThanOrEqual(value: boolean | null | undefined): Filter;
1343
- ge(value: boolean | null | undefined): Filter;
1344
- between(from: boolean | null | undefined, to: boolean | null | undefined): Filter;
1345
- in(values: Array<boolean | null | undefined>): Filter;
1346
- } & M &
566
+ type BooleanColumnType<M> = M &
1347
567
  BooleanColumnSymbol;
1348
568
 
1349
569
  type DateColumnSymbol = {
1350
570
  [' isDate']: true;
1351
571
  };
1352
572
 
1353
- type DateColumnType<M> = {
1354
- equal(value: string | Date | null | undefined): Filter;
1355
- eq(value: string | Date | null | undefined): Filter;
1356
- notEqual(value: string | Date | null | undefined): Filter;
1357
- ne(value: string | Date | null | undefined): Filter;
1358
- lessThan(value: string | Date | null | undefined): Filter;
1359
- lt(value: string | Date | null | undefined): Filter;
1360
- lessThanOrEqual(value: string | Date | null | undefined): Filter;
1361
- le(value: string | Date | null | undefined): Filter;
1362
- greaterThan(value: string | Date | null | undefined): Filter;
1363
- gt(value: string | Date | null | undefined): Filter;
1364
- greaterThanOrEqual(value: string | Date | null | undefined): Filter;
1365
- ge(value: string | Date | null | undefined): Filter;
1366
- between(from: string | Date, to: string | Date | null | undefined): Filter;
1367
- in(values: Array<string | Date | null | undefined>): Filter;
1368
- } & M &
573
+ type DateColumnType<M> = M &
1369
574
  DateColumnSymbol;
1370
575
 
1371
576
  type DateWithTimeZoneColumnSymbol = {
1372
577
  [' isDateTimeZone']: true;
1373
578
  };
1374
579
 
1375
- type DateWithTimeZoneColumnType<M> = {
1376
- equal(value: string | Date | null | undefined): Filter;
1377
- eq(value: string | Date | null | undefined): Filter;
1378
- notEqual(value: string | Date | null | undefined): Filter;
1379
- ne(value: string | Date | null | undefined): Filter;
1380
- lessThan(value: string | Date | null | undefined): Filter;
1381
- lt(value: string | Date | null | undefined): Filter;
1382
- lessThanOrEqual(value: string | Date | null | undefined): Filter;
1383
- le(value: string | Date | null | undefined): Filter;
1384
- greaterThan(value: string | Date | null | undefined): Filter;
1385
- gt(value: string | Date | null | undefined): Filter;
1386
- greaterThanOrEqual(value: string | Date | null | undefined): Filter;
1387
- ge(value: string | Date | null | undefined): Filter;
1388
- between(from: string | Date, to: string | Date | null | undefined): Filter;
1389
- in(values: Array<string | Date | null | undefined>): Filter;
1390
- } & M &
580
+ type DateWithTimeZoneColumnType<M> = M &
1391
581
  DateWithTimeZoneColumnSymbol;
1392
582
 
1393
583
  type StringColumnSymbol = {
1394
584
  [' isString']: true;
1395
585
  };
1396
586
 
1397
- type StringColumnType<M> = {
1398
- equal(value: string | null | undefined): Filter;
1399
- eq(value: string | null | undefined): Filter;
1400
- notEqual(value: string | null | undefined): Filter;
1401
- ne(value: string | null | undefined): Filter;
1402
- lessThan(value: string | null | undefined): Filter;
1403
- lt(value: string | null | undefined): Filter;
1404
- lessThanOrEqual(value: string | null | undefined): Filter;
1405
- le(value: string | null | undefined): Filter;
1406
- greaterThan(value: string | null | undefined): Filter;
1407
- gt(value: string | null | undefined): Filter;
1408
- greaterThanOrEqual(value: string | null | undefined): Filter;
1409
- ge(value: string | null | undefined): Filter;
1410
- between(from: string | null | undefined, to: string | null | undefined): Filter;
1411
- in(values: Array<string | null | undefined>): Filter;
1412
-
1413
- startsWith(value: string | null | undefined): Filter;
1414
- endsWith(value: string | null | undefined): Filter;
1415
- contains(value: string | null | undefined): Filter;
1416
- iStartsWith(value: string | null | undefined): Filter;
1417
- iEndsWith(value: string | null | undefined): Filter;
1418
- iContains(value: string | null | undefined): Filter;
1419
- iEqual(value: string | null | undefined): Filter;
1420
- ieq(value: string | null | undefined): Filter;
1421
- } & M &
587
+ type StringColumnType<M> = M &
1422
588
  StringColumnSymbol;
1423
589
 
1424
590
  type NumericColumnSymbol = {
1425
591
  [' isNumeric']: true;
1426
592
  };
1427
- type NumericColumnType<M> = {
1428
- equal(value: number | null | undefined): Filter;
1429
- eq(value: number | null | undefined): Filter;
1430
- notEqual(value: number | null | undefined): Filter;
1431
- ne(value: number | null | undefined): Filter;
1432
- lessThan(value: number | null | undefined): Filter;
1433
- lt(value: number | null | undefined): Filter;
1434
- lessThanOrEqual(value: number | null | undefined): Filter;
1435
- le(value: number | null | undefined): Filter;
1436
- greaterThan(value: number | null | undefined): Filter;
1437
- gt(value: number | null | undefined): Filter;
1438
- greaterThanOrEqual(value: number | null | undefined): Filter;
1439
- ge(value: number | null | undefined): Filter;
1440
- between(from: number, to: number | null | undefined): Filter;
1441
- in(values: Array<number | null | undefined>): Filter;
1442
- } & M &
593
+ type NumericColumnType<M> = M &
1443
594
  NumericColumnSymbol;
1444
595
 
1445
596
  type JSONColumnSymbol = {
1446
597
  [' isJSON']: true;
1447
598
  };
1448
599
 
1449
- type JSONColumnType<M> = {
1450
- equal(value: ToJsonType<M> | null | undefined): Filter;
1451
- eq(value: ToJsonType<M> | null | undefined): Filter;
1452
- notEqual(value: ToJsonType<M> | null | undefined): Filter;
1453
- ne(value: ToJsonType<M> | null | undefined): Filter;
1454
- lessThan(value: ToJsonType<M> | null | undefined): Filter;
1455
- lt(value: ToJsonType<M> | null | undefined): Filter;
1456
- lessThanOrEqual(value: ToJsonType<M> | null | undefined): Filter;
1457
- le(value: ToJsonType<M> | null | undefined): Filter;
1458
- greaterThan(value: ToJsonType<M> | null | undefined): Filter;
1459
- gt(value: ToJsonType<M> | null | undefined): Filter;
1460
- greaterThanOrEqual(value: ToJsonType<M> | null | undefined): Filter;
1461
- ge(value: ToJsonType<M> | null | undefined): Filter;
1462
- between(from: ToJsonType<M>, to: ToJsonType<M> | null | undefined): Filter;
1463
- in(values: Array<ToJsonType<M> | null | undefined>): Filter;
1464
- } & M &
600
+ type JSONColumnType<M> = M &
1465
601
  JSONColumnSymbol;
1466
602
 
1467
603
  interface IsPrimary {
package/src/map2.d.ts CHANGED
@@ -207,13 +207,18 @@ type ValidColumnFilterTypes<M extends Record<string, TableDefinition<M>>, K exte
207
207
 
208
208
  // Column selection refs without filter methods - only for getting values/references
209
209
  type ColumnSelectionRefs<M extends Record<string, TableDefinition<M>>, K extends keyof M> = {
210
- // Required columns (notNull = true)
211
- [C in keyof M[K]['columns'] as IsRequired<M[K]['columns'][C]> extends true ? C : never]: ColumnTypeToTS<M[K]['columns'][C]>;
212
- } & {
213
- // Optional columns (nullable)
214
- [C in keyof M[K]['columns'] as IsRequired<M[K]['columns'][C]> extends true ? never : C]?: ColumnTypeToTS<M[K]['columns'][C]> | null | undefined;
210
+ [C in keyof M[K]['columns']]: M[K]['columns'][C];
215
211
  };
216
212
 
213
+
214
+ // type ColumnSelectionRefs<M extends Record<string, TableDefinition<M>>, K extends keyof M> = {
215
+ // // Required columns (notNull = true)
216
+ // [C in keyof M[K]['columns'] as IsRequired<M[K]['columns'][C]> extends true ? C : never]: ColumnTypeToTS<M[K]['columns'][C]>;
217
+ // } & {
218
+ // // Optional columns (nullable)
219
+ // [C in keyof M[K]['columns'] as IsRequired<M[K]['columns'][C]> extends true ? never : C]?: ColumnTypeToTS<M[K]['columns'][C]> | null | undefined;
220
+ // };
221
+
217
222
  // Relation selection refs without filter methods - supports deep nesting
218
223
  // In selectors, all relation types just provide access to the target table structure
219
224
  // But WITHOUT aggregate functions (only available at root level)
@@ -578,6 +583,45 @@ type WithActiveRecord<T, M extends Record<string, TableDefinition<M>>, K extends
578
583
  type WithArrayActiveRecord<T extends Array<any>, M extends Record<string, TableDefinition<M>>, K extends keyof M> =
579
584
  T & ArrayActiveRecordMethods<M, K>;
580
585
 
586
+ // Separate CustomSelectorProperties for aggregate (allows column name overlap)
587
+ type AggregateCustomSelectorProperties<M extends Record<string, TableDefinition<M>>, K extends keyof M, FS extends Record<string, any>> = {
588
+ // Required properties (count, sum, avg) - no question mark, no null/undefined
589
+ [P in keyof FS as
590
+ P extends ReservedFetchStrategyProps ? never :
591
+ P extends (M[K] extends { relations: infer R } ? keyof R : never) ? never :
592
+ FS[P] extends (row: any) => any ?
593
+ (FS[P] extends (row: RootSelectionRefs<M, K>) => infer ReturnType
594
+ ? IsRequiredAggregate<ReturnType> extends true
595
+ ? P // Required aggregates
596
+ : never
597
+ : never)
598
+ : never
599
+ ]: FS[P] extends (row: RootSelectionRefs<M, K>) => infer ReturnType
600
+ ? number // Required aggregate functions (count, sum, avg) return required number
601
+ : never;
602
+ } & {
603
+ // Optional properties (max, min, plain columns) - with question mark AND null/undefined
604
+ [P in keyof FS as
605
+ P extends ReservedFetchStrategyProps ? never :
606
+ P extends (M[K] extends { relations: infer R } ? keyof R : never) ? never :
607
+ FS[P] extends (row: any) => any ?
608
+ (FS[P] extends (row: RootSelectionRefs<M, K>) => infer ReturnType
609
+ ? IsRequiredAggregate<ReturnType> extends true
610
+ ? never // Required aggregates are not optional
611
+ : P // Everything else is optional
612
+ : never)
613
+ : never
614
+ ]?: FS[P] extends (row: RootSelectionRefs<M, K>) => infer ReturnType
615
+ ? IsMinMaxAggregate<ReturnType> extends true
616
+ ? ExtractMinMaxColumnType<ReturnType> | null | undefined
617
+ : IsAggregateFunction<ReturnType> extends true
618
+ ? number | null | undefined
619
+ : ReturnType extends ORMColumnDefinition | ORMJsonColumnDefinition
620
+ ? ColumnDefinitionToTS<ReturnType> | null | undefined
621
+ : never
622
+ : never;
623
+ };
624
+
581
625
  export type TableClient<M extends Record<string, TableDefinition<M>>, K extends keyof M> = {
582
626
  // Array methods - return arrays with array-level active record methods, but individual items are plain
583
627
  getAll(): Promise<WithArrayActiveRecord<Array<DeepExpand<Selection<M, K, {}>>>, M, K>>;
@@ -586,7 +630,9 @@ export type TableClient<M extends Record<string, TableDefinition<M>>, K extends
586
630
  getMany<strategy extends FetchStrategy<M, K>>(filter: RawFilter | Array<PrimaryKeyObject<M, K>>, strategy: strategy): Promise<WithArrayActiveRecord<Array<DeepExpand<Selection<M, K, strategy>>>, M, K>>;
587
631
 
588
632
  // Aggregate methods - return plain objects (no active record methods)
589
- aggregate<strategy extends AggregateStrategy<M, K>>(strategy: strategy): Promise<Array<DeepExpand<CustomSelectorProperties<M, K, strategy>>>>;
633
+ aggregate<strategy extends AggregateStrategy<M, K>>(strategy: strategy): Promise<Array<DeepExpand<AggregateCustomSelectorProperties<M, K, strategy>>>>;
634
+
635
+
590
636
 
591
637
  // Single item methods - return individual objects with individual active record methods
592
638
  getOne<strategy extends FetchStrategy<M, K>>(
package/src/cyclic.d.ts DELETED
@@ -1,132 +0,0 @@
1
- // Type definitions using a type mapping approach
2
- type EntityMap = {
3
- Order: {
4
- id: string;
5
- date: Date;
6
- total: number;
7
- };
8
- Line: {
9
- id: string;
10
- quantity: number;
11
- price: number;
12
- };
13
- Package: {
14
- id: string;
15
- trackingNumber: string;
16
- weight: number;
17
- };
18
- Customer: {
19
- id: string;
20
- name: string;
21
- email: string;
22
- };
23
- };
24
-
25
- // Enhanced relation mapping that includes cardinality information
26
- type RelationMap = {
27
- Order: {
28
- lines: { type: 'Line'; isArray: true };
29
- customer: { type: 'Customer'; isArray: false };
30
- };
31
- Line: {
32
- packages: { type: 'Package'; isArray: true };
33
- order: { type: 'Order'; isArray: false };
34
- };
35
- Customer: {
36
- orders: { type: 'Order'; isArray: true };
37
- };
38
- Package: {};
39
- };
40
-
41
- // Helper type to extract the entity type from a relation
42
- type RelationEntityType<R> = R extends { type: infer T extends keyof EntityMap } ? T : never;
43
-
44
- // Helper type to determine if a relation is an array
45
- type IsArray<R> = R extends { isArray: infer A extends boolean } ? A : false;
46
-
47
- // Generic deep type resolver
48
- type Depth = [never, 0, 1, 2, 3, 4, 5];
49
-
50
- // RecursiveType generic with improved depth handling
51
- type RecursiveType<
52
- T extends keyof EntityMap,
53
- D extends number = 5
54
- > = {
55
- // Always include base properties
56
- [K in keyof EntityMap[T]]: EntityMap[T][K];
57
- } & (D extends 0
58
- ? // At max depth, only include base properties (which are already included above)
59
- {}
60
- : // Otherwise include relations with appropriate depth reduction
61
- {
62
- [K in keyof RelationMap[T]]: IsArray<RelationMap[T][K]> extends true
63
- ? RecursiveType<
64
- RelationEntityType<RelationMap[T][K]>,
65
- Depth[D]
66
- >[]
67
- : RecursiveType<
68
- RelationEntityType<RelationMap[T][K]>,
69
- Depth[D]
70
- >;
71
- });
72
-
73
- // Generate the entity types with relationships resolved to the specified depth
74
- type Order = RecursiveType<'Order', 6>;
75
-
76
- type Line = RecursiveType<'Line'>;
77
- type Package = RecursiveType<'Package'>;
78
- type Customer = RecursiveType<'Customer'>;
79
-
80
- // Example usage
81
- function processOrder(order: Order, line: Line) {
82
- // Can access nested properties up to depth 5
83
- // const trackingNumber = order.customer.orders[0].lines[0].order.lines[0].packages[0].
84
- // const orderId = order.customer.orders[0].customer.orders[0].lines[0].
85
- line.order.customer.orders[0].lines[0].packages[0].
86
-
87
- console.log(trackingNumber, orderId);
88
- }
89
-
90
- // Allow custom depth control per entity type
91
- type OrderWithDepth1 = RecursiveType<'Order', 4>;
92
-
93
- // Example with custom depth
94
- function processOrderWithLimitedDepth(order: OrderWithDepth1) {
95
- // This would work (depth 1)
96
-
97
- console.log(order.customer.id); // Can access base properties at max depth
98
- console.log(order.customer.name); // Can access base properties at max depth
99
-
100
- // This would error - beyond depth 1
101
- // console.log(order.customer.orders[0].id);
102
- }
103
-
104
- // Example of creating an instance with this type system
105
- const sampleOrder: Order = {
106
- id: "ORD-123",
107
- date: new Date(),
108
- total: 299.99,
109
- customer: {
110
- id: "CUST-456",
111
- name: "John Doe",
112
- email: "john@example.com",
113
- orders: [
114
- /* would be recursive orders */
115
- ]
116
- },
117
- lines: [
118
- {
119
- id: "LINE-789",
120
- quantity: 2,
121
- price: 149.99,
122
- order: /* circular reference */,
123
- packages: [
124
- {
125
- id: "PKG-101",
126
- trackingNumber: "TRK123456789",
127
- weight: 1.5
128
- }
129
- ]
130
- }
131
- ]
132
- };