memorio 4.6.7 → 4.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs ADDED
@@ -0,0 +1,2244 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __esm = (fn, res) => function __init() {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ };
9
+
10
+ // core/internal.ts
11
+ var state, internal, protect; exports.propertyName = void 0; exports.internal = void 0;
12
+ var init_internal = __esm({
13
+ "core/internal.ts"() {
14
+ state = {
15
+ debug: false,
16
+ tracking: false,
17
+ trackedPaths: /* @__PURE__ */ new Set(),
18
+ locked: false,
19
+ lastAccessedPath: "",
20
+ stateVersion: 0,
21
+ currentContext: null
22
+ };
23
+ internal = {
24
+ get debug() {
25
+ return state.debug;
26
+ },
27
+ set debug(value) {
28
+ state.debug = value;
29
+ },
30
+ get tracking() {
31
+ return state.tracking;
32
+ },
33
+ set tracking(value) {
34
+ state.tracking = value;
35
+ },
36
+ get trackedPaths() {
37
+ return state.trackedPaths;
38
+ },
39
+ clearTrackedPaths() {
40
+ state.trackedPaths.clear();
41
+ },
42
+ get locked() {
43
+ return state.locked;
44
+ },
45
+ set locked(value) {
46
+ state.locked = value;
47
+ },
48
+ get lastAccessedPath() {
49
+ return state.lastAccessedPath;
50
+ },
51
+ set lastAccessedPath(value) {
52
+ state.lastAccessedPath = value;
53
+ },
54
+ get stateVersion() {
55
+ return state.stateVersion;
56
+ },
57
+ bumpStateVersion() {
58
+ state.stateVersion = (state.stateVersion || 0) + 1;
59
+ return state.stateVersion;
60
+ },
61
+ get currentContext() {
62
+ return state.currentContext;
63
+ },
64
+ set currentContext(value) {
65
+ state.currentContext = value;
66
+ }
67
+ };
68
+ protect = [
69
+ "list",
70
+ "state",
71
+ "store",
72
+ "idb",
73
+ "observer",
74
+ "useObserver",
75
+ "remove",
76
+ "removeAll",
77
+ // Platform-related protected keys
78
+ "_platform",
79
+ "_capabilities",
80
+ "_sessionId"
81
+ ];
82
+ exports.propertyName = (container, object) => {
83
+ const target = object !== void 0 ? object : container;
84
+ return String(target).replace("() => ", "");
85
+ };
86
+ exports.internal = internal;
87
+ }
88
+ });
89
+
90
+ // functions/message/index.ts
91
+ exports.message = void 0; var message_default;
92
+ var init_message = __esm({
93
+ "functions/message/index.ts"() {
94
+ init_internal();
95
+ exports.message = (...args) => {
96
+ if (exports.internal.debug === true) {
97
+ console.debug(...args);
98
+ }
99
+ };
100
+ message_default = exports.message;
101
+ }
102
+ });
103
+
104
+ // core/platform.ts
105
+ function generateSessionId() {
106
+ const anyGlobal = globalThis;
107
+ if (typeof anyGlobal.crypto !== "undefined" && anyGlobal.crypto.randomUUID) {
108
+ return anyGlobal.crypto.randomUUID();
109
+ }
110
+ if (typeof anyGlobal.crypto !== "undefined" && anyGlobal.crypto.getRandomValues) {
111
+ const array = new Uint8Array(16);
112
+ anyGlobal.crypto.getRandomValues(array);
113
+ return Array.from(array, (b) => b.toString(16).padStart(2, "0")).join("");
114
+ }
115
+ return `session_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
116
+ }
117
+ function detectPlatform() {
118
+ const globalAny = globalThis;
119
+ if (globalAny.Deno && globalAny.Deno.version) {
120
+ return "deno";
121
+ }
122
+ if (typeof process !== "undefined" && process.versions && process.versions.node) {
123
+ return "node";
124
+ }
125
+ if (typeof globalThis !== "undefined" && typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
126
+ return "edge";
127
+ }
128
+ if (typeof window !== "undefined" && typeof document !== "undefined") {
129
+ return "browser";
130
+ }
131
+ return "unknown";
132
+ }
133
+ function isBrowser() {
134
+ const platform = detectPlatform();
135
+ return platform === "browser";
136
+ }
137
+ function isNode() {
138
+ const platform = detectPlatform();
139
+ return platform === "node";
140
+ }
141
+ function isDeno() {
142
+ const platform = detectPlatform();
143
+ return platform === "deno";
144
+ }
145
+ function isEdge() {
146
+ const platform = detectPlatform();
147
+ return platform === "edge";
148
+ }
149
+ function getSessionStorage() {
150
+ try {
151
+ if (typeof sessionStorage !== "undefined") {
152
+ const testKey = "__memorio_test__";
153
+ sessionStorage.setItem(testKey, "1");
154
+ sessionStorage.removeItem(testKey);
155
+ return sessionStorage;
156
+ }
157
+ } catch (_) {
158
+ }
159
+ return null;
160
+ }
161
+ function getLocalStorage() {
162
+ try {
163
+ if (typeof localStorage !== "undefined") {
164
+ const testKey = "__memorio_test__";
165
+ localStorage.setItem(testKey, "1");
166
+ localStorage.removeItem(testKey);
167
+ return localStorage;
168
+ }
169
+ } catch (_) {
170
+ }
171
+ return null;
172
+ }
173
+ function hasIndexedDB() {
174
+ if (typeof indexedDB !== "undefined") {
175
+ return true;
176
+ }
177
+ return false;
178
+ }
179
+ function hasDispatchEvent() {
180
+ return typeof globalThis.dispatchEvent === "function";
181
+ }
182
+ function getCapabilities() {
183
+ const platform = detectPlatform();
184
+ const isSecure = typeof globalThis.isSecureContext !== "undefined" ? globalThis.isSecureContext : platform === "browser";
185
+ return {
186
+ platform,
187
+ hasSessionStorage: getSessionStorage() !== null,
188
+ hasLocalStorage: getLocalStorage() !== null,
189
+ hasIndexedDB: hasIndexedDB(),
190
+ hasDispatchEvent: hasDispatchEvent(),
191
+ hasNavigator: typeof navigator !== "undefined",
192
+ hasProcess: typeof process !== "undefined",
193
+ isSecureContext: isSecure,
194
+ sessionId: generateSessionId()
195
+ };
196
+ }
197
+ function initializePlatform() {
198
+ const capabilities = getCapabilities();
199
+ const anyGlobal = globalThis;
200
+ if (!capabilities.hasDispatchEvent) {
201
+ anyGlobal.dispatchEvent = function(_event) {
202
+ return true;
203
+ };
204
+ if (typeof CustomEvent === "undefined") {
205
+ anyGlobal.CustomEvent = class CustomEvent {
206
+ type;
207
+ detail;
208
+ constructor(type, detail = {}) {
209
+ this.type = type;
210
+ this.detail = detail;
211
+ }
212
+ };
213
+ }
214
+ }
215
+ if (typeof anyGlobal.addEventListener !== "function") {
216
+ anyGlobal.addEventListener = function(type, listener) {
217
+ if (!_eventListenerStorage.has(type)) {
218
+ _eventListenerStorage.set(type, []);
219
+ }
220
+ _eventListenerStorage.get(type).push(listener);
221
+ };
222
+ anyGlobal.removeEventListener = function(type, listener) {
223
+ const listeners = _eventListenerStorage.get(type);
224
+ if (listeners) {
225
+ const index = listeners.indexOf(listener);
226
+ if (index > -1) {
227
+ listeners.splice(index, 1);
228
+ }
229
+ }
230
+ };
231
+ anyGlobal.dispatchEvent = function(event) {
232
+ const listeners = _eventListenerStorage.get(event.type);
233
+ if (listeners) {
234
+ listeners.forEach((listener) => {
235
+ try {
236
+ listener(event);
237
+ } catch (e) {
238
+ console.error("Event listener error:", e);
239
+ }
240
+ });
241
+ }
242
+ return true;
243
+ };
244
+ }
245
+ }
246
+ function createContext(name) {
247
+ const contextId = name || `context_${generateSessionId()}`;
248
+ setCurrentContext(contextId);
249
+ const contextStorage = {
250
+ state: {},
251
+ store: /* @__PURE__ */ new Map(),
252
+ session: /* @__PURE__ */ new Map(),
253
+ cache: /* @__PURE__ */ new Map()
254
+ };
255
+ _contexts.set(contextId, contextStorage);
256
+ return {
257
+ id: contextId,
258
+ state: contextStorage.state,
259
+ store: {
260
+ get: (key) => {
261
+ const data = contextStorage.store.get(key);
262
+ return data ? JSON.parse(data) : null;
263
+ },
264
+ set: (key, value) => {
265
+ contextStorage.store.set(key, JSON.stringify(value));
266
+ },
267
+ remove: (key) => contextStorage.store.delete(key),
268
+ removeAll: () => contextStorage.store.clear(),
269
+ clearAll: () => contextStorage.store.clear(),
270
+ size: () => contextStorage.store.size,
271
+ isPersistent: false
272
+ },
273
+ session: {
274
+ get: (key) => {
275
+ const data = contextStorage.session.get(key);
276
+ return data ? JSON.parse(data) : null;
277
+ },
278
+ set: (key, value) => {
279
+ contextStorage.session.set(key, JSON.stringify(value));
280
+ },
281
+ remove: (key) => contextStorage.session.delete(key),
282
+ removeAll: () => contextStorage.session.clear(),
283
+ clearAll: () => contextStorage.session.clear(),
284
+ size: () => contextStorage.session.size,
285
+ isPersistent: false
286
+ },
287
+ cache: {
288
+ get: (key) => contextStorage.cache.get(key),
289
+ set: (key, value) => contextStorage.cache.set(key, value),
290
+ remove: (key) => contextStorage.cache.delete(key),
291
+ removeAll: () => contextStorage.cache.clear(),
292
+ clear: () => contextStorage.cache.clear()
293
+ }
294
+ };
295
+ }
296
+ function listContexts() {
297
+ return Array.from(_contexts.keys());
298
+ }
299
+ function deleteContext(id) {
300
+ return _contexts.delete(id);
301
+ }
302
+ function setCurrentContext(id) {
303
+ exports.internal.currentContext = id;
304
+ }
305
+ var _eventListenerStorage, _contexts;
306
+ var init_platform = __esm({
307
+ "core/platform.ts"() {
308
+ init_internal();
309
+ _eventListenerStorage = /* @__PURE__ */ new Map();
310
+ _contexts = /* @__PURE__ */ new Map();
311
+ }
312
+ });
313
+
314
+ // functions/idb/tools/db.create.ts
315
+ var db_create_exports = {};
316
+ var init_db_create = __esm({
317
+ "functions/idb/tools/db.create.ts"() {
318
+ init_idb();
319
+ init_message();
320
+ exports.idb.db.create = (dbName, ver = 1) => {
321
+ return new Promise((resolve, reject) => {
322
+ if (!exports.idb.db.support()) {
323
+ return reject(new Error("IndexedDB not supported"));
324
+ }
325
+ const request = globalThis.indexedDB.open(dbName, ver);
326
+ request.onerror = () => {
327
+ message_default(`IndexedDB error: ${request.error?.message}`);
328
+ reject(request.error);
329
+ };
330
+ request.onsuccess = () => {
331
+ message_default(`Database ${dbName} connected successfully`);
332
+ resolve(request.result);
333
+ };
334
+ request.onupgradeneeded = () => {
335
+ message_default(`Database ${dbName} upgrade/creation initiated`);
336
+ };
337
+ });
338
+ };
339
+ }
340
+ });
341
+
342
+ // functions/idb/tools/db.list.ts
343
+ var db_list_exports = {};
344
+ var init_db_list = __esm({
345
+ "functions/idb/tools/db.list.ts"() {
346
+ init_idb();
347
+ exports.idb.db.list = async () => {
348
+ if (!("indexedDB" in globalThis) || !indexedDB.databases) return [];
349
+ try {
350
+ const result = await indexedDB.databases();
351
+ globalThis.idbases = result || [];
352
+ await exports.idb.db.size();
353
+ return globalThis.idbases;
354
+ } catch (err) {
355
+ console.error("Error listing databases:", err);
356
+ return [];
357
+ }
358
+ };
359
+ }
360
+ });
361
+
362
+ // functions/idb/tools/db.exist.ts
363
+ var db_exist_exports = {};
364
+ var init_db_exist = __esm({
365
+ "functions/idb/tools/db.exist.ts"() {
366
+ init_idb();
367
+ exports.idb.db.exist = (storeName) => {
368
+ return idbases?.some((db) => db.name === storeName);
369
+ };
370
+ }
371
+ });
372
+
373
+ // functions/idb/tools/db.quota.ts
374
+ var db_quota_exports = {};
375
+ var init_db_quota = __esm({
376
+ "functions/idb/tools/db.quota.ts"() {
377
+ init_idb();
378
+ exports.idb.db.quota = () => {
379
+ return navigator.storage.estimate();
380
+ };
381
+ }
382
+ });
383
+
384
+ // functions/idb/tools/db.delete.ts
385
+ var db_delete_exports = {};
386
+ var init_db_delete = __esm({
387
+ "functions/idb/tools/db.delete.ts"() {
388
+ init_idb();
389
+ init_message();
390
+ exports.idb.db.delete = (storeName) => {
391
+ return new Promise((resolve, reject) => {
392
+ message_default(`Removing database ${storeName}...`);
393
+ const performDelete = () => {
394
+ const request = indexedDB.deleteDatabase(storeName);
395
+ request.onsuccess = () => {
396
+ message_default(`${storeName} database removed successfully`);
397
+ exports.idb.db.list();
398
+ resolve();
399
+ };
400
+ request.onerror = () => {
401
+ console.error(`Error removing ${storeName}:`, request.error);
402
+ reject(request.error);
403
+ };
404
+ request.onblocked = () => {
405
+ console.warn(`Deletion of ${storeName} is blocked. Please close other tabs.`);
406
+ };
407
+ };
408
+ performDelete();
409
+ });
410
+ };
411
+ }
412
+ });
413
+
414
+ // functions/idb/tools/db.size.ts
415
+ var db_size_exports = {};
416
+ var init_db_size = __esm({
417
+ "functions/idb/tools/db.size.ts"() {
418
+ init_idb();
419
+ init_message();
420
+ exports.idb.db.size = async () => {
421
+ if (!idbases || idbases.length === 0) return;
422
+ for (let i = 0; i < idbases.length; i++) {
423
+ const dbInfo = idbases[i];
424
+ try {
425
+ const db = await exports.idb.db.create(dbInfo.name, dbInfo.version);
426
+ const tableNames = Array.from(db.objectStoreNames);
427
+ let totalDbSize = 0;
428
+ for (const tableName of tableNames) {
429
+ const tableSize = await exports.idb.table.size(db, tableName);
430
+ totalDbSize += tableSize;
431
+ }
432
+ dbInfo.size = totalDbSize;
433
+ db.close();
434
+ } catch (err) {
435
+ message_default(`Could not calculate size for ${dbInfo.name}:${err}`);
436
+ }
437
+ }
438
+ };
439
+ }
440
+ });
441
+
442
+ // functions/idb/tools/db.version.ts
443
+ var db_version_exports = {};
444
+ var init_db_version = __esm({
445
+ "functions/idb/tools/db.version.ts"() {
446
+ init_idb();
447
+ exports.idb.db.version = (storeName) => {
448
+ let idbVer = 0;
449
+ for (const v of idbases) {
450
+ if (v.name === storeName) idbVer = v.version;
451
+ break;
452
+ }
453
+ return idbVer;
454
+ };
455
+ }
456
+ });
457
+
458
+ // functions/idb/tools/db.support.ts
459
+ var db_support_exports = {};
460
+ var init_db_support = __esm({
461
+ "functions/idb/tools/db.support.ts"() {
462
+ init_idb();
463
+ init_message();
464
+ exports.idb.db.support = () => {
465
+ const isSupported = "indexedDB" in globalThis;
466
+ if (!isSupported) {
467
+ message_default("Your environment doesn't support IndexedDB");
468
+ }
469
+ return isSupported;
470
+ };
471
+ }
472
+ });
473
+
474
+ // functions/idb/tools/table.create.ts
475
+ var table_create_exports = {};
476
+ var init_table_create = __esm({
477
+ "functions/idb/tools/table.create.ts"() {
478
+ init_idb();
479
+ init_message();
480
+ exports.idb.table.create = (dbName, dbTable) => {
481
+ return new Promise((resolve, reject) => {
482
+ try {
483
+ const currentVersion = Number(exports.idb.db.version(dbName)) || 0;
484
+ const nextVersion = currentVersion + 1;
485
+ const request = indexedDB.open(dbName, nextVersion);
486
+ request.onupgradeneeded = (e) => {
487
+ const db = e.target.result;
488
+ if (!db.objectStoreNames.contains(dbTable)) {
489
+ const store2 = db.createObjectStore(dbTable, {
490
+ keyPath: "id",
491
+ autoIncrement: true
492
+ });
493
+ store2.createIndex("id", "id", { unique: true });
494
+ store2.createIndex("data", "data", { unique: false });
495
+ message_default(`Table ${dbTable} created in ${dbName}`);
496
+ }
497
+ };
498
+ request.onsuccess = () => {
499
+ request.result.close();
500
+ exports.idb.db.list();
501
+ resolve();
502
+ };
503
+ request.onerror = () => {
504
+ console.error(`Error creating table ${dbTable}:`, request.error);
505
+ reject(request.error);
506
+ };
507
+ } catch (err) {
508
+ console.error("Critical error in table.create:", err);
509
+ reject(err);
510
+ }
511
+ });
512
+ };
513
+ }
514
+ });
515
+
516
+ // functions/idb/tools/table.size.ts
517
+ var table_size_exports = {};
518
+ var init_table_size = __esm({
519
+ "functions/idb/tools/table.size.ts"() {
520
+ init_idb();
521
+ init_message();
522
+ exports.idb.table.size = (db, table) => {
523
+ return new Promise((resolve, reject) => {
524
+ if (!db) return reject(new Error("Database instance is required"));
525
+ if (!db.objectStoreNames.contains(table)) return resolve(0);
526
+ let size = 0;
527
+ let count = 0;
528
+ const transaction = db.transaction([table], "readonly");
529
+ const store2 = transaction.objectStore(table);
530
+ const request = store2.openCursor();
531
+ request.onsuccess = async (event) => {
532
+ const cursor = event.target.result;
533
+ if (cursor) {
534
+ try {
535
+ const value = cursor.value;
536
+ size += JSON.stringify(value).length;
537
+ } catch (err) {
538
+ message_default(`Error stringifying IDB value tracking size:${err}`);
539
+ }
540
+ count++;
541
+ if (count % 200 === 0) {
542
+ await new Promise((resolve2) => setTimeout(resolve2, 0));
543
+ }
544
+ cursor.continue();
545
+ } else {
546
+ resolve(size);
547
+ }
548
+ };
549
+ request.onerror = () => {
550
+ reject(request.error);
551
+ };
552
+ });
553
+ };
554
+ }
555
+ });
556
+
557
+ // functions/idb/crud/data.delete.ts
558
+ var data_delete_exports = {};
559
+ var init_data_delete = __esm({
560
+ "functions/idb/crud/data.delete.ts"() {
561
+ init_idb();
562
+ init_message();
563
+ exports.idb.data.delete = (storeName, table, key) => {
564
+ return new Promise((resolve, reject) => {
565
+ const request = indexedDB.open(storeName);
566
+ request.onsuccess = () => {
567
+ const db = request.result;
568
+ if (!db.objectStoreNames.contains(table)) {
569
+ db.close();
570
+ return reject(new Error(`Table ${table} not found`));
571
+ }
572
+ const transaction = db.transaction(table, "readwrite");
573
+ const objectStore = transaction.objectStore(table);
574
+ const deleteRequest = objectStore.delete(key);
575
+ deleteRequest.onsuccess = () => {
576
+ db.close();
577
+ message_default(`Record ${key} deleted from ${table}`);
578
+ resolve();
579
+ };
580
+ deleteRequest.onerror = () => {
581
+ db.close();
582
+ reject(deleteRequest.error);
583
+ };
584
+ };
585
+ request.onerror = () => reject(request.error);
586
+ });
587
+ };
588
+ exports.idb.data.delete.all = (storeName, table) => {
589
+ return new Promise((resolve, reject) => {
590
+ const request = indexedDB.open(storeName);
591
+ request.onsuccess = (event) => {
592
+ const db = event.target.result;
593
+ if (!db.objectStoreNames.contains(table)) {
594
+ db.close();
595
+ return reject(new Error(`Table ${table} not found`));
596
+ }
597
+ const transaction = db.transaction(table, "readwrite");
598
+ const store2 = transaction.objectStore(table);
599
+ const clearRequest = store2.clear();
600
+ clearRequest.onsuccess = () => {
601
+ db.close();
602
+ message_default(`All data cleared from ${table}`);
603
+ resolve();
604
+ };
605
+ clearRequest.onerror = () => {
606
+ db.close();
607
+ reject(clearRequest.error);
608
+ };
609
+ };
610
+ request.onerror = () => reject(request.error);
611
+ });
612
+ };
613
+ }
614
+ });
615
+
616
+ // functions/idb/crud/data.set.ts
617
+ var data_set_exports = {};
618
+ var init_data_set = __esm({
619
+ "functions/idb/crud/data.set.ts"() {
620
+ init_idb();
621
+ init_message();
622
+ exports.idb.data.set = (storeName, table, value) => {
623
+ return new Promise((resolve, reject) => {
624
+ const request = indexedDB.open(storeName);
625
+ request.onsuccess = () => {
626
+ const db = request.result;
627
+ if (!db.objectStoreNames.contains(table)) {
628
+ db.close();
629
+ return reject(new Error(`Table ${table} does not exist in ${storeName}`));
630
+ }
631
+ const transaction = db.transaction(table, "readwrite");
632
+ const objectStore = transaction.objectStore(table);
633
+ const putRequest = objectStore.put(value);
634
+ putRequest.onsuccess = () => {
635
+ db.close();
636
+ message_default(`Data saved in ${storeName}.${table}`);
637
+ resolve(putRequest.result);
638
+ };
639
+ putRequest.onerror = (_) => {
640
+ db.close();
641
+ message_default(`Database insert error: ${putRequest.error?.message}`);
642
+ reject(putRequest.error);
643
+ };
644
+ };
645
+ request.onerror = () => {
646
+ reject(request.error);
647
+ };
648
+ });
649
+ };
650
+ }
651
+ });
652
+
653
+ // functions/idb/crud/data.get.ts
654
+ var data_get_exports = {};
655
+ var init_data_get = __esm({
656
+ "functions/idb/crud/data.get.ts"() {
657
+ init_idb();
658
+ exports.idb.data.get = (storeName, table, key) => {
659
+ return new Promise((resolve, reject) => {
660
+ const request = indexedDB.open(storeName);
661
+ request.onsuccess = (event) => {
662
+ const db = event.target.result;
663
+ if (!db.objectStoreNames.contains(table)) {
664
+ db.close();
665
+ return reject(new Error(`Table ${table} not found in ${storeName}`));
666
+ }
667
+ const transaction = db.transaction(table, "readonly");
668
+ const store2 = transaction.objectStore(table);
669
+ const getRequest = store2.get(key);
670
+ getRequest.onsuccess = () => {
671
+ db.close();
672
+ resolve(getRequest.result);
673
+ };
674
+ getRequest.onerror = () => {
675
+ db.close();
676
+ reject(getRequest.error);
677
+ };
678
+ };
679
+ request.onerror = () => {
680
+ reject(request.error);
681
+ };
682
+ });
683
+ };
684
+ }
685
+ });
686
+
687
+ // functions/idb/index.ts
688
+ var _hasIDB; exports.idb = void 0;
689
+ var init_idb = __esm({
690
+ "functions/idb/index.ts"() {
691
+ init_platform();
692
+ _hasIDB = hasIndexedDB();
693
+ exports.idb = {
694
+ db: {},
695
+ table: {},
696
+ data: {}
697
+ };
698
+ if (_hasIDB) {
699
+ (async () => {
700
+ Object.defineProperty(exports.idb, "db", { value: {}, writable: true, configurable: true });
701
+ Object.defineProperty(exports.idb, "table", { value: {}, writable: true, configurable: true });
702
+ Object.defineProperty(exports.idb, "data", { value: {}, writable: true, configurable: true });
703
+ Object.defineProperty(globalThis, "idbases", {
704
+ value: [],
705
+ writable: true,
706
+ configurable: true,
707
+ enumerable: false
708
+ });
709
+ await Promise.all([
710
+ Promise.resolve().then(() => (init_db_create(), db_create_exports)),
711
+ Promise.resolve().then(() => (init_db_list(), db_list_exports)),
712
+ Promise.resolve().then(() => (init_db_exist(), db_exist_exports)),
713
+ Promise.resolve().then(() => (init_db_quota(), db_quota_exports)),
714
+ Promise.resolve().then(() => (init_db_delete(), db_delete_exports)),
715
+ Promise.resolve().then(() => (init_db_size(), db_size_exports)),
716
+ Promise.resolve().then(() => (init_db_version(), db_version_exports)),
717
+ Promise.resolve().then(() => (init_db_support(), db_support_exports)),
718
+ Promise.resolve().then(() => (init_table_create(), table_create_exports)),
719
+ Promise.resolve().then(() => (init_table_size(), table_size_exports)),
720
+ Promise.resolve().then(() => (init_data_delete(), data_delete_exports)),
721
+ Promise.resolve().then(() => (init_data_set(), data_set_exports)),
722
+ Promise.resolve().then(() => (init_data_get(), data_get_exports))
723
+ ]);
724
+ Object.preventExtensions(exports.idb);
725
+ Object.seal(exports.idb);
726
+ Object.freeze(exports.idb);
727
+ })();
728
+ } else {
729
+ exports.idb._disabled = true;
730
+ exports.idb._warning = "IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.";
731
+ console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence.");
732
+ }
733
+ }
734
+ });
735
+
736
+ // functions/state/index.ts
737
+ init_internal();
738
+ init_message();
739
+
740
+ // core/dispatch.ts
741
+ var dispatch = {
742
+ /**
743
+ * Dispatches a custom event with the specified name and value.
744
+ * @param name The name of the event.
745
+ * @param value The value to pass with the event.
746
+ */
747
+ set: (name, value = {}) => {
748
+ globalThis.dispatchEvent(new CustomEvent(String(name), value));
749
+ },
750
+ ///
751
+ /**
752
+ * Listens for the specified event names and executes the callback when the event is triggered.
753
+ * @param name The name of the event to listen for.
754
+ * @param cb The callback function to execute when the event is triggered.
755
+ */
756
+ listen: (name, cb = null, _flag) => {
757
+ if (globalThis.events?.[name]) return;
758
+ const exec = cb ? (e) => {
759
+ const target = e;
760
+ return globalThis.queueMicrotask ? globalThis.queueMicrotask(() => cb(target)) : Promise.resolve().then(() => cb(target));
761
+ } : void 0;
762
+ if (exec) globalThis.addEventListener(name, exec);
763
+ if (exec) globalThis.events[name] = exec;
764
+ },
765
+ ///
766
+ /**
767
+ * Removes the event listener for the specified event names.
768
+ * @param name The name of the event to remove the listener for.
769
+ */
770
+ remove: (name) => {
771
+ const listener = globalThis.events?.[name];
772
+ if (listener) {
773
+ globalThis.removeEventListener(name, listener);
774
+ delete globalThis.events[name];
775
+ }
776
+ }
777
+ };
778
+
779
+ // functions/state/index.ts
780
+ var TARGET = Symbol("memorio.target");
781
+ var wrapperCache = /* @__PURE__ */ new WeakMap();
782
+ var deepRaw = (val, seen = null) => {
783
+ if (val === null || typeof val !== "object") return val;
784
+ if (val[TARGET] !== void 0) return deepRaw(val[TARGET], seen);
785
+ if (seen) {
786
+ if (seen.has(val)) return val;
787
+ seen.add(val);
788
+ }
789
+ const ctor = val.constructor?.name;
790
+ if (ctor !== "Object" && ctor !== "Array") return val;
791
+ const copy = Array.isArray(val) ? [] : {};
792
+ for (const k of Reflect.ownKeys(val)) {
793
+ copy[k] = deepRaw(val[k], seen);
794
+ }
795
+ return copy;
796
+ };
797
+ var objPath = (prop, object, separator = ".") => {
798
+ return object.concat(prop).join(separator);
799
+ };
800
+ var buildProxy = (obj, callback, tree = []) => {
801
+ const event = (name) => {
802
+ try {
803
+ dispatch.set(name, { detail: { name } });
804
+ } catch (_) {
805
+ }
806
+ return;
807
+ };
808
+ return new Proxy(
809
+ obj,
810
+ {
811
+ get(target, prop) {
812
+ if (prop === "__path") {
813
+ return tree.length > 0 ? "state." + tree.join(".") : "state";
814
+ }
815
+ if (prop === TARGET) {
816
+ return target;
817
+ }
818
+ if (target[TARGET] !== void 0) {
819
+ return target;
820
+ }
821
+ if (prop === "list") {
822
+ message_default('Some state could be hidden when you use "state.list". Use "state" to see the complete list ');
823
+ return JSON.parse(JSON.stringify(target));
824
+ }
825
+ if (typeof prop === "string") {
826
+ const path = tree.length > 0 ? "state." + tree.concat(prop).join(".") : "state." + prop;
827
+ exports.internal.lastAccessedPath = path;
828
+ if (exports.internal.tracking) {
829
+ exports.internal.trackedPaths.add(path);
830
+ }
831
+ }
832
+ if (prop === "_lastPath") {
833
+ return exports.internal.lastAccessedPath;
834
+ }
835
+ if (prop === "remove") {
836
+ return (key) => {
837
+ delete target[key];
838
+ return true;
839
+ };
840
+ }
841
+ if (prop === "removeAll") {
842
+ return () => {
843
+ try {
844
+ for (const key in target) {
845
+ if (typeof target[key] !== "function" && !["list", "remove", "removeAll", "lock", "unlock"].includes(key)) {
846
+ delete target[key];
847
+ }
848
+ }
849
+ } catch (error) {
850
+ console.error(error);
851
+ }
852
+ return;
853
+ };
854
+ }
855
+ if (Object.isFrozen(target[prop])) return target[prop];
856
+ if (prop === "lock" || prop === "unlock") {
857
+ const value = Reflect.get(target, prop);
858
+ if (value) return value;
859
+ }
860
+ try {
861
+ const value = Reflect.get(target, prop);
862
+ if (value && typeof value === "object" && ["Array", "Object"].includes(value.constructor.name)) {
863
+ let wrapper = wrapperCache.get(value);
864
+ if (!wrapper) {
865
+ wrapper = buildProxy(value, callback, tree.concat(prop));
866
+ wrapperCache.set(value, wrapper);
867
+ }
868
+ return wrapper;
869
+ }
870
+ return value;
871
+ } catch (error) {
872
+ console.error("Error: ", error);
873
+ return void 0;
874
+ }
875
+ },
876
+ set(target, key, value) {
877
+ if (exports.internal.locked) {
878
+ console.error("Error: state is locked. Use state.unlock() to enable modifications.");
879
+ return false;
880
+ }
881
+ if (protect.includes(key)) {
882
+ console.error("key " + key + " is protected");
883
+ return false;
884
+ }
885
+ if (target[key] && typeof target[key] === "object" && Object.isFrozen(target[key])) {
886
+ console.error(`Error: state '${key}' is locked`);
887
+ return false;
888
+ }
889
+ if (target[key] && typeof target[key] === "object" && target[key].__locked) {
890
+ console.error(`Error: state '${key}' is locked. Use state.${key}.unlock() to enable modifications.`);
891
+ return false;
892
+ }
893
+ try {
894
+ const path = objPath(key, tree);
895
+ const rawValue = deepRaw(value);
896
+ callback(
897
+ {
898
+ action: "set",
899
+ path,
900
+ target,
901
+ newValue: rawValue,
902
+ previousValue: Reflect.get(target, key)
903
+ }
904
+ );
905
+ event("state." + path);
906
+ Reflect.set(target, key, rawValue);
907
+ exports.internal.bumpStateVersion();
908
+ if (target[key] && typeof target[key] === "object") {
909
+ const lockValue = target[key];
910
+ if (lockValue && typeof lockValue === "object") {
911
+ try {
912
+ Object.defineProperty(lockValue, "__locked", {
913
+ writable: true,
914
+ enumerable: false,
915
+ configurable: false,
916
+ value: false
917
+ });
918
+ Object.defineProperty(lockValue, "lock", {
919
+ writable: false,
920
+ enumerable: false,
921
+ configurable: false,
922
+ value: () => {
923
+ Object.defineProperty(lockValue, "__locked", {
924
+ writable: true,
925
+ enumerable: false,
926
+ configurable: false,
927
+ value: true
928
+ });
929
+ message_default(`State '${key}' is now locked.`);
930
+ }
931
+ });
932
+ Object.defineProperty(lockValue, "unlock", {
933
+ writable: false,
934
+ enumerable: false,
935
+ configurable: false,
936
+ value: () => {
937
+ Object.defineProperty(lockValue, "__locked", {
938
+ writable: true,
939
+ enumerable: false,
940
+ configurable: false,
941
+ value: false
942
+ });
943
+ message_default(`State '${key}' is now unlocked.`);
944
+ }
945
+ });
946
+ } catch (_) {
947
+ }
948
+ }
949
+ }
950
+ return true;
951
+ } catch (error) {
952
+ console.error("Error in set trap:", error);
953
+ return false;
954
+ }
955
+ },
956
+ deleteProperty(target, prop) {
957
+ try {
958
+ const path = objPath(prop, tree);
959
+ callback({ action: "delete", path, target });
960
+ return Reflect.deleteProperty(target, prop);
961
+ } catch (error) {
962
+ console.error("Error in deleteProperty trap:", error);
963
+ return false;
964
+ }
965
+ },
966
+ ownKeys(target) {
967
+ return Reflect.ownKeys(target);
968
+ },
969
+ getOwnPropertyDescriptor(target, prop) {
970
+ return Reflect.getOwnPropertyDescriptor(target, prop);
971
+ }
972
+ }
973
+ );
974
+ };
975
+ var state2 = buildProxy({}, () => {
976
+ });
977
+ state2.lock = () => {
978
+ exports.internal.locked = true;
979
+ message_default("State is now locked. All modifications are blocked.");
980
+ };
981
+ state2.unlock = () => {
982
+ exports.internal.locked = false;
983
+ message_default("State is now unlocked. Modifications are allowed.");
984
+ };
985
+
986
+ // functions/store/index.ts
987
+ init_platform();
988
+ init_internal();
989
+ init_message();
990
+ var _localStorage = getLocalStorage();
991
+ var _fallbackStorageByContext = /* @__PURE__ */ new Map();
992
+ function _getFallbackStorage() {
993
+ const contextName = exports.internal.currentContext || "";
994
+ const key = contextName || "default";
995
+ if (!_fallbackStorageByContext.has(key)) {
996
+ _fallbackStorageByContext.set(key, /* @__PURE__ */ new Map());
997
+ }
998
+ return _fallbackStorageByContext.get(key);
999
+ }
1000
+ var _hasStorage = _localStorage !== null;
1001
+ function _getPrefix() {
1002
+ const contextName = exports.internal.currentContext || "";
1003
+ return contextName ? `${contextName}-` : `memorio_store_`;
1004
+ }
1005
+ function _prefixKey(name) {
1006
+ if (!name || typeof name !== "string") {
1007
+ console.warn(`[memorio store] key is empty or not a string \u2014 operation aborted`);
1008
+ return "";
1009
+ }
1010
+ if (name.length > 512) {
1011
+ console.warn(`[memorio store] key "${name}" exceeds 512 chars \u2014 operation aborted`);
1012
+ return "";
1013
+ }
1014
+ return _getPrefix() + name;
1015
+ }
1016
+ function _read(prefixedName) {
1017
+ const raw = _hasStorage ? _localStorage.getItem(prefixedName) : _getFallbackStorage().get(prefixedName);
1018
+ return raw ? JSON.parse(raw) : raw;
1019
+ }
1020
+ function _write(prefixedName, value) {
1021
+ const json = JSON.stringify(value);
1022
+ if (_hasStorage) _localStorage.setItem(prefixedName, json);
1023
+ else _getFallbackStorage().set(prefixedName, json);
1024
+ }
1025
+ function _remove(prefixedName) {
1026
+ if (_hasStorage) {
1027
+ if (_localStorage.getItem(prefixedName)) {
1028
+ _localStorage.removeItem(prefixedName);
1029
+ return true;
1030
+ }
1031
+ } else if (_getFallbackStorage().has(prefixedName)) {
1032
+ _getFallbackStorage().delete(prefixedName);
1033
+ return true;
1034
+ }
1035
+ return false;
1036
+ }
1037
+ var store = new Proxy({}, {});
1038
+ Object.defineProperty(
1039
+ globalThis,
1040
+ "store",
1041
+ {
1042
+ value: store,
1043
+ enumerable: false,
1044
+ configurable: true
1045
+ }
1046
+ );
1047
+ Object.defineProperties(
1048
+ store,
1049
+ {
1050
+ /**
1051
+ * Gets a value from storage.
1052
+ * @param name The key to retrieve.
1053
+ * @returns The parsed value or null if not found.
1054
+ */
1055
+ get: {
1056
+ value: (name) => {
1057
+ if (!name) {
1058
+ console.warn("[memorio store] store.get() called with empty or null key \u2014 returning null");
1059
+ return null;
1060
+ }
1061
+ try {
1062
+ return _read(_prefixKey(name));
1063
+ } catch (err) {
1064
+ exports.message(`Error parsing store item '${name}': ${err}`);
1065
+ }
1066
+ return null;
1067
+ }
1068
+ },
1069
+ getMultiple: {
1070
+ value: (keys) => {
1071
+ const result = {};
1072
+ for (const key of keys) {
1073
+ try {
1074
+ const item = store.get(key);
1075
+ if (item) result[key] = item;
1076
+ } catch (err) {
1077
+ console.debug(`[memorio store] getMultiple error for key "${key}":`, err);
1078
+ }
1079
+ }
1080
+ return result;
1081
+ }
1082
+ },
1083
+ /**
1084
+ * Sets a value in storage.
1085
+ * @param name The key to set.
1086
+ * @param value The value to store (objects, arrays, primitives).
1087
+ * @returns true if written, false if the key was rejected.
1088
+ */
1089
+ set: {
1090
+ value: (name, value) => {
1091
+ if (!name) {
1092
+ console.warn("[memorio store] store.set() called with empty or null key \u2014 write aborted");
1093
+ return false;
1094
+ }
1095
+ const prefixedName = _prefixKey(name);
1096
+ if (!prefixedName) return false;
1097
+ if (typeof value === "function") {
1098
+ console.warn("[memorio store] functions are not storable \u2014 write aborted for key: " + name);
1099
+ exports.message("Storing functions is not secure and is blocked for safety.");
1100
+ return false;
1101
+ }
1102
+ try {
1103
+ _write(prefixedName, value);
1104
+ } catch (err) {
1105
+ exports.message(`Error setting store item '${name}': ${err}`);
1106
+ return false;
1107
+ }
1108
+ return true;
1109
+ }
1110
+ },
1111
+ /**
1112
+ * Removes a value from storage.
1113
+ * @param name The key to remove.
1114
+ * @returns True if removed, false if not found.
1115
+ */
1116
+ remove: {
1117
+ value: (name) => {
1118
+ if (!name) {
1119
+ console.debug("[memorio store] store.remove() called with empty or null key \u2014 returning false");
1120
+ return false;
1121
+ }
1122
+ const prefixedName = _prefixKey(name);
1123
+ if (!prefixedName) return false;
1124
+ try {
1125
+ return _remove(prefixedName);
1126
+ } catch (err) {
1127
+ exports.message(`Error removing store item '${name}': ${err}`);
1128
+ }
1129
+ return false;
1130
+ }
1131
+ },
1132
+ /**
1133
+ * Alias for remove.
1134
+ * @param name The key to delete.
1135
+ */
1136
+ delete: {
1137
+ value: (name) => {
1138
+ return store.remove(name);
1139
+ }
1140
+ },
1141
+ /**
1142
+ * Clears all memorio items from storage.
1143
+ */
1144
+ removeAll: {
1145
+ value: () => {
1146
+ if (_hasStorage) {
1147
+ const keysToRemove = [];
1148
+ for (let i = 0; i < _localStorage.length; i++) {
1149
+ const key = _localStorage.key(i);
1150
+ if (key?.startsWith(_getPrefix())) keysToRemove.push(key);
1151
+ }
1152
+ keysToRemove.forEach((key) => _localStorage.removeItem(key));
1153
+ } else {
1154
+ _getFallbackStorage().clear();
1155
+ }
1156
+ return true;
1157
+ }
1158
+ },
1159
+ /**
1160
+ * Alias for removeAll.
1161
+ */
1162
+ clearAll: {
1163
+ value: () => {
1164
+ store.removeAll();
1165
+ return true;
1166
+ }
1167
+ },
1168
+ /**
1169
+ * Estimates storage quota usage.
1170
+ * @returns Promise with [usage, quota].
1171
+ */
1172
+ quota: {
1173
+ value: async () => {
1174
+ return [0, 0];
1175
+ }
1176
+ },
1177
+ /**
1178
+ * Calculates total size of all memorio items (characters).
1179
+ */
1180
+ size: {
1181
+ value: () => {
1182
+ let totalSize = 0;
1183
+ if (_hasStorage) {
1184
+ Object.keys(_localStorage).forEach((key) => {
1185
+ if (key.startsWith(_getPrefix())) {
1186
+ const item = _localStorage.getItem(key);
1187
+ if (item) totalSize += item.length;
1188
+ }
1189
+ });
1190
+ } else {
1191
+ _getFallbackStorage().forEach((value) => {
1192
+ totalSize += value.length;
1193
+ });
1194
+ }
1195
+ return totalSize;
1196
+ }
1197
+ },
1198
+ /**
1199
+ * Check if using real localStorage or fallback
1200
+ */
1201
+ isPersistent: {
1202
+ get: () => _hasStorage
1203
+ },
1204
+ /**
1205
+ * Get a list of all memorio store items.
1206
+ */
1207
+ list: {
1208
+ value: () => {
1209
+ const result = {};
1210
+ try {
1211
+ if (_hasStorage) {
1212
+ for (let i = 0; i < _localStorage.length; i++) {
1213
+ const key = _localStorage.key(i);
1214
+ if (key?.startsWith(_getPrefix())) {
1215
+ const cleanKey = key.replace(_getPrefix(), "");
1216
+ const item = _localStorage.getItem(key);
1217
+ if (item !== null) {
1218
+ try {
1219
+ result[cleanKey] = JSON.parse(item);
1220
+ } catch {
1221
+ result[cleanKey] = item;
1222
+ }
1223
+ }
1224
+ }
1225
+ }
1226
+ } else {
1227
+ _getFallbackStorage().forEach((value, key) => {
1228
+ if (key.startsWith(_getPrefix())) {
1229
+ const cleanKey = key.replace(_getPrefix(), "");
1230
+ try {
1231
+ result[cleanKey] = JSON.parse(value);
1232
+ } catch {
1233
+ result[cleanKey] = value;
1234
+ }
1235
+ }
1236
+ });
1237
+ }
1238
+ } catch (err) {
1239
+ exports.message(`Error listing store items: ${err}`);
1240
+ }
1241
+ return result;
1242
+ }
1243
+ }
1244
+ }
1245
+ );
1246
+ Object.freeze(store);
1247
+
1248
+ // functions/session/index.ts
1249
+ init_platform();
1250
+ init_internal();
1251
+ init_message();
1252
+ var _sessionStorage = getSessionStorage();
1253
+ var _fallbackStorageByContext2 = /* @__PURE__ */ new Map();
1254
+ function _getFallbackStorage2() {
1255
+ const contextName = exports.internal.currentContext || "";
1256
+ const key = contextName || "default";
1257
+ if (!_fallbackStorageByContext2.has(key)) {
1258
+ _fallbackStorageByContext2.set(key, /* @__PURE__ */ new Map());
1259
+ }
1260
+ return _fallbackStorageByContext2.get(key);
1261
+ }
1262
+ var _hasStorage2 = _sessionStorage !== null;
1263
+ function _getPrefix2() {
1264
+ const contextName = exports.internal.currentContext || "";
1265
+ return contextName ? `${contextName}-` : `memorio_session_`;
1266
+ }
1267
+ function _prefixKey2(name) {
1268
+ if (!name || typeof name !== "string") {
1269
+ console.warn("[memorio session] key is empty or not a string \u2014 operation aborted");
1270
+ return "";
1271
+ }
1272
+ if (name.length > 512) {
1273
+ console.warn(`[memorio session] key "${name}" exceeds 512 chars \u2014 operation aborted`);
1274
+ return "";
1275
+ }
1276
+ return _getPrefix2() + name;
1277
+ }
1278
+ function _read2(prefixedName) {
1279
+ const raw = _hasStorage2 ? _sessionStorage.getItem(prefixedName) : _getFallbackStorage2().get(prefixedName);
1280
+ return raw ? JSON.parse(raw) : raw;
1281
+ }
1282
+ function _write2(prefixedName, value) {
1283
+ const json = JSON.stringify(value);
1284
+ if (_hasStorage2) _sessionStorage.setItem(prefixedName, json);
1285
+ else _getFallbackStorage2().set(prefixedName, json);
1286
+ }
1287
+ function _remove2(prefixedName) {
1288
+ if (_hasStorage2) {
1289
+ if (_sessionStorage.getItem(prefixedName)) {
1290
+ _sessionStorage.removeItem(prefixedName);
1291
+ return true;
1292
+ }
1293
+ } else if (_getFallbackStorage2().has(prefixedName)) {
1294
+ _getFallbackStorage2().delete(prefixedName);
1295
+ return true;
1296
+ }
1297
+ return false;
1298
+ }
1299
+ var session = new Proxy({}, {});
1300
+ Object.defineProperty(
1301
+ globalThis,
1302
+ "session",
1303
+ {
1304
+ value: session,
1305
+ enumerable: false,
1306
+ configurable: true
1307
+ }
1308
+ );
1309
+ Object.defineProperties(
1310
+ session,
1311
+ {
1312
+ /**
1313
+ * Gets a value from storage.
1314
+ * @param name The key to retrieve.
1315
+ * @returns The parsed value or null if not found.
1316
+ */
1317
+ get: {
1318
+ value: (name) => {
1319
+ if (!name) {
1320
+ console.warn("[memorio session] session.get() called with empty or null key \u2014 returning null");
1321
+ return null;
1322
+ }
1323
+ try {
1324
+ return _read2(_prefixKey2(name));
1325
+ } catch (err) {
1326
+ exports.message(`Error parsing session item '${name}':${err}`);
1327
+ }
1328
+ return null;
1329
+ }
1330
+ },
1331
+ /**
1332
+ * Sets a value in storage.
1333
+ * @param name The key to set.
1334
+ * @param value The value to store.
1335
+ * @returns true if written, false if the key was rejected.
1336
+ */
1337
+ set: {
1338
+ value: (name, value) => {
1339
+ if (!name) {
1340
+ console.warn("[memorio session] session.set() called with empty or null key \u2014 write aborted");
1341
+ return false;
1342
+ }
1343
+ const prefixedName = _prefixKey2(name);
1344
+ if (!prefixedName) return false;
1345
+ if (typeof value === "function") {
1346
+ console.warn("[memorio session] functions are not storable \u2014 write aborted for key: " + name);
1347
+ exports.message("It's not secure to session functions.");
1348
+ return false;
1349
+ }
1350
+ try {
1351
+ _write2(prefixedName, value);
1352
+ } catch (err) {
1353
+ exports.message(`Error setting session item '${name}': ${err}`);
1354
+ return false;
1355
+ }
1356
+ return true;
1357
+ }
1358
+ },
1359
+ /**
1360
+ * Removes a value from storage.
1361
+ * @param name The key to remove.
1362
+ * @returns True if removed.
1363
+ */
1364
+ remove: {
1365
+ value: (name) => {
1366
+ if (!name) {
1367
+ console.warn("[memorio session] session.remove() called with empty or null key \u2014 returning false");
1368
+ return false;
1369
+ }
1370
+ const prefixedName = _prefixKey2(name);
1371
+ if (!prefixedName) return false;
1372
+ try {
1373
+ return _remove2(prefixedName);
1374
+ } catch (err) {
1375
+ exports.message(`Error removing session item '${name}': ${err}`);
1376
+ }
1377
+ return false;
1378
+ }
1379
+ },
1380
+ /**
1381
+ * Alias for remove.
1382
+ * @param name The key to delete.
1383
+ * @returns True if removed.
1384
+ */
1385
+ delete: {
1386
+ value: (name) => {
1387
+ return session.remove(name);
1388
+ }
1389
+ },
1390
+ /**
1391
+ * Clears all sessionStorage items.
1392
+ */
1393
+ removeAll: {
1394
+ value: () => {
1395
+ if (_hasStorage2) {
1396
+ const keysToRemove = [];
1397
+ for (let i = 0; i < _sessionStorage.length; i++) {
1398
+ const key = _sessionStorage.key(i);
1399
+ if (key?.startsWith(_getPrefix2())) {
1400
+ keysToRemove.push(key);
1401
+ }
1402
+ }
1403
+ keysToRemove.forEach((key) => _sessionStorage.removeItem(key));
1404
+ } else {
1405
+ _getFallbackStorage2().clear();
1406
+ }
1407
+ return true;
1408
+ }
1409
+ },
1410
+ /**
1411
+ * Alias for removeAll.
1412
+ */
1413
+ clearAll: {
1414
+ value: () => {
1415
+ session.removeAll();
1416
+ return true;
1417
+ }
1418
+ },
1419
+ quota: {
1420
+ value: async () => {
1421
+ return [0, 0];
1422
+ }
1423
+ },
1424
+ /**
1425
+ * Gets total size of all sessionStorage items.
1426
+ * @returns Total size in characters.
1427
+ */
1428
+ size: {
1429
+ value: () => {
1430
+ let totalSize = 0;
1431
+ if (_hasStorage2) {
1432
+ Object.keys(_sessionStorage).forEach(
1433
+ (key) => {
1434
+ if (key.startsWith(_getPrefix2())) {
1435
+ const item = _sessionStorage.getItem(key);
1436
+ if (item) totalSize += item.length;
1437
+ }
1438
+ }
1439
+ );
1440
+ } else {
1441
+ _getFallbackStorage2().forEach((value) => {
1442
+ totalSize += value.length;
1443
+ });
1444
+ }
1445
+ return totalSize;
1446
+ }
1447
+ },
1448
+ /**
1449
+ * Check if using real sessionStorage or fallback
1450
+ */
1451
+ isPersistent: {
1452
+ get: () => _hasStorage2
1453
+ },
1454
+ /**
1455
+ * Get a list of all memorio session items.
1456
+ */
1457
+ list: {
1458
+ value: () => {
1459
+ const result = {};
1460
+ try {
1461
+ if (_hasStorage2) {
1462
+ for (let i = 0; i < _sessionStorage.length; i++) {
1463
+ const key = _sessionStorage.key(i);
1464
+ if (key?.startsWith(_getPrefix2())) {
1465
+ const cleanKey = key.replace(_getPrefix2(), "");
1466
+ const item = _sessionStorage.getItem(key);
1467
+ if (item !== null) {
1468
+ try {
1469
+ result[cleanKey] = JSON.parse(item);
1470
+ } catch {
1471
+ result[cleanKey] = item;
1472
+ }
1473
+ }
1474
+ }
1475
+ }
1476
+ } else {
1477
+ _getFallbackStorage2().forEach((value, key) => {
1478
+ if (key.startsWith(_getPrefix2())) {
1479
+ const cleanKey = key.replace(_getPrefix2(), "");
1480
+ try {
1481
+ result[cleanKey] = JSON.parse(value);
1482
+ } catch {
1483
+ result[cleanKey] = value;
1484
+ }
1485
+ }
1486
+ });
1487
+ }
1488
+ } catch (err) {
1489
+ exports.message(`Error listing session items: ${err}`);
1490
+ }
1491
+ return result;
1492
+ }
1493
+ }
1494
+ }
1495
+ );
1496
+ Object.freeze(session);
1497
+
1498
+ // functions/cache/index.ts
1499
+ var cacheData = {};
1500
+ var cache = new Proxy({}, {
1501
+ get(target, prop) {
1502
+ const key = prop;
1503
+ if (key === "get") return (name) => cacheData[name];
1504
+ if (key === "set") return (name, value) => {
1505
+ cacheData[name] = value;
1506
+ };
1507
+ if (key === "remove") return (name) => {
1508
+ delete cacheData[name];
1509
+ return true;
1510
+ };
1511
+ if (key === "removeAll") return () => {
1512
+ Object.keys(cacheData).forEach((k) => delete cacheData[k]);
1513
+ return true;
1514
+ };
1515
+ if (key === "clear") return () => {
1516
+ Object.keys(cacheData).forEach((k) => delete cacheData[k]);
1517
+ return true;
1518
+ };
1519
+ if (key === "list") return () => ({ ...cacheData });
1520
+ return cacheData[key];
1521
+ },
1522
+ set(target, prop, value) {
1523
+ cacheData[prop] = value;
1524
+ return true;
1525
+ },
1526
+ deleteProperty(target, prop) {
1527
+ delete cacheData[prop];
1528
+ return true;
1529
+ }
1530
+ });
1531
+ Object.freeze(cache);
1532
+
1533
+ // index.ts
1534
+ init_idb();
1535
+
1536
+ // functions/observer/index.ts
1537
+ init_message();
1538
+ var _deprecationShown = false;
1539
+ var observerFunction = (s, cb = null, option = true) => {
1540
+ if (!_deprecationShown) {
1541
+ console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.');
1542
+ _deprecationShown = true;
1543
+ }
1544
+ const resolvePath = (path2) => {
1545
+ if (typeof path2 === "string") return path2;
1546
+ if (path2 && typeof path2 === "object" && path2.__path) return path2.__path;
1547
+ return null;
1548
+ };
1549
+ const path = resolvePath(s);
1550
+ if (!s && !cb) {
1551
+ console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");
1552
+ return;
1553
+ }
1554
+ if (!s && cb) {
1555
+ console.error(`Observer Error: You need to declare what state need to be monitored as string like 'state.test'.`);
1556
+ return;
1557
+ }
1558
+ if (path) {
1559
+ const t = path.split(".");
1560
+ if (t[0] !== "state" && t[0] !== "store") {
1561
+ console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${path}' string is incorrect!`);
1562
+ return;
1563
+ }
1564
+ }
1565
+ if (s && !cb) {
1566
+ const resolvedPath = resolvePath(s);
1567
+ if (!resolvedPath) return;
1568
+ const obs = globalThis.observer;
1569
+ if (obs?.list?.[resolvedPath]) dispatch.remove(resolvedPath);
1570
+ message_default(`called: ${resolvedPath}`);
1571
+ return;
1572
+ }
1573
+ if (s && cb) {
1574
+ const resolvedPath = resolvePath(s);
1575
+ if (!resolvedPath) return;
1576
+ if (typeof s !== "string" && !(s && typeof s === "object")) {
1577
+ console.error(`Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value`);
1578
+ return;
1579
+ }
1580
+ const callbacks = Array.isArray(cb) ? cb : [cb];
1581
+ const obs = globalThis.observer;
1582
+ if (obs?.list?.[resolvedPath]) dispatch.remove(resolvedPath);
1583
+ callbacks.forEach((callback) => {
1584
+ if (typeof callback === "function") {
1585
+ dispatch.listen(resolvedPath, callback, option);
1586
+ }
1587
+ });
1588
+ return;
1589
+ }
1590
+ };
1591
+ var observer = observerFunction;
1592
+ Object.defineProperties(
1593
+ observer,
1594
+ {
1595
+ /**
1596
+ * See the list of all your observer (eventListener) actually installed.
1597
+ * @returns The list of all installed observers.
1598
+ */
1599
+ list: {
1600
+ get: () => globalThis.events
1601
+ },
1602
+ ///
1603
+ /**
1604
+ * Remove an observer.
1605
+ * @param name The name of the observer to remove.
1606
+ */
1607
+ remove: {
1608
+ value: (name) => {
1609
+ if (!name) return;
1610
+ dispatch.remove(name);
1611
+ delete globalThis.events[name];
1612
+ return;
1613
+ }
1614
+ },
1615
+ ///
1616
+ /**
1617
+ * Remove all observers.
1618
+ * @returns void
1619
+ */
1620
+ removeAll: {
1621
+ get: () => {
1622
+ const obs = globalThis.observer;
1623
+ const list = obs?.list;
1624
+ if (list) {
1625
+ Object.keys(list).forEach((key) => {
1626
+ obs?.remove?.(key);
1627
+ });
1628
+ }
1629
+ return true;
1630
+ }
1631
+ },
1632
+ ///
1633
+ /**
1634
+ * Check if an observer exists for the given path.
1635
+ * @param name The state path to check.
1636
+ * @returns true if an observer exists for the path, false otherwise.
1637
+ */
1638
+ has: {
1639
+ value: (name) => {
1640
+ const obs = globalThis.observer;
1641
+ return !!obs?.list?.[name];
1642
+ }
1643
+ }
1644
+ }
1645
+ );
1646
+
1647
+ // functions/useObserver/index.ts
1648
+ init_message();
1649
+ init_internal();
1650
+ if (!globalThis.useObserver) globalThis.useObserver = null;
1651
+ Object.defineProperty(
1652
+ globalThis,
1653
+ "useObserver",
1654
+ {
1655
+ value: null,
1656
+ writable: true,
1657
+ enumerable: false,
1658
+ configurable: true
1659
+ }
1660
+ );
1661
+ var useObserver = ((func, deps = []) => {
1662
+ if (!deps || typeof func !== "function") {
1663
+ return () => {
1664
+ };
1665
+ }
1666
+ const handlers = [];
1667
+ const depList = Array.isArray(deps) && !deps.__path ? deps : [deps];
1668
+ try {
1669
+ depList.forEach((dep) => {
1670
+ let t = "";
1671
+ if (typeof dep === "function") {
1672
+ const result = exports.propertyName(dep);
1673
+ if (result) t = result;
1674
+ } else if (typeof dep === "object" && dep !== null) {
1675
+ t = dep.__path || (typeof dep.toString === "function" && dep.toString() !== "[object Object]" ? dep.toString() : "");
1676
+ }
1677
+ if (t) {
1678
+ t = t.replace(/^(\(\)\s*=>\s*)/, "").replace(/^globalThis\./, "").replace(/^state\./, "");
1679
+ const path = t.startsWith("store.") || t.startsWith("state.") ? t : "state." + t;
1680
+ dispatch.listen(path, () => func());
1681
+ handlers.push(path);
1682
+ } else {
1683
+ exports.internal.clearTrackedPaths();
1684
+ exports.internal.tracking = true;
1685
+ try {
1686
+ func();
1687
+ } catch (_) {
1688
+ }
1689
+ exports.internal.tracking = false;
1690
+ exports.internal.trackedPaths.forEach((path) => {
1691
+ if (!handlers.includes(path)) {
1692
+ message_default(`useObserver: [Auto-Discovery] -> "${path}"`);
1693
+ dispatch.listen(path, () => func());
1694
+ handlers.push(path);
1695
+ }
1696
+ });
1697
+ }
1698
+ });
1699
+ if (handlers.length > 0) {
1700
+ message_default(`useObserver: Monitoring ${handlers.length} paths.`);
1701
+ } else {
1702
+ console.warn(`useObserver: No paths resolved for monitoring. Check your dependencies!`);
1703
+ }
1704
+ return () => {
1705
+ handlers.forEach((path) => {
1706
+ if (typeof dispatch.remove === "function") {
1707
+ dispatch.remove(path);
1708
+ message_default(`useObserver: Stopped monitoring "${path}"`);
1709
+ }
1710
+ });
1711
+ };
1712
+ } catch (err) {
1713
+ message_default(`useObserver Error: ${err}`);
1714
+ return () => {
1715
+ };
1716
+ }
1717
+ });
1718
+ globalThis.useObserver = useObserver;
1719
+ Object.freeze(globalThis.useObserver);
1720
+
1721
+ // index.ts
1722
+ init_message();
1723
+
1724
+ // functions/devtools/index.ts
1725
+ init_internal();
1726
+ function isDebugEnabled() {
1727
+ return exports.internal.debug === true;
1728
+ }
1729
+ function extractStoreData() {
1730
+ if (!globalThis.store) return {};
1731
+ const result = {};
1732
+ const store2 = globalThis.store;
1733
+ if (typeof store2.list === "function") {
1734
+ try {
1735
+ return store2.list();
1736
+ } catch {
1737
+ }
1738
+ }
1739
+ if (typeof store2.get === "function") {
1740
+ for (const key of Object.keys(store2)) {
1741
+ if (!["get", "set", "remove", "delete", "removeAll", "clearAll", "size", "isPersistent", "list"].includes(key)) {
1742
+ try {
1743
+ const val = store2.get(key);
1744
+ if (val !== null && val !== void 0) {
1745
+ result[key] = val;
1746
+ }
1747
+ } catch {
1748
+ }
1749
+ }
1750
+ }
1751
+ }
1752
+ return result;
1753
+ }
1754
+ function extractSessionData() {
1755
+ if (!globalThis.session) return {};
1756
+ const result = {};
1757
+ const session2 = globalThis.session;
1758
+ if (typeof session2.list === "function") {
1759
+ try {
1760
+ return session2.list();
1761
+ } catch {
1762
+ }
1763
+ }
1764
+ if (typeof session2.get === "function") {
1765
+ for (const key of Object.keys(session2)) {
1766
+ if (!["get", "set", "remove", "delete", "removeAll", "clearAll", "size", "isPersistent", "list"].includes(key)) {
1767
+ try {
1768
+ const val = session2.get(key);
1769
+ if (val !== null && val !== void 0) {
1770
+ result[key] = val;
1771
+ }
1772
+ } catch {
1773
+ }
1774
+ }
1775
+ }
1776
+ }
1777
+ return result;
1778
+ }
1779
+ var inspect = () => {
1780
+ if (!isDebugEnabled()) return;
1781
+ if (globalThis.state) {
1782
+ const stateList = globalThis.state.list;
1783
+ let stateData;
1784
+ if (typeof stateList === "function") {
1785
+ stateData = stateList();
1786
+ } else if (typeof stateList === "object" && stateList !== null) {
1787
+ stateData = stateList;
1788
+ } else {
1789
+ stateData = globalThis.state;
1790
+ }
1791
+ console.table(stateData);
1792
+ }
1793
+ if (globalThis.store) {
1794
+ console.table(extractStoreData());
1795
+ }
1796
+ if (globalThis.session) {
1797
+ console.table(extractSessionData());
1798
+ }
1799
+ if (globalThis.cache) {
1800
+ const cacheList = globalThis.cache.list;
1801
+ let cacheData2;
1802
+ if (typeof cacheList === "function") {
1803
+ cacheData2 = cacheList();
1804
+ } else if (typeof cacheList === "object" && cacheList !== null) {
1805
+ cacheData2 = cacheList;
1806
+ } else {
1807
+ cacheData2 = globalThis.cache;
1808
+ }
1809
+ console.table(cacheData2);
1810
+ }
1811
+ };
1812
+ var stats = () => {
1813
+ const getKeys = (obj) => {
1814
+ if (!obj) return 0;
1815
+ if (typeof obj.list === "function") {
1816
+ try {
1817
+ const list = obj.list();
1818
+ return Object.keys(list).length;
1819
+ } catch {
1820
+ }
1821
+ }
1822
+ return Object.keys(obj).length;
1823
+ };
1824
+ return {
1825
+ stateKeys: getKeys(globalThis.state),
1826
+ storeKeys: getKeys(globalThis.store),
1827
+ sessionKeys: getKeys(globalThis.session),
1828
+ cacheKeys: getKeys(globalThis.cache),
1829
+ idbDatabases: 0,
1830
+ lastUpdate: (/* @__PURE__ */ new Date()).toISOString()
1831
+ };
1832
+ };
1833
+ var clear = (module) => {
1834
+ if (globalThis[module] && typeof globalThis[module].clear === "function") {
1835
+ globalThis[module].clear();
1836
+ } else {
1837
+ console.error(`Module ${module} not found or does not support clear()`);
1838
+ }
1839
+ };
1840
+ var clearAll = () => {
1841
+ clear("state");
1842
+ clear("store");
1843
+ clear("session");
1844
+ clear("cache");
1845
+ };
1846
+ var exportData = () => {
1847
+ const getStateData = () => {
1848
+ if (!globalThis.state) return void 0;
1849
+ try {
1850
+ if (typeof globalThis.state.list === "function") {
1851
+ return globalThis.state.list();
1852
+ }
1853
+ return globalThis.state;
1854
+ } catch {
1855
+ return void 0;
1856
+ }
1857
+ };
1858
+ const getStoreData = () => {
1859
+ return extractStoreData();
1860
+ };
1861
+ const getSessionData = () => {
1862
+ return extractSessionData();
1863
+ };
1864
+ const getCacheData = () => {
1865
+ if (!globalThis.cache) return void 0;
1866
+ try {
1867
+ if (typeof globalThis.cache.list === "function") {
1868
+ return globalThis.cache.list();
1869
+ }
1870
+ return globalThis.cache;
1871
+ } catch {
1872
+ return void 0;
1873
+ }
1874
+ };
1875
+ const data = {
1876
+ state: getStateData(),
1877
+ store: getStoreData(),
1878
+ session: getSessionData(),
1879
+ cache: getCacheData(),
1880
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString()
1881
+ };
1882
+ return JSON.stringify(data, null, 2);
1883
+ };
1884
+ var importData = (jsonString) => {
1885
+ try {
1886
+ const data = JSON.parse(jsonString);
1887
+ if (data.state) {
1888
+ Object.entries(data.state).forEach(([key, value]) => {
1889
+ if (globalThis.state && key !== "list" && key !== "remove" && key !== "removeAll") {
1890
+ ;
1891
+ globalThis.state[key] = value;
1892
+ }
1893
+ });
1894
+ }
1895
+ if (data.store && globalThis.store && typeof globalThis.store.set === "function") {
1896
+ Object.entries(data.store).forEach(([key, value]) => {
1897
+ ;
1898
+ globalThis.store.set(key, value);
1899
+ });
1900
+ }
1901
+ if (data.session && globalThis.session && typeof globalThis.session.set === "function") {
1902
+ Object.entries(data.session).forEach(([key, value]) => {
1903
+ ;
1904
+ globalThis.session.set(key, value);
1905
+ });
1906
+ }
1907
+ if (data.cache && globalThis.cache) {
1908
+ Object.entries(data.cache).forEach(([key, value]) => {
1909
+ if (globalThis.cache && key !== "get" && key !== "set" && key !== "remove" && key !== "clear") {
1910
+ ;
1911
+ globalThis.cache[key] = value;
1912
+ }
1913
+ });
1914
+ }
1915
+ } catch (error) {
1916
+ console.error("%c\u2717 Import failed:", "color: #F44336", error);
1917
+ }
1918
+ };
1919
+ var watch = (module, path) => {
1920
+ if (!globalThis[module]) {
1921
+ console.error(`Module ${module} not found`);
1922
+ return;
1923
+ }
1924
+ const target = globalThis[module];
1925
+ const initialValue = target[path];
1926
+ console.debug(`\u{1F441} Watching ${module}.${path} (initial: ${JSON.stringify(initialValue)})`);
1927
+ if (module === "state" && globalThis.memorio?.dispatch) {
1928
+ const handler = (e) => {
1929
+ const detail = e.detail;
1930
+ if (detail?.name?.includes(path)) {
1931
+ console.debug(`\u{1F441} Change: ${module}.${path} =`, e.detail.value);
1932
+ }
1933
+ };
1934
+ target.addEventListener?.("memorio-change", handler);
1935
+ }
1936
+ };
1937
+ var help = () => {
1938
+ console.debug(`
1939
+ \u{1F9E0} Memorio DevTools Help
1940
+
1941
+ Available commands:
1942
+ memorio.devtools.inspect() - Inspect all state modules
1943
+ memorio.devtools.stats() - Show statistics
1944
+ memorio.devtools.clear('module') - Clear specific module
1945
+ memorio.devtools.clearAll() - Clear all modules
1946
+ memorio.devtools.exportData() - Export all data as JSON
1947
+ memorio.devtools.importData(json) - Import data from JSON
1948
+ memorio.devtools.watch(module, path) - Watch a path for changes
1949
+ memorio.devtools.help() - Show this help
1950
+
1951
+ Shortcuts:
1952
+ state - globalThis.state
1953
+ store - globalThis.store
1954
+ session - globalThis.session
1955
+ cache - globalThis.cache
1956
+ `);
1957
+ };
1958
+ var devtools = {
1959
+ inspect,
1960
+ stats,
1961
+ clear,
1962
+ clearAll,
1963
+ exportData,
1964
+ importData,
1965
+ watch,
1966
+ help
1967
+ };
1968
+
1969
+ // functions/logger/index.ts
1970
+ init_internal();
1971
+ init_message();
1972
+ var defaultConfig = {
1973
+ enabled: true,
1974
+ logToConsole: true,
1975
+ modules: ["state", "store", "session", "cache", "idb"],
1976
+ maxEntries: 1e3
1977
+ };
1978
+ function isDebugEnabled2() {
1979
+ return exports.internal.debug === true;
1980
+ }
1981
+ var config = { ...defaultConfig };
1982
+ var logHistory = [];
1983
+ var configure = (options) => {
1984
+ config = { ...config, ...options };
1985
+ };
1986
+ var enable = () => {
1987
+ config.enabled = true;
1988
+ };
1989
+ var disable = () => {
1990
+ config.enabled = false;
1991
+ };
1992
+ var isEnabled = (module) => {
1993
+ return config.enabled && config.modules.includes(module);
1994
+ };
1995
+ var log = (module, action, path, value, previousValue) => {
1996
+ if (!isEnabled(module)) return;
1997
+ const entry = {
1998
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1999
+ module,
2000
+ action,
2001
+ path,
2002
+ value,
2003
+ previousValue
2004
+ };
2005
+ logHistory.push(entry);
2006
+ if (logHistory.length > config.maxEntries) {
2007
+ logHistory.shift();
2008
+ }
2009
+ if (config.logToConsole && isDebugEnabled2()) {
2010
+ const prefix = `[Memorio:${module.toUpperCase()}]`;
2011
+ const color = getModuleColor(module);
2012
+ message_default(
2013
+ `%c${prefix}%c ${action} ${path},
2014
+ color: ${color}; font-weight: bold,
2015
+ color: inherit`
2016
+ );
2017
+ if (value !== void 0) {
2018
+ message_default(` \u2192 value:${value}`);
2019
+ }
2020
+ if (previousValue !== void 0) {
2021
+ message_default(` \u2190 previous:${previousValue}`);
2022
+ }
2023
+ }
2024
+ if (config.customHandler) {
2025
+ config.customHandler(entry);
2026
+ }
2027
+ };
2028
+ var getModuleColor = (module) => {
2029
+ const colors = {
2030
+ state: "#4CAF50",
2031
+ store: "#2196F3",
2032
+ session: "#FF9800",
2033
+ cache: "#9C27B0",
2034
+ idb: "#F44336"
2035
+ };
2036
+ return colors[module] || "#888888";
2037
+ };
2038
+ var getHistory = () => {
2039
+ return [...logHistory];
2040
+ };
2041
+ var clearHistory = () => {
2042
+ logHistory.length = 0;
2043
+ };
2044
+ var getStats = () => {
2045
+ const stats2 = {
2046
+ total: logHistory.length,
2047
+ state: 0,
2048
+ store: 0,
2049
+ session: 0,
2050
+ cache: 0,
2051
+ idb: 0,
2052
+ set: 0,
2053
+ get: 0,
2054
+ delete: 0,
2055
+ clear: 0
2056
+ };
2057
+ for (const entry of logHistory) {
2058
+ if (entry) {
2059
+ const module = entry.module;
2060
+ const action = entry.action;
2061
+ if (module && typeof stats2[module] === "number") stats2[module]++;
2062
+ if (action && typeof stats2[action] === "number") stats2[action]++;
2063
+ }
2064
+ }
2065
+ return stats2;
2066
+ };
2067
+ var exportLogs = () => {
2068
+ return JSON.stringify(logHistory, null, 2);
2069
+ };
2070
+ var logger = {
2071
+ configure,
2072
+ enable,
2073
+ disable,
2074
+ isEnabled,
2075
+ log,
2076
+ getHistory,
2077
+ clearHistory,
2078
+ getStats,
2079
+ exportLogs
2080
+ };
2081
+
2082
+ // index.ts
2083
+ init_internal();
2084
+ init_platform();
2085
+
2086
+ // core/global.ts
2087
+ init_platform();
2088
+ init_internal();
2089
+
2090
+ // package.json
2091
+ var package_default = {
2092
+ version: "4.6.9"};
2093
+
2094
+ // core/global.ts
2095
+ init_idb();
2096
+ init_message();
2097
+ Object.defineProperty(
2098
+ globalThis,
2099
+ "memorio",
2100
+ {
2101
+ value: {
2102
+ setProps: () => {
2103
+ },
2104
+ obj: {},
2105
+ array: [],
2106
+ dispatch,
2107
+ message: exports.message,
2108
+ devtools,
2109
+ logger,
2110
+ setDescription: () => {
2111
+ }
2112
+ },
2113
+ writable: false,
2114
+ configurable: true,
2115
+ enumerable: false
2116
+ }
2117
+ );
2118
+ Object.defineProperty(
2119
+ globalThis,
2120
+ "events",
2121
+ {
2122
+ value: {},
2123
+ writable: true,
2124
+ enumerable: false
2125
+ }
2126
+ );
2127
+ Object.defineProperty(
2128
+ memorio,
2129
+ "version",
2130
+ {
2131
+ writable: false,
2132
+ enumerable: false,
2133
+ value: package_default.version
2134
+ }
2135
+ );
2136
+ Object.defineProperty(
2137
+ memorio,
2138
+ "debug",
2139
+ {
2140
+ get: () => exports.internal.debug,
2141
+ set: (v) => {
2142
+ exports.internal.debug = v;
2143
+ },
2144
+ enumerable: false
2145
+ }
2146
+ );
2147
+ var caps = getCapabilities();
2148
+ Object.defineProperty(memorio, "_platform", { writable: false, enumerable: false, value: caps.platform });
2149
+ Object.defineProperty(memorio, "_capabilities", { writable: false, enumerable: false, value: caps });
2150
+ Object.defineProperty(memorio, "_sessionId", { writable: false, enumerable: false, value: generateSessionId() });
2151
+ initializePlatform();
2152
+ memorio.isBrowser = isBrowser;
2153
+ memorio.isNode = isNode;
2154
+ memorio.isDeno = isDeno;
2155
+ memorio.isEdge = isEdge;
2156
+ memorio.getCapabilities = getCapabilities;
2157
+ memorio.createContext = createContext;
2158
+ memorio.listContexts = listContexts;
2159
+ memorio.deleteContext = deleteContext;
2160
+ memorio.isolate = (name) => createContext(name);
2161
+ Object.defineProperty(globalThis, "state", { value: state2, writable: true, enumerable: false, configurable: true });
2162
+ Object.defineProperty(globalThis, "store", { value: store, writable: true, enumerable: false, configurable: true });
2163
+ Object.defineProperty(globalThis, "session", { value: session, writable: true, enumerable: false, configurable: true });
2164
+ Object.defineProperty(globalThis, "cache", { value: cache, writable: true, enumerable: false, configurable: true });
2165
+ Object.defineProperty(globalThis, "idb", { value: exports.idb, writable: true, enumerable: false, configurable: true });
2166
+ Object.defineProperty(globalThis, "observer", { value: observer, writable: true, enumerable: false, configurable: true });
2167
+ Object.defineProperty(globalThis, "useObserver", { value: useObserver, writable: true, enumerable: false, configurable: true });
2168
+ Object.defineProperty(memorio, "dispatch", { value: dispatch, writable: true, enumerable: false, configurable: true });
2169
+ Object.defineProperty(memorio, "setContext", { writable: false, enumerable: false, value: (id) => setCurrentContext(id) });
2170
+ Object.defineProperty(memorio, "getContext", { writable: false, enumerable: false, value: () => exports.internal.currentContext });
2171
+ Object.defineProperty(globalThis, "$state", { get: () => globalThis.state, configurable: true });
2172
+ Object.defineProperty(globalThis, "$store", { get: () => globalThis.store, configurable: true });
2173
+ Object.defineProperty(globalThis, "$session", { get: () => globalThis.session, configurable: true });
2174
+ Object.defineProperty(globalThis, "$cache", { get: () => globalThis.cache, configurable: true });
2175
+ memorio.help = function() {
2176
+ console.debug(`
2177
+ \u{1F9E0} Memorio ${package_default.version} - Help
2178
+
2179
+ Core Modules:
2180
+ state - Reactive state management
2181
+ store - Persistent storage (localStorage/Map)
2182
+ session - Session storage (sessionStorage/Map)
2183
+ cache - In-memory cache
2184
+ idb - IndexedDB (browser only)
2185
+
2186
+ Context Management:
2187
+ memorio.isolate(name) - Create isolated context
2188
+ memorio.listContexts() - List all contexts
2189
+ memorio.deleteContext(id) - Delete a context
2190
+
2191
+ Platform Detection:
2192
+ memorio.isBrowser() - Browser environment
2193
+ memorio.isNode() - Node.js environment
2194
+ memorio.isDeno() - Deno environment
2195
+ memorio.isEdge() - Edge/Worker environment
2196
+ memorio.getCapabilities() - Full capabilities object
2197
+
2198
+ DevTools:
2199
+ memorio.devtools.inspect() - Inspect all modules
2200
+ memorio.devtools.stats() - Show statistics
2201
+ memorio.devtools.watch() - Watch a path
2202
+ memorio.devtools.exportData() - Export as JSON
2203
+ memorio.devtools.importData() - Import from JSON
2204
+ memorio.devtools.clear() - Clear specific module
2205
+ memorio.devtools.clearAll() - Clear all modules
2206
+
2207
+ Shortcuts:
2208
+ state, store, session, cache, idb - direct access to modules
2209
+ `);
2210
+ };
2211
+
2212
+ // index.ts
2213
+ var memorio2 = globalThis.memorio;
2214
+ var events = globalThis.events;
2215
+ var isolate = (name) => createContext(name);
2216
+ var help2 = globalThis.memorio?.help;
2217
+ var setContext = (id) => exports.internal.currentContext = id;
2218
+ var getContext = () => exports.internal.currentContext;
2219
+ var index_default = memorio2;
2220
+
2221
+ exports.cache = cache;
2222
+ exports.createContext = createContext;
2223
+ exports.default = index_default;
2224
+ exports.deleteContext = deleteContext;
2225
+ exports.devtools = devtools;
2226
+ exports.dispatch = dispatch;
2227
+ exports.events = events;
2228
+ exports.getCapabilities = getCapabilities;
2229
+ exports.getContext = getContext;
2230
+ exports.help = help2;
2231
+ exports.isBrowser = isBrowser;
2232
+ exports.isDeno = isDeno;
2233
+ exports.isEdge = isEdge;
2234
+ exports.isNode = isNode;
2235
+ exports.isolate = isolate;
2236
+ exports.listContexts = listContexts;
2237
+ exports.logger = logger;
2238
+ exports.memorio = memorio2;
2239
+ exports.observer = observer;
2240
+ exports.session = session;
2241
+ exports.setContext = setContext;
2242
+ exports.state = state2;
2243
+ exports.store = store;
2244
+ exports.useObserver = useObserver;