UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

192 lines 13.8 kB
import Base, { type ClientRpcOptions } from "@tai-kun/surrealdb/basic-client"; import type { Auth, LivePayload, Patch, PreparedQueryLike, QueryResult, ReadonlyPatch, RecordAccessAuth, RpcGraphqlRequest, RpcResultMapping, SlotLike } from "@tai-kun/surrealdb/types"; import { type TaskListener } from "@tai-kun/surrealdb/utils"; import type { Simplify, UnionToIntersection } from "type-fest"; import type { DataType } from "../../surreal/data-types"; import Jwt from "./jwt"; export type * from "@tai-kun/surrealdb/basic-client"; type Override<T, U> = Simplify<Omit<T, keyof U> & U>; export type InferSlotVars<TSlot extends SlotLike> = UnionToIntersection<{ [TName in TSlot["name"]]: TSlot extends SlotLike<TName, infer TRequired, infer TValue> ? TRequired extends false ? { readonly [_ in TName]?: TValue; } : { readonly [_ in TName]: TValue; } : never; }[TSlot["name"]]>; export interface LiveOptions extends ClientRpcOptions { readonly diff?: boolean | undefined; } export type LiveHandler<TPayload extends LivePayload<any, any> = LivePayload> = TaskListener<[payload: TPayload]>; export type InferLivePayload<TUuid, TData extends Readonly<RecordData> = RecordData, TPatch extends Patch[] = Patch[]> = TUuid extends { __diff: false; } ? LivePayload.Data<TData, DataType.Thing | string> : TUuid extends { __diff: true; } ? LivePayload.Diff<TData, TPatch, DataType.Thing | string> : LivePayload<TData, TPatch>; export type ActionResult<TData extends Readonly<RecordData> = RecordData> = [Extract<keyof TData, "id">] extends [never] ? ({ id: DataType.Thing | string; } & TData) : TData; type _In<T> = [Extract<keyof T, "in">] extends [never] ? ({ in: DataType.Thing | string; } & T) : T; type _Out<T> = [Extract<keyof T, "out">] extends [never] ? ({ out: DataType.Thing | string; } & T) : T; export type RelateResult<TData extends Readonly<RecordData> = RecordData> = ActionResult<_In<_Out<TData>>>; export interface PatchOptions extends ClientRpcOptions { readonly diff?: boolean | undefined; } export interface RunOptions extends ClientRpcOptions { readonly version?: string | undefined; } export interface GraphqlOptions extends ClientRpcOptions, NonNullable<RpcGraphqlRequest["params"][1]> { } type RecordData = { [p: string]: unknown; }; type NormalRecord = { id: DataType.Thing | string; [p: string]: unknown; }; export default class Client extends Base { ping(options?: ClientRpcOptions | undefined): Promise<void>; use(ns: string | null | undefined, options?: ClientRpcOptions | undefined): Promise<void>; use(ns: string | null | undefined, db?: string | null | undefined, options?: ClientRpcOptions | undefined): Promise<void>; use(target: [ns: string | null | undefined, db?: string | null | undefined], options?: ClientRpcOptions | undefined): Promise<void>; use(target: { readonly ns?: string | null | undefined; readonly db?: string | null | undefined; }, options?: ClientRpcOptions | undefined): Promise<void>; use(target: { readonly namespace?: string | null | undefined; readonly database?: string | null | undefined; }, options?: ClientRpcOptions | undefined): Promise<void>; info<T extends RpcResultMapping["info"] = RpcResultMapping["info"]>(options?: ClientRpcOptions | undefined): Promise<T>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/connecting/#signup) */ signup(auth: RecordAccessAuth, options?: ClientRpcOptions | undefined): Promise<Jwt>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/connecting/#signin) */ signin(auth: Auth, options?: ClientRpcOptions | undefined): Promise<Jwt>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/connecting/#authenticate) */ authenticate(token: string | Jwt, options?: ClientRpcOptions | undefined): Promise<void>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/connecting/#invalidate) */ invalidate(options?: ClientRpcOptions | undefined): Promise<void>; live<T extends DataType.Uuid | string = DataType.Uuid | string>(table: DataType.Table | string, options: ClientRpcOptions & { readonly diff: true; }): Promise<T & { __diff: true; }>; live<T extends DataType.Uuid | string = DataType.Uuid | string>(table: DataType.Table | string, options?: (ClientRpcOptions & { readonly diff?: false | undefined; }) | undefined): Promise<T & { __diff: false; }>; live<T extends DataType.Uuid | string = DataType.Uuid | string>(table: DataType.Table | string, options?: LiveOptions | undefined): Promise<T & { __diff: boolean; }>; subscribe<TUuid, TPayload extends LivePayload<any, any> = InferLivePayload<TUuid>>(queryUuid: TUuid, callback: LiveHandler<TPayload>): void; unsubscribe(queryUuid: DataType.Uuid | string, callback: LiveHandler<any>): void; kill(queryUuid: DataType.Uuid | string | readonly (DataType.Uuid | string)[], options?: ClientRpcOptions | undefined): Promise<void>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/querying/#queryraw) */ queryRaw<TResults extends readonly QueryResult[] = QueryResult[]>(surql: string | PreparedQueryLike, vars?: Readonly<RecordData> | undefined, options?: ClientRpcOptions | undefined): Promise<TResults>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/querying/#query) */ query<TReturns extends readonly unknown[] = unknown[]>(surql: string, vars?: Readonly<RecordData> | undefined, options?: ClientRpcOptions | undefined): Promise<TReturns>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/querying/#query) */ query<TResult>(surql: Override<PreparedQueryLike, { readonly slots: readonly SlotLike<any, false, any>[]; readonly __type: TResult; }>, vars?: Readonly<RecordData> | undefined, options?: ClientRpcOptions | undefined): Promise<TResult>; /** * [API Reference](https://tai-kun.github.io/surrealdb.js/v2/guides/querying/#query) */ query<TSlot extends SlotLike, TResult>(surql: Override<PreparedQueryLike, { readonly slots: readonly TSlot[]; readonly __type: TResult; }>, vars: Simplify<InferSlotVars<TSlot>> & Readonly<RecordData>, options?: ClientRpcOptions | undefined): Promise<TResult>; let(name: string, value: unknown, options?: ClientRpcOptions | undefined): Promise<void>; unset(name: string, options?: ClientRpcOptions | undefined): Promise<void>; select<TResult extends Readonly<RecordData> = RecordData>(table: DataType.Table | string, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; select<TResult extends Readonly<RecordData> = RecordData>(thing: DataType.Thing, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; create<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; create<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(thing: DataType.Thing, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; insert<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data?: TData | readonly TData[] | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; insert<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<NormalRecord> = (TResult extends { readonly id: any; } ? TResult : ({ id: DataType.Thing | string; } & TResult))>(table: DataType.Table | string | null | undefined, data?: TData | readonly TData[] | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; insert<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<NormalRecord> = (TResult extends { readonly id: any; } ? TResult : ({ id: DataType.Thing | string; } & TResult))>(data: TData | readonly TData[], options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; insert_relation<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data?: TData | readonly TData[] | undefined, options?: ClientRpcOptions | undefined): Promise<RelateResult<TResult>[]>; insert_relation<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<NormalRecord> = (TResult extends { readonly id: any; } ? TResult : ({ id: DataType.Thing | string; } & TResult))>(table: DataType.Table | string | null | undefined, data?: TData | readonly TData[] | undefined, options?: ClientRpcOptions | undefined): Promise<RelateResult<TResult>[]>; insert_relation<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<NormalRecord> = (TResult extends { readonly id: any; } ? TResult : ({ id: DataType.Thing | string; } & TResult))>(data: TData | readonly TData[], options?: ClientRpcOptions | undefined): Promise<RelateResult<TResult>[]>; update<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; update<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(thing: DataType.Thing, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; upsert<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; upsert<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(thing: DataType.Thing, data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; merge<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(table: DataType.Table | string, data: TData, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; merge<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(thing: DataType.Thing, data: TData, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; patch<TResult extends Readonly<RecordData> = RecordData>(table: DataType.Table | string, patches: readonly ReadonlyPatch[], options?: (ClientRpcOptions & { readonly diff?: false | undefined; }) | undefined): Promise<ActionResult<TResult>[]>; patch<TResult extends Readonly<RecordData> = RecordData>(thing: DataType.Thing, patches: readonly ReadonlyPatch[], options?: (ClientRpcOptions & { readonly diff?: false | undefined; }) | undefined): Promise<ActionResult<TResult>>; patch(table: DataType.Table | string, patches: readonly ReadonlyPatch[], options: ClientRpcOptions & { readonly diff: true; }): Promise<Patch[][]>; patch(thing: DataType.Thing, patches: readonly ReadonlyPatch[], options: ClientRpcOptions & { readonly diff: true; }): Promise<Patch[]>; delete<TResult extends Readonly<RecordData> = RecordData>(table: DataType.Table | string, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>[]>; delete<TResult extends Readonly<RecordData> = RecordData>(thing: DataType.Thing, options?: ClientRpcOptions | undefined): Promise<ActionResult<TResult>>; version(options?: ClientRpcOptions | undefined): Promise<string>; run<T = unknown>(funcName: string, options?: RunOptions | undefined): Promise<T>; run<T = unknown>(funcName: string, args?: readonly unknown[] | undefined, options?: RunOptions | undefined): Promise<T>; /** * @experimental */ graphql(query: string | { readonly query: string; readonly vars?: Readonly<RecordData> | undefined; readonly operation?: string | undefined; } | { readonly query: string; readonly vars?: Readonly<RecordData> | undefined; readonly operationName?: string | undefined; } | { readonly query: string; readonly variables?: Readonly<RecordData> | undefined; readonly operation?: string | undefined; } | { readonly query: string; readonly variables?: Readonly<RecordData> | undefined; readonly operationName?: string | undefined; }, options?: GraphqlOptions | undefined): Promise<string>; relate<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(from: DataType.Thing | string | readonly (DataType.Thing | string)[], thing: string, to: DataType.Thing | string | readonly (DataType.Thing | string)[], data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<RelateResult<TResult>[]>; relate<TResult extends Readonly<RecordData> = RecordData, TData extends Readonly<RecordData> = TResult>(from: DataType.Thing | string | readonly (DataType.Thing | string)[], thing: DataType.Thing, to: DataType.Thing | string | readonly (DataType.Thing | string)[], data?: TData | undefined, options?: ClientRpcOptions | undefined): Promise<RelateResult<TResult>>; } //# sourceMappingURL=client.d.ts.map