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