import type { Expression } from '../expression/expression.js'; import type { ExtractRowFromCommonTableExpressionName, ExtractTableFromCommonTableExpressionName } from '../parser/with-parser.js'; import type { SelectQueryBuilder } from '../query-builder/select-query-builder.js'; import type { ReadonlyQueryCreator } from './readonly-query-creator.js'; /** * Similar to {@link CommonTableExpression} but read-only. */ export type ReadonlyCommonTableExpression = ReadonlyCommonTableExpressionOutput | ReadonlyCommonTableExpressionFactory; /** * Similar to {@link CommonTableExpressionFactory} but read-only. */ export type ReadonlyCommonTableExpressionFactory = (creator: ReadonlyQueryCreator) => ReadonlyCommonTableExpressionOutput; /** * Similar to {@link RecursiveCommonTableExpression} but read-only. */ export type ReadonlyRecursiveCommonTableExpression = (creator: ReadonlyQueryCreator]: ExtractRowFromCommonTableExpressionName; }>) => ReadonlyCommonTableExpressionOutput; /** * Similar to {@link CommonTableExpressionOutput} but read-only. */ export type ReadonlyCommonTableExpressionOutput = SelectQueryBuilder | Expression>; /** * Similar to {@link QueryCreatorWithCommonTableExpression} but read-only. */ export type ReadonlyQueryCreatorWithCommonTableExpression = ReadonlyQueryCreator]: ReadonlyExtractRowFromCommonTableExpression; }>; /** * Similar to {@link ExtractRowFromCommonTableExpression} but read-only. */ export type ReadonlyExtractRowFromCommonTableExpression = CTE extends Expression ? O : CTE extends (creator: ReadonlyQueryCreator) => infer Q ? Q extends Expression ? O : never : never;