@yakocloud/state-vocab 3.0.8 → 3.0.9

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 S=require("react");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 a=i[c],s=i[c+1];(o[a]===void 0||o[a]===null)&&(o[a]=/^\d+$/.test(s)?[]:{}),o=o[a]}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 K(e,n,t=[]){return S.useMemo(()=>J(e,n),t)}function N(e){const n=JSON.stringify(e,null,2).split(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("react");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 a=i[c],s=i[c+1];(o[a]===void 0||o[a]===null)&&(o[a]=/^\d+$/.test(s)?[]:{}),o=o[a]}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 K(e,n,t=[]){return h.useMemo(()=>J(e,n),t)}function O(e){const n=JSON.stringify(e,null,2).split(`
2
2
  `),t=[],i=[];for(const o of n){const c=o.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(c){const[,a,s,p,b]=c;t.push(`${a}%c"${s}"%c${p}%c${b}`),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 j=e=>typeof e=="function",H=e=>typeof e=="function",V=e=>typeof e<"u",A=e=>H(e)?e():e;class M{#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=j(t)?t(i):t,c={...this.#e};F(c,n,o),this.#e=c,this.#t.forEach(a=>a())}}const O=Symbol.for("request-state-vocab-storage");let _;if(typeof window>"u"){const e=globalThis;e[O]??=new AsyncLocalStorage,_=e[O]}const G=()=>{const e=_.getStore();if(!e)throw new Error(`${M.name} must be initialized for this request`);return e};let C=null;const Q=()=>(C||(C=new M),C);function U(e){return _.run(new M,e)}const X=()=>typeof window>"u"?G():Q(),q=Symbol("state-def"),k=Symbol("state-path"),R=Symbol("state-verbose"),x=Symbol("state-verbose-path"),L=Symbol("state-ssr"),D=typeof window>"u",Y=D?S.useEffect:S.useLayoutEffect;function Z(e={}){return{[q]:!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,a=n.bidirectional??o,s=this[k],p=this[R],b=this[x],T=this[L],u=X(),l=e.serialize??JSON.stringify,g=e.deserialize??JSON.parse,d=(r,h,P)=>{const w=h.getItem(r);w===null?V(P)&&h.setItem(r,l(P)):u.set(r,g(w))},f=K(n.onSet??(()=>{}),n.delayedSet,[]),y=S.useRef(void 0),$=S.useRef(!1);if(!$.current){$.current=!0;let r=u.get(s);V(r)||(r=c,V(r)&&u.set(s,r)),!T&&t&&d(s,t,r)}const E=S.useSyncExternalStore(u.subscribe.bind(u),u.getClientSnapshot.bind(u),u.getServerSnapshot.bind(u));if(p)if(b){const r=z(E,b);r&&N(r)}else N(E);const m=z(E,s,c);y.current=m,Y(()=>{!T||!t||d(s,t,m)},[]);const v=S.useEffectEvent(r=>{if(r.key!==s)return;const h=r.newValue,w=(h===null?null:g(h))??c;V(w)&&(u.set(s,w),f(w,y.current))});S.useEffect(()=>{if(a)return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[a]);const I=S.useCallback(r=>{const h=j(r)?r(y.current):r;u.set(s,h),f(h,y.current),t&&t.setItem(s,l(h))},[s,t,f]),B=S.useCallback(()=>{const r=c;if(!V(r)){t?.removeItem(s);return}u.set(s,r),f(r,y.current),t&&t.setItem(s,l(r))},[s,c,t,f]);return[m,I,B]},toString(){return this[k]}}}function W(e,n){const{path:t="",verbose:i,verbosePath:o,ssr:c,cache:a}=n;let s=a.proxy.get(e);s||(s=new Map,a.proxy.set(e,s));const p=s.get(t);if(p)return p;const b=new Proxy(e,{get(T,u){const l=T[u],g=t?`${t}.${String(u)}`:String(u);if(l&&typeof l=="object"&&q in l){const d=l;let f=a.leaf.get(d);f||(f=new Map,a.leaf.set(d,f));const y=f.get(g);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]:g,[R]:i,[x]:o,[L]:c},...I)])),m={...d,...E};return f.set(g,m),m}return l&&typeof l=="object"?W(l,{...n,path:g}):l}});return s.set(t,b),b}function ee(e,n){return W(e,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.defineState=Z;exports.runWithStateVocab=U;exports.setupStorage=ee;
3
+ `),...i,e)}const j=e=>typeof e=="function",H=e=>typeof e=="function",V=e=>typeof e<"u",A=e=>H(e)?e():e;class M{#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=j(t)?t(i):t,c={...this.#e};F(c,n,o),this.#e=c,this.#t.forEach(a=>a())}}const _=Symbol.for("request-state-vocab-storage"),N=globalThis;typeof window>"u"&&(N[_]??=new AsyncLocalStorage);const G=()=>{const e=N[_]?.getStore();if(!e)throw new Error(`${M.name} must be initialized for this request`);return e};let C=null;const Q=()=>(C||(C=new M),C);function U(e){return N[_]?.run(new M,e)}const X=()=>typeof window>"u"?G():Q(),D=Symbol("state-def"),k=Symbol("state-path"),R=Symbol("state-verbose"),x=Symbol("state-verbose-path"),L=Symbol("state-ssr"),W=typeof window>"u",Y=W?h.useEffect:h.useLayoutEffect;function Z(e={}){return{[D]:!0,[k]:"",[R]:!1,[x]:"",[L]:!1,useState(n){const t=W?void 0:A(e.storage),i=A(e.defaultValue),o=e.bidirectional;n??={};const c=A(n.defaultValue)??i,a=n.bidirectional??o,s=this[k],p=this[R],b=this[x],T=this[L],u=X(),l=e.serialize??JSON.stringify,g=e.deserialize??JSON.parse,d=(r,S,P)=>{const w=S.getItem(r);w===null?V(P)&&S.setItem(r,l(P)):u.set(r,g(w))},f=K(n.onSet??(()=>{}),n.delayedSet,[]),y=h.useRef(void 0),$=h.useRef(!1);if(!$.current){$.current=!0;let r=u.get(s);V(r)||(r=c,V(r)&&u.set(s,r)),!T&&t&&d(s,t,r)}const E=h.useSyncExternalStore(u.subscribe.bind(u),u.getClientSnapshot.bind(u),u.getServerSnapshot.bind(u));if(p)if(b){const r=z(E,b);r&&O(r)}else O(E);const m=z(E,s,c);y.current=m,Y(()=>{!T||!t||d(s,t,m)},[]);const v=h.useEffectEvent(r=>{if(r.key!==s)return;const S=r.newValue,w=(S===null?null:g(S))??c;V(w)&&(u.set(s,w),f(w,y.current))});h.useEffect(()=>{if(a)return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[a]);const I=h.useCallback(r=>{const S=j(r)?r(y.current):r;u.set(s,S),f(S,y.current),t&&t.setItem(s,l(S))},[s,t,f]),B=h.useCallback(()=>{const r=c;if(!V(r)){t?.removeItem(s);return}u.set(s,r),f(r,y.current),t&&t.setItem(s,l(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:a}=n;let s=a.proxy.get(e);s||(s=new Map,a.proxy.set(e,s));const p=s.get(t);if(p)return p;const b=new Proxy(e,{get(T,u){const l=T[u],g=t?`${t}.${String(u)}`:String(u);if(l&&typeof l=="object"&&D in l){const d=l;let f=a.leaf.get(d);f||(f=new Map,a.leaf.set(d,f));const y=f.get(g);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]:g,[R]:i,[x]:o,[L]:c},...I)])),m={...d,...E};return f.set(g,m),m}return l&&typeof l=="object"?q(l,{...n,path:g}):l}});return s.set(t,b),b}function ee(e,n){return q(e,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.defineState=Z;exports.runWithStateVocab=U;exports.setupStorage=ee;
@@ -1,4 +1,4 @@
1
- import { useMemo as W, useRef as M, useSyncExternalStore as H, useEffect as j, useLayoutEffect as G, useEffectEvent as Q, useCallback as N } from "react";
1
+ import { useMemo as q, useRef as N, useSyncExternalStore as H, useEffect as j, useLayoutEffect as G, useEffectEvent as Q, useCallback as D } from "react";
2
2
  function z(e, n, t) {
3
3
  if (!n)
4
4
  return e;
@@ -29,13 +29,13 @@ function X(e, n = 0) {
29
29
  };
30
30
  }
31
31
  function Y(e, n, t = []) {
32
- return W(
32
+ return q(
33
33
  () => X(e, n),
34
34
  // eslint-disable-next-line react-hooks/exhaustive-deps
35
35
  t
36
36
  );
37
37
  }
38
- function D(e) {
38
+ function O(e) {
39
39
  const n = JSON.stringify(e, null, 2).split(`
40
40
  `), t = [], i = [];
41
41
  for (const o of n) {
@@ -53,7 +53,7 @@ function D(e) {
53
53
  console.log(t.join(`
54
54
  `), ...i, e);
55
55
  }
56
- const q = (e) => typeof e == "function", Z = (e) => typeof e == "function", E = (e) => typeof e < "u", x = (e) => Z(e) ? e() : e;
56
+ const B = (e) => typeof e == "function", Z = (e) => typeof e == "function", E = (e) => typeof e < "u", x = (e) => Z(e) ? e() : e;
57
57
  class L {
58
58
  #e;
59
59
  #t;
@@ -73,18 +73,14 @@ class L {
73
73
  return z(this.#e, n);
74
74
  }
75
75
  set(n, t) {
76
- const i = z(this.#e, n), o = q(t) ? t(i) : t, c = { ...this.#e };
76
+ const i = z(this.#e, n), o = B(t) ? t(i) : t, c = { ...this.#e };
77
77
  U(c, n, o), this.#e = c, this.#t.forEach((a) => a());
78
78
  }
79
79
  }
80
- const O = Symbol.for("request-state-vocab-storage");
81
- let _;
82
- if (typeof window > "u") {
83
- const e = globalThis;
84
- e[O] ??= new AsyncLocalStorage(), _ = e[O];
85
- }
80
+ const _ = Symbol.for("request-state-vocab-storage"), M = globalThis;
81
+ typeof window > "u" && (M[_] ??= new AsyncLocalStorage());
86
82
  const ee = () => {
87
- const e = _.getStore();
83
+ const e = M[_]?.getStore();
88
84
  if (!e)
89
85
  throw new Error(`${L.name} must be initialized for this request`);
90
86
  return e;
@@ -92,12 +88,12 @@ const ee = () => {
92
88
  let A = null;
93
89
  const te = () => (A || (A = new L()), A);
94
90
  function oe(e) {
95
- return _.run(new L(), e);
91
+ return M[_]?.run(new L(), e);
96
92
  }
97
- const ne = () => typeof window > "u" ? ee() : te(), B = Symbol("state-def"), $ = Symbol("state-path"), P = Symbol("state-verbose"), C = Symbol("state-verbose-path"), R = Symbol("state-ssr"), F = typeof window > "u", se = F ? j : G;
93
+ const ne = () => typeof window > "u" ? ee() : te(), F = Symbol("state-def"), $ = Symbol("state-path"), P = Symbol("state-verbose"), C = Symbol("state-verbose-path"), R = Symbol("state-ssr"), J = typeof window > "u", se = J ? j : G;
98
94
  function ce(e = {}) {
99
95
  return {
100
- [B]: !0,
96
+ [F]: !0,
101
97
  // marks this object as a leaf in the router tree
102
98
  [$]: "",
103
99
  // placeholder; injected at runtime by injectPaths()
@@ -108,7 +104,7 @@ function ce(e = {}) {
108
104
  [R]: !1,
109
105
  // placeholder
110
106
  useState(n) {
111
- const t = F ? void 0 : x(e.storage), i = x(e.defaultValue), o = e.bidirectional;
107
+ const t = J ? void 0 : x(e.storage), i = x(e.defaultValue), o = e.bidirectional;
112
108
  n ??= {};
113
109
  const c = x(n.defaultValue) ?? i, a = n.bidirectional ?? o, s = this[$], v = this[P], y = this[C], V = this[R], l = ne(), u = e.serialize ?? JSON.stringify, b = e.deserialize ?? JSON.parse, d = (r, h, k) => {
114
110
  const m = h.getItem(r);
@@ -118,7 +114,7 @@ function ce(e = {}) {
118
114
  }),
119
115
  n.delayedSet,
120
116
  []
121
- ), S = M(void 0), T = M(!1);
117
+ ), S = N(void 0), T = N(!1);
122
118
  if (!T.current) {
123
119
  T.current = !0;
124
120
  let r = l.get(s);
@@ -132,9 +128,9 @@ function ce(e = {}) {
132
128
  if (v)
133
129
  if (y) {
134
130
  const r = z(w, y);
135
- r && D(r);
131
+ r && O(r);
136
132
  } else
137
- D(w);
133
+ O(w);
138
134
  const p = z(w, s, c);
139
135
  S.current = p, se(() => {
140
136
  !V || !t || d(s, t, p);
@@ -149,10 +145,10 @@ function ce(e = {}) {
149
145
  if (a)
150
146
  return window.addEventListener("storage", g), () => window.removeEventListener("storage", g);
151
147
  }, [a]);
152
- const I = N((r) => {
153
- const h = q(r) ? r(S.current) : r;
148
+ const I = D((r) => {
149
+ const h = B(r) ? r(S.current) : r;
154
150
  l.set(s, h), f(h, S.current), t && t.setItem(s, u(h));
155
- }, [s, t, f]), K = N(() => {
151
+ }, [s, t, f]), W = D(() => {
156
152
  const r = c;
157
153
  if (!E(r)) {
158
154
  t?.removeItem(s);
@@ -163,7 +159,7 @@ function ce(e = {}) {
163
159
  return [
164
160
  p,
165
161
  I,
166
- K
162
+ W
167
163
  ];
168
164
  },
169
165
  /** Returns the fully qualified job name (dot-separated path). */
@@ -172,7 +168,7 @@ function ce(e = {}) {
172
168
  }
173
169
  };
174
170
  }
175
- function J(e, n) {
171
+ function K(e, n) {
176
172
  const {
177
173
  path: t = "",
178
174
  verbose: i,
@@ -188,7 +184,7 @@ function J(e, n) {
188
184
  const y = new Proxy(e, {
189
185
  get(V, l) {
190
186
  const u = V[l], b = t ? `${t}.${String(l)}` : String(l);
191
- if (u && typeof u == "object" && B in u) {
187
+ if (u && typeof u == "object" && F in u) {
192
188
  const d = u;
193
189
  let f = a.leaf.get(d);
194
190
  f || (f = /* @__PURE__ */ new Map(), a.leaf.set(d, f));
@@ -214,7 +210,7 @@ function J(e, n) {
214
210
  ), p = { ...d, ...w };
215
211
  return f.set(b, p), p;
216
212
  }
217
- return u && typeof u == "object" ? J(u, {
213
+ return u && typeof u == "object" ? K(u, {
218
214
  ...n,
219
215
  path: b
220
216
  }) : u;
@@ -223,7 +219,7 @@ function J(e, n) {
223
219
  return s.set(t, y), y;
224
220
  }
225
221
  function ie(e, n) {
226
- return J(e, {
222
+ return K(e, {
227
223
  ...n,
228
224
  verbosePath: n?.verbosePath ?? "",
229
225
  cache: {
@@ -12,6 +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
+ export declare function runWithStateVocab<T>(fn: () => T): T | undefined;
16
16
  export declare const getVocabStore: () => VocabStore;
17
17
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakocloud/state-vocab",
3
- "version": "3.0.8",
3
+ "version": "3.0.9",
4
4
  "main": "dist/state-vocab.cjs.js",
5
5
  "module": "dist/state-vocab.es.js",
6
6
  "types": "dist/types/index.d.ts",