@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.
- package/dist/state-vocab.cjs.js +2 -2
- package/dist/state-vocab.es.js +23 -27
- package/dist/types/store.d.ts +1 -1
- package/package.json +1 -1
package/dist/state-vocab.cjs.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
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
|
|
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;
|
package/dist/state-vocab.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useMemo as
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
81
|
-
|
|
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 = _
|
|
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 _
|
|
91
|
+
return M[_]?.run(new L(), e);
|
|
96
92
|
}
|
|
97
|
-
const ne = () => typeof window > "u" ? ee() : te(),
|
|
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
|
-
[
|
|
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 =
|
|
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 =
|
|
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 &&
|
|
131
|
+
r && O(r);
|
|
136
132
|
} else
|
|
137
|
-
|
|
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 =
|
|
153
|
-
const h =
|
|
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]),
|
|
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
|
-
|
|
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
|
|
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" &&
|
|
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" ?
|
|
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
|
|
222
|
+
return K(e, {
|
|
227
223
|
...n,
|
|
228
224
|
verbosePath: n?.verbosePath ?? "",
|
|
229
225
|
cache: {
|
package/dist/types/store.d.ts
CHANGED
|
@@ -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 {};
|