@yakocloud/state-vocab 3.0.5 → 3.0.6

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.
@@ -1,3 +1,3 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),L=Symbol("state-def"),I=Symbol("state-path"),x=Symbol("state-verbose"),A=Symbol("state-verbose-path"),M=Symbol("state-ssr");function $(t,n,e){if(!n)return t;const i=n.split(".");let o=t;for(const c of i)if(o!==null&&typeof o=="object"&&c in o)o=o[c];else return e;return o===void 0?e:o}function F(t,n,e){const i=n.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(let c=0;c<i.length-1;c++){const l=i[c],s=i[c+1];(o[l]===void 0||o[l]===null)&&(o[l]=/^\d+$/.test(s)?[]:{}),o=o[l]}return o[i[i.length-1]]=e,t}function J(t,n=0){let e;return function(...i){e!==void 0&&clearTimeout(e),e=setTimeout(()=>{e=void 0,t.apply(this,i)},n)}}function H(t,n,e=[]){return d.useMemo(()=>J(t,n),e)}function _(t){const n=JSON.stringify(t,null,2).split(`
2
- `),e=[],i=[];for(const o of n){const c=o.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(c){const[,l,s,p,b]=c;e.push(`${l}%c"${s}"%c${p}%c${b}`),i.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else e.push(`%c${o}`),i.push("color: #cccccc")}console.log(e.join(`
3
- `),...i,t)}const N=t=>typeof t=="function",K=t=>typeof t=="function",T=t=>typeof t<"u",C=t=>K(t)?t():t;class W{#e;#t;constructor(){this.#e={},this.#t=new Set}subscribe(n){return this.#t.add(n),()=>this.#t.delete(n)}getClientSnapshot(){return this.#e}getServerSnapshot(){return this.#e}get(n){return $(this.#e,n)}set(n,e){const i=$(this.#e,n),o=N(e)?e(i):e,c={...this.#e};F(c,n,o),this.#e=c,this.#t.forEach(l=>l())}}const O=()=>new W,q=d.cache(O);let R=null;const G=()=>(R||(R=O()),R),Q=()=>typeof window>"u"?q():G(),j=typeof window>"u",U=j?d.useEffect:d.useLayoutEffect;function X(t={}){return{[L]:!0,[I]:"",[x]:!1,[A]:"",[M]:!1,useState(n){const e=j?void 0:C(t.storage),i=C(t.defaultValue),o=t.bidirectional;n??={};const c=C(n.defaultValue)??i,l=n.bidirectional??o,s=this[I],p=this[x],b=this[A],V=this[M],a=Q(),u=t.serialize??JSON.stringify,g=t.deserialize??JSON.parse,h=(r,S,P)=>{const E=S.getItem(r);E===null?T(P)&&S.setItem(r,u(P)):a.set(r,g(E))},f=H(n.onSet??(()=>{}),n.delayedSet,[]),y=d.useRef(void 0),k=d.useRef(!1);if(!k.current){k.current=!0;let r=a.get(s);T(r)||(r=c,T(r)&&a.set(s,r)),!V&&e&&h(s,e,r)}const w=d.useSyncExternalStore(a.subscribe.bind(a),a.getClientSnapshot.bind(a),a.getServerSnapshot.bind(a));if(p)if(b){const r=$(w,b);r&&_(r)}else _(w);const m=$(w,s,c);y.current=m,U(()=>{!V||!e||h(s,e,m)},[]);const v=d.useEffectEvent(r=>{if(r.key!==s)return;const S=r.newValue,E=(S===null?null:g(S))??c;T(E)&&(a.set(s,E),f(E,y.current))});d.useEffect(()=>{if(l)return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[l]);const z=d.useCallback(r=>{const S=N(r)?r(y.current):r;a.set(s,S),f(S,y.current),e&&e.setItem(s,u(S))},[s,e,f]),B=d.useCallback(()=>{const r=c;if(!T(r)){e?.removeItem(s);return}a.set(s,r),f(r,y.current),e&&e.setItem(s,u(r))},[s,c,e,f]);return[m,z,B]},toString(){return this[I]}}}function D(t,n){const{path:e="",verbose:i,verbosePath:o,ssr:c,cache:l}=n;let s=l.proxy.get(t);s||(s=new Map,l.proxy.set(t,s));const p=s.get(e);if(p)return p;const b=new Proxy(t,{get(V,a){const u=V[a],g=e?`${e}.${String(a)}`:String(a);if(u&&typeof u=="object"&&L in u){const h=u;let f=l.leaf.get(h);f||(f=new Map,l.leaf.set(h,f));const y=f.get(g);if(y)return y;const k=Reflect.ownKeys(h).filter(v=>typeof h[v]=="function"),w=Object.fromEntries(k.map(v=>[v,(...z)=>h[v].call({...h,[I]:g,[x]:i,[A]:o,[M]:c},...z)])),m={...h,...w};return f.set(g,m),m}return u&&typeof u=="object"?D(u,{...n,path:g}):u}});return s.set(e,b),b}function Y(t,n){return D(t,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.defineState=X;exports.setupStorage=Y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react"),_=Symbol("state-def"),k=Symbol("state-path"),R=Symbol("state-verbose"),x=Symbol("state-verbose-path"),L=Symbol("state-ssr");function z(e,n,t){if(!n)return e;const i=n.split(".");let o=e;for(const c of i)if(o!==null&&typeof o=="object"&&c in o)o=o[c];else return t;return o===void 0?t:o}function F(e,n,t){const i=n.replace(/\[(\d+)\]/g,".$1").split(".");let o=e;for(let c=0;c<i.length-1;c++){const l=i[c],s=i[c+1];(o[l]===void 0||o[l]===null)&&(o[l]=/^\d+$/.test(s)?[]:{}),o=o[l]}return o[i[i.length-1]]=t,e}function J(e,n=0){let t;return function(...i){t!==void 0&&clearTimeout(t),t=setTimeout(()=>{t=void 0,e.apply(this,i)},n)}}function H(e,n,t=[]){return S.useMemo(()=>J(e,n),t)}function M(e){const n=JSON.stringify(e,null,2).split(`
2
+ `),t=[],i=[];for(const o of n){const c=o.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(c){const[,l,s,p,g]=c;t.push(`${l}%c"${s}"%c${p}%c${g}`),i.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else t.push(`%c${o}`),i.push("color: #cccccc")}console.log(t.join(`
3
+ `),...i,e)}const N=e=>typeof e=="function",K=e=>typeof e=="function",T=e=>typeof e<"u",A=e=>K(e)?e():e;class O{#e;#t;constructor(){this.#e={},this.#t=new Set}subscribe(n){return this.#t.add(n),()=>this.#t.delete(n)}getClientSnapshot(){return this.#e}getServerSnapshot(){return this.#e}get(n){return z(this.#e,n)}set(n,t){const i=z(this.#e,n),o=N(t)?t(i):t,c={...this.#e};F(c,n,o),this.#e=c,this.#t.forEach(l=>l())}}let j;typeof window>"u"&&(j=new AsyncLocalStorage);const W=()=>{const e=j.getStore();if(!e)throw new Error(`${O.name} must be initialized for this request`);return e};let C=null;const G=()=>(C||(C=new O),C),Q=()=>typeof window>"u"?W():G(),D=typeof window>"u",U=D?S.useEffect:S.useLayoutEffect;function X(e={}){return{[_]:!0,[k]:"",[R]:!1,[x]:"",[L]:!1,useState(n){const t=D?void 0:A(e.storage),i=A(e.defaultValue),o=e.bidirectional;n??={};const c=A(n.defaultValue)??i,l=n.bidirectional??o,s=this[k],p=this[R],g=this[x],V=this[L],u=Q(),a=e.serialize??JSON.stringify,b=e.deserialize??JSON.parse,d=(r,h,P)=>{const w=h.getItem(r);w===null?T(P)&&h.setItem(r,a(P)):u.set(r,b(w))},f=H(n.onSet??(()=>{}),n.delayedSet,[]),y=S.useRef(void 0),$=S.useRef(!1);if(!$.current){$.current=!0;let r=u.get(s);T(r)||(r=c,T(r)&&u.set(s,r)),!V&&t&&d(s,t,r)}const E=S.useSyncExternalStore(u.subscribe.bind(u),u.getClientSnapshot.bind(u),u.getServerSnapshot.bind(u));if(p)if(g){const r=z(E,g);r&&M(r)}else M(E);const m=z(E,s,c);y.current=m,U(()=>{!V||!t||d(s,t,m)},[]);const v=S.useEffectEvent(r=>{if(r.key!==s)return;const h=r.newValue,w=(h===null?null:b(h))??c;T(w)&&(u.set(s,w),f(w,y.current))});S.useEffect(()=>{if(l)return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[l]);const I=S.useCallback(r=>{const h=N(r)?r(y.current):r;u.set(s,h),f(h,y.current),t&&t.setItem(s,a(h))},[s,t,f]),B=S.useCallback(()=>{const r=c;if(!T(r)){t?.removeItem(s);return}u.set(s,r),f(r,y.current),t&&t.setItem(s,a(r))},[s,c,t,f]);return[m,I,B]},toString(){return this[k]}}}function q(e,n){const{path:t="",verbose:i,verbosePath:o,ssr:c,cache:l}=n;let s=l.proxy.get(e);s||(s=new Map,l.proxy.set(e,s));const p=s.get(t);if(p)return p;const g=new Proxy(e,{get(V,u){const a=V[u],b=t?`${t}.${String(u)}`:String(u);if(a&&typeof a=="object"&&_ in a){const d=a;let f=l.leaf.get(d);f||(f=new Map,l.leaf.set(d,f));const y=f.get(b);if(y)return y;const $=Reflect.ownKeys(d).filter(v=>typeof d[v]=="function"),E=Object.fromEntries($.map(v=>[v,(...I)=>d[v].call({...d,[k]:b,[R]:i,[x]:o,[L]:c},...I)])),m={...d,...E};return f.set(b,m),m}return a&&typeof a=="object"?q(a,{...n,path:b}):a}});return s.set(t,g),g}function Y(e,n){return q(e,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.defineState=X;exports.setupStorage=Y;
@@ -1,61 +1,61 @@
1
- import { useMemo as H, cache as K, useRef as _, useSyncExternalStore as W, useEffect as N, useLayoutEffect as q, useEffectEvent as G, useCallback as L } from "react";
2
- const D = Symbol("state-def"), I = Symbol("state-path"), A = Symbol("state-verbose"), C = Symbol("state-verbose-path"), R = Symbol("state-ssr");
3
- function $(t, n, e) {
1
+ import { useMemo as H, useRef as L, useSyncExternalStore as K, useEffect as N, useLayoutEffect as W, useEffectEvent as G, useCallback as _ } from "react";
2
+ const D = Symbol("state-def"), $ = Symbol("state-path"), P = Symbol("state-verbose"), C = Symbol("state-verbose-path"), R = Symbol("state-ssr");
3
+ function z(e, n, t) {
4
4
  if (!n)
5
- return t;
5
+ return e;
6
6
  const i = n.split(".");
7
- let o = t;
7
+ let o = e;
8
8
  for (const c of i)
9
9
  if (o !== null && typeof o == "object" && c in o)
10
10
  o = o[c];
11
11
  else
12
- return e;
13
- return o === void 0 ? e : o;
12
+ return t;
13
+ return o === void 0 ? t : o;
14
14
  }
15
- function Q(t, n, e) {
15
+ function Q(e, n, t) {
16
16
  const i = n.replace(/\[(\d+)\]/g, ".$1").split(".");
17
- let o = t;
17
+ let o = e;
18
18
  for (let c = 0; c < i.length - 1; c++) {
19
19
  const l = i[c], s = i[c + 1];
20
20
  (o[l] === void 0 || o[l] === null) && (o[l] = /^\d+$/.test(s) ? [] : {}), o = o[l];
21
21
  }
22
- return o[i[i.length - 1]] = e, t;
22
+ return o[i[i.length - 1]] = t, e;
23
23
  }
24
- function U(t, n = 0) {
25
- let e;
24
+ function U(e, n = 0) {
25
+ let t;
26
26
  return function(...i) {
27
- e !== void 0 && clearTimeout(e), e = setTimeout(() => {
28
- e = void 0, t.apply(this, i);
27
+ t !== void 0 && clearTimeout(t), t = setTimeout(() => {
28
+ t = void 0, e.apply(this, i);
29
29
  }, n);
30
30
  };
31
31
  }
32
- function X(t, n, e = []) {
32
+ function X(e, n, t = []) {
33
33
  return H(
34
- () => U(t, n),
34
+ () => U(e, n),
35
35
  // eslint-disable-next-line react-hooks/exhaustive-deps
36
- e
36
+ t
37
37
  );
38
38
  }
39
- function M(t) {
40
- const n = JSON.stringify(t, null, 2).split(`
41
- `), e = [], i = [];
39
+ function M(e) {
40
+ const n = JSON.stringify(e, null, 2).split(`
41
+ `), t = [], i = [];
42
42
  for (const o of n) {
43
43
  const c = o.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);
44
44
  if (c) {
45
45
  const [, l, s, v, y] = c;
46
- e.push(`${l}%c"${s}"%c${v}%c${y}`), i.push(
46
+ t.push(`${l}%c"${s}"%c${v}%c${y}`), i.push(
47
47
  "color: #9cdcfe; font-weight: bold",
48
48
  "color: #cccccc",
49
49
  "color: #ce9178"
50
50
  );
51
51
  } else
52
- e.push(`%c${o}`), i.push("color: #cccccc");
52
+ t.push(`%c${o}`), i.push("color: #cccccc");
53
53
  }
54
- console.log(e.join(`
55
- `), ...i, t);
54
+ console.log(t.join(`
55
+ `), ...i, e);
56
56
  }
57
- const O = (t) => typeof t == "function", Y = (t) => typeof t == "function", w = (t) => typeof t < "u", x = (t) => Y(t) ? t() : t;
58
- class Z {
57
+ const O = (e) => typeof e == "function", Y = (e) => typeof e == "function", E = (e) => typeof e < "u", x = (e) => Y(e) ? e() : e;
58
+ class j {
59
59
  #e;
60
60
  #t;
61
61
  constructor() {
@@ -71,145 +71,152 @@ class Z {
71
71
  return this.#e;
72
72
  }
73
73
  get(n) {
74
- return $(this.#e, n);
74
+ return z(this.#e, n);
75
75
  }
76
- set(n, e) {
77
- const i = $(this.#e, n), o = O(e) ? e(i) : e, c = { ...this.#e };
76
+ set(n, t) {
77
+ const i = z(this.#e, n), o = O(t) ? t(i) : t, c = { ...this.#e };
78
78
  Q(c, n, o), this.#e = c, this.#t.forEach((l) => l());
79
79
  }
80
80
  }
81
- const j = () => new Z(), ee = K(j);
82
- let P = null;
83
- const te = () => (P || (P = j()), P), ne = () => typeof window > "u" ? ee() : te(), B = typeof window > "u", se = B ? N : q;
84
- function oe(t = {}) {
81
+ let B;
82
+ typeof window > "u" && (B = new AsyncLocalStorage());
83
+ const Z = () => {
84
+ const e = B.getStore();
85
+ if (!e)
86
+ throw new Error(`${j.name} must be initialized for this request`);
87
+ return e;
88
+ };
89
+ let A = null;
90
+ const ee = () => (A || (A = new j()), A), te = () => typeof window > "u" ? Z() : ee(), F = typeof window > "u", ne = F ? N : W;
91
+ function re(e = {}) {
85
92
  return {
86
93
  [D]: !0,
87
94
  // marks this object as a leaf in the router tree
88
- [I]: "",
95
+ [$]: "",
89
96
  // placeholder; injected at runtime by injectPaths()
90
- [A]: !1,
97
+ [P]: !1,
91
98
  // placeholder
92
99
  [C]: "",
93
100
  // placeholder
94
101
  [R]: !1,
95
102
  // placeholder
96
103
  useState(n) {
97
- const e = B ? void 0 : x(t.storage), i = x(t.defaultValue), o = t.bidirectional;
104
+ const t = F ? void 0 : x(e.storage), i = x(e.defaultValue), o = e.bidirectional;
98
105
  n ??= {};
99
- const c = x(n.defaultValue) ?? i, l = n.bidirectional ?? o, s = this[I], v = this[A], y = this[C], V = this[R], a = ne(), u = t.serialize ?? JSON.stringify, b = t.deserialize ?? JSON.parse, d = (r, h, z) => {
106
+ const c = x(n.defaultValue) ?? i, l = n.bidirectional ?? o, s = this[$], v = this[P], y = this[C], V = this[R], a = te(), u = e.serialize ?? JSON.stringify, g = e.deserialize ?? JSON.parse, d = (r, h, k) => {
100
107
  const m = h.getItem(r);
101
- m === null ? w(z) && h.setItem(r, u(z)) : a.set(r, b(m));
108
+ m === null ? E(k) && h.setItem(r, u(k)) : a.set(r, g(m));
102
109
  }, f = X(
103
110
  n.onSet ?? (() => {
104
111
  }),
105
112
  n.delayedSet,
106
113
  []
107
- ), S = _(void 0), T = _(!1);
114
+ ), S = L(void 0), T = L(!1);
108
115
  if (!T.current) {
109
116
  T.current = !0;
110
117
  let r = a.get(s);
111
- w(r) || (r = c, w(r) && a.set(s, r)), !V && e && d(s, e, r);
118
+ E(r) || (r = c, E(r) && a.set(s, r)), !V && t && d(s, t, r);
112
119
  }
113
- const E = W(
120
+ const w = K(
114
121
  a.subscribe.bind(a),
115
122
  a.getClientSnapshot.bind(a),
116
123
  a.getServerSnapshot.bind(a)
117
124
  );
118
125
  if (v)
119
126
  if (y) {
120
- const r = $(E, y);
127
+ const r = z(w, y);
121
128
  r && M(r);
122
129
  } else
123
- M(E);
124
- const p = $(E, s, c);
125
- S.current = p, se(() => {
126
- !V || !e || d(s, e, p);
130
+ M(w);
131
+ const p = z(w, s, c);
132
+ S.current = p, ne(() => {
133
+ !V || !t || d(s, t, p);
127
134
  }, []);
128
- const g = G((r) => {
135
+ const b = G((r) => {
129
136
  if (r.key !== s)
130
137
  return;
131
- const h = r.newValue, m = (h === null ? null : b(h)) ?? c;
132
- w(m) && (a.set(s, m), f(m, S.current));
138
+ const h = r.newValue, m = (h === null ? null : g(h)) ?? c;
139
+ E(m) && (a.set(s, m), f(m, S.current));
133
140
  });
134
141
  N(() => {
135
142
  if (l)
136
- return window.addEventListener("storage", g), () => window.removeEventListener("storage", g);
143
+ return window.addEventListener("storage", b), () => window.removeEventListener("storage", b);
137
144
  }, [l]);
138
- const k = L((r) => {
145
+ const I = _((r) => {
139
146
  const h = O(r) ? r(S.current) : r;
140
- a.set(s, h), f(h, S.current), e && e.setItem(s, u(h));
141
- }, [s, e, f]), J = L(() => {
147
+ a.set(s, h), f(h, S.current), t && t.setItem(s, u(h));
148
+ }, [s, t, f]), q = _(() => {
142
149
  const r = c;
143
- if (!w(r)) {
144
- e?.removeItem(s);
150
+ if (!E(r)) {
151
+ t?.removeItem(s);
145
152
  return;
146
153
  }
147
- a.set(s, r), f(r, S.current), e && e.setItem(s, u(r));
148
- }, [s, c, e, f]);
154
+ a.set(s, r), f(r, S.current), t && t.setItem(s, u(r));
155
+ }, [s, c, t, f]);
149
156
  return [
150
157
  p,
151
- k,
152
- J
158
+ I,
159
+ q
153
160
  ];
154
161
  },
155
162
  /** Returns the fully qualified job name (dot-separated path). */
156
163
  toString() {
157
- return this[I];
164
+ return this[$];
158
165
  }
159
166
  };
160
167
  }
161
- function F(t, n) {
168
+ function J(e, n) {
162
169
  const {
163
- path: e = "",
170
+ path: t = "",
164
171
  verbose: i,
165
172
  verbosePath: o,
166
173
  ssr: c,
167
174
  cache: l
168
175
  } = n;
169
- let s = l.proxy.get(t);
170
- s || (s = /* @__PURE__ */ new Map(), l.proxy.set(t, s));
171
- const v = s.get(e);
176
+ let s = l.proxy.get(e);
177
+ s || (s = /* @__PURE__ */ new Map(), l.proxy.set(e, s));
178
+ const v = s.get(t);
172
179
  if (v)
173
180
  return v;
174
- const y = new Proxy(t, {
181
+ const y = new Proxy(e, {
175
182
  get(V, a) {
176
- const u = V[a], b = e ? `${e}.${String(a)}` : String(a);
183
+ const u = V[a], g = t ? `${t}.${String(a)}` : String(a);
177
184
  if (u && typeof u == "object" && D in u) {
178
185
  const d = u;
179
186
  let f = l.leaf.get(d);
180
187
  f || (f = /* @__PURE__ */ new Map(), l.leaf.set(d, f));
181
- const S = f.get(b);
188
+ const S = f.get(g);
182
189
  if (S)
183
190
  return S;
184
191
  const T = Reflect.ownKeys(d).filter(
185
- (g) => typeof d[g] == "function"
186
- ), E = Object.fromEntries(
187
- T.map((g) => [
188
- g,
189
- (...k) => d[g].call(
192
+ (b) => typeof d[b] == "function"
193
+ ), w = Object.fromEntries(
194
+ T.map((b) => [
195
+ b,
196
+ (...I) => d[b].call(
190
197
  {
191
198
  ...d,
192
- [I]: b,
193
- [A]: i,
199
+ [$]: g,
200
+ [P]: i,
194
201
  [C]: o,
195
202
  [R]: c
196
203
  },
197
- ...k
204
+ ...I
198
205
  )
199
206
  ])
200
- ), p = { ...d, ...E };
201
- return f.set(b, p), p;
207
+ ), p = { ...d, ...w };
208
+ return f.set(g, p), p;
202
209
  }
203
- return u && typeof u == "object" ? F(u, {
210
+ return u && typeof u == "object" ? J(u, {
204
211
  ...n,
205
- path: b
212
+ path: g
206
213
  }) : u;
207
214
  }
208
215
  });
209
- return s.set(e, y), y;
216
+ return s.set(t, y), y;
210
217
  }
211
- function ce(t, n) {
212
- return F(t, {
218
+ function oe(e, n) {
219
+ return J(e, {
213
220
  ...n,
214
221
  verbosePath: n?.verbosePath ?? "",
215
222
  cache: {
@@ -219,6 +226,6 @@ function ce(t, n) {
219
226
  });
220
227
  }
221
228
  export {
222
- oe as defineState,
223
- ce as setupStorage
229
+ re as defineState,
230
+ oe as setupStorage
224
231
  };
@@ -12,5 +12,6 @@ declare class VocabStore {
12
12
  get<V>(statePath: string): V | undefined;
13
13
  set<V>(statePath: string, value: ValueOrTransformer<V>): void;
14
14
  }
15
+ export declare function runWithStateVocab<T>(fn: () => T): T;
15
16
  export declare const getVocabStore: () => VocabStore;
16
17
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakocloud/state-vocab",
3
- "version": "3.0.5",
3
+ "version": "3.0.6",
4
4
  "main": "dist/state-vocab.cjs.js",
5
5
  "module": "dist/state-vocab.es.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -50,7 +50,6 @@
50
50
  "@testing-library/jest-dom": "^6.9.1",
51
51
  "@testing-library/react": "^16.3.2",
52
52
  "@types/jest": "^30.0.0",
53
- "@types/node": "^24.10.1",
54
53
  "@types/react": "^19.2.5",
55
54
  "@types/react-dom": "^19.2.3",
56
55
  "@vitejs/plugin-react": "^5.2.0",