import type { CompiledQuery, InsertQueryBuilder, Kysely, RawBuilder, SelectQueryBuilder, UpdateObject } from 'kysely'; import type { ZodObject, ZodType, ZodTypeAny } from 'zod'; import { z } from 'zod'; import type { ApiConfig, ApiOptions, ExtractResultFromQuery, PActionBody, PHooks, Query, QueryRelations, QueryWhere, ZodSchemaToKysely } from '../types'; import type { SetOptional } from 'type-fest'; export declare abstract class PApi> { ky: Kysely>; readonly config: ApiConfig; readonly schema: Schema; constructor(obj: { config?: ApiConfig; kysely: Kysely>; schema: Schema; jsonHelpers?: { jsonArrayFrom: (query: any) => any; jsonObjectFrom: (query: any) => any; }; }); protected execQuery(body: any, options?: ApiOptions): any; execSql(sqlQuery: RawBuilder | { compile: () => CompiledQuery; }, action?: 'run' | 'selectAll' | 'selectFirst', opts?: ApiOptions): Promise<{ changes: number; lastInsertRowId: number; rows: T[]; }>; parseOne(data: any, table: keyof z.output, extend?: ZodObject): X; parseMany(data: any[], table: keyof z.output, extend?: ZodObject): X[]; param(index: number): string; abstract table & string>(tableName: K, opts?: { ky?: Kysely>; hooks?: PHooks[]; }): PTable[K], z.input[K], K>; abstract batchOneSmt, any, any> | InsertQueryBuilder, any, any>>(sqlQuery: { compile: () => CompiledQuery>; } | RawBuilder>, batchParams: Array, opts?: ApiOptions): Promise<{ rows: ExtractResultFromQuery[]; error: any; }>; abstract $batchOneSmt(sqlQuery: { compile: () => CompiledQuery>; } | RawBuilder>, batchParams: Array): PActionBody; abstract batchAllSmt(sqlQuerys: Array<{ compile: () => CompiledQuery>; }>, opts?: ApiOptions): Promise<{ error: any; rows: any[]; getOne: (index: number) => X | undefined; getMany: (index: number) => X[]; }>; abstract bulk(operations: { [key in V]: PActionBody | { compile: () => CompiledQuery>; } | RawBuilder> | undefined; }, opts?: ApiOptions & { isTransaction: boolean; }): Promise; /** * extend the origin zod schema * it similar to withTables on kysely * * ```typescript * const extendApi = api.withTables( * { * NewTable: z.object({ * id: z.number().optional(), * name: z.string(), * }), * }, * { // option * newTable: o => o.table('NewTable'), * }) * ``` **/ abstract withTables) => PTable; }, ExtendSchema extends ZodObject & T, any, any, z.input & { [k in keyof T]: z.input; }, z.output & { [k in keyof T]: z.output; }>>(schema: T, extendApi?: ExtendApi): PApi & { [key in keyof ExtendApi]: ReturnType; }; } /** * prisma api similar */ export declare class PTable { readonly ky: Kysely<{ [k in TableName]: Table; }>; private readonly table; private readonly jsonHelpers; private readonly schema?; private relations; private hooks; private hookContext; constructor(ky: Kysely<{ [k in TableName]: Table; }>, table: TableName, jsonHelpers: { jsonArrayFrom: (query: any) => any; jsonObjectFrom: (query: any) => any; }, schema?: ZodObject<{ [k in keyof Table]: ZodType; }> | undefined, opts?: { hooks: PHooks[]; }); selectMany(opts: QueryRelations): Promise; $selectMany(opts: QueryRelations): any; selectFirst(opts: QueryRelations): Promise
; $selectFirst(opts: QueryRelations): any; updateMany(opts: Query
& { data: Partial
; }): Promise<{ numUpdatedRows: bigint; numChangedRows?: bigint; }>; $updateMany(opts: Query
& { data: Partial
; }): import("kysely").UpdateQueryBuilder<{ [k in TableName]: Table; }, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely").UpdateResult>; updateOne(opts: Query
& { data: UpdateObject<{ [k in TableName]: Table; }, TableName>; }): Promise<{ numUpdatedRows: bigint; numChangedRows?: bigint; }>; $updateOne(opts: Query
& { data: UpdateObject<{ [k in TableName]: Table; }, TableName>; }): import("kysely").UpdateQueryBuilder<{ [k in TableName]: Table; }, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely").UpdateResult>; insertOne(value: SetOptional): Promise
; $insertOne(value: SetOptional): InsertQueryBuilder<{ [k in TableName]: Table; }, TableName, import("kysely").InsertResult> | InsertQueryBuilder<{ [k in TableName]: Table; }, TableName, import("kysely").Selection<{ [k in TableName]: Table; }, TableName, "id">>; /** * It use for a non unique key if a key is unique use InsertConflict * WARNING upsert will modify the data object */ upsert(opts: { data: Partial; where?: QueryWhere
; }): Promise | undefined>; /** conflicts columns should be a unique or primary key */ insertConflict(opts: { create: Partial
; update: Partial
; conflicts: Array; }): Promise>; /** conflicts columns should be a unique or primary key */ $insertConflict({ create, update, conflicts, }: { create: Partial
; update: Partial
; conflicts: Array; }): InsertQueryBuilder<{ [k in TableName]: Table; }, TableName, import("kysely").InsertResult>; insertMany(values: Array>): Promise; $insertMany(values: Array>): InsertQueryBuilder<{ [k in TableName]: Table; }, TableName, import("kysely").InsertResult> | InsertQueryBuilder<{ [k in TableName]: Table; }, TableName, import("kysely").Selection<{ [k in TableName]: Table; }, TableName, "id">>; deleteMany(opts: { where?: QueryWhere
; }): Promise<{ numDeletedRows: bigint; }>; $deleteMany({ where }: { where?: QueryWhere
; }): import("kysely").DeleteQueryBuilder<{ [k in TableName]: Table; }, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely").DeleteResult>; count({ where }: { where?: QueryWhere
; }): Promise; selectById(id: Table['id'], select?: Readonly<{ [k in keyof TableInput]?: boolean; }>): Promise
; $selectById(id: Table['id'], select?: Readonly<{ [k in keyof TableInput]?: boolean; }>): any; private mappingQuery; updateById(id: Table['id'], value: Partial
): Promise<{ numUpdatedRows: bigint; numChangedRows?: bigint; }>; $updateById(id: Table['id'], value: Partial
): import("kysely").UpdateQueryBuilder<{ [k in TableName]: Table; }, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely").UpdateResult>; deleteById(id: Table['id']): Promise<{ numDeletedRows: bigint; }>; $deleteById(id: Table['id']): import("kysely").DeleteQueryBuilder<{ [k in TableName]: Table; }, import("kysely/dist/cjs/parser/table-parser").ExtractTableAlias<{ [k in TableName]: Table; }, TableName>, import("kysely").DeleteResult>; } export type InferSchemaFromPApi = T extends PApi ? (K extends Record ? K : never) : never; export type PTableFromSchema, K extends keyof z.output & string> = PTable[K], z.input[K], K>;