advanced-search-params
Version:
[](https://www.npmjs.com/package/advanced-search-params) [](https://www.jsdelivr.com/package/npm/a
2 lines • 4.03 kB
JavaScript
;var react=require('react'),navigation=require('next/navigation'),headers=require('next/headers'),reactRouterDom=require('react-router-dom');var C=react.createContext(null);function v(){let a=react.useContext(C);if(!a)throw new Error("useSearchParams must be used within a SearchParamsProvider");return a}function x(){let a=navigation.useRouter(),s=navigation.usePathname(),c=navigation.useSearchParams();if(!c)throw console.error("[NextAdapter] searchParams is undefined"),new Error("searchParams is undefined - ensure this is used in a Client Component");let u=new URLSearchParams(c.toString());return {pathname:s,searchParams:u,navigate:p=>{try{let m=p.split("?")[1]||"",P=new URLSearchParams(m);u.forEach((l,f)=>u.delete(f)),P.forEach((l,f)=>u.append(f,l)),a.replace(`${s}${m?`?${m}`:""}`,{scroll:!1});}catch(m){throw console.error("[NextAdapter] Navigation error:",m),m}}}}function R(){let[a,s]=react.useState(()=>new URLSearchParams(typeof window<"u"?window.location.search:""));react.useEffect(()=>{let u=()=>{s(new URLSearchParams(window.location.search));};return window.addEventListener("popstate",u),()=>window.removeEventListener("popstate",u)},[]);let c=react.useCallback(u=>{window.history.pushState({},"",u),s(new URLSearchParams(u.split("?")[1]||""));},[]);return {pathname:typeof window<"u"?window.location.pathname:"/",searchParams:a,navigate:c}}function d(a){return a===void 0?[]:Array.isArray(a)?a:[a]}function S(a){return a==null?"":JSON.stringify(a)}function A(a){try{return JSON.parse(a)}catch{return}}function w(a,s){if(!a)throw new Error("Key cannot be empty");if(s===void 0)throw new Error("Values cannot be undefined")}function U(a,s){let c=s.toString();return `${a}${c?`?${c}`:""}`}function L(a){let{pathname:s,searchParams:c,navigate:u}=a,g=()=>new URLSearchParams(c.toString()),p=r=>{let e=g();r(e),u(U(s,e));},m=(r,e)=>{let n=c.getAll(r);if(n.length===0)return;if(e?.parse)try{let i=n.map(o=>A(o));return e?.forceArray||n.length>1?i:i[0]}catch{return}let t=n.flatMap(i=>i.split(","));return e?.forceArray||t.length>1?t:t[0]},P=(r,e,n)=>{w(r,e),p(t=>{t.delete(r),(n?.serialize?d(e).map(o=>S(o)):d(e).map(String)).forEach(o=>t.append(r,o));});},l=(r,e,n)=>{w(r,e);let t=m(r)||[],i=[...new Set([...d(t),...d(n?.serialize?d(e).map(S):e)])];p(o=>{o.delete(r),i.forEach(h=>o.append(r,String(h)));});},f=(r,e)=>{let n=d(m(r)),t=d(e),i=n.filter(o=>!t.includes(o));p(o=>{o.delete(r),i.forEach(h=>o.append(r,String(h)));});};return {get:m,set:P,add:l,remove:f,matches:(r,e,n)=>{let t=m(r,n);if(!t)return !1;if(n?.parse){let i=JSON.stringify(e);return Array.isArray(t)?t.some(o=>JSON.stringify(o)===i):JSON.stringify(t)===i}return Array.isArray(t)?t.includes(e):t===e},getWithDefault:(r,e,n)=>{let t=m(r,n);return t===void 0?e:t},clear:r=>{p(e=>e.delete(r));},resetAllParams:()=>{u(s);},setMany:(r,e)=>{Object.entries(r).forEach(([n,t])=>{w(n,t);}),p(n=>{Object.entries(r).forEach(([t,i])=>{n.delete(t),(e?.serialize?d(i).map(h=>S(h)):d(i).map(String)).forEach(h=>n.append(t,h));});});},toggle:(r,e,n)=>{let t=m(r,n);t?f(r,t):l(r,e||"true",n);},update:(r,e,n)=>{let i=d(m(r)).map(o=>o===e?n:o);P(r,i);},getAll:()=>{let r={};return c.forEach((e,n)=>{let t=r[n];r[n]=t?[...d(t),e]:e;}),r},params:c}}function y(a){let s=headers.headers(),c=new URL(s.get("x-url")||s.get("referer")||"/"),u=new navigation.ReadonlyURLSearchParams(new URLSearchParams(c.search));return {pathname:a||c.pathname,searchParams:u,navigate:g=>{console.warn(g,"Navigation attempted on server side");}}}function E(){let[a]=reactRouterDom.useSearchParams(),s=reactRouterDom.useNavigate();return {pathname:reactRouterDom.useLocation().pathname,searchParams:a,navigate:s}}function gr(){let a=v();if(!a)throw new Error("useSearchParams must be used within a SearchParamsProvider");return L((()=>{switch(a.provider){case"next":return x();case"react":return R();case"react-router":return E();case"server":return y();default:return R()}})())}exports.useSearchParams=gr;//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map