surrealdb
Version:
The official SurrealDB SDK for JavaScript.
1,253 lines (1,247 loc) • 41.4 kB
TypeScript
// Generated by dts-bundle-generator v9.5.1
import { UUID } from 'uuidv7';
export type Listener<Args extends unknown[] = unknown[]> = (...args: Args) => unknown;
export type UnknownEvents = Record<string, unknown[]>;
/**
* A class used to subscribe to and emit events
*/
export declare class Emitter<Events extends UnknownEvents = UnknownEvents> {
private collectable;
private listeners;
private readonly interceptors;
constructor({ interceptors, }?: {
interceptors?: Partial<{
[K in keyof Events]: (...args: Events[K]) => Promise<Events[K]>;
}>;
});
subscribe<Event extends keyof Events>(event: Event, listener: Listener<Events[Event]>, historic?: boolean): void;
subscribeOnce<Event extends keyof Events>(event: Event, historic?: boolean): Promise<Events[Event]>;
unSubscribe<Event extends keyof Events>(event: Event, listener: Listener<Events[Event]>): void;
isSubscribed<Event extends keyof Events>(event: Event, listener: Listener<Events[Event]>): boolean;
emit<Event extends keyof Events>(event: Event, args: Events[Event], collectable?: boolean): Promise<void>;
reset({ collectable, listeners, }: {
collectable?: boolean | keyof Events | (keyof Events)[];
listeners?: boolean | keyof Events | (keyof Events)[];
}): void;
scanListeners(filter?: (k: keyof Events) => boolean): (keyof Events)[];
}
type Replacer = (v: unknown) => unknown;
type Major = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
declare const POW_2_53: number;
declare const POW_2_64: bigint;
export type Fill<T = unknown> = [
Gap<T>,
T
];
export declare class Gap<T = unknown> {
readonly args: [
T?
];
constructor(...args: [
T?
]);
fill(value: T): Fill<T>;
hasDefault(): boolean;
get default(): T | undefined;
}
declare class PartiallyEncoded {
readonly chunks: [
ArrayBuffer,
Gap
][];
readonly end: ArrayBuffer;
readonly replacer: Replacer | undefined;
constructor(chunks: [
ArrayBuffer,
Gap
][], end: ArrayBuffer, replacer: Replacer | undefined);
build<Partial extends boolean = false>(fills: Fill[], partial?: Partial): Partial extends true ? PartiallyEncoded : ArrayBuffer;
}
declare function partiallyEncodeObject(object: Record<string, unknown>, options?: EncoderOptions<true>): Record<string, PartiallyEncoded>;
declare class Writer {
readonly byteLength: number;
private _chunks;
private _pos;
private _buf;
private _view;
private _byte;
constructor(byteLength?: number);
chunk(gap: Gap): void;
get chunks(): [
ArrayBuffer,
Gap
][];
get buffer(): ArrayBuffer;
private claim;
writeUint8(value: number): void;
writeUint16(value: number): void;
writeUint32(value: number): void;
writeUint64(value: bigint): void;
writeUint8Array(data: Uint8Array): void;
writeArrayBuffer(data: ArrayBuffer): void;
writePartiallyEncoded(data: PartiallyEncoded): void;
writeFloat32(value: number): void;
writeFloat64(value: number): void;
writeMajor(type: Major, length: number | bigint): void;
output<Partial extends boolean = false>(partial: Partial, replacer?: Replacer): Partial extends true ? PartiallyEncoded : ArrayBuffer;
}
interface EncoderOptions<Partial extends boolean> {
replacer?: Replacer;
writer?: Writer;
partial?: Partial;
fills?: Fill[];
}
declare function encode<Partial extends boolean = false>(input: unknown, options?: EncoderOptions<Partial>): Partial extends true ? PartiallyEncoded : ArrayBuffer;
declare class Reader {
private _buf;
private _view;
private _byte;
private _pos;
constructor(buffer: ArrayBufferLike);
private read;
readUint8(): number;
readUint16(): number;
readUint32(): number;
readUint64(): bigint;
readFloat16(): number;
readFloat32(): number;
readFloat64(): number;
readBytes(amount: number): Uint8Array;
readMajor(): [
Major,
number
];
readMajorLength(length: number): number | bigint;
}
interface DecodeOptions {
map?: "object" | "map";
replacer?: Replacer;
}
declare function decode(input: ArrayBufferLike | Reader, options?: DecodeOptions): any;
declare function infiniteBytes(r: Reader, forMajor: Major): ArrayBuffer;
declare class Tagged<T = unknown> {
readonly tag: number | bigint;
readonly value: T;
constructor(tag: number | bigint, value: T);
}
export declare class SurrealDbError extends Error {
}
export declare class NoActiveSocket extends SurrealDbError {
name: string;
message: string;
}
export declare class NoConnectionDetails extends SurrealDbError {
name: string;
message: string;
}
export declare class UnexpectedResponse extends SurrealDbError {
name: string;
message: string;
}
export declare class InvalidURLProvided extends SurrealDbError {
name: string;
message: string;
}
export declare class NoURLProvided extends SurrealDbError {
name: string;
message: string;
}
export declare class EngineDisconnected extends SurrealDbError {
name: string;
message: string;
}
export declare class ReconnectFailed extends SurrealDbError {
name: string;
message: string;
}
export declare class ReconnectIterationError extends SurrealDbError {
name: string;
message: string;
}
export declare class UnexpectedServerResponse extends SurrealDbError {
readonly response: unknown;
name: string;
constructor(response: unknown);
}
export declare class UnexpectedConnectionError extends SurrealDbError {
readonly error: unknown;
name: string;
constructor(error: unknown);
}
export declare class UnsupportedEngine extends SurrealDbError {
readonly engine: string;
name: string;
message: string;
constructor(engine: string);
}
export declare class FeatureUnavailableForEngine extends SurrealDbError {
name: string;
message: string;
}
export declare class ConnectionUnavailable extends SurrealDbError {
name: string;
message: string;
}
export declare class MissingNamespaceDatabase extends SurrealDbError {
name: string;
message: string;
}
export declare class HttpConnectionError extends SurrealDbError {
readonly message: string;
readonly status: number;
readonly statusText: string;
readonly buffer: ArrayBuffer;
name: string;
constructor(message: string, status: number, statusText: string, buffer: ArrayBuffer);
}
export declare class ResponseError extends SurrealDbError {
readonly message: string;
name: string;
constructor(message: string);
}
export declare class NoNamespaceSpecified extends SurrealDbError {
name: string;
message: string;
}
export declare class NoDatabaseSpecified extends SurrealDbError {
name: string;
message: string;
}
export declare class NoTokenReturned extends SurrealDbError {
name: string;
message: string;
}
export declare class UnsupportedVersion extends SurrealDbError {
name: string;
version: string;
supportedRange: string;
constructor(version: string, supportedRange: string);
}
export declare class VersionRetrievalFailure extends SurrealDbError {
readonly error?: Error | undefined;
name: string;
message: string;
constructor(error?: Error | undefined);
}
export declare abstract class CborError extends SurrealDbError {
abstract readonly name: string;
readonly message: string;
constructor(message: string);
}
export declare class CborNumberError extends CborError {
name: string;
}
export declare class CborRangeError extends CborError {
name: string;
}
export declare class CborInvalidMajorError extends CborError {
name: string;
}
export declare class CborBreak extends CborError {
name: string;
constructor();
}
export declare class CborPartialDisabled extends CborError {
name: string;
constructor();
}
export declare class CborFillMissing extends CborError {
name: string;
constructor();
}
declare class Encoded {
readonly encoded: ArrayBuffer;
constructor(encoded: ArrayBuffer);
}
/**
* A query and its bindings prepared for execution, which can be passed to the .query() method.
*/
export declare class PreparedQuery {
private _query;
private _bindings;
private length;
constructor(query: string, bindings?: Record<string, unknown>);
/**
* Retrieves the encoded query string.
*/
get query(): Encoded;
/**
* Retrieves the encoded bindings.
*/
get bindings(): Record<string, PartiallyEncoded>;
/**
* Compile this query and its bindings into a single ArrayBuffer, optionally filling gaps.
* @param fills - The gap values to fill
*/
build(fills?: Fill[]): ArrayBuffer;
/**
* A template literal tag function for appending additional query segments and bindings to the prepared query.
* @param query_raw - The additional query segments to append
* @param values - The additional interpolated values to append
* @example
* const query = surrealql`SELECT * FROM person`;
*
* if (filter) {
* query.append` WHERE name = ${filter}`;
* }
*/
append(query_raw: string[] | TemplateStringsArray, ...values: unknown[]): PreparedQuery;
}
/**
* A template literal tag function for creating prepared queries from query strings.
* Interpolated values are automatically stored as bindings.
* @param query_raw - The raw query string
* @param values - The interpolated values
* @example const query = surrealql`SELECT * FROM ${id}`;
* @returns A PreparedQuery instance
*/
export declare function surrealql(query_raw: string[] | TemplateStringsArray, ...values: unknown[]): PreparedQuery;
declare abstract class Value {
/**
* Compare equality with another value.
*/
abstract equals(other: unknown): boolean;
/**
* Convert this value to a serializable string
*/
abstract toJSON(): unknown;
/**
* Convert this value to a string representation
*/
abstract toString(): string;
}
/**
* A SurrealQL UUID value.
*/
export declare class Uuid extends Value {
private readonly inner;
constructor(uuid: string | ArrayBuffer | Uint8Array | Uuid | UUID);
equals(other: unknown): boolean;
toString(): string;
toJSON(): string;
toUint8Array(): Uint8Array;
toBuffer(): ArrayBufferLike;
static v4(): Uuid;
static v7(): Uuid;
}
export type RecordIdValue = string | number | Uuid | bigint | unknown[] | Record<string, unknown>;
/**
* A SurrealQL record ID value.
*/
export declare class RecordId<Tb extends string = string> extends Value {
readonly tb: Tb;
readonly id: RecordIdValue;
constructor(tb: Tb, id: RecordIdValue);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
/**
* A SurrealQL string-represented record ID value.
*/
export declare class StringRecordId extends Value {
readonly rid: string;
constructor(rid: string | StringRecordId | RecordId);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
/**
* A SurrealQL range value.
*/
declare class Range$1<Beg, End> extends Value {
readonly beg: Bound<Beg>;
readonly end: Bound<End>;
constructor(beg: Bound<Beg>, end: Bound<End>);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
export type Bound<T> = BoundIncluded<T> | BoundExcluded<T> | undefined;
export declare class BoundIncluded<T> {
readonly value: T;
constructor(value: T);
}
export declare class BoundExcluded<T> {
readonly value: T;
constructor(value: T);
}
/**
* A SurrealQL record ID range value.
*/
export declare class RecordIdRange<Tb extends string = string> extends Value {
readonly tb: Tb;
readonly beg: Bound<RecordIdValue>;
readonly end: Bound<RecordIdValue>;
constructor(tb: Tb, beg: Bound<RecordIdValue>, end: Bound<RecordIdValue>);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
/**
* An uncomputed SurrealQL future value.
*/
export declare class Future extends Value {
readonly inner: string;
constructor(inner: string);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
/**
* A SurrealQL duration value.
*/
export declare class Duration extends Value {
readonly _milliseconds: number;
constructor(input: Duration | number | string);
static fromCompact([s, ns]: [
number,
number
] | [
number
] | [
]): Duration;
equals(other: unknown): boolean;
toCompact(): [
number,
number
] | [
number
] | [
];
toString(): string;
toJSON(): string;
static parseString(input: string): number;
static nanoseconds(nanoseconds: number): Duration;
static microseconds(microseconds: number): Duration;
static milliseconds(milliseconds: number): Duration;
static seconds(seconds: number): Duration;
static minutes(minutes: number): Duration;
static hours(hours: number): Duration;
static days(days: number): Duration;
static weeks(weeks: number): Duration;
get microseconds(): number;
get nanoseconds(): number;
get milliseconds(): number;
get seconds(): number;
get minutes(): number;
get hours(): number;
get days(): number;
get weeks(): number;
}
/**
* A SurrealQL decimal value.
*/
export declare class Decimal extends Value {
readonly decimal: string;
constructor(decimal: string | number | Decimal);
equals(other: unknown): boolean;
toString(): string;
toJSON(): string;
}
/**
* A SurrealQL table value.
*/
export declare class Table<Tb extends string = string> extends Value {
readonly tb: Tb;
constructor(tb: Tb);
equals(other: unknown): boolean;
toJSON(): string;
toString(): string;
}
/**
* A SurrealQL geometry value.
*/
export declare abstract class Geometry extends Value {
abstract toJSON(): GeoJson;
abstract is(geometry: Geometry): boolean;
abstract clone(): Geometry;
equals(other: unknown): boolean;
toString(): string;
}
/**
* A SurrealQL point geometry value.
*/
export declare class GeometryPoint extends Geometry {
readonly point: [
number,
number
];
constructor(point: [
number | Decimal,
number | Decimal
] | GeometryPoint);
toJSON(): GeoJsonPoint;
get coordinates(): GeoJsonPoint["coordinates"];
is(geometry: Geometry): geometry is GeometryPoint;
clone(): GeometryPoint;
}
/**
* A SurrealQL line geometry value.
*/
export declare class GeometryLine extends Geometry {
readonly line: [
GeometryPoint,
GeometryPoint,
...GeometryPoint[]
];
constructor(line: [
GeometryPoint,
GeometryPoint,
...GeometryPoint[]
] | GeometryLine);
toJSON(): GeoJsonLineString;
get coordinates(): GeoJsonLineString["coordinates"];
close(): void;
is(geometry: Geometry): geometry is GeometryLine;
clone(): GeometryLine;
}
/**
* A SurrealQL polygon geometry value.
*/
export declare class GeometryPolygon extends Geometry {
readonly polygon: [
GeometryLine,
...GeometryLine[]
];
constructor(polygon: [
GeometryLine,
...GeometryLine[]
] | GeometryPolygon);
toJSON(): GeoJsonPolygon;
get coordinates(): GeoJsonPolygon["coordinates"];
is(geometry: Geometry): geometry is GeometryPolygon;
clone(): GeometryPolygon;
}
/**
* A SurrealQL multi-point geometry value.
*/
export declare class GeometryMultiPoint extends Geometry {
readonly points: [
GeometryPoint,
...GeometryPoint[]
];
constructor(points: [
GeometryPoint,
...GeometryPoint[]
] | GeometryMultiPoint);
toJSON(): GeoJsonMultiPoint;
get coordinates(): GeoJsonMultiPoint["coordinates"];
is(geometry: Geometry): geometry is GeometryMultiPoint;
clone(): GeometryMultiPoint;
}
/**
* A SurrealQL multi-line geometry value.
*/
export declare class GeometryMultiLine extends Geometry {
readonly lines: [
GeometryLine,
...GeometryLine[]
];
constructor(lines: [
GeometryLine,
...GeometryLine[]
] | GeometryMultiLine);
toJSON(): GeoJsonMultiLineString;
get coordinates(): GeoJsonMultiLineString["coordinates"];
is(geometry: Geometry): geometry is GeometryMultiLine;
clone(): GeometryMultiLine;
}
/**
* A SurrealQL multi-polygon geometry value.
*/
export declare class GeometryMultiPolygon extends Geometry {
readonly polygons: [
GeometryPolygon,
...GeometryPolygon[]
];
constructor(polygons: [
GeometryPolygon,
...GeometryPolygon[]
] | GeometryMultiPolygon);
toJSON(): GeoJsonMultiPolygon;
get coordinates(): GeoJsonMultiPolygon["coordinates"];
is(geometry: Geometry): geometry is GeometryMultiPolygon;
clone(): GeometryMultiPolygon;
}
/**
* A SurrealQL geometry collection value.
*/
export declare class GeometryCollection extends Geometry {
readonly collection: [
Geometry,
...Geometry[]
];
constructor(collection: [
Geometry,
...Geometry[]
] | GeometryCollection);
toJSON(): GeoJsonCollection;
get geometries(): GeoJsonCollection["geometries"];
is(geometry: Geometry): geometry is GeometryCollection;
clone(): GeometryCollection;
}
type GeoJson = GeoJsonPoint | GeoJsonLineString | GeoJsonPolygon | GeoJsonMultiPoint | GeoJsonMultiLineString | GeoJsonMultiPolygon | GeoJsonCollection;
type GeoJsonPoint = {
type: "Point";
coordinates: [
number,
number
];
};
type GeoJsonLineString = {
type: "LineString";
coordinates: [
GeoJsonPoint["coordinates"],
GeoJsonPoint["coordinates"],
...GeoJsonPoint["coordinates"][]
];
};
type GeoJsonPolygon = {
type: "Polygon";
coordinates: [
GeoJsonLineString["coordinates"],
...GeoJsonLineString["coordinates"][]
];
};
type GeoJsonMultiPoint = {
type: "MultiPoint";
coordinates: [
GeoJsonPoint["coordinates"],
...GeoJsonPoint["coordinates"][]
];
};
type GeoJsonMultiLineString = {
type: "MultiLineString";
coordinates: [
GeoJsonLineString["coordinates"],
...GeoJsonLineString["coordinates"][]
];
};
type GeoJsonMultiPolygon = {
type: "MultiPolygon";
coordinates: [
GeoJsonPolygon["coordinates"],
...GeoJsonPolygon["coordinates"][]
];
};
type GeoJsonCollection = {
type: "GeometryCollection";
geometries: GeoJson[];
};
/**
* Recursively encode any supported SurrealQL value into a binary CBOR representation.
* @param data - The input value
* @returns CBOR binary representation
*/
export declare function encodeCbor<T>(data: T): ArrayBuffer;
/**
* Decode a CBOR encoded SurrealQL value into object representation.
* @param data - The encoded SurrealQL value
* @returns The parsed SurrealQL value
*/
export declare function decodeCbor(data: ArrayBufferLike): any;
type R = Prettify<Record<string, unknown>>;
type RecordId$1<Tb extends string = string> = RecordId<Tb> | StringRecordId;
export declare class Surreal extends AuthController {
connection: AbstractEngine | undefined;
emitter: Emitter<EngineEvents>;
protected engines: Engines;
private _ready?;
constructor({ engines, }?: {
engines?: Engines;
});
/**
* Establish a socket connection to the database
* @param connection - Connection details
*/
connect(url: string | URL, opts?: ConnectOptions): Promise<true>;
private connectInner;
/**
* Disconnect the socket to the database
*/
close(): Promise<true>;
private clean;
/**
* Check if connection is ready
*/
get status(): ConnectionStatus;
/**
* A promise which resolves when the connection is ready
*/
get ready(): Promise<void>;
/**
* Ping SurrealDB instance
*/
ping(): Promise<true>;
/**
* Switch to a specific namespace and database.
* @param database - Switches to a specific namespace.
* @param db - Switches to a specific database.
*/
use({ namespace, database, }: {
namespace?: string | null;
database?: string | null;
}): Promise<true>;
/**
* Selects everything from the [$auth](https://surrealdb.com/docs/surrealql/parameters) variable.
* ```sql
* SELECT * FROM $auth;
* ```
* Make sure the user actually has the permission to select their own record, otherwise you'll get back an empty result.
* @return The record linked to the record ID used for authentication
*/
info<T extends R>(): Promise<ActionResult<T> | undefined>;
/**
* Specify a variable for the current socket connection.
* @param key - Specifies the name of the variable.
* @param val - Assigns the value to the variable name.
*/
let(variable: string, value: unknown): Promise<true>;
/**
* Remove a variable from the current socket connection.
* @param key - Specifies the name of the variable.
*/
unset(variable: string): Promise<true>;
/**
* Start a live select query and invoke the callback with responses
* @param table - The table that you want to receive live results for.
* @param callback - Callback function that receives updates.
* @param diff - If set to true, will return a set of patches instead of complete records
* @returns A unique subscription ID
*/
live<Result extends Record<string, unknown> | Patch = Record<string, unknown>>(table: RecordIdRange | Table | string, callback?: LiveHandler<Result>, diff?: boolean): Promise<Uuid>;
/**
* Subscribe to an existing live select query and invoke the callback with responses
* @param queryUuid - The unique ID of an existing live query you want to receive updates for.
* @param callback - Callback function that receives updates.
*/
subscribeLive<Result extends Record<string, unknown> | Patch = Record<string, unknown>>(queryUuid: Uuid, callback: LiveHandler<Result>): Promise<void>;
/**
* Unsubscribe a callback from a live select query
* @param queryUuid - The unique ID of an existing live query you want to ubsubscribe from.
* @param callback - The previously subscribed callback function.
*/
unSubscribeLive<Result extends Record<string, unknown> | Patch = Record<string, unknown>>(queryUuid: Uuid, callback: LiveHandler<Result>): Promise<void>;
/**
* Kill a live query
* @param queryUuid - The query that you want to kill.
*/
kill(queryUuid: Uuid | readonly Uuid[]): Promise<void>;
/**
* Runs a set of SurrealQL statements against the database.
* @param query - Specifies the SurrealQL statements.
* @param bindings - Assigns variables which can be used in the query.
*/
query<T extends unknown[]>(...args: QueryParameters): Promise<Prettify<T>>;
/**
* Runs a set of SurrealQL statements against the database.
* @param query - Specifies the SurrealQL statements.
* @param bindings - Assigns variables which can be used in the query.
*/
queryRaw<T extends unknown[]>(...[q, b]: QueryParameters): Promise<Prettify<MapQueryResult<T>>>;
/**
* Runs a set of SurrealQL statements against the database.
* @param query - Specifies the SurrealQL statements.
* @param bindings - Assigns variables which can be used in the query.
* @deprecated Use `queryRaw` instead
*/
query_raw<T extends unknown[]>(...args: QueryParameters): Promise<Prettify<MapQueryResult<T>>>;
/**
* Selects all records in a table, or a specific record, from the database.
* If you intend on sorting, filtering, or performing other operations on the data, it is recommended to use the `query` method instead.
* @param thing - The table name or a record ID to select.
*/
select<T extends R>(thing: RecordId$1): Promise<ActionResult<T>>;
select<T extends R>(thing: RecordIdRange | Table | string): Promise<ActionResult<T>[]>;
/**
* Creates a record in the database.
* @param thing - The table name or the specific record ID to create.
* @param data - The document / record data to insert.
*/
create<T extends R, U extends R = T>(thing: RecordId$1, data?: U): Promise<ActionResult<T>>;
create<T extends R, U extends R = T>(thing: Table | string, data?: U): Promise<ActionResult<T>[]>;
/**
* Inserts one or multiple records in the database.
* @param table - The table name to insert into.
* @param data - The document(s) / record(s) to insert.
*/
insert<T extends R, U extends R = T>(data?: U | U[]): Promise<ActionResult<T>[]>;
insert<T extends R, U extends R = T>(table: Table | string, data?: U | U[]): Promise<ActionResult<T>[]>;
/**
* Inserts one or multiple records in the database.
* @param thing - The table name or the specific record ID to create.
* @param data - The document(s) / record(s) to insert.
*/
insertRelation<T extends R, U extends R = T>(data?: U | U[]): Promise<ActionResult<T>[]>;
insertRelation<T extends R, U extends R = T>(table: Table | string, data?: U | U[]): Promise<ActionResult<T>[]>;
/**
* Inserts one or multiple records in the database.
* @param thing - The table name or the specific record ID to create.
* @param data - The document(s) / record(s) to insert.
* @deprecated Use `insertRelation` instead
*/
insert_relation<T extends R, U extends R = T>(data?: U | U[]): Promise<ActionResult<T>[]>;
insert_relation<T extends R, U extends R = T>(table: Table | string, data?: U | U[]): Promise<ActionResult<T>[]>;
/**
* Updates all records in a table, or a specific record, in the database.
*
* ***NOTE: This function replaces the current document / record data with the specified data.***
* @param thing - The table name or the specific record ID to update.
* @param data - The document / record data to insert.
*/
update<T extends R, U extends R = T>(thing: RecordId$1, data?: U): Promise<ActionResult<T>>;
update<T extends R, U extends R = T>(thing: RecordIdRange | Table | string, data?: U): Promise<ActionResult<T>[]>;
/**
* Upserts all records in a table, or a specific record, in the database.
*
* ***NOTE: This function replaces the current document / record data with the specified data.***
* @param thing - The table name or the specific record ID to upsert.
* @param data - The document / record data to insert.
*/
upsert<T extends R, U extends R = T>(thing: RecordId$1, data?: U): Promise<ActionResult<T>>;
upsert<T extends R, U extends R = T>(thing: RecordIdRange | Table | string, data?: U): Promise<ActionResult<T>[]>;
/**
* Modifies all records in a table, or a specific record, in the database.
*
* ***NOTE: This function merges the current document / record data with the specified data.***
* @param thing - The table name or the specific record ID to change.
* @param data - The document / record data to insert.
*/
merge<T extends R, U extends R = Partial<T>>(thing: RecordId$1, data?: U): Promise<ActionResult<T>>;
merge<T extends R, U extends R = Partial<T>>(thing: RecordIdRange | Table | string, data?: U): Promise<ActionResult<T>[]>;
/**
* Applies JSON Patch changes to all records, or a specific record, in the database.
*
* ***NOTE: This function patches the current document / record data with the specified JSON Patch data.***
* @param thing - The table name or the specific record ID to modify.
* @param data - The JSON Patch data with which to modify the records.
*/
patch<T extends R>(thing: RecordId$1, data?: Patch[], diff?: false): Promise<ActionResult<T>>;
patch<T extends R>(thing: RecordIdRange | Table | string, data?: Patch[], diff?: false): Promise<ActionResult<T>[]>;
patch<T extends R>(thing: RecordId$1, data: undefined | Patch[], diff: true): Promise<Patch[]>;
patch<T extends R>(thing: RecordIdRange | Table | string, data: undefined | Patch[], diff: true): Promise<Patch[][]>;
/**
* Deletes all records in a table, or a specific record, from the database.
* @param thing - The table name or a record ID to select.
*/
delete<T extends R>(thing: RecordId$1): Promise<ActionResult<T>>;
delete<T extends R>(thing: RecordIdRange | Table | string): Promise<ActionResult<T>[]>;
/**
* Obtain the version of the SurrealDB instance
* @example `surrealdb-2.1.0`
*/
version(): Promise<string>;
/**
* Run a SurrealQL function
* @param name - The full name of the function
* @param args - The arguments supplied to the function. You can also supply a version here as a string, in which case the third argument becomes the parameter list.
*/
run<T>(name: string, args?: unknown[]): Promise<T>;
/**
* Run a SurrealQL function
* @param name - The full name of the function
* @param version - The version of the function. If omitted, the second argument is the parameter list.
* @param args - The arguments supplied to the function.
*/
run<T>(name: string, version: string, args?: unknown[]): Promise<T>;
/**
* Obtain the version of the SurrealDB instance
* @param from - The in property on the edge record
* @param thing - The id of the edge record
* @param to - The out property on the edge record
* @param data - Optionally, provide a body for the edge record
*/
relate<T extends R, U extends R = T>(from: string | RecordId$1 | RecordId$1[], thing: RecordId$1, to: string | RecordId$1 | RecordId$1[], data?: U): Promise<T>;
relate<T extends R, U extends R = T>(from: string | RecordId$1 | RecordId$1[], thing: string, to: string | RecordId$1 | RecordId$1[], data?: U): Promise<T[]>;
/**
* Send a raw message to the SurrealDB instance
* @param method - Type of message to send.
* @param params - Parameters for the message.
*/
rpc<Result>(method: string, params?: unknown[]): Promise<RpcResponse<Result>>;
/**
* Export the database and return the result as a string
* @param options - Export configuration options
*/
export(options?: Partial<ExportOptions>): Promise<string>;
/**
* Import an existing export into the database
* @param input - The data to import
*/
import(input: string): Promise<void>;
}
declare class ReconnectContext {
private _attempts;
readonly options: ReconnectOptions;
readonly surreal: Surreal;
constructor(input: undefined | Partial<ReconnectOptions> | boolean, surreal: Surreal);
get attempts(): number;
get enabled(): boolean;
get allowed(): boolean;
reset(): void;
iterate(): Promise<void>;
}
export type Engine = new (context: EngineContext) => AbstractEngine;
export type Engines = Record<string, Engine>;
declare const RetryMessage: unique symbol;
export type EngineEvents = {
connecting: [
];
connected: [
];
reconnecting: [
];
disconnected: [
];
error: [
Error
];
[K: `rpc-${string | number}`]: [
RpcResponse | EngineDisconnected | typeof RetryMessage
];
[K: `live-${string}`]: LiveHandlerArguments;
};
export declare enum ConnectionStatus {
Disconnected = "disconnected",
Connecting = "connecting",
Reconnecting = "reconnecting",
Connected = "connected",
Error = "error"
}
declare class EngineContext {
readonly emitter: Emitter<EngineEvents>;
readonly encodeCbor: (value: unknown) => ArrayBuffer;
readonly decodeCbor: (value: ArrayBufferLike) => any;
readonly reconnect: ReconnectContext;
readonly prepare: PrepareFn | undefined;
constructor({ emitter, encodeCbor, decodeCbor, reconnect, prepare, }: {
emitter: Emitter<EngineEvents>;
encodeCbor: (value: unknown) => ArrayBuffer;
decodeCbor: (value: ArrayBufferLike) => any;
reconnect: ReconnectContext;
prepare: PrepareFn | undefined;
});
}
export declare abstract class AbstractEngine {
readonly context: EngineContext;
ready: Promise<void> | undefined;
status: ConnectionStatus;
connection: {
url: URL | undefined;
namespace: string | undefined;
database: string | undefined;
token: string | undefined;
};
constructor(context: EngineContext);
get emitter(): EngineContext["emitter"];
get encodeCbor(): EngineContext["encodeCbor"];
get decodeCbor(): EngineContext["decodeCbor"];
abstract connect(url: URL): Promise<void>;
abstract disconnect(): Promise<void>;
abstract rpc<Method extends string, Params extends unknown[] | undefined, Result>(request: RpcRequest<Method, Params>, force?: boolean): Promise<RpcResponse<Result>>;
abstract version(url: URL, timeout?: number): Promise<string>;
abstract export(options?: Partial<ExportOptions>): Promise<string>;
abstract import(data: string): Promise<void>;
}
export declare abstract class AuthController {
abstract connection: AbstractEngine | undefined;
abstract rpc<Result>(method: string, params?: unknown[]): Promise<RpcResponse<Result>>;
/**
* Signs up to a specific authentication scope.
* @param vars - Variables used in a signup query.
* @return The authentication token.
*/
signup(vars: ScopeAuth | AccessRecordAuth): Promise<Token>;
/**
* Signs in to a specific authentication scope.
* @param vars - Variables used in a signin query.
* @return The authentication token.
*/
signin(vars: AnyAuth): Promise<Token>;
/**
* Authenticates the current connection with a JWT token.
* @param token - The JWT authentication token.
*/
authenticate(token: Token): Promise<true>;
/**
* Invalidates the authentication for the current connection.
*/
invalidate(): Promise<true>;
}
export declare class EngineAuth extends AuthController {
connection: AbstractEngine;
constructor(connection: AbstractEngine);
rpc<Result>(method: string, params?: unknown[]): Promise<RpcResponse<Result>>;
}
export type ActionResult<T extends Record<string, unknown>> = Prettify<T["id"] extends RecordId ? T : {
id: RecordId;
} & T>;
export type Prettify<T> = {
[K in keyof T]: T[K];
} & {};
export type QueryParameters = [
query: string,
bindings?: Record<string, unknown>
] | [
prepared: PreparedQuery,
gaps?: Fill[]
];
export declare function convertAuth(params: AnyAuth): Record<string, unknown>;
export type RootAuth = {
username: string;
password: string;
};
export type NamespaceAuth = {
namespace: string;
username: string;
password: string;
};
export type DatabaseAuth = {
namespace: string;
database: string;
username: string;
password: string;
};
export type AccessSystemAuth = Prettify<(RootAuth | NamespaceAuth | DatabaseAuth) & {
access: string;
variables?: never;
}>;
export type ScopeAuth = {
namespace?: string;
database?: string;
scope: string;
[K: string]: unknown;
};
export type AccessRecordAuth = {
namespace?: string;
database?: string;
access: string;
variables: {
ns?: never;
db?: never;
ac?: never;
[K: string]: unknown;
};
};
export type AnyAuth = RootAuth | NamespaceAuth | DatabaseAuth | ScopeAuth | AccessSystemAuth | AccessRecordAuth;
export type Token = string;
export type AuthClient = Pick<Surreal, "signin" | "signup" | "authenticate" | "invalidate">;
export type QueryResult<T = unknown> = QueryResultOk<T> | QueryResultErr;
export type QueryResultOk<T> = {
status: "OK";
time: string;
result: T;
};
export type QueryResultErr = {
status: "ERR";
time: string;
result: string;
};
export type MapQueryResult<T> = {
[K in keyof T]: QueryResult<T[K]>;
};
type BasePatch<T = string> = {
path: T;
};
export type AddPatch<T = string, U = unknown> = BasePatch<T> & {
op: "add";
value: U;
};
export type RemovePatch<T = string> = BasePatch<T> & {
op: "remove";
};
export type ReplacePatch<T = string, U = unknown> = BasePatch<T> & {
op: "replace";
value: U;
};
export type ChangePatch<T = string, U = string> = BasePatch<T> & {
op: "change";
value: U;
};
export type CopyPatch<T = string, U = string> = BasePatch<T> & {
op: "copy";
from: U;
};
export type MovePatch<T = string, U = string> = BasePatch<T> & {
op: "move";
from: U;
};
export type TestPatch<T = string, U = unknown> = BasePatch<T> & {
op: "test";
value: U;
};
export type Patch = AddPatch | RemovePatch | ReplacePatch | ChangePatch | CopyPatch | MovePatch | TestPatch;
export type RpcRequest<Method extends string = string, Params extends unknown[] | undefined = unknown[]> = {
method: Method;
params?: Params;
};
export type RpcResponse<Result = unknown> = RpcResponseOk<Result> | RpcResponseErr;
export type RpcResponseOk<Result = unknown> = {
result: Result;
error?: never;
};
export type RpcResponseErr = {
result?: never;
error: {
code: number;
message: string;
};
};
export declare const liveActions: readonly [
"CREATE",
"UPDATE",
"DELETE"
];
export type LiveAction = (typeof liveActions)[number];
export type LiveResult = {
id: Uuid;
action: LiveAction;
result: Record<string, unknown>;
};
export type LiveHandlerArguments<Result extends Record<string, unknown> | Patch = Record<string, unknown>> = [
action: LiveAction,
result: Result
] | [
action: "CLOSE",
result: "killed" | "disconnected"
];
export type LiveHandler<Result extends Record<string, unknown> | Patch = Record<string, unknown>> = (...[action, result]: LiveHandlerArguments<Result>) => unknown;
export declare function isLiveResult(v: unknown): v is LiveResult;
export type ExportOptions = {
users: boolean;
accesses: boolean;
params: boolean;
functions: boolean;
analyzers: boolean;
versions: boolean;
tables: boolean | string[];
records: boolean;
};
export declare const DEFAULT_RECONNECT_OPTIONS: ReconnectOptions;
export type PrepareFn = (auth: AuthController) => unknown;
export interface ConnectOptions {
/** The namespace to connect to */
namespace?: string;
/** The database to connect to */
database?: string;
/** Authentication details to use */
auth?: AnyAuth | Token;
/** A callback to customise the connection before connection completion */
prepare?: PrepareFn;
/** Enable automated SurrealDB version checking */
versionCheck?: boolean;
/** The maximum amount of time in milliseconds to wait for version checking */
versionCheckTimeout?: number;
/** Configure reconnect behavior */
reconnect?: boolean | Partial<ReconnectOptions>;
}
export interface ReconnectOptions {
/** Reconnect after a connection has unexpectedly dropped */
enabled: boolean;
/** How many attempts will be made at reconnecting, -1 for unlimited */
attempts: number;
/** The minimum amount of time in milliseconds to wait before reconnecting */
retryDelay: number;
/** The maximum amount of time in milliseconds to wait before reconnecting */
retryDelayMax: number;
/** The amount to multiply the delay by after each failed attempt */
retryDelayMultiplier: number;
/** A float percentage to randomly offset each delay by */
retryDelayJitter: number;
}
/**
* Recursively compare supported SurrealQL values for equality.
*
* @param x The first value to compare
* @param y The second value to compare
* @returns Whether the two values are recursively equal
*/
export declare function equals(x: unknown, y: unknown): boolean;
export type Jsonify<T> = T extends Date | Uuid | Decimal | Duration | Future | Range$1<unknown, unknown> | StringRecordId ? string : T extends undefined ? never : T extends Record<string | number | symbol, unknown> | Array<unknown> ? {
[K in keyof T]: Jsonify<T[K]>;
} : T extends Map<infer K, infer V> ? Map<K, Jsonify<V>> : T extends Set<infer V> ? Set<Jsonify<V>> : T extends Geometry ? ReturnType<T["toJSON"]> : T extends RecordId<infer Tb> ? `${Tb}:${string}` : T extends RecordIdRange<infer Tb> ? `${Tb}:${string}..${string}` : T extends Table<infer Tb> ? `${Tb}` : T;
/**
* Recursively convert any supported SurrealQL value into a serializable JSON representation.
* @param input - The input value
* @returns JSON-safe representation
*/
export declare function jsonify<T>(input: T): Jsonify<T>;
type Version = `${number}.${number}.${number}`;
export declare const defaultVersionCheckTimeout = 5000;
export declare const supportedSurrealDbVersionMin: Version;
export declare const supportedSurrealDbVersionUntil: Version;
export declare const supportedSurrealDbVersionRange: string;
export declare function versionCheck(version: string, min?: Version, until?: Version): true;
export declare function isVersionSupported(version: string, min?: Version, until?: Version): boolean;
/**
* Query the version of a remote SurrealDB instance
* @param url - The URL of the remote SurrealDB instance
* @param timeout - The timeout in milliseconds for the request
* @returns
*/
export declare function retrieveRemoteVersion(url: URL, timeout?: number): Promise<Version>;
export declare function getIncrementalID(): string;
/**
* A template literal tag function for parsing a string type
* @param string - The string to parse
* @param values - The interpolated values
* @returns The parsed string
*/
export declare function s(string: string[] | TemplateStringsArray, ...values: unknown[]): string;
/**
* A template literal tag function for parsing a string into a Date
* @param string - The string to parse
* @param values - The interpolated values
* @returns The parsed Date
*/
export declare function d(string: string[] | TemplateStringsArray, ...values: unknown[]): Date;
/**
* A template literal tag function for parsing a string into a StringRecordId
* @param string - The string to parse
* @param values - The interpolated values
* @returns The parsed StringRecordId
*/
export declare function r(string: string[] | TemplateStringsArray, ...values: unknown[]): StringRecordId;
/**
* A template literal tag function for parsing a string into a Uuid
* @param string - The string to parse
* @param values - The interpolated values
* @returns The parsed Uuid
*/
export declare function u(string: string[] | TemplateStringsArray, ...values: unknown[]): Uuid;
/**
* Recursively print any supported SurrealQL value into a string representation.
* @param input - The input value
* @returns Stringified SurrealQL representation
*/
export declare function toSurrealqlString(input: unknown): string;
/**
* Escape a given string to be used as a valid SurrealQL ident.
* @param str - The string to escape
* @returns Optionally escaped string
*/
export declare function escapeIdent(str: string): string;
/**
* Escape a given string to be used as a valid SurrealQL ident.
* @param str - The string to escape
* @returns Optionally escaped string
* @deprecated Use `escapeIdent` instead
*/
export declare function escape_ident(str: string): string;
/**
* Escape a number to be used as a valid SurrealQL ident.
* @param num - The number to escape
* @returns Optionally escaped number
*/
export declare function escapeNumber(num: number | bigint): string;
declare namespace cbor {
export { CborBreak, CborError, CborFillMissing, CborInvalidMajorError, CborNumberError, CborPartialDisabled, CborRangeError, DecodeOptions, Encoded, EncoderOptions, Fill, Gap, Major, POW_2_53, POW_2_64, PartiallyEncoded, Reader, Replacer, Tagged, Writer, decode, encode, infiniteBytes, partiallyEncodeObject };
}
export {
Range$1 as Range,
Surreal as default,
cbor,
surrealql as surql,
};
export {};