import { DeleteResult } from '../query-builder/delete-result.js'; import { InsertResult } from '../query-builder/insert-result.js'; import { MergeResult } from '../query-builder/merge-result.js'; import { UpdateResult } from '../query-builder/update-result.js'; import { CompiledQuery } from '../query-compiler/compiled-query.js'; import { Compilable } from './compilable.js'; import { Simplify } from './type-utils.js'; /** * A helper type that allows inferring a select/insert/update/delete query's result * type from a query builder or compiled query. * * ### Examples * * Infer a query builder's result type: * * ```ts * import { InferResult } from 'kysely' * * const query = db * .selectFrom('person') * .innerJoin('pet', 'pet.owner_id', 'person.id') * .select(['person.first_name', 'pet.name']) * * type QueryResult = InferResult // { first_name: string; name: string; }[] * ``` * * Infer a compiled query's result type: * * ```ts * import { InferResult } from 'kysely' * * const compiledQuery = db * .insertInto('person') * .values({ * first_name: 'Foo', * last_name: 'Barson', * gender: 'other', * age: 15, * }) * .returningAll() * .compile() * * type QueryResult = InferResult // Selectable[] * ``` */ export type InferResult | CompiledQuery> = C extends Compilable ? ResolveResult : C extends CompiledQuery ? ResolveResult : never; type ResolveResult = O extends InsertResult | UpdateResult | DeleteResult | MergeResult ? O : Simplify[]; export {};