react-global-state-hooks 16.0.0 → 16.0.1-beta

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/GlobalStore.cjs CHANGED
@@ -1,240 +1,5 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __defProps = Object.defineProperties;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
- var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
- var __getProtoOf = Object.getPrototypeOf;
10
- var __hasOwnProp = Object.prototype.hasOwnProperty;
11
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
- var __spreadValues = (a, b) => {
14
- for (var prop in b || (b = {}))
15
- if (__hasOwnProp.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- if (__getOwnPropSymbols)
18
- for (var prop of __getOwnPropSymbols(b)) {
19
- if (__propIsEnum.call(b, prop))
20
- __defNormalProp(a, prop, b[prop]);
21
- }
22
- return a;
23
- };
24
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
- var __export = (target, all) => {
26
- for (var name in all)
27
- __defProp(target, name, { get: all[name], enumerable: true });
28
- };
29
- var __copyProps = (to, from, except, desc) => {
30
- if (from && typeof from === "object" || typeof from === "function") {
31
- for (let key of __getOwnPropNames(from))
32
- if (!__hasOwnProp.call(to, key) && key !== except)
33
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
34
- }
35
- return to;
36
- };
37
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
38
- // If the importer is in node compatibility mode or this is not an ESM
39
- // file that has been converted to a CommonJS file using a Babel-
40
- // compatible transform (i.e. "__esModule" has not been set), then set
41
- // "default" to the CommonJS "module.exports" for node compatibility.
42
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
43
- mod
44
- ));
45
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";var F=Object.create;var g=Object.defineProperty,V=Object.defineProperties,w=Object.getOwnPropertyDescriptor,W=Object.getOwnPropertyDescriptors,B=Object.getOwnPropertyNames,A=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty,L=Object.prototype.propertyIsEnumerable;var v=(o,a,t)=>a in o?g(o,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[a]=t,u=(o,a)=>{for(var t in a||(a={}))C.call(a,t)&&v(o,t,a[t]);if(A)for(var t of A(a))L.call(a,t)&&v(o,t,a[t]);return o},k=(o,a)=>V(o,W(a));var R=(o,a)=>{for(var t in a)g(o,t,{get:a[t],enumerable:!0})},E=(o,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of B(a))!C.call(o,r)&&r!==t&&g(o,r,{get:()=>a[r],enumerable:!(e=w(a,r))||e.enumerable});return o};var l=(o,a,t)=>(t=o!=null?F(G(o)):{},E(a||!o||!o.__esModule?g(t,"default",{value:o,enumerable:!0}):t,o)),$=o=>E(g({},"__esModule",{value:!0}),o);var N={};R(N,{GlobalStore:()=>h,default:()=>z});module.exports=$(N);var M=l(require("react-hooks-global-states/GlobalStore")),c=l(require("./tryCatch.cjs")),T=l(require("json-storage-formatter/formatFromStore")),P=l(require("json-storage-formatter/formatToStore")),f=l(require("json-storage-formatter/isNil")),x=l(require("json-storage-formatter/isPrimitive"));var I=-1,h=class o extends M.default{constructor(t,e={metadata:{}}){var i;super(t,e);this.localStorage=null;this.onInit=()=>{let t=this.localStorage;if(!t||!this.isPersistStorageAvailable())return;let e=t.versioning,{result:r,error:i}=(0,c.default)(()=>{var p,y,b;if((p=t.adapter)!=null&&p.getItem)return{s:(y=t.adapter)==null?void 0:y.getItem(t.key),v:(b=e==null?void 0:e.version)!=null?b:I};let n=this.getStorageItem();return n&&t.selector&&!(0,x.default)(n==null?void 0:n.s)?k(u({},n),{s:u(u({},this.getState()),n.s)}):n});if(i){this.handleStorageError(i),this.updateStateWithValidation(this.getState());return}if(!r){this.updateStateWithValidation(this.getState());return}let s=r.v===(e==null?void 0:e.version),S=e==null?void 0:e.migrator;if(s||!S||t.adapter){this.updateStateWithValidation(r.s);return}let{result:d,error:m}=(0,c.default)(()=>S({legacy:r.s,initial:this.getState()},this.storeTools));if(!m){this.updateStateWithValidation(d);return}this.handleStorageError(m),this.updateStateWithValidation(this.getState())};this.onStateChanged=({state:t})=>{let e=this.localStorage;if(!e||!this.isPersistStorageAvailable())return;let{error:r}=(0,c.default)(()=>{var s;let i=(s=e.adapter)==null?void 0:s.setItem;if(i)return i(e.key,t);this.setStorageItem(t)});r&&this.handleStorageError(r)};this.localStorage=(i=e.localStorage)!=null?i:null,this.constructor===o&&this.initialize()}isPersistStorageAvailable(){var t;return!!((t=this.localStorage)!=null&&t.key&&(globalThis!=null&&globalThis.localStorage))}trySetStorageItem(t){let e=this.localStorage;if(!e)return;let{error:r}=(0,c.default)(()=>{var s;let i=(s=e.adapter)==null?void 0:s.setItem;if(!i)return this.setStorageItem(t);i(e.key,t)});r&&this.handleStorageError(r)}updateStateWithValidation(t){let e=this.localStorage;if(!e)return;let{result:r,error:i}=(0,c.default)(()=>{var s;return(s=e.validator)==null?void 0:s.call(e,{restored:t,initial:this.getState()},this.storeTools)});if(i){this.handleStorageError(i),this.trySetStorageItem(this.getState());return}if(r===void 0){if(t===void 0){this.trySetStorageItem(this.getState());return}this.setState(t),this.trySetStorageItem(t);return}this.setState(r),this.trySetStorageItem(r)}getStorageItem(){let t=globalThis.localStorage.getItem(this.localStorage.key),e=(0,f.default)(t)?null:(0,T.default)(t);return j(this.localStorage.key,e),e}setStorageItem(t){var i,s,S,d;let e={s:(i=this.localStorage)!=null&&i.selector?this.localStorage.selector(t):t,v:(d=(S=(s=this.localStorage)==null?void 0:s.versioning)==null?void 0:S.version)!=null?d:I},r=(0,P.default)(e);globalThis.localStorage.setItem(this.localStorage.key,r)}reset(...t){this.isPersistStorageAvailable()&&t.length===0&&globalThis.localStorage.removeItem(this.localStorage.key),super.reset(...t)}handleStorageError(t){var e,r;if((e=this.localStorage)!=null&&e.onError)return this.localStorage.onError(t,this.storeTools);globalThis.console.error([`[react-global-state-hooks]
2
+ `," localStorage sync error:","[hook]:",` ${this._name}`,"[Localstorage Key]:",` ${(r=this.localStorage)==null?void 0:r.key}`,"[Error]:",` ${t!=null?t:"undefined"}
46
3
 
