UNPKG

nuxt-surrealdb

Version:

A Nuxt module aimed to simplify the use of SurrealDB

109 lines (108 loc) 3.86 kB
import type { PublicRuntimeConfig, RuntimeConfig } from '@nuxt/schema'; import type { createWasmWorkerEngines } from '@surrealdb/wasm'; import type { createNodeEngines } from '@surrealdb/node'; import type { ConnectOptions, Surreal } from 'surrealdb'; export type { Surreal, SurrealSession } from 'surrealdb'; export type MaybePromise<T> = T | Promise<T>; export type ParseType<T> = { [K in keyof T]: T[K]; } & {}; export interface SurrealDatabaseOptions { endpoint?: string; connectOptions?: ConnectOptions; } export type SurrealClientRuntimeConfig<T extends SurrealDatabaseOptions = SurrealDatabaseOptions> = ParseType<Omit<PublicRuntimeConfig['surrealdb'], 'memory' | 'local' | 'wasmEngine'> & T>; export type SurrealServerRuntimeConfig<T extends SurrealDatabaseOptions = SurrealDatabaseOptions> = ParseType<SurrealClientRuntimeConfig<T> & Omit<RuntimeConfig['surrealdb'], 'memory' | 'local' | 'nodeEngine'> & T>; export type SurrealWasmEngineOptions = NonNullable<Parameters<typeof createWasmWorkerEngines>[0]>; export type SurrealNodeEngineOptions = NonNullable<Parameters<typeof createNodeEngines>[0]>; export interface SurrealClientOptions extends SurrealDatabaseOptions { autoConnect?: boolean; } export interface SurrealServerOptions extends SurrealDatabaseOptions { /** * When passing the H3Event, whether to create a new session or fork from the default session. * * @default 'new' */ session?: 'new' | 'fork'; autoConnect?: boolean; } export interface ModuleOptions { autoImport?: boolean; autoImportExpressions?: boolean; disableWasmEngine?: boolean; disableNodeEngine?: boolean; client?: SurrealClientOptions & { /** * When establishing a connection, prefer using the HTTP protocol over WebSockets. * * @default true in SSR contexts, false in CSR contexts */ preferHttp?: boolean; memory?: Omit<SurrealClientOptions, 'endpoint'> & { wasmEngine?: SurrealWasmEngineOptions; }; local?: SurrealClientOptions & { wasmEngine?: SurrealWasmEngineOptions; }; }; server?: SurrealServerOptions & { /** * When establishing a connection, prefer using the HTTP protocol over WebSockets. * * @default true */ preferHttp?: boolean; memory?: Omit<SurrealServerOptions, 'endpoint'> & { nodeEngine?: SurrealNodeEngineOptions; }; local?: SurrealServerOptions & { nodeEngine?: SurrealNodeEngineOptions; }; }; } declare module '@nuxt/schema' { interface PublicRuntimeConfig { surrealdb: ModuleOptions['client']; } interface RuntimeConfig { surrealdb: ModuleOptions['server']; } } export interface SurrealHooks<T extends SurrealClientOptions | SurrealServerOptions> { 'surrealdb:connecting': (args: { client: Surreal; config: T; }) => MaybePromise<void>; 'surrealdb:connected': (args: { client: Surreal; }) => MaybePromise<void>; 'surrealdb:memory:connecting': (args: { client: Surreal; config: T; }) => MaybePromise<void>; 'surrealdb:memory:connected': (args: { client: Surreal; }) => MaybePromise<void>; 'surrealdb:local:connecting': (args: { client: Surreal; config: T; }) => MaybePromise<void>; 'surrealdb:local:connected': (args: { client: Surreal; }) => MaybePromise<void>; } declare module '#app' { interface NuxtApp { $surreal: Surreal; $surrealLocal: Surreal | null; $surrealMemory: Surreal | null; } } declare module 'vue' { interface ComponentCustomProperties { $surreal: Surreal; $surrealLocal: Surreal | null; $surrealMemory: Surreal | null; } }