prisma-ts-select 0.1.6 → 0.1.8

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.
@@ -4,6 +4,7 @@ import { S as SQLExpr, L as LitToType } from './sql-expr-BGSEwzCi.js';
4
4
  type PrismaClient = any;
5
5
 
6
6
  declare const DB: DBType;
7
+ type M2MMap = {};
7
8
  type TDB = typeof DB;
8
9
  type DeepWriteable<T> = {
9
10
  -readonly [P in keyof T]: DeepWriteable<T[P]>;
@@ -236,7 +237,7 @@ type WhereCriteriaMulti<T extends TArrSources, TFields extends TFieldsType, F =
236
237
  type WhereCriteria<T extends TArrSources, TFields extends TFieldsType> = T['length'] extends 1 ? T[0] extends TVirtualTableSource ? WhereCriteriaMulti<T, TFields> : WhereCriteriaSingle<TFields[GetAliasTableNames<T[0]>]> : WhereCriteriaMulti<T, TFields>;
237
238
  type JoinWhereCriteria<Table extends string, TAlias extends string | never> = [
238
239
  TAlias
239
- ] extends [never] ? WhereCriteriaMulti<[Table], Record<Table, GetFieldsFromTable<Table>>> : WhereCriteriaMulti<[[Table, TAlias]], Record<TAlias, GetFieldsFromTable<Table>>>;
240
+ ] extends [never] ? WhereCriteriaMulti<[Table], Record<Table, GetFieldsFromTable<Table>>> : WhereCriteriaMulti<[[Table, TAlias]], Record<Table, GetFieldsFromTable<Table>>>;
240
241
  type WhereCriteria_Fields<T extends Array<TTableSources>, TFields extends TFieldsType, acc = {}> = T extends readonly [infer HEAD, ...infer Rest] ? HEAD extends string ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<HEAD, TFields[HEAD]> | SQLCondition<TableFieldType<HEAD, TFields[HEAD]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<HEAD, TFields[HEAD]> | SQLCondition<TableFieldType<HEAD, TFields[HEAD]>>)>> : HEAD extends readonly ["__cte__", infer CTE_NAME extends string] ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<CTE_NAME, TFields[CTE_NAME]> | SQLCondition<TableFieldType<CTE_NAME, TFields[CTE_NAME]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<CTE_NAME, TFields[CTE_NAME]> | SQLCondition<TableFieldType<CTE_NAME, TFields[CTE_NAME]>>)>> : HEAD extends [infer R_NAME extends string, infer A_NAME extends string] ? Rest extends Array<TTableSources> ? WhereCriteria_Fields<Rest, TFields, OptionalObject<acc & (TableFieldType<A_NAME, TFields[R_NAME]> | SQLCondition<TableFieldType<A_NAME, TFields[R_NAME]>>)>> : WhereCriteria_Fields<[], TFields, OptionalObject<acc & (TableFieldType<A_NAME, TFields[R_NAME]> | SQLCondition<TableFieldType<A_NAME, TFields[R_NAME]>>)>> : never : acc;
241
242
  type OnlyNull<T, R> = T extends null ? R : never;
242
243
  type FindColsWithNull<TFields extends TFieldsType> = Prettify<{
@@ -306,6 +307,9 @@ type FieldsByTypeByTable = Prettify<{
306
307
  }>;
307
308
  type GetColumnType<Table extends TTableSources, Col1 extends keyof _db[Table extends string ? Table : `Come back to 8`]["fields"]> = RemoveNullChar<IsString<_db[Table extends string ? Table : `Come back to 9`]["fields"][Col1]>>;
308
309
  type GetJoinOnColsType<Type extends string, TSources extends TArrSources> = GetJoinColsType<TSources[number], Type>;
310
+ type GetCTECols<TCTEs extends Record<string, Record<string, any>>> = {
311
+ [K in keyof TCTEs & string]: `${K}.${keyof TCTEs[K] & string}`;
312
+ }[keyof TCTEs & string];
309
313
  type GetColsFromTableType<TDBBase extends TTableSources, Type extends string> = FieldsByTypeByTable[Loop<keyof FieldsByTypeByTable, Type>][GetRealTableNames<TDBBase>];
310
314
  type Loop<Keys extends string, Type extends string> = Keys extends Type ? Type : never;
311
315
  type GetJoinColsType<TDBBase extends TTableSources, Type extends string> = IterateFields<TDBBase, IsString<GetColsFromTableType<TDBBase, Type>>>;
@@ -335,7 +339,7 @@ type BaseSelectFnContext<_TSources extends TArrSources, _TFields extends TFields
335
339
  ltrim: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
336
340
  rtrim: (col: GetColumnsOfType<_TSources, _TFields, string> | SQLExpr<string>) => SQLExpr<string>;
337
341
  cond: (criteria: WhereCriteria<_TSources, _TFields>) => SQLExpr<boolean>;
338
- coalesce: <T>(...args: [GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>, ...Array<GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>>]) => SQLExpr<T>;
342
+ coalesce: <T>(...args: [GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>, ...Array<GetColumnsOfType<_TSources, _TFields, T> | SQLExpr<T>>]) => SQLExpr<NonNullable<T>>;
339
343
  nullif: <T>(expr1: SQLExpr<T>, expr2: SQLExpr<T>) => SQLExpr<T | null>;
340
344
  caseWhen: <T, TElse extends SQLExpr<T> | undefined = undefined>(cases: [{
341
345
  when: WhereCriteria<_TSources, _TFields>;
@@ -346,12 +350,15 @@ type BaseSelectFnContext<_TSources extends TArrSources, _TFields extends TFields
346
350
  }>], elseVal?: TElse) => TElse extends SQLExpr<T> ? SQLExpr<T> : SQLExpr<T | null>;
347
351
  };
