@rozenite/storage-plugin 1.7.0 → 1.8.1
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/CHANGELOG.md +30 -0
- package/README.md +6 -0
- package/dist/devtools/assets/{panel-9uIwTlU4.js → panel-eGOuOVos.js} +6 -6
- package/dist/devtools/panel.html +1 -1
- package/dist/react-native/chunks/async-storage.require.cjs +1 -0
- package/dist/react-native/chunks/async-storage.require.js +52 -0
- package/dist/react-native/chunks/index.require.cjs +1 -1
- package/dist/react-native/chunks/index.require.js +76 -159
- package/dist/react-native/chunks/secure-storage.require.cjs +1 -0
- package/dist/react-native/chunks/secure-storage.require.js +42 -0
- package/dist/react-native/chunks/useRozeniteStoragePlugin.require.cjs +1 -1
- package/dist/react-native/chunks/useRozeniteStoragePlugin.require.js +148 -135
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.d.ts +1 -1
- package/dist/react-native/index.js +20 -19
- package/dist/rozenite.json +1 -1
- package/dist/sdk/index.cjs +1 -0
- package/dist/sdk/index.d.ts +197 -0
- package/dist/sdk/index.js +113 -0
- package/package.json +14 -6
- package/react-native.ts +33 -21
- package/sdk.ts +44 -0
- package/src/react-native/useStorageAgentTools.ts +24 -146
- package/src/shared/agent-tools.ts +213 -0
- package/tsconfig.json +3 -1
- package/vite.config.ts +3 -0
package/dist/devtools/panel.html
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<script>
|
|
23
23
|
var __ROZENITE_PANEL__ = true;
|
|
24
24
|
</script>
|
|
25
|
-
<script type="module" crossorigin src="../devtools/assets/panel-
|
|
25
|
+
<script type="module" crossorigin src="../devtools/assets/panel-eGOuOVos.js"></script>
|
|
26
26
|
<link rel="stylesheet" crossorigin href="../devtools/assets/panel-DMhXYHH4.css">
|
|
27
27
|
</head>
|
|
28
28
|
<body>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=(e,r,s,o)=>{const n="storage"in r?r:{storage:r},{storage:a,name:d,blacklist:i}=n;return{id:e,name:d??s??e,blacklist:i??o,capabilities:{supportedTypes:["string"]},storage:{kind:"async",getAllKeys:()=>a.getAllKeys(),get:async t=>{const c=await a.getItem(t);if(c!==null)return{key:t,type:"string",value:c}},set:async t=>{if(t.type!=="string")throw new Error("AsyncStorage adapter supports only string values.");await a.setItem(t.key,t.value)},delete:t=>a.removeItem(t)}}},l=e=>{const{adapterId:r="async-storage",adapterName:s="AsyncStorage"}=e,o="storages"in e?Object.entries(e.storages).map(([n,a])=>g(n,a)):[g(e.storageId??"default",e.storage,e.storageName??"Default Storage",e.blacklist)];return{id:r,name:s,storages:o}},y=l;exports.createAsyncStorageAdapter=l;exports.createExpoAsyncStorageAdapter=y;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const c = (e, r, s, n) => {
|
|
2
|
+
const o = "storage" in r ? r : {
|
|
3
|
+
storage: r
|
|
4
|
+
}, { storage: a, name: l, blacklist: d } = o;
|
|
5
|
+
return {
|
|
6
|
+
id: e,
|
|
7
|
+
name: l ?? s ?? e,
|
|
8
|
+
blacklist: d ?? n,
|
|
9
|
+
capabilities: {
|
|
10
|
+
supportedTypes: ["string"]
|
|
11
|
+
},
|
|
12
|
+
storage: {
|
|
13
|
+
kind: "async",
|
|
14
|
+
getAllKeys: () => a.getAllKeys(),
|
|
15
|
+
get: async (t) => {
|
|
16
|
+
const g = await a.getItem(t);
|
|
17
|
+
if (g !== null)
|
|
18
|
+
return {
|
|
19
|
+
key: t,
|
|
20
|
+
type: "string",
|
|
21
|
+
value: g
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
set: async (t) => {
|
|
25
|
+
if (t.type !== "string")
|
|
26
|
+
throw new Error("AsyncStorage adapter supports only string values.");
|
|
27
|
+
await a.setItem(t.key, t.value);
|
|
28
|
+
},
|
|
29
|
+
delete: (t) => a.removeItem(t)
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}, i = (e) => {
|
|
33
|
+
const { adapterId: r = "async-storage", adapterName: s = "AsyncStorage" } = e, n = "storages" in e ? Object.entries(e.storages).map(
|
|
34
|
+
([o, a]) => c(o, a)
|
|
35
|
+
) : [
|
|
36
|
+
c(
|
|
37
|
+
e.storageId ?? "default",
|
|
38
|
+
e.storage,
|
|
39
|
+
e.storageName ?? "Default Storage",
|
|
40
|
+
e.blacklist
|
|
41
|
+
)
|
|
42
|
+
];
|
|
43
|
+
return {
|
|
44
|
+
id: r,
|
|
45
|
+
name: s,
|
|
46
|
+
storages: n
|
|
47
|
+
};
|
|
48
|
+
}, u = i;
|
|
49
|
+
export {
|
|
50
|
+
i as createAsyncStorageAdapter,
|
|
51
|
+
u as createExpoAsyncStorageAdapter
|
|
52
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./types.cjs"),l=require("./async-storage.require.cjs"),f=require("./secure-storage.require.cjs"),p=t=>!!(t.includes("�")||/[\u0000-\u001F\u007F-\u009F]/.test(t)||[...t].filter(n=>n>=" "&&n<="~").length/t.length<.7),g=t=>"remove"in t,A=t=>{if(Array.isArray(t)){if(t.some(g))throw new Error("[Rozenite] Storage Plugin: MMKV arrays are not supported for v4 storages. Pass a record of storage IDs and MMKV instances.");return Object.fromEntries(t.map(r=>[r.id,r]))}return t},S=t=>g(t)?{set:(e,r)=>t.set(e,r),getBoolean:e=>t.getBoolean(e),getString:e=>t.getString(e),getNumber:e=>t.getNumber(e),getBuffer:e=>t.getBuffer(e),delete:e=>t.remove(e),getAllKeys:()=>t.getAllKeys(),addOnValueChangedListener:e=>t.addOnValueChangedListener(e)}:{set:(e,r)=>t.set(e,r),getBoolean:e=>t.getBoolean(e),getString:e=>t.getString(e),getNumber:e=>t.getNumber(e),getBuffer:e=>t.getBuffer(e),delete:e=>t.delete(e),getAllKeys:()=>t.getAllKeys(),addOnValueChangedListener:e=>t.addOnValueChangedListener(e)},b=(t,e)=>{const r=t.getString(e);if(r!==void 0&&r.length>0)return p(r)?{key:e,type:"buffer",value:Array.from(new TextEncoder().encode(r))}:{key:e,type:"string",value:r};const n=t.getNumber(e);if(n!==void 0)return{key:e,type:"number",value:n};const s=t.getBoolean(e);if(s!==void 0)return{key:e,type:"boolean",value:s};const u=t.getBuffer(e);if(u!==void 0)return{key:e,type:"buffer",value:Array.from(new Uint8Array(u))}},y=(t,e)=>{if(e.type==="buffer"){t.set(e.key,new Uint8Array(e.value).buffer);return}t.set(e.key,e.value)},V=(t,e)=>{if(t)return t instanceof RegExp?t:t[e]},M=({adapterId:t="mmkv",adapterName:e="MMKV",storages:r,blacklist:n})=>{const s=A(r),u=Object.entries(s).map(([i,c])=>{const o=S(c);return{id:i,name:i,blacklist:V(n,i),capabilities:{supportedTypes:d.DEFAULT_SUPPORTED_TYPES},storage:{kind:"sync",getAllKeys:()=>o.getAllKeys(),get:a=>b(o,a),set:a=>y(o,a),delete:a=>o.delete(a),subscribe:a=>o.addOnValueChangedListener(a)}}});return{id:t,name:e,storages:u}};exports.createAsyncStorageAdapter=l.createAsyncStorageAdapter;exports.createExpoAsyncStorageAdapter=l.createExpoAsyncStorageAdapter;exports.createExpoSecureStorageAdapter=f.createExpoSecureStorageAdapter;exports.createMMKVStorageAdapter=M;
|
|
@@ -1,196 +1,113 @@
|
|
|
1
|
-
import { D as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { D as f } from "./types.js";
|
|
2
|
+
import { createAsyncStorageAdapter as h, createExpoAsyncStorageAdapter as B } from "./async-storage.require.js";
|
|
3
|
+
import { createExpoSecureStorageAdapter as O } from "./secure-storage.require.js";
|
|
4
|
+
const d = (t) => !!(t.includes("�") || /[\u0000-\u001F\u007F-\u009F]/.test(t) || [...t].filter((n) => n >= " " && n <= "~").length / t.length < 0.7), l = (t) => "remove" in t, c = (t) => {
|
|
5
|
+
if (Array.isArray(t)) {
|
|
6
|
+
if (t.some(l))
|
|
5
7
|
throw new Error(
|
|
6
8
|
"[Rozenite] Storage Plugin: MMKV arrays are not supported for v4 storages. Pass a record of storage IDs and MMKV instances."
|
|
7
9
|
);
|
|
8
10
|
return Object.fromEntries(
|
|
9
|
-
|
|
11
|
+
t.map((r) => [r.id, r])
|
|
10
12
|
);
|
|
11
13
|
}
|
|
12
|
-
return
|
|
13
|
-
},
|
|
14
|
-
set: (
|
|
15
|
-
getBoolean: (
|
|
16
|
-
getString: (
|
|
17
|
-
getNumber: (
|
|
18
|
-
getBuffer: (
|
|
19
|
-
delete: (
|
|
20
|
-
getAllKeys: () =>
|
|
21
|
-
addOnValueChangedListener: (
|
|
14
|
+
return t;
|
|
15
|
+
}, p = (t) => l(t) ? {
|
|
16
|
+
set: (e, r) => t.set(e, r),
|
|
17
|
+
getBoolean: (e) => t.getBoolean(e),
|
|
18
|
+
getString: (e) => t.getString(e),
|
|
19
|
+
getNumber: (e) => t.getNumber(e),
|
|
20
|
+
getBuffer: (e) => t.getBuffer(e),
|
|
21
|
+
delete: (e) => t.remove(e),
|
|
22
|
+
getAllKeys: () => t.getAllKeys(),
|
|
23
|
+
addOnValueChangedListener: (e) => t.addOnValueChangedListener(e)
|
|
22
24
|
} : {
|
|
23
|
-
set: (
|
|
24
|
-
getBoolean: (
|
|
25
|
-
getString: (
|
|
26
|
-
getNumber: (
|
|
27
|
-
getBuffer: (
|
|
28
|
-
delete: (
|
|
29
|
-
getAllKeys: () =>
|
|
30
|
-
addOnValueChangedListener: (
|
|
31
|
-
},
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
return
|
|
35
|
-
key:
|
|
25
|
+
set: (e, r) => t.set(e, r),
|
|
26
|
+
getBoolean: (e) => t.getBoolean(e),
|
|
27
|
+
getString: (e) => t.getString(e),
|
|
28
|
+
getNumber: (e) => t.getNumber(e),
|
|
29
|
+
getBuffer: (e) => t.getBuffer(e),
|
|
30
|
+
delete: (e) => t.delete(e),
|
|
31
|
+
getAllKeys: () => t.getAllKeys(),
|
|
32
|
+
addOnValueChangedListener: (e) => t.addOnValueChangedListener(e)
|
|
33
|
+
}, b = (t, e) => {
|
|
34
|
+
const r = t.getString(e);
|
|
35
|
+
if (r !== void 0 && r.length > 0)
|
|
36
|
+
return d(r) ? {
|
|
37
|
+
key: e,
|
|
36
38
|
type: "buffer",
|
|
37
|
-
value: Array.from(new TextEncoder().encode(
|
|
39
|
+
value: Array.from(new TextEncoder().encode(r))
|
|
38
40
|
} : {
|
|
39
|
-
key:
|
|
41
|
+
key: e,
|
|
40
42
|
type: "string",
|
|
41
|
-
value:
|
|
43
|
+
value: r
|
|
42
44
|
};
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
+
const n = t.getNumber(e);
|
|
46
|
+
if (n !== void 0)
|
|
45
47
|
return {
|
|
46
|
-
key:
|
|
48
|
+
key: e,
|
|
47
49
|
type: "number",
|
|
48
|
-
value:
|
|
50
|
+
value: n
|
|
49
51
|
};
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
52
|
+
const s = t.getBoolean(e);
|
|
53
|
+
if (s !== void 0)
|
|
52
54
|
return {
|
|
53
|
-
key:
|
|
55
|
+
key: e,
|
|
54
56
|
type: "boolean",
|
|
55
|
-
value:
|
|
57
|
+
value: s
|
|
56
58
|
};
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
+
const u = t.getBuffer(e);
|
|
60
|
+
if (u !== void 0)
|
|
59
61
|
return {
|
|
60
|
-
key:
|
|
62
|
+
key: e,
|
|
61
63
|
type: "buffer",
|
|
62
|
-
value: Array.from(new Uint8Array(
|
|
64
|
+
value: Array.from(new Uint8Array(u))
|
|
63
65
|
};
|
|
64
|
-
},
|
|
65
|
-
if (
|
|
66
|
-
|
|
66
|
+
}, A = (t, e) => {
|
|
67
|
+
if (e.type === "buffer") {
|
|
68
|
+
t.set(e.key, new Uint8Array(e.value).buffer);
|
|
67
69
|
return;
|
|
68
70
|
}
|
|
69
|
-
|
|
70
|
-
}, S = (
|
|
71
|
-
if (
|
|
72
|
-
return
|
|
73
|
-
},
|
|
74
|
-
adapterId:
|
|
75
|
-
adapterName:
|
|
76
|
-
storages:
|
|
77
|
-
blacklist:
|
|
71
|
+
t.set(e.key, e.value);
|
|
72
|
+
}, S = (t, e) => {
|
|
73
|
+
if (t)
|
|
74
|
+
return t instanceof RegExp ? t : t[e];
|
|
75
|
+
}, y = ({
|
|
76
|
+
adapterId: t = "mmkv",
|
|
77
|
+
adapterName: e = "MMKV",
|
|
78
|
+
storages: r,
|
|
79
|
+
blacklist: n
|
|
78
80
|
}) => {
|
|
79
|
-
const
|
|
80
|
-
([
|
|
81
|
-
const
|
|
81
|
+
const s = c(r), u = Object.entries(s).map(
|
|
82
|
+
([i, g]) => {
|
|
83
|
+
const a = p(g);
|
|
82
84
|
return {
|
|
83
|
-
id:
|
|
84
|
-
name:
|
|
85
|
-
blacklist: S(
|
|
85
|
+
id: i,
|
|
86
|
+
name: i,
|
|
87
|
+
blacklist: S(n, i),
|
|
86
88
|
capabilities: {
|
|
87
|
-
supportedTypes:
|
|
89
|
+
supportedTypes: f
|
|
88
90
|
},
|
|
89
91
|
storage: {
|
|
90
92
|
kind: "sync",
|
|
91
|
-
getAllKeys: () =>
|
|
92
|
-
get: (o) =>
|
|
93
|
-
set: (o) =>
|
|
94
|
-
delete: (o) =>
|
|
95
|
-
subscribe: (o) =>
|
|
93
|
+
getAllKeys: () => a.getAllKeys(),
|
|
94
|
+
get: (o) => b(a, o),
|
|
95
|
+
set: (o) => A(a, o),
|
|
96
|
+
delete: (o) => a.delete(o),
|
|
97
|
+
subscribe: (o) => a.addOnValueChangedListener(o)
|
|
96
98
|
}
|
|
97
99
|
};
|
|
98
100
|
}
|
|
99
101
|
);
|
|
100
|
-
return {
|
|
101
|
-
id: e,
|
|
102
|
-
name: t,
|
|
103
|
-
storages: s
|
|
104
|
-
};
|
|
105
|
-
}, g = (e, t, n, a) => {
|
|
106
|
-
const l = "storage" in t ? t : {
|
|
107
|
-
storage: t
|
|
108
|
-
}, { storage: s, name: u, blacklist: i } = l;
|
|
109
|
-
return {
|
|
110
|
-
id: e,
|
|
111
|
-
name: u ?? n ?? e,
|
|
112
|
-
blacklist: i ?? a,
|
|
113
|
-
capabilities: {
|
|
114
|
-
supportedTypes: ["string"]
|
|
115
|
-
},
|
|
116
|
-
storage: {
|
|
117
|
-
kind: "async",
|
|
118
|
-
getAllKeys: () => s.getAllKeys(),
|
|
119
|
-
get: async (r) => {
|
|
120
|
-
const o = await s.getItem(r);
|
|
121
|
-
if (o !== null)
|
|
122
|
-
return {
|
|
123
|
-
key: r,
|
|
124
|
-
type: "string",
|
|
125
|
-
value: o
|
|
126
|
-
};
|
|
127
|
-
},
|
|
128
|
-
set: async (r) => {
|
|
129
|
-
if (r.type !== "string")
|
|
130
|
-
throw new Error("AsyncStorage adapter supports only string values.");
|
|
131
|
-
await s.setItem(r.key, r.value);
|
|
132
|
-
},
|
|
133
|
-
delete: (r) => s.removeItem(r)
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
}, V = (e) => {
|
|
137
|
-
const { adapterId: t = "async-storage", adapterName: n = "AsyncStorage" } = e, a = "storages" in e ? Object.entries(e.storages).map(
|
|
138
|
-
([l, s]) => g(l, s)
|
|
139
|
-
) : [
|
|
140
|
-
g(
|
|
141
|
-
e.storageId ?? "default",
|
|
142
|
-
e.storage,
|
|
143
|
-
e.storageName ?? "Default Storage",
|
|
144
|
-
e.blacklist
|
|
145
|
-
)
|
|
146
|
-
];
|
|
147
102
|
return {
|
|
148
103
|
id: t,
|
|
149
|
-
name:
|
|
150
|
-
storages:
|
|
104
|
+
name: e,
|
|
105
|
+
storages: u
|
|
151
106
|
};
|
|
152
|
-
}
|
|
153
|
-
storage: e,
|
|
154
|
-
keys: t,
|
|
155
|
-
adapterId: n = "expo-secure-store",
|
|
156
|
-
adapterName: a = "Expo SecureStore",
|
|
157
|
-
storageId: l = "default",
|
|
158
|
-
storageName: s = "Default Secure Storage",
|
|
159
|
-
blacklist: u
|
|
160
|
-
}) => ({
|
|
161
|
-
id: n,
|
|
162
|
-
name: a,
|
|
163
|
-
storages: [{
|
|
164
|
-
id: l,
|
|
165
|
-
name: s,
|
|
166
|
-
blacklist: u,
|
|
167
|
-
capabilities: {
|
|
168
|
-
supportedTypes: ["string"]
|
|
169
|
-
},
|
|
170
|
-
storage: {
|
|
171
|
-
kind: "async",
|
|
172
|
-
getAllKeys: () => K(t),
|
|
173
|
-
get: async (r) => {
|
|
174
|
-
const o = await e.getItemAsync(r);
|
|
175
|
-
if (o !== null)
|
|
176
|
-
return {
|
|
177
|
-
key: r,
|
|
178
|
-
type: "string",
|
|
179
|
-
value: o
|
|
180
|
-
};
|
|
181
|
-
},
|
|
182
|
-
set: async (r) => {
|
|
183
|
-
if (r.type !== "string")
|
|
184
|
-
throw new Error("Expo SecureStore adapter supports only string values.");
|
|
185
|
-
await e.setItemAsync(r.key, r.value);
|
|
186
|
-
},
|
|
187
|
-
delete: (r) => e.deleteItemAsync(r)
|
|
188
|
-
}
|
|
189
|
-
}]
|
|
190
|
-
});
|
|
107
|
+
};
|
|
191
108
|
export {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
109
|
+
h as createAsyncStorageAdapter,
|
|
110
|
+
B as createExpoAsyncStorageAdapter,
|
|
111
|
+
O as createExpoSecureStorageAdapter,
|
|
112
|
+
y as createMMKVStorageAdapter
|
|
196
113
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=async t=>Array.isArray(t)?t:t(),l=({storage:t,keys:a,adapterId:s="expo-secure-store",adapterName:o="Expo SecureStore",storageId:n="default",storageName:c="Default Secure Storage",blacklist:i})=>({id:s,name:o,storages:[{id:n,name:c,blacklist:i,capabilities:{supportedTypes:["string"]},storage:{kind:"async",getAllKeys:()=>u(a),get:async e=>{const r=await t.getItemAsync(e);if(r!==null)return{key:e,type:"string",value:r}},set:async e=>{if(e.type!=="string")throw new Error("Expo SecureStore adapter supports only string values.");await t.setItemAsync(e.key,e.value)},delete:e=>t.deleteItemAsync(e)}}]});exports.createExpoSecureStorageAdapter=l;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const u = async (t) => Array.isArray(t) ? t : t(), l = ({
|
|
2
|
+
storage: t,
|
|
3
|
+
keys: s,
|
|
4
|
+
adapterId: a = "expo-secure-store",
|
|
5
|
+
adapterName: n = "Expo SecureStore",
|
|
6
|
+
storageId: o = "default",
|
|
7
|
+
storageName: i = "Default Secure Storage",
|
|
8
|
+
blacklist: c
|
|
9
|
+
}) => ({
|
|
10
|
+
id: a,
|
|
11
|
+
name: n,
|
|
12
|
+
storages: [{
|
|
13
|
+
id: o,
|
|
14
|
+
name: i,
|
|
15
|
+
blacklist: c,
|
|
16
|
+
capabilities: {
|
|
17
|
+
supportedTypes: ["string"]
|
|
18
|
+
},
|
|
19
|
+
storage: {
|
|
20
|
+
kind: "async",
|
|
21
|
+
getAllKeys: () => u(s),
|
|
22
|
+
get: async (e) => {
|
|
23
|
+
const r = await t.getItemAsync(e);
|
|
24
|
+
if (r !== null)
|
|
25
|
+
return {
|
|
26
|
+
key: e,
|
|
27
|
+
type: "string",
|
|
28
|
+
value: r
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
set: async (e) => {
|
|
32
|
+
if (e.type !== "string")
|
|
33
|
+
throw new Error("Expo SecureStore adapter supports only string values.");
|
|
34
|
+
await t.setItemAsync(e.key, e.value);
|
|
35
|
+
},
|
|
36
|
+
delete: (e) => t.deleteItemAsync(e)
|
|
37
|
+
}
|
|
38
|
+
}]
|
|
39
|
+
});
|
|
40
|
+
export {
|
|
41
|
+
l as createExpoSecureStorageAdapter
|
|
42
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("@rozenite/plugin-bridge"),w=require("react"),T=require("./types.cjs"),p=require("@rozenite/agent-bridge"),g=require("@rozenite/agent-shared"),R=1500,m=e=>e.kind==="async",b=e=>e.type==="buffer"?`${e.type}:${e.value.join(",")}`:`${e.type}:${String(e.value)}`,z=e=>new Map(e.map(t=>[t.key,t])),I=(e,t)=>e.blacklist?(e.blacklist.lastIndex=0,e.blacklist.test(t)):!1,M=(e,t,r)=>{if(!T.supportsType(e,t))throw new Error(`Type "${t}" is not supported by storage "${r.storageId}" in adapter "${r.adapterId}".`)},E=async e=>(m(e),e.getAllKeys()),S=async(e,t)=>(m(e),e.get(t)),k=async(e,t)=>{if(m(e)){await e.set(t);return}e.set(t)},N=async(e,t)=>{if(m(e)){await e.delete(t);return}e.delete(t)},v=async e=>{const t=await e();return z(t)},x=(e,t,r)=>{t.forEach((s,a)=>{const o=e.get(a);if(!o){r.onSet(s);return}b(o)!==b(s)&&r.onSet(s)}),e.forEach((s,a)=>{t.has(a)||r.onDelete(a)})},q=async(e,t)=>{let r=await v(e);const s=setInterval(async()=>{try{const a=await v(e);x(r,a,t),r=a}catch{}},R);return{remove:()=>{clearInterval(s)}}},j=(e,t)=>{const r=t.storage,s={adapterId:e.id,storageId:t.id},a=async d=>{if(!I(t,d))return S(r,d)},o=async()=>{const d=await E(r);return(await Promise.all(d.filter(c=>!I(t,c)).map(c=>S(r,c)))).filter(c=>!!c)};return{id:T.getStorageViewId(s),target:s,adapterName:e.name,storageName:t.name,capabilities:t.capabilities,get:a,set:async d=>{M(t.capabilities,d.type,s),await k(r,d)},delete:async d=>{await N(r,d)},getAllKeys:async()=>(await E(r)).filter(n=>!I(t,n)),getAllEntries:o,watch:async({onSet:d,onDelete:n})=>r.subscribe?r.subscribe(async c=>{try{const i=await a(c);if(!i){n(c);return}d(i)}catch{}}):q(o,{onSet:d,onDelete:n})}},K=e=>e.flatMap(t=>t.storages.map(r=>j(t,r))),f={adapterId:{type:"string",description:"Storage adapter ID. Required when multiple adapters are configured."},storageId:{type:"string",description:"Storage node ID within the adapter. Required when multiple storages are configured."}},u="@rozenite/storage-plugin",$=["string","number","boolean","buffer"],y={listStorages:g.defineAgentToolContract({name:"list-storages",description:"List all storage adapters and their storage nodes currently available on the device, including supported entry types and entry counts.",inputSchema:{type:"object",properties:{}}}),listEntries:g.defineAgentToolContract({name:"list-entries",description:"List keys in a storage. This call intentionally does not return entry values to keep responses token-efficient.",inputSchema:{type:"object",properties:{...f,offset:{type:"number",description:"Pagination offset. Defaults to 0."},limit:{type:"number",description:"Pagination size. Defaults to 100."}}}}),readEntry:g.defineAgentToolContract({name:"read-entry",description:"Read a single storage entry value by key.",inputSchema:{type:"object",properties:{...f,key:{type:"string",description:"Entry key."}},required:["key"]}}),createEntry:g.defineAgentToolContract({name:"create-entry",description:"Create a new storage entry. Fails if the key already exists.",inputSchema:{type:"object",properties:{...f,key:{type:"string",description:"Entry key."},type:{type:"string",enum:[...$],description:"Entry value type. Must be one of the supported types for the target storage (see list-storages)."},value:{description:"Entry value matching the provided type."}},required:["key","type","value"]}}),editEntry:g.defineAgentToolContract({name:"edit-entry",description:"Edit an existing storage entry. Fails if the key does not exist.",inputSchema:{type:"object",properties:{...f,key:{type:"string",description:"Entry key."},type:{type:"string",enum:[...$],description:"Entry value type. Must be one of the supported types for the target storage (see list-storages)."},value:{description:"Entry value matching the provided type."}},required:["key","type","value"]}}),removeEntry:g.defineAgentToolContract({name:"remove-entry",description:"Remove a storage entry by key.",inputSchema:{type:"object",properties:{...f,key:{type:"string",description:"Entry key."}},required:["key"]}})},A=(e,t)=>{if(e==="string"){if(typeof t!="string")throw new Error("Expected string value for type=string");return t}if(e==="number"){if(typeof t!="number"||Number.isNaN(t))throw new Error("Expected number value for type=number");return t}if(e==="boolean"){if(typeof t!="boolean")throw new Error("Expected boolean value for type=boolean");return t}if(!Array.isArray(t)||!t.every(r=>Number.isInteger(r)))throw new Error("Expected number[] value for type=buffer");return t},h=e=>`${e.target.adapterId}/${e.target.storageId}`,C=e=>{const t=w.useCallback((r,s)=>{if(e.length===0)throw new Error("No storages are registered.");if(r!==void 0||s!==void 0){const a=e.find(o=>(r===void 0||o.target.adapterId===r)&&(s===void 0||o.target.storageId===s));if(!a){const o=[r&&`adapterId="${r}"`,s&&`storageId="${s}"`].filter(Boolean).join(", ");throw new Error(`No storage matched ${o}. Available: ${e.map(h).join(", ")}`)}return a}if(e.length>1)throw new Error(`Multiple storages detected. Provide adapterId and/or storageId. Available: ${e.map(h).join(", ")}`);return e[0]},[e]);p.useRozenitePluginAgentTool({pluginId:u,tool:y.listStorages,handler:async()=>({storages:await Promise.all(e.map(async r=>({adapterId:r.target.adapterId,storageId:r.target.storageId,adapterName:r.adapterName,storageName:r.storageName,supportedTypes:r.capabilities.supportedTypes,entryCount:(await r.getAllKeys()).length})))})}),p.useRozenitePluginAgentTool({pluginId:u,tool:y.listEntries,handler:async({adapterId:r,storageId:s,offset:a=0,limit:o=100})=>{const d=t(r,s),n=await d.getAllKeys(),c=Math.max(0,Math.floor(a)),i=Math.max(1,Math.floor(o)),l=n.slice(c,c+i);return{adapterId:d.target.adapterId,storageId:d.target.storageId,total:n.length,offset:c,limit:i,keys:l}}}),p.useRozenitePluginAgentTool({pluginId:u,tool:y.readEntry,handler:async({adapterId:r,storageId:s,key:a})=>{const o=t(r,s),d=await o.get(a);if(!d)throw new Error(`Key "${a}" not found in storage "${h(o)}".`);return{adapterId:o.target.adapterId,storageId:o.target.storageId,entry:d}}}),p.useRozenitePluginAgentTool({pluginId:u,tool:y.createEntry,handler:async({adapterId:r,storageId:s,key:a,type:o,value:d})=>{const n=t(r,s);if(await n.get(a))throw new Error(`Key "${a}" already exists in storage "${h(n)}". Use edit-entry instead.`);const i=A(o,d);return await n.set({key:a,type:o,value:i}),{adapterId:n.target.adapterId,storageId:n.target.storageId,created:!0,key:a}}}),p.useRozenitePluginAgentTool({pluginId:u,tool:y.editEntry,handler:async({adapterId:r,storageId:s,key:a,type:o,value:d})=>{const n=t(r,s);if(!await n.get(a))throw new Error(`Key "${a}" not found in storage "${h(n)}". Use create-entry instead.`);const i=A(o,d);return await n.set({key:a,type:o,value:i}),{adapterId:n.target.adapterId,storageId:n.target.storageId,edited:!0,key:a}}}),p.useRozenitePluginAgentTool({pluginId:u,tool:y.removeEntry,handler:async({adapterId:r,storageId:s,key:a})=>{const o=t(r,s),d=!!await o.get(a);return await o.delete(a),{adapterId:o.target.adapterId,storageId:o.target.storageId,removed:d,key:a}}})},V=({storages:e})=>{const t=w.useMemo(()=>K(e),[e]);C(t);const r=P.useRozeniteDevToolsClient({pluginId:"@rozenite/storage-plugin"});return w.useEffect(()=>{if(!r)return;const s=async n=>{const c=n?t.filter(i=>i.id===n):t;for(const i of c)try{const l=await i.getAllEntries();r.send("snapshot",{type:"snapshot",target:i.target,adapterName:i.adapterName,storageName:i.storageName,capabilities:i.capabilities,entries:l})}catch(l){console.warn(`[Rozenite] Storage Plugin: Failed to snapshot ${i.target.adapterId}/${i.target.storageId}.`,l)}};s();const a=[];let o=!1;Promise.all(t.map(async n=>{try{const c=await n.watch({onSet:i=>{r.send("set-entry",{type:"set-entry",target:n.target,entry:i})},onDelete:i=>{r.send("delete-entry",{type:"delete-entry",target:n.target,key:i})}});if(o){c.remove();return}a.push(c)}catch(c){console.warn(`[Rozenite] Storage Plugin: Failed to attach watcher for ${n.target.adapterId}/${n.target.storageId}.`,c)}}));const d=[r.onMessage("set-entry",async({target:n,entry:c})=>{const i=t.find(l=>l.target.adapterId===n.adapterId&&l.target.storageId===n.storageId);if(!i){console.warn(`[Rozenite] Storage Plugin: Storage target not found for ${n.adapterId}/${n.storageId}`);return}try{await i.set(c)}catch(l){console.warn(`[Rozenite] Storage Plugin: Failed to set entry in ${n.adapterId}/${n.storageId}.`,l)}}),r.onMessage("delete-entry",async({target:n,key:c})=>{const i=t.find(l=>l.target.adapterId===n.adapterId&&l.target.storageId===n.storageId);if(!i){console.warn(`[Rozenite] Storage Plugin: Storage target not found for ${n.adapterId}/${n.storageId}`);return}try{await i.delete(c)}catch(l){console.warn(`[Rozenite] Storage Plugin: Failed to delete entry in ${n.adapterId}/${n.storageId}.`,l)}}),r.onMessage("get-snapshot",async({target:n})=>{if(n==="all"){await s();return}await s(`${n.adapterId}:${n.storageId}`)})];return()=>{o=!0,a.forEach(n=>n.remove()),d.forEach(n=>n.remove())}},[r,t]),r};exports.useRozeniteStoragePlugin=V;
|