@reactive-vscode/vueuse
Version:
Useful VueUse utilities for VSCode extension development
1,448 lines (1,213 loc) • 98.7 kB
TypeScript
import { ComputedGetter } from '@reactive-vscode/reactivity';
import { ComputedRef } from '@reactive-vscode/reactivity';
import { MaybeRef } from '@reactive-vscode/reactivity';
import { MaybeRefOrGetter } from '@reactive-vscode/reactivity';
import { Ref } from '@reactive-vscode/reactivity';
import { ShallowRef } from '@reactive-vscode/reactivity';
import { ShallowUnwrapRef as ShallowUnwrapRef_2 } from '@reactive-vscode/reactivity';
import { ToRef } from '@reactive-vscode/reactivity';
import { ToRefs } from '@reactive-vscode/reactivity';
import { toValue as toValue_2 } from '@reactive-vscode/reactivity';
import { UnwrapNestedRefs } from '@reactive-vscode/reactivity';
import { UnwrapRef } from '@reactive-vscode/reactivity';
import * as vue from '@reactive-vscode/reactivity';
import { WatchCallback } from '@reactive-vscode/reactivity';
import { WatchOptions } from '@reactive-vscode/reactivity';
import { WatchSource } from '@reactive-vscode/reactivity';
import { WatchStopHandle } from '@reactive-vscode/reactivity';
import { WritableComputedOptions } from '@reactive-vscode/reactivity';
import { WritableComputedRef } from '@reactive-vscode/reactivity';
export declare interface AfterFetchContext<T = any> {
response: Response;
data: T | null;
context: BeforeFetchContext;
execute: (throwOnFailed?: boolean) => Promise<any>;
}
/**
* Any function
*/
export declare type AnyFn = (...args: any[]) => any;
export declare type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
export declare type Arrayable<T> = T[] | T;
export declare const assert: (condition: boolean, ...infos: any[]) => void;
/**
* Handle overlapping async evaluations.
*
* @param cancelCallback The provided callback is invoked when a re-evaluation of the computed value is triggered before the previous one finished
*/
export declare type AsyncComputedOnCancel = (cancelCallback: Fn) => void;
export declare interface AsyncComputedOptions {
/**
* Should value be evaluated lazily
*
* @default false
*/
lazy?: boolean;
/**
* Ref passed to receive the updated of async evaluation
*/
evaluating?: Ref<boolean>;
/**
* Use shallowRef
*
* @default true
*/
shallow?: boolean;
/**
* Callback when error is caught.
*/
onError?: (e: unknown) => void;
}
export declare type Awaitable<T> = Promise<T> | T;
/**
* Compatible with versions below TypeScript 4.5 Awaited
*/
declare type Awaited_2<T> = T extends null | undefined ? T : T extends object & {
then: (onfulfilled: infer F, ...args: infer _) => any;
} ? F extends ((value: infer V, ...args: infer _) => any) ? Awaited_2<V> : never : T;
export { Awaited_2 as Awaited }
export declare interface BeforeFetchContext {
/**
* The computed url of the current request
*/
url: string;
/**
* The request options of the current request
*/
options: RequestInit;
/**
* Cancels the current request
*/
cancel: Fn;
}
declare interface BrowserLocationState {
readonly trigger: string;
readonly state?: any;
readonly length?: number;
readonly origin?: string;
hash?: string;
host?: string;
hostname?: string;
href?: string;
pathname?: string;
port?: string;
protocol?: string;
search?: string;
}
export declare const bypassFilter: EventFilter;
/**
* The source code for this function was inspired by vue-apollo's `useEventHook` util
* https://github.com/vuejs/vue-apollo/blob/v4/packages/vue-apollo-composable/src/util/useEventHook.ts
*/
declare type Callback<T> = IsAny<T> extends true ? (...param: any) => void : ([
T
] extends [void] ? (...param: unknown[]) => void : [T] extends [any[]] ? (...param: T) => void : (...param: [T, ...unknown[]]) => void);
export declare const camelize: (str: string) => string;
export declare const clamp: (n: number, min: number, max: number) => number;
export declare type CloneFn<F, T = F> = (x: F) => T;
export declare function cloneFnJSON<T>(source: T): T;
declare type Combination = 'overwrite' | 'chain';
/**
* Create an asynchronous computed dependency.
*
* @see https://vueuse.org/computedAsync
* @param evaluationCallback The promise-returning callback which generates the computed value
* @param initialState The initial state, used until the first evaluation finishes
* @param optionsOrRef Additional options or a ref passed to receive the updates of the async evaluation
*/
declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState: T, optionsOrRef?: Ref<boolean> | AsyncComputedOptions): Ref<T>;
declare function computedAsync<T>(evaluationCallback: (onCancel: AsyncComputedOnCancel) => T | Promise<T>, initialState?: undefined, optionsOrRef?: Ref<boolean> | AsyncComputedOptions): Ref<T | undefined>;
export { computedAsync as asyncComputed }
export { computedAsync }
declare type ComputedInjectGetter<T, K> = (source: T | undefined, ctx?: any) => K;
declare type ComputedInjectGetterWithDefault<T, K> = (source: T, ctx?: any) => K;
declare type ComputedInjectSetter<T> = (v: T) => void;
export declare interface ComputedRefWithControl<T> extends ComputedRef<T>, ComputedWithControlRefExtra {
}
declare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: ComputedGetter<T>): ComputedRefWithControl<T>;
declare function computedWithControl<T, S>(source: WatchSource<S> | WatchSource<S>[], fn: WritableComputedOptions<T>): WritableComputedRefWithControl<T>;
export { computedWithControl }
export { computedWithControl as controlledComputed }
export declare interface ComputedWithControlRefExtra {
/**
* Force update the computed value.
*/
trigger: () => void;
}
declare interface ConfigurableDeepRefs<D extends boolean> {
/**
* Return deep refs instead of shallow refs.
*
* @default true - will be changed to `false` by default in the next major
*/
deepRefs?: D;
}
export declare interface ConfigurableEventFilter {
/**
* Filter for if events should to be received.
*
* @see https://vueuse.org/guide/config.html#event-filters
*/
eventFilter?: EventFilter;
}
export declare interface ConfigurableFlush {
/**
* Timing for monitoring changes, refer to WatchOptions for more details
*
* @default 'pre'
*/
flush?: WatchOptions['flush'];
}
export declare interface ConfigurableFlushSync {
/**
* Timing for monitoring changes, refer to WatchOptions for more details.
* Unlike `watch()`, the default is set to `sync`
*
* @default 'sync'
*/
flush?: WatchOptions['flush'];
}
declare interface ConfigurableNavigator {
navigator?: Navigator;
}
declare interface ConfigurableWindow {
window?: Window;
}
export declare function containsProp(obj: object, ...props: string[]): boolean;
/**
* Alias for `refWithControl`
*/
export declare const controlledRef: typeof refWithControl;
export declare interface ControlledRefOptions<T> {
/**
* Callback function before the ref changing.
*
* Returning `false` to dismiss the change.
*/
onBeforeChange?: (value: T, oldValue: T) => void | boolean;
/**
* Callback function after the ref changed
*
* This happens synchronously, with less overhead compare to `watch`
*/
onChanged?: (value: T, oldValue: T) => void;
}
/**
* Utility for creating event hooks
*
* @see https://vueuse.org/createEventHook
*/
export declare function createEventHook<T = any>(): EventHook<T>;
export declare function createFetch(config?: CreateFetchOptions): typeof useFetch;
export declare interface CreateFetchOptions {
/**
* The base URL that will be prefixed to all urls unless urls are absolute
*/
baseUrl?: MaybeRefOrGetter<string>;
/**
* Determine the inherit behavior for beforeFetch, afterFetch, onFetchError
* @default 'chain'
*/
combination?: Combination;
/**
* Default Options for the useFetch function
*/
options?: UseFetchOptions;
/**
* Options for the fetch request
*/
fetchOptions?: RequestInit;
}
/* Excluded from this release type: createFilterWrapper */
/**
* Keep states in the global scope to be reusable across Vue instances.
*
* @see https://vueuse.org/createGlobalState
* @param stateFactory A factory function to create the state
*/
export declare function createGlobalState<Fn extends AnyFn>(stateFactory: Fn): Fn;
/**
* Make a composable function usable with multiple Vue instances.
*
* @see https://vueuse.org/createSharedComposable
*/
export declare function createSharedComposable<Fn extends AnyFn>(composable: Fn): Fn;
/**
* Create singleton promise function
*
* @example
* ```
* const promise = createSingletonPromise(async () => { ... })
*
* await promise()
* await promise() // all of them will be bind to a single promise instance
* await promise() // and be resolved together
* ```
*/
export declare function createSingletonPromise<T>(fn: () => Promise<T>): SingletonPromiseReturn<T>;
/**
* Make a plain function accepting ref and raw values as arguments.
* Returns the same value the unconverted function returns, with proper typing.
*/
export declare function createUnrefFn<T extends Function>(fn: T): UnrefFn<T>;
export declare type DateLike = Date | number | string | undefined;
/**
* Create an EventFilter that debounce the events
*/
export declare function debounceFilter(ms: MaybeRefOrGetter<number>, options?: DebounceFilterOptions): EventFilter<any[], any, AnyFn>;
export declare interface DebounceFilterOptions {
/**
* The maximum time allowed to be delayed before it's invoked.
* In milliseconds.
*/
maxWait?: MaybeRefOrGetter<number>;
/**
* Whether to reject the last call if it's been cancel.
*
* @default false
*/
rejectOnCancel?: boolean;
}
/**
* Make all the nested attributes of an object or array to MaybeRef<T>
*
* Good for accepting options that will be wrapped with `reactive` or `ref`
*
* ```ts
* UnwrapRef<DeepMaybeRef<T>> === T
* ```
*/
export declare type DeepMaybeRef<T> = T extends Ref<infer V> ? MaybeRef<V> : T extends Array<any> | object ? {
[K in keyof T]: DeepMaybeRef<T[K]>;
} : MaybeRef<T>;
declare type Direction = 'ltr' | 'rtl' | 'both';
/**
* Infers the element type of an array
*/
export declare type ElementOf<T> = T extends (infer E)[] ? E : never;
/**
* A = B
*/
declare type Equal<A, B> = [A] extends [B] ? ([B] extends [A] ? true : false) : false;
declare interface EqualType<D extends Direction, L, R, O extends keyof Transform<L, R> = D extends 'both' ? 'ltr' | 'rtl' : D> {
transform?: SpecificFieldPartial<Pick<Transform<L, R>, O>, O>;
}
export declare type EventBusEvents<T, P = any> = Set<EventBusListener<T, P>>;
export declare type EventBusIdentifier<T = unknown> = EventBusKey<T> | string | number;
export declare interface EventBusKey<T> extends Symbol {
}
export declare type EventBusListener<T = unknown, P = any> = (event: T, payload?: P) => void;
export declare type EventFilter<Args extends any[] = any[], This = any, Invoke extends AnyFn = AnyFn> = (invoke: Invoke, options: FunctionWrapperOptions<Args, This>) => ReturnType<Invoke> | Promisify<ReturnType<Invoke>>;
export declare interface EventHook<T = any> {
on: EventHookOn<T>;
off: EventHookOff<T>;
trigger: EventHookTrigger<T>;
clear: () => void;
}
export declare type EventHookOff<T = any> = (fn: Callback<T>) => void;
export declare type EventHookOn<T = any> = (fn: Callback<T>) => {
off: () => void;
};
export declare type EventHookTrigger<T = any> = (...param: Parameters<Callback<T>>) => Promise<unknown[]>;
/**
* Overload 1: Unwrap set to false
*/
export declare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions<false>>(ref: R, extend: Extend, options?: Options): ShallowUnwrapRef_2<Extend> & R;
/**
* Overload 2: Unwrap unset or set to true
*/
export declare function extendRef<R extends Ref<any>, Extend extends object, Options extends ExtendRefOptions>(ref: R, extend: Extend, options?: Options): Extend & R;
export declare interface ExtendRefOptions<Unwrap extends boolean = boolean> {
/**
* Is the extends properties enumerable
*
* @default false
*/
enumerable?: boolean;
/**
* Unwrap for Ref properties
*
* @default true
*/
unwrap?: Unwrap;
}
declare type Falsy = false | void | null | undefined | 0 | 0n | '';
/**
* Void function
*/
export declare type Fn = () => void;
export declare function formatDate(date: Date, formatStr: string, options?: UseDateFormatOptions): string;
export declare function formatTimeAgo<UnitNames extends string = UseTimeAgoUnitNamesDefault>(from: Date, options?: FormatTimeAgoOptions<UnitNames>, now?: Date | number): string;
export declare interface FormatTimeAgoOptions<UnitNames extends string = UseTimeAgoUnitNamesDefault> {
/**
* Maximum unit (of diff in milliseconds) to display the full date instead of relative
*
* @default undefined
*/
max?: UnitNames | number;
/**
* Formatter for full date
*/
fullDateFormatter?: (date: Date) => string;
/**
* Messages for formatting the string
*/
messages?: UseTimeAgoMessages<UnitNames>;
/**
* Minimum display time unit (default is minute)
*
* @default false
*/
showSecond?: boolean;
/**
* Rounding method to apply.
*
* @default 'round'
*/
rounding?: 'round' | 'ceil' | 'floor' | number;
/**
* Custom units
*/
units?: UseTimeAgoUnit<UnitNames>[];
}
export declare type FunctionArgs<Args extends any[] = any[], Return = void> = (...args: Args) => Return;
export declare interface FunctionWrapperOptions<Args extends any[] = any[], This = any> {
fn: FunctionArgs<Args, This>;
args: Args;
thisArg: This;
}
export declare interface GeneralEventListener<E = Event> {
(evt: E): void;
}
/**
* Shorthand for accessing `ref.value`
*/
export declare function get<T>(ref: MaybeRef<T>): T;
export declare function get<T, K extends keyof T>(ref: MaybeRef<T>, key: K): T[K];
export declare function getLifeCycleTarget(target?: any): any;
export declare const hasOwn: <T extends object, K extends keyof T>(val: T, key: K) => key is K;
export declare const hyphenate: (str: string) => string;
export declare function identity<T>(arg: T): T;
export declare type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
export declare type IgnoredUpdater = (updater: () => void) => void;
/**
* A ⊆ B
*/
declare type IncludeButNotEqual<A, B> = Equal<A, B> extends true ? false : A extends B ? true : false;
/**
* Increase string a value with unit
*
* @example '2px' + 1 = '3px'
* @example '15em' + (-2) = '13em'
*/
export declare function increaseWithUnit(target: number, delta: number): number;
export declare function increaseWithUnit(target: string, delta: number): string;
export declare function increaseWithUnit(target: string | number, delta: number): string | number;
/**
* A ∩ B ≠ ∅
*/
declare type IntersectButNotEqual<A, B> = Equal<A, B> extends true ? false : A & B extends never ? false : true;
declare type IntersectButNotEqualType<D extends Direction, L, R> = D extends 'both' ? {
transform: Transform<L, R>;
} : D extends Exclude<Direction, 'both'> ? {
transform: Pick<Transform<L, R>, D>;
} : never;
export declare function invoke<T>(fn: () => T): T;
/**
* will return `true` if `T` is `any`, or `false` otherwise
*/
export declare type IsAny<T> = IfAny<T, true, false>;
export declare const isDef: <T = any>(val?: T) => val is T;
export declare function isDefined<T>(v: ComputedRef<T>): v is ComputedRef<Exclude<T, null | undefined>>;
export declare function isDefined<T>(v: Ref<T>): v is Ref<Exclude<T, null | undefined>>;
export declare function isDefined<T>(v: T): v is Exclude<T, null | undefined>;
export declare const isObject: (val: any) => val is object;
export declare function makeDestructurable<T extends Record<string, unknown>, A extends readonly any[]>(obj: T, arr: A): T & A;
export declare type MapOldSources<T, Immediate> = {
[K in keyof T]: T[K] extends WatchSource<infer V> ? Immediate extends true ? V | undefined : V : never;
};
declare type MapQueueTask<T extends any[]> = {
[K in keyof T]: UseAsyncQueueTask<T[K]>;
};
export declare type MapSources<T> = {
[K in keyof T]: T[K] extends WatchSource<infer V> ? V : never;
};
export declare type MultiWatchSources = (WatchSource<unknown> | object)[];
export declare type Mutable<T> = {
-readonly [P in keyof T]: T[P];
};
export declare const noop: () => void;
export declare function normalizeDate(date: DateLike): Date;
/**
* A ∩ B = ∅
*/
declare type NotIntersect<A, B> = Equal<A, B> extends true ? false : A & B extends never ? true : false;
declare type NotIntersectType<D extends Direction, L, R> = IntersectButNotEqualType<D, L, R>;
export declare const notNullish: <T = any>(val?: T | null | undefined) => val is T;
export declare const now: () => number;
export declare function objectEntries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]>;
/**
* Create a new subset object by omit giving keys
*/
export declare function objectOmit<O extends object, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Omit<O, T>;
/**
* Create a new subset object by giving keys
*/
export declare function objectPick<O extends object, T extends keyof O>(obj: O, keys: T[], omitUndefined?: boolean): Pick<O, T>;
declare type OnCleanup = (cleanupFn: () => void) => void;
export declare interface OnFetchErrorContext<T = any, E = any> {
error: E;
data: T | null;
response: Response | null;
context: BeforeFetchContext;
execute: (throwOnFailed?: boolean) => Promise<any>;
}
export declare interface Pausable {
/**
* A ref indicate whether a pausable instance is active
*/
isActive: Readonly<ShallowRef<boolean>>;
/**
* Temporary pause the effect from executing
*/
pause: Fn;
/**
* Resume the effects
*/
resume: Fn;
}
/**
* EventFilter that gives extra controls to pause and resume the filter
*
* @param extendFilter Extra filter to apply when the PausableFilter is active, default to none
* @param options Options to configure the filter
*/
export declare function pausableFilter(extendFilter?: EventFilter, options?: PausableFilterOptions): Pausable & {
eventFilter: EventFilter;
};
declare interface PausableFilterOptions {
/**
* The initial state
*
* @default 'active'
*/
initialState?: 'active' | 'paused';
}
declare type PostMessage = typeof Worker.prototype['postMessage'];
export declare function promiseTimeout(ms: number, throwOnTimeout?: boolean, reason?: string): Promise<void>;
export declare type Promisify<T> = Promise<Awaited_2<T>>;
export declare type PromisifyFn<T extends AnyFn> = (...args: ArgumentsType<T>) => Promisify<ReturnType<T>>;
export declare const rand: (min: number, max: number) => number;
export declare type Reactified<T, Computed extends boolean> = T extends (...args: infer A) => infer R ? (...args: {
[K in keyof A]: Computed extends true ? MaybeRefOrGetter<A[K]> : MaybeRef<A[K]>;
}) => ComputedRef<R> : never;
/**
* Converts plain function into a reactive function.
* The converted function accepts refs as it's arguments
* and returns a ComputedRef, with proper typing.
*
* @param fn - Source function
*/
declare function reactify<T extends Function, K extends boolean = true>(fn: T, options?: ReactifyOptions<K>): Reactified<T, K>;
export { reactify as createReactiveFn }
export { reactify }
export declare type ReactifyNested<T, Keys extends keyof T = keyof T, S extends boolean = true> = {
[K in Keys]: T[K] extends AnyFn ? Reactified<T[K], S> : T[K];
};
/**
* Apply `reactify` to an object
*/
export declare function reactifyObject<T extends object, Keys extends keyof T>(obj: T, keys?: (keyof T)[]): ReactifyNested<T, Keys, true>;
export declare function reactifyObject<T extends object, S extends boolean = true>(obj: T, options?: ReactifyObjectOptions<S>): ReactifyNested<T, keyof T, S>;
export declare interface ReactifyObjectOptions<T extends boolean> extends ReactifyOptions<T> {
/**
* Includes names from Object.getOwnPropertyNames
*
* @default true
*/
includeOwnProperties?: boolean;
}
export declare interface ReactifyOptions<T extends boolean> {
/**
* Accept passing a function as a reactive getter
*
* @default true
*/
computedGetter?: T;
}
/**
* Computed reactive object.
*/
export declare function reactiveComputed<T extends object>(fn: ComputedGetter<T>): UnwrapNestedRefs<T>;
export declare function reactiveOmit<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): Omit<T, K>;
export declare function reactiveOmit<T extends object>(obj: T, predicate: ReactiveOmitPredicate<T>): Partial<T>;
export declare type ReactiveOmitPredicate<T> = (value: T[keyof T], key: keyof T) => boolean;
export declare function reactivePick<T extends object, K extends keyof T>(obj: T, ...keys: (K | K[])[]): {
[S in K]: UnwrapRef<T[S]>;
};
export declare function reactivePick<T extends object>(obj: T, predicate: ReactivePickPredicate<T>): {
[S in keyof T]?: UnwrapRef<T[S]>;
};
export declare type ReactivePickPredicate<T> = (value: T[keyof T], key: keyof T) => boolean;
/**
* Maybe it's a computed ref, or a readonly value, or a getter function
*/
export declare type ReadonlyRefOrGetter<T> = ComputedRef<T> | (() => T);
/**
* Create a ref which will be reset to the default value after some time.
*
* @see https://vueuse.org/refAutoReset
* @param defaultValue The value which will be set.
* @param afterMs A zero-or-greater delay in milliseconds.
*/
declare function refAutoReset<T>(defaultValue: MaybeRefOrGetter<T>, afterMs?: MaybeRefOrGetter<number>): Ref<T>;
export { refAutoReset as autoResetRef }
export { refAutoReset }
/**
* Debounce updates of a ref.
*
* @return A new debounced ref.
*/
declare function refDebounced<T>(value: Ref<T>, ms?: MaybeRefOrGetter<number>, options?: DebounceFilterOptions): Readonly<Ref<T>>;
export { refDebounced as debouncedRef }
export { refDebounced }
export { refDebounced as useDebounce }
/**
* Apply default value to a ref.
*/
export declare function refDefault<T>(source: Ref<T | undefined | null>, defaultValue: T): Ref<T>;
/**
* Throttle execution of a function. Especially useful for rate limiting
* execution of handlers on events like resize and scroll.
*
* @param value Ref value to be watched with throttle effect
* @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
* @param [trailing] if true, update the value again after the delay time is up
* @param [leading] if true, update the value on the leading edge of the ms timeout
*/
declare function refThrottled<T>(value: Ref<T>, delay?: number, trailing?: boolean, leading?: boolean): Ref<T, T>;
export { refThrottled }
export { refThrottled as throttledRef }
export { refThrottled as useThrottle }
/**
* Fine-grained controls over ref and its reactivity.
*/
export declare function refWithControl<T>(initial: T, options?: ControlledRefOptions<T>): vue.ShallowUnwrapRef<{
get: (tracking?: boolean) => T;
set: (value: T, triggering?: boolean) => void;
untrackedGet: () => T;
silentSet: (v: T) => void;
peek: () => T;
lay: (v: T) => void;
}> & vue.Ref<T, T>;
/**
* A ref that allow to set null or undefined
*/
export declare type RemovableRef<T> = Omit<Ref<T>, 'value'> & {
get value(): T;
set value(value: T | null | undefined);
};
/**
* @deprecated use `toRef` instead
*/
export declare const resolveRef: typeof toRef;
/**
* @deprecated use `toValue` instead
*/
export declare const resolveUnref: typeof toValue_2;
export declare interface Serializer<T> {
read: (raw: string) => T;
write: (value: T) => string;
}
export declare interface SerializerAsync<T> {
read: (raw: string) => Awaitable<T>;
write: (value: T) => Awaitable<string>;
}
export declare function set<T>(ref: Ref<T>, value: T): void;
export declare function set<O extends object, K extends keyof O>(target: O, key: K, value: O[K]): void;
declare type ShallowOrDeepRef<T = any, D extends boolean = false> = D extends true ? Ref<T> : ShallowRef<T>;
export declare type ShallowUnwrapRef<T> = T extends Ref<infer P> ? P : T;
export declare interface SingletonPromiseReturn<T> {
(): Promise<T>;
/**
* Reset current staled promise.
* await it to have proper shutdown.
*/
reset: () => Promise<void>;
}
declare type SpecificFieldPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;
export declare interface Stoppable<StartFnArgs extends any[] = any[]> {
/**
* A ref indicate whether a stoppable instance is executing
*/
isPending: Readonly<Ref<boolean>>;
/**
* Stop the effect from executing
*/
stop: Fn;
/**
* Start the effects
*/
start: (...args: StartFnArgs) => void;
}
declare type StrictIncludeMap<IncludeType extends 'LR' | 'RL', D extends Exclude<Direction, 'both'>, L, R> = (Equal<[IncludeType, D], ['LR', 'ltr']> & Equal<[IncludeType, D], ['RL', 'rtl']>) extends true ? {
transform?: SpecificFieldPartial<Pick<Transform<L, R>, D>, D>;
} : {
transform: Pick<Transform<L, R>, D>;
};
declare type StrictIncludeType<IncludeType extends 'LR' | 'RL', D extends Direction, L, R> = D extends 'both' ? {
transform: SpecificFieldPartial<Transform<L, R>, IncludeType extends 'LR' ? 'ltr' : 'rtl'>;
} : D extends Exclude<Direction, 'both'> ? StrictIncludeMap<IncludeType, D, L, R> : never;
/**
* Two-way refs synchronization.
* From the set theory perspective to restrict the option's type
* Check in the following order:
* 1. L = R
* 2. L ∩ R ≠ ∅
* 3. L ⊆ R
* 4. L ∩ R = ∅
*/
export declare function syncRef<L, R, D extends Direction = 'both'>(left: Ref<L>, right: Ref<R>, ...[options]: Equal<L, R> extends true ? [options?: SyncRefOptions<L, R, D>] : [options: SyncRefOptions<L, R, D>]): () => void;
export declare type SyncRefOptions<L, R, D extends Direction> = ConfigurableFlushSync & {
/**
* Watch deeply
*
* @default false
*/
deep?: boolean;
/**
* Sync values immediately
*
* @default true
*/
immediate?: boolean;
/**
* Direction of syncing. Value will be redefined if you define syncConvertors
*
* @default 'both'
*/
direction?: D;
} & TransformType<D, L, R>;
/**
* Keep target ref(s) in sync with the source ref
*
* @param source source ref
* @param targets
*/
export declare function syncRefs<T>(source: WatchSource<T>, targets: Ref<T> | Ref<T>[], options?: SyncRefsOptions): vue.WatchHandle;
export declare interface SyncRefsOptions extends ConfigurableFlushSync {
/**
* Watch deeply
*
* @default false
*/
deep?: boolean;
/**
* Sync values immediately
*
* @default true
*/
immediate?: boolean;
}
/**
* Create an EventFilter that throttle the events
*
* @param ms
* @param [trailing]
* @param [leading]
* @param [rejectOnCancel]
*/
export declare function throttleFilter(ms: MaybeRefOrGetter<number>, trailing?: boolean, leading?: boolean, rejectOnCancel?: boolean): EventFilter;
export declare function throttleFilter(options: ThrottleFilterOptions): EventFilter;
export declare interface ThrottleFilterOptions {
/**
* The maximum time allowed to be delayed before it's invoked.
*/
delay: MaybeRefOrGetter<number>;
/**
* Whether to invoke on the trailing edge of the timeout.
*/
trailing?: boolean;
/**
* Whether to invoke on the leading edge of the timeout.
*/
leading?: boolean;
/**
* Whether to reject the last call if it's been cancel.
*/
rejectOnCancel?: boolean;
}
export declare interface ToDataURLOptions extends UseBase64Options {
/**
* MIME type
*/
type?: string | undefined;
/**
* Image quality of jpeg or webp
*/
quality?: any;
}
/**
* Converts ref to reactive.
*
* @see https://vueuse.org/toReactive
* @param objectRef A ref of object
*/
export declare function toReactive<T extends object>(objectRef: MaybeRef<T>): UnwrapNestedRefs<T>;
/**
* Normalize value/ref/getter to `ref` or `computed`.
*/
export declare function toRef<T>(r: () => T): Readonly<Ref<T>>;
export declare function toRef<T>(r: ComputedRef<T>): ComputedRef<T>;
export declare function toRef<T>(r: MaybeRefOrGetter<T>): Ref<T>;
export declare function toRef<T>(r: T): Ref<T>;
export declare function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>;
export declare function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<Exclude<T[K], undefined>>;
/**
* Extended `toRefs` that also accepts refs of an object.
*
* @see https://vueuse.org/toRefs
* @param objectRef A ref or normal object or array.
*/
export declare function toRefs<T extends object>(objectRef: MaybeRef<T>, options?: ToRefsOptions): ToRefs<T>;
export declare interface ToRefsOptions {
/**
* Replace the original ref with a copy on property update.
*
* @default true
*/
replaceRef?: MaybeRefOrGetter<boolean>;
}
/**
* Get the value of value/ref/getter.
*
* @deprecated use `toValue` from `vue` instead
*/
export declare const toValue: typeof toValue_2;
declare interface Transform<L, R> {
ltr: (left: L) => R;
rtl: (right: R) => L;
}
declare type TransformType<D extends Direction, L, R> = Equal<L, R> extends true ? EqualType<D, L, R> : IncludeButNotEqual<L, R> extends true ? StrictIncludeType<'LR', D, L, R> : IncludeButNotEqual<R, L> extends true ? StrictIncludeType<'RL', D, L, R> : IntersectButNotEqual<L, R> extends true ? IntersectButNotEqualType<D, L, R> : NotIntersect<L, R> extends true ? NotIntersectType<D, L, R> : never;
/**
* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing
*
* @param fn
*/
export declare function tryOnScopeDispose(fn: Fn): boolean;
export declare type UnrefFn<T> = T extends (...args: infer A) => infer R ? (...args: {
[K in keyof A]: MaybeRef<A[K]>;
}) => R : never;
/**
* Promised one-time watch for changes
*
* @see https://vueuse.org/until
* @example
* ```
* const { count } = useCounter()
*
* await until(count).toMatch(v => v > 7)
*
* alert('Counter is now larger than 7!')
* ```
*/
export declare function until<T extends unknown[]>(r: WatchSource<T> | MaybeRefOrGetter<T>): UntilArrayInstance<T>;
export declare function until<T>(r: WatchSource<T> | MaybeRefOrGetter<T>): UntilValueInstance<T>;
export declare interface UntilArrayInstance<T> extends UntilBaseInstance<T> {
readonly not: UntilArrayInstance<T>;
toContains: (value: MaybeRefOrGetter<ElementOf<ShallowUnwrapRef<T>>>, options?: UntilToMatchOptions) => Promise<T>;
}
declare interface UntilBaseInstance<T, Not extends boolean = false> {
toMatch: (<U extends T = T>(condition: (v: T) => v is U, options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, U>> : Promise<U>) & ((condition: (v: T) => boolean, options?: UntilToMatchOptions) => Promise<T>);
changed: (options?: UntilToMatchOptions) => Promise<T>;
changedTimes: (n?: number, options?: UntilToMatchOptions) => Promise<T>;
}
export declare interface UntilToMatchOptions {
/**
* Milliseconds timeout for promise to resolve/reject if the when condition does not meet.
* 0 for never timed out
*
* @default 0
*/
timeout?: number;
/**
* Reject the promise when timeout
*
* @default false
*/
throwOnTimeout?: boolean;
/**
* `flush` option for internal watch
*
* @default 'sync'
*/
flush?: WatchOptions['flush'];
/**
* `deep` option for internal watch
*
* @default 'false'
*/
deep?: WatchOptions['deep'];
}
export declare interface UntilValueInstance<T, Not extends boolean = false> extends UntilBaseInstance<T, Not> {
readonly not: UntilValueInstance<T, Not extends true ? false : true>;
toBe: <P = T>(value: MaybeRefOrGetter<P>, options?: UntilToMatchOptions) => Not extends true ? Promise<T> : Promise<P>;
toBeTruthy: (options?: UntilToMatchOptions) => Not extends true ? Promise<T & Falsy> : Promise<Exclude<T, Falsy>>;
toBeNull: (options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, null>> : Promise<null>;
toBeUndefined: (options?: UntilToMatchOptions) => Not extends true ? Promise<Exclude<T, undefined>> : Promise<undefined>;
toBeNaN: (options?: UntilToMatchOptions) => Promise<T>;
}
export declare type UrlParams = Record<string, string[] | string>;
export declare function useArrayDifference<T>(list: MaybeRefOrGetter<T[]>, values: MaybeRefOrGetter<T[]>, key?: keyof T, options?: UseArrayDifferenceOptions): ComputedRef<T[]>;
export declare function useArrayDifference<T>(list: MaybeRefOrGetter<T[]>, values: MaybeRefOrGetter<T[]>, compareFn?: (value: T, othVal: T) => boolean, options?: UseArrayDifferenceOptions): ComputedRef<T[]>;
declare interface UseArrayDifferenceOptions {
/**
* Returns asymmetric difference
*
* @see https://en.wikipedia.org/wiki/Symmetric_difference
* @default false
*/
symmetric?: boolean;
}
/**
* Reactive `Array.every`
*
* @see https://vueuse.org/useArrayEvery
* @param list - the array was called upon.
* @param fn - a function to test each element.
*
* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.
*/
export declare function useArrayEvery<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): ComputedRef<boolean>;
/**
* Reactive `Array.filter`
*
* @see https://vueuse.org/useArrayFilter
* @param list - the array was called upon.
* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.
*
* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.
*/
export declare function useArrayFilter<T, S extends T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => element is S): ComputedRef<S[]>;
export declare function useArrayFilter<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => unknown): ComputedRef<T[]>;
/**
* Reactive `Array.find`
*
* @see https://vueuse.org/useArrayFind
* @param list - the array was called upon.
* @param fn - a function to test each element.
*
* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.
*/
export declare function useArrayFind<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => boolean): ComputedRef<T | undefined>;
/**
* Reactive `Array.findIndex`
*
* @see https://vueuse.org/useArrayFindIndex
* @param list - the array was called upon.
* @param fn - a function to test each element.
*
* @returns the index of the first element in the array that passes the test. Otherwise, "-1".
*/
export declare function useArrayFindIndex<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): ComputedRef<number>;
/**
* Reactive `Array.findLast`
*
* @see https://vueuse.org/useArrayFindLast
* @param list - the array was called upon.
* @param fn - a function to test each element.
*
* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.
*/
export declare function useArrayFindLast<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => boolean): ComputedRef<T | undefined>;
/**
* Reactive `Array.includes`
*
* @see https://vueuse.org/useArrayIncludes
*
* @returns true if the `value` is found in the array. Otherwise, false.
*/
export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, comparator?: UseArrayIncludesComparatorFn<T, V>): ComputedRef<boolean>;
export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, comparator?: keyof T): ComputedRef<boolean>;
export declare function useArrayIncludes<T, V = any>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, value: MaybeRefOrGetter<V>, options?: UseArrayIncludesOptions<T, V>): ComputedRef<boolean>;
export declare type UseArrayIncludesComparatorFn<T, V> = ((element: T, value: V, index: number, array: MaybeRefOrGetter<T>[]) => boolean);
export declare interface UseArrayIncludesOptions<T, V> {
fromIndex?: number;
comparator?: UseArrayIncludesComparatorFn<T, V> | keyof T;
}
/**
* Reactive `Array.join`
*
* @see https://vueuse.org/useArrayJoin
* @param list - the array was called upon.
* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (",").
*
* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.
*/
export declare function useArrayJoin(list: MaybeRefOrGetter<MaybeRefOrGetter<any>[]>, separator?: MaybeRefOrGetter<string>): ComputedRef<string>;
/**
* Reactive `Array.map`
*
* @see https://vueuse.org/useArrayMap
* @param list - the array was called upon.
* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.
*
* @returns a new array with each element being the result of the callback function.
*/
export declare function useArrayMap<T, U = T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: T[]) => U): ComputedRef<U[]>;
/**
* Reactive `Array.reduce`
*
* @see https://vueuse.org/useArrayReduce
* @param list - the array was called upon.
* @param reducer - a "reducer" function.
*
* @returns the value that results from running the "reducer" callback function to completion over the entire array.
*/
export declare function useArrayReduce<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, reducer: UseArrayReducer<T, T, T>): ComputedRef<T>;
/**
* Reactive `Array.reduce`
*
* @see https://vueuse.org/useArrayReduce
* @param list - the array was called upon.
* @param reducer - a "reducer" function.
* @param initialValue - a value to be initialized the first time when the callback is called.
*
* @returns the value that results from running the "reducer" callback function to completion over the entire array.
*/
export declare function useArrayReduce<T, U>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, reducer: UseArrayReducer<U, T, U>, initialValue: MaybeRefOrGetter<U>): ComputedRef<U>;
export declare type UseArrayReducer<PV, CV, R> = (previousValue: PV, currentValue: CV, currentIndex: number) => R;
/**
* Reactive `Array.some`
*
* @see https://vueuse.org/useArraySome
* @param list - the array was called upon.
* @param fn - a function to test each element.
*
* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.
*/
export declare function useArraySome<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, fn: (element: T, index: number, array: MaybeRefOrGetter<T>[]) => unknown): ComputedRef<boolean>;
/**
* reactive unique array
* @see https://vueuse.org/useArrayUnique
* @param list - the array was called upon.
* @param compareFn
* @returns A computed ref that returns a unique array of items.
*/
export declare function useArrayUnique<T>(list: MaybeRefOrGetter<MaybeRefOrGetter<T>[]>, compareFn?: (a: T, b: T, array: T[]) => boolean): ComputedRef<T[]>;
/**
* Asynchronous queue task controller.
*
* @see https://vueuse.org/useAsyncQueue
* @param tasks
* @param options
*/
export declare function useAsyncQueue<T extends any[], S = MapQueueTask<T>>(tasks: S & Array<UseAsyncQueueTask<any>>, options?: UseAsyncQueueOptions): UseAsyncQueueReturn<{
[P in keyof T]: UseAsyncQueueResult<T[P]>;
}>;
export declare interface UseAsyncQueueOptions {
/**
* Interrupt tasks when current task fails.
*
* @default true
*/
interrupt?: boolean;
/**
* Trigger it when the tasks fails.
*
*/
onError?: () => void;
/**
* Trigger it when the tasks ends.
*
*/
onFinished?: () => void;
/**
* A AbortSignal that can be used to abort the task.
*/
signal?: AbortSignal;
}
export declare interface UseAsyncQueueResult<T> {
state: 'aborted' | 'fulfilled' | 'pending' | 'rejected';
data: T | null;
}
export declare interface UseAsyncQueueReturn<T> {
activeIndex: ShallowRef<number>;
result: T;
}
export declare type UseAsyncQueueTask<T> = (...args: any[]) => T | Promise<T>;
/**
* Reactive async state. Will not block your setup function and will trigger changes once
* the promise is ready.
*
* @see https://vueuse.org/useAsyncState
* @param promise The promise / async function to be resolved
* @param initialState The initial state, used until the first evaluation finishes
* @param options
*/
export declare function useAsyncState<Data, Params extends any[] = any[], Shallow extends boolean = true>(promise: Promise<Data> | ((...args: Params) => Promise<Data>), initialState: Data, options?: UseAsyncStateOptions<Shallow, Data>): UseAsyncStateReturn<Data, Params, Shallow>;
export declare interface UseAsyncStateOptions<Shallow extends boolean, D = any> {
/**
* Delay for executing the promise. In milliseconds.
*
* @default 0
*/
delay?: number;
/**
* Execute the promise right after the function is invoked.
* Will apply the delay if any.
*
* When set to false, you will need to execute it manually.
*
* @default true
*/
immediate?: boolean;
/**
* Callback when error is caught.
*/
onError?: (e: unknown) => void;
/**
* Callback when success is caught.
* @param {D} data
*/
onSuccess?: (data: D) => void;
/**
* Sets the state to initialState before executing the promise.
*
* This can be useful when calling the execute function more than once (for
* example, to refresh data). When set to false, the current state remains
* unchanged until the promise resolves.
*
* @default true
*/
resetOnExecute?: boolean;
/**
* Use shallowRef.
*
* @default true
*/
shallow?: Shallow;
/**
*
* An error is thrown when executing the execute function
*
* @default false
*/
throwError?: boolean;
}
export declare type UseAsyncStateReturn<Data, Params extends any[], Shallow extends boolean> = UseAsyncStateReturnBase<Data, Params, Shallow> & PromiseLike<UseAsyncStateReturnBase<Data, Params, Shallow>>;
export declare interface UseAsyncStateReturnBase<Data, Params extends any[], Shallow extends boolean> {
state: Shallow extends true ? Ref<Data> : Ref<UnwrapRef<Data>>;
isReady: Ref<boolean>;
isLoading: Ref<boolean>;
error: Ref<unknown>;
execute: (delay?: number, ...args: Params) => Promise<Data>;
}
export declare function useBase64(target: MaybeRefOrGetter<string | undefined>, options?: UseBase64Options): UseBase64Return;
export declare function useBase64(target: MaybeRefOrGetter<Blob | undefined>, options?: UseBase64Options): UseBase64Return;
export declare function useBase64(target: MaybeRefOrGetter<ArrayBuffer | undefined>, options?: UseBase64Options): UseBase64Return;
export declare function useBase64(target: MaybeRefOrGetter<HTMLCanvasElement | undefined>, options?: ToDataURLOptions): UseBase64Return;
export declare function useBase64(target: MaybeRefOrGetter<HTMLImageElement | undefined>, options?: ToDataURLOptions): UseBase64Return;
export declare function useBase64<T extends Record<string, unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
export declare function useBase64<T extends Map<string, unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
export declare function useBase64<T extends Set<unknown>>(target: MaybeRefOrGetter<T>, options?: UseBase64ObjectOptions<T>): UseBase64Return;
export declare function useBase64<T>(target: MaybeRefOrGetter<T[]>, options?: UseBase64ObjectOptions<T[]>): UseBase64Return;
export declare interface UseBase64ObjectOptions<T> extends UseBase64Options {
serializer?: (v: T) => string;
}
declare interface UseBase64Options {
/**
* Output as Data URL format
*
* @default true
*/
dataUrl?: boolean;
}
export declare interface UseBase64Return {
base64: ShallowRef<string>;
promise: ShallowRef<Promise<string>>;
execute: () => Promise<string>;
}
/**
* Reactive BroadcastChannel
*
* @see https://vueuse.org/useBroadcastChannel
* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel
* @param options
*
*/
export declare function useBroadcastChannel<D, P>(options: UseBroadcastChannelOptions): UseBroadcastChannelReturn<D, P>;
export declare interface UseBroadcastChannelOptions extends ConfigurableWindow {
/**
* The name of the channel.
*/
name: string;
}
export declare interface UseBroadcastChannelReturn<D, P> {
isSupported: ComputedRef<boolean>;
channel: Ref<BroadcastChannel | undefined>;
data: Ref<D>;
post: (data: P) => void;
close: () => void;
error: ShallowRef<Event | null>;
isClosed: ShallowRef<boolean>;
}
/**
* Reactive browser location.
*
* @see https://vueuse.org/useBrowserLocation
*/
declare function useBrowserLocation(options?: ConfigurableWindow): Ref<{
readonly trigger: string;
readonly state?: any;
readonly length?: number | undefined;
readonly origin?: string | undefined;
hash?: string | undefined;
host?: string | undefined;
hostname?: string | undefined;
href?: string | undefined;
pathname?: string | undefined;
port?: string | undefined;
protocol?: string | undefined;
search?: string | undefined;
}, BrowserLocationState | {
readonly trigger: string;
readonly state?: any;
readonly length?: number | undefined;
readonly origin?: string | undefined;
hash?: string | undefined;
host?: string | undefined;
hostname?: string | undefined;
href?: string | undefined;
pathname?: string | undefined;
port?: string | undefined;
protocol?: string | undefined;
search?: string | undefined;
}>;
export declare type UseBrowserLocationReturn = ReturnType<typeof useBrowserLocation>;
export declare function useCached<T, D extends boolean = true>(refValue: Ref<T>, comparator?: (a: T, b: T) => boolean, options?: UseCachedOptions<D>): UseCachedReturn<T, D>;
declare interface UseCachedOptions<D extends boolean = true> extends ConfigurableDeepRefs<D>, WatchOptions {
}
declare type UseCachedReturn<T = any, D extends boolean = true> = ShallowOrDeepRef<T, D>;
export declare function useCloned<T>(source: MaybeRefOrGetter<T>, options?: UseClonedOptions): UseClonedReturn<T>;
export declare interface UseClonedOptions<T = any> extends WatchOptions {
/**
* Custom clone function.
*
* By default, it use `JSON.parse(JSON.stringify(value))` to clone.
*/
clone?: (source: T) => T;
/**
* Manually sync the ref
*
* @default false
*/
manual?: boolean;
}
export declare interface UseClonedReturn<T> {
/**
* Cloned ref
*/
cloned: Ref<T>;
/**
* Ref indicates whether the cloned data is modified