348
352
  type SelectFnContext<_TSources extends TArrSources, _TFields extends TFieldsType> = BaseSelectFnContext<_TSources, _TFields>;
349
- type ImplicitJoinsFrom<TSources extends TArrSources> = AvailableJoins<TSources> & `_${string}`;
350
- type AvailableM2MTargets<TSources extends TArrSources> = keyof Relations<ImplicitJoinsFrom<TSources>> extends infer T ? T extends TTables & string ? T extends `_${string}` ? never : T : never : never;
351
- type GetJunctionTable<TSource extends TTables, TTarget extends TTables> = keyof Relations<TSource> & keyof Relations<TTarget> & `_${string}` & TTables;
352
- type AvailableRefNames<TSources extends TArrSources> = ImplicitJoinsFrom<TSources> extends `_${infer R}` ? R : never;
353
+ type IsUnion<T, _T extends T = T> = _T extends _T ? ([T] extends [_T] ? false : true) : never;
354
+ type ResolveSourceTable<TSources extends TArrSources, TInput extends string> = TSources[number] extends infer T ? T extends TVirtualTableSource ? never : T extends string ? T extends TInput ? T & TTables : never : T extends [infer Table extends TTables, infer Alias extends string] ? Alias extends TInput ? Table : Table extends TInput ? Table : never : never : never;
355
+ type AvailableM2MSources<TSources extends TArrSources> = TSources[number] extends infer T ? T extends TVirtualTableSource ? never : T extends string ? T extends keyof M2MMap ? T : never : T extends [infer Table extends string, infer Alias extends string] ? Table extends keyof M2MMap ? Alias : never : never : never;
356
+ type AvailableM2MTargets<TSource extends TTables> = TSource extends keyof M2MMap ? keyof M2MMap[TSource] & string : never;
357
+ type GetJunctionTable<TSource extends TTables, TTarget extends TTables> = TSource extends keyof M2MMap ? TTarget extends keyof M2MMap[TSource] ? M2MMap[TSource][TTarget & keyof M2MMap[TSource]] & TTables : never : never;
358
+ type AvailableRefNames<TSource extends TTables> = TSource extends keyof M2MMap ? M2MMap[TSource][keyof M2MMap[TSource]] extends infer J ? J extends `_${infer R}` ? R : never : never : never;
353
359
  declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType, TCTEs extends Record<string, Record<string, any>> = {}> extends _fWhere<TSources, TFields> {
354
360
  join<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
361
+ where?: WhereCriteriaMulti<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>>;
355
362
  joinType?: JoinType;
356
363
  }): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
357
364
  join<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
@@ -367,7 +374,7 @@ declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType,
367
374
  joinType?: JoinType;
368
375
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
369
376
  private _joinImpl;
