@buoy-gg/storage 7.0.32 → 7.0.34
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/lib/commonjs/preset.js +8 -22
- package/lib/commonjs/storage/components/GameUIStorageBrowser.js +54 -13
- package/lib/commonjs/storage/components/StorageModalWithTabs.js +61 -155
- package/lib/commonjs/storage/hooks/useStorageEvents.js +15 -52
- package/lib/commonjs/storage/utils/snapshotProvider.js +37 -100
- package/lib/module/preset.js +7 -20
- package/lib/module/storage/components/GameUIStorageBrowser.js +55 -14
- package/lib/module/storage/components/StorageModalWithTabs.js +63 -157
- package/lib/module/storage/hooks/useStorageEvents.js +16 -53
- package/lib/module/storage/utils/snapshotProvider.js +38 -101
- package/lib/typescript/preset.d.ts +2 -8
- package/lib/typescript/preset.d.ts.map +1 -1
- package/lib/typescript/storage/components/GameUIStorageBrowser.d.ts.map +1 -1
- package/lib/typescript/storage/components/StorageModalWithTabs.d.ts.map +1 -1
- package/lib/typescript/storage/hooks/useStorageEvents.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
import {
|
|
28
|
+
import { useMemo } from "react";
|
|
29
|
+
import { useEventStoreEvents } from "@buoy-gg/shared-ui";
|
|
29
30
|
import { storageEventStore } from "../stores/storageEventStore";
|
|
30
31
|
|
|
31
32
|
// Re-export StorageEvent for convenience
|
|
@@ -36,60 +37,22 @@ export function useStorageEvents(options = {}) {
|
|
|
36
37
|
maxEvents = 500,
|
|
37
38
|
enabled = true
|
|
38
39
|
} = options;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// Frame-coalesced (same pattern as network's useNetworkEventList):
|
|
53
|
-
// bursts of storage writes land as ONE commit per frame instead of
|
|
54
|
-
// one per emission — the dominant live-churn cost measured on the
|
|
55
|
-
// network tool (tool-bench 2026-07-06).
|
|
56
|
-
let rafId = null;
|
|
57
|
-
let pending = null;
|
|
58
|
-
const unsubscribe = storageEventStore.subscribeToEvents(allEvents => {
|
|
59
|
-
pending = allEvents;
|
|
60
|
-
if (rafId != null) return;
|
|
61
|
-
rafId = requestAnimationFrame(() => {
|
|
62
|
-
rafId = null;
|
|
63
|
-
if (!pending) return;
|
|
64
|
-
// Filter by storage type if specified
|
|
65
|
-
let filtered = pending;
|
|
66
|
-
pending = null;
|
|
67
|
-
if (storageType !== "all") {
|
|
68
|
-
filtered = filtered.filter(e => e.storageType === storageType);
|
|
69
|
-
}
|
|
70
|
-
// Limit events
|
|
71
|
-
if (filtered.length > maxEvents) {
|
|
72
|
-
filtered = filtered.slice(0, maxEvents);
|
|
73
|
-
}
|
|
74
|
-
setEvents(filtered);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Mark as capturing after successful subscription
|
|
79
|
-
setIsCapturing(true);
|
|
80
|
-
return () => {
|
|
81
|
-
unsubscribe();
|
|
82
|
-
if (rafId != null) cancelAnimationFrame(rafId);
|
|
83
|
-
// Note: Don't set isCapturing=false here because we might be
|
|
84
|
-
// re-subscribing due to dependency change, not actually stopping
|
|
85
|
-
};
|
|
86
|
-
}, [storageType, maxEvents, enabled]);
|
|
87
|
-
const clearEvents = useCallback(() => {
|
|
88
|
-
storageEventStore.clearEvents();
|
|
89
|
-
}, []);
|
|
40
|
+
// Stable per storageType so the shared hook doesn't resubscribe every render.
|
|
41
|
+
const select = useMemo(() => storageType === "all" ? undefined : events => events.filter(e => e.storageType === storageType), [storageType]);
|
|
42
|
+
// Subscribing auto-starts the storage listener (Subscribable pattern), and
|
|
43
|
+
// the shared hook frame-coalesces write bursts into one commit.
|
|
44
|
+
const {
|
|
45
|
+
events,
|
|
46
|
+
clearEvents,
|
|
47
|
+
isActive
|
|
48
|
+
} = useEventStoreEvents(storageEventStore, {
|
|
49
|
+
maxEvents,
|
|
50
|
+
enabled,
|
|
51
|
+
select
|
|
52
|
+
});
|
|
90
53
|
return {
|
|
91
54
|
events,
|
|
92
55
|
clearEvents,
|
|
93
|
-
isCapturing
|
|
56
|
+
isCapturing: isActive
|
|
94
57
|
};
|
|
95
58
|
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* - SecureStore keys outside the registered descriptor list are invisible.
|
|
19
19
|
*/
|
|
20
20
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
21
|
-
import { isDevToolsStorageKey, registerStateSnapshotProvider } from "@buoy-gg/shared-ui";
|
|
21
|
+
import { classifyPreviewItem, createRestoreScope, emptyRestoreResult, failedRestore, isDevToolsStorageKey, registerStateSnapshotProvider, unionKeys, wontApply } from "@buoy-gg/shared-ui";
|
|
22
22
|
import { readMany, writeMany, removeMany } from "./asyncStorageCompat";
|
|
23
23
|
import { clearAllAppStorage } from "./clearAllStorage";
|
|
24
24
|
import { mmkvInstanceRegistry } from "./MMKVInstanceRegistry";
|
|
@@ -106,24 +106,12 @@ async function capture() {
|
|
|
106
106
|
}
|
|
107
107
|
async function restore(data, options) {
|
|
108
108
|
const snapshot = data;
|
|
109
|
-
const
|
|
110
|
-
const includedSet = options?.includeKeys ? new Set(options.includeKeys) : null;
|
|
109
|
+
const scope = createRestoreScope(options);
|
|
111
110
|
/** True when this item may be touched (scope + exclusions agree). */
|
|
112
|
-
const touch =
|
|
113
|
-
|
|
114
|
-
const result = {
|
|
115
|
-
ok: true,
|
|
116
|
-
applied: 0,
|
|
117
|
-
skipped: [],
|
|
118
|
-
warnings: []
|
|
119
|
-
};
|
|
111
|
+
const touch = scope.touch;
|
|
112
|
+
const result = emptyRestoreResult();
|
|
120
113
|
if (!snapshot) {
|
|
121
|
-
return
|
|
122
|
-
ok: false,
|
|
123
|
-
applied: 0,
|
|
124
|
-
skipped: [],
|
|
125
|
-
warnings: ["empty storage snapshot"]
|
|
126
|
-
};
|
|
114
|
+
return failedRestore("empty storage snapshot");
|
|
127
115
|
}
|
|
128
116
|
|
|
129
117
|
// ── AsyncStorage: delete app keys missing from the snapshot, write the rest ──
|
|
@@ -132,7 +120,7 @@ async function restore(data, options) {
|
|
|
132
120
|
const snapKeys = new Set(snapPairs.map(([k]) => k));
|
|
133
121
|
const liveKeys = (await AsyncStorage.getAllKeys()).filter(k => !isDevToolsStorageKey(k));
|
|
134
122
|
const toRemove = liveKeys.filter(k => !snapKeys.has(k) && touch(`async:${k}`));
|
|
135
|
-
|
|
123
|
+
scope.countExcluded((snapshot.async ?? []).length - snapPairs.length);
|
|
136
124
|
if (toRemove.length > 0) await removeMany(toRemove);
|
|
137
125
|
if (snapPairs.length > 0) await writeMany(snapPairs);
|
|
138
126
|
result.applied += snapPairs.length + toRemove.length;
|
|
@@ -165,10 +153,7 @@ async function restore(data, options) {
|
|
|
165
153
|
const snapKeys = new Set(entries.map(e => e.key));
|
|
166
154
|
const liveKeys = instance.getAllKeys().filter(key => !isDevToolsStorageKey(key));
|
|
167
155
|
for (const key of liveKeys) {
|
|
168
|
-
if (!
|
|
169
|
-
excludedHits += 1;
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
156
|
+
if (!scope.allows(`mmkv:${id}/${key}`)) continue;
|
|
172
157
|
if (!snapKeys.has(key)) {
|
|
173
158
|
deleteMMKVKey(instance, key);
|
|
174
159
|
result.applied += 1;
|
|
@@ -199,10 +184,7 @@ async function restore(data, options) {
|
|
|
199
184
|
key,
|
|
200
185
|
options
|
|
201
186
|
} of secureStoreRegistry.getAll()) {
|
|
202
|
-
if (!
|
|
203
|
-
excludedHits += 1;
|
|
204
|
-
continue;
|
|
205
|
-
}
|
|
187
|
+
if (!scope.allows(`secure:${key}`)) continue;
|
|
206
188
|
if (options.requireAuthentication) {
|
|
207
189
|
if (key in secureSnap) {
|
|
208
190
|
result.skipped.push({
|
|
@@ -235,20 +217,14 @@ async function restore(data, options) {
|
|
|
235
217
|
});
|
|
236
218
|
}
|
|
237
219
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
220
|
+
const excludedWarning = scope.excludedWarning("item(s)");
|
|
221
|
+
if (excludedWarning) result.warnings.push(excludedWarning);
|
|
241
222
|
return result;
|
|
242
223
|
}
|
|
243
224
|
|
|
244
225
|
/** Wipe to fresh-install state (Buoy keys preserved). Used by baseline restore. */
|
|
245
226
|
async function clear() {
|
|
246
|
-
const result =
|
|
247
|
-
ok: true,
|
|
248
|
-
applied: 0,
|
|
249
|
-
skipped: [],
|
|
250
|
-
warnings: []
|
|
251
|
-
};
|
|
227
|
+
const result = emptyRestoreResult();
|
|
252
228
|
try {
|
|
253
229
|
await clearAllAppStorage();
|
|
254
230
|
result.applied += 1;
|
|
@@ -299,40 +275,24 @@ async function clear() {
|
|
|
299
275
|
return result;
|
|
300
276
|
}
|
|
301
277
|
const ITEM_RENDER_CHAR_LIMIT = 256 * 1024;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Storage values are strings (or MMKV primitives): identity equality and a
|
|
281
|
+
* character-length size gate are the right tests, not a deep walk.
|
|
282
|
+
*/
|
|
302
283
|
function classifyValue(key, label, oldValue, newValue, inOld, inNew) {
|
|
303
|
-
|
|
284
|
+
return classifyPreviewItem({
|
|
304
285
|
key,
|
|
305
286
|
label,
|
|
306
|
-
verdict: "removed",
|
|
307
|
-
oldValue
|
|
308
|
-
};
|
|
309
|
-
if (!inOld) return {
|
|
310
|
-
key,
|
|
311
|
-
label,
|
|
312
|
-
verdict: "added",
|
|
313
|
-
newValue
|
|
314
|
-
};
|
|
315
|
-
if (Object.is(oldValue, newValue)) return {
|
|
316
|
-
key,
|
|
317
|
-
label,
|
|
318
|
-
verdict: "unchanged"
|
|
319
|
-
};
|
|
320
|
-
const tooLarge = typeof oldValue === "string" && oldValue.length > ITEM_RENDER_CHAR_LIMIT || typeof newValue === "string" && newValue.length > ITEM_RENDER_CHAR_LIMIT;
|
|
321
|
-
if (tooLarge) {
|
|
322
|
-
return {
|
|
323
|
-
key,
|
|
324
|
-
label,
|
|
325
|
-
verdict: "too-large",
|
|
326
|
-
reason: "value too large to render a diff — restore still applies it"
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
return {
|
|
330
|
-
key,
|
|
331
|
-
label,
|
|
332
|
-
verdict: "changed",
|
|
333
287
|
oldValue,
|
|
334
|
-
newValue
|
|
335
|
-
|
|
288
|
+
newValue,
|
|
289
|
+
inOld,
|
|
290
|
+
inNew
|
|
291
|
+
}, {
|
|
292
|
+
equal: Object.is,
|
|
293
|
+
tooLarge: value => typeof value === "string" && value.length > ITEM_RENDER_CHAR_LIMIT,
|
|
294
|
+
tooLargeReason: "value too large to render a diff — restore still applies it"
|
|
295
|
+
});
|
|
336
296
|
}
|
|
337
297
|
|
|
338
298
|
/** Per-key restore preview across all three backends. */
|
|
@@ -354,46 +314,31 @@ async function previewItems(target, base) {
|
|
|
354
314
|
// ── AsyncStorage ──
|
|
355
315
|
const oldAsync = new Map(baseData.async ?? []);
|
|
356
316
|
const newAsync = new Map(targetData.async ?? []);
|
|
357
|
-
for (const key of
|
|
317
|
+
for (const key of unionKeys(oldAsync, newAsync)) {
|
|
358
318
|
if (isDevToolsStorageKey(key)) continue;
|
|
359
319
|
items.push(classifyValue(`async:${key}`, key, oldAsync.get(key), newAsync.get(key), oldAsync.has(key), newAsync.has(key)));
|
|
360
320
|
}
|
|
361
321
|
|
|
362
322
|
// ── MMKV ──
|
|
363
|
-
const
|
|
364
|
-
for (const id of instanceIds) {
|
|
323
|
+
for (const id of unionKeys(baseData.mmkv, targetData.mmkv)) {
|
|
365
324
|
const registered = liveMode ? mmkvInstanceRegistry.get(id) : null;
|
|
366
325
|
const instanceUnavailable = liveMode && !registered;
|
|
367
326
|
const readOnly = liveMode && registered?.instance.isReadOnly === true;
|
|
368
327
|
const oldEntries = new Map((baseData.mmkv?.[id] ?? []).map(e => [e.key, e]));
|
|
369
328
|
const newEntries = new Map((targetData.mmkv?.[id] ?? []).map(e => [e.key, e]));
|
|
370
|
-
for (const key of
|
|
329
|
+
for (const key of unionKeys(oldEntries, newEntries)) {
|
|
371
330
|
if (isDevToolsStorageKey(key)) continue;
|
|
372
331
|
const itemKey = `mmkv:${id}/${key}`;
|
|
373
332
|
const label = `${id} · ${key}`;
|
|
374
333
|
const oldE = oldEntries.get(key);
|
|
375
334
|
const newE = newEntries.get(key);
|
|
376
335
|
let item = classifyValue(itemKey, label, oldE?.value, newE?.value, oldEntries.has(key), newEntries.has(key));
|
|
377
|
-
if (
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
};
|
|
384
|
-
} else if (readOnly) {
|
|
385
|
-
item = {
|
|
386
|
-
...item,
|
|
387
|
-
verdict: "wont-apply",
|
|
388
|
-
reason: "MMKV instance registered read-only"
|
|
389
|
-
};
|
|
390
|
-
} else if (newE?.valueType === "buffer" || oldE?.valueType === "buffer") {
|
|
391
|
-
item = {
|
|
392
|
-
...item,
|
|
393
|
-
verdict: "wont-apply",
|
|
394
|
-
reason: "ArrayBuffer values cannot be restored"
|
|
395
|
-
};
|
|
396
|
-
}
|
|
336
|
+
if (instanceUnavailable) {
|
|
337
|
+
item = wontApply(item, "MMKV instance not registered");
|
|
338
|
+
} else if (readOnly) {
|
|
339
|
+
item = wontApply(item, "MMKV instance registered read-only");
|
|
340
|
+
} else if (newE?.valueType === "buffer" || oldE?.valueType === "buffer") {
|
|
341
|
+
item = wontApply(item, "ArrayBuffer values cannot be restored");
|
|
397
342
|
}
|
|
398
343
|
items.push(item);
|
|
399
344
|
}
|
|
@@ -403,22 +348,14 @@ async function previewItems(target, base) {
|
|
|
403
348
|
const oldSecure = baseData.secure ?? {};
|
|
404
349
|
const newSecure = targetData.secure ?? {};
|
|
405
350
|
const registeredSecure = liveMode ? new Map(secureStoreRegistry.getAll().map(e => [e.key, e])) : null;
|
|
406
|
-
for (const key of
|
|
351
|
+
for (const key of unionKeys(oldSecure, newSecure)) {
|
|
407
352
|
let item = classifyValue(`secure:${key}`, key, oldSecure[key], newSecure[key], key in oldSecure, key in newSecure);
|
|
408
|
-
if (liveMode
|
|
353
|
+
if (liveMode) {
|
|
409
354
|
const entry = registeredSecure?.get(key);
|
|
410
355
|
if (!entry) {
|
|
411
|
-
item =
|
|
412
|
-
...item,
|
|
413
|
-
verdict: "wont-apply",
|
|
414
|
-
reason: "key no longer registered with registerSecureStoreKeys"
|
|
415
|
-
};
|
|
356
|
+
item = wontApply(item, "key no longer registered with registerSecureStoreKeys");
|
|
416
357
|
} else if (entry.options.requireAuthentication) {
|
|
417
|
-
item =
|
|
418
|
-
...item,
|
|
419
|
-
verdict: "wont-apply",
|
|
420
|
-
reason: "biometric-protected keys are never written"
|
|
421
|
-
};
|
|
358
|
+
item = wontApply(item, "biometric-protected keys are never written");
|
|
422
359
|
}
|
|
423
360
|
}
|
|
424
361
|
items.push(item);
|
|
@@ -62,18 +62,12 @@ export declare const storageToolPreset: {
|
|
|
62
62
|
* });
|
|
63
63
|
* ```
|
|
64
64
|
*/
|
|
65
|
-
export declare
|
|
66
|
-
/** Tool name (default: "STORAGE") */
|
|
67
|
-
name?: string;
|
|
68
|
-
/** Tool description */
|
|
69
|
-
description?: string;
|
|
70
|
-
/** Custom tool ID (default: "storage") */
|
|
71
|
-
id?: string;
|
|
65
|
+
export declare const createStorageTool: (options?: ({
|
|
72
66
|
/** Array of required storage keys to validate */
|
|
73
67
|
requiredStorageKeys?: RequiredStorageKey[];
|
|
74
68
|
/** Enable shared modal dimensions */
|
|
75
69
|
enableSharedModalDimensions?: boolean;
|
|
76
|
-
})
|
|
70
|
+
} & import("@buoy-gg/shared-ui").ToolPresetOverrides) | undefined) => {
|
|
77
71
|
id: string;
|
|
78
72
|
name: string;
|
|
79
73
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;;qBAKX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;6BAGJ,kBAAkB,EAAE;;;CAGjD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,iBAAiB;IAG1B,iDAAiD;0BAC3B,kBAAkB,EAAE;IAC1C,qCAAqC;kCACP,OAAO;;;;;;qBAtCtB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;6BAGJ,kBAAkB,EAAE;;;CAwClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameUIStorageBrowser.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/GameUIStorageBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,gBAAgB,EACjB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GameUIStorageBrowser.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/GameUIStorageBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,gBAAgB,EACjB,MAAM,OAAO,CAAC;AAmBf,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAmB,MAAM,UAAU,CAAC;AAK/E,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AA4C9B;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAmC,CAAC;AAEpE,UAAU,yBAAyB;IACjC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACvD;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3D,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,yCAAyC;IACzC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9D,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,mBAAwB,EACxB,WAAmB,EACnB,eAA0C,EAC1C,eAAe,EACf,YAAY,EACZ,WAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,SAAgB,EAChB,SAAS,EACT,aAAa,GACd,EAAE,yBAAyB,+BA2nC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageModalWithTabs.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageModalWithTabs.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageModalWithTabs.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageModalWithTabs.tsx"],"names":[],"mappings":"AAmCA,OAAO,EAAE,kBAAkB,EAAkB,MAAM,UAAU,CAAC;AAY9D,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAchF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAqC,CAAC;AAExE,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AA0DD,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,mBAAwB,EACxB,MAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,yBAAyB,sCA24B3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,GAAE,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAG9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageEvents.d.ts","sourceRoot":"","sources":["../../../../src/storage/hooks/useStorageEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"useStorageEvents.d.ts","sourceRoot":"","sources":["../../../../src/storage/hooks/useStorageEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACvC,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,wCAAwC;IACxC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,uBAAuB;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0DAA0D;IAC1D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAkBxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/storage",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.34",
|
|
4
4
|
"description": "Browse & edit AsyncStorage, MMKV & SecureStore inside your React Native app, with change history. Part of Buoy devtools.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"**/snapshotProvider.ts"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@buoy-gg/floating-tools-core": "^7.0.
|
|
33
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
32
|
+
"@buoy-gg/floating-tools-core": "^7.0.34",
|
|
33
|
+
"@buoy-gg/shared-ui": "^7.0.34"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@buoy-gg/license": "7.0.
|
|
36
|
+
"@buoy-gg/license": "7.0.34",
|
|
37
37
|
"@react-native-async-storage/async-storage": "^2.0.0 || ^3.1.0",
|
|
38
38
|
"react": "*",
|
|
39
39
|
"react-native": "*"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@types/react": "^19.1.0",
|
|
44
44
|
"@types/react-native": "^0.73.0",
|
|
45
45
|
"typescript": "~5.8.3",
|
|
46
|
-
"@buoy-gg/license": "^7.0.
|
|
46
|
+
"@buoy-gg/license": "^7.0.34"
|
|
47
47
|
},
|
|
48
48
|
"react-native-builder-bob": {
|
|
49
49
|
"source": "src",
|