nuxt-surrealdb
Version:
A Nuxt module aimed to simplify the use of SurrealDB
38 lines (37 loc) • 2.85 kB
TypeScript
/**
* 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 {};