UNPKG

nuxt-surrealdb

Version:

A Nuxt module aimed to simplify the use of SurrealDB

45 lines (44 loc) 1.57 kB
import { Surreal, Features } from "surrealdb"; import { createNodeEngines } from "@surrealdb/node"; import { useRuntimeConfig } from "#imports"; import { surrealHooks } from "./surreal-hooks.js"; import { H3_CONTEXT_SURREAL_LOCAL } from "../internal.js"; let client = null; export async function useSurrealLocal(event) { if (event && event.context[H3_CONTEXT_SURREAL_LOCAL] && event.context[H3_CONTEXT_SURREAL_LOCAL].isValid) { return event.context[H3_CONTEXT_SURREAL_LOCAL]; } const { surrealdb: { local: { nodeEngine, ...config } = {} } = {} } = useRuntimeConfig(event); if (!client) { client = new Surreal({ engines: createNodeEngines(nodeEngine) }); if (!client.isConnected) { await surrealHooks.callHookParallel("surrealdb:local:connecting", { client, config }); if (config.endpoint && config.autoConnect !== false) { const isConnected = await client.connect(config.endpoint, config.connectOptions); if (isConnected) { await surrealHooks.callHookParallel("surrealdb:local:connected", { client }); } } } } if (!event) { return client; } if (!client.isFeatureSupported(Features.Sessions)) { new Error("[nuxt-surrealdb] Sessions are not supported by this SurrealDB Node engine."); return client; } const session = await client[config.session === "fork" ? "forkSession" : "newSession"](); event.context.surrealdb = session; await surrealHooks.callHookParallel("surrealdb:local:session:init", { session, event }); return session; }