import type { RecordCamelKeys, RecordPascalKeys, RecordSnakeKeys } from './template-literal.js'; export declare enum CaseType { camel = "camel", pascal = "pascal", snake = "snake", none = "none" } export type JoinTableWithCaseConvert = CaseConvertTable, CaseConvert>; export type CaseConvertTable = CaseConvert extends CaseType.camel ? RecordCamelKeys : CaseConvert extends CaseType.snake ? RecordSnakeKeys : CaseConvert extends CaseType.pascal ? RecordPascalKeys : T; export type JoinTable = T1 & _JoinCover & _JoinDiff; type _JoinCover = { [K in keyof Pick as K extends string ? `${Prefix}_${K}` : K]: T2[K]; }; type _JoinDiff = { [K in keyof Omit]: T2[K]; }; /** * Create scoped column name from all tables of D, * filter by Tb name like 'tb_user' | 'tb_order' */ export type DbScopedColsByKey = D extends Record ? F extends unknown ? `${F}.${StrKey}` : never : never; /** * Create scoped column name from all tables of D, * filter by Tb Type */ export type DbScopedColsByTableType = T extends undefined ? DbScopedColsByKey : D extends Record ? F extends unknown ? T extends D[F] ? keyof D[F] extends string ? `${F}.${keyof D[F]}` : never : never : never : never; export type UnwrapArrayMember = T extends (infer M)[] ? M : T; export type StrKey = keyof T & string; /** * Splite `tb_user_bar.foo_id` to `tb_user_bar` and `foo_id` */ export type SplitScopedColumn = SCol extends `${infer Tb extends StrKey}.${infer Col}` ? [Tb, Col] : never; export {};