import QueryTable from './query-table'; import SelectQuery from './query/select-query'; import { QueryProcessor } from "./helpers/internal-types"; import JoinedTables from "./join/joined-tables"; import TableQuery from "./query/table-query"; export default class QuerySource { constructor(protected _queryProcessor: QueryProcessor) {} from>(table1: Table1 & QueryTable): SelectQuery from>(tables: JoinedTables): SelectQuery from, Table2 extends QueryTable>(table1: Table1, table2: Table2): SelectQuery from, Table2 extends QueryTable, Table3 extends QueryTable>(table1: Table1, table2: Table2, table3: Table3): SelectQuery from, Table2 extends QueryTable, Table3 extends QueryTable>(table1: any, table2?: any, table3?: any) { if (table3 != null) return new SelectQuery(this._queryProcessor, [table1, table2, table3]); else if (table2 != null) return new SelectQuery(this._queryProcessor, [table1, table2]); return new SelectQuery(this._queryProcessor, [table1]); } table>(table: Table & QueryTable): TableQuery { return new TableQuery(this._queryProcessor, table); } }