47
- // src/GlobalStore.ts
48
- var GlobalStore_exports = {};
49
- __export(GlobalStore_exports, {
50
- GlobalStore: () => GlobalStore,
51
- default: () => GlobalStore_default
52
- });
53
- module.exports = __toCommonJS(GlobalStore_exports);
54
- var import_GlobalStore = __toESM(require("react-hooks-global-states/GlobalStore"));
55
- var import_tryCatch = __toESM(require("./tryCatch.cjs"));
56
- var import_formatFromStore = __toESM(require("json-storage-formatter/formatFromStore"));
57
- var import_formatToStore = __toESM(require("json-storage-formatter/formatToStore"));
58
- var import_isNil = __toESM(require("json-storage-formatter/isNil"));
59
- var import_isPrimitive = __toESM(require("json-storage-formatter/isPrimitive"));
60
- var defaultStorageVersion = -1;
61
- var GlobalStore = class _GlobalStore extends import_GlobalStore.default {
62
- constructor(state, args = { metadata: {} }) {
63
- var _a;
64
- super(state, args);
65
- this.localStorage = null;
66
- // we are overriding the onInit to add local storage restoration logic
67
- this.onInit = () => {
68
- const storageConfig = this.localStorage;
69
- if (!storageConfig || !this.isPersistStorageAvailable()) return;
70
- const versioning = storageConfig.versioning;
71
- const { result: restoredEnvelope, error: initializationError } = (0, import_tryCatch.default)(
72
- () => {
73
- var _a, _b, _c;
74
- if ((_a = storageConfig.adapter) == null ? void 0 : _a.getItem) {
75
- return {
76
- s: (_b = storageConfig.adapter) == null ? void 0 : _b.getItem(storageConfig.key),
77
- v: (_c = versioning == null ? void 0 : versioning.version) != null ? _c : defaultStorageVersion
78
- };
79
- }
80
- const envelope = this.getStorageItem();
81
- const shouldMergeStates = envelope && storageConfig.selector && !(0, import_isPrimitive.default)(envelope == null ? void 0 : envelope.s);
82
- if (!shouldMergeStates) return envelope;
83
- return __spreadProps(__spreadValues({}, envelope), {
84
- s: __spreadValues(__spreadValues({}, this.getState()), envelope.s)
85
- });
86
- }
87
- );
88
- if (initializationError) {
89
- this.handleStorageError(initializationError);
90
- this.updateStateWithValidation(this.getState());
91
- return;
92
- }
93
- if (!restoredEnvelope) {
94
- this.updateStateWithValidation(this.getState());
95
- return;
96
- }
97
- const isSameVersion = restoredEnvelope.v === (versioning == null ? void 0 : versioning.version);
98
- const migratorFn = versioning == null ? void 0 : versioning.migrator;
99
- if (isSameVersion || !migratorFn || storageConfig.adapter) {
100
- this.updateStateWithValidation(restoredEnvelope.s);
101
- return;
102
- }
103
- const { result: migrated, error: migrateError } = (0, import_tryCatch.default)(() => {
104
- return migratorFn(
105
- {
106
- legacy: restoredEnvelope.s,
107
- initial: this.getState()
108
- },
109
- this.storeTools
110
- );
111
- });
112
- if (!migrateError) {
113
- this.updateStateWithValidation(migrated);
114
- return;
115
- }
116
- this.handleStorageError(migrateError);
117
- this.updateStateWithValidation(this.getState());
118
- };
119
- // we are overriding the onStateChanged to add local storage sync logic
120
- this.onStateChanged = ({ state }) => {
121
- const storageConfig = this.localStorage;
122
- if (!storageConfig || !this.isPersistStorageAvailable()) return;
123
- const { error } = (0, import_tryCatch.default)(() => {
124
- var _a;
125
- const setFn = (_a = storageConfig.adapter) == null ? void 0 : _a.setItem;
126
- if (setFn) {
127
- return setFn(storageConfig.key, state);
128
- }
129
- this.setStorageItem(state);
130
- });
131
- if (!error) return;
132
- this.handleStorageError(error);
133
- };
134
- this.localStorage = (_a = args.localStorage) != null ? _a : null;
135
- const isExtensionClass = this.constructor !== _GlobalStore;
136
- if (isExtensionClass) return;
137
- this.initialize();
138
- }
139
- isPersistStorageAvailable() {
140
- var _a;
141
- return Boolean(((_a = this.localStorage) == null ? void 0 : _a.key) && (globalThis == null ? void 0 : globalThis.localStorage));
142
- }
143
- trySetStorageItem(state) {
144
- const storageConfig = this.localStorage;
145
- if (!storageConfig) return;
146
- const { error } = (0, import_tryCatch.default)(() => {
147
- var _a;
148
- const setFn = (_a = storageConfig.adapter) == null ? void 0 : _a.setItem;
149
- if (!setFn) return this.setStorageItem(state);
150
- setFn(storageConfig.key, state);
151
- });
152
- if (!error) return;
153
- this.handleStorageError(error);
154
- }
155
- // helper to validate and update the state
156
- updateStateWithValidation(state) {
157
- const storageConfig = this.localStorage;
158
- if (!storageConfig) return;
159
- const { result: sanitizedState, error: validationError } = (0, import_tryCatch.default)(() => {
160
- var _a;
161
- return (_a = storageConfig.validator) == null ? void 0 : _a.call(
162
- storageConfig,
163
- {
164
- restored: state,
165
- initial: this.getState()
166
- },
167
- this.storeTools
168
- );
169
- });
170
- if (validationError) {
171
- this.handleStorageError(validationError);
172
- this.trySetStorageItem(this.getState());
173
- return;
174
- }
175
- if (sanitizedState === void 0) {
176
- if (state === void 0) {
177
- this.trySetStorageItem(this.getState());
178
- return;
179
- }
180
- this.setState(state);
181
- this.trySetStorageItem(state);
182
- return;
183
- }
184
- this.setState(sanitizedState);
185
- this.trySetStorageItem(sanitizedState);
186
- }
187
- // retrieves a versioned item from the local storage
188
- getStorageItem() {
189
- const json = globalThis.localStorage.getItem(this.localStorage.key);
190
- const restoredEnvelope = (0, import_isNil.default)(json) ? null : (0, import_formatFromStore.default)(json);
191
- assertEnvelopeFormat(this.localStorage.key, restoredEnvelope);
192
- return restoredEnvelope;
193
- }
194
- // add a versioned item to the local storage
195
- setStorageItem(state) {
196
- var _a, _b, _c, _d;
197
- const envelope = {
198
- s: ((_a = this.localStorage) == null ? void 0 : _a.selector) ? this.localStorage.selector(state) : state,
199
- v: (_d = (_c = (_b = this.localStorage) == null ? void 0 : _b.versioning) == null ? void 0 : _c.version) != null ? _d : defaultStorageVersion
200
- };
201
- const formatted = (0, import_formatToStore.default)(envelope);
202
- globalThis.localStorage.setItem(this.localStorage.key, formatted);
203
- }
204
- reset(...args) {
205
- if (this.isPersistStorageAvailable() && args.length === 0) {
206
- globalThis.localStorage.removeItem(this.localStorage.key);
207
- }
208
- super.reset(...args);
209
- }
210
- handleStorageError(error) {
211
- var _a, _b;
212
- if ((_a = this.localStorage) == null ? void 0 : _a.onError) {
213
- return this.localStorage.onError(error, this.storeTools);
214
- }
215
- globalThis.console.error(
216
- [
217
- "[react-global-state-hooks]\n",
218
- " localStorage sync error:",
219
- `[hook]:`,
220
- ` ${this._name}`,
221
- `[Localstorage Key]:`,
222
- ` ${(_b = this.localStorage) == null ? void 0 : _b.key}`,
223
- `[Error]:`,
224
- ` ${error != null ? error : "undefined"}
225
-
226
- `,
227
- "Stacktrace:"
228
- ].join("\n"),
229
- error.stack
230
- );
231
- }
232
- };
233
- function assertEnvelopeFormat(key, value) {
234
- if ((0, import_isNil.default)(value)) return;
235
- if (typeof value === "object" && "s" in value && "v" in value) return;
236
- throw new Error(
237
- `[react-native-global-state-hooks] The value of the key "${key}" is not a valid storage envelope.`
238
- );
239
- }
240
- var GlobalStore_default = GlobalStore;
4
+ `,"Stacktrace:"].join(`
5
+ `),t.stack)}};function j(o,a){if(!(0,f.default)(a)&&!(typeof a=="object"&&"s"in a&&"v"in a))throw new Error(`[react-native-global-state-hooks] The value of the key "${o}" is not a valid storage envelope.`)}var z=h;
package/GlobalStore.js CHANGED
@@ -1,240 +1,5 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __defProps = Object.defineProperties;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
- var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
- var __getProtoOf = Object.getPrototypeOf;
10
- var __hasOwnProp = Object.prototype.hasOwnProperty;
11
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
- var __spreadValues = (a, b) => {
14
- for (var prop in b || (b = {}))
15
- if (__hasOwnProp.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- if (__getOwnPropSymbols)
18
- for (var prop of __getOwnPropSymbols(b)) {
19
- if (__propIsEnum.call(b, prop))
20
- __defNormalProp(a, prop, b[prop]);
21
- }
22
- return a;
23
- };
24
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
- var __export = (target, all) => {
26
- for (var name in all)
27
- __defProp(target, name, { get: all[name], enumerable: true });
28
- };
29
- var __copyProps = (to, from, except, desc) => {
30
- if (from && typeof from === "object" || typeof from === "function") {
31
- for (let key of __getOwnPropNames(from))
32
- if (!__hasOwnProp.call(to, key) && key !== except)
33
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
34
- }
35
- return to;
36
- };
37
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
38
- // If the importer is in node compatibility mode or this is not an ESM
39
- // file that has been converted to a CommonJS file using a Babel-
40
- // compatible transform (i.e. "__esModule" has not been set), then set
41
- // "default" to the CommonJS "module.exports" for node compatibility.
42
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
43
- mod
44
- ));
45
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";var F=Object.create;var g=Object.defineProperty,V=Object.defineProperties,w=Object.getOwnPropertyDescriptor,W=Object.getOwnPropertyDescriptors,B=Object.getOwnPropertyNames,A=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty,L=Object.prototype.propertyIsEnumerable;var v=(o,a,t)=>a in o?g(o,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[a]=t,u=(o,a)=>{for(var t in a||(a={}))C.call(a,t)&&v(o,t,a[t]);if(A)for(var t of A(a))L.call(a,t)&&v(o,t,a[t]);return o},k=(o,a)=>V(o,W(a));var R=(o,a)=>{for(var t in a)g(o,t,{get:a[t],enumerable:!0})},E=(o,a,t,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of B(a))!C.call(o,r)&&r!==t&&g(o,r,{get:()=>a[r],enumerable:!(e=w(a,r))||e.enumerable});return o};var l=(o,a,t)=>(t=o!=null?F(G(o)):{},E(a||!o||!o.__esModule?g(t,"default",{value:o,enumerable:!0}):t,o)),$=o=>E(g({},"__esModule",{value:!0}),o);var N={};R(N,{GlobalStore:()=>h,default:()=>z});module.exports=$(N);var M=l(require("react-hooks-global-states/GlobalStore")),c=l(require("./tryCatch.js")),T=l(require("json-storage-formatter/formatFromStore")),P=l(require("json-storage-formatter/formatToStore")),f=l(require("json-storage-formatter/isNil")),x=l(require("json-storage-formatter/isPrimitive"));var I=-1,h=class o extends M.default{constructor(t,e={metadata:{}}){var i;super(t,e);this.localStorage=null;this.onInit=()=>{let t=this.localStorage;if(!t||!this.isPersistStorageAvailable())return;let e=t.versioning,{result:r,error:i}=(0,c.default)(()=>{var p,y,b;if((p=t.adapter)!=null&&p.getItem)return{s:(y=t.adapter)==null?void 0:y.getItem(t.key),v:(b=e==null?void 0:e.version)!=null?b:I};let n=this.getStorageItem();return n&&t.selector&&!(0,x.default)(n==null?void 0:n.s)?k(u({},n),{s:u(u({},this.getState()),n.s)}):n});if(i){this.handleStorageError(i),this.updateStateWithValidation(this.getState());return}if(!r){this.updateStateWithValidation(this.getState());return}let s=r.v===(e==null?void 0:e.version),S=e==null?void 0:e.migrator;if(s||!S||t.adapter){this.updateStateWithValidation(r.s);return}let{result:d,error:m}=(0,c.default)(()=>S({legacy:r.s,initial:this.getState()},this.storeTools));if(!m){this.updateStateWithValidation(d);return}this.handleStorageError(m),this.updateStateWithValidation(this.getState())};this.onStateChanged=({state:t})=>{let e=this.localStorage;if(!e||!this.isPersistStorageAvailable())return;let{error:r}=(0,c.default)(()=>{var s;let i=(s=e.adapter)==null?void 0:s.setItem;if(i)return i(e.key,t);this.setStorageItem(t)});r&&this.handleStorageError(r)};this.localStorage=(i=e.localStorage)!=null?i:null,this.constructor===o&&this.initialize()}isPersistStorageAvailable(){var t;return!!((t=this.localStorage)!=null&&t.key&&(globalThis!=null&&globalThis.localStorage))}trySetStorageItem(t){let e=this.localStorage;if(!e)return;let{error:r}=(0,c.default)(()=>{var s;let i=(s=e.adapter)==null?void 0:s.setItem;if(!i)return this.setStorageItem(t);i(e.key,t)});r&&this.handleStorageError(r)}updateStateWithValidation(t){let e=this.localStorage;if(!e)return;let{result:r,error:i}=(0,c.default)(()=>{var s;return(s=e.validator)==null?void 0:s.call(e,{restored:t,initial:this.getState()},this.storeTools)});if(i){this.handleStorageError(i),this.trySetStorageItem(this.getState());return}if(r===void 0){if(t===void 0){this.trySetStorageItem(this.getState());return}this.setState(t),this.trySetStorageItem(t);return}this.setState(r),this.trySetStorageItem(r)}getStorageItem(){let t=globalThis.localStorage.getItem(this.localStorage.key),e=(0,f.default)(t)?null:(0,T.default)(t);return j(this.localStorage.key,e),e}setStorageItem(t){var i,s,S,d;let e={s:(i=this.localStorage)!=null&&i.selector?this.localStorage.selector(t):t,v:(d=(S=(s=this.localStorage)==null?void 0:s.versioning)==null?void 0:S.version)!=null?d:I},r=(0,P.default)(e);globalThis.localStorage.setItem(this.localStorage.key,r)}reset(...t){this.isPersistStorageAvailable()&&t.length===0&&globalThis.localStorage.removeItem(this.localStorage.key),super.reset(...t)}handleStorageError(t){var e,r;if((e=this.localStorage)!=null&&e.onError)return this.localStorage.onError(t,this.storeTools);globalThis.console.error([`[react-global-state-hooks]
2
+ `," localStorage sync error:","[hook]:",` ${this._name}`,"[Localstorage Key]:",` ${(r=this.localStorage)==null?void 0:r.key}`,"[Error]:",` ${t!=null?t:"undefined"}
46
3
 
