UNPKG

nuxt-surrealdb

Version:

A Nuxt module aimed to simplify the use of SurrealDB

38 lines (37 loc) 2.85 kB
/** * The following is a custom implementation of Nuxt's useFetch composable. * It is meant to be used in a Nuxt project when connecting to third-party APIs, * while using a custom $fetch loaded as a Nuxt plugin. * * Source: * https://gist.github.com/sandros94/9105defd5f02d2614372da6d53023822 */ import type { FetchError, FetchOptions, FetchRequest as _FetchRequest } from 'ofetch'; import type { Ref, WatchSource } from 'vue'; import type { AsyncData, AsyncDataOptions } from '#app'; import type { Overrides } from '#surrealdb/types/index'; type MultiWatchSources = (WatchSource<unknown> | object)[]; export type PickFrom<T, K extends Array<string>> = T extends Array<any> ? T : T extends Record<string, any> ? keyof T extends K[number] ? T : K[number] extends never ? T : Pick<T, K[number]> : T; export type KeysOf<T> = Array<T extends T ? keyof T extends string ? keyof T : never : never>; type FetchRequest = Exclude<_FetchRequest, string> | (string & {}); type _AvailableMethods = 'get' | 'post' | 'patch' | 'delete' | 'search'; type AvailableMethods = _AvailableMethods | Uppercase<_AvailableMethods>; export type ComputedOptions<T extends Record<string, any>> = { [K in keyof T]: T[K] extends Function ? T[K] : ComputedOptions<T[K]> | Ref<T[K]> | T[K]; }; interface CustomFetchOptions<M extends AvailableMethods = AvailableMethods> extends FetchOptions, Overrides { method?: M; } export interface UseSurrealFetchOptions<ResT, DataT = ResT, DefaultT = undefined, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, M extends AvailableMethods = AvailableMethods> extends Omit<AsyncDataOptions<ResT, DataT, PickKeys, DefaultT>, 'watch'>, ComputedOptions<CustomFetchOptions<M>> { key?: string; $fetch?: typeof globalThis.$fetch; watch?: MultiWatchSources | false; } /** * Fetch data from an API endpoint with an SSR-friendly composable. * @param request The URL to fetch * @param opts extends $surrealFetch options and useAsyncData options */ export declare function useSurrealFetch<ResT = void, DataT = ResT, DefaultT = undefined, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, ErrorT = FetchError, ReqT extends FetchRequest = FetchRequest, Method extends AvailableMethods = AvailableMethods>(request: Ref<ReqT> | ReqT | (() => ReqT), opts?: UseSurrealFetchOptions<ResT, DataT, DefaultT, PickKeys, Method>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, ErrorT | undefined>; export declare function useSurrealFetch<ResT = void, DataT = ResT, DefaultT = DataT, PickKeys extends KeysOf<DataT> = KeysOf<DataT>, ErrorT = FetchError, ReqT extends FetchRequest = FetchRequest, Method extends AvailableMethods = AvailableMethods>(request: Ref<ReqT> | ReqT | (() => ReqT), opts?: UseSurrealFetchOptions<ResT, DataT, DefaultT, PickKeys, Method>): AsyncData<PickFrom<DataT, PickKeys> | DefaultT, ErrorT | undefined>; export {};