UNPKG

nuqs-svelte

Version:

Svelte adaptation of the `nuqs` library for managing URL query strings as state.

36 lines (35 loc) 1.74 kB
import type { Parser } from "./parsers"; import type { Nullable, Options, UrlKeys } from "./types"; type KeyMapValue<Type> = Parser<Type> & Options & { defaultValue?: Type; }; export type UseQueryStatesKeysMap<Map = any> = { [Key in keyof Map]: KeyMapValue<Map[Key]>; } & {}; export type UseQueryStatesOptions<KeyMap extends UseQueryStatesKeysMap> = Options & { urlKeys: UrlKeys<KeyMap>; }; export type Values<T extends UseQueryStatesKeysMap> = { readonly [K in keyof T]: T[K]["defaultValue"] extends NonNullable<ReturnType<T[K]["parse"]>> ? NonNullable<ReturnType<T[K]["parse"]>> : ReturnType<T[K]["parse"]> | null; }; type UpdaterFn<T extends UseQueryStatesKeysMap> = (old: Values<T>) => Partial<Nullable<Values<T>>> | null; export type SetValues<T extends UseQueryStatesKeysMap> = (values: Partial<Nullable<Values<T>>> | UpdaterFn<T> | null, options?: Options) => Promise<URLSearchParams>; export type UseQueryStatesReturn<T extends UseQueryStatesKeysMap> = { set: SetValues<T>; } & { [K in keyof T]: { get current(): Values<T>[K]; set current(value: Nullable<Values<T>[K]>); }; }; /** * Synchronise multiple query string arguments to Svelte state * * @param keys - An object describing the keys to synchronise and how to * serialise and parse them. * Use `parseAs(String|Integer|Float|...)` for quick shorthands. * * @param options - Optional history mode, shallow routing and scroll restoration options. */ export declare function useQueryStates<KeyMap extends UseQueryStatesKeysMap>(keyMap: KeyMap, { history, scroll, shallow, throttleMs, clearOnDefault, urlKeys, }?: Partial<UseQueryStatesOptions<KeyMap>>): UseQueryStatesReturn<KeyMap>; export {};