370
- joinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
377
+ joinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs>, TAlias extends string = never>(options: {
371
378
  table: Table;
372
379
  src: TCol1;
373
380
  on: TCol2;
@@ -375,7 +382,7 @@ declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType,
375
382
  where?: JoinWhereCriteria<Table, TAlias>;
376
383
  joinType?: JoinType;
377
384
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
378
- joinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
385
+ joinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
379
386
  where?: JoinWhereCriteria<Table, TAlias>;
380
387
  joinType?: JoinType;
381
388
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
@@ -391,99 +398,172 @@ declare class _fJoin<TSources extends TArrSources, TFields extends TFieldsType,
391
398
  where?: JoinWhereCriteria<Table, TAlias>;
392
399
  joinType?: JoinType;
393
400
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
394
- manyToManyJoin<const TTableInput extends `${AvailableM2MTargets<TSources>}` | `${AvailableM2MTargets<TSources>} ${string}`, TTarget extends AvailableM2MTargets<TSources> = ExtractTableName<TTableInput> & AvailableM2MTargets<TSources>, TAlias extends string | never = ExtractAlias<TTableInput>, const TRefName extends AvailableRefNames<TSources> | undefined = undefined, TJunction extends TTables = TRefName extends string ? `_${TRefName}` & TTables : GetJunctionTable<GetRealTableNames<TSources[number]>, TTarget>>(targetTable: TTableInput, options?: {
395
- source?: `${GetAliasTableNames<TSources[number]>}.${string}`;
396
- refName?: TRefName;
397
- }): _fJoin<[
401
+ manyToManyJoin<const TSourceInput extends AvailableM2MSources<TSources>, TSource extends TTables = ResolveSourceTable<TSources, TSourceInput>, const TTargetInput extends `${AvailableM2MTargets<TSource>}` | `${AvailableM2MTargets<TSource>} ${string}` = never, TTarget extends TTables = ExtractTableName<TTargetInput> & TTables, TAlias extends string | never = ExtractAlias<TTargetInput>, const TRefName extends AvailableRefNames<TSource> | undefined = undefined, TJunction extends TTables = TRefName extends string ? `_${TRefName}` & TTables : GetJunctionTable<TSource, TTarget>>(sourceTable: TSourceInput, targetTable: TTargetInput, ...args: IsUnion<TJunction> extends true ? [options: {
402
+ refName: AvailableRefNames<TSource>;
403
+ }] : [options?: {
404
+ refName?: AvailableRefNames<TSource>;
405
+ }]): _fJoin<[
398
406
  ...TSources,
399
407
  TJunction,
400
408
  [TAlias] extends [never] ? TTarget : [TTarget, TAlias]
401
409
  ], Prettify<TFields & Record<TJunction, GetFieldsFromTable<TJunction>> & Record<[TAlias] extends [never] ? TTarget : TAlias, GetFieldsFromTable<TTarget>>>>;
410
+ innerJoin<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
411
+ where?: WhereCriteriaMulti<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>>;
412
+ }): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
402
413
  innerJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
403
414
  table: Table;
404
415
  src: TCol1;
405
416
  on: find<TJoinCols, TCol1>;
406
417
  alias?: TAlias;
418
+ where?: JoinWhereCriteria<Table, TAlias>;
419
+ joinType?: JoinType;
407
420
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
408
- innerJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
421
+ innerJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
422
+ where?: JoinWhereCriteria<Table, TAlias>;
423
+ joinType?: JoinType;
424
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
425
+ leftJoin<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
426
+ where?: WhereCriteriaMulti<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>>;
427
+ }): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
409
428
  leftJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
410
429
  table: Table;
411
430
  src: TCol1;
412
431
  on: find<TJoinCols, TCol1>;
413
432
  alias?: TAlias;
433
+ where?: JoinWhereCriteria<Table, TAlias>;
434
+ joinType?: JoinType;
414
435
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
415
- leftJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
436
+ leftJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
437
+ where?: JoinWhereCriteria<Table, TAlias>;
438
+ joinType?: JoinType;
439
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
440
+ rightJoin<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
441
+ where?: WhereCriteriaMulti<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>>;
442
+ }): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
416
443
  rightJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
417
444
  table: Table;
418
445
  src: TCol1;
419
446
  on: find<TJoinCols, TCol1>;
420
447
  alias?: TAlias;
