エラー
SurrealError
SurrealError
はこの SDK が明示的に投げるエラーオブジェクトのほとんどすべてが継承する基底クラスです。このクラスは JavaScript の Error
クラスを継承してます。このエラーオブジェクトが単体で投げられることはほとんど無く、基本的には継承先の特別な意味を持つエラーオブジェクトが投げられます。try-catch
構文などで補足したエラーがこの SDK が明示的に投げたエラーであることを簡単に分類するために使うことを推奨します。
.name: "SurrealError"
- エラー名です。
.message
- エラーメッセージです。
.stack
- スタックトレースが記録されている場合があります。
.cause
- エラーが発生した原因やコンテクストが設定される場合があります。
SurrealTypeError
継承元: SurrealError
これは入力値やその他の検証に失敗した場合に投げられるエラーです。
.name: "SurrealTypeError"
- エラー名です。
.expected
- 期待するデータ形式です。
.actual
- 実際の値の文字列表現です。
SurrealAggregateError
継承元: SurrealError
これは複数のエラーやエラーメッセージがまとめられたエラーです。
.name: "SurrealAggregateError"
- エラー名です。
.cause: unknown[]
- 配列の各要素にエラーやエラーメッセージ等が含まれています。
CircularReferenceError
継承元: SurrealError
これは循環参照を検知した場合に投げられるエラーです。主に JavaScript の値を別の形式に変換する過程で、親のオブジェクトと同じオブジェクトが検知された場合に投げられます。
.name: "CircularReferenceError"
- エラー名です。
例えば次のような場合にこのエラーは投げられます:
import { toSurql } from "@tai-kun/surrealdb/utils";
const a = {};a.a = a;
console.log(a); // <ref *1> { a: [Circular *1] }
toSurql(a); // throws CircularReferenceError
NumberRangeError
継承元: SurrealError
これは数値が範囲外の値を取った場合に投げられるエラーです。
.name: "NumberRangeError"
- エラー名です。
.range
- 期待する範囲です。
.actual
- 実際の値です。
.integer
true
の場合、整数を期待します。
UnsupportedRuntimeError
継承元: SurrealError
これはサポートされていないランタイムを使用していると判断された場合に投げられるエラーです。
.name: "UnsupportedRuntimeError"
- エラー名です。
UnreachableError
継承元: SurrealError
これは到達不可能なコードに到達した場合に投げられるエラーです。このエラーが投げられた場合、おそらくこの SDK のバグに遭遇したものと考えられます。
.name: "UnreachableError"
- エラー名です。
CircularEngineReferenceError
継承元: CircularReferenceError
これはデータベースに接続する際に、エンジン間で循環参照が発生した場合に投げられるエラーです。
.name: "CircularEngineReferenceError"
- エラー名です。
.seen: string[]
- 循環参照が発生するまでに経由したプロトコル名のリストです。
例えば次のような場合にこのエラーは投げられます:
const { Surreal } = initSurreal({ engines: { http: "https", https: "http", }, // ...});
await using db = new Surreal();await db.connect("https://localhost:8000"); // throws CircularEngineReferenceError: Circular engine reference: http,https
上記の例では、https プロトコルのエンジンが http に設定されているエンジンを使うことを示しているにもかかわらず、http プロトコルのエンジンは https に設定されているエンジンを使おうとするため、循環参照エラーが投げられます。
EngineNotFoundError
継承元: SurrealError
これはエンジンが設定されていないプロトコルで接続しようとした倍に投げられるエラーです。
.name: "EngineNotFoundError"
- エラー名です。
.protocol: string
- 接続先のプロトコル名です。
例えば次のような場合にこのエラーは投げられます:
const { Surreal } = initSurreal({ engines: { http: config => new HttpEngine(config), }, // ...});
await using db = new Surreal();await db.connect("https://localhost:8000"); // throws EngineNotFoundError: No https protocol engine found.
ConnectionConflictError
継承元: SurrealError
これはクライエントが複数のエンドポイントに同時に接続しようとした場合に投げられるエラーです。
.name: "ConnectionConflictError"
- エラー名です。
.endpoint1: string
- 一方のエンドポイントです。
.endpoint2: string
- もう一方のエンドポイントです。
await using db = new Surreal();
await db.connect("http://localhost:8000");await db.connect("http://localhost:11298"); // throws ConnectionConflictError: Connection conflict between http://localhost:8000/rpc and http://localhost:11298/rpc.
.connect
メソッドは渡された URL のパスが /rpc
で終わらない場合、それを末尾に追加します。そのため、一方のエンドポイントの URL パスが /rpc
で終わる場合は、その見た目に反してエラーにならないことがあります:
await using db = new Surreal();
await db.connect("http://localhost:8000");await db.connect("http://localhost:8000/rpc"); // OK!
await using db = new Surreal();
await db.connect("http://localhost:8000/rpc");await db.connect("http://localhost:8000"); // OK!
NamespaceConflictError
継承元: SurrealError
これは SDK が同時に異なる複数の名前空間に切り替えようとした場合に投げられるエラーです。
.name: "NamespaceConflictError"
- エラー名です。
.namespace1: string
- 一方の名前空間です。
.namespace2: string
- もう一方の名前空間です。
例えば次のような場合にこのエラーは投げられます:
await using db = new Surreal();
await db.connect("http://localhost:8000");await db.signin({ user: "root", pass: "root" });await Promise.all([ db.use({ namespace: "foo" }), db.use({ namespace: "bar" }),]);
DatabaseConflictError
継承元: SurrealError
これは SDK が同時に異なる複数のデータベースに切り替えようとした場合に投げられるエラーです。
.name: "DatabaseConflictError"
- エラー名です。
.database1: string
- 一方のデータベースです。
.database2: string
- もう一方のデータベースです。
例えば次のような場合にこのエラーは投げられます:
await using db = new Surreal();
await db.connect("http://localhost:8000");await db.signin({ user: "root", pass: "root" });await Promise.all([ db.use({ namespace: "baz" database: "foo" }), db.use({ namespace: "baz" database: "bar" }),]);
MissingNamespaceError
継承元: SurrealError
これはデータベースを選択する前に名前空間が選択されていない場合に投げられるエラーです。または、データベースを選択したまま名前空間を未選択状態にしようとしても投げられます。
.name: "MissingNamespaceError"
- エラー名です。
.database: string
- データベース名です。
例えば次のような場合にこのエラーは投げられます:
await using db = new Surreal();await db.connect("http://localhost:8000");
await db.use({ database: "example" }); // throws MissingNamespaceError: The namespace must be specified before the database.
RpcResponseError
継承元: SurrealError
これは RPC レスポンスがエラーを示した場合に投げられるエラーです。接続したプロトコルによる通信やレスポンスボディのデコードなどに問題はありませんが、SurrealDB が RPC リクエストを処理できないことを意味します。
.name: "RpcResponseError"
- エラー名です。
.id?: string
- RPC リクエストを識別する ID です。ID は常に
<メソッド名>_
で始まります。 .code: number
- SurrealDB のドキュメントに明記されていませんが、おそらく JSON-RPC のエラーコードだと思われます。
QueryFailedError
継承元: SurrealAggregateError
これはクエリーに失敗した場合に投げられるエラーです。
.name: "QueryFailedError"
- エラー名です。
.cause: string[]
- エラーの一覧です。
例えば次のような場合にこのエラーは投げられます:
await using db = new Surreal();await db.connect("http://localhost:8000");
await db.query("OUTPUT 'Hello'"); // throws QueryFailedError: Query failed with 1 error(s)
Disconnected
継承元: SurrealError
これは接続が強制的に終了されたことを示すエラーです。
.name: "Disconnected"
- エラー名です。
例えば次のような場合にこのエラーを得ます:
const db = new Surreal();
db.on("<event_name>", ({ signal }) => { return new Promise((resolve, reject) => { signal.addEventListener("abort", function() { console.error(this.reason); // Disconnected reject(); })
// ... });});
await db.disconnect({ force: true });
EngineError
継承元: SurrealError
これはエンジンに起因するエラーであることを示します。イベントリスナー経由で発送されます。
.name: "EngineError"
- エラー名です。
.fatal: boolean | undefined
- このエラーが致命的であるかどうかを示しています。
HttpEngineError
継承元: EngineError
これは HTTP エンジンに起因するエラーであることを示します。現在は定義されているだけで、使用されていません。
.name: "HttpEngineError"
- エラー名です。
WebSocketEngineError
継承元: EngineError
これは WebSocket エンジンに起因するエラーであることを示します。RPC リクエストを識別する ID を見つける前にレスポンスボディの解析に失敗した場合や、WebSocket オブジェクトからエラーイベントを受け取ったとき、WebSocket の接続を切ったときなど使用されます。
.name: "WebSocketEngineError"
- エラー名です。
.code: number
- 次のステータスコードのうちのいずれか一つです:
1000
~1015
: MDN Reference3150
:WebSocket
[^1] のインスタンスから “error” イベントを受け取ったことを示しています。3151
: WebSocket エンジンが登録する “open” イベントハンドラー内でエラーが発生したことを示しています。接続中状態から接続状態へ遷移する途中でStateTransitionError
が発生していることがほとんどです。3152
: WebSocket エンジンが登録する “message” イベントハンドラー内でエラーが発生したことを示しています。多用な原因が考えられますが、イベントハンドラー内でResponseError
またはRpcResponseError
が投げられた可能性が高いです。元をたどれば、.query()
メソッドで誤った文法の SurrealQL カスタムクエリーをリクエストした場合や、無効な RPC パラメーターでリクエストしたことが原因と考えられます。その場合、RPC の呼び出し元のメソッドは (デフォルトで) 5 秒でタイムアウトして失敗します。3153
: ping の送受信に失敗したことを示しています。一時的なエラーかもしれませんが、継続して受け取っているなら、接続を維持できていない可能性があります。3154
: WebSocket エンジンが登録する “close” イベントハンドラー内でエラーが発生したことを示しています。切断中状態から切断状態へ遷移する途中でStateTransitionError
が発生していることがほとんどです。
- なお、上記から次のステータスコードを除きます。この SDK ではエラーとして扱いません。
1000
: 正常に切断されています。1001
: 早期の切断はよくあります。1004
: 予約済み。1005
: 予約済み。1006
: 予約済み。1015
: 予約済み。
^1: WebSocket
はランタイムがグローバル変数に定義しているクラスであったり、ws
SDK のクラスであったりします。
StateTransitionError
継承元: SurrealAggregateError
これは状態遷移中にイベントリスナーの実行に失敗した場合に投げられるエラーです。
.name: "StateTransitionError"
- エラー名です。
.from: number
- 状態遷移開始時の状態です。
.to: number
- 遷移先の状態です。
.fallback: number
- 状態遷移に失敗した場合の代わりの遷移先です。
.to
と同じ値なら、強制的に遷移したことを意味します。
例えば次のような場合にこのエラーは投げられます:
import { Surreal } from "@tai-kun/surrealdb";import { CONNECTING } from "@tai-kun/surrealdb/engine";
await using db = new Surreal();
db.on(CONNECTING, () => { throw new Error("Don't let me connect !!!")});
await db.connect("http://localhost:8000"); // throws ...// StateTransitionError: The transition from `3` to `0` failed, falling back to `3`.// at <stack trace ...> {// cause: [// Error: Don't let me connect !!!// at <stack trace ...>// ],// from: 3,// to: 0,// fallback: 3// }
ConnectionUnavailableError
継承元: SurrealError
これは未接続状態で RPC リクエストを送信しようとした場合に投げられるエラーです。
.name: "ConnectionUnavailableError"
- エラー名です。
ResponseError
継承元: SurrealError
これはレスポンスを PRC レスポンスとして解析できない場合に投げられるエラーです。RpcResponseError
とは異なります。
.name: "ResponseError"
- エラー名です。
CborError
継承元: SurrealError
これは @tai-kun/surrealdb/cbor
が明示的に投げる、CBOR に関連したすべてのエラーが継承するクラスです。これが直接投げられることはありません。
.name: "CborError"
- エラー名です。
CborWellFormednessError
継承元: CborError
これは @tai-kun/surrealdb/cbor
が明示的に投げる、CBOR のデコードに関連したすべてのエラーが継承するクラスです。これが直接投げられることはありません。
RFC8949 の付録 F にある「Well-Formedness Errors and Examples」 を参照してください。
.name: "CborWellFormednessError"
- エラー名です。
CborTooMuchDataError
継承元: CborWellFormednessError
これは消費されなかった入力バイトが残っていることを示しています。
.name: "CborTooMuchDataError"
- エラー名です。
CborTooLittleDataError
継承元: CborWellFormednessError
これは入力バイトが不完全であることを示しています。
.name: "CborTooLittleDataError"
- エラー名です。
CborSyntaxError
継承元: CborWellFormednessError
入力バイトが CBOR のエンコード形式と一致しないことを示しています。
.name: "CborSyntaxError"
- エラー名です。
CborMaxDepthReachedError
継承元: CborError
CBOR のエンコードまたはデコード時に JavaScript オブジェクトの深さが最大値に達した場合に投げられるエラーです。オブジェクトまたは配列に入る度に深さが 1 増加します。
.name: "CborMaxDepthReachedError"
- エラー名です。
.maxDepth: number
- 最大深さです。
CborUnsafeMapKeyError
継承元: CborError
CBOR のエンコードまたはデコード時に安全ではないマップキーが見つかった場合に投げられるエラーです。
.name: "CborUnsafeMapKeyError"
- エラー名です。
.key: unknown
- 安全ではないと判定されたマップキーです。