state-jet 2.4.0 → 2.4.1

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("react"),t=require("immer"),r=require("use-sync-external-store/shim");const o=(()=>{if("object"==typeof globalThis&&globalThis)return globalThis;if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;if(typeof global<"u"&&"object"==typeof global&&global)return global;throw new Error("Unable to locate global `this`")})(),s=(e,t)=>{typeof o?.localStorage<"u"&&o.localStorage.setItem(e,JSON.stringify(t))},a=(e,t)=>{if(typeof o?.localStorage<"u"){const r=o.localStorage?.getItem(e);return r?JSON.parse(r):t}return t},n=(e,t)=>{typeof o?.localStorage<"u"&&o.localStorage.setItem(e,(e=>btoa(JSON.stringify(e)))(t))},l=(e,t)=>{if(typeof o?.localStorage<"u"){const r=o.localStorage?.getItem(e);return r?(e=>JSON.parse(atob(e)))(r):t}return t},c={},i={},u={},p=o.__STATE_JET_DEVTOOLS__,f=(e,t)=>{c[e]||(c[e]=[]),void 0===i[e]&&(i[e]=-1),c[e]=c[e].slice(0,i[e]+1),c[e].push(t),i[e]++,p?.updateState&&p.updateState(e,t,[...c[e]])},d=(e,t)=>{u[e]||(u[e]=[]);const r=performance.now();t();const o=performance.now()-r;u[e].push(o),p?.updatePerformance&&p.updatePerformance(e,o)},S=new Set,g=new Map,y=new Map,m={};let w=!1;const h=e=>(g.has(e)||g.set(e,{}),(u,p,h)=>{const v=g.get(e),b=`${e}:${u}`;if(!v[u]){let e=p;h?.persist&&(e=h?.encrypt?l(b,p):a(b,p)),v[u]={value:e,listeners:new Set,...h}}const $=v[u],x=async()=>{w=!1;const e=Array.from(y.entries());y.clear();for(const[r,o]of e){const[e,a]=r.split(":"),l=g.get(e);if(!l)continue;const c=l[a];if(!c)continue;if(S.has(r)){console.warn(`[state-jet] Skipping recursive middleware for: ${r}`);continue}let i=o;const u=c.value;if(m[r]||(m[r]={past:[],present:u,future:[]}),m[r].past.push(u),m[r].present=i,m[r].future=[],S.add(r),c?.middleware)for(const e of c.middleware)try{console.log(`[state-jet] Running middleware for ${r}`);const t=e(r,u,i,(e=>{i=e}));if(void 0!==t)if(t instanceof Promise){const e=await t;void 0!==e&&(i=e)}else i=t}catch(e){console.error(`[state-jet] Middleware error in ${r}:`,e)}S.delete(r),"function"==typeof i?c.value=t.produce(c.value,i):u!==i&&(c.value=i,c.listeners.forEach((e=>e())),f(`${e}.${a}`,i),d(`${e}.${a}`,(()=>{})),c?.persist&&(c?.encrypt?n(r,i):s(r,i)))}};return{useState:()=>r.useSyncExternalStore((e=>($.listeners.add(e),()=>$.listeners.delete(e))),(()=>$.value)),set:async(t,r=!1)=>{const s=$.value,a="function"==typeof t?t(s):t;if(r)return $.value=a,$.listeners.forEach((e=>e())),void f(`${e}.${u}`,a);y.set(b,a),w||(w=!0,$.frameSync&&o?.requestAnimationFrame?await new Promise((e=>o.requestAnimationFrame((()=>e(x()))))):await x())},get:()=>$.value,undo:()=>{m[b]?.past.length&&(m[b].future.unshift(m[b].present),m[b].present=m[b].past.pop(),$.value=m[b].present,$.listeners.forEach((e=>e())),(e=>{if(i[e]>0)i[e]--,c[e][i[e]]})(b),f(`${e}.undo`,m[b].present))},redo:()=>{m[b]?.future.length&&(m[b].past.push(m[b].present),m[b].present=m[b].future.shift(),$.value=m[b].present,$.listeners.forEach((e=>e())),(e=>{if(i[e]<c[e]?.length-1)i[e]++,c[e][i[e]]})(b),f(`${e}.redo`,m[b].present))},clear:()=>{$.value=p,g.clear(),Object.keys(m).forEach((e=>delete m[e])),f(`${e}.clear`,p)}}}),v=(e,t)=>({...e,...t,lastUpdated:Date.now()});exports.derivedState=(e,t)=>()=>{const r=e.map((e=>e.useState()));return t(...r)},exports.mergeCRDT=v,exports.optimisticUpdate=async(e,t,r,o)=>{const s=e.useState(),a=t(s);e.set(a);try{await r()}catch(t){console.error("API request failed:",t),e.set(o?o(s):s)}},exports.restoreEncryptedState=l,exports.restoreState=a,exports.saveEncryptedState=n,exports.saveState=s,exports.syncCRDT=(e,t)=>{const r=t.useState(),o=v(r,e);t.set(o)},exports.useSlice=h,exports.useStateGlobal=(e,t,r)=>h("global")(e,t,r),exports.useStore=t=>{const r=e.useRef(null);return r.current||(r.current=t()),r.current};
1
+ "use strict";var e=require("react"),t=require("immer");const r=(e=>{if(!1===e||null===e)throw new Error("Unable to locate global `this`");return e||globalThis})(),s=(e,t)=>{typeof r?.localStorage<"u"&&r.localStorage.setItem(e,JSON.stringify(t))},o=(e,t)=>{if(typeof r?.localStorage<"u"){const s=r.localStorage?.getItem(e);return s?JSON.parse(s):t}return t},n=(e,t)=>{typeof r?.localStorage<"u"&&r.localStorage.setItem(e,(e=>btoa(JSON.stringify(e)))(t))},a=(e,t)=>{if(typeof r?.localStorage<"u"){const s=r.localStorage?.getItem(e);return s?(e=>JSON.parse(atob(e)))(s):t}return t},u={},c={},l={},i=r.__STATE_JET_DEVTOOLS__,f=(e,t)=>{u[e]||(u[e]=[]),void 0===c[e]&&(c[e]=-1),u[e]=u[e].slice(0,c[e]+1),u[e].push(t),c[e]++,i?.updateState&&i.updateState(e,t,[...u[e]])},p=(e,t)=>{l[e]||(l[e]=[]);const r=performance.now();t();const s=performance.now()-r;l[e].push(s),i?.updatePerformance&&i.updatePerformance(e,s)},S=new Map,d=new Map,v={},g=new Map;let y=!1;function h(r){return S.has(r)||S.set(r,{}),function(l,i,h){const m=S.get(r),w=`${r}:${l}`;if(g.has(w))return g.get(w);m[l]||(m[l]={value:i,listeners:new Set,...h});const x=m[l],E={useState:()=>(e.useEffect((()=>{if(x.persist&&!x.restored){x.restored=!0;const e=x.encrypt?a(w,i):o(w,i);if(e!==i){x.value=e;for(const e of x.listeners)e()}}}),[i]),e.useSyncExternalStore((e=>(x.listeners.add(e),()=>x.listeners.delete(e))),(()=>x.value),(()=>i))),set:async(e,r=!1)=>{if(r){v[w]||(v[w]={past:[],present:x.value,future:[]}),v[w].past.push(x.value),x.value="function"==typeof e?t.produce(x.value,e):e,v[w].present=x.value,v[w].future=[];for(const e of x.listeners)e();f(w,x.value)}else d.set(w,e),y||(y=!0,await async function(){for(;d.size>0;){const e=Array.from(d.entries());d.clear();for(const[r,o]of e){const[e,a]=r.split(":"),u=S.get(e);if(!u)continue;const c=u[a];if(!c)continue;let l=o;const i=c.value;if(v[r]||(v[r]={past:[],present:i,future:[]}),v[r].past.push(i),v[r].present=l,v[r].future=[],c.middleware)for(const e of c.middleware)try{const t=e(r,i,l,(e=>{l=e}));if(t instanceof Promise){const e=await t;void 0!==e&&(l=e)}else void 0!==t&&(l=t)}catch(e){console.error(e)}c.value="function"==typeof l?t.produce(c.value,l):l;for(const e of c.listeners)e();f(r,c.value),p(r,(()=>{})),c.persist&&(c.encrypt?n(r,c.value):s(r,c.value))}}y=!1}())},get:()=>x.value,undo:()=>{const e=v[w];if(e&&e.past.length){e.future.unshift(e.present),e.present=e.past.pop(),x.value=e.present;for(const e of x.listeners)e();(e=>{if(c[e]>0)c[e]--,u[e][c[e]]})(w),f(`${r}.undo`,x.value)}},redo:()=>{const e=v[w];if(e&&e.future.length){e.past.push(e.present),e.present=e.future.shift(),x.value=e.present;for(const e of x.listeners)e();(e=>{if(c[e]<u[e]?.length-1)c[e]++,u[e][c[e]]})(w),f(`${r}.redo`,x.value)}},clear:()=>{x.value=i;for(const e of x.listeners)e();f(`${r}.clear`,i)}};return g.set(w,E),E}}const m=(e,t)=>({...e,...t,lastUpdated:Date.now()});exports.VERSION="2.4.0",exports.derivedState=(e,t)=>()=>{const r=e.map((e=>e.useState()));return t(...r)},exports.mergeCRDT=m,exports.optimisticUpdate=async(e,t,r,s)=>{const o=e.useState(),n=t(o);e.set(n);try{await r()}catch(t){console.error("API request failed:",t),e.set(s?s(o):o)}},exports.restoreEncryptedState=a,exports.restoreState=o,exports.saveEncryptedState=n,exports.saveState=s,exports.syncCRDT=(e,t,r)=>{const s=t();r(m(s,e))},exports.useSlice=h,exports.useStateGlobal=function(e,t,r){return h("global")(e,t,r)},exports.useStore=function(t){const r=e.useRef(null);return r.current||(r.current=t()),r.current};
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- type Middleware<T> = (key: string, prev: T | undefined, next: T | Action<T>, set?: (value: T) => void) => T | void | Promise<void>;
1
+ type Middleware<T> = (_key: string, _prev: T | undefined, _next: T | Action<T>, _set?: (_value: T) => void) => T | void | Promise<T | void>;
2
2
  type Options<T> = {
3
3
  middleware?: Middleware<T | undefined>[];
4
4
  persist?: boolean;
@@ -9,32 +9,18 @@ type Action<T> = {
9
9
  type: string;
10
10
  payload?: T;
11
11
  };
12
- /**
13
- * Creates a global reactive state with middleware, persistence, and batch updates.
14
- */
15
- declare const useStateGlobal: <T>(key: string, initialValue?: T, options?: Options<T>) => {
16
- useState: () => T | undefined;
17
- set: (newValue: T | Action<T | undefined> | ((prev: T | undefined) => T | undefined) | undefined, immediate?: boolean) => Promise<void>;
18
- get: () => T | undefined;
19
- undo: () => void;
20
- redo: () => void;
21
- clear: () => void;
22
- };
23
- /**
24
- * Creates a slice that can hold multiple state values.
25
- */
26
- declare const useSlice: (sliceName: string) => <T>(key: string, initialValue: T, options?: Options<T | undefined>) => {
12
+ interface StoreHook<T> {
27
13
  useState: () => T;
28
- set: (newValue: T | ((prev: T) => T) | Action<T>, immediate?: boolean) => Promise<void>;
14
+ set: (val: T | ((prev: T) => T) | Action<T>, immediate?: boolean) => Promise<void>;
29
15
  get: () => T;
30
16
  undo: () => void;
31
17
  redo: () => void;
32
18
  clear: () => void;
33
- };
34
- /**
35
- * Creates a store with multiple slices.
36
- */
37
- declare const useStore: <T extends Record<string, ReturnType<typeof useSlice>>>(initializer: () => T) => T;
19
+ }
20
+ declare function useSlice(sliceName: string): <T>(key: string, initialValue: T, options?: Options<T | undefined>) => StoreHook<T>;
21
+ declare function useStateGlobal<T>(key: string, initialValue: T, options?: Options<T>): StoreHook<T>;
22
+ declare function useStateGlobal<T>(key: string, initialValue?: T, options?: Options<T>): StoreHook<T | undefined>;
23
+ declare function useStore<T extends Record<string, unknown>>(initializer: () => T): T;
38
24
 
39
25
  declare const saveState: <T>(key: string, value: T) => void;
40
26
  declare const restoreState: <T>(key: string, defaultValue?: T) => any;
@@ -48,13 +34,12 @@ declare const saveEncryptedState: <T>(key: string, value: T) => void;
48
34
  declare const restoreEncryptedState: <T>(key: string, defaultValue?: T) => unknown;
49
35
 
50
36
  declare const mergeCRDT: <T>(localState: T, remoteState: T) => T;
51
- declare const syncCRDT: <T>(remoteState: T, setState: {
52
- useState: () => T;
53
- set: (state: T) => void;
54
- }) => void;
37
+ declare const syncCRDT: <T>(remoteState: T, getStateValue: () => T, set: (state: T) => void) => void;
55
38
 
56
39
  declare const derivedState: <T, D extends {
57
40
  useState: () => unknown;
58
41
  }[]>(dependencies: D, computeFn: (...values: { [K in keyof D]: ReturnType<D[K]["useState"]>; }) => T) => () => T;
59
42
 
60
- export { derivedState, mergeCRDT, optimisticUpdate, restoreEncryptedState, restoreState, saveEncryptedState, saveState, syncCRDT, useSlice, useStateGlobal, useStore };
43
+ declare const VERSION = "2.4.0";
44
+
45
+ export { VERSION, derivedState, mergeCRDT, optimisticUpdate, restoreEncryptedState, restoreState, saveEncryptedState, saveState, syncCRDT, useSlice, useStateGlobal, useStore };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{useRef as e}from"react";import{produce as t}from"immer";import{useSyncExternalStore as r}from"use-sync-external-store/shim";const a=(()=>{if("object"==typeof globalThis&&globalThis)return globalThis;if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;if(typeof global<"u"&&"object"==typeof global&&global)return global;throw new Error("Unable to locate global `this`")})(),s=(e,t)=>{typeof a?.localStorage<"u"&&a.localStorage.setItem(e,JSON.stringify(t))},o=(e,t)=>{if(typeof a?.localStorage<"u"){const r=a.localStorage?.getItem(e);return r?JSON.parse(r):t}return t},n=(e,t)=>{typeof a?.localStorage<"u"&&a.localStorage.setItem(e,(e=>btoa(JSON.stringify(e)))(t))},l=(e,t)=>{if(typeof a?.localStorage<"u"){const r=a.localStorage?.getItem(e);return r?(e=>JSON.parse(atob(e)))(r):t}return t},c={},i={},u={},f=a.__STATE_JET_DEVTOOLS__,p=(e,t)=>{c[e]||(c[e]=[]),void 0===i[e]&&(i[e]=-1),c[e]=c[e].slice(0,i[e]+1),c[e].push(t),i[e]++,f?.updateState&&f.updateState(e,t,[...c[e]])},d=(e,t)=>{u[e]||(u[e]=[]);const r=performance.now();t();const a=performance.now()-r;u[e].push(a),f?.updatePerformance&&f.updatePerformance(e,a)},S=new Set,m=new Map,g=new Map,y={};let w=!1;const h=(e,t,r)=>v("global")(e,t,r),v=e=>(m.has(e)||m.set(e,{}),(u,f,h)=>{const v=m.get(e),b=`${e}:${u}`;if(!v[u]){let e=f;h?.persist&&(e=h?.encrypt?l(b,f):o(b,f)),v[u]={value:e,listeners:new Set,...h}}const $=v[u],E=async()=>{w=!1;const e=Array.from(g.entries());g.clear();for(const[r,a]of e){const[e,o]=r.split(":"),l=m.get(e);if(!l)continue;const c=l[o];if(!c)continue;if(S.has(r)){console.warn(`[state-jet] Skipping recursive middleware for: ${r}`);continue}let i=a;const u=c.value;if(y[r]||(y[r]={past:[],present:u,future:[]}),y[r].past.push(u),y[r].present=i,y[r].future=[],S.add(r),c?.middleware)for(const e of c.middleware)try{console.log(`[state-jet] Running middleware for ${r}`);const t=e(r,u,i,(e=>{i=e}));if(void 0!==t)if(t instanceof Promise){const e=await t;void 0!==e&&(i=e)}else i=t}catch(e){console.error(`[state-jet] Middleware error in ${r}:`,e)}S.delete(r),"function"==typeof i?c.value=t(c.value,i):u!==i&&(c.value=i,c.listeners.forEach((e=>e())),p(`${e}.${o}`,i),d(`${e}.${o}`,(()=>{})),c?.persist&&(c?.encrypt?n(r,i):s(r,i)))}};return{useState:()=>r((e=>($.listeners.add(e),()=>$.listeners.delete(e))),(()=>$.value)),set:async(t,r=!1)=>{const s=$.value,o="function"==typeof t?t(s):t;if(r)return $.value=o,$.listeners.forEach((e=>e())),void p(`${e}.${u}`,o);g.set(b,o),w||(w=!0,$.frameSync&&a?.requestAnimationFrame?await new Promise((e=>a.requestAnimationFrame((()=>e(E()))))):await E())},get:()=>$.value,undo:()=>{y[b]?.past.length&&(y[b].future.unshift(y[b].present),y[b].present=y[b].past.pop(),$.value=y[b].present,$.listeners.forEach((e=>e())),(e=>{if(i[e]>0)i[e]--,c[e][i[e]]})(b),p(`${e}.undo`,y[b].present))},redo:()=>{y[b]?.future.length&&(y[b].past.push(y[b].present),y[b].present=y[b].future.shift(),$.value=y[b].present,$.listeners.forEach((e=>e())),(e=>{if(i[e]<c[e]?.length-1)i[e]++,c[e][i[e]]})(b),p(`${e}.redo`,y[b].present))},clear:()=>{$.value=f,m.clear(),Object.keys(y).forEach((e=>delete y[e])),p(`${e}.clear`,f)}}}),b=t=>{const r=e(null);return r.current||(r.current=t()),r.current},$=async(e,t,r,a)=>{const s=e.useState(),o=t(s);e.set(o);try{await r()}catch(t){console.error("API request failed:",t),e.set(a?a(s):s)}},E=(e,t)=>({...e,...t,lastUpdated:Date.now()}),T=(e,t)=>{const r=t.useState(),a=E(r,e);t.set(a)},j=(e,t)=>()=>{const r=e.map((e=>e.useState()));return t(...r)};export{j as derivedState,E as mergeCRDT,$ as optimisticUpdate,l as restoreEncryptedState,o as restoreState,n as saveEncryptedState,s as saveState,T as syncCRDT,v as useSlice,h as useStateGlobal,b as useStore};
1
+ import{useRef as e,useEffect as t,useSyncExternalStore as s}from"react";import{produce as r}from"immer";const o=(e=>{if(!1===e||null===e)throw new Error("Unable to locate global `this`");return e||globalThis})(),a=(e,t)=>{typeof o?.localStorage<"u"&&o.localStorage.setItem(e,JSON.stringify(t))},n=(e,t)=>{if(typeof o?.localStorage<"u"){const s=o.localStorage?.getItem(e);return s?JSON.parse(s):t}return t},u=(e,t)=>{typeof o?.localStorage<"u"&&o.localStorage.setItem(e,(e=>btoa(JSON.stringify(e)))(t))},l=(e,t)=>{if(typeof o?.localStorage<"u"){const s=o.localStorage?.getItem(e);return s?(e=>JSON.parse(atob(e)))(s):t}return t},c={},f={},i={},p=o.__STATE_JET_DEVTOOLS__,S=(e,t)=>{c[e]||(c[e]=[]),void 0===f[e]&&(f[e]=-1),c[e]=c[e].slice(0,f[e]+1),c[e].push(t),f[e]++,p?.updateState&&p.updateState(e,t,[...c[e]])},d=(e,t)=>{i[e]||(i[e]=[]);const s=performance.now();t();const r=performance.now()-s;i[e].push(r),p?.updatePerformance&&p.updatePerformance(e,r)},v=new Map,g=new Map,m={},y=new Map;let h=!1;function w(e){return v.has(e)||v.set(e,{}),function(o,i,p){const w=v.get(e),E=`${e}:${o}`;if(y.has(E))return y.get(E);w[o]||(w[o]={value:i,listeners:new Set,...p});const b=w[o],O={useState:()=>(t((()=>{if(b.persist&&!b.restored){b.restored=!0;const e=b.encrypt?l(E,i):n(E,i);if(e!==i){b.value=e;for(const e of b.listeners)e()}}}),[i]),s((e=>(b.listeners.add(e),()=>b.listeners.delete(e))),(()=>b.value),(()=>i))),set:async(e,t=!1)=>{if(t){m[E]||(m[E]={past:[],present:b.value,future:[]}),m[E].past.push(b.value),b.value="function"==typeof e?r(b.value,e):e,m[E].present=b.value,m[E].future=[];for(const e of b.listeners)e();S(E,b.value)}else g.set(E,e),h||(h=!0,await async function(){for(;g.size>0;){const e=Array.from(g.entries());g.clear();for(const[t,s]of e){const[e,o]=t.split(":"),n=v.get(e);if(!n)continue;const l=n[o];if(!l)continue;let c=s;const f=l.value;if(m[t]||(m[t]={past:[],present:f,future:[]}),m[t].past.push(f),m[t].present=c,m[t].future=[],l.middleware)for(const e of l.middleware)try{const s=e(t,f,c,(e=>{c=e}));if(s instanceof Promise){const e=await s;void 0!==e&&(c=e)}else void 0!==s&&(c=s)}catch(e){console.error(e)}l.value="function"==typeof c?r(l.value,c):c;for(const e of l.listeners)e();S(t,l.value),d(t,(()=>{})),l.persist&&(l.encrypt?u(t,l.value):a(t,l.value))}}h=!1}())},get:()=>b.value,undo:()=>{const t=m[E];if(t&&t.past.length){t.future.unshift(t.present),t.present=t.past.pop(),b.value=t.present;for(const e of b.listeners)e();(e=>{if(f[e]>0)f[e]--,c[e][f[e]]})(E),S(`${e}.undo`,b.value)}},redo:()=>{const t=m[E];if(t&&t.future.length){t.past.push(t.present),t.present=t.future.shift(),b.value=t.present;for(const e of b.listeners)e();(e=>{if(f[e]<c[e]?.length-1)f[e]++,c[e][f[e]]})(E),S(`${e}.redo`,b.value)}},clear:()=>{b.value=i;for(const e of b.listeners)e();S(`${e}.clear`,i)}};return y.set(E,O),O}}function E(e,t,s){return w("global")(e,t,s)}function b(t){const s=e(null);return s.current||(s.current=t()),s.current}const O=async(e,t,s,r)=>{const o=e.useState(),a=t(o);e.set(a);try{await s()}catch(t){console.error("API request failed:",t),e.set(r?r(o):o)}},T=(e,t)=>({...e,...t,lastUpdated:Date.now()}),I=(e,t,s)=>{const r=t();s(T(r,e))},_=(e,t)=>()=>{const s=e.map((e=>e.useState()));return t(...s)},J="2.4.0";export{J as VERSION,_ as derivedState,T as mergeCRDT,O as optimisticUpdate,l as restoreEncryptedState,n as restoreState,u as saveEncryptedState,a as saveState,I as syncCRDT,w as useSlice,E as useStateGlobal,b as useStore};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "state-jet",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "Ultra-lightweight global state management for React",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -53,20 +53,6 @@
53
53
  "bugs": {
54
54
  "url": "https://github.com/venkateshsundaram/state-jet/issues"
55
55
  },
56
- "scripts": {
57
- "build": "rimraf dist && rollup -c",
58
- "test": "vitest",
59
- "test:coverage": "vitest run --coverage",
60
- "clean": "rimraf dist",
61
- "publish:npm": "npm publish --access public",
62
- "lint": "eslint src --ext .ts,.tsx",
63
- "format": "prettier --write src",
64
- "format:check": "prettier --check src",
65
- "release": "standard-version",
66
- "postrelease": "git push --follow-tags",
67
- "prepare": "npm run build",
68
- "prepublishOnly": "npm run build"
69
- },
70
56
  "husky": {
71
57
  "hooks": {
72
58
  "pre-commit": "lint-staged"
@@ -74,7 +60,7 @@
74
60
  },
75
61
  "lint-staged": {
76
62
  "*.ts": [
77
- "eslint --fix",
63
+ "eslint --fix --no-warn-ignored",
78
64
  "prettier --write"
79
65
  ]
80
66
  },
@@ -84,21 +70,22 @@
84
70
  ]
85
71
  },