448
+ where?: JoinWhereCriteria<Table, TAlias>;
449
+ joinType?: JoinType;
421
450
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
422
- rightJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
451
+ rightJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
452
+ where?: JoinWhereCriteria<Table, TAlias>;
453
+ joinType?: JoinType;
454
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
455
+ fullJoin<const TName extends keyof TCTEs & string>(cteName: TName, local: keyof TCTEs[TName] & string, remote: GetJoinCols<TSources[number]>, opts?: {
456
+ where?: WhereCriteriaMulti<[readonly ["__cte__", TName]], Record<TName, TCTEs[TName]>>;
457
+ }): _fJoin<[...TSources, readonly ["__cte__", TName]], TFields & Record<TName, TCTEs[TName]>, TCTEs>;
423
458
  fullJoin<const Table extends AvailableJoins<TSources>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never, TAlias extends string = never>(options: {
424
459
  table: Table;
425
460
  src: TCol1;
426
461
  on: find<TJoinCols, TCol1>;
427
462
  alias?: TAlias;
463
+ where?: JoinWhereCriteria<Table, TAlias>;
464
+ joinType?: JoinType;
428
465
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
429
- fullJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
466
+ fullJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>, TJoinCols extends [string, string] = ValidStringTuple<GetUnionOfRelations<MapJoinsToKnownTables<SafeJoins<Table, TSources>, TSources>>>, TCol1 extends TJoinCols[0] = never>(table: TableInput, field: TCol1, reference: find<TJoinCols, TCol1>, options?: {
467
+ where?: JoinWhereCriteria<Table, TAlias>;
468
+ joinType?: JoinType;
469
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [never] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
430
470
  crossJoin<const TableInput extends `${AvailableJoins<TSources>}` | `${AvailableJoins<TSources>} ${string}`, Table extends AvailableJoins<TSources> = ExtractTableName<TableInput> & AvailableJoins<TSources>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
431
- innerJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
471
+ innerJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs>, TAlias extends string = never>(options: {
432
472
  table: Table;
433
473
  src: TCol1;
434
474
  on: TCol2;
435
475
  alias?: TAlias;
476
+ where?: JoinWhereCriteria<Table, TAlias>;
477
+ joinType?: JoinType;
436
478
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
437
- innerJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
479
+ innerJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
480
+ where?: JoinWhereCriteria<Table, TAlias>;
481
+ joinType?: JoinType;
482
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
438
483
  innerJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
439
484
  table: Table;
440
485
  src: TCol1;
441
486
  on: TCol2;
442
487
  alias?: TAlias;
488
+ where?: JoinWhereCriteria<Table, TAlias>;
489
+ joinType?: JoinType;
490
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
491
+ innerJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
492
+ where?: JoinWhereCriteria<Table, TAlias>;
493
+ joinType?: JoinType;
443
494
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
444
- innerJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
445
- leftJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
495
+ leftJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs>, TAlias extends string = never>(options: {
446
496
  table: Table;
447
497
  src: TCol1;
448
498
  on: TCol2;
449
499
  alias?: TAlias;
500
+ where?: JoinWhereCriteria<Table, TAlias>;
501
+ joinType?: JoinType;
450
502
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
451
- leftJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
503
+ leftJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
504
+ where?: JoinWhereCriteria<Table, TAlias>;
505
+ joinType?: JoinType;
506
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
452
507
  leftJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
453
508
  table: Table;
454
509
  src: TCol1;
455
510
  on: TCol2;
456
511
  alias?: TAlias;
512
+ where?: JoinWhereCriteria<Table, TAlias>;
513
+ joinType?: JoinType;
457
514
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
458
- leftJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
459
- rightJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
515
+ leftJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
516
+ where?: JoinWhereCriteria<Table, TAlias>;
517
+ joinType?: JoinType;
518
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], TFields & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
519
+ rightJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs>, TAlias extends string = never>(options: {
460
520
  table: Table;
461
521
  src: TCol1;
462
522
  on: TCol2;
463
523
  alias?: TAlias;
524
+ where?: JoinWhereCriteria<Table, TAlias>;
525
+ joinType?: JoinType;
464
526
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
465
- rightJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
527
+ rightJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
528
+ where?: JoinWhereCriteria<Table, TAlias>;
529
+ joinType?: JoinType;
530
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
466
531
  rightJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
467
532
  table: Table;
468
533
  src: TCol1;
469
534
  on: TCol2;
470
535
  alias?: TAlias;
536
+ where?: JoinWhereCriteria<Table, TAlias>;
537
+ joinType?: JoinType;
471
538
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
472
- rightJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
473
- fullJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>, TAlias extends string = never>(options: {
539
+ rightJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
540
+ where?: JoinWhereCriteria<Table, TAlias>;
541
+ joinType?: JoinType;
542
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, GetFieldsFromTable<Table>>, TCTEs>;
543
+ fullJoinUnsafeTypeEnforced<const Table extends TTables | `${TTables} ${string}`, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs>, TAlias extends string = never>(options: {
474
544
  table: Table;
475
545
  src: TCol1;
476
546
  on: TCol2;
477
547
  alias?: TAlias;
548
+ where?: JoinWhereCriteria<Table, TAlias>;
549
+ joinType?: JoinType;
478
550
  }): _fJoinReturn<[...TSources, [TAlias] extends [undefined] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
479
- fullJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
551
+ fullJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]> | GetCTECols<TCTEs> = GetJoinOnColsType<GetColumnType<Table, TCol1>, [...TSources, Table]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
552
+ where?: JoinWhereCriteria<Table, TAlias>;
553
+ joinType?: JoinType;
554
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<NullifyTableFields<TFields> & Record<[TAlias] extends [undefined] ? Table : TAlias, MakeNullable<GetFieldsFromTable<Table>>>>, TCTEs>;
480
555
  fullJoinUnsafeIgnoreType<const Table extends TTables, TCol1 extends GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]>, TAlias extends string = never>(options: {
481
556
  table: Table;
482
557
  src: TCol1;
483
558
  on: TCol2;
484
559
  alias?: TAlias;
560
+ where?: JoinWhereCriteria<Table, TAlias>;
561
+ joinType?: JoinType;
562
+ }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
563
+ fullJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2, options?: {
564
+ where?: JoinWhereCriteria<Table, TAlias>;
565
+ joinType?: JoinType;
485
566
  }): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
486
- fullJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>, TCol1 extends GetColsBaseTable<Table> = GetColsBaseTable<Table>, TCol2 extends GetJoinCols<TSources[number]> = GetJoinCols<TSources[number]>>(table: TableInput, field: TCol1, reference: TCol2): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], NullifyTableFields<TFields> & Record<Table, MakeNullable<GetFieldsFromTable<Table>>>, TCTEs>;
487
567
  crossJoinUnsafeTypeEnforced<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
488
568
  crossJoinUnsafeIgnoreType<const TableInput extends TTables | `${TTables} ${string}`, Table extends TTables = ExtractTableName<TableInput>, TAlias extends string | never = ExtractAlias<TableInput>>(table: TableInput): _fJoinReturn<[...TSources, [TAlias] extends [never] ? Table : [Table, TAlias]], Prettify<TFields & Record<[TAlias] extends [never] ? Table : TAlias, GetFieldsFromTable<Table>>>, TCTEs>;
489
569
  }
@@ -284,6 +284,7 @@ var esc = (s2) => s2.replace(/'/g, "''");
284
284
 
285
285
  // src/extend.ts
286
286
  var DB = {};
287
+ var SAFE_IDENT_RE = /^\w+$/;
287
288
  var DbSelect = class {
288
289
  constructor(db) {
289
290
  this.db = db;
@@ -299,17 +300,25 @@ var DbSelect = class {
299
300
  }
300
301
  };
301
302
  function applyCondition(quotedField, value) {
303
+ const sqlVal = (v2) => {
304
+ if (typeof v2 === "string") return `'${esc(v2)}'`;
305
+ if (v2 instanceof Date) return `'${v2.toISOString()}'`;
306
+ if (v2 === null) return "NULL";
307
+ if (typeof v2 === "number" || typeof v2 === "bigint" || typeof v2 === "boolean")
308
+ return String(v2);
309
+ throw new Error(`Unsupported value type in sqlVal: ${typeof v2}`);
310
+ };
302
311
  if (typeof value === "object" && value !== null && !Array.isArray(value) && "op" in value) {
303
312
  const opObj = value;
304
313
  switch (opObj.op) {
305
314
  case "IN":
306
315
  case "NOT IN": {
307
- const valuesList = opObj.values.map((v2) => typeof v2 === "string" ? `'${esc(v2)}'` : v2).join(", ");
316
+ const valuesList = opObj.values.map((v2) => sqlVal(v2)).join(", ");
308
317
  return `${quotedField} ${opObj.op} (${valuesList})`;
309
318
  }
310
319
  case "BETWEEN": {
311
320
  const [start, end] = opObj.values;
312
- return `${quotedField} BETWEEN ${typeof start === "string" ? `'${esc(start)}'` : start} AND ${typeof end === "string" ? `'${esc(end)}'` : end}`;
321
+ return `${quotedField} BETWEEN ${sqlVal(start)} AND ${sqlVal(end)}`;
313
322
  }
314
323
  case "LIKE":
315
324
  case "NOT LIKE":
@@ -323,7 +332,7 @@ function applyCondition(quotedField, value) {
323
332
  case "<=":
324
333
  case "!=":
325
334
  case "=":
326
- return `${quotedField} ${opObj.op} ${typeof opObj.value === "string" ? `'${esc(opObj.value)}'` : opObj.value}`;
335
+ return `${quotedField} ${opObj.op} ${sqlVal(opObj.value)}`;
327
336
  default:
328
337
  throw new Error(`Unsupported operation: ${opObj.op}`);
329
338
  }
@@ -335,10 +344,10 @@ function applyCondition(quotedField, value) {
335
344
  const parts = value.map((opObj) => applyCondition(quotedField, opObj));
336
345
  return parts.length === 1 ? parts[0] : "(" + parts.join(" OR ") + ")";
337
346
  }
338
- const valuesList = value.map((v2) => typeof v2 === "string" ? `'${esc(v2)}'` : v2).join(", ");
347
+ const valuesList = value.map((v2) => sqlVal(v2)).join(", ");
339
348
  return `${quotedField} IN (${valuesList})`;
340
349
  } else {
341
- return `${quotedField} = ${typeof value === "string" ? `'${esc(value)}'` : value}`;
350
+ return `${quotedField} = ${sqlVal(value)}`;
342
351
  }
343
352
  }
344
353
  function processConditions(condition, formatted = false) {
@@ -532,7 +541,7 @@ var _fSelect = class __fSelect extends _fOrderBy {
532
541
  }
533
542
  return new __fSelect(this.db, {
534
543
  ...this.values,
535
- selects: [...this.values.selects, `${dialect.quoteQualifiedColumn(select)} AS ${dialect.quote(select, true)}`]
544
+ selects: [...this.values.selects, `${dialect.quoteQualifiedColumn(select)} AS ${dialect.quote(alias ?? select, true)}`]
536
545
  });
537
546
  }
538
547
  if (colName === "*") {
@@ -793,98 +802,98 @@ var _fJoin = class __fJoin extends _fWhere {
793
802
  joinUnsafeIgnoreType(tableOrOptions, field, reference, _opts) {
794
803
  return this.join(tableOrOptions, field, reference, _opts);
795
804
  }
796
- manyToManyJoin(targetTable, options) {
797
- const opts = options;
805
+ manyToManyJoin(sourceTable, targetTable, ...args) {
806
+ const opts = args[0];
798
807
  const refName = opts?.refName;
808
+ const safeIdent = (v2, ctx) => {
809
+ if (!SAFE_IDENT_RE.test(v2)) throw new Error(`manyToManyJoin: unsafe identifier in ${ctx}: "${v2}"`);
810
+ return v2;
811
+ };
812
+ const [sourceTblRaw] = sourceTable.split(" ");
813
+ const safeSourceTbl = safeIdent(sourceTblRaw, "source");
814
+ const sourceEntry = this.values.tables.find(
815
+ (t2) => t2.table === safeSourceTbl || t2.alias === safeSourceTbl
816
+ );
817
+ if (!sourceEntry) throw new Error(`manyToManyJoin: source "${safeSourceTbl}" not in joined tables (by table name or alias)`);
818
+ const sourceTableName = sourceEntry.table;
819
+ const sourceAlias = sourceEntry.alias || sourceEntry.table;
799
820
  const [tbl, alias] = targetTable.split(" ");
800
- let sourceTableName;
801
- let sourceAlias;
802
- let srcLocalCol;
803
- if (opts?.source) {
804
- const [srcAliasOrTable, col] = opts.source.split(".");
805
- const entry = this.values.tables.find((t2) => (t2.alias || t2.table) === srcAliasOrTable);
806
- sourceTableName = entry?.table ?? srcAliasOrTable;
807
- sourceAlias = srcAliasOrTable;
808
- srcLocalCol = col;
809
- } else {
810
- const candidates = this.values.tables.filter((entry) => {
811
- const relations = DB[entry.table]?.relations;
812
- return relations && Object.keys(relations).some(
813
- (k2) => k2.startsWith("_") && DB[k2]?.relations?.[tbl] !== void 0
814
- );
815
- });
816
- if (candidates.length === 0) throw new Error(
817
- `manyToManyJoin: no source with junction to "${tbl}" among joined tables`
818
- );
819
- if (candidates.length > 1) {
820
- const names = candidates.map((c2) => c2.alias ?? c2.table).join(", ");
821
- throw new Error(`manyToManyJoin: ambiguous source for "${tbl}" (${names}). Pass { source: "alias.col" }.`);
822
- }
823
- const found = candidates[0];
824
- sourceTableName = found.table;
825
- sourceAlias = found.alias || found.table;
826
- const srcRelations2 = DB[sourceTableName]?.relations;
827
- const junctionKey = refName ? `_${refName}` : Object.keys(srcRelations2 ?? {}).find(
828
- (k2) => k2.startsWith("_") && DB[k2]?.relations?.[tbl] !== void 0
829
- );
830
- const junctionRelEntry = junctionKey ? srcRelations2[junctionKey] : void 0;
831
- srcLocalCol = junctionRelEntry ? Object.keys(junctionRelEntry)[0] : "id";
832
- }
821
+ const safeTbl = safeIdent(tbl, "target");
822
+ const safeAlias = alias ? safeIdent(alias, "alias") : void 0;
823
+ const safeRef = refName ? safeIdent(refName, "refName") : void 0;
833
824
  const srcEntry = DB[sourceTableName];
834
825
  if (!srcEntry) throw new Error(`manyToManyJoin: unknown source table "${sourceTableName}"`);
835
826
  const srcRelations = srcEntry.relations;
836
- const junctionTable = refName ? `_${refName}` : Object.keys(srcRelations).find(
837
- (k2) => k2.startsWith("_") && DB[k2]?.relations?.[tbl] !== void 0
827
+ const junctionTable = safeRef ? `_${safeRef}` : Object.keys(srcRelations).find(
828
+ (k2) => k2.startsWith("_") && DB[k2]?.relations?.[safeTbl] !== void 0
838
829
  );
839
830
  if (!junctionTable) throw new Error(
840
- `manyToManyJoin: no junction between "${sourceTableName}" and "${tbl}"`
831
+ `manyToManyJoin: no junction between "${sourceTableName}" and "${safeTbl}"`
832
+ );
833
+ const junctionRelEntry = srcRelations[junctionTable];
834
+ const junctionKeys = junctionRelEntry ? Object.keys(junctionRelEntry) : [];
835
+ if (junctionRelEntry && junctionKeys.length === 0) throw new Error(
836
+ `manyToManyJoin: junction "${junctionTable}" has no relation columns for source "${sourceTableName}"`
837
+ );
838
+ const srcLocalCol = junctionKeys[0] ?? (() => {
839
+ throw new Error(`manyToManyJoin: cannot determine source local col for junction "${junctionTable}"`);
840
+ })();
841
+ const srcJunctionCol = junctionRelEntry?.[srcLocalCol]?.[0] ?? (() => {
842
+ throw new Error(`manyToManyJoin: cannot determine source junction col for "${junctionTable}"`);
843
+ })();
844
+ const tgtRelEntry = DB[junctionTable]?.relations?.[safeTbl];
845
+ const tgtKeys = tgtRelEntry ? Object.keys(tgtRelEntry) : [];
846
+ if (tgtRelEntry && tgtKeys.length === 0) throw new Error(
847
+ `manyToManyJoin: junction "${junctionTable}" has no relation columns for target "${safeTbl}"`
841
848
  );
842
- const srcJunctionCol = srcRelations[junctionTable]?.[srcLocalCol]?.[0] ?? "A";
843
- const tgtRelEntry = DB[junctionTable]?.relations?.[tbl];
844
- const tgtJunctionCol = tgtRelEntry ? Object.keys(tgtRelEntry)[0] : "B";
845
- const tgtLocalCol = tgtRelEntry?.[tgtJunctionCol]?.[0] ?? "id";
849
+ const tgtJunctionCol = tgtKeys[0] ?? (() => {
850
+ throw new Error(`manyToManyJoin: cannot determine target junction col for "${junctionTable}"`);
851
+ })();
852
+ const tgtLocalCol = tgtRelEntry?.[tgtJunctionCol]?.[0] ?? (() => {
853
+ throw new Error(`manyToManyJoin: cannot determine target local col for "${junctionTable}"`);
854
+ })();
846
855
  const remoteRef = `${sourceAlias}.${srcLocalCol}`;
847
- return this.joinUnsafeIgnoreType(junctionTable, srcJunctionCol, remoteRef).joinUnsafeIgnoreType(alias ? `${tbl} ${alias}` : tbl, tgtLocalCol, `${junctionTable}.${tgtJunctionCol}`);
856
+ return this.joinUnsafeIgnoreType(junctionTable, srcJunctionCol, remoteRef).joinUnsafeIgnoreType(safeAlias ? `${safeTbl} ${safeAlias}` : safeTbl, tgtLocalCol, `${junctionTable}.${tgtJunctionCol}`);
848
857
  }
849
- innerJoin(tableOrOptions, field, reference) {
850
- return this._joinImpl("INNER", tableOrOptions, field, reference);
858
+ innerJoin(tableOrOptions, field, reference, opts) {
859
+ return this._joinImpl("INNER", tableOrOptions, field, reference, opts);
851
860
  }
852
- leftJoin(tableOrOptions, field, reference) {
853
- return this._joinImpl("LEFT", tableOrOptions, field, reference);
861
+ leftJoin(tableOrOptions, field, reference, opts) {
862
+ return this._joinImpl("LEFT", tableOrOptions, field, reference, opts);
854
863
  }
855
- rightJoin(tableOrOptions, field, reference) {
856
- return this._joinImpl("RIGHT", tableOrOptions, field, reference);
864
+ rightJoin(tableOrOptions, field, reference, opts) {
865
+ return this._joinImpl("RIGHT", tableOrOptions, field, reference, opts);
857
866
  }
858
- fullJoin(tableOrOptions, field, reference) {
859
- return this._joinImpl("FULL", tableOrOptions, field, reference);
867
+ fullJoin(tableOrOptions, field, reference, opts) {
868
+ return this._joinImpl("FULL", tableOrOptions, field, reference, opts);
860
869
  }
861
870
  // crossJoin: no ON clause — table only (with optional inline alias)
862
871
  crossJoin(table) {
863
872
  return this._joinImpl("CROSS", table);
864
873
  }
865
- innerJoinUnsafeTypeEnforced(tableOrOptions, field, reference) {
866
- return this._joinImpl("INNER", tableOrOptions, field, reference);
874
+ innerJoinUnsafeTypeEnforced(tableOrOptions, field, reference, opts) {
875
+ return this._joinImpl("INNER", tableOrOptions, field, reference, opts);
867
876
  }
868
- innerJoinUnsafeIgnoreType(tableOrOptions, field, reference) {
869
- return this._joinImpl("INNER", tableOrOptions, field, reference);
877
+ innerJoinUnsafeIgnoreType(tableOrOptions, field, reference, opts) {
878
+ return this._joinImpl("INNER", tableOrOptions, field, reference, opts);
870
879
  }
871
- leftJoinUnsafeTypeEnforced(tableOrOptions, field, reference) {
872
- return this._joinImpl("LEFT", tableOrOptions, field, reference);
880
+ leftJoinUnsafeTypeEnforced(tableOrOptions, field, reference, opts) {
881
+ return this._joinImpl("LEFT", tableOrOptions, field, reference, opts);
873
882
  }
874
- leftJoinUnsafeIgnoreType(tableOrOptions, field, reference) {
875
- return this._joinImpl("LEFT", tableOrOptions, field, reference);
883
+ leftJoinUnsafeIgnoreType(tableOrOptions, field, reference, opts) {
884
+ return this._joinImpl("LEFT", tableOrOptions, field, reference, opts);
876
885
  }
877
- rightJoinUnsafeTypeEnforced(tableOrOptions, field, reference) {
878
- return this._joinImpl("RIGHT", tableOrOptions, field, reference);
886
+ rightJoinUnsafeTypeEnforced(tableOrOptions, field, reference, opts) {
887
+ return this._joinImpl("RIGHT", tableOrOptions, field, reference, opts);
879
888
  }
880
- rightJoinUnsafeIgnoreType(tableOrOptions, field, reference) {
881
- return this._joinImpl("RIGHT", tableOrOptions, field, reference);
889
+ rightJoinUnsafeIgnoreType(tableOrOptions, field, reference, opts) {
890
+ return this._joinImpl("RIGHT", tableOrOptions, field, reference, opts);
882
891
  }
883
- fullJoinUnsafeTypeEnforced(tableOrOptions, field, reference) {
884
- return this._joinImpl("FULL", tableOrOptions, field, reference);
892
+ fullJoinUnsafeTypeEnforced(tableOrOptions, field, reference, opts) {
893
+ return this._joinImpl("FULL", tableOrOptions, field, reference, opts);
885
894
  }
886
- fullJoinUnsafeIgnoreType(tableOrOptions, field, reference) {
887
- return this._joinImpl("FULL", tableOrOptions, field, reference);
895
+ fullJoinUnsafeIgnoreType(tableOrOptions, field, reference, opts) {
896
+ return this._joinImpl("FULL", tableOrOptions, field, reference, opts);
888
897
  }
889
898
  // crossJoinUnsafeTypeEnforced — CROSS semantics, type-enforced columns
890
899
  crossJoinUnsafeTypeEnforced(table) {
@@ -1,4 +1,10 @@
1
1
  'use strict';
2
2
 
3
- require('./chunk-GSIFF2TF.cjs');
3
+ var chunkRX2M26LV_cjs = require('./chunk-RX2M26LV.cjs');
4
4
 
5
+
6
+
7
+ Object.defineProperty(exports, "generateM2MMapDeclaration", {
8
+ enumerable: true,
9
+ get: function () { return chunkRX2M26LV_cjs.generateM2MMapDeclaration; }
10
+ });
@@ -1,2 +1,3 @@
1
+ declare function generateM2MMapDeclaration(m2mMap: Record<string, Record<string, Set<string>>>): string;
1
2
 
2
- export { }
3
+ export { generateM2MMapDeclaration };
@@ -1,2 +1,3 @@
1
+ declare function generateM2MMapDeclaration(m2mMap: Record<string, Record<string, Set<string>>>): string;
1
2
 
2
- export { }
3
+ export { generateM2MMapDeclaration };
package/dist/generator.js CHANGED
@@ -1 +1 @@
1
- import './chunk-NFKUA5XM.js';
1
+ export { generateM2MMapDeclaration } from './chunk-F7HSD6UA.js';