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 18.6 kB
{"version":3,"sources":["../../src/lib/utils.ts","../../src/lib/core/search-params.ts","../../src/vanilla/create-search-params.ts"],"names":["toArray","value","serialize","deserialize","validateParams","key","values","createUrl","pathname","params","search","createSearchParamsCore","adapter","searchParams","navigate","getMutableParams","updateAndNavigate","updater","newParams","get","options","parsedValues","v","flattenedValues","set","add","currentValues","updated","remove","valuesToRemove","valueStr","defaultValue","currentValue","oldValue","newValue","result","existing","createSearchParams","url"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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 { createSearchParamsCore } from \"../lib/core/search-params\";\n\nexport function createSearchParams() {\n const searchParams = new URLSearchParams(window.location.search);\n\n return createSearchParamsCore({\n pathname: window.location.pathname,\n searchParams,\n navigate: (url) => {\n window.history.pushState({}, \"\", url);\n },\n });\n}\n\n// Expose to window for IIFE/UMD builds\nif (typeof window !== \"undefined\") {\n (window as any).UseSearchParams = {\n createSearchParams,\n };\n}\n"]}