86
72
  "devDependencies": {
73
+ "@eslint/js": "^9.39.4",
87
74
  "@commitlint/cli": "^19.8.0",
88
75
  "@commitlint/config-conventional": "^19.8.0",
89
76
  "@rollup/plugin-commonjs": "^28.0.2",
90
77
  "@rollup/plugin-node-resolve": "^15.0.2",
91
- "@rollup/plugin-terser": "^0.4.4",
78
+ "@rollup/plugin-terser": "^1.0.0",
92
79
  "@testing-library/react": "^16.1.0",
93
80
  "@types/react": "^19.0.10",
94
81
  "@types/react-dom": "^19.0.4",
95
- "@types/use-sync-external-store": "^0.0.6",
96
82
  "@typescript-eslint/eslint-plugin": "^8.26.0",
97
83
  "@typescript-eslint/parser": "^8.26.0",
98
- "@vitest/coverage-v8": "^3.2.1",
99
- "eslint": "^8.57.1",
84
+ "@vitest/coverage-v8": "^4.1.2",
85
+ "eslint": "^9.39.4",
100
86
  "eslint-plugin-react": "^7.37.4",
101
87
  "eslint-plugin-react-hooks": "^5.2.0",
88
+ "globals": "^17.4.0",
102
89
  "husky": "^9.1.7",
103
90
  "immer": "^10.1.1",
104
91
  "jsdom": "^26.0.0",
@@ -106,20 +93,19 @@
106
93
  "prettier": "^3.5.3",
107
94
  "react": "19.0.0",
108
95
  "react-dom": "19.0.0",
109
- "rimraf": "^5.0.10",
96
+ "rimraf": "^6.1.3",
110
97
  "rollup": "^3.29.4",
111
98
  "rollup-plugin-dts": "^5.3.0",
112
99
  "rollup-plugin-esbuild": "^5.0.0",
113
100
  "standard-version": "^9.5.0",
114
101
  "typescript": "^5.7.3",
115
- "use-sync-external-store": "^1.4.0",
116
- "vitest": "^3.2.1"
102
+ "typescript-eslint": "^8.57.2",
103
+ "vitest": "^4.1.2"
117
104
  },
