import { UpdateQueryBuilder } from '../query-builder/update-query-builder.js'; import { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js'; import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js'; import { QueryCreator } from '../query-creator.js'; import { Expression } from '../expression/expression.js'; import { ShallowRecord } from '../util/type-utils.js'; import { CTEBuilderCallback } from '../query-builder/cte-builder.js'; import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js'; export type CommonTableExpression = (creator: QueryCreator) => CommonTableExpressionOutput; export type RecursiveCommonTableExpression = (creator: QueryCreator]: ExtractRowFromCommonTableExpressionName; }>) => CommonTableExpressionOutput; export type QueryCreatorWithCommonTableExpression = QueryCreator]: ExtractRowFromCommonTableExpression; }>; type CommonTableExpressionOutput = Expression> | InsertQueryBuilder> | UpdateQueryBuilder> | DeleteQueryBuilder>; /** * Given a common CommonTableExpression CTE extracts the row type from it. * * For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])` * would result in `Pick`. */ type ExtractRowFromCommonTableExpression = CTE extends (creator: QueryCreator) => infer Q ? Q extends Expression ? QO : Q extends InsertQueryBuilder ? QO : Q extends UpdateQueryBuilder ? QO : Q extends DeleteQueryBuilder ? QO : never : never; /** * Extracts 'person' from a string like 'person(id, first_name)'. */ type ExtractTableFromCommonTableExpressionName = CN extends `${infer TB}(${string})` ? TB : CN; /** * Parses a string like 'person(id, first_name)' into a type: * * { * id: any, * first_name: any * } * */ type ExtractRowFromCommonTableExpressionName = CN extends `${string}(${infer CL})` ? { [C in ExtractColumnNamesFromColumnList]: any; } : ShallowRecord; /** * Parses a string like 'id, first_name' into a type 'id' | 'first_name' */ type ExtractColumnNamesFromColumnList = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList : R; export declare function parseCommonTableExpression(nameOrBuilderCallback: string | CTEBuilderCallback, expression: CommonTableExpression): CommonTableExpressionNode; export {};