コンテンツにスキップ

接続

インポート

import { Surreal } from "@tai-kun/surrealdb";

.constructor()

new Surreal();

引数

なし。

返値

new を通じて呼び出された場合、Surreal はそのインスタンスを返します。

.connect() インスタンス メソッド

SurrealDB エンドポイントに接続します。このメソッドは非同期で実行されますが、同じインスタンス内であれば他の .connect().close() と重複して実行されることはありません。

connect(
endpoint: string | URL,
options?: ClientConnectOptions,
): Promise<void>;

引数

endpoint

SurrealDB のエンドポイントを URL で指定します。URL パスの末尾が /rpc でない場合は自動的に追加されます。したがって、http://localhost:8000 を引数に渡せば、http://localhost:8000/rpc に接続します。

options

接続時のオプションです。

signal?: AbortSignal
接続を中断するための中止シグナルです。デフォルトでは 15 秒でタイムアウトする中止シグナルが設定されます。

返値

undefined で解決される Promise オブジェクトを返します。

次の例では WebSocket プロトコルで SurrealDB に接続します:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");

.close() による切断無しに異なるエンドポイントに接続することはできません。なお、先に接続が確立したエンドポイントとの接続は維持されます:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
await db.connect("ws://localhost:1129"); // throws ConnectionConflictError: An attempt was made to connect to ws://localhost:1129/rpc while ws://localhost:8000/rpc was already connected.

.connect() は非同期処理のコンテクストで同時に実行されるされることはないため、次の例も同様に接続に失敗します。通常どのエンドポイントが先に接続を確立するかわからないため、エラーメッセージは都度異なる可能性があります:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await Promise.all([
db.connect("ws://localhost:8000"),
db.connect("ws://localhost:1129"),
]); // throws ConnectionConflictError

.close() インスタンス メソッド

SurrealDB との接続を切ります。まだ接続していないか、すでに切断されていてもエラーを投げることはありません。このメソッドは非同期で実行されますが、同じインスタンス内であれば .connect() や他の .close() と重複して実行されることはありません。

close(options?: ClientCloseOptions): Promise<void>

引数

options

切断時のオプションです。

force?: boolean
true にすると Surreal オブジェクトのイベントリスナーに渡される中止シグナルに中止信号を送信します。イベントリスナーには処理が不完全であっても直ちに中断されることが期待されます。
signal?: AbortSignal
接続を中断するための中止シグナルです。デフォルトでは 15 秒でタイムアウトする中止シグナルが設定されます。

返値

undefined で解決される Promise オブジェクトを返します。

次の例では WebSocket プロトコルで SurrealDB に接続したのち、その接続を切ります:

import { Surreal } from "@tai-kun/surrealdb";
const db = new Surreal();
await db.connect("ws://localhost:8000");
await db.close();

.getConnectionInfo() インスタンス メソッド

接続情報を取得します。接続情報は常に内部情報がコピーされた値を持ちます。そのため接続情報には URL オブジェクトが含まれますが、これを直接変更しても Surreal オブジェクトが内部に持つエンドポイントの情報は変わりません。まだ接続が要求されていない場合は undefined です。

getConnectionInfo(): ConnectionInfo | undefined;

引数

なし。

返値

接続が確立している場合は接続情報を返します。そうでない場合は undefined を返します。接続情報には次の項目が含まれます。

state: "connecting" | "open" | "closing" | "closed"
現在の接続状態を示す数値です。それぞれの数値は次の意味を示します:
endpoint: URL | null
接続先のエンドポイントです。切断状態でのみ null です。
namespace: string | null
現在選択中の名前空間です。名前空間を選択していない場合は null です。
database: string | null
現在選択中のデータベース名です。データベースを選択していない場合は null です。
token: string | null
現在認証されているトークンです。サインアップまたはサインインしていない場合は null です。

各接続状態における接続情報のとりえる値は次の表のとおりです:

stateendpointnamespacedatabasetoken
"connecting"URLnullnullnull
"open"URLstring|nullstring|nullstring|null
"closing"URLstring|nullstring|nullstring|null
"closed"nullnullnullnull

.state インスタンス プロパティー 読み取り専用

