nuxt
Version:
70 lines • 3.72 kB
TypeScript
import { ArrayItems, UnionToIntersection } from "../utils.js";
import { UseFetch, UseFetchOptions } from "./fetch.js";
import { AsyncData, AsyncDataMiddleware, AsyncDataOptions, UseAsyncData, _AsyncData } from "./asyncData.js";
import { FetchOptions } from "ofetch";
//#region src/app/composables/addons.d.ts
declare const AddonMarker: unique symbol;
type SerializableValue = string | number | boolean | null | undefined | SerializableValue[] | {
[key: string]: SerializableValue;
};
export type AsyncDataAddonInstance = _AsyncData<unknown, unknown>;
export type AsyncDataAddonSetup<Ext> = (asyncData: AsyncDataAddonInstance) => Ext | void;
interface AddonChains {
middleware: AsyncDataMiddleware<any>[];
}
export type UseAsyncDataAddonOptions<Opts extends Record<string, any> = {}> = Omit<AsyncDataOptions<any, any>, 'transform' | 'middleware'> & AddonChains & Opts;
export type UseFetchAddonOptions<Opts extends Record<string, any> = {}> = Omit<UseFetchOptions<any, any>, 'transform' | 'middleware' | 'onRequest' | 'onRequestError' | 'onResponse' | 'onResponseError'> & AddonChains & {
onRequest: ArrayItems<FetchOptions['onRequest']>[];
onRequestError: ArrayItems<FetchOptions['onRequestError']>[];
onResponse: ArrayItems<FetchOptions['onResponse']>[];
onResponseError: ArrayItems<FetchOptions['onResponseError']>[];
} & Opts;
export interface UseAsyncDataAddon<Opts extends Record<string, any> = {}, Ext = {}> {
setup: (options: UseAsyncDataAddonOptions<Opts>) => AsyncDataAddonSetup<Ext> | void;
/** @internal */
[AddonMarker]?: {
options: Opts;
extension: Ext;
};
}
export interface UseFetchAddon<Opts extends Record<string, any> = {}, Ext = {}> {
/** Segment added to the auto-generated key, derived from custom options that affect the response. */
key?: (options: UseFetchAddonOptions<Opts>) => SerializableValue;
setup: (options: UseFetchAddonOptions<Opts>) => AsyncDataAddonSetup<Ext> | void;
/** @internal */
[AddonMarker]?: {
options: Opts;
extension: Ext;
};
}
/**
* Define a reusable addon for composables created with `createUseFetch`.
* @since 4.6.0
*/
export declare function defineUseFetchAddon<Opts extends Record<string, any> = {}, Ext = {}>(addon: UseFetchAddon<Opts, Ext>): UseFetchAddon<Opts, Ext>;
/**
* Define a reusable addon for composables created with `createUseAsyncData`.
* @since 4.6.0
*/
export declare function defineUseAsyncDataAddon<Opts extends Record<string, any> = {}, Ext = {}>(addon: UseAsyncDataAddon<Opts, Ext>): UseAsyncDataAddon<Opts, Ext>;
export type MergedAddonsOptions<Addons extends ReadonlyArray<any>> = [Addons[number]] extends [never] ? {} : UnionToIntersection<Addons[number] extends {
[AddonMarker]?: {
options: infer O;
extension: any;
};
} ? O : never>;
type AddonsExtensions<Addons extends ReadonlyArray<any>> = UnionToIntersection<Addons[number] extends {
[AddonMarker]?: {
options: any;
extension: infer E;
};
} ? E : never>;
export type MergedAddonsExtensions<Addons extends ReadonlyArray<any>> = [keyof AddonsExtensions<Addons>] extends [never] ? {} : Omit<AddonsExtensions<Addons>, PromiseMethod>;
declare const PROMISE_METHODS: readonly ["then", "catch", "finally"];
type PromiseMethod = typeof PROMISE_METHODS[number];
/** @internal */
export declare function applyUseFetchAddons(create: (options: Record<string, any>) => (...args: any[]) => AsyncData<unknown, unknown>, { addons, ...factoryOptions }: Record<string, any>): UseFetch;
/** @internal */
export declare function applyUseAsyncDataAddons(create: (options: Record<string, any>) => (...args: any[]) => AsyncData<unknown, unknown>, { addons, ...factoryOptions }: Record<string, any>): UseAsyncData;
//#endregion
export {};