UNPKG

advanced-search-params

Version:

[![npm version](https://badge.fury.io/js/%40urlkit%2Fsearch-params.svg)](https://www.npmjs.com/package/advanced-search-params) [![jsDelivr hits](https://data.jsdelivr.com/v1/package/npm/advanced-search-params/badge)](https://www.jsdelivr.com/package/npm/a

1 lines 33.3 kB
{"version":3,"sources":["../src/react/context.ts","../src/lib/adapters/nextjs/index.ts","../src/lib/adapters/react/index.ts","../src/lib/utils.ts","../src/lib/core/search-params.ts","../src/lib/adapters/server/index.ts","../src/lib/adapters/react-router/index.ts","../src/react/hooks/use-search-params.ts","../src/react/provider.tsx","../src/lib/adapters/vanilla/index.ts","../src/lib/parsers.ts","../src/index.ts"],"names":["SearchParamsContext","createContext","useSearchParamsConfig","context","useContext","useNextAdapter","router","useRouter","pathname","usePathname","nextSearchParams","useSearchParams","mutableSearchParams","url","queryString","newParams","_","key","value","error","useReactAdapter","searchParams","setSearchParams","useState","useEffect","handleURLChange","navigate","useCallback","toArray","serialize","deserialize","updateSearchParams","current","values","validateParams","createUrl","params","search","batchUpdateParams","updates","createSearchParamsCore","adapter","getMutableParams","updateAndNavigate","updater","get","options","parsedValues","v","flattenedValues","set","add","currentValues","updated","remove","valuesToRemove","valueStr","defaultValue","currentValue","oldValue","newValue","result","existing","createServerAdapter","headersList","headers","ReadonlyURLSearchParams","useReactRouterAdapter","useRouterSearchParams","useNavigate","useLocation","config","SearchParamsProvider","provider","children","jsx","useVanillaAdapter","parseAsTimestamp","num","parseAsIsoDateTime","date","parseAsStringEnum","enumValues","defaultConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { SearchParamsConfig } from \"../lib/types\";\n\nconst SearchParamsContext = createContext<SearchParamsConfig | null>(null);\n\nexport function useSearchParamsConfig() {\n const context = useContext(SearchParamsContext);\n if (!context) {\n throw new Error(\n \"useSearchParams must be used within a SearchParamsProvider\"\n );\n }\n return context;\n}\n\nexport { SearchParamsContext };\n","import { useSearchParams, useRouter, usePathname } from \"next/navigation\";\n\nexport function useNextAdapter() {\n const router = useRouter();\n const pathname = usePathname();\n const nextSearchParams = useSearchParams();\n\n if (!nextSearchParams) {\n console.error('[NextAdapter] searchParams is undefined');\n throw new Error('searchParams is undefined - ensure this is used in a Client Component');\n }\n\n // Create a mutable copy that will be used for all operations\n const mutableSearchParams = new URLSearchParams(nextSearchParams.toString());\n\n const navigate = (url: string) => {\n try {\n const queryString = url.split('?')[1] || '';\n const newParams = new URLSearchParams(queryString);\n \n mutableSearchParams.forEach((_, key) => mutableSearchParams.delete(key));\n newParams.forEach((value, key) => mutableSearchParams.append(key, value));\n \n router.replace(`${pathname}${queryString ? `?${queryString}` : ''}`, {\n scroll: false\n });\n } catch (error) {\n console.error('[NextAdapter] Navigation error:', error);\n throw error;\n }\n };\n\n return {\n pathname,\n searchParams: mutableSearchParams,\n navigate,\n };\n}","import { useState, useCallback, useEffect } from \"react\";\n\nexport function useReactAdapter() {\n const [searchParams, setSearchParams] = useState(\n () =>\n new URLSearchParams(\n typeof window !== \"undefined\" ? window.location.search : \"\"\n )\n );\n\n // Update searchParams when URL changes\n useEffect(() => {\n const handleURLChange = () => {\n setSearchParams(new URLSearchParams(window.location.search));\n };\n\n window.addEventListener(\"popstate\", handleURLChange);\n return () => window.removeEventListener(\"popstate\", handleURLChange);\n }, []);\n\n const navigate = useCallback((url: string) => {\n window.history.pushState({}, \"\", url);\n setSearchParams(new URLSearchParams(url.split(\"?\")[1] || \"\"));\n }, []);\n\n return {\n pathname: typeof window !== \"undefined\" ? window.location.pathname : \"/\",\n searchParams,\n navigate,\n };\n}\n","/**\n * Converts a value to an array if it isn't already one.\n */\nexport function toArray<T>(value: T | T[] | undefined): T[] {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n}\n\n/**\n * Serializes a value to a URL-safe string.\n */\nexport function serialize(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n return JSON.stringify(value);\n}\n\n/**\n * Deserializes a URL-safe string to a value.\n */\nexport function deserialize<T>(value: string): T | undefined {\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n return undefined;\n }\n}\n\n/**\n * Creates a new URLSearchParams instance with updated parameters.\n */\nexport function updateSearchParams(\n current: URLSearchParams,\n key: string,\n values: string[]\n): URLSearchParams {\n const newParams = new URLSearchParams(current);\n newParams.delete(key);\n values.forEach((value) => newParams.append(key, value));\n return newParams;\n}\n\n/**\n * Validates search parameter inputs.\n */\nexport function validateParams(key: string, values: unknown | unknown[]): void {\n if (!key) throw new Error(\"Key cannot be empty\");\n if (values === undefined) throw new Error(\"Values cannot be undefined\");\n}\n\n/**\n * Creates a URL string from pathname and search params.\n */\nexport function createUrl(pathname: string, params: URLSearchParams): string {\n const search = params.toString();\n return `${pathname}${search ? `?${search}` : \"\"}`;\n}\n\n/**\n * Processes multiple parameter updates.\n */\nexport function batchUpdateParams(\n current: URLSearchParams,\n updates: Record<string, string[]>\n): URLSearchParams {\n const newParams = new URLSearchParams(current);\n\n Object.entries(updates).forEach(([key, values]) => {\n newParams.delete(key);\n values.forEach((value) => newParams.append(key, value));\n });\n\n return newParams;\n}\n","import {\n serialize,\n deserialize,\n toArray,\n validateParams,\n createUrl,\n} from \"../utils\";\nimport type { ParamOptions } from \"../types\";\nimport { ReadonlyURLSearchParams } from \"next/navigation\";\n\n/**\n * Creates core search parameter functionality that can be used across different adapters.\n * This is the shared implementation used by both React hooks and vanilla JS.\n *\n * @param adapter - An object containing the adapter implementation\n * @param adapter.pathname - The current URL pathname\n * @param adapter.searchParams - The URLSearchParams instance (can be readonly in Next.js)\n * @param adapter.navigate - Function to handle URL navigation\n * @returns An object containing methods for manipulating URL parameters\n */\nexport function createSearchParamsCore(adapter: {\n pathname: string;\n searchParams: URLSearchParams | ReadonlyURLSearchParams;\n navigate: (url: string) => void;\n}) {\n const { pathname, searchParams, navigate } = adapter;\n\n const getMutableParams = () => {\n return new URLSearchParams(searchParams.toString());\n };\n\n const updateAndNavigate = (updater: (params: URLSearchParams) => void) => {\n const newParams = getMutableParams();\n updater(newParams);\n navigate(createUrl(pathname, newParams));\n };\n\n /**\n * Gets values for a key as a structured object containing both key and value(s).\n * If there's only one value, returns it as a string. If multiple values exist,\n * returns them as an array.\n *\n * @param key - The URL parameter key to get values for\n * @param options - Optional configuration for parsing values\n * @returns The value(s) for the key, or undefined if not found\n *\n * @example\n * // URL: ?filter=active\n * get('filter') // Returns: 'active'\n *\n * // URL: ?filter=active&filter=pending\n * get('filter') // Returns: ['active', 'pending']\n *\n * // URL: ?data={\"test\":true}\n * get('data', { parse: true }) // Returns: { test: true }\n */\n const get = <T>(key: string, options?: ParamOptions): T | undefined => {\n const values = searchParams.getAll(key);\n if (values.length === 0) return undefined;\n\n if (options?.parse) {\n try {\n const parsedValues = values.map((v) => deserialize<T>(v));\n return options?.forceArray || values.length > 1\n ? (parsedValues as T) \n : (parsedValues[0] as T);\n } catch (error) {\n return undefined;\n }\n }\n\n const flattenedValues = values.flatMap(v => v.split(','));\n return options?.forceArray || flattenedValues.length > 1\n ? (flattenedValues as T) \n : (flattenedValues[0] as T);\n };\n\n /**\n * Sets/replaces all values for a key.\n *\n * @param key - The URL parameter key to set values for\n * @param values - Single value or array of values to set\n * @param options - Optional configuration for serializing values\n *\n * @example\n * // Set single value\n * set('view', 'grid');\n *\n * // Set multiple values\n * set('filter', ['active', 'pending']);\n *\n * // Set serialized object\n * set('filters', { status: 'active' }, { serialize: true });\n */\n const set = (key: string, values: unknown | unknown[], options?: ParamOptions): void => {\n validateParams(key, values);\n updateAndNavigate((params) => {\n params.delete(key);\n const processedValues = options?.serialize\n ? toArray(values).map((v) => serialize(v))\n : toArray(values).map(String);\n processedValues.forEach((value) => params.append(key, value));\n });\n };\n\n /**\n * Adds new values to existing ones for a key, preventing duplicates.\n * Accepts either a single value or an array of values.\n *\n * @param key - The URL parameter key to add values to\n * @param values - Single value or array of values to add\n * @param options - Optional configuration for serializing values\n *\n * @example\n * // Add single value\n * add('filter', 'completed');\n *\n * // Add multiple values\n * add('filter', ['archived', 'draft']);\n */\n const add = (key: string, values: unknown | unknown[], options?: ParamOptions): void => {\n validateParams(key, values);\n const currentValues = get(key) || [];\n const updated = [...new Set([\n ...toArray(currentValues),\n ...toArray(options?.serialize ? toArray(values).map(serialize) : values)\n ])];\n \n updateAndNavigate((params) => {\n params.delete(key);\n updated.forEach((value) => params.append(key, String(value)));\n });\n };\n\n /**\n * Removes specific values from a key's array.\n * Accepts either a single value or an array of values to remove.\n *\n * @param key - The URL parameter key to remove values from\n * @param values - Single value or array of values to remove\n *\n * @example\n * // Remove single value\n * remove('filter', 'pending');\n *\n * // Remove multiple values\n * remove('filter', ['archived', 'draft']);\n */\n const remove = (key: string, values: unknown | unknown[]): void => {\n const currentValues = toArray(get(key));\n const valuesToRemove = toArray(values);\n const updated = currentValues.filter(\n (value) => !valuesToRemove.includes(value)\n );\n \n updateAndNavigate((params) => {\n params.delete(key);\n updated.forEach((value) => params.append(key, String(value)));\n });\n };\n\n /**\n * Checks if a URL parameter key contains a specific value.\n * For single values, checks for exact match.\n * For array values, checks if value exists in the array.\n *\n * @param key - The URL parameter key to check\n * @param value - The value to look for\n * @param options - Optional configuration for parsing values before comparison\n * @returns True if the key contains the value, false otherwise\n *\n * @example\n * // URL: ?filter=active\n * matches('filter', 'active') // true\n * matches('filter', 'pending') // false\n *\n * // URL: ?filter=active&filter=pending\n * matches('filter', 'active') // true\n * matches('filter', 'completed') // false\n */\n const matches = (key: string, value: unknown, options?: ParamOptions): boolean => {\n const values = get(key, options);\n if (!values) return false;\n\n // For parsed objects, use JSON string comparison\n if (options?.parse) {\n const valueStr = JSON.stringify(value);\n if (Array.isArray(values)) {\n return values.some(v => JSON.stringify(v) === valueStr);\n }\n return JSON.stringify(values) === valueStr;\n }\n\n // For regular values, use direct comparison\n if (Array.isArray(values)) {\n return values.includes(value as never);\n }\n return values === value;\n };\n\n /**\n * Gets a value with a default fallback if the key doesn't exist.\n *\n * @param key - The URL parameter key to get the value for\n * @param defaultValue - The default value to return if the key doesn't exist\n * @param options - Optional configuration for parsing values\n * @returns The value if it exists, otherwise the default value\n */\n const getWithDefault = <T>(\n key: string,\n defaultValue: T,\n options?: ParamOptions\n ): T => {\n const value = get<T>(key, options);\n return value === undefined ? defaultValue : value;\n };\n\n /**\n * Clears a specific key from the URL parameters\n */\n const clear = (key: string): void => {\n updateAndNavigate((params) => params.delete(key));\n };\n\n /**\n * Resets all URL search parameters\n */\n const resetAllParams = (): void => {\n navigate(pathname);\n };\n\n /**\n * Sets multiple URL parameter key/value pairs simultaneously.\n * Preserves any existing parameters not included in the update.\n *\n * @param params - An object where keys are parameter names and values are arrays of values\n * @param options - Optional configuration for serializing values\n *\n * @example\n * // Set multiple parameters at once\n * setMany({\n * filter: ['active', 'pending'],\n * sort: ['date'],\n * view: ['grid']\n * });\n *\n * // Set serialized objects\n * setMany({\n * filters: [{ status: 'active' }],\n * config: [{ view: 'grid' }]\n * }, { serialize: true });\n */\n const setMany = (\n params: Record<string, string | string[]>,\n options?: ParamOptions\n ): void => {\n Object.entries(params).forEach(([key, values]) => {\n validateParams(key, values);\n });\n\n updateAndNavigate((newParams) => {\n Object.entries(params).forEach(([key, values]) => {\n newParams.delete(key);\n const processedValues = options?.serialize\n ? toArray(values).map((v) => serialize(v))\n : toArray(values).map(String);\n processedValues.forEach((value) => newParams.append(key, value));\n });\n });\n };\n\n const toggle = (key: string, value?: string, options?: ParamOptions): void => {\n const currentValue = get(key, options);\n if (currentValue) {\n remove(key, currentValue);\n } else {\n add(key, value || 'true', options);\n }\n };\n\n const update = (key: string, oldValue: string, newValue: string): void => {\n const currentValues = toArray(get(key));\n const updated = currentValues.map((value) => (value === oldValue ? newValue : value));\n set(key, updated);\n };\n\n const getAll = (): Record<string, string | string[]> => {\n const result: Record<string, string | string[]> = {};\n searchParams.forEach((value, key) => {\n const existing = result[key];\n result[key] = existing ? [...toArray(existing), value] : value;\n });\n return result;\n };\n\n return {\n get,\n set,\n add,\n remove,\n matches,\n getWithDefault,\n clear,\n resetAllParams,\n setMany,\n toggle,\n update,\n getAll,\n params: searchParams,\n };\n}\n","import { headers } from \"next/headers\";\nimport { ReadonlyURLSearchParams } from \"next/navigation\";\n\nexport function createServerAdapter(pathname?: string) {\n // Get URL from headers during SSR\n const headersList = headers();\n const url = new URL(\n headersList.get(\"x-url\") || headersList.get(\"referer\") || \"/\"\n );\n\n // Create readonly search params from URL\n const searchParams = new ReadonlyURLSearchParams(new URLSearchParams(url.search));\n\n return {\n pathname: pathname || url.pathname,\n searchParams,\n // No-op navigate function for server\n navigate: (url: string) => {\n console.warn(url, \"Navigation attempted on server side\");\n },\n };\n} ","import {\n useNavigate,\n useLocation,\n useSearchParams as useRouterSearchParams,\n} from \"react-router-dom\";\n\nexport function useReactRouterAdapter() {\n const [searchParams] = useRouterSearchParams();\n const navigate = useNavigate();\n const location = useLocation();\n\n return {\n pathname: location.pathname,\n searchParams,\n navigate,\n };\n}\n","\"use client\";\n\nimport { useSearchParamsConfig } from \"../context\";\nimport { useNextAdapter } from \"../../lib/adapters/nextjs\";\nimport { useReactAdapter } from \"../../lib/adapters/react\";\nimport type { UseParamsReturn } from \"../../lib/types\";\nimport { createSearchParamsCore } from \"../../lib/core/search-params\";\nimport { createServerAdapter } from \"../../lib/adapters/server\";\nimport { useReactRouterAdapter } from \"../../lib/adapters/react-router\";\n\n/**\n * Hook for managing URL search parameters with support for multiple values per key.\n * \n * @returns {UseParamsReturn} Object with methods: \n * get, set, add, remove, getWithDefault, matches, update, clear, resetAllParams, getAll, setMany\n * \n * @example\n * ```tsx\n * function FilterComponent() {\n * const { get, set, add, remove } = useSearchParams();\n * \n * // Get current filters\n * const filters = get('filter');\n * \n * return (\n * <div>\n * <button onClick={() => add('filter', 'active')}>Add Active</button>\n * <button onClick={() => remove('filter', 'active')}>Remove Active</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useSearchParams(): UseParamsReturn {\n const config = useSearchParamsConfig();\n\n if (!config) {\n throw new Error(\n \"useSearchParams must be used within a SearchParamsProvider\"\n );\n }\n\n const adapterConfig = () => {\n switch(config.provider) {\n case \"next\":\n return useNextAdapter();\n case \"react\":\n return useReactAdapter();\n case 'react-router':\n return useReactRouterAdapter();\n case \"server\":\n return createServerAdapter();\n default:\n return useReactAdapter();\n }\n };\n\n return createSearchParamsCore(adapterConfig());\n}\n","\"use client\";\n\nimport { ReactNode } from \"react\";\nimport { SearchParamsContext } from \"./context\";\nimport type { RouterProvider } from \"../lib/types\";\n\ninterface SearchParamsProviderProps {\n provider: RouterProvider;\n children: ReactNode;\n}\n\nexport function SearchParamsProvider({\n provider,\n children,\n}: SearchParamsProviderProps) {\n return (\n <SearchParamsContext.Provider value={{ provider }}>\n {children}\n </SearchParamsContext.Provider>\n );\n}\n","export function useVanillaAdapter() {\n const pathname = window.location.pathname;\n const searchParams = new URLSearchParams(window.location.search);\n\n const navigate = (url: string) => {\n window.history.pushState({}, \"\", url);\n window.dispatchEvent(new Event(\"urlchange\"));\n };\n\n return {\n pathname,\n searchParams,\n navigate,\n };\n}\n","export interface ParserOptions<T> {\n defaultValue?: T;\n validate?: (value: T) => boolean;\n}\n\nexport interface Parser<T> {\n parse: (value: string) => T | undefined;\n serialize: (value: T) => string;\n validate?: (value: T) => boolean;\n}\n\n// Date Parsers\nexport function parseAsTimestamp(options: ParserOptions<number> = {}) {\n return {\n parse: (value: string) => {\n const num = Number(value);\n if (isNaN(num)) return options.defaultValue;\n return num;\n },\n serialize: (value: number) => value.toString(),\n validate: options.validate,\n };\n}\n\nexport function parseAsIsoDateTime(options: ParserOptions<Date> = {}) {\n return {\n parse: (value: string) => {\n const date = new Date(value);\n return isNaN(date.getTime()) ? options.defaultValue : date;\n },\n serialize: (value: Date) => value.toISOString(),\n validate: options.validate,\n };\n}\n\n// Enum Parser\nexport function parseAsStringEnum<T extends string>(\n enumValues: readonly T[],\n options: ParserOptions<T> = {}\n) {\n return {\n parse: (value: string) => {\n return enumValues.includes(value as T)\n ? (value as T)\n : options.defaultValue;\n },\n serialize: (value: T) => value,\n validate: options.validate ?? ((value: T) => enumValues.includes(value)),\n };\n}\n\n// Number Parser with Range\nexport function parseAsNumber(\n options: ParserOptions<number> & {\n min?: number;\n max?: number;\n } = {}\n) {\n return {\n parse: (value: string) => {\n const num = Number(value);\n if (isNaN(num)) return options.defaultValue;\n if (options.min !== undefined && num < options.min) return options.min;\n if (options.max !== undefined && num > options.max) return options.max;\n return num;\n },\n serialize: (value: number) => value.toString(),\n validate: options.validate,\n };\n}\n\n// Boolean Parser\nexport function parseAsBoolean(options: ParserOptions<boolean> = {}) {\n return {\n parse: (value: string) => {\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n return options.defaultValue;\n },\n serialize: (value: boolean) => value.toString(),\n validate: options.validate,\n };\n}\n","// Types\nimport type { SearchParamsConfig } from \"./lib/types\";\nexport type {\n SearchParamsConfig,\n UseParamsReturn,\n RouterProvider,\n} from \"./lib/types\";\n\n// React/Next.js functionality\nexport { useSearchParams } from \"./react/hooks/use-search-params\";\nexport { SearchParamsProvider } from \"./react/provider\";\n\n// Adapters\nexport { useNextAdapter } from \"./lib/adapters/nextjs\";\nexport { useReactAdapter } from \"./lib/adapters/react\";\nexport { useVanillaAdapter } from \"./lib/adapters/vanilla\";\n\n// Utilities\nexport {\n serialize,\n deserialize,\n toArray,\n updateSearchParams,\n validateParams,\n createUrl,\n batchUpdateParams,\n} from \"./lib/utils\";\n\n// Parsers\nexport {\n parseAsTimestamp,\n parseAsIsoDateTime,\n parseAsStringEnum,\n type ParserOptions,\n type Parser\n} from \"./lib/parsers\";\n\n// Default configuration\nexport const defaultConfig: SearchParamsConfig = {\n provider: \"next\",\n};\n"]}