現在の接続状態を示す数値です。

state: "connecting" | "open" | "closing" | "closed"

便宜上、接続が確立されていない場合でも "closed" になります (undefined ではありません。)

関連: .getConnectionInfo() も参照してください。

.endpoint インスタンス プロパティー 読み取り専用

接続先のエンドポイントです。切断状態でのみ null です。接続が確立されていない場合は undefined です。

endpoint: string | null | undefined

関連: .getConnectionInfo() も参照してください。

.namespace インスタンス プロパティー

現在選択中の名前空間です。名前空間を選択していない場合は null です。接続が確立されていない場合は undefined です。

namespace: string | null | undefined

関連: .getConnectionInfo() も参照してください。

.database インスタンス プロパティー

現在選択中のデータベース名です。接データベースを選択していない場合は null です。接続が確立されていない場合は undefined です。

database: string | null | undefined

関連: .getConnectionInfo() も参照してください。

.token インスタンス プロパティー

現在認証されているトークンです。サインアップまたはサインインしていない場合は null です。接続が確立されていない場合は undefined です。

token: string | null | undefined

関連: .getConnectionInfo() も参照してください。

.on() インスタンス メソッド

イベントリスナーを登録します。

off(
event:
| "connecting" | "open" | "closing" | "closed"
| `rpc_${RpcMethod}_${number}`
| `live_${string}`
| "error",
listener: (taskRunnerArgs, ...eventArgs) => void | PromiseLike<void>,
): void

引数

event

監視するイベント名です。

"connecting" | "open" | "closing" | "closed"
接続情報が遷移するとき、または遷移に失敗してときに発生するイベントです。
rpc_${RpcMethod}_${number}
双方向通信における RPC レスポンスが発生するイベントです。RpcMethod は例えば pinguse などの PRC メソッド名です。number は双方向通信においてリクエスト/レスポンスを紐付けるための識別子であり、1 から 2^53-1 までの整数をとります。HTTP では 0 で固定になります。
live_${string}
ライブクエリーのイベントを受信したときに発生するイベントです。現在 WebSocket プロトコルでのみ使用され、HTTP プロトコルではこのイベントは使用されません。string はライブクエリーの UUID です。
error
エラーイベントです。現在 WebSocket プロトコルでのみ使用され、HTTP プロトコルではこのイベントは使用されません。
listener

イベントが発生したときに実行される関数です。タスクエミッターも参照してください。eventArgs に渡される値はイベントによって異なります。

"connecting" | "open" | "closing" | "closed"
次のいずれかです:
  • { state: "connecting" | "open" | "closing" | "closed" }
  • { state: "connecting" | "open" | "closing" | "closed", error: unknown }
rpc_${RpcMethod}_${number}
次のいずれかです:
  • { id: string, result: unknown }
  • { id: string, error: { code: number, message: string } }
live_${string}
通常モードのライブクエリー:
  • { action: "CREATE" | "UPDATE" | "DELETE", result: object, record: string | object }
差分取得モードのライブクエリー:
  • { action: "CREATE" | "UPDATE", result: object[], record: string | object }
  • { action: "DELETE", result: object, record: string | object }
error
次のいずれかです:

返値

なし。

.once() インスタンス メソッド

.on() と似ていますが、イベントを一度だけ補足します。

once(
event:
| "connecting" | "open" | "closing" | "closed"
| `rpc_${RpcMethod}_${number}`
| `live_${string}`
| "error",
options?: TaskListenerOptions,
): StatefulPromise<unknown[]>

引数

event

.on()event と同じです。

options

タスクリスナーのオプションです。タスクエミッターを参照してください。

返値

.on() のタスクリスナーの eventArgs で解決される StatefulPromise を返します。

.off() インスタンス メソッド

.on() で登録したイベントリスナーを解除します。

off(
event:
| "connecting" | "open" | "closing" | "closed"
| `rpc_${RpcMethod}_${number}`
| `live_${string}`
| "error",
listener: (taskRunnerArgs, ...eventArgs) => void | PromiseLike<void>,
): void

引数

event

イベントリスナーを登録解除するイベントの名前です。

listener

登録解除するイベントリスナーです。

返値

なし。