nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
45 lines (44 loc) • 1.55 kB
JavaScript
import { Surreal, Features } from "surrealdb";
import { createNodeEngines } from "@surrealdb/node";
import { useRuntimeConfig } from "#imports";
import { surrealHooks } from "./surreal-hooks.js";
import {
H3_CONTEXT_SURREAL_MEMORY
} from "../internal.js";
let client = null;
export async function useSurrealMemory(event) {
if (event && event.context[H3_CONTEXT_SURREAL_MEMORY] && event.context[H3_CONTEXT_SURREAL_MEMORY].isValid) {
return event.context[H3_CONTEXT_SURREAL_MEMORY];
}
const { surrealdb: {
memory: {
nodeEngine,
...config
} = {}
} = {} } = useRuntimeConfig(event);
if (!client) {
client = new Surreal({
engines: createNodeEngines(nodeEngine)
});
if (!client.isConnected) {
await surrealHooks.callHookParallel("surrealdb:memory:connecting", { client, config });
if (config.autoConnect !== false) {
const isConnected = await client.connect("mem://", config.connectOptions);
if (isConnected) {
await surrealHooks.callHookParallel("surrealdb:memory: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:memory:session:init", { session, event });
return session;
}