This commit is contained in:
2021-06-12 17:48:26 +03:00
commit 3e68914c92
56 changed files with 26153 additions and 0 deletions

View File

@ -0,0 +1,19 @@
import {decode} from 'querystring';
export type QueryParser<T> = (value?: string | string[]) => T;
export type QueryParsers<T> = {[K in keyof T]: QueryParser<T[K]>};
export const getQueryFromUrl = <T extends Record<string, unknown>>(queryParsers: QueryParsers<T>, search?: string) => {
const query = decode((search || location.search).slice(1));
return Object.keys(queryParsers).reduce<T>((memo, key) => {
if (key in queryParsers) {
const parser = queryParsers[key];
return {
...memo,
[key]: parser?.(query[key]),
};
}
return memo;
}, {} as T);
};