state-in-url 6.0.1 → 6.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -761,6 +761,10 @@ See [Contributing doc](CONTRIBUTING.md)
761
761
 
762
762
  This project is licensed under the [MIT license](LICENSE).
763
763
 
764
+ ## Personal website
765
+
766
+ [Portfolio site](https://asmyshlyaev177.dev)
767
+
764
768
  ## Inspiration
765
769
 
766
770
  [NUQS](https://github.com/47ng/nuqs)
@@ -1 +1 @@
1
- "use strict";var i=require("../encoder/encoder.js");var s=require("../utils.js");function d(o,t,r){const n=s.getParams(r);for(const[e,c]of Object.entries(o||{})){const a=t?.[e];if(JSON.stringify(c)!==JSON.stringify(a)){n.set(e,i.encode(c))}}return n.toString()}function u(o,t){return{...t||{},...Object.fromEntries([...s.getParams(o).entries()].map(([r,n])=>{const e=t?.[r];return[r,i.decode(n,e)??e]}))}}exports.decodeState=u;exports.encodeState=d;
1
+ "use strict";var a=require("../encoder/encoder.js");var d=require("../utils.js");function f(c,t,r){const n=d.getParams(r);const e=Object.entries(c||{});for(let o=0;o<e.length;o++){const[s,i]=e[o];const u=t?.[s];if(JSON.stringify(i)!==JSON.stringify(u)){n.set(s,a.encode(i))}}return n.toString()}function S(c,t){return{...t||{},...Object.fromEntries([...d.getParams(c).entries()].map(([r,n])=>{const e=t?.[r];return[r,a.decode(n,e)??e]}))}}exports.decodeState=S;exports.encodeState=f;
@@ -1 +1 @@
1
- import{decode as f,encode as m}from"../encoder/encoder.mjs";import{getParams as c}from"../utils.mjs";function a(r,e,n){const o=c(n);for(const[t,i]of Object.entries(r||{})){const s=e?.[t];if(JSON.stringify(i)!==JSON.stringify(s)){o.set(t,m(i))}}return o.toString()}function d(r,e){return{...e||{},...Object.fromEntries([...c(r).entries()].map(([n,o])=>{const t=e?.[n];return[n,f(o,t)??t]}))}}export{d as decodeState,a as encodeState};
1
+ import{decode as d,encode as a}from"../encoder/encoder.mjs";import{getParams as f}from"../utils.mjs";function g(o,e,r){const n=f(r);const t=Object.entries(o||{});for(let c=0;c<t.length;c++){const[i,s]=t[c];const m=e?.[i];if(JSON.stringify(s)!==JSON.stringify(m)){n.set(i,a(s))}}return n.toString()}function u(o,e){return{...e||{},...Object.fromEntries([...f(o).entries()].map(([r,n])=>{const t=e?.[r];return[r,d(n,t)??t]}))}}export{u as decodeState,g as encodeState};
@@ -1 +1 @@
1
- "use strict";var n=require("../constants/constants.js");var o=require("../utils.js");function S(e){if(typeof e==="function"||typeof e==="symbol")return"";if(v(e)){return e}return JSON.stringify(structuredClone(e),c).replace(/'/g,"%27").replace(/"/g,"'")}function c(e,r){const i=o.typeOf(r);if(i!=="object"&&i!=="array"){return s(r)}if(i==="object"){const t=r;for(const u of Object.keys(t)){t[u]=c(e,t[u])}return t}if(i==="array"){return r.map(t=>c(e,t))}return r}const s=e=>{switch(o.typeOf(e)){case"date":return n.SYMBOLS.date+new Date(e).toISOString();case"undefined":return n.SYMBOLS.undefined;default:return e}};function p(e,r){return d(e.replace(/'/g,'"').replace(/%27/g,"'"),r)}function d(e,r){try{return JSON.parse(e,a)}catch{return r}}function a(e,r){return typeof r==="string"?f(r):r}const f=e=>{if(e===n.SYMBOLS.undefined)return void 0;if(e?.startsWith?.(n.SYMBOLS.date))return new Date(e.slice(1));return e};const O=new RegExp(`^(${n.SYMBOLS.undefined}|${n.SYMBOLS.date})`);const v=e=>O.test(String(e));exports.decode=p;exports.decodePrimitive=f;exports.encode=S;exports.encodePrimitive=s;exports.parseJSON=d;exports.reviver=a;
1
+ "use strict";var n=require("../constants/constants.js");var u=require("../utils.js");const s=/'/g;const p=/"/g;const O=/%27/g;function v(e){if(typeof e==="function"||typeof e==="symbol")return"";if(g(e)){return e}return JSON.stringify(structuredClone(e),c).replace(s,"%27").replace(p,"'")}function c(e,r){const i=u.typeOf(r);if(i!=="object"&&i!=="array"){return d(r)}if(i==="object"){const t=r;for(const o of Object.keys(t)){t[o]=c(e,t[o])}return t}if(i==="array"){return r.map(t=>c(e,t))}return r}const d=e=>{switch(u.typeOf(e)){case"date":return n.SYMBOLS.date+new Date(e).toISOString();case"undefined":return n.SYMBOLS.undefined;default:return e}};function y(e,r){return a(e.replace(s,'"').replace(O,"'"),r)}function a(e,r){try{return JSON.parse(e,f)}catch{return r}}function f(e,r){return typeof r==="string"?S(r):r}const S=e=>{if(e===n.SYMBOLS.undefined)return void 0;if(e?.startsWith?.(n.SYMBOLS.date))return new Date(e.slice(1));return e};const l=new RegExp(`^(${n.SYMBOLS.undefined}|${n.SYMBOLS.date})`);const g=e=>l.test(String(e));exports.decode=y;exports.decodePrimitive=S;exports.encode=v;exports.encodePrimitive=d;exports.parseJSON=a;exports.reviver=f;
@@ -1 +1 @@
1
- import{SYMBOLS as n}from"../constants/constants.mjs";import{typeOf as u}from"../utils.mjs";function p(e){if(typeof e==="function"||typeof e==="symbol")return"";if(l(e)){return e}return JSON.stringify(structuredClone(e),o).replace(/'/g,"%27").replace(/"/g,"'")}function o(e,r){const i=u(r);if(i!=="object"&&i!=="array"){return f(r)}if(i==="object"){const t=r;for(const c of Object.keys(t)){t[c]=o(e,t[c])}return t}if(i==="array"){return r.map(t=>o(e,t))}return r}const f=e=>{switch(u(e)){case"date":return n.date+new Date(e).toISOString();case"undefined":return n.undefined;default:return e}};function y(e,r){return a(e.replace(/'/g,'"').replace(/%27/g,"'"),r)}function a(e,r){try{return JSON.parse(e,s)}catch{return r}}function s(e,r){return typeof r==="string"?d(r):r}const d=e=>{if(e===n.undefined)return void 0;if(e?.startsWith?.(n.date))return new Date(e.slice(1));return e};const g=new RegExp(`^(${n.undefined}|${n.date})`);const l=e=>g.test(String(e));export{y as decode,d as decodePrimitive,p as encode,f as encodePrimitive,a as parseJSON,s as reviver};
1
+ import{SYMBOLS as n}from"../constants/constants.mjs";import{typeOf as u}from"../utils.mjs";const f=/'/g;const y=/"/g;const g=/%27/g;function l(e){if(typeof e==="function"||typeof e==="symbol")return"";if(O(e)){return e}return JSON.stringify(structuredClone(e),i).replace(f,"%27").replace(y,"'")}function i(e,r){const o=u(r);if(o!=="object"&&o!=="array"){return s(r)}if(o==="object"){const t=r;for(const c of Object.keys(t)){t[c]=i(e,t[c])}return t}if(o==="array"){return r.map(t=>i(e,t))}return r}const s=e=>{switch(u(e)){case"date":return n.date+new Date(e).toISOString();case"undefined":return n.undefined;default:return e}};function m(e,r){return a(e.replace(f,'"').replace(g,"'"),r)}function a(e,r){try{return JSON.parse(e,d)}catch{return r}}function d(e,r){return typeof r==="string"?p(r):r}const p=e=>{if(e===n.undefined)return void 0;if(e?.startsWith?.(n.date))return new Date(e.slice(1));return e};const S=new RegExp(`^(${n.undefined}|${n.date})`);const O=e=>S.test(String(e));export{m as decode,p as decodePrimitive,l as encode,s as encodePrimitive,a as parseJSON,d as reviver};
@@ -80,10 +80,10 @@ export declare function useUrlState<T extends JSONCompatible>(defaultState: T, p
80
80
  };
81
81
  type Router = ReturnType<typeof useRouter>;
82
82
  type RouterOptions = NonNullable<Parameters<Router["push"]>[1] | Parameters<Router["replace"]>[1]>;
83
- interface Options extends RouterOptions {
83
+ export interface Options extends RouterOptions {
84
84
  replace?: boolean;
85
85
  }
86
- type Params = {
86
+ export type Params = {
87
87
  searchParams?: object;
88
88
  replace?: boolean;
89
89
  scroll?: boolean;
@@ -1 +1 @@
1
- "use strict";var h=require("react");var p=require("next/navigation");var S=require("../../parseSPObj.js");var k=require("../../useUrlStateBase/useUrlStateBase.js");var r=require("../../utils.js");function q(e){return e&&e.__esModule?e:{default:e}}var s=q(h);function _(e,a){const u=a?.useHistory;const l=p.useRouter();const d=s.default.useMemo(()=>({push:(...t)=>{if(u===void 0?true:!!u){r.routerHistory.push(...t)}else{l.push(...t)}},replace:(...t)=>{if(u===void 0?true:!!u){r.routerHistory.replace(...t)}else{l.replace(...t)}}}),[l]);const{state:P,updateState:o,updateUrl:n,reset:c,getState:U}=k.useUrlStateBase(e,d,({parse:t})=>{return r.isSSR?S.parseSPObj(r.filterUnknownParams(e,a?.searchParams),e):t(r.filterUnknownParamsClient(e,a?.searchParams))});const i=s.default.useMemo(()=>({...j,scroll:a?.scroll,replace:a?.replace}),[]);const m=s.default.useCallback((t,b)=>n(t,{...i,...b}),[n]);const f=p.useSearchParams();s.default.useLayoutEffect(()=>{o(r.filterUnknownParams(e,S.parseSPObj(Object.fromEntries([...f.entries()]),e)))},[f]);const v=s.default.useCallback(t=>{c({...i,...t})},[c]);return{setState:o,setUrl:m,urlState:P,reset:v,getState:U}}const j={replace:true,scroll:false};exports.useUrlState=_;
1
+ "use strict";var g=require("react");var p=require("next/navigation");var d=require("../../parseSPObj.js");var k=require("../../useUrlStateBase/useUrlStateBase.js");var s=require("../../utils.js");function q(t){return t&&t.__esModule?t:{default:t}}var a=q(g);function M(t,r){const u=a.default.useMemo(()=>r?.useHistory===void 0?true:!!r?.useHistory,[]);const l=p.useRouter();const S=a.default.useMemo(()=>({push:(...e)=>{if(u){s.routerHistory.push(...e)}else{l.push(...e)}},replace:(...e)=>{if(u){s.routerHistory.replace(...e)}else{l.replace(...e)}}}),[l]);const{state:U,updateState:o,updateUrl:n,reset:c,getState:m,pendingUrlUpdate:v}=k.useUrlStateBase(t,S,({parse:e})=>{return s.isSSR?d.parseSPObj(s.filterUnknownParams(t,r?.searchParams),t):e(s.filterUnknownParamsClient(t,r?.searchParams||s.getSearch()))});const i=p.useSearchParams();a.default.useEffect(()=>{if(!v()){o(s.filterUnknownParams(t,d.parseSPObj(Object.fromEntries([...i.entries()]),t)))}},[i]);const f=a.default.useMemo(()=>{const e={..._};if(r?.scroll!==void 0)e.scroll=r.scroll;if(r?.replace!==void 0)e.replace=r.replace;return e},[r?.scroll,r?.replace]);const P=a.default.useCallback((e,b)=>n(e,{...f,...b}),[n]);const h=a.default.useCallback(e=>{c({...f,...e})},[c]);return{setState:o,setUrl:P,urlState:U,reset:h,getState:m}}const _={replace:true,scroll:false};exports.useUrlState=M;
@@ -1 +1 @@
1
- import s from"react";import{useRouter as k,useSearchParams as C}from"next/navigation";import{parseSPObj as p}from"../../parseSPObj.mjs";import{useUrlStateBase as y}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as m,filterUnknownParams as f,isSSR as g,filterUnknownParamsClient as j}from"../../utils.mjs";function v(t,r){const a=r?.useHistory;const o=k();const S=s.useMemo(()=>({push:(...e)=>{if(a===void 0?true:!!a){m.push(...e)}else{o.push(...e)}},replace:(...e)=>{if(a===void 0?true:!!a){m.replace(...e)}else{o.replace(...e)}}}),[o]);const{state:h,updateState:l,updateUrl:c,reset:u,getState:P}=y(t,S,({parse:e})=>{return g?p(f(t,r?.searchParams),t):e(j(t,r?.searchParams))});const n=s.useMemo(()=>({...w,scroll:r?.scroll,replace:r?.replace}),[]);const U=s.useCallback((e,d)=>c(e,{...n,...d}),[c]);const i=C();s.useLayoutEffect(()=>{l(f(t,p(Object.fromEntries([...i.entries()]),t)))},[i]);const b=s.useCallback(e=>{u({...n,...e})},[u]);return{setState:l,setUrl:U,urlState:h,reset:b,getState:P}}const w={replace:true,scroll:false};export{v as useUrlState};
1
+ import r from"react";import{useRouter as k,useSearchParams as M}from"next/navigation";import{parseSPObj as p}from"../../parseSPObj.mjs";import{useUrlStateBase as v}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as m,filterUnknownParams as f,isSSR as y,filterUnknownParamsClient as C,getSearch as H}from"../../utils.mjs";function j(t,s){const a=r.useMemo(()=>s?.useHistory===void 0?true:!!s?.useHistory,[]);const o=k();const S=r.useMemo(()=>({push:(...e)=>{if(a){m.push(...e)}else{o.push(...e)}},replace:(...e)=>{if(a){m.replace(...e)}else{o.replace(...e)}}}),[o]);const{state:U,updateState:l,updateUrl:c,reset:n,getState:d,pendingUrlUpdate:h}=v(t,S,({parse:e})=>{return y?p(f(t,s?.searchParams),t):e(C(t,s?.searchParams||H()))});const u=M();r.useEffect(()=>{if(!h()){l(f(t,p(Object.fromEntries([...u.entries()]),t)))}},[u]);const i=r.useMemo(()=>{const e={...w};if(s?.scroll!==void 0)e.scroll=s.scroll;if(s?.replace!==void 0)e.replace=s.replace;return e},[s?.scroll,s?.replace]);const P=r.useCallback((e,g)=>c(e,{...i,...g}),[c]);const b=r.useCallback(e=>{n({...i,...e})},[n]);return{setState:l,setUrl:P,urlState:U,reset:b,getState:d}}const w={replace:true,scroll:false};export{j as useUrlState};
@@ -75,9 +75,8 @@ export declare function useUrlState<T extends JSONCompatible>(defaultState: T, p
75
75
  [key: string]: unknown;
76
76
  }) => void;
77
77
  };
78
- interface Params extends NavigateOptions {
78
+ export interface Params extends NavigateOptions {
79
79
  useHistory?: boolean;
80
80
  searchParams?: object;
81
81
  replace?: boolean;
82
82
  }
83
- export {};
@@ -1 +1 @@
1
- "use strict";var P=require("react");var o=require("react-router");var _=require("../../parseSPObj.js");var g=require("../../useUrlStateBase/useUrlStateBase.js");var u=require("../../utils.js");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(P);function R(e,l){const p=l?.useHistory;const a=s.default.useMemo(()=>({...h,replace:l?.replace,preventScrollReset:l?.preventScrollReset}),[]);const n=o.useNavigate();const v=s.default.useMemo(()=>p?u.routerHistory:{replace:(t,r)=>n(t,{...a,...r}),push:(t,r)=>n(t,{...a,...r})},[n]);const[c]=o.useSearchParams();const d=o.useHref("/");const{state:U,updateState:i,updateUrl:f,getState:m,reset:S}=g.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,c.entries())),d);const b=s.default.useCallback((t,r)=>f(t,{...a,...r}),[f]);s.default.useEffect(()=>{i(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...c.entries()]),e))))},[c]);const q=s.default.useCallback(t=>{S({...a,...t})},[S]);return{setState:i,setUrl:b,urlState:U,reset:q,getState:m}}const h={replace:true,preventScrollReset:true};exports.useUrlState=R;
1
+ "use strict";var P=require("react");var o=require("react-router");var _=require("../../parseSPObj.js");var k=require("../../useUrlStateBase/useUrlStateBase.js");var u=require("../../utils.js");function R(e){return e&&e.__esModule?e:{default:e}}var a=R(P);function h(e,l){const S=l?.useHistory;const s=a.default.useMemo(()=>({...j,replace:l?.replace,preventScrollReset:l?.preventScrollReset}),[]);const n=o.useNavigate();const d=a.default.useMemo(()=>S?u.routerHistory:{replace:(t,r)=>n(t,{...s,...r}),push:(t,r)=>n(t,{...s,...r})},[n]);const[c]=o.useSearchParams();const v=o.useHref("/");const{state:U,updateState:i,updateUrl:f,getState:m,reset:p,pendingUrlUpdate:b}=k.useUrlStateBase(e,d,({parse:t})=>t(u.filterUnknownParamsClient(e,c.entries())),v);const g=a.default.useCallback((t,r)=>f(t,{...s,...r}),[f]);a.default.useEffect(()=>{if(!b()){i(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...c.entries()]),e))))}},[c]);const q=a.default.useCallback(t=>{p({...s,...t})},[p]);return{setState:i,setUrl:g,urlState:U,reset:q,getState:m}}const j={replace:true,preventScrollReset:true};exports.useUrlState=h;
@@ -1 +1 @@
1
- import s from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"react-router";import{parseSPObj as h}from"../../parseSPObj.mjs";import{useUrlStateBase as C}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as H,filterUnknownParamsClient as R,assignValue as d,filterUnknownParams as j}from"../../utils.mjs";function w(t,a){const i=a?.useHistory;const o=s.useMemo(()=>({...y,replace:a?.replace,preventScrollReset:a?.preventScrollReset}),[]);const n=g();const m=s.useMemo(()=>i?H:{replace:(e,r)=>n(e,{...o,...r}),push:(e,r)=>n(e,{...o,...r})},[n]);const[c]=k();const f=P("/");const{state:S,updateState:l,updateUrl:u,getState:U,reset:p}=C(t,m,({parse:e})=>e(R(t,c.entries())),f);const b=s.useCallback((e,r)=>u(e,{...o,...r}),[u]);s.useEffect(()=>{l(d(t,j(t,h(Object.fromEntries([...c.entries()]),t))))},[c]);const v=s.useCallback(e=>{p({...o,...e})},[p]);return{setState:l,setUrl:b,urlState:S,reset:v,getState:U}}const y={replace:true,preventScrollReset:true};export{w as useUrlState};
1
+ import s from"react";import{useNavigate as d,useSearchParams as k,useHref as P}from"react-router";import{parseSPObj as h}from"../../parseSPObj.mjs";import{useUrlStateBase as C}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as H,filterUnknownParamsClient as R,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(t,o){const i=o?.useHistory;const a=s.useMemo(()=>({...E,replace:o?.replace,preventScrollReset:o?.preventScrollReset}),[]);const n=d();const m=s.useMemo(()=>i?H:{replace:(e,r)=>n(e,{...a,...r}),push:(e,r)=>n(e,{...a,...r})},[n]);const[l]=k();const f=P("/");const{state:S,updateState:c,updateUrl:u,getState:U,reset:p,pendingUrlUpdate:g}=C(t,m,({parse:e})=>e(R(t,l.entries())),f);const b=s.useCallback((e,r)=>u(e,{...a,...r}),[u]);s.useEffect(()=>{if(!g()){c(j(t,w(t,h(Object.fromEntries([...l.entries()]),t))))}},[l]);const v=s.useCallback(e=>{p({...a,...e})},[p]);return{setState:c,setUrl:b,urlState:S,reset:v,getState:U}}const E={replace:true,preventScrollReset:true};export{y as useUrlState};
@@ -75,9 +75,9 @@ export declare function useUrlState<T extends JSONCompatible>(defaultState: T, p
75
75
  [key: string]: unknown;
76
76
  }) => void;
