memorio 4.6.9 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FUNDING.yml +12 -0
- package/index.cjs +6 -2196
- package/index.js +6 -2169
- package/package.json +13 -2
package/index.cjs
CHANGED
|
@@ -1,1941 +1,4 @@
|
|
|
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(`
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var g=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=g(()=>{});var y,Ne,be;exports.propertyName=void 0;exports.internal=void 0;var P=g(()=>{a();y={debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null},Ne={get debug(){return y.debug},set debug(e){y.debug=e;},get tracking(){return y.tracking},set tracking(e){y.tracking=e;},get trackedPaths(){return y.trackedPaths},clearTrackedPaths(){y.trackedPaths.clear();},get locked(){return y.locked},set locked(e){y.locked=e;},get lastAccessedPath(){return y.lastAccessedPath},set lastAccessedPath(e){y.lastAccessedPath=e;},get stateVersion(){return y.stateVersion},bumpStateVersion(){return y.stateVersion=(y.stateVersion||0)+1,y.stateVersion},get currentContext(){return y.currentContext},set currentContext(e){y.currentContext=e;}},be=["list","state","store","idb","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],exports.propertyName=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),exports.internal=Ne;});exports.message=void 0;var c,b=g(()=>{a();P();exports.message=(...e)=>{exports.internal.debug===true&&console.debug(...e);},c=exports.message;});function K(){let e=globalThis;if(typeof e.crypto<"u"&&e.crypto.randomUUID)return e.crypto.randomUUID();if(typeof e.crypto<"u"&&e.crypto.getRandomValues){let t=new Uint8Array(16);return e.crypto.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}return `session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`}function z(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function Q(){return z()==="browser"}function X(){return z()==="node"}function Z(){return z()==="deno"}function ee(){return z()==="edge"}function te(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function re(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function oe(){return typeof indexedDB<"u"}function Le(){return typeof globalThis.dispatchEvent=="function"}function q(){let e=z(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:te()!==null,hasLocalStorage:re()!==null,hasIndexedDB:oe(),hasDispatchEvent:Le(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:K()}}function ve(){let e=q(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(s,o={}){this.type=s,this.detail=o;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,s){L.has(r)||L.set(r,[]),L.get(r).push(s);},t.removeEventListener=function(r,s){let o=L.get(r);if(o){let n=o.indexOf(s);n>-1&&o.splice(n,1);}},t.dispatchEvent=function(r){let s=L.get(r.type);return s&&s.forEach(o=>{try{o(r);}catch(n){console.error("Event listener error:",n);}}),true});}function J(e){let t=e||`context_${K()}`;ae(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return se.set(t,r),{id:t,state:r.state,store:{get:s=>{let o=r.store.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.store.set(s,JSON.stringify(o));},remove:s=>r.store.delete(s),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:s=>{let o=r.session.get(s);return o?JSON.parse(o):null},set:(s,o)=>{r.session.set(s,JSON.stringify(o));},remove:s=>r.session.delete(s),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:s=>r.cache.get(s),set:(s,o)=>r.cache.set(s,o),remove:s=>r.cache.delete(s),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function ne(){return Array.from(se.keys())}function ie(e){return se.delete(e)}function ae(e){exports.internal.currentContext=e;}var L,se,B=g(()=>{a();P();L=new Map;se=new Map;});var Fe={};var xe=g(()=>{a();x();b();exports.idb.db.create=(e,t=1)=>new Promise((r,s)=>{if(!exports.idb.db.support())return s(new Error("IndexedDB not supported"));let o=globalThis.indexedDB.open(e,t);o.onerror=()=>{c(`IndexedDB error: ${o.error?.message}`),s(o.error);},o.onsuccess=()=>{c(`Database ${e} connected successfully`),r(o.result);},o.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var We={};var we=g(()=>{a();x();exports.idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await exports.idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var He={};var Se=g(()=>{a();x();exports.idb.db.exist=e=>idbases?.some(t=>t.name===e);});var Ye={};var Pe=g(()=>{a();x();exports.idb.db.quota=()=>navigator.storage.estimate();});var Ge={};var Te=g(()=>{a();x();b();exports.idb.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let o=indexedDB.deleteDatabase(e);o.onsuccess=()=>{c(`${e} database removed successfully`),exports.idb.db.list(),t();},o.onerror=()=>{console.error(`Error removing ${e}:`,o.error),r(o.error);},o.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var Qe={};var Oe=g(()=>{a();x();b();exports.idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await exports.idb.db.create(t.name,t.version),s=Array.from(r.objectStoreNames),o=0;for(let n of s){let i=await exports.idb.table.size(r,n);o+=i;}t.size=o,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var Xe={};var Ee=g(()=>{a();x();exports.idb.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var Ze={};var De=g(()=>{a();x();b();exports.idb.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var et={};var Ce=g(()=>{a();x();b();exports.idb.table.create=(e,t)=>new Promise((r,s)=>{try{let n=(Number(exports.idb.db.version(e))||0)+1,i=indexedDB.open(e,n);i.onupgradeneeded=m=>{let p=m.target.result;if(!p.objectStoreNames.contains(t)){let f=p.createObjectStore(t,{keyPath:"id",autoIncrement:!0});f.createIndex("id","id",{unique:!0}),f.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),exports.idb.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),s(i.error);};}catch(o){console.error("Critical error in table.create:",o),s(o);}});});var tt={};var je=g(()=>{a();x();b();exports.idb.table.size=(e,t)=>new Promise((r,s)=>{if(!e)return s(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let o=0,n=0,p=e.transaction([t],"readonly").objectStore(t).openCursor();p.onsuccess=async f=>{let O=f.target.result;if(O){try{let M=O.value;o+=JSON.stringify(M).length;}catch(M){c(`Error stringifying IDB value tracking size:${M}`);}n++,n%200===0&&await new Promise(M=>setTimeout(M,0)),O.continue();}else r(o);},p.onerror=()=>{s(p.error);};});});var rt={};var ke=g(()=>{a();x();b();exports.idb.data.delete=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let f=i.transaction(t,"readwrite").objectStore(t).delete(r);f.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),s();},f.onerror=()=>{i.close(),o(f.error);};},n.onerror=()=>o(n.error);});exports.idb.data.delete.all=(e,t)=>new Promise((r,s)=>{let o=indexedDB.open(e);o.onsuccess=n=>{let i=n.target.result;if(!i.objectStoreNames.contains(t))return i.close(),s(new Error(`Table ${t} not found`));let f=i.transaction(t,"readwrite").objectStore(t).clear();f.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},f.onerror=()=>{i.close(),s(f.error);};},o.onerror=()=>s(o.error);});});var ot={};var _e=g(()=>{a();x();b();exports.idb.data.set=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=()=>{let i=n.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} does not exist in ${e}`));let f=i.transaction(t,"readwrite").objectStore(t).put(r);f.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),s(f.result);},f.onerror=O=>{i.close(),c(`Database insert error: ${f.error?.message}`),o(f.error);};},n.onerror=()=>{o(n.error);};});});var st={};var $e=g(()=>{a();x();exports.idb.data.get=(e,t,r)=>new Promise((s,o)=>{let n=indexedDB.open(e);n.onsuccess=i=>{let m=i.target.result;if(!m.objectStoreNames.contains(t))return m.close(),o(new Error(`Table ${t} not found in ${e}`));let O=m.transaction(t,"readonly").objectStore(t).get(r);O.onsuccess=()=>{m.close(),s(O.result);},O.onerror=()=>{m.close(),o(O.error);};},n.onerror=()=>{o(n.error);};});});var nt;exports.idb=void 0;var x=g(()=>{a();B();nt=oe(),exports.idb={db:{},table:{},data:{}};nt?(async()=>(Object.defineProperty(exports.idb,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(xe(),Fe)),Promise.resolve().then(()=>(we(),We)),Promise.resolve().then(()=>(Se(),He)),Promise.resolve().then(()=>(Pe(),Ye)),Promise.resolve().then(()=>(Te(),Ge)),Promise.resolve().then(()=>(Oe(),Qe)),Promise.resolve().then(()=>(Ee(),Xe)),Promise.resolve().then(()=>(De(),Ze)),Promise.resolve().then(()=>(Ce(),et)),Promise.resolve().then(()=>(je(),tt)),Promise.resolve().then(()=>(ke(),rt)),Promise.resolve().then(()=>(_e(),ot)),Promise.resolve().then(()=>($e(),st))]),Object.preventExtensions(exports.idb),Object.seal(exports.idb),Object.freeze(exports.idb)))():(exports.idb._disabled=true,exports.idb._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});a();a();P();b();a();var v={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let s=t?o=>{let n=o;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(n)):Promise.resolve().then(()=>t(n))}:void 0;s&&globalThis.addEventListener(e,s),s&&(globalThis.events[e]=s);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};var V=Symbol("memorio.target"),pe=new WeakMap,G=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[V]!==void 0)return G(e[V],t);if(t){if(t.has(e))return e;t.add(e);}let r=e.constructor?.name;if(r!=="Object"&&r!=="Array")return e;let s=Array.isArray(e)?[]:{};for(let o of Reflect.ownKeys(e))s[o]=G(e[o],t);return s},ye=(e,t,r=".")=>t.concat(e).join(r),he=(e,t,r=[])=>{let s=o=>{try{v.set(o,{detail:{name:o}});}catch{}};return new Proxy(e,{get(o,n){if(n==="__path")return r.length>0?"state."+r.join("."):"state";if(n===V||o[V]!==void 0)return o;if(n==="list")return c('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(o));if(typeof n=="string"){let i=r.length>0?"state."+r.concat(n).join("."):"state."+n;exports.internal.lastAccessedPath=i,exports.internal.tracking&&exports.internal.trackedPaths.add(i);}if(n==="_lastPath")return exports.internal.lastAccessedPath;if(n==="remove")return i=>(delete o[i],true);if(n==="removeAll")return ()=>{try{for(let i in o)typeof o[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete o[i];}catch(i){console.error(i);}};if(Object.isFrozen(o[n]))return o[n];if(n==="lock"||n==="unlock"){let i=Reflect.get(o,n);if(i)return i}try{let i=Reflect.get(o,n);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let m=pe.get(i);return m||(m=he(i,t,r.concat(n)),pe.set(i,m)),m}return i}catch(i){console.error("Error: ",i);return}},set(o,n,i){if(exports.internal.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(be.includes(n))return console.error("key "+n+" is protected"),false;if(o[n]&&typeof o[n]=="object"&&Object.isFrozen(o[n]))return console.error(`Error: state '${n}' is locked`),false;if(o[n]&&typeof o[n]=="object"&&o[n].__locked)return console.error(`Error: state '${n}' is locked. Use state.${n}.unlock() to enable modifications.`),false;try{let m=ye(n,r),p=G(i);if(t({action:"set",path:m,target:o,newValue:p,previousValue:Reflect.get(o,n)}),s("state."+m),Reflect.set(o,n,p),exports.internal.bumpStateVersion(),o[n]&&typeof o[n]=="object"){let f=o[n];if(f&&typeof f=="object")try{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(f,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${n}' is now locked.`);}}),Object.defineProperty(f,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(f,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${n}' is now unlocked.`);}});}catch{}}return !0}catch(m){return console.error("Error in set trap:",m),false}},deleteProperty(o,n){try{let i=ye(n,r);return t({action:"delete",path:i,target:o}),Reflect.deleteProperty(o,n)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(o){return Reflect.ownKeys(o)},getOwnPropertyDescriptor(o,n){return Reflect.getOwnPropertyDescriptor(o,n)}})},N=he({},()=>{});N.lock=()=>{exports.internal.locked=true,c("State is now locked. All modifications are blocked.");};N.unlock=()=>{exports.internal.locked=false,c("State is now unlocked. Modifications are allowed.");};a();B();P();b();var w=re(),le=new Map;function $(){let t=exports.internal.currentContext||""||"default";return le.has(t)||le.set(t,new Map),le.get(t)}var _=w!==null;function k(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_store_"}function ce(e){return !e||typeof e!="string"?(console.warn("[memorio store] key is empty or not a string \u2014 operation aborted"),""):e.length>512?(console.warn(`[memorio store] key "${e}" exceeds 512 chars \u2014 operation aborted`),""):k()+e}function ze(e){let t=_?w.getItem(e):$().get(e);return t&&JSON.parse(t)}function qe(e,t){let r=JSON.stringify(t);_?w.setItem(e,r):$().set(e,r);}function Je(e){if(_){if(w.getItem(e))return w.removeItem(e),true}else if($().has(e))return $().delete(e),true;return false}var D=new Proxy({},{});Object.defineProperty(globalThis,"store",{value:D,enumerable:false,configurable:true});Object.defineProperties(D,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key \u2014 returning null"),null;try{return ze(ce(e))}catch(t){exports.message(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let s=D.get(r);s&&(t[r]=s);}catch(s){console.debug(`[memorio store] getMultiple error for key "${r}":`,s);}return t}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio store] store.set() called with empty or null key \u2014 write aborted"),false;let r=ce(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable \u2014 write aborted for key: "+e),exports.message("Storing functions is not secure and is blocked for safety."),false;try{qe(r,t);}catch(s){return exports.message(`Error setting store item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.debug("[memorio store] store.remove() called with empty or null key \u2014 returning false"),false;let t=ce(e);if(!t)return false;try{return Je(t)}catch(r){exports.message(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>D.remove(e)},removeAll:{value:()=>{if(_){let e=[];for(let t=0;t<w.length;t++){let r=w.key(t);r?.startsWith(k())&&e.push(r);}e.forEach(t=>w.removeItem(t));}else $().clear();return true}},clearAll:{value:()=>(D.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return _?Object.keys(w).forEach(t=>{if(t.startsWith(k())){let r=w.getItem(t);r&&(e+=r.length);}}):$().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>_},list:{value:()=>{let e={};try{if(_)for(let t=0;t<w.length;t++){let r=w.key(t);if(r?.startsWith(k())){let s=r.replace(k(),""),o=w.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else $().forEach((t,r)=>{if(r.startsWith(k())){let s=r.replace(k(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){exports.message(`Error listing store items: ${t}`);}return e}}});Object.freeze(D);a();B();P();b();var S=te(),ue=new Map;function R(){let t=exports.internal.currentContext||""||"default";return ue.has(t)||ue.set(t,new Map),ue.get(t)}var A=S!==null;function I(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_session_"}function fe(e){return !e||typeof e!="string"?(console.warn("[memorio session] key is empty or not a string \u2014 operation aborted"),""):e.length>512?(console.warn(`[memorio session] key "${e}" exceeds 512 chars \u2014 operation aborted`),""):I()+e}function Ue(e){let t=A?S.getItem(e):R().get(e);return t&&JSON.parse(t)}function Ve(e,t){let r=JSON.stringify(t);A?S.setItem(e,r):R().set(e,r);}function Ke(e){if(A){if(S.getItem(e))return S.removeItem(e),true}else if(R().has(e))return R().delete(e),true;return false}var C=new Proxy({},{});Object.defineProperty(globalThis,"session",{value:C,enumerable:false,configurable:true});Object.defineProperties(C,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key \u2014 returning null"),null;try{return Ue(fe(e))}catch(t){exports.message(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key \u2014 write aborted"),false;let r=fe(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable \u2014 write aborted for key: "+e),exports.message("It's not secure to session functions."),false;try{Ve(r,t);}catch(s){return exports.message(`Error setting session item '${e}': ${s}`),false}return true}},remove:{value:e=>{if(!e)return console.warn("[memorio session] session.remove() called with empty or null key \u2014 returning false"),false;let t=fe(e);if(!t)return false;try{return Ke(t)}catch(r){exports.message(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>C.remove(e)},removeAll:{value:()=>{if(A){let e=[];for(let t=0;t<S.length;t++){let r=S.key(t);r?.startsWith(I())&&e.push(r);}e.forEach(t=>S.removeItem(t));}else R().clear();return true}},clearAll:{value:()=>(C.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return A?Object.keys(S).forEach(t=>{if(t.startsWith(I())){let r=S.getItem(t);r&&(e+=r.length);}}):R().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>A},list:{value:()=>{let e={};try{if(A)for(let t=0;t<S.length;t++){let r=S.key(t);if(r?.startsWith(I())){let s=r.replace(I(),""),o=S.getItem(r);if(o!==null)try{e[s]=JSON.parse(o);}catch{e[s]=o;}}}else R().forEach((t,r)=>{if(r.startsWith(I())){let s=r.replace(I(),"");try{e[s]=JSON.parse(t);}catch{e[s]=t;}}});}catch(t){exports.message(`Error listing session items: ${t}`);}return e}}});Object.freeze(C);a();var T={},F=new Proxy({},{get(e,t){let r=t;return r==="get"?s=>T[s]:r==="set"?(s,o)=>{T[s]=o;}:r==="remove"?s=>(delete T[s],true):r==="removeAll"?()=>(Object.keys(T).forEach(s=>delete T[s]),true):r==="clear"?()=>(Object.keys(T).forEach(s=>delete T[s]),true):r==="list"?()=>({...T}):T[r]},set(e,t,r){return T[t]=r,true},deleteProperty(e,t){return delete T[t],true}});Object.freeze(F);x();a();b();var Ie=false,it=(e,t=null,r=true)=>{Ie||(console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.'),Ie=true);let s=n=>typeof n=="string"?n:n&&typeof n=="object"&&n.__path?n.__path:null,o=s(e);if(!e&&!t){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&t){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(o){let n=o.split(".");if(n[0]!=="state"&&n[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${o}' string is incorrect!`);return}}if(e&&!t){let n=s(e);if(!n)return;globalThis.observer?.list?.[n]&&v.remove(n),c(`called: ${n}`);return}if(e&&t){let n=s(e);if(!n)return;if(typeof e!="string"&&!(e&&typeof e=="object")){console.error("Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value");return}let i=Array.isArray(t)?t:[t];globalThis.observer?.list?.[n]&&v.remove(n),i.forEach(p=>{typeof p=="function"&&v.listen(n,p,r);});return}},W=it;Object.defineProperties(W,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(v.remove(e),delete globalThis.events[e]);}},removeAll:{get:()=>{let e=globalThis.observer,t=e?.list;return t&&Object.keys(t).forEach(r=>{e?.remove?.(r);}),true}},has:{value:e=>!!globalThis.observer?.list?.[e]}});a();b();P();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:true,enumerable:false,configurable:true});var H=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],s=Array.isArray(t)&&!t.__path?t:[t];try{return s.forEach(o=>{let n="";if(typeof o=="function"){let i=exports.propertyName(o);i&&(n=i);}else typeof o=="object"&&o!==null&&(n=o.__path||(typeof o.toString=="function"&&o.toString()!=="[object Object]"?o.toString():""));if(n){n=n.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=n.startsWith("store.")||n.startsWith("state.")?n:"state."+n;v.listen(i,()=>e()),r.push(i);}else {exports.internal.clearTrackedPaths(),exports.internal.tracking=!0;try{e();}catch{}exports.internal.tracking=!1,exports.internal.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),v.listen(i,()=>e()),r.push(i));});}}),r.length>0?c(`useObserver: Monitoring ${r.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{r.forEach(o=>{typeof v.remove=="function"&&(v.remove(o),c(`useObserver: Stopped monitoring "${o}"`));});}}catch(o){return c(`useObserver Error: ${o}`),()=>{}}});globalThis.useObserver=H;Object.freeze(globalThis.useObserver);b();a();P();function at(){return exports.internal.debug===true}function Ae(){if(!globalThis.store)return {};let e={},t=globalThis.store;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}function Re(){if(!globalThis.session)return {};let e={},t=globalThis.session;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let s=t.get(r);s!=null&&(e[r]=s);}catch{}}return e}var lt=()=>{if(at()){if(globalThis.state){let e=globalThis.state.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.state,console.table(t);}if(globalThis.store&&console.table(Ae()),globalThis.session&&console.table(Re()),globalThis.cache){let e=globalThis.cache.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.cache,console.table(t);}}},ct=()=>{let e=t=>{if(!t)return 0;if(typeof t.list=="function")try{let r=t.list();return Object.keys(r).length}catch{}return Object.keys(t).length};return {stateKeys:e(globalThis.state),storeKeys:e(globalThis.store),sessionKeys:e(globalThis.session),cacheKeys:e(globalThis.cache),idbDatabases:0,lastUpdate:new Date().toISOString()}},U=e=>{globalThis[e]&&typeof globalThis[e].clear=="function"?globalThis[e].clear():console.error(`Module ${e} not found or does not support clear()`);},ut=()=>{U("state"),U("store"),U("session"),U("cache");},ft=()=>{let e=()=>{if(globalThis.state)try{return typeof globalThis.state.list=="function"?globalThis.state.list():globalThis.state}catch{return}},t=()=>Ae(),r=()=>Re(),s=()=>{if(globalThis.cache)try{return typeof globalThis.cache.list=="function"?globalThis.cache.list():globalThis.cache}catch{return}},o={state:e(),store:t(),session:r(),cache:s(),exportedAt:new Date().toISOString()};return JSON.stringify(o,null,2)},dt=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,s])=>{globalThis.state&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(globalThis.state[r]=s);}),t.store&&globalThis.store&&typeof globalThis.store.set=="function"&&Object.entries(t.store).forEach(([r,s])=>{globalThis.store.set(r,s);}),t.session&&globalThis.session&&typeof globalThis.session.set=="function"&&Object.entries(t.session).forEach(([r,s])=>{globalThis.session.set(r,s);}),t.cache&&globalThis.cache&&Object.entries(t.cache).forEach(([r,s])=>{globalThis.cache&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(globalThis.cache[r]=s);});}catch(t){console.error("%c\u2717 Import failed:","color: #F44336",t);}},mt=(e,t)=>{if(!globalThis[e]){console.error(`Module ${e} not found`);return}let r=globalThis[e],s=r[t];if(console.debug(`\u{1F441} Watching ${e}.${t} (initial: ${JSON.stringify(s)})`),e==="state"&&globalThis.memorio?.dispatch){let o=n=>{n.detail?.name?.includes(t)&&console.debug(`\u{1F441} Change: ${e}.${t} =`,n.detail.value);};r.addEventListener?.("memorio-change",o);}},gt=()=>{console.debug(`
|
|
1939
2
|
\u{1F9E0} Memorio DevTools Help
|
|
1940
3
|
|
|
1941
4
|
Available commands:
|
|
@@ -1953,228 +16,10 @@ Shortcuts:
|
|
|
1953
16
|
store - globalThis.store
|
|
1954
17
|
session - globalThis.session
|
|
1955
18
|
cache - globalThis.cache
|
|
1956
|
-
`);
|
|
1957
|
-
};
|
|
1958
|
-
var devtools =
|
|
1959
|
-
|
|
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
|
|
19
|
+
`);},de={inspect:lt,stats:ct,clear:U,clearAll:ut,exportData:ft,importData:dt,watch:mt,help:gt};a();P();b();var bt={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function pt(){return exports.internal.debug===true}var E={...bt},j=[],yt=e=>{E={...E,...e};},ht=()=>{E.enabled=true;},vt=()=>{E.enabled=false;},Be=e=>E.enabled&&E.modules.includes(e),xt=(e,t,r,s,o)=>{if(!Be(e))return;let n={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:s,previousValue:o};if(j.push(n),j.length>E.maxEntries&&j.shift(),E.logToConsole&&pt()){let i=`[Memorio:${e.toUpperCase()}]`,m=wt(e);c(`%c${i}%c ${t} ${r},
|
|
20
|
+
color: ${m}; font-weight: bold,
|
|
21
|
+
color: inherit`),s!==void 0&&c(` \u2192 value:${s}`),o!==void 0&&c(` \u2190 previous:${o}`);}E.customHandler&&E.customHandler(n);},wt=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",St=()=>[...j],Pt=()=>{j.length=0;},Tt=()=>{let e={total:j.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of j)if(t){let r=t.module,s=t.action;r&&typeof e[r]=="number"&&e[r]++,s&&typeof e[s]=="number"&&e[s]++;}return e},Ot=()=>JSON.stringify(j,null,2),me={configure:yt,enable:ht,disable:vt,isEnabled:Be,log:xt,getHistory:St,clearHistory:Pt,getStats:Tt,exportLogs:Ot};P();B();a();B();P();var ge={version:"4.7.0"};x();b();Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:v,message:exports.message,devtools:de,logger:me,setDescription:()=>{}},writable:false,configurable:true,enumerable:false});Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false});Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:ge.version});Object.defineProperty(memorio,"debug",{get:()=>exports.internal.debug,set:e=>{exports.internal.debug=e;},enumerable:false});var Me=q();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:Me.platform});Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:Me});Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:K()});ve();memorio.isBrowser=Q;memorio.isNode=X;memorio.isDeno=Z;memorio.isEdge=ee;memorio.getCapabilities=q;memorio.createContext=J;memorio.listContexts=ne;memorio.deleteContext=ie;memorio.isolate=e=>J(e);Object.defineProperty(globalThis,"state",{value:N,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"store",{value:D,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"session",{value:C,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"cache",{value:F,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"idb",{value:exports.idb,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"observer",{value:W,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"useObserver",{value:H,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"dispatch",{value:v,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:e=>ae(e)});Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>exports.internal.currentContext});Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true});Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true});Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true});Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true});memorio.help=function(){console.debug(`
|
|
22
|
+
\u{1F9E0} Memorio ${ge.version} - Help
|
|
2178
23
|
|
|
2179
24
|
Core Modules:
|
|
2180
25
|
state - Reactive state management
|
|
@@ -2206,39 +51,4 @@ DevTools:
|
|
|
2206
51
|
|
|
2207
52
|
Shortcuts:
|
|
2208
53
|
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;
|
|
54
|
+
`);};var Dt=globalThis.memorio,Ao=globalThis.events,Ro=e=>J(e),Bo=globalThis.memorio?.help,Mo=e=>exports.internal.currentContext=e,No=()=>exports.internal.currentContext,Lo=Dt;exports.cache=F;exports.createContext=J;exports.default=Lo;exports.deleteContext=ie;exports.devtools=de;exports.dispatch=v;exports.events=Ao;exports.getCapabilities=q;exports.getContext=No;exports.help=Bo;exports.isBrowser=Q;exports.isDeno=Z;exports.isEdge=ee;exports.isNode=X;exports.isolate=Ro;exports.listContexts=ne;exports.logger=me;exports.memorio=Dt;exports.observer=W;exports.session=C;exports.setContext=Mo;exports.state=N;exports.store=D;exports.useObserver=H;
|