@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.
- package/dist/state-vocab.cjs.js +3 -3
- package/dist/state-vocab.es.js +92 -85
- package/dist/types/store.d.ts +1 -0
- package/package.json +1 -2
package/dist/state-vocab.cjs.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
`),
|
|
3
|
-
`),...i,
|
|
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;
|
package/dist/state-vocab.es.js
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { useMemo as H,
|
|
2
|
-
const D = Symbol("state-def"),
|
|
3
|
-
function
|
|
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
|
|
5
|
+
return e;
|
|
6
6
|
const i = n.split(".");
|
|
7
|
-
let o =
|
|
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
|
|
13
|
-
return o === void 0 ?
|
|
12
|
+
return t;
|
|
13
|
+
return o === void 0 ? t : o;
|
|
14
14
|
}
|
|
15
|
-
function Q(
|
|
15
|
+
function Q(e, n, t) {
|
|
16
16
|
const i = n.replace(/\[(\d+)\]/g, ".$1").split(".");
|
|
17
|
-
let o =
|
|
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]] =
|
|
22
|
+
return o[i[i.length - 1]] = t, e;
|
|
23
23
|
}
|
|
24
|
-
function U(
|
|
25
|
-
let
|
|
24
|
+
function U(e, n = 0) {
|
|
25
|
+
let t;
|
|
26
26
|
return function(...i) {
|
|
27
|
-
|
|
28
|
-
|
|
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(
|
|
32
|
+
function X(e, n, t = []) {
|
|
33
33
|
return H(
|
|
34
|
-
() => U(
|
|
34
|
+
() => U(e, n),
|
|
35
35
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
36
|
-
|
|
36
|
+
t
|
|
37
37
|
);
|
|
38
38
|
}
|
|
39
|
-
function M(
|
|
40
|
-
const n = JSON.stringify(
|
|
41
|
-
`),
|
|
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
|
-
|
|
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
|
-
|
|
52
|
+
t.push(`%c${o}`), i.push("color: #cccccc");
|
|
53
53
|
}
|
|
54
|
-
console.log(
|
|
55
|
-
`), ...i,
|
|
54
|
+
console.log(t.join(`
|
|
55
|
+
`), ...i, e);
|
|
56
56
|
}
|
|
57
|
-
const O = (
|
|
58
|
-
class
|
|
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
|
|
74
|
+
return z(this.#e, n);
|
|
75
75
|
}
|
|
76
|
-
set(n,
|
|
77
|
-
const i =
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
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
|
-
[
|
|
95
|
+
[$]: "",
|
|
89
96
|
// placeholder; injected at runtime by injectPaths()
|
|
90
|
-
[
|
|
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
|
|
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[
|
|
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 ?
|
|
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 =
|
|
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
|
-
|
|
118
|
+
E(r) || (r = c, E(r) && a.set(s, r)), !V && t && d(s, t, r);
|
|
112
119
|
}
|
|
113
|
-
const
|
|
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 =
|
|
127
|
+
const r = z(w, y);
|
|
121
128
|
r && M(r);
|
|
122
129
|
} else
|
|
123
|
-
M(
|
|
124
|
-
const p =
|
|
125
|
-
S.current = p,
|
|
126
|
-
!V || !
|
|
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
|
|
135
|
+
const b = G((r) => {
|
|
129
136
|
if (r.key !== s)
|
|
130
137
|
return;
|
|
131
|
-
const h = r.newValue, m = (h === null ? null :
|
|
132
|
-
|
|
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",
|
|
143
|
+
return window.addEventListener("storage", b), () => window.removeEventListener("storage", b);
|
|
137
144
|
}, [l]);
|
|
138
|
-
const
|
|
145
|
+
const I = _((r) => {
|
|
139
146
|
const h = O(r) ? r(S.current) : r;
|
|
140
|
-
a.set(s, h), f(h, S.current),
|
|
141
|
-
}, [s,
|
|
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 (!
|
|
144
|
-
|
|
150
|
+
if (!E(r)) {
|
|
151
|
+
t?.removeItem(s);
|
|
145
152
|
return;
|
|
146
153
|
}
|
|
147
|
-
a.set(s, r), f(r, S.current),
|
|
148
|
-
}, [s, c,
|
|
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
|
-
|
|
152
|
-
|
|
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[
|
|
164
|
+
return this[$];
|
|
158
165
|
}
|
|
159
166
|
};
|
|
160
167
|
}
|
|
161
|
-
function
|
|
168
|
+
function J(e, n) {
|
|
162
169
|
const {
|
|
163
|
-
path:
|
|
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(
|
|
170
|
-
s || (s = /* @__PURE__ */ new Map(), l.proxy.set(
|
|
171
|
-
const v = s.get(
|
|
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(
|
|
181
|
+
const y = new Proxy(e, {
|
|
175
182
|
get(V, a) {
|
|
176
|
-
const u = V[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(
|
|
188
|
+
const S = f.get(g);
|
|
182
189
|
if (S)
|
|
183
190
|
return S;
|
|
184
191
|
const T = Reflect.ownKeys(d).filter(
|
|
185
|
-
(
|
|
186
|
-
),
|
|
187
|
-
T.map((
|
|
188
|
-
|
|
189
|
-
(...
|
|
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
|
-
[
|
|
193
|
-
[
|
|
199
|
+
[$]: g,
|
|
200
|
+
[P]: i,
|
|
194
201
|
[C]: o,
|
|
195
202
|
[R]: c
|
|
196
203
|
},
|
|
197
|
-
...
|
|
204
|
+
...I
|
|
198
205
|
)
|
|
199
206
|
])
|
|
200
|
-
), p = { ...d, ...
|
|
201
|
-
return f.set(
|
|
207
|
+
), p = { ...d, ...w };
|
|
208
|
+
return f.set(g, p), p;
|
|
202
209
|
}
|
|
203
|
-
return u && typeof u == "object" ?
|
|
210
|
+
return u && typeof u == "object" ? J(u, {
|
|
204
211
|
...n,
|
|
205
|
-
path:
|
|
212
|
+
path: g
|
|
206
213
|
}) : u;
|
|
207
214
|
}
|
|
208
215
|
});
|
|
209
|
-
return s.set(
|
|
216
|
+
return s.set(t, y), y;
|
|
210
217
|
}
|
|
211
|
-
function
|
|
212
|
-
return
|
|
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
|
-
|
|
223
|
-
|
|
229
|
+
re as defineState,
|
|
230
|
+
oe as setupStorage
|
|
224
231
|
};
|
package/dist/types/store.d.ts
CHANGED
|
@@ -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.
|
|
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",
|