47
- // src/GlobalStore.ts
48
- var GlobalStore_exports = {};
49
- __export(GlobalStore_exports, {
50
- GlobalStore: () => GlobalStore,
51
- default: () => GlobalStore_default
52
- });
53
- module.exports = __toCommonJS(GlobalStore_exports);
54
- var import_GlobalStore = __toESM(require("react-hooks-global-states/GlobalStore"));
55
- var import_tryCatch = __toESM(require("./tryCatch.js"));
56
- var import_formatFromStore = __toESM(require("json-storage-formatter/formatFromStore"));
57
- var import_formatToStore = __toESM(require("json-storage-formatter/formatToStore"));
58
- var import_isNil = __toESM(require("json-storage-formatter/isNil"));
59
- var import_isPrimitive = __toESM(require("json-storage-formatter/isPrimitive"));
60
- var defaultStorageVersion = -1;
61
- var GlobalStore = class _GlobalStore extends import_GlobalStore.default {
62
- constructor(state, args = { metadata: {} }) {
63
- var _a;
64
- super(state, args);
65
- this.localStorage = null;
66
- // we are overriding the onInit to add local storage restoration logic
67
- this.onInit = () => {
68
- const storageConfig = this.localStorage;
69
- if (!storageConfig || !this.isPersistStorageAvailable()) return;
70
- const versioning = storageConfig.versioning;
71
- const { result: restoredEnvelope, error: initializationError } = (0, import_tryCatch.default)(
72
- () => {
73
- var _a, _b, _c;
74
- if ((_a = storageConfig.adapter) == null ? void 0 : _a.getItem) {
75
- return {
76
- s: (_b = storageConfig.adapter) == null ? void 0 : _b.getItem(storageConfig.key),
77
- v: (_c = versioning == null ? void 0 : versioning.version) != null ? _c : defaultStorageVersion
78
- };
79
- }
80
- const envelope = this.getStorageItem();
81
- const shouldMergeStates = envelope && storageConfig.selector && !(0, import_isPrimitive.default)(envelope == null ? void 0 : envelope.s);
82
- if (!shouldMergeStates) return envelope;
83
- return __spreadProps(__spreadValues({}, envelope), {
84
- s: __spreadValues(__spreadValues({}, this.getState()), envelope.s)
85
- });
86
- }
87
- );
88
- if (initializationError) {
89
- this.handleStorageError(initializationError);
90
- this.updateStateWithValidation(this.getState());
91
- return;
92
- }
93
- if (!restoredEnvelope) {
94
- this.updateStateWithValidation(this.getState());
95
- return;
96
- }
97
- const isSameVersion = restoredEnvelope.v === (versioning == null ? void 0 : versioning.version);
98
- const migratorFn = versioning == null ? void 0 : versioning.migrator;
99
- if (isSameVersion || !migratorFn || storageConfig.adapter) {
100
- this.updateStateWithValidation(restoredEnvelope.s);
101
- return;
102
- }
103
- const { result: migrated, error: migrateError } = (0, import_tryCatch.default)(() => {
104
- return migratorFn(
105
- {
106
- legacy: restoredEnvelope.s,
107
- initial: this.getState()
108
- },
109
- this.storeTools
110
- );
111
- });
112
- if (!migrateError) {
113
- this.updateStateWithValidation(migrated);
114
- return;
115
- }
116
- this.handleStorageError(migrateError);
117
- this.updateStateWithValidation(this.getState());
118
- };
119
- // we are overriding the onStateChanged to add local storage sync logic
120
- this.onStateChanged = ({ state }) => {
121
- const storageConfig = this.localStorage;
122
- if (!storageConfig || !this.isPersistStorageAvailable()) return;
123
- const { error } = (0, import_tryCatch.default)(() => {
124
- var _a;
125
- const setFn = (_a = storageConfig.adapter) == null ? void 0 : _a.setItem;
126
- if (setFn) {
127
- return setFn(storageConfig.key, state);
128
- }
129
- this.setStorageItem(state);
130
- });
131
- if (!error) return;
132
- this.handleStorageError(error);
133
- };
134
- this.localStorage = (_a = args.localStorage) != null ? _a : null;
135
- const isExtensionClass = this.constructor !== _GlobalStore;
136
- if (isExtensionClass) return;
137
- this.initialize();
138
- }
139
- isPersistStorageAvailable() {
140
- var _a;
141
- return Boolean(((_a = this.localStorage) == null ? void 0 : _a.key) && (globalThis == null ? void 0 : globalThis.localStorage));
142
- }
143
- trySetStorageItem(state) {
144
- const storageConfig = this.localStorage;
145
- if (!storageConfig) return;
146
- const { error } = (0, import_tryCatch.default)(() => {
147
- var _a;
148
- const setFn = (_a = storageConfig.adapter) == null ? void 0 : _a.setItem;
149
- if (!setFn) return this.setStorageItem(state);
150
- setFn(storageConfig.key, state);
151
- });
152
- if (!error) return;
153
- this.handleStorageError(error);
154
- }
155
- // helper to validate and update the state
156
- updateStateWithValidation(state) {
157
- const storageConfig = this.localStorage;
158
- if (!storageConfig) return;
159
- const { result: sanitizedState, error: validationError } = (0, import_tryCatch.default)(() => {
160
- var _a;
161
- return (_a = storageConfig.validator) == null ? void 0 : _a.call(
162
- storageConfig,
163
- {
164
- restored: state,
165
- initial: this.getState()
166
- },
167
- this.storeTools
168
- );
169
- });
170
- if (validationError) {
171
- this.handleStorageError(validationError);
172
- this.trySetStorageItem(this.getState());
173
- return;
174
- }
175
- if (sanitizedState === void 0) {
176
- if (state === void 0) {
177
- this.trySetStorageItem(this.getState());
178
- return;
179
- }
180
- this.setState(state);
181
- this.trySetStorageItem(state);
182
- return;
183
- }
184
- this.setState(sanitizedState);
185
- this.trySetStorageItem(sanitizedState);
186
- }
187
- // retrieves a versioned item from the local storage
188
- getStorageItem() {
189
- const json = globalThis.localStorage.getItem(this.localStorage.key);
190
- const restoredEnvelope = (0, import_isNil.default)(json) ? null : (0, import_formatFromStore.default)(json);
191
- assertEnvelopeFormat(this.localStorage.key, restoredEnvelope);
192
- return restoredEnvelope;
193
- }
194
- // add a versioned item to the local storage
195
- setStorageItem(state) {
196
- var _a, _b, _c, _d;
197
- const envelope = {
198
- s: ((_a = this.localStorage) == null ? void 0 : _a.selector) ? this.localStorage.selector(state) : state,
199
- v: (_d = (_c = (_b = this.localStorage) == null ? void 0 : _b.versioning) == null ? void 0 : _c.version) != null ? _d : defaultStorageVersion
200
- };
201
- const formatted = (0, import_formatToStore.default)(envelope);
202
- globalThis.localStorage.setItem(this.localStorage.key, formatted);
203
- }
204
- reset(...args) {
205
- if (this.isPersistStorageAvailable() && args.length === 0) {
206
- globalThis.localStorage.removeItem(this.localStorage.key);
207
- }
208
- super.reset(...args);
209
- }
210
- handleStorageError(error) {
211
- var _a, _b;
212
- if ((_a = this.localStorage) == null ? void 0 : _a.onError) {
213
- return this.localStorage.onError(error, this.storeTools);
214
- }
215
- globalThis.console.error(
216
- [
217
- "[react-global-state-hooks]\n",
218
- " localStorage sync error:",
219
- `[hook]:`,
220
- ` ${this._name}`,
221
- `[Localstorage Key]:`,
222
- ` ${(_b = this.localStorage) == null ? void 0 : _b.key}`,
223
- `[Error]:`,
224
- ` ${error != null ? error : "undefined"}
225
-
226
- `,
227
- "Stacktrace:"
228
- ].join("\n"),
229
- error.stack
230
- );
231
- }
232
- };
233
- function assertEnvelopeFormat(key, value) {
234
- if ((0, import_isNil.default)(value)) return;
235
- if (typeof value === "object" && "s" in value && "v" in value) return;
236
- throw new Error(
237
- `[react-native-global-state-hooks] The value of the key "${key}" is not a valid storage envelope.`
238
- );
239
- }
240
- var GlobalStore_default = GlobalStore;
4
+ `,"Stacktrace:"].join(`
5
+ `),t.stack)}};function j(o,a){if(!(0,f.default)(a)&&!(typeof a=="object"&&"s"in a&&"v"in a))throw new Error(`[react-native-global-state-hooks] The value of the key "${o}" is not a valid storage envelope.`)}var z=h;