@vielzeug/vault 2.5.0 → 3.0.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/README.md +25 -32
- package/dist/adapter-core.cjs +1 -1
- package/dist/adapter-core.cjs.map +1 -1
- package/dist/adapter-core.d.ts +32 -7
- package/dist/adapter-core.d.ts.map +1 -1
- package/dist/adapter-core.js +204 -120
- package/dist/adapter-core.js.map +1 -1
- package/dist/adapters/indexeddb.cjs +1 -1
- package/dist/adapters/indexeddb.cjs.map +1 -1
- package/dist/adapters/indexeddb.d.ts +7 -4
- package/dist/adapters/indexeddb.d.ts.map +1 -1
- package/dist/adapters/indexeddb.js +204 -172
- package/dist/adapters/indexeddb.js.map +1 -1
- package/dist/adapters/memory.cjs +1 -1
- package/dist/adapters/memory.cjs.map +1 -1
- package/dist/adapters/memory.d.ts +2 -4
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +30 -52
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/sqlite.cjs +21 -21
- package/dist/adapters/sqlite.cjs.map +1 -1
- package/dist/adapters/sqlite.d.ts +4 -4
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +246 -248
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/adapters/webstorage.cjs +1 -1
- package/dist/adapters/webstorage.cjs.map +1 -1
- package/dist/adapters/webstorage.d.ts +4 -4
- package/dist/adapters/webstorage.d.ts.map +1 -1
- package/dist/adapters/webstorage.js +100 -119
- package/dist/adapters/webstorage.js.map +1 -1
- package/dist/codec.cjs +2 -0
- package/dist/codec.cjs.map +1 -0
- package/dist/codec.d.ts +5 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +6 -0
- package/dist/codec.js.map +1 -0
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/internal.cjs +1 -1
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +16 -13
- package/dist/internal.js.map +1 -1
- package/dist/query.cjs +1 -1
- package/dist/query.cjs.map +1 -1
- package/dist/query.d.ts +8 -24
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +23 -35
- package/dist/query.js.map +1 -1
- package/dist/ttl.cjs +1 -1
- package/dist/ttl.cjs.map +1 -1
- package/dist/ttl.js +1 -1
- package/dist/ttl.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +46 -33
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -2
- package/dist/types.js.map +1 -1
- package/dist/vault.cjs +1 -1
- package/dist/vault.cjs.map +1 -1
- package/dist/vault.iife.js +1 -1
- package/dist/vault.iife.js.map +1 -1
- package/dist/vault.js +1 -1
- package/dist/vault.js.map +1 -1
- package/package.json +10 -8
package/dist/adapters/sqlite.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { encodeVaultKey as
|
|
4
|
-
import {
|
|
1
|
+
import { decodeRecord as e, encodeRecord as t } from "../codec.js";
|
|
2
|
+
import { VaultDisposedError as n, VaultError as r } from "../errors.js";
|
|
3
|
+
import { encodeVaultKey as i, getRecordKey as a } from "../internal.js";
|
|
4
|
+
import { isExpired as o } from "../ttl.js";
|
|
5
|
+
import { assertBatchTables as s, buildDocumentStore as c, buildTxContext as l, withBatch as u } from "../adapter-core.js";
|
|
5
6
|
//#region src/adapters/sqlite.ts
|
|
6
|
-
var
|
|
7
|
+
var d = /* @__PURE__ */ new WeakMap(), f = "\"__vielzeug_vault_records\"", p = "\"__vielzeug_vault_metadata\"", m = 1, h = 100, g = class {
|
|
7
8
|
tail = Promise.resolve();
|
|
8
9
|
async acquire() {
|
|
9
10
|
let e, t = this.tail;
|
|
@@ -20,24 +21,24 @@ var c = /* @__PURE__ */ new WeakMap(), l = "\"__vielzeug_vault_records\"", u = "
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
};
|
|
23
|
-
function
|
|
24
|
-
let t =
|
|
24
|
+
function _(e) {
|
|
25
|
+
let t = d.get(e);
|
|
25
26
|
if (t) return t;
|
|
26
|
-
let n = new
|
|
27
|
+
let n = new g(), r = {
|
|
27
28
|
batchActive: !1,
|
|
28
29
|
executor: n,
|
|
29
|
-
initialized: n.run(() =>
|
|
30
|
+
initialized: n.run(() => v(e)),
|
|
30
31
|
listeners: /* @__PURE__ */ new Set()
|
|
31
32
|
};
|
|
32
|
-
return
|
|
33
|
+
return d.set(e, r), r;
|
|
33
34
|
}
|
|
34
|
-
function
|
|
35
|
+
function v(e) {
|
|
35
36
|
e.exec(`
|
|
36
|
-
CREATE TABLE IF NOT EXISTS ${
|
|
37
|
+
CREATE TABLE IF NOT EXISTS ${p} (
|
|
37
38
|
namespace TEXT PRIMARY KEY,
|
|
38
39
|
format_version INTEGER NOT NULL
|
|
39
40
|
);
|
|
40
|
-
CREATE TABLE IF NOT EXISTS ${
|
|
41
|
+
CREATE TABLE IF NOT EXISTS ${f} (
|
|
41
42
|
namespace TEXT NOT NULL,
|
|
42
43
|
table_name TEXT NOT NULL,
|
|
43
44
|
key_tag TEXT NOT NULL,
|
|
@@ -49,58 +50,56 @@ function h(e) {
|
|
|
49
50
|
PRIMARY KEY (namespace, table_name, key_tag)
|
|
50
51
|
);
|
|
51
52
|
CREATE INDEX IF NOT EXISTS "__vielzeug_vault_records_expiration"
|
|
52
|
-
ON ${
|
|
53
|
+
ON ${f} (namespace, table_name, expires_at);
|
|
53
54
|
CREATE INDEX IF NOT EXISTS "__vielzeug_vault_records_number_key"
|
|
54
|
-
ON ${
|
|
55
|
+
ON ${f} (namespace, table_name, key_kind, key_number);
|
|
55
56
|
CREATE INDEX IF NOT EXISTS "__vielzeug_vault_records_string_key"
|
|
56
|
-
ON ${
|
|
57
|
+
ON ${f} (namespace, table_name, key_kind, key_string);
|
|
57
58
|
`);
|
|
58
59
|
}
|
|
59
|
-
function
|
|
60
|
-
let
|
|
61
|
-
if (
|
|
62
|
-
|
|
60
|
+
function y(e, t) {
|
|
61
|
+
let n = O(e, `SELECT format_version FROM ${p} WHERE namespace = ?`, [t]);
|
|
62
|
+
if (n === void 0) {
|
|
63
|
+
D(e, `INSERT INTO ${p} (namespace, format_version) VALUES (?, ?)`, [t, m]);
|
|
63
64
|
return;
|
|
64
65
|
}
|
|
65
|
-
if (
|
|
66
|
+
if (n.format_version !== m) throw new r(`SQLite storage format for "${t}" is not supported`);
|
|
66
67
|
}
|
|
67
|
-
function
|
|
68
|
-
if (e.length === 0) throw new
|
|
68
|
+
function b(e) {
|
|
69
|
+
if (e.length === 0) throw new r("createSQLite: name must not be empty");
|
|
69
70
|
}
|
|
70
|
-
function
|
|
71
|
+
function x(e, t, n) {
|
|
71
72
|
if (e === null || typeof e == "boolean" || typeof e == "string") return;
|
|
72
73
|
if (typeof e == "number") {
|
|
73
74
|
if (Number.isFinite(e)) return;
|
|
74
|
-
throw new
|
|
75
|
+
throw new r(`SQLite serialization failed at ${n}: numbers must be finite`);
|
|
75
76
|
}
|
|
76
|
-
if (typeof e != "object") throw new
|
|
77
|
-
if (
|
|
77
|
+
if (typeof e != "object") throw new r(`SQLite serialization failed at ${n}: expected a JSON-compatible value`);
|
|
78
|
+
if (t.has(e)) throw new r(`SQLite serialization failed at ${n}: circular references are not supported`);
|
|
78
79
|
if (Array.isArray(e)) {
|
|
79
|
-
|
|
80
|
-
for (let
|
|
81
|
-
|
|
80
|
+
t.add(e);
|
|
81
|
+
for (let r = 0; r < e.length; r += 1) x(e[r], t, `${n}[${String(r)}]`);
|
|
82
|
+
t.delete(e);
|
|
82
83
|
return;
|
|
83
84
|
}
|
|
84
85
|
let i = Object.getPrototypeOf(e);
|
|
85
|
-
if (i !== null && i !== Object.prototype) throw new
|
|
86
|
-
|
|
87
|
-
for (let [
|
|
88
|
-
|
|
86
|
+
if (i !== null && i !== Object.prototype) throw new r(`SQLite serialization failed at ${n}: expected a plain object`);
|
|
87
|
+
t.add(e);
|
|
88
|
+
for (let [r, i] of Object.entries(e)) x(i, t, `${n}.${r}`);
|
|
89
|
+
t.delete(e);
|
|
89
90
|
}
|
|
90
|
-
function
|
|
91
|
-
return
|
|
91
|
+
function S(e) {
|
|
92
|
+
return x(e, /* @__PURE__ */ new Set(), "record"), JSON.stringify(e);
|
|
92
93
|
}
|
|
93
|
-
function
|
|
94
|
+
function C(e) {
|
|
94
95
|
try {
|
|
95
|
-
|
|
96
|
-
if (typeof n != "object" || !n || Array.isArray(n)) throw new t("stored record is not a JSON object");
|
|
97
|
-
return n;
|
|
96
|
+
return JSON.parse(e);
|
|
98
97
|
} catch (e) {
|
|
99
|
-
throw e instanceof
|
|
98
|
+
throw e instanceof r ? e : new r("stored record contains invalid JSON", { cause: e });
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
|
-
function
|
|
103
|
-
let t =
|
|
101
|
+
function w(e) {
|
|
102
|
+
let t = i(e);
|
|
104
103
|
return typeof e == "number" ? {
|
|
105
104
|
encoded: t,
|
|
106
105
|
kind: "number",
|
|
@@ -113,17 +112,17 @@ function x(e) {
|
|
|
113
112
|
string: e
|
|
114
113
|
};
|
|
115
114
|
}
|
|
116
|
-
function
|
|
117
|
-
let
|
|
118
|
-
if (typeof
|
|
119
|
-
if (
|
|
115
|
+
function T(e) {
|
|
116
|
+
let t = e.value_json, n = e.expires_at, i = e.row_id;
|
|
117
|
+
if (typeof t != "string" || typeof i != "number" || !Number.isInteger(i)) throw new r("SQLite storage contains a malformed record");
|
|
118
|
+
if (n !== null && (typeof n != "number" || !Number.isFinite(n))) throw new r("SQLite storage contains a malformed expiration timestamp");
|
|
120
119
|
return {
|
|
121
|
-
expiresAt: typeof
|
|
122
|
-
json:
|
|
120
|
+
expiresAt: typeof n == "number" ? n : void 0,
|
|
121
|
+
json: t,
|
|
123
122
|
rowId: i
|
|
124
123
|
};
|
|
125
124
|
}
|
|
126
|
-
function
|
|
125
|
+
function E(e, t, n) {
|
|
127
126
|
let r = e.prepare(t);
|
|
128
127
|
try {
|
|
129
128
|
return n(r);
|
|
@@ -131,122 +130,111 @@ function C(e, t, n) {
|
|
|
131
130
|
r.finalize?.();
|
|
132
131
|
}
|
|
133
132
|
}
|
|
134
|
-
function
|
|
135
|
-
return
|
|
133
|
+
function D(e, t, n = []) {
|
|
134
|
+
return E(e, t, (e) => e.run(...n));
|
|
136
135
|
}
|
|
137
|
-
function
|
|
138
|
-
return
|
|
136
|
+
function O(e, t, n = []) {
|
|
137
|
+
return E(e, t, (e) => e.get(...n) ?? void 0);
|
|
139
138
|
}
|
|
140
|
-
function
|
|
141
|
-
return
|
|
139
|
+
function k(e, t, n = []) {
|
|
140
|
+
return E(e, t, (e) => e.all(...n));
|
|
142
141
|
}
|
|
143
|
-
function
|
|
144
|
-
|
|
142
|
+
function A(e, t, n) {
|
|
143
|
+
D(e, `DELETE FROM ${f}
|
|
145
144
|
WHERE namespace = ? AND table_name = ? AND expires_at IS NOT NULL AND expires_at <= ?`, [
|
|
146
145
|
t,
|
|
147
146
|
n,
|
|
148
147
|
Date.now()
|
|
149
148
|
]);
|
|
150
149
|
}
|
|
151
|
-
function
|
|
152
|
-
let
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
return b(r.json);
|
|
158
|
-
}
|
|
159
|
-
function k(e, t, n, r = "", i = []) {
|
|
160
|
-
return D(e, t, n), E(e, `SELECT rowid AS row_id, expires_at, value_json
|
|
161
|
-
FROM ${l}
|
|
162
|
-
WHERE namespace = ? AND table_name = ?${r}
|
|
163
|
-
ORDER BY rowid`, [
|
|
164
|
-
t,
|
|
165
|
-
n,
|
|
166
|
-
...i
|
|
167
|
-
]).flatMap((t) => {
|
|
168
|
-
let n = O(e, t);
|
|
169
|
-
return n === void 0 ? [] : [n];
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
function A(e, n, r, a = !1) {
|
|
173
|
-
let o = (t, r) => {
|
|
174
|
-
let i = x(r), a = T(e, `SELECT rowid AS row_id, expires_at, value_json
|
|
175
|
-
FROM ${l}
|
|
150
|
+
function j(n, i, s, c, l = !1) {
|
|
151
|
+
let u = (t, a) => {
|
|
152
|
+
let s = w(a), l = O(n, `SELECT rowid AS row_id, expires_at, value_json
|
|
153
|
+
FROM ${f}
|
|
176
154
|
WHERE namespace = ? AND table_name = ? AND key_tag = ?`, [
|
|
177
|
-
|
|
155
|
+
i,
|
|
178
156
|
t,
|
|
179
|
-
|
|
157
|
+
s.encoded
|
|
180
158
|
]);
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
let
|
|
189
|
-
|
|
190
|
-
|
|
159
|
+
if (l === void 0) return;
|
|
160
|
+
let u = T(l);
|
|
161
|
+
if (o(u.expiresAt)) {
|
|
162
|
+
D(n, `DELETE FROM ${f} WHERE rowid = ?`, [u.rowId]);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
let n = C(u.json);
|
|
167
|
+
return e(c[t], n);
|
|
168
|
+
} catch (e) {
|
|
169
|
+
throw e instanceof r ? e : new r(`validation failed for table "${String(t)}"`, { cause: e });
|
|
170
|
+
}
|
|
171
|
+
}, d = {
|
|
172
|
+
async clear(e) {
|
|
173
|
+
D(n, `DELETE FROM ${f} WHERE namespace = ? AND table_name = ?`, [i, e]);
|
|
191
174
|
},
|
|
192
|
-
async delete(
|
|
193
|
-
let
|
|
194
|
-
return (
|
|
175
|
+
async delete(e, t) {
|
|
176
|
+
let r = w(t);
|
|
177
|
+
return (D(n, `DELETE FROM ${f}
|
|
195
178
|
WHERE namespace = ? AND table_name = ? AND key_tag = ?
|
|
196
179
|
AND (expires_at IS NULL OR expires_at > ?)`, [
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
180
|
+
i,
|
|
181
|
+
e,
|
|
182
|
+
r.encoded,
|
|
200
183
|
Date.now()
|
|
201
184
|
])?.changes ?? 0) > 0;
|
|
202
185
|
},
|
|
203
|
-
async deleteMany(
|
|
204
|
-
|
|
205
|
-
let
|
|
206
|
-
|
|
207
|
-
let o = a.slice(r, r + 996), s = w(e, `DELETE FROM ${l}
|
|
186
|
+
async deleteMany(e, t) {
|
|
187
|
+
let r = 0, a = t.map((e) => w(e).encoded);
|
|
188
|
+
for (let t = 0; t < a.length; t += 996) {
|
|
189
|
+
let o = a.slice(t, t + 996), s = D(n, `DELETE FROM ${f}
|
|
208
190
|
WHERE namespace = ? AND table_name = ? AND key_tag IN (${o.map(() => "?").join(", ")})
|
|
209
191
|
AND (expires_at IS NULL OR expires_at > ?)`, [
|
|
210
|
-
|
|
211
|
-
|
|
192
|
+
i,
|
|
193
|
+
e,
|
|
212
194
|
...o,
|
|
213
195
|
Date.now()
|
|
214
196
|
]);
|
|
215
|
-
|
|
197
|
+
r += s?.changes ?? 0;
|
|
216
198
|
}
|
|
217
|
-
return
|
|
199
|
+
return r;
|
|
218
200
|
},
|
|
219
201
|
async get(e, t) {
|
|
220
|
-
return
|
|
202
|
+
return u(e, t);
|
|
221
203
|
},
|
|
222
204
|
async getAll(t) {
|
|
223
|
-
return
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
205
|
+
return A(n, i, t), k(n, `SELECT rowid AS row_id, expires_at, value_json
|
|
206
|
+
FROM ${f}
|
|
207
|
+
WHERE namespace = ? AND table_name = ?
|
|
208
|
+
ORDER BY rowid`, [i, t]).flatMap((i) => {
|
|
209
|
+
let a = T(i);
|
|
210
|
+
if (o(a.expiresAt)) return D(n, `DELETE FROM ${f} WHERE rowid = ?`, [a.rowId]), [];
|
|
211
|
+
try {
|
|
212
|
+
let n = C(a.json);
|
|
213
|
+
return [e(c[t], n)];
|
|
214
|
+
} catch (e) {
|
|
215
|
+
throw e instanceof r ? e : new r(`validation failed for table "${String(t)}"`, { cause: e });
|
|
216
|
+
}
|
|
217
|
+
});
|
|
227
218
|
},
|
|
228
219
|
async getMany(e, t) {
|
|
229
|
-
return t.map((t) =>
|
|
230
|
-
},
|
|
231
|
-
async has(e, t) {
|
|
232
|
-
return o(e, t) !== void 0;
|
|
220
|
+
return t.map((t) => u(e, t));
|
|
233
221
|
},
|
|
234
222
|
async pruneAllExpired() {
|
|
235
223
|
let e = {};
|
|
236
|
-
for (let t of Object.keys(
|
|
224
|
+
for (let t of Object.keys(s)) e[t] = await d.pruneExpiredInTable(t);
|
|
237
225
|
return e;
|
|
238
226
|
},
|
|
239
|
-
async pruneExpiredInTable(
|
|
240
|
-
let
|
|
241
|
-
if (typeof
|
|
242
|
-
|
|
243
|
-
let a =
|
|
244
|
-
if (typeof a != "number") throw new
|
|
245
|
-
return
|
|
227
|
+
async pruneExpiredInTable(e) {
|
|
228
|
+
let t = O(n, `SELECT COUNT(*) AS count FROM ${f} WHERE namespace = ? AND table_name = ?`, [i, e])?.count;
|
|
229
|
+
if (typeof t != "number") throw new r("SQLite storage returned an invalid count");
|
|
230
|
+
A(n, i, e);
|
|
231
|
+
let a = O(n, `SELECT COUNT(*) AS count FROM ${f} WHERE namespace = ? AND table_name = ?`, [i, e])?.count;
|
|
232
|
+
if (typeof a != "number") throw new r("SQLite storage returned an invalid count");
|
|
233
|
+
return t - a;
|
|
246
234
|
},
|
|
247
|
-
async put(
|
|
248
|
-
let
|
|
249
|
-
|
|
235
|
+
async put(e, r, o) {
|
|
236
|
+
let l = w(a(s, e, r)), u = o === void 0 ? null : Date.now() + o, d = t(c[e], r);
|
|
237
|
+
D(n, `INSERT INTO ${f}
|
|
250
238
|
(namespace, table_name, key_tag, key_kind, key_number, key_string, value_json, expires_at)
|
|
251
239
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
252
240
|
ON CONFLICT(namespace, table_name, key_tag) DO UPDATE SET
|
|
@@ -255,22 +243,22 @@ function A(e, n, r, a = !1) {
|
|
|
255
243
|
key_string = excluded.key_string,
|
|
256
244
|
value_json = excluded.value_json,
|
|
257
245
|
expires_at = excluded.expires_at`, [
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
246
|
+
i,
|
|
247
|
+
e,
|
|
248
|
+
l.encoded,
|
|
249
|
+
l.kind,
|
|
250
|
+
l.number,
|
|
251
|
+
l.string,
|
|
252
|
+
S(d),
|
|
253
|
+
u
|
|
266
254
|
]);
|
|
267
255
|
},
|
|
268
|
-
async putAll(
|
|
269
|
-
if (
|
|
270
|
-
let
|
|
271
|
-
for (let t = 0; t <
|
|
272
|
-
let r =
|
|
273
|
-
|
|
256
|
+
async putAll(e, o, u) {
|
|
257
|
+
if (o.length === 0) return;
|
|
258
|
+
let d = u === void 0 ? null : Date.now() + u, p = o.map((n) => S(t(c[e], n))), m = o.map((t) => w(a(s, e, t))), h = () => {
|
|
259
|
+
for (let t = 0; t < o.length; t++) {
|
|
260
|
+
let r = m[t];
|
|
261
|
+
D(n, `INSERT INTO ${f}
|
|
274
262
|
(namespace, table_name, key_tag, key_kind, key_number, key_string, value_json, expires_at)
|
|
275
263
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
276
264
|
ON CONFLICT(namespace, table_name, key_tag) DO UPDATE SET
|
|
@@ -279,155 +267,165 @@ function A(e, n, r, a = !1) {
|
|
|
279
267
|
key_string = excluded.key_string,
|
|
280
268
|
value_json = excluded.value_json,
|
|
281
269
|
expires_at = excluded.expires_at`, [
|
|
282
|
-
|
|
283
|
-
|
|
270
|
+
i,
|
|
271
|
+
e,
|
|
284
272
|
r.encoded,
|
|
285
273
|
r.kind,
|
|
286
274
|
r.number,
|
|
287
275
|
r.string,
|
|
288
|
-
|
|
289
|
-
|
|
276
|
+
p[t],
|
|
277
|
+
d
|
|
290
278
|
]);
|
|
291
279
|
}
|
|
292
280
|
};
|
|
293
|
-
if (
|
|
294
|
-
|
|
281
|
+
if (l) {
|
|
282
|
+
h();
|
|
295
283
|
return;
|
|
296
284
|
}
|
|
297
|
-
|
|
285
|
+
n.exec("BEGIN");
|
|
298
286
|
try {
|
|
299
|
-
|
|
300
|
-
} catch (
|
|
287
|
+
h(), n.exec("COMMIT");
|
|
288
|
+
} catch (e) {
|
|
301
289
|
try {
|
|
302
|
-
|
|
290
|
+
n.exec("ROLLBACK");
|
|
303
291
|
} catch (e) {
|
|
304
|
-
throw new
|
|
292
|
+
throw new r("SQLite putAll rollback failed", { cause: e });
|
|
305
293
|
}
|
|
306
|
-
throw
|
|
294
|
+
throw e;
|
|
307
295
|
}
|
|
308
296
|
}
|
|
309
297
|
};
|
|
310
|
-
return
|
|
298
|
+
return d;
|
|
311
299
|
}
|
|
312
|
-
function
|
|
313
|
-
let { closeOnDispose:
|
|
314
|
-
|
|
315
|
-
let
|
|
316
|
-
await
|
|
317
|
-
}),
|
|
318
|
-
if (
|
|
319
|
-
return
|
|
320
|
-
}])),
|
|
300
|
+
function M(t) {
|
|
301
|
+
let { closeOnDispose: i = !1, database: a, name: d, schema: p, codecs: m } = t;
|
|
302
|
+
if (b(d), !m) throw new r("createSQLite: codecs are required for durable persistence");
|
|
303
|
+
let g = _(a), v = g.executor.run(async () => {
|
|
304
|
+
await g.initialized, y(a, d);
|
|
305
|
+
}), x, S = j(a, d, p, m), w = (e) => g.executor.run(async () => (await g.initialized, await v, e())), E = Object.fromEntries(Object.entries(S).map(([e, t]) => [e, (...e) => {
|
|
306
|
+
if (g.batchActive) throw new r("cannot call a SQLite store sharing this connection from batch(); use the transaction context instead");
|
|
307
|
+
return w(() => t(...e));
|
|
308
|
+
}])), O, A = c(p, E, {
|
|
309
|
+
codecs: m,
|
|
321
310
|
onCrossTabMessage(e) {
|
|
322
311
|
let t = (t, n) => {
|
|
323
|
-
t ===
|
|
312
|
+
t === d && Object.hasOwn(p, n) && e(n);
|
|
324
313
|
};
|
|
325
|
-
return
|
|
326
|
-
|
|
314
|
+
return x = t, g.listeners.add(t), () => {
|
|
315
|
+
g.listeners.delete(t), x === t && (x = void 0);
|
|
327
316
|
};
|
|
328
317
|
},
|
|
329
318
|
onMutation(e) {
|
|
330
|
-
for (let t of
|
|
319
|
+
for (let t of g.listeners) t !== x && t(d, e);
|
|
331
320
|
},
|
|
332
321
|
onTransactions: (e) => {
|
|
333
|
-
|
|
334
|
-
if (
|
|
335
|
-
return
|
|
336
|
-
await
|
|
337
|
-
let
|
|
338
|
-
|
|
322
|
+
O = async (t, n) => {
|
|
323
|
+
if (s(t), g.batchActive) throw new r("cannot call a SQLite store sharing this connection from batch(); use the transaction context instead");
|
|
324
|
+
return g.executor.run(async () => {
|
|
325
|
+
await g.initialized, await v;
|
|
326
|
+
let i = /* @__PURE__ */ new Set(), o = j(a, d, p, m, !0), s = !0, c = l(p, o, (e) => i.add(e), e.validate, new Set(t), () => s), u = !1, f = !1;
|
|
327
|
+
g.batchActive = !0;
|
|
339
328
|
try {
|
|
340
|
-
|
|
341
|
-
let t = await
|
|
342
|
-
|
|
343
|
-
for (let t of
|
|
329
|
+
a.exec("BEGIN IMMEDIATE"), u = !0;
|
|
330
|
+
let t = await n(c);
|
|
331
|
+
a.exec("COMMIT"), f = !0;
|
|
332
|
+
for (let t of i) e.notifyMutation(t);
|
|
344
333
|
return t;
|
|
345
334
|
} catch (e) {
|
|
346
|
-
if (
|
|
347
|
-
|
|
335
|
+
if (u && !f) try {
|
|
336
|
+
a.exec("ROLLBACK");
|
|
348
337
|
} catch (e) {
|
|
349
|
-
throw new
|
|
338
|
+
throw new r("SQLite batch rollback failed", { cause: e });
|
|
350
339
|
}
|
|
351
340
|
throw e;
|
|
352
341
|
} finally {
|
|
353
|
-
|
|
342
|
+
s = !1, g.batchActive = !1;
|
|
354
343
|
}
|
|
355
344
|
});
|
|
356
345
|
};
|
|
357
346
|
},
|
|
358
|
-
schema:
|
|
359
|
-
validators: d
|
|
347
|
+
schema: p
|
|
360
348
|
});
|
|
361
|
-
if (!
|
|
362
|
-
let
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
if (e) return {
|
|
385
|
-
done: !0,
|
|
386
|
-
value: void 0
|
|
387
|
-
};
|
|
388
|
-
if (p.batchActive) throw new t("cannot call a SQLite store sharing this connection from batch(); use the transaction context instead");
|
|
349
|
+
if (!O) throw new r("SQLite transaction capability was not initialized");
|
|
350
|
+
let M = u(A, O, p), N = Object.assign(M, { iterate(t) {
|
|
351
|
+
if (A.disposed) throw new n(`"${d}" is disposed`);
|
|
352
|
+
return { [Symbol.asyncIterator]() {
|
|
353
|
+
let i = !1, s = 0, c = [], l = 0, u = async () => {
|
|
354
|
+
let n = await g.executor.run(async () => {
|
|
355
|
+
await g.initialized, await v;
|
|
356
|
+
let n = k(a, `SELECT rowid AS row_id, expires_at, value_json
|
|
357
|
+
FROM ${f}
|
|
358
|
+
WHERE namespace = ? AND table_name = ? AND rowid > ?
|
|
359
|
+
ORDER BY rowid
|
|
360
|
+
LIMIT ?`, [
|
|
361
|
+
d,
|
|
362
|
+
t,
|
|
363
|
+
s,
|
|
364
|
+
h
|
|
365
|
+
]), i = [];
|
|
366
|
+
for (let c of n) {
|
|
367
|
+
let n = T(c);
|
|
368
|
+
if (s = n.rowId, o(n.expiresAt)) {
|
|
369
|
+
D(a, `DELETE FROM ${f} WHERE rowid = ?`, [n.rowId]);
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
389
372
|
try {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
value: void 0
|
|
394
|
-
};
|
|
395
|
-
let t = o[s++];
|
|
396
|
-
r = S(t).rowId;
|
|
397
|
-
let n = O(i, t);
|
|
398
|
-
if (n !== void 0) return {
|
|
399
|
-
done: !1,
|
|
400
|
-
value: n
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
} catch (t) {
|
|
404
|
-
throw e = !0, u(), t;
|
|
373
|
+
i.push(e(m[t], C(n.json)));
|
|
374
|
+
} catch (e) {
|
|
375
|
+
throw e instanceof r ? e : new r(`validation failed for table "${String(t)}"`, { cause: e });
|
|
405
376
|
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
|
|
377
|
+
}
|
|
378
|
+
return {
|
|
379
|
+
done: n.length === 0,
|
|
380
|
+
values: i
|
|
381
|
+
};
|
|
382
|
+
});
|
|
383
|
+
return c = n.values, l = 0, n.done;
|
|
384
|
+
};
|
|
385
|
+
return {
|
|
386
|
+
async next() {
|
|
387
|
+
if (i) return {
|
|
388
|
+
done: !0,
|
|
389
|
+
value: void 0
|
|
390
|
+
};
|
|
391
|
+
if (A.disposed) throw new n(`"${d}" is disposed`);
|
|
392
|
+
if (g.batchActive) throw new r("cannot call a SQLite store sharing this connection from batch(); use the transaction context instead");
|
|
393
|
+
try {
|
|
394
|
+
for (; l >= c.length;) if (await u()) return i = !0, {
|
|
409
395
|
done: !0,
|
|
410
|
-
value:
|
|
396
|
+
value: void 0
|
|
411
397
|
};
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
398
|
+
return {
|
|
399
|
+
done: !1,
|
|
400
|
+
value: c[l++]
|
|
401
|
+
};
|
|
402
|
+
} catch (e) {
|
|
403
|
+
throw i = !0, e;
|
|
415
404
|
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
405
|
+
},
|
|
406
|
+
async return(e) {
|
|
407
|
+
return i = !0, {
|
|
408
|
+
done: !0,
|
|
409
|
+
value: e
|
|
410
|
+
};
|
|
411
|
+
},
|
|
412
|
+
async throw(e) {
|
|
413
|
+
throw i = !0, e;
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
} };
|
|
417
|
+
} });
|
|
418
|
+
if (i) {
|
|
419
|
+
let e = N.dispose.bind(N), t;
|
|
420
|
+
N.dispose = async () => {
|
|
421
|
+
await e(), t ??= g.executor.run(() => a.close?.()), await t;
|
|
422
|
+
}, N[Symbol.asyncDispose] = async () => {
|
|
423
|
+
await N.dispose();
|
|
426
424
|
};
|
|
427
425
|
}
|
|
428
|
-
return
|
|
426
|
+
return N;
|
|
429
427
|
}
|
|
430
428
|
//#endregion
|
|
431
|
-
export {
|
|
429
|
+
export { M as createSQLite };
|
|
432
430
|
|
|
433
431
|
//# sourceMappingURL=sqlite.js.map
|