77
77
  };
78
- interface Params extends NavigateOptions {
78
+ export declare const defaultOpts: NavigateOptions;
79
+ export interface Params extends NavigateOptions {
79
80
  useHistory?: boolean;
80
81
  searchParams?: object;
81
82
  replace?: boolean;
82
83
  }
83
- export {};
@@ -1 +1 @@
1
- "use strict";var P=require("react");var c=require("react-router-dom");var _=require("../../parseSPObj.js");var g=require("../../useUrlStateBase/useUrlStateBase.js");var u=require("../../utils.js");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(P);function R(e,l){const p=l?.useHistory;const a=s.default.useMemo(()=>({...h,replace:l?.replace,preventScrollReset:l?.preventScrollReset}),[]);const n=c.useNavigate();const v=s.default.useMemo(()=>p?u.routerHistory:{replace:(t,r)=>n(t,{...a,...r}),push:(t,r)=>n(t,{...a,...r})},[n]);const[o]=c.useSearchParams();const d=c.useHref("/");const{state:U,updateState:i,updateUrl:f,getState:m,reset:S}=g.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,o.entries())),d);const b=s.default.useCallback((t,r)=>f(t,{...a,...r}),[f]);s.default.useEffect(()=>{i(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...o.entries()]),e))))},[o]);const q=s.default.useCallback(t=>{S({...a,...t})},[S]);return{setState:i,setUrl:b,urlState:U,reset:q,getState:m}}const h={replace:true,preventScrollReset:true};exports.useUrlState=R;
1
+ "use strict";var O=require("react");var o=require("react-router-dom");var P=require("../../parseSPObj.js");var _=require("../../useUrlStateBase/useUrlStateBase.js");var l=require("../../utils.js");function k(t){return t&&t.__esModule?t:{default:t}}var a=k(O);function j(t,r){const d=r?.useHistory;const u=a.default.useMemo(()=>{const e={...S};if(r?.replace!==void 0)e.replace=r.replace;if(r?.preventScrollReset!==void 0)e.preventScrollReset=r.preventScrollReset;return e},[r?.replace,r?.preventScrollReset]);const n=o.useNavigate();const v=a.default.useMemo(()=>d?l.routerHistory:{replace:(e,s)=>n(e,{...u,...s}),push:(e,s)=>n(e,{...u,...s})},[n]);const[c]=o.useSearchParams();const U=o.useHref("/");const{state:m,updateState:i,updateUrl:p,getState:R,reset:f,pendingUrlUpdate:b}=_.useUrlStateBase(t,v,({parse:e})=>e(l.filterUnknownParamsClient(t,c.entries())),U);const g=a.default.useCallback((e,s)=>p(e,{...u,...s}),[p]);a.default.useEffect(()=>{if(!b()){i(l.assignValue(t,l.filterUnknownParams(t,P.parseSPObj(Object.fromEntries([...c.entries()]),t))))}},[c]);const q=a.default.useCallback(e=>{f({...u,...e})},[f]);return{setState:i,setUrl:g,urlState:m,reset:q,getState:R}}const S={replace:true,preventScrollReset:true};exports.defaultOpts=S;exports.useUrlState=j;
@@ -1 +1 @@
1
- import s from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"react-router-dom";import{parseSPObj as h}from"../../parseSPObj.mjs";import{useUrlStateBase as C}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as H,filterUnknownParamsClient as R,assignValue as d,filterUnknownParams as j}from"../../utils.mjs";function w(t,a){const i=a?.useHistory;const o=s.useMemo(()=>({...y,replace:a?.replace,preventScrollReset:a?.preventScrollReset}),[]);const n=g();const m=s.useMemo(()=>i?H:{replace:(e,r)=>n(e,{...o,...r}),push:(e,r)=>n(e,{...o,...r})},[n]);const[c]=k();const f=P("/");const{state:S,updateState:l,updateUrl:u,getState:U,reset:p}=C(t,m,({parse:e})=>e(R(t,c.entries())),f);const b=s.useCallback((e,r)=>u(e,{...o,...r}),[u]);s.useEffect(()=>{l(d(t,j(t,h(Object.fromEntries([...c.entries()]),t))))},[c]);const v=s.useCallback(e=>{p({...o,...e})},[p]);return{setState:l,setUrl:b,urlState:S,reset:v,getState:U}}const y={replace:true,preventScrollReset:true};export{w as useUrlState};
1
+ import o from"react";import{useNavigate as b,useSearchParams as k,useHref as P}from"react-router-dom";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(r,t){const f=t?.useHistory;const a=o.useMemo(()=>{const e={...i};if(t?.replace!==void 0)e.replace=t.replace;if(t?.preventScrollReset!==void 0)e.preventScrollReset=t.preventScrollReset;return e},[t?.replace,t?.preventScrollReset]);const n=b();const m=o.useMemo(()=>f?O:{replace:(e,s)=>n(e,{...a,...s}),push:(e,s)=>n(e,{...a,...s})},[n]);const[l]=k();const S=P("/");const{state:v,updateState:c,updateUrl:p,getState:U,reset:u,pendingUrlUpdate:d}=H(r,m,({parse:e})=>e(h(r,l.entries())),S);const R=o.useCallback((e,s)=>p(e,{...a,...s}),[p]);o.useEffect(()=>{if(!d()){c(j(r,w(r,C(Object.fromEntries([...l.entries()]),r))))}},[l]);const g=o.useCallback(e=>{u({...a,...e})},[u]);return{setState:c,setUrl:R,urlState:v,reset:g,getState:U}}const i={replace:true,preventScrollReset:true};export{i as defaultOpts,y as useUrlState};
@@ -75,9 +75,9 @@ export declare function useUrlState<T extends JSONCompatible>(defaultState: T, p
75
75
  [key: string]: unknown;
76
76
  }) => void;