118
105
  "peerDependencies": {
119
106
  "@types/react": ">=18.0.0",
120
107
  "immer": ">=9.0.6",
121
- "react": ">=18.0.0",
122
- "use-sync-external-store": ">=1.2.0"
108
+ "react": ">=18.0.0"
123
109
  },
124
110
  "peerDependenciesMeta": {
125
111
  "@types/react": {
@@ -130,10 +116,23 @@
130
116
  },
131
117
  "react": {
132
118
  "optional": true
133
- },
134
- "use-sync-external-store": {
135
- "optional": true
136
119
  }
137
120
  },
138
- "type": "module"
139
- }
121
+ "overrides": {
122
+ "minimatch": "^10.0.0",
123
+ "yargs-parser": "^21.0.0"
124
+ },
125
+ "type": "module",
126
+ "scripts": {
127
+ "build": "rimraf dist && rollup -c",
128
+ "test": "vitest",
129
+ "test:coverage": "vitest run --coverage",
130
+ "clean": "rimraf dist",
131
+ "publish:npm": "npm publish --access public",
132
+ "lint": "eslint src --max-warnings 0",
133
+ "format": "prettier --write src",
134
+ "format:check": "prettier --check src",
135
+ "release": "standard-version",
136
+ "postrelease": "git push --follow-tags"
137
+ }
138
+ }