{"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"]}