nuqs-svelte
Version:
Svelte adaptation of the `nuqs` library for managing URL query strings as state.
36 lines (35 loc) • 1.74 kB
TypeScript
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 {};