UNPKG

nuxt-surrealdb

Version:

A Nuxt module aimed to simplify the use of SurrealDB

56 lines (55 loc) 1.88 kB
import { Surreal, Features, createRemoteEngines } from "surrealdb"; import { defu } from "defu"; import { useRuntimeConfig } from "#imports"; import { surrealHooks } from "./surreal-hooks.js"; import { H3_CONTEXT_SURREAL_CLIENT } from "../internal.js"; let client = null; export async function useSurreal(event) { if (event && event.context[H3_CONTEXT_SURREAL_CLIENT] && event.context[H3_CONTEXT_SURREAL_CLIENT].isValid) { return event.context[H3_CONTEXT_SURREAL_CLIENT]; } const { public: { surrealdb: { local: _pubLocal, memory: _pubMemory, ...pubSurrealdb } = {} }, surrealdb: { local: _srvLocal, memory: _srvMemory, ...srvSurrealdb } = {} } = useRuntimeConfig(event); if (!client) { client = new Surreal({ engines: createRemoteEngines() }); if (!client.isConnected) { const config = defu(srvSurrealdb, pubSurrealdb); await surrealHooks.callHookParallel("surrealdb:connecting", { client, config }); if (config.endpoint && config.autoConnect !== false) { let endpoint = config.endpoint; if (config.preferHttp !== false) { endpoint = endpoint.replace(/^ws/, "http"); } const isConnected = await client.connect(endpoint, config.connectOptions); if (isConnected) { await surrealHooks.callHookParallel("surrealdb:connected", { client }); } } } } if (!event) { return client; } if (!client.isFeatureSupported(Features.Sessions)) { new Error("[nuxt-surrealdb] Sessions are not supported by the connected SurrealDB instance."); return client; } const session = await client[srvSurrealdb.session === "fork" ? "forkSession" : "newSession"](); event.context.surrealdb = session; await surrealHooks.callHookParallel("surrealdb:session:init", { session, event }); return session; }