77
77
  };
78
- interface Params extends NavigateOptions {
78
+ export declare const defaultOpts: NavigateOptions;
79
+ export interface Params extends NavigateOptions {
79
80
  useHistory?: boolean;
80
81
  searchParams?: object;
81
82
  replace?: boolean;
82
83
  }
83
- export {};
@@ -1 +1 @@
1
- "use strict";var P=require("react");var o=require("@remix-run/react");var _=require("../../parseSPObj.js");var g=require("../../useUrlStateBase/useUrlStateBase.js");var u=require("../../utils.js");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(P);function h(e,l){const p=l?.useHistory;const a=s.default.useMemo(()=>({...j,replace:l?.replace,preventScrollReset:l?.preventScrollReset}),[]);const n=o.useNavigate();const v=s.default.useMemo(()=>p?u.routerHistory:{replace:(t,r)=>n(t,{...a,...r}),push:(t,r)=>n(t,{...a,...r})},[n]);const[c]=o.useSearchParams();const d=o.useHref("/");const{state:U,updateState:i,updateUrl:f,getState:m,reset:S}=g.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,c.entries())),d);const b=s.default.useCallback((t,r)=>f(t,{...a,...r}),[f]);s.default.useEffect(()=>{i(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...c.entries()]),e))))},[c]);const q=s.default.useCallback(t=>{S({...a,...t})},[S]);return{setState:i,setUrl:b,urlState:U,reset:q,getState:m}}const j={replace:true,preventScrollReset:true};exports.useUrlState=h;
1
+ "use strict";var O=require("react");var i=require("@remix-run/react");var P=require("../../parseSPObj.js");var _=require("../../useUrlStateBase/useUrlStateBase.js");var u=require("../../utils.js");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(O);function j(e,r){const d=r?.useHistory;const l=s.default.useMemo(()=>({...n,replace:r?.replace??n.replace,preventScrollReset:r?.preventScrollReset??n.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const c=i.useNavigate();const v=s.default.useMemo(()=>d?u.routerHistory:{replace:(t,a)=>c(t,{...l,...a}),push:(t,a)=>c(t,{...l,...a})},[c]);const[o]=i.useSearchParams();const U=i.useHref("/");const{state:m,updateState:p,updateUrl:f,getState:b,reset:S,pendingUrlUpdate:R}=_.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,o.entries())),U);const g=s.default.useCallback((t,a)=>f(t,{...l,...a}),[f]);s.default.useEffect(()=>{if(!R()){p(u.assignValue(e,u.filterUnknownParams(e,P.parseSPObj(Object.fromEntries([...o.entries()]),e))))}},[o]);const q=s.default.useCallback(t=>{S({...l,...t})},[S]);return{setState:p,setUrl:g,urlState:m,reset:q,getState:b}}const n={replace:true,preventScrollReset:true};exports.defaultOpts=n;exports.useUrlState=j;
@@ -1 +1 @@
1
- import s from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"@remix-run/react";import{parseSPObj as h}from"../../parseSPObj.mjs";import{useUrlStateBase as C}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as H,filterUnknownParamsClient as R,assignValue as d,filterUnknownParams as j}from"../../utils.mjs";function w(t,a){const i=a?.useHistory;const o=s.useMemo(()=>({...y,replace:a?.replace,preventScrollReset:a?.preventScrollReset}),[]);const n=g();const m=s.useMemo(()=>i?H:{replace:(e,r)=>n(e,{...o,...r}),push:(e,r)=>n(e,{...o,...r})},[n]);const[c]=k();const f=P("/");const{state:S,updateState:l,updateUrl:u,getState:U,reset:p}=C(t,m,({parse:e})=>e(R(t,c.entries())),f);const b=s.useCallback((e,r)=>u(e,{...o,...r}),[u]);s.useEffect(()=>{l(d(t,j(t,h(Object.fromEntries([...c.entries()]),t))))},[c]);const v=s.useCallback(e=>{p({...o,...e})},[p]);return{setState:l,setUrl:b,urlState:S,reset:v,getState:U}}const y={replace:true,preventScrollReset:true};export{w as useUrlState};
1
+ import a from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"@remix-run/react";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(t,r){const m=r?.useHistory;const o=a.useMemo(()=>({...l,replace:r?.replace??l.replace,preventScrollReset:r?.preventScrollReset??l.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const n=g();const f=a.useMemo(()=>m?O:{replace:(e,s)=>n(e,{...o,...s}),push:(e,s)=>n(e,{...o,...s})},[n]);const[c]=k();const S=P("/");const{state:U,updateState:p,updateUrl:u,getState:v,reset:i,pendingUrlUpdate:R}=H(t,f,({parse:e})=>e(h(t,c.entries())),S);const b=a.useCallback((e,s)=>u(e,{...o,...s}),[u]);a.useEffect(()=>{if(!R()){p(j(t,w(t,C(Object.fromEntries([...c.entries()]),t))))}},[c]);const d=a.useCallback(e=>{i({...o,...e})},[i]);return{setState:p,setUrl:b,urlState:U,reset:d,getState:v}}const l={replace:true,preventScrollReset:true};export{l as defaultOpts,y as useUrlState};
@@ -1 +1 @@
1
- "use strict";var f=require("react");function u(e){return e&&e.__esModule?e:{default:e}}var t=u(f);const s=t.default.useInsertionEffect||t.default.useEffect;exports.useInsertionEffect=s;
1
+ "use strict";var f=require("react");function u(e){return e&&e.__esModule?e:{default:e}}var t=u(f);const s=t.default?.useInsertionEffect||t.default.useEffect;exports.useInsertionEffect=s;
@@ -1 +1 @@
1
- import e from"react";const t=e.useInsertionEffect||e.useEffect;export{t as useInsertionEffect};
1
+ import e from"react";const t=e?.useInsertionEffect||e.useEffect;export{t as useInsertionEffect};
@@ -1 +1 @@
1
- "use strict";var b=require("react");var s=require("../subscribers.js");var M=require("../useInsertionEffect.js");var i=require("../utils.js");function g(u){return u&&u.__esModule?u:{default:u}}var n=g(b);function v(u,a){const t=n.default.useRef(u);const[o,f]=n.default.useState(()=>{if(i.isSSR){return a?a?.():t.current}const e=s.stateMap.get(t.current);if(!e){const r=a?.()||t.current;s.stateMap.set(t.current,r);return r}else{return e}});const l=n.default.useCallback(e=>{const r=s.stateMap.get(t.current);const S=typeof e==="function";const c=S?e(r,u):{...r,...e};if(i.isEqual(r,c))return void 0;s.stateMap.set(t.current,c);s.subscribers.get(t.current).forEach(p=>p())},[]);M.useInsertionEffect(()=>{const e=()=>{f(s.stateMap.get(t.current)||t.current)};const r=s.subscribers.add(t.current,e);return()=>{r()}},[]);const d=n.default.useCallback(()=>s.stateMap.get(t.current)||t.current,[]);return{state:o,getState:d,setState:l}}exports.useSharedState=v;
1
+ "use strict";var b=require("react");var r=require("../subscribers.js");var M=require("../useInsertionEffect.js");var i=require("../utils.js");function g(u){return u&&u.__esModule?u:{default:u}}var n=g(b);function v(u,a){const t=n.default.useRef(u);const[f,o]=n.default.useState(()=>{if(i.isSSR){return a?a?.():t.current}const e=r.stateMap.get(t.current);if(!e){const s=a?.()||t.current;r.stateMap.set(t.current,s);return s}else{return e}});const l=n.default.useCallback(e=>{const s=r.stateMap.get(t.current);const S=typeof e==="function";const c=S?e(s,u):{...s,...e};if(i.isEqual(s,c))return void 0;r.stateMap.set(t.current,c);r.subscribers.get(t.current).forEach(p=>p())},[]);M.useInsertionEffect(()=>{const e=()=>{o(r.stateMap.get(t.current)||t.current)};return r.subscribers.add(t.current,e)},[]);const d=n.default.useCallback(()=>r.stateMap.get(t.current)||t.current,[]);return{state:f,getState:d,setState:l}}exports.useSharedState=v;
@@ -1 +1 @@
1
- import c from"react";import{stateMap as n,subscribers as a}from"../subscribers.mjs";import{useInsertionEffect as l}from"../useInsertionEffect.mjs";import{isSSR as b,isEqual as d}from"../utils.mjs";function E(o,s){const t=c.useRef(o);const[f,i]=c.useState(()=>{if(b){return s?s?.():t.current}const e=n.get(t.current);if(!e){const r=s?.()||t.current;n.set(t.current,r);return r}else{return e}});const m=c.useCallback(e=>{const r=n.get(t.current);const S=typeof e==="function";const u=S?e(r,o):{...r,...e};if(d(r,u))return void 0;n.set(t.current,u);a.get(t.current).forEach(g=>g())},[]);l(()=>{const e=()=>{i(n.get(t.current)||t.current)};const r=a.add(t.current,e);return()=>{r()}},[]);const p=c.useCallback(()=>n.get(t.current)||t.current,[]);return{state:f,getState:p,setState:m}}export{E as useSharedState};
1
+ import c from"react";import{stateMap as n,subscribers as a}from"../subscribers.mjs";import{useInsertionEffect as l}from"../useInsertionEffect.mjs";import{isSSR as b,isEqual as d}from"../utils.mjs";function E(u,s){const t=c.useRef(u);const[f,i]=c.useState(()=>{if(b){return s?s?.():t.current}const e=n.get(t.current);if(!e){const r=s?.()||t.current;n.set(t.current,r);return r}else{return e}});const m=c.useCallback(e=>{const r=n.get(t.current);const S=typeof e==="function";const o=S?e(r,u):{...r,...e};if(d(r,o))return void 0;n.set(t.current,o);a.get(t.current).forEach(g=>g())},[]);l(()=>{const e=()=>{i(n.get(t.current)||t.current)};return a.add(t.current,e)},[]);const p=c.useCallback(()=>n.get(t.current)||t.current,[]);return{state:f,getState:p,setState:m}}export{E as useSharedState};
@@ -1,38 +1,5 @@
1
1
  import { useUrlEncode } from "../useUrlEncode";
2
2
  import { type JSONCompatible, type Router } from "../utils";
3
- /**
4
- * A custom React hook to create custom hooks.
5
- *
6
- * @template T extends JSONCompatible
7
- * @param {T} defaultState - An object representing the default state values.
8
- * @param {Router} router - Router object with [push] and [replace] methods.
9
- * @param {Function} [getInitialState] - Optional function to get the initial state, passes `parse`, and `filterUnknownParams` helpers
10
- * @returns {Object} [result] State and callbacks
11
- * @returns {Object} [result.state] - current state object
12
- * @returns {Function} [result.updateUrl] - function to update state and url
13
- * @returns {Function} [result.updateState] - function to update state only
14
- * @returns {Function} [result.reset] - function to reset state and url to default
15
- *
16
- *
17
- * * Example:
18
- * ```ts
19
- * export const form = { name: '' };
20
- * const router = { push: () => {}, replace: () => {} };
21
- * const { state, updateState, updateUrl, reset } = useUrlStateBase(form, router, ({ parse, filterClientSP }) =>
22
- * isSSR() ? getServerState() : getClientState()
23
- * );
24
- *
25
- * updateState({ name: 'John' });
26
- * updateState((curr, initialState) => ({ ...curr, name: 'John' }));
27
- * updateUrl({ name: 'John' }, { replace: true });
28
- * updateUrl(curr => ({ ...curr, name: 'John' }), { replace: true });
29
- * reset()
30
- * reset({ replace: true })
31
- *
32
- * ```
33
- *
34
- * * Docs {@link https://github.com/asmyshlyaev177/state-in-url/tree/integrations/packages/urlstate/useUrlStateBase}
35
- */
36
3
  export declare function useUrlStateBase<T extends JSONCompatible>(defaultState: T, router: Router, getInitialState?: ({ parse, }: {
37
4
  parse: ReturnType<typeof useUrlEncode<T>>["parse"];
38
5
  }) => T, basename?: string): {
@@ -41,6 +8,7 @@ export declare function useUrlStateBase<T extends JSONCompatible>(defaultState:
41
8
  state: T;
42
9
  reset: (options?: Options) => void;
43
10
  getState: () => T;
11
+ pendingUrlUpdate: () => boolean;
44
12
  };
45
13
  interface OptionsObject {
46
14
  [key: string]: unknown;
@@ -1 +1 @@
1
- "use strict";var y=require("react");var R=require("../constants/constants.js");var T=require("../useInsertionEffect.js");var _=require("../useSharedState/useSharedState.js");var B=require("../useUrlEncode/useUrlEncode.js");var L=require("../utils.js");function P(e){return e&&e.__esModule?e:{default:e}}var u=P(y);function b(e,t,i,l){const{parse:s,stringify:o}=B.useUrlEncode(e);const{state:f,getState:a,setState:r}=_.useSharedState(e,()=>i?.({parse:s})||e);const d=u.default.useRef(void 0);T.useInsertionEffect(()=>{const n=()=>{const p=s(L.filterUnknownParamsClient(e,I()));r(p)};window.addEventListener(q,n);return()=>{window.removeEventListener(q,n);clearTimeout(d.current)}},[r]);const w=u.default.useRef([]);const h=u.default.useCallback((n,p)=>{const S=typeof n==="function"?n(a(),e):{...a(),...n};const v=o(S,C(e));const m=M(window.location.pathname,l);const U=`${m}${v.length?"?":""}${v}${window.location.hash}`;const $=`${m}${window.location.search}${window.location.hash}`;if(U===$)return;r(S);const{replace:g,...k}=p||{};w.current.push([g?"replace":"push",U,k]);clearTimeout(d.current);const c=w.current.filter(Boolean).at(-1);if(c){queueMicrotask(()=>{d.current=setTimeout(()=>{w.current=[];t[c[0]](c[1],c[2])},R.TIMEOUT)})}},[t,o,a]);const E=u.default.useCallback(n=>{r(e);h(e,n)},[h,r]);return{updateState:r,updateUrl:h,state:f,reset:E,getState:a}}function C(e){const t=Object.keys(e);const i=window.location.search;const l=new URLSearchParams(i);const s=new URLSearchParams;for(const[o,f]of l){!t.includes(o)&&s.set(o,f)}return s}const q="popstate";function I(){return typeof window!=="undefined"&&window.location.search||""}function M(e,t){if(!t||t==="/"){return e}return e.slice(t.length)}exports.useUrlStateBase=b;
1
+ "use strict";var k=require("react");var _=require("../constants/constants.js");var y=require("../useInsertionEffect.js");var L=require("../useSharedState/useSharedState.js");var P=require("../useUrlEncode/useUrlEncode.js");var c=require("../utils.js");function T(t){return t&&t.__esModule?t:{default:t}}var U=T(k);let i;let n;function b(t,e,l,d){const{parse:s,stringify:o}=P.useUrlEncode(t);const{state:f,getState:u,setState:a}=L.useSharedState(t,()=>l?.({parse:s})||t);y.useInsertionEffect(()=>{const r=()=>{a(s(c.filterUnknownParamsClient(t,c.getSearch())))};window.addEventListener(c.popstateEv,r);return()=>{window.removeEventListener(c.popstateEv,r)}},[]);const p=U.default.useCallback((r,E)=>{const h=typeof r==="function"?r(u(),t):{...u(),...r};const w=o(h,C(t));const v=I(window.location.pathname,d);const S=`${v}${w.length?"?":""}${w}${window.location.hash}`;const $=`${v}${window.location.search}${window.location.hash}`;if(S===$)return;a(h);const{replace:g,...q}=E||{};clearTimeout(i);i=void 0;n={router:e,method:g?"replace":"push",url:S,opts:q};i=setTimeout(()=>{if(n){n.router[n.method](n.url,n.opts);n=void 0}i=void 0},_.TIMEOUT)},[e,o,u]);const m=U.default.useCallback(r=>{a(t);p(t,r)},[p,a]);return{updateState:a,updateUrl:p,state:f,reset:m,getState:u,pendingUrlUpdate:()=>i!==void 0}}function C(t){const e=Object.keys(t);const l=window.location.search;const d=new URLSearchParams(l);const s=new URLSearchParams;for(const[o,f]of d){!e.includes(o)&&s.set(o,f)}return s}function I(t,e){if(!e||e==="/"){return t}return t.slice(e.length)}exports.useUrlStateBase=b;
@@ -1 +1 @@
1
- import i from"react";import{TIMEOUT as T}from"../constants/constants.mjs";import{useInsertionEffect as v}from"../useInsertionEffect.mjs";import{useSharedState as L}from"../useSharedState/useSharedState.mjs";import{useUrlEncode as P}from"../useUrlEncode/useUrlEncode.mjs";import{filterUnknownParamsClient as b}from"../utils.mjs";function B(t,e,u,f){const{parse:r,stringify:s}=P(t);const{state:l,getState:c,setState:o}=L(t,()=>u?.({parse:r})||t);const m=i.useRef(void 0);v(()=>{const n=()=>{const d=r(b(t,O()));o(d)};window.addEventListener(g,n);return()=>{window.removeEventListener(g,n);clearTimeout(m.current)}},[o]);const w=i.useRef([]);const p=i.useCallback((n,d)=>{const h=typeof n==="function"?n(c(),t):{...c(),...n};const S=s(h,C(t));const $=q(window.location.pathname,f);const U=`${$}${S.length?"?":""}${S}${window.location.hash}`;const E=`${$}${window.location.search}${window.location.hash}`;if(U===E)return;o(h);const{replace:y,...R}=d||{};w.current.push([y?"replace":"push",U,R]);clearTimeout(m.current);const a=w.current.filter(Boolean).at(-1);if(a){queueMicrotask(()=>{m.current=setTimeout(()=>{w.current=[];e[a[0]](a[1],a[2])},T)})}},[e,s,c]);const k=i.useCallback(n=>{o(t);p(t,n)},[p,o]);return{updateState:o,updateUrl:p,state:l,reset:k,getState:c}}function C(t){const e=Object.keys(t);const u=window.location.search;const f=new URLSearchParams(u);const r=new URLSearchParams;for(const[s,l]of f){!e.includes(s)&&r.set(s,l)}return r}const g="popstate";function O(){return typeof window!=="undefined"&&window.location.search||""}function q(t,e){if(!e||e==="/"){return t}return t.slice(e.length)}export{B as useUrlStateBase};
1
+ import S from"react";import{TIMEOUT as y}from"../constants/constants.mjs";import{useInsertionEffect as L}from"../useInsertionEffect.mjs";import{useSharedState as P}from"../useSharedState/useSharedState.mjs";import{useUrlEncode as T}from"../useUrlEncode/useUrlEncode.mjs";import{popstateEv as U,filterUnknownParamsClient as b,getSearch as C}from"../utils.mjs";let i;let n;function R(t,e,l,u){const{parse:r,stringify:s}=T(t);const{state:d,getState:c,setState:a}=P(t,()=>l?.({parse:r})||t);L(()=>{const o=()=>{a(r(b(t,C())))};window.addEventListener(U,o);return()=>{window.removeEventListener(U,o)}},[]);const p=S.useCallback((o,v)=>{const m=typeof o==="function"?o(c(),t):{...c(),...o};const f=s(m,I(t));const w=O(window.location.pathname,u);const h=`${w}${f.length?"?":""}${f}${window.location.hash}`;const g=`${w}${window.location.search}${window.location.hash}`;if(h===g)return;a(m);const{replace:E,...k}=v||{};clearTimeout(i);i=void 0;n={router:e,method:E?"replace":"push",url:h,opts:k};i=setTimeout(()=>{if(n){n.router[n.method](n.url,n.opts);n=void 0}i=void 0},y)},[e,s,c]);const $=S.useCallback(o=>{a(t);p(t,o)},[p,a]);return{updateState:a,updateUrl:p,state:d,reset:$,getState:c,pendingUrlUpdate:()=>i!==void 0}}function I(t){const e=Object.keys(t);const l=window.location.search;const u=new URLSearchParams(l);const r=new URLSearchParams;for(const[s,d]of u){!e.includes(s)&&r.set(s,d)}return r}function O(t,e){if(!e||e==="/"){return t}return t.slice(e.length)}export{R as useUrlStateBase};
package/dist/utils.d.ts CHANGED
@@ -11,11 +11,11 @@ export declare const typeOf: (val: unknown) => Type;
11
11
  export declare const isPrimitive: (val: unknown) => val is Simple;
12
12
  export type Simple = string | Date | boolean | number | null | undefined | Function | symbol;
13
13
  export declare const isSSR: boolean;
14
- export type JSON = null | boolean | Date | number | string | {
14
+ export type JSON = null | boolean | Date | number | string | undefined | {
15
15
  [prop: string]: JSON | JSON[];
16
16
  };
17
17
  export type JSONCompatible = {
18
- [prop: string]: JSON | JSON[];
18
+ [prop: string]: JSON | JSON[] | undefined;
19
19
  };
20
20
  export declare const getParams: (strOrSearchParams?: string | URLSearchParams) => URLSearchParams;
21
21
  export type UnknownObj = object | {
@@ -32,3 +32,5 @@ export interface Router {
32
32
  }
33
33
  export declare const routerHistory: Router;
34
34
  export declare const isSafari: boolean;
35
+ export declare const popstateEv = "popstate";
36
+ export declare function getSearch(): string;
package/dist/utils.js CHANGED
@@ -1 +1 @@
1
- "use strict";const c=n=>{const t=typeof n;const r=n===null;const e=Array.isArray(n);const s=n instanceof Date;const o=!r&&!s&&!e&&t==="object";return r&&"null"||s&&"date"||e&&"array"||o&&"object"||t};const a=typeof window==="undefined";const f=n=>new URLSearchParams(typeof n==="string"?l(n):n?.toString?.()||"");const l=n=>n.split("?")?.[1]||n||"";const u=(n,t)=>JSON.stringify(n)===JSON.stringify(t);function w(n,t){const r=new URLSearchParams;const e=i(n,[...new URLSearchParams(t||"").entries()]);for(const[s,o]of e){r.set(s,o)}return r.toString()}function y(n,t){return Object.fromEntries(i(n,Object.entries(t||{})))}function i(n,t){const r=Object.keys(n);const e=[];for(let s=0;s<t.length;s++){if(r.includes(t[s]?.[0])){e.push([t[s][0].replace(/\+/g," "),t[s][1]])}}return e}function S(n,t){const r=Object.assign({},n);for(const[e]of Object.entries(n)){const s=e;const o=t[s]!==void 0;r[s]=o?t[s]:n[s]}return r}const g={push:n=>{window&&window.history.pushState(null,"",n)},replace:n=>{window&&window.history.replaceState(null,"",n)}};const p=/apple/i.test(!a&&navigator?.userAgent||"");exports.assignValue=S;exports.filterUnknown=i;exports.filterUnknownParams=y;exports.filterUnknownParamsClient=w;exports.getParams=f;exports.isEqual=u;exports.isSSR=a;exports.isSafari=p;exports.routerHistory=g;exports.typeOf=c;
1
+ "use strict";const c=n=>{const t=typeof n;const s=n===null;const r=Array.isArray(n);const e=n instanceof Date;const o=!s&&!e&&!r&&t==="object";return s&&"null"||e&&"date"||r&&"array"||o&&"object"||t};const i=typeof window==="undefined";const f=n=>new URLSearchParams(typeof n==="string"?n.split("?")?.[1]||n:n?.toString?.()||"");const u=(n,t)=>JSON.stringify(n)===JSON.stringify(t);function l(n,t){const s=new URLSearchParams;const r=a(n,[...new URLSearchParams(t||"").entries()]);for(const[e,o]of r){s.set(e,o)}return s.toString()}function p(n,t){return Object.fromEntries(a(n,Object.entries(t||{})))}function a(n,t){const s=Object.keys(n);const r=[];for(let e=0;e<t.length;e++){if(s.includes(t[e]?.[0])){r.push([t[e][0].replace(/\+/g," "),t[e][1]])}}return r}function w(n,t){const s=Object.assign({},n);for(const[r]of Object.entries(n)){const e=r;const o=t[e]!==void 0;s[e]=o?t[e]:n[e]}return s}const y={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const S=/apple/i.test(!i&&navigator?.userAgent||"");const g="popstate";function d(){return i?"":window.location.search}exports.assignValue=w;exports.filterUnknown=a;exports.filterUnknownParams=p;exports.filterUnknownParamsClient=l;exports.getParams=f;exports.getSearch=d;exports.isEqual=u;exports.isSSR=i;exports.isSafari=S;exports.popstateEv=g;exports.routerHistory=y;exports.typeOf=c;
package/dist/utils.mjs CHANGED
@@ -1 +1 @@
1
- const a=n=>{const t=typeof n;const s=n===null;const r=Array.isArray(n);const o=n instanceof Date;const e=!s&&!o&&!r&&t==="object";return s&&"null"||o&&"date"||r&&"array"||e&&"object"||t};const c=typeof window==="undefined";const f=n=>new URLSearchParams(typeof n==="string"?l(n):n?.toString?.()||"");const l=n=>n.split("?")?.[1]||n||"";const u=(n,t)=>JSON.stringify(n)===JSON.stringify(t);function w(n,t){const s=new URLSearchParams;const r=i(n,[...new URLSearchParams(t||"").entries()]);for(const[o,e]of r){s.set(o,e)}return s.toString()}function p(n,t){return Object.fromEntries(i(n,Object.entries(t||{})))}function i(n,t){const s=Object.keys(n);const r=[];for(let o=0;o<t.length;o++){if(s.includes(t[o]?.[0])){r.push([t[o][0].replace(/\+/g," "),t[o][1]])}}return r}function y(n,t){const s=Object.assign({},n);for(const[r]of Object.entries(n)){const o=r;const e=t[o]!==void 0;s[o]=e?t[o]:n[o]}return s}const g={push:n=>{window&&window.history.pushState(null,"",n)},replace:n=>{window&&window.history.replaceState(null,"",n)}};const S=/apple/i.test(!c&&navigator?.userAgent||"");export{y as assignValue,i as filterUnknown,p as filterUnknownParams,w as filterUnknownParamsClient,f as getParams,u as isEqual,c as isSSR,S as isSafari,g as routerHistory,a as typeOf};
1
+ const a=n=>{const t=typeof n;const o=n===null;const r=Array.isArray(n);const e=n instanceof Date;const s=!o&&!e&&!r&&t==="object";return o&&"null"||e&&"date"||r&&"array"||s&&"object"||t};const i=typeof window==="undefined";const f=n=>new URLSearchParams(typeof n==="string"?n.split("?")?.[1]||n:n?.toString?.()||"");const u=(n,t)=>JSON.stringify(n)===JSON.stringify(t);function l(n,t){const o=new URLSearchParams;const r=c(n,[...new URLSearchParams(t||"").entries()]);for(const[e,s]of r){o.set(e,s)}return o.toString()}function p(n,t){return Object.fromEntries(c(n,Object.entries(t||{})))}function c(n,t){const o=Object.keys(n);const r=[];for(let e=0;e<t.length;e++){if(o.includes(t[e]?.[0])){r.push([t[e][0].replace(/\+/g," "),t[e][1]])}}return r}function w(n,t){const o=Object.assign({},n);for(const[r]of Object.entries(n)){const e=r;const s=t[e]!==void 0;o[e]=s?t[e]:n[e]}return o}const d={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const y=/apple/i.test(!i&&navigator?.userAgent||"");const g="popstate";function S(){return i?"":window.location.search}export{w as assignValue,c as filterUnknown,p as filterUnknownParams,l as filterUnknownParamsClient,f as getParams,S as getSearch,u as isEqual,i as isSSR,y as isSafari,g as popstateEv,d as routerHistory,a as typeOf};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "state-in-url",
3
- "version": "6.0.1",
3
+ "version": "6.0.3",
4
4
  "description": "Store state in URL as in object, types and structure are preserved, with TS validation. Same API as React.useState, wthout any hasssle or boilerplate. Next.js@14-15, react-router@6-7, and remix@2.",
5
5
  "homepage": "https://state-in-url.dev",
6
6
  "repository": {