@biglogic/rgs 3.1.0 → 3.5.0
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/README.md +24 -6
- package/SECURITY.md +1 -1
- package/advanced.js +1 -1
- package/core/hooks.d.ts +2 -3
- package/core/persistence.d.ts +23 -0
- package/core/plugins.d.ts +8 -0
- package/core/reactivity.d.ts +19 -0
- package/core/types.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +81 -77
- package/rgs-extension.vsix +0 -0
- package/core/advanced.js +0 -4
- package/core/async.js +0 -40
- package/core/hooks.js +0 -52
- package/core/security.js +0 -124
- package/core/store.js +0 -595
- package/core/types.js +0 -5
- package/core/utils.js +0 -72
- package/examples/README.md +0 -41
- package/examples/async-data-fetch/UserLoader.d.ts +0 -12
- package/examples/async-data-fetch/UserLoader.js +0 -10
- package/examples/async-data-fetch/UserLoader.ts +0 -30
- package/examples/basic-counter/CounterComponent.d.ts +0 -2
- package/examples/basic-counter/CounterComponent.js +0 -7
- package/examples/basic-counter/CounterComponent.tsx +0 -22
- package/examples/basic-counter/CounterStore.d.ts +0 -7
- package/examples/basic-counter/CounterStore.js +0 -13
- package/examples/basic-counter/CounterStore.ts +0 -25
- package/examples/big-data-indexeddb/BigDataStore.d.ts +0 -10
- package/examples/big-data-indexeddb/BigDataStore.js +0 -32
- package/examples/big-data-indexeddb/BigDataStore.ts +0 -60
- package/examples/global-theme/ThemeManager.d.ts +0 -7
- package/examples/global-theme/ThemeManager.js +0 -13
- package/examples/global-theme/ThemeManager.ts +0 -32
- package/examples/hybrid-cloud-sync/HybridStore.d.ts +0 -19
- package/examples/hybrid-cloud-sync/HybridStore.js +0 -44
- package/examples/hybrid-cloud-sync/HybridStore.ts +0 -78
- package/examples/persistent-cart/CartStore.d.ts +0 -13
- package/examples/persistent-cart/CartStore.js +0 -23
- package/examples/persistent-cart/CartStore.ts +0 -41
- package/examples/rbac-dashboard/DashboardStore.d.ts +0 -47
- package/examples/rbac-dashboard/DashboardStore.js +0 -31
- package/examples/rbac-dashboard/DashboardStore.ts +0 -46
- package/examples/secure-auth/AuthStore.d.ts +0 -14
- package/examples/secure-auth/AuthStore.js +0 -20
- package/examples/secure-auth/AuthStore.ts +0 -36
- package/examples/security-best-practices/SecurityStore.d.ts +0 -22
- package/examples/security-best-practices/SecurityStore.js +0 -30
- package/examples/security-best-practices/SecurityStore.ts +0 -75
- package/examples/stress-tests/StressStore.d.ts +0 -41
- package/examples/stress-tests/StressStore.js +0 -41
- package/examples/stress-tests/StressStore.ts +0 -61
- package/examples/super-easy/EasyStore.d.ts +0 -44
- package/examples/super-easy/EasyStore.js +0 -24
- package/examples/super-easy/EasyStore.ts +0 -61
- package/examples/undo-redo-editor/EditorStore.d.ts +0 -9
- package/examples/undo-redo-editor/EditorStore.js +0 -13
- package/examples/undo-redo-editor/EditorStore.ts +0 -28
- package/markdown/SUMMARY.md +0 -59
- package/markdown/api.md +0 -381
- package/markdown/chapters/01-philosophy.md +0 -54
- package/markdown/chapters/02-getting-started.md +0 -68
- package/markdown/chapters/03-the-magnetar-way.md +0 -69
- package/markdown/chapters/04-persistence-and-safety.md +0 -125
- package/markdown/chapters/05-plugin-sdk.md +0 -290
- package/markdown/chapters/05-plugins-and-extensibility.md +0 -190
- package/markdown/chapters/06-case-studies.md +0 -69
- package/markdown/chapters/07-faq.md +0 -53
- package/markdown/chapters/08-migration-guide.md +0 -253
- package/markdown/chapters/09-security-architecture.md +0 -40
- package/plugins/index.js +0 -34
- package/plugins/official/analytics.plugin.js +0 -19
- package/plugins/official/cloud-sync.plugin.js +0 -117
- package/plugins/official/debug.plugin.js +0 -62
- package/plugins/official/devtools.plugin.js +0 -28
- package/plugins/official/guard.plugin.js +0 -15
- package/plugins/official/immer.plugin.js +0 -10
- package/plugins/official/indexeddb.plugin.js +0 -102
- package/plugins/official/schema.plugin.js +0 -16
- package/plugins/official/snapshot.plugin.js +0 -27
- package/plugins/official/sync.plugin.js +0 -37
- package/plugins/official/undo-redo.plugin.js +0 -61
- package/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -47,6 +47,20 @@ We took the simplicity of **React Globo State (RGS)** and fused it with the arch
|
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
|
+
### Installation?
|
|
51
|
+
|
|
52
|
+
```shell
|
|
53
|
+
npm install @biglogic/rgs
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Examples and guide
|
|
59
|
+
|
|
60
|
+
**[github.com/BigLogic-ca/rgs](https://github.com/BigLogic-ca/rgs)**
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
50
64
|
## 🏗️ Architecture
|
|
51
65
|
|
|
52
66
|
```mermaid
|
|
@@ -96,15 +110,19 @@ graph TB
|
|
|
96
110
|
|
|
97
111
|
### Path A: The Zen Way (Modular)
|
|
98
112
|
|
|
99
|
-
Best for modern applications. Clean imports, zero global pollution
|
|
113
|
+
Best for modern applications. Clean imports, zero global pollution, **Type-Safe**.
|
|
100
114
|
|
|
101
115
|
```tsx
|
|
102
116
|
import { gstate } from '@biglogic/rgs'
|
|
103
117
|
|
|
104
|
-
//
|
|
105
|
-
const useCounter = gstate({ count: 0 })
|
|
118
|
+
// 1. Create a typed store hook
|
|
119
|
+
const useCounter = gstate({ count: 0, user: { name: 'Alice' } })
|
|
120
|
+
|
|
121
|
+
// 2. Use with Type-Safe Selectors (Preferred)
|
|
122
|
+
const count = useCounter(state => state.count)
|
|
123
|
+
const userName = useCounter(state => state.user.name)
|
|
106
124
|
|
|
107
|
-
//
|
|
125
|
+
// OR use string keys (Legacy)
|
|
108
126
|
const [count, setCount] = useCounter('count')
|
|
109
127
|
```
|
|
110
128
|
|
|
@@ -178,9 +196,9 @@ Protect your app from memory issues with automatic size warnings:
|
|
|
178
196
|
|
|
179
197
|
```tsx
|
|
180
198
|
const store = gstate({ data: {} }, {
|
|
181
|
-
// Warn if single value exceeds 5MB (
|
|
199
|
+
// Warn if single value exceeds 5MB (Default is 0/Disabled for performance)
|
|
182
200
|
maxObjectSize: 5 * 1024 * 1024,
|
|
183
|
-
// Warn if total store exceeds 50MB (
|
|
201
|
+
// Warn if total store exceeds 50MB (Default is 0/Disabled)
|
|
184
202
|
maxTotalSize: 50 * 1024 * 1024
|
|
185
203
|
})
|
|
186
204
|
```
|
package/SECURITY.md
CHANGED
|
@@ -6,7 +6,7 @@ React Globo State (RGS) implements enterprise-grade security including AES-256-G
|
|
|
6
6
|
|
|
7
7
|
Please email [@passariello](https://github.com/passariello) or see <https://dario.passariello.ca/contact/> if you have a potential security vulnerability to report.
|
|
8
8
|
|
|
9
|
-
## Recent Hardening
|
|
9
|
+
## Recent Hardening
|
|
10
10
|
|
|
11
11
|
- Improved XSS sanitization patterns to block `data:`, `vbscript:`, and complex HTML tag combinations.
|
|
12
12
|
- Implemented removal of HTML entity obfuscation.
|
package/advanced.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var It=Object.defineProperty;var zt=(e,t)=>{for(var r in t)It(e,r,{get:t[r],enumerable:!0})};var mt=Symbol.for("immer-nothing"),ut=Symbol.for("immer-draftable"),b=Symbol.for("immer-state");function v(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var M=Object,W=M.getPrototypeOf,de="constructor",me="prototype",Ne="configurable",pe="enumerable",le="writable",q="value",z=e=>!!e&&!!e[b];function D(e){return e?St(e)||we(e)||!!e[ut]||!!e[de]?.[ut]||be(e)||Ee(e):!1}var Tt=M[me][de].toString(),lt=new WeakMap;function St(e){if(!e||!Ge(e))return!1;let t=W(e);if(t===null||t===M[me])return!0;let r=M.hasOwnProperty.call(t,de)&&t[de];if(r===Object)return!0;if(!L(r))return!1;let n=lt.get(r);return n===void 0&&(n=Function.toString.call(r),lt.set(r,n)),n===Tt}function Se(e,t,r=!0){Y(e)===0?(r?Reflect.ownKeys(e):M.keys(e)).forEach(s=>{t(s,e[s],e)}):e.forEach((n,s)=>t(s,n,e))}function Y(e){let t=e[b];return t?t.type_:we(e)?1:be(e)?2:Ee(e)?3:0}var ft=(e,t,r=Y(e))=>r===2?e.has(t):M[me].hasOwnProperty.call(e,t),Fe=(e,t,r=Y(e))=>r===2?e.get(t):e[t],_e=(e,t,r,n=Y(e))=>{n===2?e.set(t,r):n===3?e.add(r):e[t]=r};function Vt(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var we=Array.isArray,be=e=>e instanceof Map,Ee=e=>e instanceof Set,Ge=e=>typeof e=="object",L=e=>typeof e=="function",Te=e=>typeof e=="boolean";function Nt(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var k=e=>e.copy_||e.base_;var He=e=>e.modified_?e.copy_:e.base_;function Ue(e,t){if(be(e))return new Map(e);if(Ee(e))return new Set(e);if(we(e))return Array[me].slice.call(e);let r=St(e);if(t===!0||t==="class_only"&&!r){let n=M.getOwnPropertyDescriptors(e);delete n[b];let s=Reflect.ownKeys(n);for(let a=0;a<s.length;a++){let d=s[a],_=n[d];_[le]===!1&&(_[le]=!0,_[Ne]=!0),(_.get||_.set)&&(n[d]={[Ne]:!0,[le]:!0,[pe]:_[pe],[q]:e[d]})}return M.create(W(e),n)}else{let n=W(e);if(n!==null&&r)return{...e};let s=M.create(n);return M.assign(s,e)}}function T(e,t=!1){return Ce(e)||z(e)||!D(e)||(Y(e)>1&&M.defineProperties(e,{set:ue,add:ue,clear:ue,delete:ue}),M.freeze(e),t&&Se(e,(r,n)=>{T(n,!0)},!1)),e}function Ft(){v(2)}var ue={[q]:Ft};function Ce(e){return e===null||!Ge(e)?!0:M.isFrozen(e)}var ge="MapSet",je="Patches",dt="ArrayMethods",wt={};function j(e){let t=wt[e];return t||v(0,e),t}var pt=e=>!!wt[e];var Q,bt=()=>Q,Ut=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:pt(ge)?j(ge):void 0,arrayMethodsPlugin_:pt(dt)?j(dt):void 0});function _t(e,t){t&&(e.patchPlugin_=j(je),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function $e(e){Le(e),e.drafts_.forEach(jt),e.drafts_=null}function Le(e){e===Q&&(Q=e.parent_)}var gt=e=>Q=Ut(Q,e);function jt(e){let t=e[b];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function ht(e,t){t.unfinalizedDrafts_=t.drafts_.length;let r=t.drafts_[0];if(e!==void 0&&e!==r){r[b].modified_&&($e(t),v(4)),D(e)&&(e=yt(t,e));let{patchPlugin_:s}=t;s&&s.generateReplacementPatches_(r[b].base_,e,t)}else e=yt(t,r);return $t(t,e,!0),$e(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==mt?e:void 0}function yt(e,t){if(Ce(t))return t;let r=t[b];if(!r)return he(t,e.handledSet_,e);if(!Pe(r,e))return t;if(!r.modified_)return r.base_;if(!r.finalized_){let{callbacks_:n}=r;if(n)for(;n.length>0;)n.pop()(e);Pt(r,e)}return r.copy_}function $t(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&T(t,r)}function Et(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Pe=(e,t)=>e.scope_===t,Lt=[];function Ct(e,t,r,n){let s=k(e),a=e.type_;if(n!==void 0&&Fe(s,n,a)===t){_e(s,n,r,a);return}if(!e.draftLocations_){let _=e.draftLocations_=new Map;Se(s,(y,S)=>{if(z(S)){let x=_.get(S)||[];x.push(y),_.set(S,x)}})}let d=e.draftLocations_.get(t)??Lt;for(let _ of d)_e(s,_,r,a)}function Wt(e,t,r){e.callbacks_.push(function(s){let a=t;if(!a||!Pe(a,s))return;s.mapSetPlugin_?.fixSetContents(a);let d=He(a);Ct(e,a.draft_??a,d,r),Pt(a,s)})}function Pt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let s=n.getPath(e);s&&n.generatePatches_(e,s,t)}Et(e)}}function Bt(e,t,r){let{scope_:n}=e;if(z(r)){let s=r[b];Pe(s,n)&&s.callbacks_.push(function(){fe(e);let d=He(s);Ct(e,r,d,t)})}else D(r)&&e.callbacks_.push(function(){let a=k(e);e.type_===3?a.has(r)&&he(r,n.handledSet_,n):Fe(a,t,e.type_)===r&&n.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&he(Fe(e.copy_,t,e.type_),n.handledSet_,n)})}function he(e,t,r){return!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1||z(e)||t.has(e)||!D(e)||Ce(e)||(t.add(e),Se(e,(n,s)=>{if(z(s)){let a=s[b];if(Pe(a,r)){let d=He(a);_e(e,n,d,e.type_),Et(a)}}else D(s)&&he(s,t,r)})),e}function Gt(e,t){let r=we(e),n={type_:r?1:0,scope_:t?t.scope_:bt(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},s=n,a=ye;r&&(s=[n],a=X);let{revoke:d,proxy:_}=Proxy.revocable(s,a);return n.draft_=_,n.revoke_=d,[_,n]}var ye={get(e,t){if(t===b)return e;let r=e.scope_.arrayMethodsPlugin_,n=e.type_===1&&typeof t=="string";if(n&&r?.isArrayOperationMethod(t))return r.createMethodInterceptor(e,t);let s=k(e);if(!ft(s,t,e.type_))return Ht(e,s,t);let a=s[t];if(e.finalized_||!D(a)||n&&e.operationMethod&&r?.isMutatingArrayMethod(e.operationMethod)&&Nt(t))return a;if(a===Ve(e.base_,t)){fe(e);let d=e.type_===1?+t:t,_=Be(e.scope_,a,e,d);return e.copy_[d]=_}return a},has(e,t){return t in k(e)},ownKeys(e){return Reflect.ownKeys(k(e))},set(e,t,r){let n=Mt(k(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){let s=Ve(k(e),t),a=s?.[b];if(a&&a.base_===r)return e.copy_[t]=r,e.assigned_.set(t,!1),!0;if(Vt(r,s)&&(r!==void 0||ft(e.base_,t,e.type_)))return!0;fe(e),We(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_.set(t,!0),Bt(e,t,r)),!0},deleteProperty(e,t){return fe(e),Ve(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),We(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let r=k(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{[le]:!0,[Ne]:e.type_!==1||t!=="length",[pe]:n[pe],[q]:r[t]}},defineProperty(){v(11)},getPrototypeOf(e){return W(e.base_)},setPrototypeOf(){v(12)}},X={};for(let e in ye){let t=ye[e];X[e]=function(){let r=arguments;return r[0]=r[0][0],t.apply(this,r)}}X.deleteProperty=function(e,t){return X.set.call(this,e,t,void 0)};X.set=function(e,t,r){return ye.set.call(this,e[0],t,r,e[0])};function Ve(e,t){let r=e[b];return(r?k(r):e)[t]}function Ht(e,t,r){let n=Mt(t,r);return n?q in n?n[q]:n.get?.call(e.draft_):void 0}function Mt(e,t){if(!(t in e))return;let r=W(e);for(;r;){let n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=W(r)}}function We(e){e.modified_||(e.modified_=!0,e.parent_&&We(e.parent_))}function fe(e){e.copy_||(e.assigned_=new Map,e.copy_=Ue(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Jt=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(t,r,n)=>{if(L(t)&&!L(r)){let a=r;r=t;let d=this;return function(y=a,...S){return d.produce(y,x=>r.call(this,x,...S))}}L(r)||v(6),n!==void 0&&!L(n)&&v(7);let s;if(D(t)){let a=gt(this),d=Be(a,t,void 0),_=!0;try{s=r(d),_=!1}finally{_?$e(a):Le(a)}return _t(a,n),ht(s,a)}else if(!t||!Ge(t)){if(s=r(t),s===void 0&&(s=t),s===mt&&(s=void 0),this.autoFreeze_&&T(s,!0),n){let a=[],d=[];j(je).generateReplacementPatches_(t,s,{patches_:a,inversePatches_:d}),n(a,d)}return s}else v(1,t)},this.produceWithPatches=(t,r)=>{if(L(t))return(d,..._)=>this.produceWithPatches(d,y=>t(y,..._));let n,s;return[this.produce(t,r,(d,_)=>{n=d,s=_}),n,s]},Te(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Te(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Te(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){D(e)||v(8),z(e)&&(e=Kt(e));let t=gt(this),r=Be(t,e,void 0);return r[b].isManual_=!0,Le(t),r}finishDraft(e,t){let r=e&&e[b];(!r||!r.isManual_)&&v(9);let{scope_:n}=r;return _t(n,t),ht(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){let s=t[r];if(s.path.length===0&&s.op==="replace"){e=s.value;break}}r>-1&&(t=t.slice(r+1));let n=j(je).applyPatches_;return z(e)?n(e,t):this.produce(e,s=>n(s,t))}};function Be(e,t,r,n){let[s,a]=be(t)?j(ge).proxyMap_(t,r):Ee(t)?j(ge).proxySet_(t,r):Gt(t,r);return(r?.scope_??bt()).drafts_.push(s),a.callbacks_=r?.callbacks_??[],a.key_=n,r&&n!==void 0?Wt(r,a,n):a.callbacks_.push(function(y){y.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:S}=y;a.modified_&&S&&S.generatePatches_(a,[],y)}),s}function Kt(e){return z(e)||v(10,e),At(e)}function At(e){if(!D(e)||Ce(e))return e;let t=e[b],r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Ue(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Ue(e,!0);return Se(r,(s,a)=>{_e(r,s,At(a))},n),t&&(t.finalized_=!1),r}var qt=new Jt,vt=qt.produce;var rt={};zt(rt,{addAccessRule:()=>Ae,decrypt:()=>Ke,deleteUserData:()=>tt,encrypt:()=>Je,exportKey:()=>Xt,exportUserData:()=>et,generateEncryptionKey:()=>Qt,getConsents:()=>Ze,hasConsent:()=>Xe,hasPermission:()=>te,importKey:()=>Yt,isAuditActive:()=>qe,isCryptoAvailable:()=>xt,logAudit:()=>ee,recordConsent:()=>ve,revokeConsent:()=>Ye,sanitizeValue:()=>Z,setAuditLogger:()=>Zt,validateKey:()=>Qe});var xt=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",Qt=async()=>{if(!xt)throw new Error("Web Crypto API not available");let e=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),t=crypto.getRandomValues(new Uint8Array(12));return{key:e,iv:t}},Xt=async e=>{let t=await crypto.subtle.exportKey("raw",e.key);return{key:btoa(String.fromCharCode(...new Uint8Array(t))),iv:btoa(String.fromCharCode(...e.iv))}},Yt=async(e,t)=>{let r=Uint8Array.from(atob(e),a=>a.charCodeAt(0)),n=Uint8Array.from(atob(t),a=>a.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",r,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:n}},Je=async(e,t)=>{let r=new TextEncoder,n=r.encode(JSON.stringify(e)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:t.iv},t.key,n),a=new Uint8Array(t.iv.length+s.byteLength);return a.set(t.iv),a.set(new Uint8Array(s),t.iv.length),btoa(String.fromCharCode(...a))},Ke=async(e,t)=>{let r=Uint8Array.from(atob(e),d=>d.charCodeAt(0)),n=r.slice(0,12),s=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},t.key,s);return JSON.parse(new TextDecoder().decode(a))},Me=null,Zt=e=>{Me=e},qe=()=>Me!==null,ee=e=>{Me&&Me(e)},Ae=(e,t,r)=>{e.set(t instanceof RegExp?t.source:t,r)},te=(e,t,r,n)=>{if(e.size===0)return!0;for(let[s,a]of e){let d;if(typeof s=="function")d=s(t,n);else try{d=new RegExp(s).test(t)}catch{continue}if(d)return a.includes(r)||a.includes("admin")}return!1},Z=e=>{if(typeof e=="string")return e.replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/javascript:/gi,"[SEC-REMOVED]").replace(/data:/gi,"[SEC-REMOVED]").replace(/vbscript:/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]").replace(/&#[xX]?[0-9a-fA-F]+;?/g,"");if(e&&typeof e=="object"&&!Array.isArray(e)){if(Object.getPrototypeOf(e)===Object.prototype){let t={};for(let[r,n]of Object.entries(e))t[r]=Z(n);return t}return e}return Array.isArray(e)?e.map(t=>Z(t)):e},Qe=e=>/^[a-zA-Z0-9_.-]+$/.test(e)&&e.length<=256,ve=(e,t,r,n)=>{let s={id:crypto.randomUUID(),purpose:r,granted:n,timestamp:Date.now()},a=e.get(t)||[];return a.push(s),e.set(t,a),ee({timestamp:Date.now(),action:"set",key:`consent:${r}`,userId:t,success:!0}),s},Xe=(e,t,r)=>{let n=e.get(t);if(!n)return!1;for(let s=n.length-1;s>=0;s--){let a=n[s];if(a&&a.purpose===r)return a.granted}return!1},Ye=(e,t,r)=>ve(e,t,r,!1),Ze=(e,t)=>e.get(t)||[],et=(e,t)=>({userId:t,exportedAt:Date.now(),consents:e.get(t)||[]}),tt=(e,t)=>{let r=e.get(t)?.length||0;return e.delete(t),{success:!0,deletedConsents:r}};var ne=e=>{if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}let t=new WeakMap,r=n=>{if(n===null||typeof n!="object"||typeof n=="function")return n;if(t.has(n))return t.get(n);if(n instanceof Date)return new Date(n.getTime());if(n instanceof RegExp)return new RegExp(n.source,n.flags);if(n instanceof Map){let d=new Map;return t.set(n,d),n.forEach((_,y)=>d.set(r(y),r(_))),d}if(n instanceof Set){let d=new Set;return t.set(n,d),n.forEach(_=>d.add(r(_))),d}let s=Array.isArray(n)?[]:Object.create(Object.getPrototypeOf(n));t.set(n,s);let a=[...Object.keys(n),...Object.getOwnPropertySymbols(n)];for(let d of a)s[d]=r(n[d]);return s};return r(e)},re=(e,t)=>{if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return e===t;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!re(e[s],t[s]))return!1;return!0}let r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let s=0;s<r.length;s++){let a=r[s];if(!(a in t)||!re(e[a],t[a]))return!1}return!0};var xe={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let e=new Map;return{getItem:t=>e.get(t)||null,setItem:(t,r)=>e.set(t,r),removeItem:t=>e.delete(t),key:t=>Array.from(e.keys())[t]||null,get length(){return e.size}}}},Oe=e=>{let t=new Map,r=new Map,n=new Map,s=new Set,a=new Map,d=new Set,_=new Map,y=new Map,S=new Map,x=new Map,B=new Map,Re=new Map,I=new Map,V=new Map,nt=e?.namespace||"gstate",E=e?.silent??!1,Ot=e?.debounceTime??150,ke=e?.version??0,C=e?.storage||xe.local(),g=e?.onError,oe=e?.maxObjectSize??5*1024*1024,se=e?.maxTotalSize??50*1024*1024,ie=e?.encryptionKey??null,ot=e?.validateInput??!0,Rt=e?.auditEnabled??!0,G=e?.userId,H=e?.immer??!0,kt=e?.persistByDefault??e?.persistence??e?.persist??!1;e?.accessRules&&e.accessRules.forEach(o=>Ae(I,o.pattern,o.permissions));let De=!1,Ie=!1,ae=!1,O=0,$=null,ce,Dt=new Promise(o=>{ce=o}),ze=o=>{if(o==null)return 0;let i=typeof o;if(i==="boolean")return 4;if(i==="number")return 8;if(i==="string")return o.length*2;if(i!=="object")return 0;let c=0,l=[o],p=new WeakSet;for(;l.length>0;){let u=l.pop();if(typeof u=="boolean")c+=4;else if(typeof u=="number")c+=8;else if(typeof u=="string")c+=u.length*2;else if(typeof u=="object"&&u!==null){let f=u;if(p.has(f))continue;if(p.add(f),Array.isArray(f))for(let h=0;h<f.length;h++)l.push(f[h]);else for(let h of Object.keys(f))c+=h.length*2,l.push(f[h])}}return c},J=()=>`${nt}_`,N=(o,i)=>{if(x.size!==0)for(let c of x.values()){let l=c.hooks?.[o];if(l)try{l(i)}catch(p){let u=p instanceof Error?p:new Error(String(p));g?g(u,{operation:`plugin:${c.name}:${o}`,key:i.key}):E||console.error(`[gState] Plugin "${c.name}" error:`,p)}}},R=(o,i,c,l)=>{Rt&&qe()&&ee&&ee({timestamp:Date.now(),action:o,key:i,userId:G,success:c,error:l})},K=o=>{if(o){let i=S.get(o);if(i)for(let p of i)st(p);let c=_.get(o);if(c){let p=w.get(o);for(let u of c)try{u(p)}catch(f){let h=f instanceof Error?f:new Error(String(f));g?g(h,{operation:"watcher",key:o}):E||console.error(`[gState] Watcher error for "${o}":`,f)}}let l=a.get(o);if(l)for(let p of l)try{p()}catch(u){let f=u instanceof Error?u:new Error(String(u));g?g(f,{operation:"keyListener",key:o}):E||console.error(`[gState] Listener error for "${o}":`,u)}}if(De){Ie=!0;return}for(let i of s)try{i()}catch(c){let l=c instanceof Error?c:new Error(String(c));g?g(l,{operation:"listener"}):E||console.error("[gState] Global listener error: ",c)}},st=o=>{let i=y.get(o),c=new Set;if(!i)return;let l=u=>(c.add(u),y.has(u)?y.get(u).lastValue:w.get(u)),p=i.selector(l);i.deps.forEach(u=>{if(!c.has(u)){let f=S.get(u);f&&(f.delete(o),f.size===0&&S.delete(u))}}),c.forEach(u=>{i.deps.has(u)||(S.has(u)||S.set(u,new Set),S.get(u).add(o))}),i.deps=c,re(i.lastValue,p)||(i.lastValue=H&&p!==null&&typeof p=="object"?T(ne(p),!0):p,r.set(o,(r.get(o)||0)+1),K(o))},it=async()=>{if(!C)return;try{let i={};t.forEach((p,u)=>{i[u]=p});let c,l=e?.encoded;l?c=btoa(JSON.stringify(i)):c=JSON.stringify(i),C.setItem(J().replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:c,_sys_v:ke,_b64:l?!0:void 0})),R("set","FULL_STATE",!0)}catch(i){let c=i instanceof Error?i:new Error(String(i));g?g(c,{operation:"persist",key:"FULL_STATE"}):E||console.error("[gState] Persist failed: ",c)}let o=Array.from(B.entries());B.clear();for(let[i,c]of o)try{let l=c.value,p=c.options.encoded||c.options.secure;if(c.options.encrypted){if(!ie)throw new Error(`Encryption key missing for "${i}"`);l=await Je(c.value,ie)}else p?l=btoa(JSON.stringify(c.value)):typeof c.value=="object"&&c.value!==null&&(l=JSON.stringify(c.value));C.setItem(`${J()}${i}`,JSON.stringify({v:r.get(i)||1,t:Date.now(),e:c.options.ttl?Date.now()+c.options.ttl:null,d:l,_sys_v:ke,_enc:c.options.encrypted?!0:void 0,_b64:p?!0:void 0})),R("set",i,!0)}catch(l){let p=l instanceof Error?l:new Error(String(l));g?g(p,{operation:"persist",key:i}):E||console.error("[gState] Persist failed: ",p)}},F={},w={_setSilently:(o,i)=>{let c=n.get(o)||0,l=H&&i!==null&&typeof i=="object"?T(ne(i),!0):i,p=ze(l);O=O-c+p,n.set(o,p),t.set(o,l),r.set(o,(r.get(o)||0)+1)},_registerMethod:(o,i,c)=>{let l=f=>f==="__proto__"||f==="constructor"||f==="prototype";if(c!==void 0){let f=o,h=i;if(l(f)||l(h)){console.warn("[gState] Refusing to register method with unsafe key:",f,h);return}F[f]||(F[f]={}),F[f][h]=c;return}console.warn("[gState] _registerMethod(name, fn) is deprecated. Use _registerMethod(pluginName, methodName, fn) instead.");let p=o,u=i;F.core||(F.core={}),F.core[p]=u},set:(o,i,c={})=>{let l=t.get(o),p=H&&typeof i=="function"?vt(l,i):i;if(ot&&!Qe(o))return E||console.warn(`[gState] Invalid key: ${o}`),!1;if(!te(I,o,"write",G))return R("set",o,!1,"RBAC Denied"),E||console.error(`[gState] RBAC Denied for "${o}"`),!1;let u=ot?Z(p):p,f=n.get(o)||0;N("onBeforeSet",{key:o,value:u,store:w,version:r.get(o)||0});let h=H&&u!==null&&typeof u=="object"?T(ne(u),!0):u;if(!re(l,h)){let A=oe>0||se>0?ze(h):0;if(oe>0&&A>oe){let U=new Error(`Object size (${A} bytes) exceeds maxObjectSize (${oe} bytes)`);g?g(U,{operation:"set",key:o}):E||console.warn(`[gState] ${U.message} for "${o}"`)}if(se>0){let U=O-f+A;if(U>se){let ct=new Error(`Total store size (${U} bytes) exceeds limit (${se} bytes)`);g?g(ct,{operation:"set"}):E||console.warn(`[gState] ${ct.message}`)}}O=O-f+A,n.set(o,A),t.set(o,h),r.set(o,(r.get(o)||0)+1);let P=c.persist??kt;return P&&(B.set(o,{value:h,options:{...c,persist:P,encoded:c.encoded||e?.encoded}}),$&&clearTimeout($),$=setTimeout(it,Ot)),N("onSet",{key:o,value:h,store:w,version:r.get(o)}),R("set",o,!0),K(o),!0}return!1},get:o=>{if(!te(I,o,"read",G))return R("get",o,!1,"RBAC Denied"),null;let i=t.get(o);return N("onGet",{store:w,key:o,value:i}),R("get",o,!0),i},compute:(o,i)=>{try{return y.has(o)||(y.set(o,{selector:i,lastValue:null,deps:new Set}),st(o)),y.get(o).lastValue}catch(c){let l=c instanceof Error?c:new Error(String(c));return g?g(l,{operation:"compute",key:o}):E||console.error(`[gState] Compute error for "${o}": `,c),null}},watch:(o,i)=>{_.has(o)||_.set(o,new Set);let c=_.get(o);return c.add(i),()=>{c.delete(i),c.size===0&&_.delete(o)}},remove:o=>{if(!te(I,o,"delete",G))return R("delete",o,!1,"RBAC Denied"),!1;let i=t.get(o),c=t.delete(o);return c&&(O-=n.get(o)||0,n.delete(o),N("onRemove",{store:w,key:o,value:i})),r.set(o,(r.get(o)||0)+1),C&&C.removeItem(`${J()}${o} `),R("delete",o,!0),K(o),c},delete:o=>w.remove(o),deleteAll:()=>{if(Array.from(t.keys()).forEach(o=>w.remove(o)),C){let o=J();for(let i=0;i<(C.length||0);i++){let c=C.key(i);c?.startsWith(o)&&(C.removeItem(c),i--)}}return O=0,n.clear(),!0},list:()=>Object.fromEntries(t.entries()),use:o=>{d.add(o)},transaction:o=>{De=!0,N("onTransaction",{store:w,key:"START"});try{o()}finally{De=!1,N("onTransaction",{store:w,key:"END"}),Ie&&(Ie=!1,K())}},destroy:()=>{$&&(clearTimeout($),$=null),B.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",at),N("onDestroy",{store:w}),s.clear(),a.clear(),_.clear(),y.clear(),S.clear(),x.clear(),t.clear(),n.clear(),O=0,I.clear(),V.clear(),r.clear(),Re.clear(),d.clear()},_addPlugin:o=>{try{x.set(o.name,o),o.hooks?.onInstall?.({store:w})}catch(i){let c=i instanceof Error?i:new Error(String(i));g?g(c,{operation:"plugin:install",key:o.name}):E||console.error(`[gState] Failed to install plugin "${o.name}": `,i)}},_removePlugin:o=>{x.delete(o)},_subscribe:(o,i)=>{if(i){a.has(i)||a.set(i,new Set);let c=a.get(i);return c.add(o),()=>{c.delete(o),c.size===0&&a.delete(i)}}return s.add(o),()=>s.delete(o)},_getVersion:o=>r.get(o)??0,addAccessRule:(o,i)=>Ae(I,o,i),hasPermission:(o,i,c)=>{if(I.size===0)return!0;for(let[l,p]of I){let u;if(typeof l=="function")u=l(o,c);else try{let f=Re.get(l);f||(f=new RegExp(l),Re.set(l,f)),u=f.test(o)}catch{continue}if(u)return p.includes(i)||p.includes("admin")}return!1},recordConsent:(o,i,c)=>ve(V,o,i,c),hasConsent:(o,i)=>Xe(V,o,i),getConsents:o=>Ze(V,o),revokeConsent:(o,i)=>Ye(V,o,i),exportUserData:o=>et(V,o),deleteUserData:o=>tt(V,o),get plugins(){return F},get isReady(){return ae},get namespace(){return nt},get userId(){return G},whenReady:()=>Dt};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(o=>{let i=w[o];i&&w._registerMethod("security",o,i)});let at=()=>{B.size>0&&it()};return typeof window<"u"&&window.addEventListener("beforeunload",at),C?(async()=>{try{let i={},c=J(),l=0;for(let u=0;u<(C.length||0);u++){let f=C.key(u);if(!f||!f.startsWith(c))continue;let h=C.getItem(f);if(h)try{let m=JSON.parse(h),A=f.substring(c.length);if(l=Math.max(l,m._sys_v!==void 0?m._sys_v:m.v||0),m.e&&Date.now()>m.e){C.removeItem(f),u--;continue}let P=m.d;if(m._enc&&ie)P=await Ke(P,ie);else if(typeof P=="string"){if(m._b64)try{P=JSON.parse(atob(P))}catch{}else if(P.startsWith("{")||P.startsWith("["))try{P=JSON.parse(P)}catch{}}i[A]=P,R("hydrate",A,!0)}catch(m){R("hydrate",f,!1,String(m));let A=m instanceof Error?m:new Error(String(m));g?g(A,{operation:"hydration",key:f}):E||console.error(`[gState] Hydration failed for "${f}": `,m)}}let p=l<ke&&e?.migrate?e.migrate(i,l):i;Object.entries(p).forEach(([u,f])=>{let h=H&&f!==null&&typeof f=="object"?T(ne(f),!0):f,m=ze(h),A=n.get(u)||0;O=O-A+m,n.set(u,m),t.set(u,h),r.set(u,1)}),ae=!0,ce(),K()}catch(i){ae=!0,ce();let c=i instanceof Error?i:new Error(String(i));g?g(c,{operation:"hydration"}):E||console.error("[gState] Hydration failed: ",c)}})():(ae=!0,ce()),w};var ur=(e,t)=>Oe({...t,storage:e}),lr=e=>Oe({...e,storage:xe.memory()}),fr=e=>{let t=xe.session();return t?Oe({...e,storage:t}):null};export{rt as Security,xe as StorageAdapters,lr as createMemoryStore,fr as createSessionStore,Oe as createStore,ur as createStoreWithStorage};
|
|
1
|
+
var jt=Object.defineProperty;var $t=(e,t)=>{for(var r in t)jt(e,r,{get:t[r],enumerable:!0})};var wt=Symbol.for("immer-nothing"),ft=Symbol.for("immer-draftable"),M=Symbol.for("immer-state");function I(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var k=Object,G=k.getPrototypeOf,pe="constructor",Se="prototype",Ue="configurable",ge="enumerable",fe="writable",Y="value",j=e=>!!e&&!!e[M];function N(e){return e?bt(e)||be(e)||!!e[ft]||!!e[pe]?.[ft]||Ee(e)||Ce(e):!1}var Lt=k[Se][pe].toString(),dt=new WeakMap;function bt(e){if(!e||!Ke(e))return!1;let t=G(e);if(t===null||t===k[Se])return!0;let r=k.hasOwnProperty.call(t,pe)&&t[pe];if(r===Object)return!0;if(!H(r))return!1;let n=dt.get(r);return n===void 0&&(n=Function.toString.call(r),dt.set(r,n)),n===Lt}function we(e,t,r=!0){te(e)===0?(r?Reflect.ownKeys(e):k.keys(e)).forEach(s=>{t(s,e[s],e)}):e.forEach((n,s)=>t(s,n,e))}function te(e){let t=e[M];return t?t.type_:be(e)?1:Ee(e)?2:Ce(e)?3:0}var pt=(e,t,r=te(e))=>r===2?e.has(t):k[Se].hasOwnProperty.call(e,t),je=(e,t,r=te(e))=>r===2?e.get(t):e[t],_e=(e,t,r,n=te(e))=>{n===2?e.set(t,r):n===3?e.add(r):e[t]=r};function Wt(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var be=Array.isArray,Ee=e=>e instanceof Map,Ce=e=>e instanceof Set,Ke=e=>typeof e=="object",H=e=>typeof e=="function",Ne=e=>typeof e=="boolean";function Bt(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var V=e=>e.copy_||e.base_;var Je=e=>e.modified_?e.copy_:e.base_;function $e(e,t){if(Ee(e))return new Map(e);if(Ce(e))return new Set(e);if(be(e))return Array[Se].slice.call(e);let r=bt(e);if(t===!0||t==="class_only"&&!r){let n=k.getOwnPropertyDescriptors(e);delete n[M];let s=Reflect.ownKeys(n);for(let i=0;i<s.length;i++){let c=s[i],l=n[c];l[fe]===!1&&(l[fe]=!0,l[Ue]=!0),(l.get||l.set)&&(n[c]={[Ue]:!0,[fe]:!0,[ge]:l[ge],[Y]:e[c]})}return k.create(G(e),n)}else{let n=G(e);if(n!==null&&r)return{...e};let s=k.create(n);return k.assign(s,e)}}function F(e,t=!1){return Pe(e)||j(e)||!N(e)||(te(e)>1&&k.defineProperties(e,{set:le,add:le,clear:le,delete:le}),k.freeze(e),t&&we(e,(r,n)=>{F(n,!0)},!1)),e}function Ht(){I(2)}var le={[Y]:Ht};function Pe(e){return e===null||!Ke(e)?!0:k.isFrozen(e)}var he="MapSet",Le="Patches",gt="ArrayMethods",Et={};function W(e){let t=Et[e];return t||I(0,e),t}var _t=e=>!!Et[e];var Z,Ct=()=>Z,Gt=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:_t(he)?W(he):void 0,arrayMethodsPlugin_:_t(gt)?W(gt):void 0});function ht(e,t){t&&(e.patchPlugin_=W(Le),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function We(e){Be(e),e.drafts_.forEach(Kt),e.drafts_=null}function Be(e){e===Z&&(Z=e.parent_)}var yt=e=>Z=Gt(Z,e);function Kt(e){let t=e[M];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function mt(e,t){t.unfinalizedDrafts_=t.drafts_.length;let r=t.drafts_[0];if(e!==void 0&&e!==r){r[M].modified_&&(We(t),I(4)),N(e)&&(e=St(t,e));let{patchPlugin_:s}=t;s&&s.generateReplacementPatches_(r[M].base_,e,t)}else e=St(t,r);return Jt(t,e,!0),We(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==wt?e:void 0}function St(e,t){if(Pe(t))return t;let r=t[M];if(!r)return ye(t,e.handledSet_,e);if(!ve(r,e))return t;if(!r.modified_)return r.base_;if(!r.finalized_){let{callbacks_:n}=r;if(n)for(;n.length>0;)n.pop()(e);Mt(r,e)}return r.copy_}function Jt(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&F(t,r)}function Pt(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var ve=(e,t)=>e.scope_===t,Qt=[];function vt(e,t,r,n){let s=V(e),i=e.type_;if(n!==void 0&&je(s,n,i)===t){_e(s,n,r,i);return}if(!e.draftLocations_){let l=e.draftLocations_=new Map;we(s,(_,y)=>{if(j(y)){let x=l.get(y)||[];x.push(_),l.set(y,x)}})}let c=e.draftLocations_.get(t)??Qt;for(let l of c)_e(s,l,r,i)}function qt(e,t,r){e.callbacks_.push(function(s){let i=t;if(!i||!ve(i,s))return;s.mapSetPlugin_?.fixSetContents(i);let c=Je(i);vt(e,i.draft_??i,c,r),Mt(i,s)})}function Mt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let s=n.getPath(e);s&&n.generatePatches_(e,s,t)}Pt(e)}}function Xt(e,t,r){let{scope_:n}=e;if(j(r)){let s=r[M];ve(s,n)&&s.callbacks_.push(function(){de(e);let c=Je(s);vt(e,r,c,t)})}else N(r)&&e.callbacks_.push(function(){let i=V(e);e.type_===3?i.has(r)&&ye(r,n.handledSet_,n):je(i,t,e.type_)===r&&n.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&ye(je(e.copy_,t,e.type_),n.handledSet_,n)})}function ye(e,t,r){return!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1||j(e)||t.has(e)||!N(e)||Pe(e)||(t.add(e),we(e,(n,s)=>{if(j(s)){let i=s[M];if(ve(i,r)){let c=Je(i);_e(e,n,c,e.type_),Pt(i)}}else N(s)&&ye(s,t,r)})),e}function Yt(e,t){let r=be(e),n={type_:r?1:0,scope_:t?t.scope_:Ct(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},s=n,i=me;r&&(s=[n],i=ee);let{revoke:c,proxy:l}=Proxy.revocable(s,i);return n.draft_=l,n.revoke_=c,[l,n]}var me={get(e,t){if(t===M)return e;let r=e.scope_.arrayMethodsPlugin_,n=e.type_===1&&typeof t=="string";if(n&&r?.isArrayOperationMethod(t))return r.createMethodInterceptor(e,t);let s=V(e);if(!pt(s,t,e.type_))return Zt(e,s,t);let i=s[t];if(e.finalized_||!N(i)||n&&e.operationMethod&&r?.isMutatingArrayMethod(e.operationMethod)&&Bt(t))return i;if(i===Fe(e.base_,t)){de(e);let c=e.type_===1?+t:t,l=Ge(e.scope_,i,e,c);return e.copy_[c]=l}return i},has(e,t){return t in V(e)},ownKeys(e){return Reflect.ownKeys(V(e))},set(e,t,r){let n=xt(V(e),t);if(n?.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){let s=Fe(V(e),t),i=s?.[M];if(i&&i.base_===r)return e.copy_[t]=r,e.assigned_.set(t,!1),!0;if(Wt(r,s)&&(r!==void 0||pt(e.base_,t,e.type_)))return!0;de(e),He(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_.set(t,!0),Xt(e,t,r)),!0},deleteProperty(e,t){return de(e),Fe(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),He(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let r=V(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{[fe]:!0,[Ue]:e.type_!==1||t!=="length",[ge]:n[ge],[Y]:r[t]}},defineProperty(){I(11)},getPrototypeOf(e){return G(e.base_)},setPrototypeOf(){I(12)}},ee={};for(let e in me){let t=me[e];ee[e]=function(){let r=arguments;return r[0]=r[0][0],t.apply(this,r)}}ee.deleteProperty=function(e,t){return ee.set.call(this,e,t,void 0)};ee.set=function(e,t,r){return me.set.call(this,e[0],t,r,e[0])};function Fe(e,t){let r=e[M];return(r?V(r):e)[t]}function Zt(e,t,r){let n=xt(t,r);return n?Y in n?n[Y]:n.get?.call(e.draft_):void 0}function xt(e,t){if(!(t in e))return;let r=G(e);for(;r;){let n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=G(r)}}function He(e){e.modified_||(e.modified_=!0,e.parent_&&He(e.parent_))}function de(e){e.copy_||(e.assigned_=new Map,e.copy_=$e(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var er=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(t,r,n)=>{if(H(t)&&!H(r)){let i=r;r=t;let c=this;return function(_=i,...y){return c.produce(_,x=>r.call(this,x,...y))}}H(r)||I(6),n!==void 0&&!H(n)&&I(7);let s;if(N(t)){let i=yt(this),c=Ge(i,t,void 0),l=!0;try{s=r(c),l=!1}finally{l?We(i):Be(i)}return ht(i,n),mt(s,i)}else if(!t||!Ke(t)){if(s=r(t),s===void 0&&(s=t),s===wt&&(s=void 0),this.autoFreeze_&&F(s,!0),n){let i=[],c=[];W(Le).generateReplacementPatches_(t,s,{patches_:i,inversePatches_:c}),n(i,c)}return s}else I(1,t)},this.produceWithPatches=(t,r)=>{if(H(t))return(c,...l)=>this.produceWithPatches(c,_=>t(_,...l));let n,s;return[this.produce(t,r,(c,l)=>{n=c,s=l}),n,s]},Ne(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ne(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ne(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){N(e)||I(8),j(e)&&(e=tr(e));let t=yt(this),r=Ge(t,e,void 0);return r[M].isManual_=!0,Be(t),r}finishDraft(e,t){let r=e&&e[M];(!r||!r.isManual_)&&I(9);let{scope_:n}=r;return ht(n,t),mt(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){let s=t[r];if(s.path.length===0&&s.op==="replace"){e=s.value;break}}r>-1&&(t=t.slice(r+1));let n=W(Le).applyPatches_;return j(e)?n(e,t):this.produce(e,s=>n(s,t))}};function Ge(e,t,r,n){let[s,i]=Ee(t)?W(he).proxyMap_(t,r):Ce(t)?W(he).proxySet_(t,r):Yt(t,r);return(r?.scope_??Ct()).drafts_.push(s),i.callbacks_=r?.callbacks_??[],i.key_=n,r&&n!==void 0?qt(r,i,n):i.callbacks_.push(function(_){_.mapSetPlugin_?.fixSetContents(i);let{patchPlugin_:y}=_;i.modified_&&y&&y.generatePatches_(i,[],_)}),s}function tr(e){return j(e)||I(10,e),At(e)}function At(e){if(!N(e)||Pe(e))return e;let t=e[M],r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=$e(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=$e(e,!0);return we(r,(s,i)=>{_e(r,s,At(i))},n),t&&(t.finalized_=!1),r}var rr=new er,kt=rr.produce;var ke={};$t(ke,{addAccessRule:()=>xe,decrypt:()=>qe,deleteUserData:()=>nt,encrypt:()=>Qe,exportKey:()=>or,exportUserData:()=>rt,generateEncryptionKey:()=>nr,getConsents:()=>tt,hasConsent:()=>Ze,hasPermission:()=>oe,importKey:()=>sr,isAuditActive:()=>Xe,isCryptoAvailable:()=>Ot,logAudit:()=>ne,recordConsent:()=>Ae,revokeConsent:()=>et,sanitizeValue:()=>re,setAuditLogger:()=>ir,validateKey:()=>Ye});var Ot=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",nr=async()=>{if(!Ot)throw new Error("Web Crypto API not available");let e=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),t=crypto.getRandomValues(new Uint8Array(12));return{key:e,iv:t}},or=async e=>{let t=await crypto.subtle.exportKey("raw",e.key);return{key:btoa(String.fromCharCode(...new Uint8Array(t))),iv:btoa(String.fromCharCode(...e.iv))}},sr=async(e,t)=>{let r=Uint8Array.from(atob(e),i=>i.charCodeAt(0)),n=Uint8Array.from(atob(t),i=>i.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",r,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:n}},Qe=async(e,t)=>{let r=new TextEncoder,n=r.encode(JSON.stringify(e)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:t.iv},t.key,n),i=new Uint8Array(t.iv.length+s.byteLength);return i.set(t.iv),i.set(new Uint8Array(s),t.iv.length),btoa(String.fromCharCode(...i))},qe=async(e,t)=>{let r=Uint8Array.from(atob(e),c=>c.charCodeAt(0)),n=r.slice(0,12),s=r.slice(12),i=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},t.key,s);return JSON.parse(new TextDecoder().decode(i))},Me=null,ir=e=>{Me=e},Xe=()=>Me!==null,ne=e=>{Me&&Me(e)},xe=(e,t,r)=>{e.set(t instanceof RegExp?t.source:t,r)},oe=(e,t,r,n)=>{if(e.size===0)return!0;for(let[s,i]of e){let c;if(typeof s=="function")c=s(t,n);else try{c=new RegExp(s).test(t)}catch{continue}if(c)return i.includes(r)||i.includes("admin")}return!1},re=e=>{if(typeof e=="string"){let t=e.replace(/&#[xX]?[0-9a-fA-F]+;?/g,n=>{let s=n.match(/&#x([0-9a-fA-F]+);?/i);if(s&&s[1])return String.fromCharCode(parseInt(s[1],16));let i=n.match(/&#([0-9]+);?/);return i&&i[1]?String.fromCharCode(parseInt(i[1],10)):""});try{t=decodeURIComponent(t)}catch{}return t.replace(/\b(javascript|vbscript|data:text\/html|about:blank|chrome:)/gi,"[SEC-REMOVED]").replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]")}if(e&&typeof e=="object"&&!Array.isArray(e)){if(Object.getPrototypeOf(e)===Object.prototype){let t={};for(let[r,n]of Object.entries(e))t[r]=re(n);return t}return e}return Array.isArray(e)?e.map(t=>re(t)):e},Ye=e=>/^[a-zA-Z0-9_.-]+$/.test(e)&&e.length<=256,Ae=(e,t,r,n)=>{let s={id:crypto.randomUUID(),purpose:r,granted:n,timestamp:Date.now()},i=e.get(t)||[];return i.push(s),e.set(t,i),ne({timestamp:Date.now(),action:"set",key:`consent:${r}`,userId:t,success:!0}),s},Ze=(e,t,r)=>{let n=e.get(t);if(!n)return!1;for(let s=n.length-1;s>=0;s--){let i=n[s];if(i&&i.purpose===r)return i.granted}return!1},et=(e,t,r)=>Ae(e,t,r,!1),tt=(e,t)=>e.get(t)||[],rt=(e,t)=>({userId:t,exportedAt:Date.now(),consents:e.get(t)||[]}),nt=(e,t)=>{let r=e.get(t)?.length||0;return e.delete(t),{success:!0,deletedConsents:r}};var K=e=>{if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}let t=new WeakMap,r=n=>{if(n===null||typeof n!="object"||typeof n=="function")return n;if(t.has(n))return t.get(n);if(n instanceof Date)return new Date(n.getTime());if(n instanceof RegExp)return new RegExp(n.source,n.flags);if(n instanceof Map){let c=new Map;return t.set(n,c),n.forEach((l,_)=>c.set(r(_),r(l))),c}if(n instanceof Set){let c=new Set;return t.set(n,c),n.forEach(l=>c.add(r(l))),c}let s=Array.isArray(n)?[]:Object.create(Object.getPrototypeOf(n));t.set(n,s);let i=[...Object.keys(n),...Object.getOwnPropertySymbols(n)];for(let c of i)s[c]=r(n[c]);return s};return r(e)},se=(e,t)=>{if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return e===t;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(!se(e[s],t[s]))return!1;return!0}let r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let s=0;s<r.length;s++){let i=r[s];if(!(i in t)||!se(e[i],t[i]))return!1}return!0};var Rt=e=>`${e}_`,Dt=async e=>{if(!e.storage)return;let{store:t,config:r,diskQueue:n,storage:s,encryptionKey:i,audit:c,onError:l,silent:_,currentVersion:y}=e,x=Rt(r.namespace||"gstate");try{let C={};t.forEach((P,b)=>{C[b]=P});let p,S=r?.encoded;S?p=btoa(JSON.stringify(C)):p=JSON.stringify(C),s.setItem(x.replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:p,_sys_v:y,_b64:S?!0:void 0})),c("set","FULL_STATE",!0)}catch(C){let p=C instanceof Error?C:new Error(String(C));l?l(p,{operation:"persist",key:"FULL_STATE"}):_||console.error("[gState] Persist failed: ",p)}let z=Array.from(n.entries());n.clear();for(let[C,p]of z)try{let S=p.value,P=p.options.encoded||p.options.secure;if(p.options.encrypted){if(!i)throw new Error(`Encryption key missing for "${C}"`);S=await Qe(p.value,i)}else P?S=btoa(JSON.stringify(p.value)):typeof p.value=="object"&&p.value!==null&&(S=JSON.stringify(p.value));s.setItem(`${x}${C}`,JSON.stringify({v:e.versions.get(C)||1,t:Date.now(),e:p.options.ttl?Date.now()+p.options.ttl:null,d:S,_sys_v:y,_enc:p.options.encrypted?!0:void 0,_b64:P?!0:void 0})),c("set",C,!0)}catch(S){let P=S instanceof Error?S:new Error(String(S));l?l(P,{operation:"persist",key:C}):_||console.error("[gState] Persist failed: ",P)}},It=async(e,t,r)=>{let{storage:n,config:s,encryptionKey:i,audit:c,onError:l,silent:_,currentVersion:y,store:x,sizes:z,versions:C}=e,p=Rt(s.namespace||"gstate"),S=s.immer??!0;if(n)try{let P={},b=0;for(let D=0;D<(n.length||0);D++){let m=n.key(D);if(!m||!m.startsWith(p))continue;let E=n.getItem(m);if(E)try{let h=JSON.parse(E),A=m.substring(p.length);if(b=Math.max(b,h._sys_v!==void 0?h._sys_v:h.v||0),h.e&&Date.now()>h.e){n.removeItem(m),D--;continue}let O=h.d;if(h._enc&&i)O=await qe(O,i);else if(typeof O=="string"){if(h._b64)try{O=JSON.parse(atob(O))}catch{}else if(O.startsWith("{")||O.startsWith("["))try{O=JSON.parse(O)}catch{}}P[A]=O,c("hydrate",A,!0)}catch(h){c("hydrate",m,!1,String(h));let A=h instanceof Error?h:new Error(String(h));l?l(A,{operation:"hydration",key:m}):_||console.error(`[gState] Hydration failed for "${m}": `,h)}}let ie=b<y&&s.migrate?s.migrate(P,b):P;Object.entries(ie).forEach(([D,m])=>{let E=S&&m!==null&&typeof m=="object"?F(K(m),!0):m,h=t(E),A=z.get(D)||0;e.totalSize=e.totalSize-A+h,z.set(D,h),x.set(D,E),C.set(D,1)}),r()}catch(P){let b=P instanceof Error?P:new Error(String(P));l?l(b,{operation:"hydration"}):_||console.error("[gState] Hydration failed: ",b)}};var zt=(e,t,r)=>{if(e.plugins.size!==0)for(let n of e.plugins.values()){let s=n.hooks?.[t];if(s)try{s(r)}catch(i){let c=i instanceof Error?i:new Error(String(i));e.onError?e.onError(c,{operation:`plugin:${n.name}:${t}`,key:r.key}):e.silent||console.error(`[gState] Plugin "${n.name}" error:`,i)}}},Tt=(e,t,r)=>{try{e.plugins.set(t.name,t),t.hooks?.onInstall?.({store:r})}catch(n){let s=n instanceof Error?n:new Error(String(n));e.onError?e.onError(s,{operation:"plugin:install",key:t.name}):e.silent||console.error(`[gState] Failed to install plugin "${t.name}": `,n)}};var Oe={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let e=new Map;return{getItem:t=>e.get(t)||null,setItem:(t,r)=>e.set(t,r),removeItem:t=>e.delete(t),key:t=>Array.from(e.keys())[t]||null,get length(){return e.size}}}},Re=e=>{let t=new Map,r=new Map,n=new Map,s=new Set,i=new Map,c=new Set,l=new Map,_=new Map,y=new Map,x=new Map,z=new Map,C=new Map,p=new Map,S=new Map,P=e?.namespace||"gstate",b=e?.silent??!1,ie=e?.debounceTime??150,D=e?.version??0,m=e?.storage||Oe.local(),E=e?.onError,h=e?.maxObjectSize??0,A=e?.maxTotalSize??0,O=e?.encryptionKey??null,ae=e?.validateInput??!0,Vt=e?.auditEnabled??!0,J=e?.userId,ce=e?.immer??!0,Nt=e?.persistByDefault??e?.persistence??e?.persist??!1;e?.accessRules&&e.accessRules.forEach(o=>xe(p,o.pattern,o.permissions));let De=!1,Ie=!1,ze=!1,T=0,B=null,U=null,Te,Ft=new Promise(o=>{Te=o}),Ut=()=>`${P}_`,ot=()=>({store:t,versions:r,sizes:n,totalSize:T,storage:m,config:e||{},diskQueue:z,encryptionKey:O,audit:L,onError:E,silent:b,debounceTime:ie,currentVersion:D}),st=()=>({plugins:x,onError:E,silent:b}),Ve=o=>{if(o==null)return 0;let a=typeof o;if(a==="boolean")return 4;if(a==="number")return 8;if(a==="string")return o.length*2;if(a!=="object")return 0;let u=0,d=[o],g=new WeakSet;for(;d.length>0;){let f=d.pop();if(typeof f=="boolean")u+=4;else if(typeof f=="number")u+=8;else if(typeof f=="string")u+=f.length*2;else if(typeof f=="object"&&f!==null){let w=f;if(g.has(w))continue;if(g.add(w),Array.isArray(w))for(let R=0;R<w.length;R++)d.push(w[R]);else for(let R of Object.keys(w))u+=R.length*2,d.push(w[R])}}return u},$=(o,a)=>{zt(st(),o,a)},L=(o,a,u,d)=>{Vt&&Xe()&&ne&&ne({timestamp:Date.now(),action:o,key:a,userId:J,success:u,error:d})},it=o=>{let a=_.get(o);if(!a)return;let u=new Set,d=f=>(u.add(f),_.has(f)?_.get(f).lastValue:v.get(f)),g=a.selector(d);a.deps.forEach(f=>{if(!u.has(f)){let w=y.get(f);w&&(w.delete(o),w.size===0&&y.delete(f))}}),u.forEach(f=>{a.deps.has(f)||(y.has(f)||y.set(f,new Set),y.get(f).add(o))}),a.deps=u,se(a.lastValue,g)||(a.lastValue=ce&&g!==null&&typeof g=="object"?F(K(g),!0):g,r.set(o,(r.get(o)||0)+1),Q(o))},Q=o=>{if(o){if(y.has(o)){let d=y.get(o);for(let g of d)it(g)}let a=l.get(o);if(a){let d=v.get(o);for(let g of a)try{g(d)}catch(f){let w=f instanceof Error?f:new Error(String(f));E?E(w,{operation:"watcher",key:o}):b||console.error(`[gState] Watcher error for "${o}":`,f)}}let u=i.get(o);if(u)for(let d of u)try{d()}catch(g){let f=g instanceof Error?g:new Error(String(g));E?E(f,{operation:"keyListener",key:o}):b||console.error(`[gState] Listener error for "${o}":`,g)}}if(De){Ie=!0;return}for(let a of s)try{a()}catch(u){let d=u instanceof Error?u:new Error(String(u));E?E(d,{operation:"listener"}):b||console.error("[gState] Global listener error: ",u)}},at=async()=>{Dt(ot())},ue={},v={_setSilently:(o,a)=>{let u=n.get(o)||0,d=ce&&a!==null&&typeof a=="object"?F(K(a),!0):a,f=(h>0||A>0)&&!1?Ve(d):0;T=T-u+f,n.set(o,f),t.set(o,d),r.set(o,(r.get(o)||0)+1),U=null},_registerMethod:(o,a,u)=>{let d=g=>g==="__proto__"||g==="constructor"||g==="prototype";if(d(o)||d(a)){console.warn("[gState] Refusing to register method with unsafe key:",o,a);return}ue[o]||(ue[o]={}),ue[o][a]=u},set:(o,a,u={})=>{let d=t.get(o),g=ce&&typeof a=="function"?kt(d,a):a;if(ae&&!Ye(o))return b||console.warn(`[gState] Invalid key: ${o}`),!1;if(!oe(p,o,"write",J))return L("set",o,!1,"RBAC Denied"),b||console.error(`[gState] RBAC Denied for "${o}"`),!1;let f=ae?re(g):g,w=n.get(o)||0;$("onBeforeSet",{key:o,value:f,store:v,version:r.get(o)||0});let R=ce&&f!==null&&typeof f=="object"?F(K(f),!0):f;if(!se(d,R)){let q=(h>0||A>0)&&!1?Ve(R):0;if(h>0&&q>h){let X=new Error(`Object size (${q} bytes) exceeds maxObjectSize (${h} bytes)`);E?E(X,{operation:"set",key:o}):b||console.warn(`[gState] ${X.message} for "${o}"`)}if(A>0){let X=T-w+q;if(X>A){let lt=new Error(`Total store size (${X} bytes) exceeds limit (${A} bytes)`);E?E(lt,{operation:"set"}):b||console.warn(`[gState] ${lt.message}`)}}T=T-w+q,n.set(o,q),t.set(o,R),r.set(o,(r.get(o)||0)+1),U=null;let ut=u.persist??Nt;return ut&&(z.set(o,{value:R,options:{...u,persist:ut,encoded:u.encoded||e?.encoded}}),B&&clearTimeout(B),B=setTimeout(at,ie)),$("onSet",{key:o,value:R,store:v,version:r.get(o)}),L("set",o,!0),Q(o),!0}return!1},get:o=>{if(!oe(p,o,"read",J))return L("get",o,!1,"RBAC Denied"),null;let a=t.get(o);return $("onGet",{store:v,key:o,value:a}),L("get",o,!0),a},compute:(o,a)=>{try{return _.has(o)||(_.set(o,{selector:a,lastValue:null,deps:new Set}),it(o)),_.get(o).lastValue}catch(u){let d=u instanceof Error?u:new Error(String(u));return E?E(d,{operation:"compute",key:o}):b||console.error(`[gState] Compute error for "${o}": `,u),null}},watch:(o,a)=>{l.has(o)||l.set(o,new Set);let u=l.get(o);return u.add(a),()=>{u.delete(a),u.size===0&&l.delete(o)}},remove:o=>{if(!oe(p,o,"delete",J))return L("delete",o,!1,"RBAC Denied"),!1;let a=t.get(o),u=t.delete(o);return u&&(T-=n.get(o)||0,n.delete(o),$("onRemove",{store:v,key:o,value:a}),U=null),r.set(o,(r.get(o)||0)+1),m&&m.removeItem(`${Ut()}${o}`),L("delete",o,!0),Q(o),u},delete:o=>v.remove(o),deleteAll:()=>{if(Array.from(t.keys()).forEach(o=>v.remove(o)),m){let o=P+"_";for(let a=0;a<(m.length||0);a++){let u=m.key(a);u?.startsWith(o)&&(m.removeItem(u),a--)}}return T=0,n.clear(),U=null,!0},list:()=>Object.fromEntries(t.entries()),use:o=>{c.add(o)},transaction:o=>{De=!0,$("onTransaction",{store:v,key:"START"});try{o()}finally{De=!1,$("onTransaction",{store:v,key:"END"}),Ie&&(Ie=!1,Q())}},destroy:()=>{B&&(clearTimeout(B),B=null),z.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",ct),$("onDestroy",{store:v}),s.clear(),i.clear(),l.clear(),_.clear(),y.clear(),x.clear(),t.clear(),n.clear(),T=0,p.clear(),S.clear(),r.clear(),C.clear(),c.clear()},_addPlugin:o=>{Tt(st(),o,v)},_removePlugin:o=>{x.delete(o)},_subscribe:(o,a)=>{if(a){i.has(a)||i.set(a,new Set);let u=i.get(a);return u.add(o),()=>{u.delete(o),u.size===0&&i.delete(a)}}return s.add(o),()=>s.delete(o)},_getVersion:o=>r.get(o)??0,addAccessRule:(o,a)=>xe(p,o,a),hasPermission:(o,a,u)=>{if(p.size===0)return!0;for(let[d,g]of p){let f;if(typeof d=="function")f=d(o,u);else try{let w=C.get(d);w||(w=new RegExp(d),C.set(d,w)),f=w.test(o)}catch{continue}if(f)return g.includes(a)||g.includes("admin")}return!1},recordConsent:(o,a,u)=>Ae(S,o,a,u),hasConsent:(o,a)=>Ze(S,o,a),getConsents:o=>tt(S,o),revokeConsent:(o,a)=>et(S,o,a),exportUserData:o=>rt(S,o),deleteUserData:o=>nt(S,o),getSnapshot:()=>(U||(U=Object.fromEntries(t.entries())),U),get plugins(){return ue},get isReady(){return ze},get namespace(){return P},get userId(){return J},whenReady:()=>Ft};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(o=>{let a=v[o];a&&v._registerMethod("security",o,a)});let ct=()=>{z.size>0&&at()};return typeof window<"u"&&window.addEventListener("beforeunload",ct),m?It(ot(),o=>(h>0||A>0)&&!1?Ve(o):0,()=>{ze=!0,U=null,Te(),Q()}).then(()=>{}):(ze=!0,Te()),v};var Er=(e,t)=>Re({...t,storage:e}),Cr=e=>Re({...e,storage:Oe.memory()}),Pr=e=>{let t=Oe.session();return t?Re({...e,storage:t}):null};export{ke as Security,Oe as StorageAdapters,Cr as createMemoryStore,Pr as createSessionStore,Re as createStore,Er as createStoreWithStorage};
|
package/core/hooks.d.ts
CHANGED
|
@@ -3,6 +3,5 @@ export declare const initState: <S extends Record<string, unknown>>(config?: Sto
|
|
|
3
3
|
export declare const destroyState: () => void;
|
|
4
4
|
export declare const useIsStoreReady: (store?: IStore<Record<string, unknown>>) => boolean;
|
|
5
5
|
export declare const getStore: () => IStore<Record<string, unknown>> | null;
|
|
6
|
-
export declare
|
|
7
|
-
export declare
|
|
8
|
-
export declare const useSimpleState: <T = unknown, S extends Record<string, unknown> = Record<string, unknown>>(key: string, store?: IStore<S>) => readonly [T | undefined, (val: T | StateUpdater<T>, options?: PersistOptions) => boolean];
|
|
6
|
+
export declare function useStore<T, S extends Record<string, unknown> = Record<string, unknown>>(selector: (state: S) => T, store?: IStore<S>): T;
|
|
7
|
+
export declare function useStore<T = unknown, S extends Record<string, unknown> = Record<string, unknown>>(key: string, store?: IStore<S>): readonly [T | undefined, (val: T | StateUpdater<T>, options?: PersistOptions) => boolean];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { StorageAdapters } from "./store";
|
|
2
|
+
import * as Security from "./security";
|
|
3
|
+
import type { StoreConfig, PersistOptions } from "./types";
|
|
4
|
+
export interface PersistenceContext {
|
|
5
|
+
store: Map<string, unknown>;
|
|
6
|
+
versions: Map<string, number>;
|
|
7
|
+
sizes: Map<string, number>;
|
|
8
|
+
totalSize: number;
|
|
9
|
+
storage: ReturnType<typeof StorageAdapters.local>;
|
|
10
|
+
config: StoreConfig<Record<string, unknown>>;
|
|
11
|
+
diskQueue: Map<string, {
|
|
12
|
+
value: unknown;
|
|
13
|
+
options: PersistOptions;
|
|
14
|
+
}>;
|
|
15
|
+
encryptionKey: Security.EncryptionKey | null;
|
|
16
|
+
audit: (action: 'set' | 'get' | 'delete' | 'hydrate', key: string, success: boolean, error?: string) => void;
|
|
17
|
+
onError?: (error: Error, metadata?: Record<string, unknown>) => void;
|
|
18
|
+
silent: boolean;
|
|
19
|
+
debounceTime: number;
|
|
20
|
+
currentVersion: number;
|
|
21
|
+
}
|
|
22
|
+
export declare const flushDisk: (ctx: PersistenceContext) => Promise<void>;
|
|
23
|
+
export declare const hydrateStore: (ctx: PersistenceContext, calculateSize: (val: unknown) => number, emit: () => void) => Promise<void>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IStore, PluginHookName, PluginContext, IPlugin } from "./types";
|
|
2
|
+
export interface PluginManagerContext<S extends Record<string, unknown>> {
|
|
3
|
+
plugins: Map<string, IPlugin<S>>;
|
|
4
|
+
onError?: (error: Error, metadata?: Record<string, unknown>) => void;
|
|
5
|
+
silent: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const runHook: <S extends Record<string, unknown>>(ctx: PluginManagerContext<S>, name: PluginHookName, hookContext: PluginContext<S>) => void;
|
|
8
|
+
export declare const installPlugin: <S extends Record<string, unknown>>(ctx: PluginManagerContext<S>, plugin: IPlugin<S>, storeInstance: IStore<S>) => void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ComputedSelector, WatcherCallback, StoreSubscriber } from "./types";
|
|
2
|
+
export interface ReactivityContext {
|
|
3
|
+
computed: Map<string, {
|
|
4
|
+
selector: ComputedSelector<unknown>;
|
|
5
|
+
lastValue: unknown;
|
|
6
|
+
deps: Set<string>;
|
|
7
|
+
}>;
|
|
8
|
+
computedDeps: Map<string, Set<string>>;
|
|
9
|
+
watchers: Map<string, Set<WatcherCallback<unknown>>>;
|
|
10
|
+
listeners: Set<StoreSubscriber>;
|
|
11
|
+
keyListeners: Map<string, Set<StoreSubscriber>>;
|
|
12
|
+
versions: Map<string, number>;
|
|
13
|
+
storeInstance: unknown;
|
|
14
|
+
immer: boolean;
|
|
15
|
+
onError?: (error: Error, metadata?: Record<string, unknown>) => void;
|
|
16
|
+
silent: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare const updateComputed: (ctx: ReactivityContext, key: string, emit: (k?: string) => void) => void;
|
|
19
|
+
export declare const emitChange: (ctx: ReactivityContext, changedKey?: string, isTransaction?: boolean, setPendingEmit?: (v: boolean) => void, emit?: (k?: string) => void) => void;
|
package/core/types.d.ts
CHANGED
|
@@ -55,8 +55,8 @@ export interface IStore<S extends Record<string, unknown> = Record<string, unkno
|
|
|
55
55
|
_subscribe(cb: StoreSubscriber, key?: string): () => void;
|
|
56
56
|
_getVersion(key: string): number;
|
|
57
57
|
_setSilently(key: string, value: unknown): void;
|
|
58
|
-
_registerMethod(name: string, fn: (...args: unknown[]) => unknown): void;
|
|
59
58
|
_registerMethod(pluginName: string, methodName: string, fn: (...args: unknown[]) => unknown): void;
|
|
59
|
+
getSnapshot(): S;
|
|
60
60
|
addAccessRule(pattern: string | ((key: string, userId?: string) => boolean), permissions: Permission[]): void;
|
|
61
61
|
hasPermission(key: string, action: Permission, userId?: string): boolean;
|
|
62
62
|
recordConsent(userId: string, purpose: string, granted: boolean): import('./security').ConsentRecord;
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var pt=Symbol.for("immer-nothing"),ot=Symbol.for("immer-draftable"),R=Symbol.for("immer-state");function O(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var M=Object,H=M.getPrototypeOf,we="constructor",ke="prototype",je="configurable",be="enumerable",me="writable",te="value",$=e=>!!e&&!!e[R];function U(e){return e?gt(e)||Re(e)||!!e[ot]||!!e[we]?.[ot]||Ae(e)||Ie(e):!1}var Vt=M[ke][we].toString(),st=new WeakMap;function gt(e){if(!e||!He(e))return!1;let t=H(e);if(t===null||t===M[ke])return!0;let n=M.hasOwnProperty.call(t,we)&&t[we];if(n===Object)return!0;if(!J(n))return!1;let r=st.get(n);return r===void 0&&(r=Function.toString.call(n),st.set(n,r)),r===Vt}function Ce(e,t,n=!0){oe(e)===0?(n?Reflect.ownKeys(e):M.keys(e)).forEach(o=>{t(o,e[o],e)}):e.forEach((r,o)=>t(o,r,e))}function oe(e){let t=e[R];return t?t.type_:Re(e)?1:Ae(e)?2:Ie(e)?3:0}var it=(e,t,n=oe(e))=>n===2?e.has(t):M[ke].hasOwnProperty.call(e,t),Fe=(e,t,n=oe(e))=>n===2?e.get(t):e[t],Ee=(e,t,n,r=oe(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Nt(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var Re=Array.isArray,Ae=e=>e instanceof Map,Ie=e=>e instanceof Set,He=e=>typeof e=="object",J=e=>typeof e=="function",Ue=e=>typeof e=="boolean";function Ut(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var N=e=>e.copy_||e.base_;var qe=e=>e.modified_?e.copy_:e.base_;function Be(e,t){if(Ae(e))return new Map(e);if(Ie(e))return new Set(e);if(Re(e))return Array[ke].slice.call(e);let n=gt(e);if(t===!0||t==="class_only"&&!n){let r=M.getOwnPropertyDescriptors(e);delete r[R];let o=Reflect.ownKeys(r);for(let i=0;i<o.length;i++){let u=o[i],l=r[u];l[me]===!1&&(l[me]=!0,l[je]=!0),(l.get||l.set)&&(r[u]={[je]:!0,[me]:!0,[be]:l[be],[te]:e[u]})}return M.create(H(e),r)}else{let r=H(e);if(r!==null&&n)return{...e};let o=M.create(r);return M.assign(o,e)}}function j(e,t=!1){return Me(e)||$(e)||!U(e)||(oe(e)>1&&M.defineProperties(e,{set:Se,add:Se,clear:Se,delete:Se}),M.freeze(e),t&&Ce(e,(n,r)=>{j(r,!0)},!1)),e}function $t(){O(2)}var Se={[te]:$t};function Me(e){return e===null||!He(e)?!0:M.isFrozen(e)}var xe="MapSet",Le="Patches",at="ArrayMethods",yt={};function W(e){let t=yt[e];return t||O(0,e),t}var ct=e=>!!yt[e];var ne,ht=()=>ne,jt=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:ct(xe)?W(xe):void 0,arrayMethodsPlugin_:ct(at)?W(at):void 0});function ut(e,t){t&&(e.patchPlugin_=W(Le),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Ke(e){We(e),e.drafts_.forEach(Ft),e.drafts_=null}function We(e){e===ne&&(ne=e.parent_)}var lt=e=>ne=jt(ne,e);function Ft(e){let t=e[R];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function ft(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[R].modified_&&(Ke(t),O(4)),U(e)&&(e=dt(t,e));let{patchPlugin_:o}=t;o&&o.generateReplacementPatches_(n[R].base_,e,t)}else e=dt(t,n);return Bt(t,e,!0),Ke(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==pt?e:void 0}function dt(e,t){if(Me(t))return t;let n=t[R];if(!n)return Pe(t,e.handledSet_,e);if(!De(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:r}=n;if(r)for(;r.length>0;)r.pop()(e);_t(n,e)}return n.copy_}function Bt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&j(t,n)}function St(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var De=(e,t)=>e.scope_===t,Lt=[];function mt(e,t,n,r){let o=N(e),i=e.type_;if(r!==void 0&&Fe(o,r,i)===t){Ee(o,r,n,i);return}if(!e.draftLocations_){let l=e.draftLocations_=new Map;Ce(o,(g,y)=>{if($(y)){let S=l.get(y)||[];S.push(g),l.set(y,S)}})}let u=e.draftLocations_.get(t)??Lt;for(let l of u)Ee(o,l,n,i)}function Kt(e,t,n){e.callbacks_.push(function(o){let i=t;if(!i||!De(i,o))return;o.mapSetPlugin_?.fixSetContents(i);let u=qe(i);mt(e,i.draft_??i,u,n),_t(i,o)})}function _t(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:r}=t;if(r){let o=r.getPath(e);o&&r.generatePatches_(e,o,t)}St(e)}}function Wt(e,t,n){let{scope_:r}=e;if($(n)){let o=n[R];De(o,r)&&o.callbacks_.push(function(){_e(e);let u=qe(o);mt(e,n,u,t)})}else U(n)&&e.callbacks_.push(function(){let i=N(e);e.type_===3?i.has(n)&&Pe(n,r.handledSet_,r):Fe(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Pe(Fe(e.copy_,t,e.type_),r.handledSet_,r)})}function Pe(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||$(e)||t.has(e)||!U(e)||Me(e)||(t.add(e),Ce(e,(r,o)=>{if($(o)){let i=o[R];if(De(i,n)){let u=qe(i);Ee(e,r,u,e.type_),St(i)}}else U(o)&&Pe(o,t,n)})),e}function Gt(e,t){let n=Re(e),r={type_:n?1:0,scope_:t?t.scope_:ht(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},o=r,i=ve;n&&(o=[r],i=re);let{revoke:u,proxy:l}=Proxy.revocable(o,i);return r.draft_=l,r.revoke_=u,[l,r]}var ve={get(e,t){if(t===R)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t=="string";if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let o=N(e);if(!it(o,t,e.type_))return Jt(e,o,t);let i=o[t];if(e.finalized_||!U(i)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Ut(t))return i;if(i===$e(e.base_,t)){_e(e);let u=e.type_===1?+t:t,l=Je(e.scope_,i,e,u);return e.copy_[u]=l}return i},has(e,t){return t in N(e)},ownKeys(e){return Reflect.ownKeys(N(e))},set(e,t,n){let r=wt(N(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let o=$e(N(e),t),i=o?.[R];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(Nt(n,o)&&(n!==void 0||it(e.base_,t,e.type_)))return!0;_e(e),Ge(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),Wt(e,t,n)),!0},deleteProperty(e,t){return _e(e),$e(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Ge(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=N(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[me]:!0,[je]:e.type_!==1||t!=="length",[be]:r[be],[te]:n[t]}},defineProperty(){O(11)},getPrototypeOf(e){return H(e.base_)},setPrototypeOf(){O(12)}},re={};for(let e in ve){let t=ve[e];re[e]=function(){let n=arguments;return n[0]=n[0][0],t.apply(this,n)}}re.deleteProperty=function(e,t){return re.set.call(this,e,t,void 0)};re.set=function(e,t,n){return ve.set.call(this,e[0],t,n,e[0])};function $e(e,t){let n=e[R];return(n?N(n):e)[t]}function Jt(e,t,n){let r=wt(t,n);return r?te in r?r[te]:r.get?.call(e.draft_):void 0}function wt(e,t){if(!(t in e))return;let n=H(e);for(;n;){let r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=H(n)}}function Ge(e){e.modified_||(e.modified_=!0,e.parent_&&Ge(e.parent_))}function _e(e){e.copy_||(e.assigned_=new Map,e.copy_=Be(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Ht=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(t,n,r)=>{if(J(t)&&!J(n)){let i=n;n=t;let u=this;return function(g=i,...y){return u.produce(g,S=>n.call(this,S,...y))}}J(n)||O(6),r!==void 0&&!J(r)&&O(7);let o;if(U(t)){let i=lt(this),u=Je(i,t,void 0),l=!0;try{o=n(u),l=!1}finally{l?Ke(i):We(i)}return ut(i,r),ft(o,i)}else if(!t||!He(t)){if(o=n(t),o===void 0&&(o=t),o===pt&&(o=void 0),this.autoFreeze_&&j(o,!0),r){let i=[],u=[];W(Le).generateReplacementPatches_(t,o,{patches_:i,inversePatches_:u}),r(i,u)}return o}else O(1,t)},this.produceWithPatches=(t,n)=>{if(J(t))return(u,...l)=>this.produceWithPatches(u,g=>t(g,...l));let r,o;return[this.produce(t,n,(u,l)=>{r=u,o=l}),r,o]},Ue(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ue(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ue(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){U(e)||O(8),$(e)&&(e=qt(e));let t=lt(this),n=Je(t,e,void 0);return n[R].isManual_=!0,We(t),n}finishDraft(e,t){let n=e&&e[R];(!n||!n.isManual_)&&O(9);let{scope_:r}=n;return ut(r,t),ft(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let o=t[n];if(o.path.length===0&&o.op==="replace"){e=o.value;break}}n>-1&&(t=t.slice(n+1));let r=W(Le).applyPatches_;return $(e)?r(e,t):this.produce(e,o=>r(o,t))}};function Je(e,t,n,r){let[o,i]=Ae(t)?W(xe).proxyMap_(t,n):Ie(t)?W(xe).proxySet_(t,n):Gt(t,n);return(n?.scope_??ht()).drafts_.push(o),i.callbacks_=n?.callbacks_??[],i.key_=r,n&&r!==void 0?Kt(n,i,r):i.callbacks_.push(function(g){g.mapSetPlugin_?.fixSetContents(i);let{patchPlugin_:y}=g;i.modified_&&y&&y.generatePatches_(i,[],g)}),o}function qt(e){return $(e)||O(10,e),bt(e)}function bt(e){if(!U(e)||Me(e))return e;let t=e[R],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Be(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Be(e,!0);return Ce(n,(o,i)=>{Ee(n,o,bt(i))},r),t&&(t.finalized_=!1),n}var Xt=new Ht,Et=Xt.produce;var xt=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",Qt=async()=>{if(!xt)throw new Error("Web Crypto API not available");let e=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),t=crypto.getRandomValues(new Uint8Array(12));return{key:e,iv:t}},Yt=async e=>{let t=await crypto.subtle.exportKey("raw",e.key);return{key:btoa(String.fromCharCode(...new Uint8Array(t))),iv:btoa(String.fromCharCode(...e.iv))}},Zt=async(e,t)=>{let n=Uint8Array.from(atob(e),i=>i.charCodeAt(0)),r=Uint8Array.from(atob(t),i=>i.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",n,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:r}},Pt=async(e,t)=>{let n=new TextEncoder,r=n.encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t.iv},t.key,r),i=new Uint8Array(t.iv.length+o.byteLength);return i.set(t.iv),i.set(new Uint8Array(o),t.iv.length),btoa(String.fromCharCode(...i))},vt=async(e,t)=>{let n=Uint8Array.from(atob(e),u=>u.charCodeAt(0)),r=n.slice(0,12),o=n.slice(12),i=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},t.key,o);return JSON.parse(new TextDecoder().decode(i))},Oe=null,en=e=>{Oe=e},kt=()=>Oe!==null,ie=e=>{Oe&&Oe(e)},Xe=(e,t,n)=>{e.set(t instanceof RegExp?t.source:t,n)},Te=(e,t,n,r)=>{if(e.size===0)return!0;for(let[o,i]of e){let u;if(typeof o=="function")u=o(t,r);else try{u=new RegExp(o).test(t)}catch{continue}if(u)return i.includes(n)||i.includes("admin")}return!1},se=e=>{if(typeof e=="string")return e.replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/javascript:/gi,"[SEC-REMOVED]").replace(/data:/gi,"[SEC-REMOVED]").replace(/vbscript:/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]").replace(/&#[xX]?[0-9a-fA-F]+;?/g,"");if(e&&typeof e=="object"&&!Array.isArray(e)){if(Object.getPrototypeOf(e)===Object.prototype){let t={};for(let[n,r]of Object.entries(e))t[n]=se(r);return t}return e}return Array.isArray(e)?e.map(t=>se(t)):e},Qe=e=>/^[a-zA-Z0-9_.-]+$/.test(e)&&e.length<=256,Ye=(e,t,n,r)=>{let o={id:crypto.randomUUID(),purpose:n,granted:r,timestamp:Date.now()},i=e.get(t)||[];return i.push(o),e.set(t,i),ie({timestamp:Date.now(),action:"set",key:`consent:${n}`,userId:t,success:!0}),o},Ct=(e,t,n)=>{let r=e.get(t);if(!r)return!1;for(let o=r.length-1;o>=0;o--){let i=r[o];if(i&&i.purpose===n)return i.granted}return!1},Rt=(e,t,n)=>Ye(e,t,n,!1),At=(e,t)=>e.get(t)||[],It=(e,t)=>({userId:t,exportedAt:Date.now(),consents:e.get(t)||[]}),Mt=(e,t)=>{let n=e.get(t)?.length||0;return e.delete(t),{success:!0,deletedConsents:n}};var ce=e=>{if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}let t=new WeakMap,n=r=>{if(r===null||typeof r!="object"||typeof r=="function")return r;if(t.has(r))return t.get(r);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r.source,r.flags);if(r instanceof Map){let u=new Map;return t.set(r,u),r.forEach((l,g)=>u.set(n(g),n(l))),u}if(r instanceof Set){let u=new Set;return t.set(r,u),r.forEach(l=>u.add(n(l))),u}let o=Array.isArray(r)?[]:Object.create(Object.getPrototypeOf(r));t.set(r,o);let i=[...Object.keys(r),...Object.getOwnPropertySymbols(r)];for(let u of i)o[u]=n(r[u]);return o};return n(e)},ae=(e,t)=>{if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return e===t;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!ae(e[o],t[o]))return!1;return!0}let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let o=0;o<n.length;o++){let i=n[o];if(!(i in t)||!ae(e[i],t[i]))return!1}return!0};var nn={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let e=new Map;return{getItem:t=>e.get(t)||null,setItem:(t,n)=>e.set(t,n),removeItem:t=>e.delete(t),key:t=>Array.from(e.keys())[t]||null,get length(){return e.size}}}},q=e=>{let t=new Map,n=new Map,r=new Map,o=new Set,i=new Map,u=new Set,l=new Map,g=new Map,y=new Map,S=new Map,m=new Map,v=new Map,_=new Map,k=new Map,P=e?.namespace||"gstate",w=e?.silent??!1,fe=e?.debounceTime??150,X=e?.version??0,A=e?.storage||nn.local(),b=e?.onError,de=e?.maxObjectSize??5*1024*1024,pe=e?.maxTotalSize??50*1024*1024,ge=e?.encryptionKey??null,Ze=e?.validateInput??!0,Ot=e?.auditEnabled??!0,Q=e?.userId,Y=e?.immer??!0,Tt=e?.persistByDefault??e?.persistence??e?.persist??!1;e?.accessRules&&e.accessRules.forEach(s=>Xe(_,s.pattern,s.permissions));let ze=!1,Ve=!1,ye=!1,T=0,G=null,he,zt=new Promise(s=>{he=s}),Ne=s=>{if(s==null)return 0;let a=typeof s;if(a==="boolean")return 4;if(a==="number")return 8;if(a==="string")return s.length*2;if(a!=="object")return 0;let c=0,d=[s],h=new WeakSet;for(;d.length>0;){let f=d.pop();if(typeof f=="boolean")c+=4;else if(typeof f=="number")c+=8;else if(typeof f=="string")c+=f.length*2;else if(typeof f=="object"&&f!==null){let p=f;if(h.has(p))continue;if(h.add(p),Array.isArray(p))for(let E=0;E<p.length;E++)d.push(p[E]);else for(let E of Object.keys(p))c+=E.length*2,d.push(p[E])}}return c},Z=()=>`${P}_`,B=(s,a)=>{if(S.size!==0)for(let c of S.values()){let d=c.hooks?.[s];if(d)try{d(a)}catch(h){let f=h instanceof Error?h:new Error(String(h));b?b(f,{operation:`plugin:${c.name}:${s}`,key:a.key}):w||console.error(`[gState] Plugin "${c.name}" error:`,h)}}},z=(s,a,c,d)=>{Ot&&kt()&&ie&&ie({timestamp:Date.now(),action:s,key:a,userId:Q,success:c,error:d})},ee=s=>{if(s){let a=y.get(s);if(a)for(let h of a)et(h);let c=l.get(s);if(c){let h=C.get(s);for(let f of c)try{f(h)}catch(p){let E=p instanceof Error?p:new Error(String(p));b?b(E,{operation:"watcher",key:s}):w||console.error(`[gState] Watcher error for "${s}":`,p)}}let d=i.get(s);if(d)for(let h of d)try{h()}catch(f){let p=f instanceof Error?f:new Error(String(f));b?b(p,{operation:"keyListener",key:s}):w||console.error(`[gState] Listener error for "${s}":`,f)}}if(ze){Ve=!0;return}for(let a of o)try{a()}catch(c){let d=c instanceof Error?c:new Error(String(c));b?b(d,{operation:"listener"}):w||console.error("[gState] Global listener error: ",c)}},et=s=>{let a=g.get(s),c=new Set;if(!a)return;let d=f=>(c.add(f),g.has(f)?g.get(f).lastValue:C.get(f)),h=a.selector(d);a.deps.forEach(f=>{if(!c.has(f)){let p=y.get(f);p&&(p.delete(s),p.size===0&&y.delete(f))}}),c.forEach(f=>{a.deps.has(f)||(y.has(f)||y.set(f,new Set),y.get(f).add(s))}),a.deps=c,ae(a.lastValue,h)||(a.lastValue=Y&&h!==null&&typeof h=="object"?j(ce(h),!0):h,n.set(s,(n.get(s)||0)+1),ee(s))},tt=async()=>{if(!A)return;try{let a={};t.forEach((h,f)=>{a[f]=h});let c,d=e?.encoded;d?c=btoa(JSON.stringify(a)):c=JSON.stringify(a),A.setItem(Z().replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:c,_sys_v:X,_b64:d?!0:void 0})),z("set","FULL_STATE",!0)}catch(a){let c=a instanceof Error?a:new Error(String(a));b?b(c,{operation:"persist",key:"FULL_STATE"}):w||console.error("[gState] Persist failed: ",c)}let s=Array.from(m.entries());m.clear();for(let[a,c]of s)try{let d=c.value,h=c.options.encoded||c.options.secure;if(c.options.encrypted){if(!ge)throw new Error(`Encryption key missing for "${a}"`);d=await Pt(c.value,ge)}else h?d=btoa(JSON.stringify(c.value)):typeof c.value=="object"&&c.value!==null&&(d=JSON.stringify(c.value));A.setItem(`${Z()}${a}`,JSON.stringify({v:n.get(a)||1,t:Date.now(),e:c.options.ttl?Date.now()+c.options.ttl:null,d,_sys_v:X,_enc:c.options.encrypted?!0:void 0,_b64:h?!0:void 0})),z("set",a,!0)}catch(d){let h=d instanceof Error?d:new Error(String(d));b?b(h,{operation:"persist",key:a}):w||console.error("[gState] Persist failed: ",h)}},L={},C={_setSilently:(s,a)=>{let c=r.get(s)||0,d=Y&&a!==null&&typeof a=="object"?j(ce(a),!0):a,h=Ne(d);T=T-c+h,r.set(s,h),t.set(s,d),n.set(s,(n.get(s)||0)+1)},_registerMethod:(s,a,c)=>{let d=p=>p==="__proto__"||p==="constructor"||p==="prototype";if(c!==void 0){let p=s,E=a;if(d(p)||d(E)){console.warn("[gState] Refusing to register method with unsafe key:",p,E);return}L[p]||(L[p]={}),L[p][E]=c;return}console.warn("[gState] _registerMethod(name, fn) is deprecated. Use _registerMethod(pluginName, methodName, fn) instead.");let h=s,f=a;L.core||(L.core={}),L.core[h]=f},set:(s,a,c={})=>{let d=t.get(s),h=Y&&typeof a=="function"?Et(d,a):a;if(Ze&&!Qe(s))return w||console.warn(`[gState] Invalid key: ${s}`),!1;if(!Te(_,s,"write",Q))return z("set",s,!1,"RBAC Denied"),w||console.error(`[gState] RBAC Denied for "${s}"`),!1;let f=Ze?se(h):h,p=r.get(s)||0;B("onBeforeSet",{key:s,value:f,store:C,version:n.get(s)||0});let E=Y&&f!==null&&typeof f=="object"?j(ce(f),!0):f;if(!ae(d,E)){let D=de>0||pe>0?Ne(E):0;if(de>0&&D>de){let K=new Error(`Object size (${D} bytes) exceeds maxObjectSize (${de} bytes)`);b?b(K,{operation:"set",key:s}):w||console.warn(`[gState] ${K.message} for "${s}"`)}if(pe>0){let K=T-p+D;if(K>pe){let rt=new Error(`Total store size (${K} bytes) exceeds limit (${pe} bytes)`);b?b(rt,{operation:"set"}):w||console.warn(`[gState] ${rt.message}`)}}T=T-p+D,r.set(s,D),t.set(s,E),n.set(s,(n.get(s)||0)+1);let I=c.persist??Tt;return I&&(m.set(s,{value:E,options:{...c,persist:I,encoded:c.encoded||e?.encoded}}),G&&clearTimeout(G),G=setTimeout(tt,fe)),B("onSet",{key:s,value:E,store:C,version:n.get(s)}),z("set",s,!0),ee(s),!0}return!1},get:s=>{if(!Te(_,s,"read",Q))return z("get",s,!1,"RBAC Denied"),null;let a=t.get(s);return B("onGet",{store:C,key:s,value:a}),z("get",s,!0),a},compute:(s,a)=>{try{return g.has(s)||(g.set(s,{selector:a,lastValue:null,deps:new Set}),et(s)),g.get(s).lastValue}catch(c){let d=c instanceof Error?c:new Error(String(c));return b?b(d,{operation:"compute",key:s}):w||console.error(`[gState] Compute error for "${s}": `,c),null}},watch:(s,a)=>{l.has(s)||l.set(s,new Set);let c=l.get(s);return c.add(a),()=>{c.delete(a),c.size===0&&l.delete(s)}},remove:s=>{if(!Te(_,s,"delete",Q))return z("delete",s,!1,"RBAC Denied"),!1;let a=t.get(s),c=t.delete(s);return c&&(T-=r.get(s)||0,r.delete(s),B("onRemove",{store:C,key:s,value:a})),n.set(s,(n.get(s)||0)+1),A&&A.removeItem(`${Z()}${s} `),z("delete",s,!0),ee(s),c},delete:s=>C.remove(s),deleteAll:()=>{if(Array.from(t.keys()).forEach(s=>C.remove(s)),A){let s=Z();for(let a=0;a<(A.length||0);a++){let c=A.key(a);c?.startsWith(s)&&(A.removeItem(c),a--)}}return T=0,r.clear(),!0},list:()=>Object.fromEntries(t.entries()),use:s=>{u.add(s)},transaction:s=>{ze=!0,B("onTransaction",{store:C,key:"START"});try{s()}finally{ze=!1,B("onTransaction",{store:C,key:"END"}),Ve&&(Ve=!1,ee())}},destroy:()=>{G&&(clearTimeout(G),G=null),m.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",nt),B("onDestroy",{store:C}),o.clear(),i.clear(),l.clear(),g.clear(),y.clear(),S.clear(),t.clear(),r.clear(),T=0,_.clear(),k.clear(),n.clear(),v.clear(),u.clear()},_addPlugin:s=>{try{S.set(s.name,s),s.hooks?.onInstall?.({store:C})}catch(a){let c=a instanceof Error?a:new Error(String(a));b?b(c,{operation:"plugin:install",key:s.name}):w||console.error(`[gState] Failed to install plugin "${s.name}": `,a)}},_removePlugin:s=>{S.delete(s)},_subscribe:(s,a)=>{if(a){i.has(a)||i.set(a,new Set);let c=i.get(a);return c.add(s),()=>{c.delete(s),c.size===0&&i.delete(a)}}return o.add(s),()=>o.delete(s)},_getVersion:s=>n.get(s)??0,addAccessRule:(s,a)=>Xe(_,s,a),hasPermission:(s,a,c)=>{if(_.size===0)return!0;for(let[d,h]of _){let f;if(typeof d=="function")f=d(s,c);else try{let p=v.get(d);p||(p=new RegExp(d),v.set(d,p)),f=p.test(s)}catch{continue}if(f)return h.includes(a)||h.includes("admin")}return!1},recordConsent:(s,a,c)=>Ye(k,s,a,c),hasConsent:(s,a)=>Ct(k,s,a),getConsents:s=>At(k,s),revokeConsent:(s,a)=>Rt(k,s,a),exportUserData:s=>It(k,s),deleteUserData:s=>Mt(k,s),get plugins(){return L},get isReady(){return ye},get namespace(){return P},get userId(){return Q},whenReady:()=>zt};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(s=>{let a=C[s];a&&C._registerMethod("security",s,a)});let nt=()=>{m.size>0&&tt()};return typeof window<"u"&&window.addEventListener("beforeunload",nt),A?(async()=>{try{let a={},c=Z(),d=0;for(let f=0;f<(A.length||0);f++){let p=A.key(f);if(!p||!p.startsWith(c))continue;let E=A.getItem(p);if(E)try{let x=JSON.parse(E),D=p.substring(c.length);if(d=Math.max(d,x._sys_v!==void 0?x._sys_v:x.v||0),x.e&&Date.now()>x.e){A.removeItem(p),f--;continue}let I=x.d;if(x._enc&&ge)I=await vt(I,ge);else if(typeof I=="string"){if(x._b64)try{I=JSON.parse(atob(I))}catch{}else if(I.startsWith("{")||I.startsWith("["))try{I=JSON.parse(I)}catch{}}a[D]=I,z("hydrate",D,!0)}catch(x){z("hydrate",p,!1,String(x));let D=x instanceof Error?x:new Error(String(x));b?b(D,{operation:"hydration",key:p}):w||console.error(`[gState] Hydration failed for "${p}": `,x)}}let h=d<X&&e?.migrate?e.migrate(a,d):a;Object.entries(h).forEach(([f,p])=>{let E=Y&&p!==null&&typeof p=="object"?j(ce(p),!0):p,x=Ne(E),D=r.get(f)||0;T=T-D+x,r.set(f,x),t.set(f,E),n.set(f,1)}),ye=!0,he(),ee()}catch(a){ye=!0,he();let c=a instanceof Error?a:new Error(String(a));b?b(c,{operation:"hydration"}):w||console.error("[gState] Hydration failed: ",c)}})():(ye=!0,he()),C};import{useSyncExternalStore as Dt,useDebugValue as rn,useMemo as ue}from"react";var F=null,on=e=>{F&&!e?.namespace&&(e?.silent||console.warn("[gState] Store already exists. Pass a unique namespace to create additional stores."));let t=q(e);return F=t,t},sn=()=>{F&&(F.destroy(),F=null)},an=e=>{let t=e||F,n=ue(()=>r=>t?t._subscribe(r):()=>{},[t]);return Dt(n,()=>t?t.isReady:!1,()=>!0)},V=()=>F;var le=(e,t)=>{let n=ue(()=>t||F,[t]),r=ue(()=>{let g=()=>{},y=()=>!1,S=()=>null;return{set:y,get:S,remove:y,delete:y,deleteAll:y,list:()=>({}),compute:S,watch:()=>()=>{},use:g,transaction:g,destroy:g,_subscribe:()=>()=>{},_setSilently:g,_registerMethod:g,_addPlugin:g,_removePlugin:g,_getVersion:()=>0,get isReady(){return!1},whenReady:()=>Promise.resolve(),get plugins(){return{}}}},[]),o=n||r,i=ue(()=>g=>o._subscribe(g,e),[o,e]),u=Dt(i,()=>o.get(e)??void 0,()=>{}),l=ue(()=>(g,y)=>o.set(e,g,y),[o,e]);return rn(u,g=>`${e}: ${JSON.stringify(g)}`),[u,l]};var cn=(e,t)=>{let n=t?.key||"async_data",r=t?.store||q({namespace:`async_${n}`,silent:!0});return r.get(n)==null&&r.set(n,{data:null,loading:!1,error:null,updatedAt:null}),Object.assign(r,{execute:async()=>{let i=r.get(n);r.set(n,{...i||{data:null,loading:!1,error:null,updatedAt:null},loading:!0,error:null}),"whenReady"in r&&!r.isReady&&await r.whenReady();try{let u=await e(),l=r.get(n);r.set(n,{...l||{data:null,loading:!1,error:null,updatedAt:null},data:u,loading:!1,updatedAt:Date.now()},{persist:t?.persist})}catch(u){let l=r.get(n);r.set(n,{...l||{data:null,loading:!1,error:null,updatedAt:null},error:u instanceof Error?u:new Error(String(u)),loading:!1})}}})};var un=()=>({name:"gstate-immer",hooks:{onInstall:({store:e})=>{e._registerMethod("immer","setWithProduce",((t,n)=>e.set(t,n)))}}});var ln=e=>{let t=[],n=-1,r=!1,o=e?.limit||50;return{name:"gstate-undo-redo",hooks:{onInstall:({store:i})=>{t.push(i.list()),n=0,i._registerMethod("undoRedo","undo",()=>{if(n>0){r=!0,n--;let u=t[n];return u?(Object.entries(u).forEach(([l,g])=>{i._setSilently(l,g)}),r=!1,!0):!1}return!1}),i._registerMethod("undoRedo","redo",()=>{if(n<t.length-1){r=!0,n++;let u=t[n];return u?(Object.entries(u).forEach(([l,g])=>{i._setSilently(l,g)}),r=!1,!0):!1}return!1}),i._registerMethod("undoRedo","canUndo",()=>n>0),i._registerMethod("undoRedo","canRedo",()=>n<t.length-1)},onSet:({store:i})=>{r||(n<t.length-1&&(t=t.slice(0,n+1)),t.push(i.list()),t.length>o?t.shift():n++)}}}};var fn=e=>({name:"gstate-schema",hooks:{onSet:({key:t,value:n})=>{if(!t)return;let r=e[t];if(r){let o=r(n);if(o!==!0)throw new Error(`[Schema Error] Validation failed for key "${t}": ${o===!1?"Invalid type":o}`)}}}});var dn=e=>{let r=globalThis.__REDUX_DEVTOOLS_EXTENSION__;if(!r?.connect)return{name:"gstate-devtools-noop",hooks:{}};let o=null;return{name:"gstate-devtools",hooks:{onInstall:({store:i})=>{o=r.connect({name:e?.name||"Magnetar Store"}),o.init(i.list())},onSet:({key:i,store:u})=>{!i||!o||o.send(`SET_${i.toUpperCase()}`,u.list())},onRemove:({key:i,store:u})=>{!i||!o||o.send(`REMOVE_${i.toUpperCase()}`,u.list())}}}};var pn=()=>{let e=new Map;return{name:"gstate-snapshot",hooks:{onInstall:({store:t})=>{t._registerMethod("snapshot","takeSnapshot",(n=>{e.set(n,t.list())})),t._registerMethod("snapshot","restoreSnapshot",(n=>{let r=e.get(n);return r?(t.transaction(()=>{Object.entries(r).forEach(([o,i])=>{t.set(o,i)})}),!0):!1})),t._registerMethod("snapshot","listSnapshots",(()=>Array.from(e.keys()))),t._registerMethod("snapshot","deleteSnapshot",(n=>e.delete(n))),t._registerMethod("snapshot","clearSnapshots",(()=>e.clear()))}}}};var gn=e=>({name:"gstate-guard",hooks:{onBeforeSet:({key:t,value:n,store:r})=>{if(!t)return;let o=e[t];if(o){let i=o(n)}}}});var yn=e=>({name:"gstate-analytics",hooks:{onSet:({key:t,value:n})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:n,action:"SET"})},onRemove:({key:t})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:null,action:"REMOVE"})}}});var hn=e=>{let t=new BroadcastChannel(e?.channelName||"gstate_sync"),n=!1;return{name:"gstate-sync",hooks:{onInstall:({store:r})=>{t.onmessage=o=>{let{key:i,value:u,action:l}=o.data;i&&(n=!0,l==="REMOVE"?r.remove(i):r.set(i,u),n=!1)}},onSet:({key:r,value:o})=>{!r||n||t.postMessage({key:r,value:o,action:"SET"})},onRemove:({key:r})=>{!r||n||t.postMessage({key:r,action:"REMOVE"})},onDestroy:()=>{t.close()}}}};var Sn=()=>({name:"gstate-debug-noop",hooks:{}});var mn=(e={})=>{let t=e.dbName||"rgs-db",n=e.storeName||"states",r=e.version||1,o=null,i=()=>new Promise((y,S)=>{if(o)return y(o);let m=indexedDB.open(t,r);m.onerror=()=>S(m.error),m.onsuccess=()=>{o=m.result,y(o)},m.onupgradeneeded=v=>{let _=v.target.result;_.objectStoreNames.contains(n)||_.createObjectStore(n)}}),u=async(y,S)=>{let m=await i();return new Promise((v,_)=>{let w=m.transaction(n,"readwrite").objectStore(n).put(S,y);w.onsuccess=()=>v(),w.onerror=()=>_(w.error)})},l=async y=>{let S=await i();return new Promise((m,v)=>{let P=S.transaction(n,"readonly").objectStore(n).get(y);P.onsuccess=()=>m(P.result),P.onerror=()=>v(P.error)})},g=async y=>{let S=await i();return new Promise((m,v)=>{let P=S.transaction(n,"readwrite").objectStore(n).delete(y);P.onsuccess=()=>m(),P.onerror=()=>v(P.error)})};return{name:"indexedDB",hooks:{onInstall:({store:y})=>{y._registerMethod("indexedDB","clear",async()=>{(await i()).transaction(n,"readwrite").objectStore(n).clear()})},onInit:async({store:y})=>{let _=(await i()).transaction(n,"readonly").objectStore(n).getAllKeys();_.onsuccess=async()=>{let k=_.result,P=y.namespace+"_";for(let w of k)if(w.startsWith(P)){let fe=await l(w);if(fe){let X=w.substring(P.length);y._setSilently(X,fe.d)}}}},onSet:async({key:y,value:S,store:m})=>{if(!y)return;let v=m.namespace+"_",_={d:S,t:Date.now(),v:m._getVersion?.(y)||1};await u(`${v}${y}`,_)},onRemove:async({key:y,store:S})=>{if(!y)return;let m=S.namespace+"_";await g(`${m}${y}`)}}}};var _n=e=>{let{adapter:t,autoSyncInterval:n}=e,r=new Map,o={lastSyncTimestamp:null,totalKeysSynced:0,totalBytesSynced:0,syncCount:0,lastDuration:0,errors:0},i=null;return{name:"cloudSync",hooks:{onInstall:({store:u})=>{u._registerMethod("cloudSync","sync",async()=>{let l=performance.now(),g={},y=0;try{let S=u.list(),m=Object.keys(S);for(let _ of m){let k=u._getVersion?.(_)||0,P=r.get(_)||0;if(k>P){let w=S[_];g[_]=w,y+=JSON.stringify(w).length,r.set(_,k)}}if(Object.keys(g).length===0)return{status:"no-change",stats:o};if(await t.save(g))return o.lastSyncTimestamp=Date.now(),o.totalKeysSynced+=Object.keys(g).length,o.totalBytesSynced+=y,o.syncCount++,o.lastDuration=performance.now()-l,e.onSync&&e.onSync(o),{status:"success",stats:o};throw new Error(`Adapter ${t.name} failed to save.`)}catch(S){return o.errors++,console.error(`[gState] Cloud Sync Failed (${t.name}):`,S),{status:"error",error:String(S),stats:o}}}),u._registerMethod("cloudSync","getStats",()=>o),n&&n>0&&(i=setInterval(()=>{let g=u.plugins.cloudSync;g&&g.sync()},n))},onDestroy:()=>{i&&clearInterval(i)}}}},wn=(e,t)=>({name:"MongoDB-Atlas",save:async n=>(await fetch(`${e}/action/updateOne`,{method:"POST",headers:{"Content-Type":"application/json","api-key":t},body:JSON.stringify({dataSource:"Cluster0",database:"rgs_cloud",collection:"user_states",filter:{id:"global_state"},update:{$set:{data:n,updatedAt:Date.now()}},upsert:!0})})).ok}),bn=(e,t)=>({name:"Firebase-Firestore",save:async n=>{try{return console.log("[Mock] Firestore Syncing:",n),!0}catch{return!1}}}),En=(e,t)=>({name:"SQL-REST-API",save:async n=>(await fetch(e,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(n)})).ok});var Gn=e=>({name:"gstate-logger",hooks:{onSet:({key:t,value:n,version:r})=>{let o=new Date().toLocaleTimeString(),i=`[gState] SET: ${t} (v${r}) @ ${o}`;e?.collapsed?console.groupCollapsed(i):console.group(i),console.info("%c Value:","color: #4CAF50; font-weight: bold;",n),console.groupEnd()},onRemove:({key:t})=>{console.warn(`[gState] REMOVED: ${t}`)},onTransaction:({key:t})=>{t==="START"?console.group("\u2500\u2500 TRANSACTION START \u2500\u2500"):console.groupEnd()}}});var ar=(e,t)=>{let r=q(typeof t=="string"?{namespace:t}:t);e&&Object.entries(e).forEach(([i,u])=>{r.get(i)===null&&r._setSilently(i,u)});let o=i=>le(i,r);return typeof window<"u"&&(window.gState=r,window.rgs=r),Object.assign(o,r)};var cr=(e,t)=>V()?.addAccessRule(e,t),ur=(e,t,n)=>V()?.hasPermission(e,t,n)??!0,lr=(e,t,n)=>{let r=V();if(!r)throw new Error("[gState] recordConsent failed: No store found. call initState() first.");return r.recordConsent(e,t,n)},fr=(e,t)=>V()?.hasConsent(e,t)??!1,dr=e=>V()?.getConsents(e)??[],pr=(e,t)=>V()?.revokeConsent(e,t),gr=e=>{let t=V();if(!t)throw new Error("[gState] exportUserData failed: No store found.");return t.exportUserData(e)},yr=e=>{let t=V();if(!t)throw new Error("[gState] deleteUserData failed: No store found.");return t.deleteUserData(e)},hr=()=>{},Sr=()=>{};export{cr as addAccessRule,yn as analyticsPlugin,hr as clearAccessRules,Sr as clearAllConsents,_n as cloudSyncPlugin,cn as createAsyncStore,bn as createFirestoreAdapter,wn as createMongoAdapter,En as createSqlRestAdapter,q as createStore,Sn as debugPlugin,yr as deleteUserData,sn as destroyState,dn as devToolsPlugin,Yt as exportKey,gr as exportUserData,Qt as generateEncryptionKey,dr as getConsents,V as getStore,ar as gstate,gn as guardPlugin,fr as hasConsent,ur as hasPermission,un as immerPlugin,Zt as importKey,mn as indexedDBPlugin,on as initState,xt as isCryptoAvailable,ie as logAudit,Gn as loggerPlugin,lr as recordConsent,pr as revokeConsent,se as sanitizeValue,fn as schemaPlugin,en as setAuditLogger,pn as snapshotPlugin,hn as syncPlugin,ln as undoRedoPlugin,le as useGState,an as useIsStoreReady,le as useSimpleState,le as useStore,Qe as validateKey};
|
|
1
|
+
var yt=Symbol.for("immer-nothing"),it=Symbol.for("immer-draftable"),R=Symbol.for("immer-state");function T(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var M=Object,q=M.getPrototypeOf,Se="constructor",Pe="prototype",$e="configurable",he="enumerable",ge="writable",ne="value",j=e=>!!e&&!!e[R];function U(e){return e?St(e)||ke(e)||!!e[it]||!!e[Se]?.[it]||ve(e)||xe(e):!1}var Wt=M[Pe][Se].toString(),at=new WeakMap;function St(e){if(!e||!Je(e))return!1;let t=q(e);if(t===null||t===M[Pe])return!0;let n=M.hasOwnProperty.call(t,Se)&&t[Se];if(n===Object)return!0;if(!G(n))return!1;let r=at.get(n);return r===void 0&&(r=Function.toString.call(n),at.set(n,r)),r===Wt}function Ee(e,t,n=!0){se(e)===0?(n?Reflect.ownKeys(e):M.keys(e)).forEach(o=>{t(o,e[o],e)}):e.forEach((r,o)=>t(o,r,e))}function se(e){let t=e[R];return t?t.type_:ke(e)?1:ve(e)?2:xe(e)?3:0}var ct=(e,t,n=se(e))=>n===2?e.has(t):M[Pe].hasOwnProperty.call(e,t),Fe=(e,t,n=se(e))=>n===2?e.get(t):e[t],me=(e,t,n,r=se(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Ht(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var ke=Array.isArray,ve=e=>e instanceof Map,xe=e=>e instanceof Set,Je=e=>typeof e=="object",G=e=>typeof e=="function",Ne=e=>typeof e=="boolean";function Jt(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var N=e=>e.copy_||e.base_;var Ge=e=>e.modified_?e.copy_:e.base_;function je(e,t){if(ve(e))return new Map(e);if(xe(e))return new Set(e);if(ke(e))return Array[Pe].slice.call(e);let n=St(e);if(t===!0||t==="class_only"&&!n){let r=M.getOwnPropertyDescriptors(e);delete r[R];let o=Reflect.ownKeys(r);for(let s=0;s<o.length;s++){let a=o[s],u=r[a];u[ge]===!1&&(u[ge]=!0,u[$e]=!0),(u.get||u.set)&&(r[a]={[$e]:!0,[ge]:!0,[he]:u[he],[ne]:e[a]})}return M.create(q(e),r)}else{let r=q(e);if(r!==null&&n)return{...e};let o=M.create(r);return M.assign(o,e)}}function $(e,t=!1){return Ce(e)||j(e)||!U(e)||(se(e)>1&&M.defineProperties(e,{set:pe,add:pe,clear:pe,delete:pe}),M.freeze(e),t&&Ee(e,(n,r)=>{$(r,!0)},!1)),e}function Gt(){T(2)}var pe={[ne]:Gt};function Ce(e){return e===null||!Je(e)?!0:M.isFrozen(e)}var _e="MapSet",Le="Patches",ut="ArrayMethods",ht={};function H(e){let t=ht[e];return t||T(0,e),t}var lt=e=>!!ht[e];var re,mt=()=>re,qt=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:lt(_e)?H(_e):void 0,arrayMethodsPlugin_:lt(ut)?H(ut):void 0});function ft(e,t){t&&(e.patchPlugin_=H(Le),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Be(e){Ke(e),e.drafts_.forEach(Qt),e.drafts_=null}function Ke(e){e===re&&(re=e.parent_)}var dt=e=>re=qt(re,e);function Qt(e){let t=e[R];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function pt(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[R].modified_&&(Be(t),T(4)),U(e)&&(e=gt(t,e));let{patchPlugin_:o}=t;o&&o.generateReplacementPatches_(n[R].base_,e,t)}else e=gt(t,n);return Xt(t,e,!0),Be(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==yt?e:void 0}function gt(e,t){if(Ce(t))return t;let n=t[R];if(!n)return we(t,e.handledSet_,e);if(!Re(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:r}=n;if(r)for(;r.length>0;)r.pop()(e);bt(n,e)}return n.copy_}function Xt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&$(t,n)}function _t(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Re=(e,t)=>e.scope_===t,Yt=[];function wt(e,t,n,r){let o=N(e),s=e.type_;if(r!==void 0&&Fe(o,r,s)===t){me(o,r,n,s);return}if(!e.draftLocations_){let u=e.draftLocations_=new Map;Ee(o,(p,d)=>{if(j(d)){let h=u.get(d)||[];h.push(p),u.set(d,h)}})}let a=e.draftLocations_.get(t)??Yt;for(let u of a)me(o,u,n,s)}function Zt(e,t,n){e.callbacks_.push(function(o){let s=t;if(!s||!Re(s,o))return;o.mapSetPlugin_?.fixSetContents(s);let a=Ge(s);wt(e,s.draft_??s,a,n),bt(s,o)})}function bt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:r}=t;if(r){let o=r.getPath(e);o&&r.generatePatches_(e,o,t)}_t(e)}}function en(e,t,n){let{scope_:r}=e;if(j(n)){let o=n[R];Re(o,r)&&o.callbacks_.push(function(){ye(e);let a=Ge(o);wt(e,n,a,t)})}else U(n)&&e.callbacks_.push(function(){let s=N(e);e.type_===3?s.has(n)&&we(n,r.handledSet_,r):Fe(s,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&we(Fe(e.copy_,t,e.type_),r.handledSet_,r)})}function we(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||j(e)||t.has(e)||!U(e)||Ce(e)||(t.add(e),Ee(e,(r,o)=>{if(j(o)){let s=o[R];if(Re(s,n)){let a=Ge(s);me(e,r,a,e.type_),_t(s)}}else U(o)&&we(o,t,n)})),e}function tn(e,t){let n=ke(e),r={type_:n?1:0,scope_:t?t.scope_:mt(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},o=r,s=be;n&&(o=[r],s=oe);let{revoke:a,proxy:u}=Proxy.revocable(o,s);return r.draft_=u,r.revoke_=a,[u,r]}var be={get(e,t){if(t===R)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t=="string";if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let o=N(e);if(!ct(o,t,e.type_))return nn(e,o,t);let s=o[t];if(e.finalized_||!U(s)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Jt(t))return s;if(s===Ue(e.base_,t)){ye(e);let a=e.type_===1?+t:t,u=He(e.scope_,s,e,a);return e.copy_[a]=u}return s},has(e,t){return t in N(e)},ownKeys(e){return Reflect.ownKeys(N(e))},set(e,t,n){let r=Pt(N(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let o=Ue(N(e),t),s=o?.[R];if(s&&s.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(Ht(n,o)&&(n!==void 0||ct(e.base_,t,e.type_)))return!0;ye(e),We(e)}return e.copy_[t]===n&&(n!==void 0||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),en(e,t,n)),!0},deleteProperty(e,t){return ye(e),Ue(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),We(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=N(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[ge]:!0,[$e]:e.type_!==1||t!=="length",[he]:r[he],[ne]:n[t]}},defineProperty(){T(11)},getPrototypeOf(e){return q(e.base_)},setPrototypeOf(){T(12)}},oe={};for(let e in be){let t=be[e];oe[e]=function(){let n=arguments;return n[0]=n[0][0],t.apply(this,n)}}oe.deleteProperty=function(e,t){return oe.set.call(this,e,t,void 0)};oe.set=function(e,t,n){return be.set.call(this,e[0],t,n,e[0])};function Ue(e,t){let n=e[R];return(n?N(n):e)[t]}function nn(e,t,n){let r=Pt(t,n);return r?ne in r?r[ne]:r.get?.call(e.draft_):void 0}function Pt(e,t){if(!(t in e))return;let n=q(e);for(;n;){let r=Object.getOwnPropertyDescriptor(n,t);if(r)return r;n=q(n)}}function We(e){e.modified_||(e.modified_=!0,e.parent_&&We(e.parent_))}function ye(e){e.copy_||(e.assigned_=new Map,e.copy_=je(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var rn=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(t,n,r)=>{if(G(t)&&!G(n)){let s=n;n=t;let a=this;return function(p=s,...d){return a.produce(p,h=>n.call(this,h,...d))}}G(n)||T(6),r!==void 0&&!G(r)&&T(7);let o;if(U(t)){let s=dt(this),a=He(s,t,void 0),u=!0;try{o=n(a),u=!1}finally{u?Be(s):Ke(s)}return ft(s,r),pt(o,s)}else if(!t||!Je(t)){if(o=n(t),o===void 0&&(o=t),o===yt&&(o=void 0),this.autoFreeze_&&$(o,!0),r){let s=[],a=[];H(Le).generateReplacementPatches_(t,o,{patches_:s,inversePatches_:a}),r(s,a)}return o}else T(1,t)},this.produceWithPatches=(t,n)=>{if(G(t))return(a,...u)=>this.produceWithPatches(a,p=>t(p,...u));let r,o;return[this.produce(t,n,(a,u)=>{r=a,o=u}),r,o]},Ne(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ne(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ne(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){U(e)||T(8),j(e)&&(e=on(e));let t=dt(this),n=He(t,e,void 0);return n[R].isManual_=!0,Ke(t),n}finishDraft(e,t){let n=e&&e[R];(!n||!n.isManual_)&&T(9);let{scope_:r}=n;return ft(r,t),pt(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let o=t[n];if(o.path.length===0&&o.op==="replace"){e=o.value;break}}n>-1&&(t=t.slice(n+1));let r=H(Le).applyPatches_;return j(e)?r(e,t):this.produce(e,o=>r(o,t))}};function He(e,t,n,r){let[o,s]=ve(t)?H(_e).proxyMap_(t,n):xe(t)?H(_e).proxySet_(t,n):tn(t,n);return(n?.scope_??mt()).drafts_.push(o),s.callbacks_=n?.callbacks_??[],s.key_=r,n&&r!==void 0?Zt(n,s,r):s.callbacks_.push(function(p){p.mapSetPlugin_?.fixSetContents(s);let{patchPlugin_:d}=p;s.modified_&&d&&d.generatePatches_(s,[],p)}),o}function on(e){return j(e)||T(10,e),Et(e)}function Et(e){if(!U(e)||Ce(e))return e;let t=e[R],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=je(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=je(e,!0);return Ee(n,(o,s)=>{me(n,o,Et(s))},r),t&&(t.finalized_=!1),n}var sn=new rn,kt=sn.produce;var vt=typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof crypto.subtle.generateKey=="function",an=async()=>{if(!vt)throw new Error("Web Crypto API not available");let e=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),t=crypto.getRandomValues(new Uint8Array(12));return{key:e,iv:t}},cn=async e=>{let t=await crypto.subtle.exportKey("raw",e.key);return{key:btoa(String.fromCharCode(...new Uint8Array(t))),iv:btoa(String.fromCharCode(...e.iv))}},un=async(e,t)=>{let n=Uint8Array.from(atob(e),s=>s.charCodeAt(0)),r=Uint8Array.from(atob(t),s=>s.charCodeAt(0));return{key:await crypto.subtle.importKey("raw",n,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),iv:r}},xt=async(e,t)=>{let n=new TextEncoder,r=n.encode(JSON.stringify(e)),o=await crypto.subtle.encrypt({name:"AES-GCM",iv:t.iv},t.key,r),s=new Uint8Array(t.iv.length+o.byteLength);return s.set(t.iv),s.set(new Uint8Array(o),t.iv.length),btoa(String.fromCharCode(...s))},Ct=async(e,t)=>{let n=Uint8Array.from(atob(e),a=>a.charCodeAt(0)),r=n.slice(0,12),o=n.slice(12),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},t.key,o);return JSON.parse(new TextDecoder().decode(s))},Ie=null,ln=e=>{Ie=e},Rt=()=>Ie!==null,ae=e=>{Ie&&Ie(e)},qe=(e,t,n)=>{e.set(t instanceof RegExp?t.source:t,n)},Ae=(e,t,n,r)=>{if(e.size===0)return!0;for(let[o,s]of e){let a;if(typeof o=="function")a=o(t,r);else try{a=new RegExp(o).test(t)}catch{continue}if(a)return s.includes(n)||s.includes("admin")}return!1},ie=e=>{if(typeof e=="string"){let t=e.replace(/&#[xX]?[0-9a-fA-F]+;?/g,r=>{let o=r.match(/&#x([0-9a-fA-F]+);?/i);if(o&&o[1])return String.fromCharCode(parseInt(o[1],16));let s=r.match(/&#([0-9]+);?/);return s&&s[1]?String.fromCharCode(parseInt(s[1],10)):""});try{t=decodeURIComponent(t)}catch{}return t.replace(/\b(javascript|vbscript|data:text\/html|about:blank|chrome:)/gi,"[SEC-REMOVED]").replace(/<script\b[^>]*>[\s\S]*?<\s*\/\s*script\b[^>]*>/gi,"[SEC-REMOVED]").replace(/on\w+\s*=/gi,"[SEC-REMOVED]=").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"[SEC-REMOVED]").replace(/<object\b[^<]*(?:(?!<\/object>)<[^<]*)*<\/object>/gi,"[SEC-REMOVED]").replace(/<embed\b[^<]*(?:(?!<\/embed>)<[^<]*)*<\/embed>/gi,"[SEC-REMOVED]").replace(/<svg\b[^<]*(?:(?!<\/svg>)<[^<]*)*<\/svg>/gi,"[SEC-REMOVED]").replace(/<form\b[^<]*(?:(?!<\/form>)<[^<]*)*<\/form>/gi,"[SEC-REMOVED]").replace(/<base\b[^<]*(?:(?!<\/base>)<[^<]*)*<\/base>/gi,"[SEC-REMOVED]").replace(/<link\b[^<]*(?:(?!<\/link>)<[^<]*)*<\/link>/gi,"[SEC-REMOVED]").replace(/<meta\b[^<]*(?:(?!<\/meta>)<[^<]*)*<\/meta>/gi,"[SEC-REMOVED]").replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi,"[SEC-REMOVED]")}if(e&&typeof e=="object"&&!Array.isArray(e)){if(Object.getPrototypeOf(e)===Object.prototype){let t={};for(let[n,r]of Object.entries(e))t[n]=ie(r);return t}return e}return Array.isArray(e)?e.map(t=>ie(t)):e},Qe=e=>/^[a-zA-Z0-9_.-]+$/.test(e)&&e.length<=256,Xe=(e,t,n,r)=>{let o={id:crypto.randomUUID(),purpose:n,granted:r,timestamp:Date.now()},s=e.get(t)||[];return s.push(o),e.set(t,s),ae({timestamp:Date.now(),action:"set",key:`consent:${n}`,userId:t,success:!0}),o},It=(e,t,n)=>{let r=e.get(t);if(!r)return!1;for(let o=r.length-1;o>=0;o--){let s=r[o];if(s&&s.purpose===n)return s.granted}return!1},At=(e,t,n)=>Xe(e,t,n,!1),Mt=(e,t)=>e.get(t)||[],Dt=(e,t)=>({userId:t,exportedAt:Date.now(),consents:e.get(t)||[]}),Ot=(e,t)=>{let n=e.get(t)?.length||0;return e.delete(t),{success:!0,deletedConsents:n}};var Q=e=>{if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}let t=new WeakMap,n=r=>{if(r===null||typeof r!="object"||typeof r=="function")return r;if(t.has(r))return t.get(r);if(r instanceof Date)return new Date(r.getTime());if(r instanceof RegExp)return new RegExp(r.source,r.flags);if(r instanceof Map){let a=new Map;return t.set(r,a),r.forEach((u,p)=>a.set(n(p),n(u))),a}if(r instanceof Set){let a=new Set;return t.set(r,a),r.forEach(u=>a.add(n(u))),a}let o=Array.isArray(r)?[]:Object.create(Object.getPrototypeOf(r));t.set(r,o);let s=[...Object.keys(r),...Object.getOwnPropertySymbols(r)];for(let a of s)o[a]=n(r[a]);return o};return n(e)},ce=(e,t)=>{if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return e===t;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!ce(e[o],t[o]))return!1;return!0}let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let o=0;o<n.length;o++){let s=n[o];if(!(s in t)||!ce(e[s],t[s]))return!1}return!0};var zt=e=>`${e}_`,Vt=async e=>{if(!e.storage)return;let{store:t,config:n,diskQueue:r,storage:o,encryptionKey:s,audit:a,onError:u,silent:p,currentVersion:d}=e,h=zt(n.namespace||"gstate");try{let _={};t.forEach((y,b)=>{_[b]=y});let l,S=n?.encoded;S?l=btoa(JSON.stringify(_)):l=JSON.stringify(_),o.setItem(h.replace("_",""),JSON.stringify({v:1,t:Date.now(),e:null,d:l,_sys_v:d,_b64:S?!0:void 0})),a("set","FULL_STATE",!0)}catch(_){let l=_ instanceof Error?_:new Error(String(_));u?u(l,{operation:"persist",key:"FULL_STATE"}):p||console.error("[gState] Persist failed: ",l)}let m=Array.from(r.entries());r.clear();for(let[_,l]of m)try{let S=l.value,y=l.options.encoded||l.options.secure;if(l.options.encrypted){if(!s)throw new Error(`Encryption key missing for "${_}"`);S=await xt(l.value,s)}else y?S=btoa(JSON.stringify(l.value)):typeof l.value=="object"&&l.value!==null&&(S=JSON.stringify(l.value));o.setItem(`${h}${_}`,JSON.stringify({v:e.versions.get(_)||1,t:Date.now(),e:l.options.ttl?Date.now()+l.options.ttl:null,d:S,_sys_v:d,_enc:l.options.encrypted?!0:void 0,_b64:y?!0:void 0})),a("set",_,!0)}catch(S){let y=S instanceof Error?S:new Error(String(S));u?u(y,{operation:"persist",key:_}):p||console.error("[gState] Persist failed: ",y)}},Nt=async(e,t,n)=>{let{storage:r,config:o,encryptionKey:s,audit:a,onError:u,silent:p,currentVersion:d,store:h,sizes:m,versions:_}=e,l=zt(o.namespace||"gstate"),S=o.immer??!0;if(r)try{let y={},b=0;for(let I=0;I<(r.length||0);I++){let k=r.key(I);if(!k||!k.startsWith(l))continue;let x=r.getItem(k);if(x)try{let E=JSON.parse(x),A=k.substring(l.length);if(b=Math.max(b,E._sys_v!==void 0?E._sys_v:E.v||0),E.e&&Date.now()>E.e){r.removeItem(k),I--;continue}let D=E.d;if(E._enc&&s)D=await Ct(D,s);else if(typeof D=="string"){if(E._b64)try{D=JSON.parse(atob(D))}catch{}else if(D.startsWith("{")||D.startsWith("["))try{D=JSON.parse(D)}catch{}}y[A]=D,a("hydrate",A,!0)}catch(E){a("hydrate",k,!1,String(E));let A=E instanceof Error?E:new Error(String(E));u?u(A,{operation:"hydration",key:k}):p||console.error(`[gState] Hydration failed for "${k}": `,E)}}let B=b<d&&o.migrate?o.migrate(y,b):y;Object.entries(B).forEach(([I,k])=>{let x=S&&k!==null&&typeof k=="object"?$(Q(k),!0):k,E=t(x),A=m.get(I)||0;e.totalSize=e.totalSize-A+E,m.set(I,E),h.set(I,x),_.set(I,1)}),n()}catch(y){let b=y instanceof Error?y:new Error(String(y));u?u(b,{operation:"hydration"}):p||console.error("[gState] Hydration failed: ",b)}};var Ut=(e,t,n)=>{if(e.plugins.size!==0)for(let r of e.plugins.values()){let o=r.hooks?.[t];if(o)try{o(n)}catch(s){let a=s instanceof Error?s:new Error(String(s));e.onError?e.onError(a,{operation:`plugin:${r.name}:${t}`,key:n.key}):e.silent||console.error(`[gState] Plugin "${r.name}" error:`,s)}}},$t=(e,t,n)=>{try{e.plugins.set(t.name,t),t.hooks?.onInstall?.({store:n})}catch(r){let o=r instanceof Error?r:new Error(String(r));e.onError?e.onError(o,{operation:"plugin:install",key:t.name}):e.silent||console.error(`[gState] Failed to install plugin "${t.name}": `,r)}};var pn={local:()=>typeof window<"u"?window.localStorage:null,session:()=>typeof window<"u"?window.sessionStorage:null,memory:()=>{let e=new Map;return{getItem:t=>e.get(t)||null,setItem:(t,n)=>e.set(t,n),removeItem:t=>e.delete(t),key:t=>Array.from(e.keys())[t]||null,get length(){return e.size}}}},X=e=>{let t=new Map,n=new Map,r=new Map,o=new Set,s=new Map,a=new Set,u=new Map,p=new Map,d=new Map,h=new Map,m=new Map,_=new Map,l=new Map,S=new Map,y=e?.namespace||"gstate",b=e?.silent??!1,B=e?.debounceTime??150,I=e?.version??0,k=e?.storage||pn.local(),x=e?.onError,E=e?.maxObjectSize??0,A=e?.maxTotalSize??0,D=e?.encryptionKey??null,le=e?.validateInput??!0,jt=e?.auditEnabled??!0,Y=e?.userId,fe=e?.immer??!0,Lt=e?.persistByDefault??e?.persistence??e?.persist??!1;e?.accessRules&&e.accessRules.forEach(i=>qe(l,i.pattern,i.permissions));let De=!1,Oe=!1,Te=!1,V=0,J=null,F=null,ze,Bt=new Promise(i=>{ze=i}),Kt=()=>`${y}_`,Ze=()=>({store:t,versions:n,sizes:r,totalSize:V,storage:k,config:e||{},diskQueue:m,encryptionKey:D,audit:W,onError:x,silent:b,debounceTime:B,currentVersion:I}),et=()=>({plugins:h,onError:x,silent:b}),Ve=i=>{if(i==null)return 0;let c=typeof i;if(c==="boolean")return 4;if(c==="number")return 8;if(c==="string")return i.length*2;if(c!=="object")return 0;let f=0,w=[i],P=new WeakSet;for(;w.length>0;){let g=w.pop();if(typeof g=="boolean")f+=4;else if(typeof g=="number")f+=8;else if(typeof g=="string")f+=g.length*2;else if(typeof g=="object"&&g!==null){let v=g;if(P.has(v))continue;if(P.add(v),Array.isArray(v))for(let O=0;O<v.length;O++)w.push(v[O]);else for(let O of Object.keys(v))f+=O.length*2,w.push(v[O])}}return f},K=(i,c)=>{Ut(et(),i,c)},W=(i,c,f,w)=>{jt&&Rt()&&ae&&ae({timestamp:Date.now(),action:i,key:c,userId:Y,success:f,error:w})},tt=i=>{let c=p.get(i);if(!c)return;let f=new Set,w=g=>(f.add(g),p.has(g)?p.get(g).lastValue:C.get(g)),P=c.selector(w);c.deps.forEach(g=>{if(!f.has(g)){let v=d.get(g);v&&(v.delete(i),v.size===0&&d.delete(g))}}),f.forEach(g=>{c.deps.has(g)||(d.has(g)||d.set(g,new Set),d.get(g).add(i))}),c.deps=f,ce(c.lastValue,P)||(c.lastValue=fe&&P!==null&&typeof P=="object"?$(Q(P),!0):P,n.set(i,(n.get(i)||0)+1),Z(i))},Z=i=>{if(i){if(d.has(i)){let w=d.get(i);for(let P of w)tt(P)}let c=u.get(i);if(c){let w=C.get(i);for(let P of c)try{P(w)}catch(g){let v=g instanceof Error?g:new Error(String(g));x?x(v,{operation:"watcher",key:i}):b||console.error(`[gState] Watcher error for "${i}":`,g)}}let f=s.get(i);if(f)for(let w of f)try{w()}catch(P){let g=P instanceof Error?P:new Error(String(P));x?x(g,{operation:"keyListener",key:i}):b||console.error(`[gState] Listener error for "${i}":`,P)}}if(De){Oe=!0;return}for(let c of o)try{c()}catch(f){let w=f instanceof Error?f:new Error(String(f));x?x(w,{operation:"listener"}):b||console.error("[gState] Global listener error: ",f)}},nt=async()=>{Vt(Ze())},de={},C={_setSilently:(i,c)=>{let f=r.get(i)||0,w=fe&&c!==null&&typeof c=="object"?$(Q(c),!0):c,g=(E>0||A>0)&&!1?Ve(w):0;V=V-f+g,r.set(i,g),t.set(i,w),n.set(i,(n.get(i)||0)+1),F=null},_registerMethod:(i,c,f)=>{let w=P=>P==="__proto__"||P==="constructor"||P==="prototype";if(w(i)||w(c)){console.warn("[gState] Refusing to register method with unsafe key:",i,c);return}de[i]||(de[i]={}),de[i][c]=f},set:(i,c,f={})=>{let w=t.get(i),P=fe&&typeof c=="function"?kt(w,c):c;if(le&&!Qe(i))return b||console.warn(`[gState] Invalid key: ${i}`),!1;if(!Ae(l,i,"write",Y))return W("set",i,!1,"RBAC Denied"),b||console.error(`[gState] RBAC Denied for "${i}"`),!1;let g=le?ie(P):P,v=r.get(i)||0;K("onBeforeSet",{key:i,value:g,store:C,version:n.get(i)||0});let O=fe&&g!==null&&typeof g=="object"?$(Q(g),!0):g;if(!ce(w,O)){let ee=(E>0||A>0)&&!1?Ve(O):0;if(E>0&&ee>E){let te=new Error(`Object size (${ee} bytes) exceeds maxObjectSize (${E} bytes)`);x?x(te,{operation:"set",key:i}):b||console.warn(`[gState] ${te.message} for "${i}"`)}if(A>0){let te=V-v+ee;if(te>A){let st=new Error(`Total store size (${te} bytes) exceeds limit (${A} bytes)`);x?x(st,{operation:"set"}):b||console.warn(`[gState] ${st.message}`)}}V=V-v+ee,r.set(i,ee),t.set(i,O),n.set(i,(n.get(i)||0)+1),F=null;let ot=f.persist??Lt;return ot&&(m.set(i,{value:O,options:{...f,persist:ot,encoded:f.encoded||e?.encoded}}),J&&clearTimeout(J),J=setTimeout(nt,B)),K("onSet",{key:i,value:O,store:C,version:n.get(i)}),W("set",i,!0),Z(i),!0}return!1},get:i=>{if(!Ae(l,i,"read",Y))return W("get",i,!1,"RBAC Denied"),null;let c=t.get(i);return K("onGet",{store:C,key:i,value:c}),W("get",i,!0),c},compute:(i,c)=>{try{return p.has(i)||(p.set(i,{selector:c,lastValue:null,deps:new Set}),tt(i)),p.get(i).lastValue}catch(f){let w=f instanceof Error?f:new Error(String(f));return x?x(w,{operation:"compute",key:i}):b||console.error(`[gState] Compute error for "${i}": `,f),null}},watch:(i,c)=>{u.has(i)||u.set(i,new Set);let f=u.get(i);return f.add(c),()=>{f.delete(c),f.size===0&&u.delete(i)}},remove:i=>{if(!Ae(l,i,"delete",Y))return W("delete",i,!1,"RBAC Denied"),!1;let c=t.get(i),f=t.delete(i);return f&&(V-=r.get(i)||0,r.delete(i),K("onRemove",{store:C,key:i,value:c}),F=null),n.set(i,(n.get(i)||0)+1),k&&k.removeItem(`${Kt()}${i}`),W("delete",i,!0),Z(i),f},delete:i=>C.remove(i),deleteAll:()=>{if(Array.from(t.keys()).forEach(i=>C.remove(i)),k){let i=y+"_";for(let c=0;c<(k.length||0);c++){let f=k.key(c);f?.startsWith(i)&&(k.removeItem(f),c--)}}return V=0,r.clear(),F=null,!0},list:()=>Object.fromEntries(t.entries()),use:i=>{a.add(i)},transaction:i=>{De=!0,K("onTransaction",{store:C,key:"START"});try{i()}finally{De=!1,K("onTransaction",{store:C,key:"END"}),Oe&&(Oe=!1,Z())}},destroy:()=>{J&&(clearTimeout(J),J=null),m.clear(),typeof window<"u"&&window.removeEventListener("beforeunload",rt),K("onDestroy",{store:C}),o.clear(),s.clear(),u.clear(),p.clear(),d.clear(),h.clear(),t.clear(),r.clear(),V=0,l.clear(),S.clear(),n.clear(),_.clear(),a.clear()},_addPlugin:i=>{$t(et(),i,C)},_removePlugin:i=>{h.delete(i)},_subscribe:(i,c)=>{if(c){s.has(c)||s.set(c,new Set);let f=s.get(c);return f.add(i),()=>{f.delete(i),f.size===0&&s.delete(c)}}return o.add(i),()=>o.delete(i)},_getVersion:i=>n.get(i)??0,addAccessRule:(i,c)=>qe(l,i,c),hasPermission:(i,c,f)=>{if(l.size===0)return!0;for(let[w,P]of l){let g;if(typeof w=="function")g=w(i,f);else try{let v=_.get(w);v||(v=new RegExp(w),_.set(w,v)),g=v.test(i)}catch{continue}if(g)return P.includes(c)||P.includes("admin")}return!1},recordConsent:(i,c,f)=>Xe(S,i,c,f),hasConsent:(i,c)=>It(S,i,c),getConsents:i=>Mt(S,i),revokeConsent:(i,c)=>At(S,i,c),exportUserData:i=>Dt(S,i),deleteUserData:i=>Ot(S,i),getSnapshot:()=>(F||(F=Object.fromEntries(t.entries())),F),get plugins(){return de},get isReady(){return Te},get namespace(){return y},get userId(){return Y},whenReady:()=>Bt};["addAccessRule","recordConsent","hasConsent","getConsents","revokeConsent","exportUserData","deleteUserData"].forEach(i=>{let c=C[i];c&&C._registerMethod("security",i,c)});let rt=()=>{m.size>0&&nt()};return typeof window<"u"&&window.addEventListener("beforeunload",rt),k?Nt(Ze(),i=>(E>0||A>0)&&!1?Ve(i):0,()=>{Te=!0,F=null,ze(),Z()}).then(()=>{}):(Te=!0,ze()),C};import{useSyncExternalStore as Ft,useDebugValue as gn,useMemo as Ye,useCallback as Me}from"react";var L=null,yn=e=>{L&&!e?.namespace&&(e?.silent||console.warn("[gState] Store already exists. Pass a unique namespace to create additional stores."));let t=X(e);return L=t,t},Sn=()=>{L&&(L.destroy(),L=null)},hn=e=>{let t=e||L,n=Ye(()=>r=>t?t._subscribe(r):()=>{},[t]);return Ft(n,()=>t?t.isReady:!1,()=>!0)},z=()=>L;function ue(e,t){let n=Ye(()=>t||L,[t]),r=Ye(()=>{let l=()=>{},S=()=>!1,y=()=>null;return{set:S,get:y,remove:S,delete:S,deleteAll:S,list:()=>({}),compute:y,watch:()=>()=>{},use:l,transaction:l,destroy:l,_subscribe:()=>()=>{},_setSilently:l,_registerMethod:l,_addPlugin:l,_removePlugin:l,_getVersion:()=>0,get isReady(){return!1},whenReady:()=>Promise.resolve(),get plugins(){return{}},getSnapshot:()=>({}),get namespace(){return"ghost"},get userId(){}}},[]),o=n||r,s=typeof e=="function",a=s?null:e,u=s?e:null,p=Me(l=>s?o._subscribe(l):o._subscribe(l,a),[o,s,a]),d=Me(()=>s?u(o.getSnapshot()):o.get(a)??void 0,[o,s,a,u]),h=Me(()=>{if(s)try{return u({})}catch{return}else return},[u,s]),m=Ft(p,d,h),_=Me((l,S)=>s?!1:o.set(a,l,S),[o,s,a]);return gn(m,l=>s?`Selector: ${JSON.stringify(l)}`:`${a}: ${JSON.stringify(l)}`),s?m:[m,_]}var mn=(e,t)=>{let n=t?.key||"async_data",r=t?.store||X({namespace:`async_${n}`,silent:!0});return r.get(n)==null&&r.set(n,{data:null,loading:!1,error:null,updatedAt:null}),Object.assign(r,{execute:async()=>{let s=r.get(n);r.set(n,{...s||{data:null,loading:!1,error:null,updatedAt:null},loading:!0,error:null}),"whenReady"in r&&!r.isReady&&await r.whenReady();try{let a=await e(),u=r.get(n);r.set(n,{...u||{data:null,loading:!1,error:null,updatedAt:null},data:a,loading:!1,updatedAt:Date.now()},{persist:t?.persist})}catch(a){let u=r.get(n);r.set(n,{...u||{data:null,loading:!1,error:null,updatedAt:null},error:a instanceof Error?a:new Error(String(a)),loading:!1})}}})};var _n=()=>({name:"gstate-immer",hooks:{onInstall:({store:e})=>{e._registerMethod("immer","setWithProduce",((t,n)=>e.set(t,n)))}}});var wn=e=>{let t=[],n=-1,r=!1,o=e?.limit||50;return{name:"gstate-undo-redo",hooks:{onInstall:({store:s})=>{t.push(s.list()),n=0,s._registerMethod("undoRedo","undo",()=>{if(n>0){r=!0,n--;let a=t[n];return a?(Object.entries(a).forEach(([u,p])=>{s._setSilently(u,p)}),r=!1,!0):!1}return!1}),s._registerMethod("undoRedo","redo",()=>{if(n<t.length-1){r=!0,n++;let a=t[n];return a?(Object.entries(a).forEach(([u,p])=>{s._setSilently(u,p)}),r=!1,!0):!1}return!1}),s._registerMethod("undoRedo","canUndo",()=>n>0),s._registerMethod("undoRedo","canRedo",()=>n<t.length-1)},onSet:({store:s})=>{r||(n<t.length-1&&(t=t.slice(0,n+1)),t.push(s.list()),t.length>o?t.shift():n++)}}}};var bn=e=>({name:"gstate-schema",hooks:{onSet:({key:t,value:n})=>{if(!t)return;let r=e[t];if(r){let o=r(n);if(o!==!0)throw new Error(`[Schema Error] Validation failed for key "${t}": ${o===!1?"Invalid type":o}`)}}}});var Pn=e=>{let r=globalThis.__REDUX_DEVTOOLS_EXTENSION__;if(!r?.connect)return{name:"gstate-devtools-noop",hooks:{}};let o=null;return{name:"gstate-devtools",hooks:{onInstall:({store:s})=>{o=r.connect({name:e?.name||"Magnetar Store"}),o.init(s.list())},onSet:({key:s,store:a})=>{!s||!o||o.send(`SET_${s.toUpperCase()}`,a.list())},onRemove:({key:s,store:a})=>{!s||!o||o.send(`REMOVE_${s.toUpperCase()}`,a.list())}}}};var En=()=>{let e=new Map;return{name:"gstate-snapshot",hooks:{onInstall:({store:t})=>{t._registerMethod("snapshot","takeSnapshot",(n=>{e.set(n,t.list())})),t._registerMethod("snapshot","restoreSnapshot",(n=>{let r=e.get(n);return r?(t.transaction(()=>{Object.entries(r).forEach(([o,s])=>{t.set(o,s)})}),!0):!1})),t._registerMethod("snapshot","listSnapshots",(()=>Array.from(e.keys()))),t._registerMethod("snapshot","deleteSnapshot",(n=>e.delete(n))),t._registerMethod("snapshot","clearSnapshots",(()=>e.clear()))}}}};var kn=e=>({name:"gstate-guard",hooks:{onBeforeSet:({key:t,value:n,store:r})=>{if(!t)return;let o=e[t];if(o){let s=o(n)}}}});var vn=e=>({name:"gstate-analytics",hooks:{onSet:({key:t,value:n})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:n,action:"SET"})},onRemove:({key:t})=>{t&&(!e.keys||e.keys.includes(t))&&e.provider({key:t,value:null,action:"REMOVE"})}}});var xn=e=>{let t=new BroadcastChannel(e?.channelName||"gstate_sync"),n=!1;return{name:"gstate-sync",hooks:{onInstall:({store:r})=>{t.onmessage=o=>{let{key:s,value:a,action:u}=o.data;s&&(n=!0,u==="REMOVE"?r.remove(s):r.set(s,a),n=!1)}},onSet:({key:r,value:o})=>{!r||n||t.postMessage({key:r,value:o,action:"SET"})},onRemove:({key:r})=>{!r||n||t.postMessage({key:r,action:"REMOVE"})},onDestroy:()=>{t.close()}}}};var Cn=()=>({name:"gstate-debug-noop",hooks:{}});var Rn=(e={})=>{let t=e.dbName||"rgs-db",n=e.storeName||"states",r=e.version||1,o=null,s=()=>new Promise((d,h)=>{if(o)return d(o);let m=indexedDB.open(t,r);m.onerror=()=>h(m.error),m.onsuccess=()=>{o=m.result,d(o)},m.onupgradeneeded=_=>{let l=_.target.result;l.objectStoreNames.contains(n)||l.createObjectStore(n)}}),a=async(d,h)=>{let m=await s();return new Promise((_,l)=>{let b=m.transaction(n,"readwrite").objectStore(n).put(h,d);b.onsuccess=()=>_(),b.onerror=()=>l(b.error)})},u=async d=>{let h=await s();return new Promise((m,_)=>{let y=h.transaction(n,"readonly").objectStore(n).get(d);y.onsuccess=()=>m(y.result),y.onerror=()=>_(y.error)})},p=async d=>{let h=await s();return new Promise((m,_)=>{let y=h.transaction(n,"readwrite").objectStore(n).delete(d);y.onsuccess=()=>m(),y.onerror=()=>_(y.error)})};return{name:"indexedDB",hooks:{onInstall:({store:d})=>{d._registerMethod("indexedDB","clear",async()=>{(await s()).transaction(n,"readwrite").objectStore(n).clear()})},onInit:async({store:d})=>{let l=(await s()).transaction(n,"readonly").objectStore(n).getAllKeys();l.onsuccess=async()=>{let S=l.result,y=d.namespace+"_";for(let b of S)if(b.startsWith(y)){let B=await u(b);if(B){let I=b.substring(y.length);d._setSilently(I,B.d)}}}},onSet:async({key:d,value:h,store:m})=>{if(!d)return;let _=m.namespace+"_",l={d:h,t:Date.now(),v:m._getVersion?.(d)||1};await a(`${_}${d}`,l)},onRemove:async({key:d,store:h})=>{if(!d)return;let m=h.namespace+"_";await p(`${m}${d}`)}}}};var In=e=>{let{adapter:t,autoSyncInterval:n}=e,r=new Map,o={lastSyncTimestamp:null,totalKeysSynced:0,totalBytesSynced:0,syncCount:0,lastDuration:0,errors:0},s=null;return{name:"cloudSync",hooks:{onInstall:({store:a})=>{a._registerMethod("cloudSync","sync",async()=>{let u=performance.now(),p={},d=0;try{let h=a.list(),m=Object.keys(h);for(let l of m){let S=a._getVersion?.(l)||0,y=r.get(l)||0;if(S>y){let b=h[l];p[l]=b,d+=JSON.stringify(b).length,r.set(l,S)}}if(Object.keys(p).length===0)return{status:"no-change",stats:o};if(await t.save(p))return o.lastSyncTimestamp=Date.now(),o.totalKeysSynced+=Object.keys(p).length,o.totalBytesSynced+=d,o.syncCount++,o.lastDuration=performance.now()-u,e.onSync&&e.onSync(o),{status:"success",stats:o};throw new Error(`Adapter ${t.name} failed to save.`)}catch(h){return o.errors++,console.error(`[gState] Cloud Sync Failed (${t.name}):`,h),{status:"error",error:String(h),stats:o}}}),a._registerMethod("cloudSync","getStats",()=>o),n&&n>0&&(s=setInterval(()=>{let p=a.plugins.cloudSync;p&&p.sync()},n))},onDestroy:()=>{s&&clearInterval(s)}}}},An=(e,t)=>({name:"MongoDB-Atlas",save:async n=>(await fetch(`${e}/action/updateOne`,{method:"POST",headers:{"Content-Type":"application/json","api-key":t},body:JSON.stringify({dataSource:"Cluster0",database:"rgs_cloud",collection:"user_states",filter:{id:"global_state"},update:{$set:{data:n,updatedAt:Date.now()}},upsert:!0})})).ok}),Mn=(e,t)=>({name:"Firebase-Firestore",save:async n=>{try{return((...s)=>{})("[Mock] Firestore Syncing:",n),!0}catch{return!1}}}),Dn=(e,t)=>({name:"SQL-REST-API",save:async n=>(await fetch(e,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(n)})).ok});var ir=e=>({name:"gstate-logger",hooks:{onSet:({key:t,value:n,version:r})=>{let o=new Date().toLocaleTimeString(),s=`[gState] SET: ${t} (v${r}) @ ${o}`;e?.collapsed?console.groupCollapsed(s):console.group(s),console.info("%c Value:","color: #4CAF50; font-weight: bold;",n),console.groupEnd()},onRemove:({key:t})=>{console.warn(`[gState] REMOVED: ${t}`)},onTransaction:({key:t})=>{t==="START"?console.group("\u2500\u2500 TRANSACTION START \u2500\u2500"):console.groupEnd()}}});var br=(e,t)=>{let r=X(typeof t=="string"?{namespace:t}:t);e&&Object.entries(e).forEach(([s,a])=>{r.get(s)===null&&r._setSilently(s,a)});let o=s=>ue(s,r);return typeof window<"u"&&(window.gState=r,window.rgs=r),Object.assign(o,r)};var Pr=(e,t)=>z()?.addAccessRule(e,t),Er=(e,t,n)=>z()?.hasPermission(e,t,n)??!0,kr=(e,t,n)=>{let r=z();if(!r)throw new Error("[gState] recordConsent failed: No store found. call initState() first.");return r.recordConsent(e,t,n)},vr=(e,t)=>z()?.hasConsent(e,t)??!1,xr=e=>z()?.getConsents(e)??[],Cr=(e,t)=>z()?.revokeConsent(e,t),Rr=e=>{let t=z();if(!t)throw new Error("[gState] exportUserData failed: No store found.");return t.exportUserData(e)},Ir=e=>{let t=z();if(!t)throw new Error("[gState] deleteUserData failed: No store found.");return t.deleteUserData(e)},Ar=()=>{},Mr=()=>{};export{Pr as addAccessRule,vn as analyticsPlugin,Ar as clearAccessRules,Mr as clearAllConsents,In as cloudSyncPlugin,mn as createAsyncStore,Mn as createFirestoreAdapter,An as createMongoAdapter,Dn as createSqlRestAdapter,X as createStore,Cn as debugPlugin,Ir as deleteUserData,Sn as destroyState,Pn as devToolsPlugin,cn as exportKey,Rr as exportUserData,an as generateEncryptionKey,xr as getConsents,z as getStore,br as gstate,kn as guardPlugin,vr as hasConsent,Er as hasPermission,_n as immerPlugin,un as importKey,Rn as indexedDBPlugin,yn as initState,vt as isCryptoAvailable,ae as logAudit,ir as loggerPlugin,kr as recordConsent,Cr as revokeConsent,ie as sanitizeValue,bn as schemaPlugin,ln as setAuditLogger,En as snapshotPlugin,xn as syncPlugin,wn as undoRedoPlugin,ue as useGState,hn as useIsStoreReady,ue as useSimpleState,ue as useStore,Qe as validateKey};
|
package/package.json
CHANGED
|
@@ -1,77 +1,81 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@biglogic/rgs",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "Argis (RGS) - React Globo State: A react state everywhere made easy",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"keywords": [
|
|
7
|
-
"rgs",
|
|
8
|
-
"gstate",
|
|
9
|
-
"state-management",
|
|
10
|
-
"react",
|
|
11
|
-
"enterprise",
|
|
12
|
-
"hooks",
|
|
13
|
-
"global-state",
|
|
14
|
-
"immer",
|
|
15
|
-
"biglogic",
|
|
16
|
-
"persistence",
|
|
17
|
-
"react-globo-state",
|
|
18
|
-
"argis"
|
|
19
|
-
],
|
|
20
|
-
"homepage": "https://github.com/BigLogic-ca/rgs",
|
|
21
|
-
"bugs": {
|
|
22
|
-
"url": "https://github.com/BigLogic-ca/rgs/issues"
|
|
23
|
-
},
|
|
24
|
-
"license": "MIT",
|
|
25
|
-
"author": "Dario Passariello <dariopassariello@gmail.com>",
|
|
26
|
-
"contributors": [
|
|
27
|
-
{
|
|
28
|
-
"name": "Dario Passariello",
|
|
29
|
-
"email": "dariopassariello@gmail.com",
|
|
30
|
-
"url": "https://dario.passariello.ca/"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"name": "Valeria Cala Scaglitta",
|
|
34
|
-
"email": "valeriacalascaglitta@gmail.com"
|
|
35
|
-
}
|
|
36
|
-
],
|
|
37
|
-
"main": "./index.js",
|
|
38
|
-
"types": "./index.d.ts",
|
|
39
|
-
"exports": {
|
|
40
|
-
".": "./index.js"
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"build": "tsc --emitDeclarationOnly --outDir dist && node ./esbuild.config.mjs
|
|
44
|
-
"build:
|
|
45
|
-
"build:
|
|
46
|
-
"dev": "npm run build:watch",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"@types/
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@biglogic/rgs",
|
|
3
|
+
"version": "3.5.0",
|
|
4
|
+
"description": "Argis (RGS) - React Globo State: A react state everywhere made easy",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"rgs",
|
|
8
|
+
"gstate",
|
|
9
|
+
"state-management",
|
|
10
|
+
"react",
|
|
11
|
+
"enterprise",
|
|
12
|
+
"hooks",
|
|
13
|
+
"global-state",
|
|
14
|
+
"immer",
|
|
15
|
+
"biglogic",
|
|
16
|
+
"persistence",
|
|
17
|
+
"react-globo-state",
|
|
18
|
+
"argis"
|
|
19
|
+
],
|
|
20
|
+
"homepage": "https://github.com/BigLogic-ca/rgs",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/BigLogic-ca/rgs/issues"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"author": "Dario Passariello <dariopassariello@gmail.com>",
|
|
26
|
+
"contributors": [
|
|
27
|
+
{
|
|
28
|
+
"name": "Dario Passariello",
|
|
29
|
+
"email": "dariopassariello@gmail.com",
|
|
30
|
+
"url": "https://dario.passariello.ca/"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "Valeria Cala Scaglitta",
|
|
34
|
+
"email": "valeriacalascaglitta@gmail.com"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"main": "./index.js",
|
|
38
|
+
"types": "./index.d.ts",
|
|
39
|
+
"exports": {
|
|
40
|
+
".": "./index.js"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "rm -rf dist && tsc --emitDeclarationOnly --outDir dist && node ./esbuild.config.mjs",
|
|
44
|
+
"build:watch": "node ./esbuild.config.mjs --watch",
|
|
45
|
+
"build:extension": "cd vscode-extension && vsce package -o ../dist/rgs-extension.vsix",
|
|
46
|
+
"dev": "npm run build:watch",
|
|
47
|
+
"lint": "cd tests && npm run lint",
|
|
48
|
+
"tsc": "cd tests && tsc --noEmit",
|
|
49
|
+
"npm:pack": "npm run build && cd dist && npm pack",
|
|
50
|
+
"npm:publish": "npm run build && npm run build:extension && cd dist && npm publish --access=public"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"immer": "^11.1.4"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"react": ">=16.8.0",
|
|
57
|
+
"react-dom": ">=16.8.0"
|
|
58
|
+
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"react": {
|
|
61
|
+
"optional": false
|
|
62
|
+
},
|
|
63
|
+
"react-dom": {
|
|
64
|
+
"optional": false
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/jest": "30.0.0",
|
|
69
|
+
"@types/node": "^25.3.0",
|
|
70
|
+
"@types/react": "^19.2.14",
|
|
71
|
+
"@types/react-dom": "^19.2.3",
|
|
72
|
+
"dphelper": "^2.6.4",
|
|
73
|
+
"esbuild": "^0.27.3",
|
|
74
|
+
"esbuild-plugin-copy": "^2.1.1",
|
|
75
|
+
"react": "^19.2.4",
|
|
76
|
+
"react-dom": "^19.2.4",
|
|
77
|
+
"ts-jest": "29.4.6",
|
|
78
|
+
"tslib": "^2.8.1",
|
|
79
|
+
"typescript": "^5.9.3"
|
|
80
|
+
}
|
|
81
|
+
}
|
package/rgs-extension.vsix
CHANGED
|
Binary file
|