@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
192 lines • 13.8 kB
TypeScript
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