@aiao/rxdb-adapter-sqlite 0.0.2 → 0.0.4

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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/dist/RxDBAdapterSqlite.d.ts +101 -0
  3. package/dist/RxDBAdapterSqlite.d.ts.map +1 -0
  4. package/{SqliteClient.d.ts → dist/SqliteClient.d.ts} +10 -3
  5. package/dist/SqliteClient.d.ts.map +1 -0
  6. package/dist/SqliteRepository.d.ts +27 -0
  7. package/dist/SqliteRepository.d.ts.map +1 -0
  8. package/dist/SqliteRepository.interface.d.ts +94 -0
  9. package/dist/SqliteRepository.interface.d.ts.map +1 -0
  10. package/dist/SqliteRepositoryBase.d.ts +52 -0
  11. package/dist/SqliteRepositoryBase.d.ts.map +1 -0
  12. package/dist/SqliteTreeRepository.d.ts +21 -0
  13. package/dist/SqliteTreeRepository.d.ts.map +1 -0
  14. package/dist/SqliteTreeRepository.interface.d.ts +36 -0
  15. package/dist/SqliteTreeRepository.interface.d.ts.map +1 -0
  16. package/{execute_statement_helper.d.ts → dist/execute_statement_helper.d.ts} +3 -2
  17. package/dist/execute_statement_helper.d.ts.map +1 -0
  18. package/dist/generate_entity_delete_sql.d.ts +10 -0
  19. package/dist/generate_entity_delete_sql.d.ts.map +1 -0
  20. package/dist/generate_entity_find_tree_sql.d.ts +58 -0
  21. package/dist/generate_entity_find_tree_sql.d.ts.map +1 -0
  22. package/dist/generate_entity_insert_sql.d.ts +10 -0
  23. package/dist/generate_entity_insert_sql.d.ts.map +1 -0
  24. package/dist/generate_entity_inserts_sql.d.ts +7 -0
  25. package/dist/generate_entity_inserts_sql.d.ts.map +1 -0
  26. package/dist/generate_entity_soft_delete_sql.d.ts +10 -0
  27. package/dist/generate_entity_soft_delete_sql.d.ts.map +1 -0
  28. package/dist/generate_entity_update_sql.d.ts +10 -0
  29. package/dist/generate_entity_update_sql.d.ts.map +1 -0
  30. package/dist/generate_query_find_sql.d.ts +32 -0
  31. package/dist/generate_query_find_sql.d.ts.map +1 -0
  32. package/{generate_table_create_sql.d.ts → dist/generate_table_create_sql.d.ts} +2 -1
  33. package/dist/generate_table_create_sql.d.ts.map +1 -0
  34. package/dist/generate_table_trigger_sql.d.ts +9 -0
  35. package/dist/generate_table_trigger_sql.d.ts.map +1 -0
  36. package/dist/index.d.ts +6 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +1683 -0
  39. package/dist/merge_create_cache.d.ts +6 -0
  40. package/dist/merge_create_cache.d.ts.map +1 -0
  41. package/dist/merge_remove_cache.d.ts +5 -0
  42. package/dist/merge_remove_cache.d.ts.map +1 -0
  43. package/dist/merge_tree_create_cache.d.ts +7 -0
  44. package/dist/merge_tree_create_cache.d.ts.map +1 -0
  45. package/dist/merge_tree_remove_cache.d.ts +7 -0
  46. package/dist/merge_tree_remove_cache.d.ts.map +1 -0
  47. package/dist/merge_tree_update_cache.d.ts +7 -0
  48. package/dist/merge_tree_update_cache.d.ts.map +1 -0
  49. package/dist/merge_update_cache.d.ts +5 -0
  50. package/dist/merge_update_cache.d.ts.map +1 -0
  51. package/dist/need_refresh_helper.d.ts +18 -0
  52. package/dist/need_refresh_helper.d.ts.map +1 -0
  53. package/dist/need_tree_refresh_helper.d.ts +19 -0
  54. package/dist/need_tree_refresh_helper.d.ts.map +1 -0
  55. package/dist/rxdb_adapter_create_branch.d.ts +7 -0
  56. package/dist/rxdb_adapter_create_branch.d.ts.map +1 -0
  57. package/dist/rxdb_adapter_create_tables_sql.d.ts +5 -0
  58. package/dist/rxdb_adapter_create_tables_sql.d.ts.map +1 -0
  59. package/dist/rxdb_adapter_save_many.d.ts +8 -0
  60. package/dist/rxdb_adapter_save_many.d.ts.map +1 -0
  61. package/dist/rxdb_adapter_switch_branch.d.ts +4 -0
  62. package/dist/rxdb_adapter_switch_branch.d.ts.map +1 -0
  63. package/{sqlite-load.utils.d.ts → dist/sqlite-load.utils.d.ts} +3 -2
  64. package/dist/sqlite-load.utils.d.ts.map +1 -0
  65. package/{sqlite.interface.d.ts → dist/sqlite.interface.d.ts} +25 -10
  66. package/dist/sqlite.interface.d.ts.map +1 -0
  67. package/{sqlite.utils.d.ts → dist/sqlite.utils.d.ts} +8 -5
  68. package/dist/sqlite.utils.d.ts.map +1 -0
  69. package/{wa-sqlite.d.ts → dist/wa-sqlite.d.ts} +1 -7
  70. package/dist/wa-sqlite.d.ts.map +1 -0
  71. package/package.json +32 -13
  72. package/RxDBAdapterSqlite.d.ts +0 -66
  73. package/SqliteRepository.d.ts +0 -23
  74. package/SqliteRepositoryBase.d.ts +0 -85
  75. package/SqliteTreeRepository.d.ts +0 -17
  76. package/generate_entity_delete_sql.d.ts +0 -9
  77. package/generate_entity_find_tree_sql.d.ts +0 -41
  78. package/generate_entity_insert_sql.d.ts +0 -9
  79. package/generate_entity_soft_delete_sql.d.ts +0 -9
  80. package/generate_entity_update_sql.d.ts +0 -9
  81. package/generate_query_find_sql.d.ts +0 -30
  82. package/generate_table_trigger_sql.d.ts +0 -8
  83. package/index.d.ts +0 -5
  84. package/index.js +0 -1125
  85. package/types.d.ts +0 -7
package/dist/index.js ADDED
@@ -0,0 +1,1683 @@
1
+ import { RxDBError as Le, PropertyType as $, RelationKind as B, getEntityMetadata as N, RxDBChange as we, getEntityStatus as M, EntityCreateEvent as je, EntityUpdateEvent as Fe, RxDBBranch as ie, isEntityMatchWhere as Q, isEntityEffectOrderBy as ge, calculateOrderBy as $e, RepositoryBase as Ue, ENTITY_CREATE_EVENT as se, ENTITY_UPDATE_EVENT as ne, ENTITY_REMOVE_EVENT as V, DATABASE_DELETE as We, DATABASE_INSERT as Ve, DATABASE_UPDATE as Pe, TransactionBeginEvent as Ge, TransactionRollbackEvent as Qe, TransactionCommitEvent as Ke, RxDBAdapterLocalBase as He, uuid as Ye, RxDBAdapterUpdateChangeEvent as Je, RxDBAdapterInsertChangeEvent as Xe, RxDBAdapterDeleteChangeEvent as ze } from "@aiao/rxdb";
2
+ import { proxy as Ze, wrap as et } from "comlink";
3
+ import { firstValueFrom as g, Subject as z, debounceTime as Z, bufferWhen as pe, filter as G, map as w, shareReplay as U, ReplaySubject as re, BehaviorSubject as K, Observable as Re, takeUntil as Te, distinctUntilChanged as tt, tap as D, switchMap as E, take as ae, defer as st, catchError as nt, of as rt, from as me } from "rxjs";
4
+ import { pickBy as Ne, isString as at, isFunction as Ae, traverseObjectKeys as ct, get as ot, once as T } from "@aiao/utils";
5
+ import it from "object-hash";
6
+ import { Factory as lt, SQLITE_ROW as ut, SQLITE_UTF8 as Ie, SQLITE_DETERMINISTIC as ve } from "wa-sqlite";
7
+ const ht = (s) => `SELECT * FROM sqlite_master WHERE type='table' AND name='${s}' limit 1;`, dt = (s) => !!s.sql && (s.results.length === 0 || s.results[0].rows.length === 0), v = "_rowid", _t = (s) => {
8
+ switch (s.type) {
9
+ case $.uuid:
10
+ case $.string:
11
+ case $.json:
12
+ return "TEXT";
13
+ case $.number:
14
+ return "REAL";
15
+ case $.integer:
16
+ case $.boolean:
17
+ return "INTEGER";
18
+ default:
19
+ return "TEXT";
20
+ }
21
+ }, ft = (s, e) => {
22
+ if (s === null && e.nullable) return null;
23
+ if (s !== void 0)
24
+ switch (e.type) {
25
+ case $.boolean:
26
+ return s ? 1 : 0;
27
+ case $.date:
28
+ return s instanceof Date ? s.toISOString() : s;
29
+ default:
30
+ return s;
31
+ }
32
+ }, pt = (s, e) => {
33
+ if (s === null && e.nullable) return null;
34
+ if (s !== void 0)
35
+ switch (e.type) {
36
+ case $.boolean:
37
+ return !!s;
38
+ case $.date:
39
+ return new Date(s);
40
+ case $.json:
41
+ return s ? JSON.parse(s) : null;
42
+ default:
43
+ return s;
44
+ }
45
+ }, Oe = (s, e) => `${e}$${s}`, b = (s) => Oe(s.name, s.namespace), xe = (s, e) => `idx_${s.name}_${e.name}`;
46
+ class R extends Error {
47
+ constructor(e) {
48
+ super(e), this.name = "RxDBError", Object.setPrototypeOf(this, Le.prototype);
49
+ }
50
+ }
51
+ const H = (s, e) => {
52
+ const n = {};
53
+ return Object.keys(e).forEach((t) => {
54
+ t.endsWith("Id") && (n[t] = e[t]);
55
+ const r = s.propertyMap.get(t);
56
+ r && (n[t] = ft(e[t], r));
57
+ }), n;
58
+ }, Se = (s, e) => Ne(e, (n, t) => s.propertyMap.has(t) || s.foreignKeyNames.includes(t)), mt = (s, e) => Ne(e, (n, t) => s.propertyMap.get(t)?.readonly !== !0), qe = (s) => at(s) ? `'${s}'` : s ?? "NULL", ee = (s, e = []) => {
59
+ for (; s.includes("?"); ) {
60
+ const n = qe(e.shift());
61
+ s = s.replace("?", n);
62
+ }
63
+ return s;
64
+ }, ce = (s, e, n) => {
65
+ const t = {};
66
+ return n.forEach((r, a) => {
67
+ const c = e[a];
68
+ if (s.isForeignKey(c))
69
+ t[c] = r;
70
+ else {
71
+ const o = s.propertyMap.get(c);
72
+ o && (t[c] = pt(r, o));
73
+ }
74
+ }), t;
75
+ }, Et = async (s, e, n) => {
76
+ const t = s.localRxDBBranch(), r = s.localRxDBChange();
77
+ let a = !1;
78
+ try {
79
+ await g(t.get(e)), a = !0;
80
+ } catch {
81
+ }
82
+ if (a) throw new R(`Branch ID (${e}) already exists`);
83
+ let c;
84
+ if (n ? c = await g(
85
+ t.findOne({
86
+ where: {
87
+ combinator: "and",
88
+ rules: [{ field: "changes.id", operator: "=", value: n }]
89
+ }
90
+ })
91
+ ) : c = await g(
92
+ t.findOne({
93
+ where: {
94
+ combinator: "and",
95
+ rules: [{ field: "activated", operator: "=", value: !0 }]
96
+ }
97
+ })
98
+ ), !c) throw new R("Source branch not found");
99
+ n || (n = (await g(
100
+ r.findOne({
101
+ where: {
102
+ combinator: "and",
103
+ rules: [
104
+ { field: "branchId", operator: "=", value: c.id },
105
+ {
106
+ field: "revertChangedAt",
107
+ operator: "=",
108
+ value: null
109
+ }
110
+ ]
111
+ },
112
+ orderBy: [{ field: "id", sort: "desc" }]
113
+ })
114
+ ))?.id), console.log("创建分支", {
115
+ fromBranch: c,
116
+ fromChangeId: n,
117
+ newBranchId: e
118
+ });
119
+ }, Be = (s, e, n) => {
120
+ const t = b(s), r = n?.userId && s.propertyMap.has("createdBy"), a = n?.userId && s.propertyMap.has("updatedBy"), c = [...s.propertyMap.keys(), ...s.foreignKeyNames], o = [];
121
+ e.forEach((u) => {
122
+ const l = Se(s, u);
123
+ r && (l.createdBy = n.userId), a && (l.updatedBy = n.userId);
124
+ const h = H(s, l), _ = [];
125
+ c.forEach((f) => {
126
+ const p = qe(h[f]);
127
+ _.push(p);
128
+ }), o.push(_);
129
+ });
130
+ const i = o.map((u) => `(${u.join(",")})`).join(",");
131
+ return `INSERT INTO "${t}" (${c.join(",")}) VALUES ${i};`;
132
+ }, yt = (s, e) => {
133
+ let n = "";
134
+ const t = b(e);
135
+ return Array.from(e.relationMap.values()).forEach((r) => {
136
+ switch (r.kind) {
137
+ case B.ONE_TO_ONE:
138
+ case B.MANY_TO_ONE:
139
+ {
140
+ const a = `${r.name}Id`;
141
+ if (n += `
142
+ ALTER TABLE "${t}" ADD COLUMN "${a}" TEXT`, r.nullable || (n += " NOT NULL"), r.kind === B.MANY_TO_ONE && Reflect.get(r, "default") !== void 0) {
143
+ const c = r;
144
+ let o = c.default;
145
+ Ae(c.default) && (o = c.default()), n += ` DEFAULT ${o}`;
146
+ }
147
+ if (r.mappedEntity) {
148
+ const c = Oe(r.mappedEntity, r.mappedNamespace);
149
+ n += ` REFERENCES ${c}(id)`;
150
+ }
151
+ r.kind === B.MANY_TO_ONE && (n += " ON DELETE CASCADE"), n += ";", (r.unique || r.kind === B.ONE_TO_ONE) && (n += `
152
+ CREATE UNIQUE INDEX ${xe(e, r)} on "${t}"(${a});`);
153
+ }
154
+ break;
155
+ }
156
+ }), n;
157
+ }, bt = (s, e) => {
158
+ const n = b(e);
159
+ let t = `CREATE TABLE "${n}" (`;
160
+ const r = [], a = [], c = [];
161
+ e.propertyMap.forEach((i) => {
162
+ let u = `"${i.name}" ${_t(i)}`;
163
+ if (i.type === $.integer && i.primary ? u += " PRIMARY KEY AUTOINCREMENT" : (i.type === $.uuid || i.type === $.string) && i.primary && (u += " PRIMARY KEY"), !i.nullable) u += " NOT NULL";
164
+ else if (Reflect.get(i, "default") !== void 0) {
165
+ let l = i.default;
166
+ Ae(i.default) && (l = i.default()), l === "CURRENT_TIMESTAMP" ? u += " DEFAULT(strftime('%FT%H:%M:%fZ'))" : u += ` DEFAULT ${String(l)}`;
167
+ }
168
+ switch (i.type) {
169
+ case $.json:
170
+ a.push(`CHECK ( JSON_VALID(${i.name})=1 )`);
171
+ break;
172
+ case $.boolean:
173
+ a.push(`CHECK (${i.name} in(0,1))`);
174
+ break;
175
+ }
176
+ i.unique && r.push(
177
+ `CREATE UNIQUE INDEX ${xe(e, i)} on "${n}"(${i.name});`
178
+ ), c.push(u);
179
+ });
180
+ const o = [...c, ...a];
181
+ if (o.length)
182
+ t += o.map((i) => `
183
+ ${i}`).join(","), t += `
184
+ );`;
185
+ else
186
+ throw new R("columns is empty!");
187
+ return r.length && (t += `
188
+ ` + r.join(`
189
+ `)), t;
190
+ }, wt = (s, e) => {
191
+ let n = "";
192
+ return n += bt(s, e), n += yt(s, e), n;
193
+ }, le = (s, e, n = "main", t = null) => {
194
+ const r = b(e), a = N(we), c = b(a), { propertyMap: o, name: i, foreignKeyNames: u, namespace: l } = e, h = [...o.keys(), ...u].filter((d) => ["id", "updatedAt"].includes(d) === !1), _ = "namespace, entity, type, branchId, parentId, entityId, inversePatch, patch", f = t !== null && t >= 0 ? t : "NULL", p = `
195
+ DROP TRIGGER IF EXISTS ${r}_insert;
196
+ CREATE TRIGGER ${r}_insert AFTER INSERT ON "${r}"
197
+ BEGIN
198
+ INSERT INTO ${c} (${_}) VALUES (
199
+ '${l}', '${i}', 'INSERT', '${n}', ${f}, NEW.id, NULL,
200
+ json_object(${h.map((d) => `'${d}', NEW.${d}`).join(`,
201
+ `)})
202
+ );
203
+ END;`, m = `
204
+ DROP TRIGGER IF EXISTS ${r}_update;
205
+ CREATE TRIGGER ${r}_update AFTER UPDATE ON "${r}"
206
+ WHEN ( ${h.map((d) => `OLD.${d} IS NOT NEW.${d}`).join(` OR
207
+ `)} )
208
+ BEGIN
209
+ INSERT INTO ${c} (${_}) VALUES (
210
+ '${l}','${i}','UPDATE', '${n}', ${f}, NEW.id,
211
+ (
212
+ SELECT json_group_object(key, value) FROM (
213
+ ${h.map((d) => `SELECT '${d}' AS key, OLD.${d} AS value WHERE OLD.${d} IS NOT NEW.${d}`).join(`
214
+ UNION `)}
215
+ )
216
+ ),
217
+ (
218
+ SELECT json_group_object(key, value) FROM (
219
+ ${h.map((d) => `SELECT '${d}' AS key, NEW.${d} AS value WHERE OLD.${d} IS NOT NEW.${d}`).join(`
220
+ UNION `)}
221
+ )
222
+ )
223
+ );
224
+ END;`, A = `
225
+ DROP TRIGGER IF EXISTS ${r}_delete;
226
+ CREATE TRIGGER ${r}_delete AFTER DELETE ON "${r}"
227
+ BEGIN
228
+ INSERT INTO ${c} (${_}) VALUES (
229
+ '${l}', '${i}', 'DELETE', '${n}', ${f}, OLD.id,
230
+ json_object(${h.map((d) => `'${d}', OLD.${d}`).join(`,
231
+ `)}), NULL
232
+ );
233
+ END;`;
234
+ return p + `
235
+ ` + m + `
236
+ ` + A;
237
+ }, gt = (s, e, n) => {
238
+ let t = "";
239
+ for (let r = 0; r < e.length; r++) {
240
+ const a = e[r], c = N(a);
241
+ if (t += `
242
+ ` + wt(s, c), c.log !== !1) {
243
+ const o = le(s, c);
244
+ t += `
245
+ ` + o;
246
+ }
247
+ }
248
+ if (n) {
249
+ const r = /* @__PURE__ */ new Map();
250
+ n.forEach((a) => {
251
+ const c = N(a);
252
+ r.has(c) === !1 && r.set(c, /* @__PURE__ */ new Set()), r.get(c).add(a);
253
+ });
254
+ for (const a of r.keys()) {
255
+ const c = Be(
256
+ a,
257
+ Array.from(r.get(a)),
258
+ s.rxdb.context
259
+ );
260
+ t += `
261
+ ` + c;
262
+ }
263
+ }
264
+ return t;
265
+ }, ke = (s, e, n, t) => {
266
+ const r = mt(s, n);
267
+ s.propertyMap.has("updatedAt") && (r.updatedAt = t?.updatedAt ?? /* @__PURE__ */ new Date()), t?.userId && s.propertyMap.has("updatedBy") && (r.updatedBy = t.userId);
268
+ const a = H(s, r), c = Object.keys(r).map((h) => `${h} = ?`).join(","), o = [...Object.values(a)], i = b(s), u = Array.isArray(e) ? e : [e];
269
+ let l = `UPDATE "${i}" SET ${c} WHERE id `;
270
+ return Array.isArray(e) ? l += `in (${u.map((h) => `'${h.id}'`).join(",")})` : (o.push(e.id), l += "= ?"), t?.returning !== !1 ? l += ` RETURNING rowid as ${v}, *;` : l += ";", {
271
+ sql: l,
272
+ params: o
273
+ };
274
+ }, ue = (s) => s?.map((e) => `_."${e.field}" ${e.sort}`).join(", "), L = (s, e = /* @__PURE__ */ new Map()) => {
275
+ const n = s.rules.map((t) => Ee(t) ? L(t, e) : $t(t, e)).filter(Boolean);
276
+ return n.length === 0 ? "" : n.length === 1 ? n[0] : `(${n.join(Ee(s) ? ` ${s.combinator} ` : " ")})`;
277
+ }, $t = (s, e) => {
278
+ let n, t;
279
+ if (s?.value === null ? s.operator === "=" ? (n = "", t = "is null") : s.operator === "!=" && (n = "", t = "is not null") : (n = Tt(s.operator).toLowerCase(), t = Nt(s)), !t && ["in", "notIn", "between", "notBetween"].includes(s.operator)) return "";
280
+ let r = String(s.field);
281
+ if (e.has(r))
282
+ r = e.get(r);
283
+ else if (r.includes(".")) {
284
+ const a = r.lastIndexOf("."), c = r.slice(0, a), o = r.slice(a + 1);
285
+ r = `'${c}'.${o}`;
286
+ }
287
+ return `${r} ${n} ${t}`.replaceAll(/ +/g, " ").trim();
288
+ }, Ee = (s) => "rules" in s && "combinator" in s, Rt = {
289
+ "=": "=",
290
+ "!=": "!=",
291
+ ">": ">",
292
+ ">=": ">=",
293
+ "<": "<",
294
+ "<=": "<=",
295
+ in: "IN",
296
+ notIn: "NOT IN",
297
+ between: "BETWEEN",
298
+ notBetween: "NOT BETWEEN",
299
+ contains: "LIKE",
300
+ notContain: "NOT LIKE",
301
+ beginWith: "LIKE",
302
+ notBeginWith: "NOT LIKE",
303
+ endWith: "LIKE",
304
+ notEndWith: "NOT LIKE"
305
+ }, Tt = (s) => Rt[s] || s, Nt = (s) => {
306
+ switch (s.operator) {
307
+ case "in":
308
+ case "notIn":
309
+ return `(${s.value.map((e) => `'${e}'`).join(", ")})`;
310
+ case "between":
311
+ case "notBetween": {
312
+ const [e, n] = s.value;
313
+ return `'${e}' and '${n}'`;
314
+ }
315
+ case "contains":
316
+ case "notContain":
317
+ return `'%${s.value}%'`;
318
+ case "beginWith":
319
+ case "notBeginWith":
320
+ return `'${s.value}%'`;
321
+ case "endWith":
322
+ case "notEndWith":
323
+ return `'%${s.value}'`;
324
+ }
325
+ return typeof s.value == "boolean" ? s.value ? "1" : "0" : typeof s.value == "string" ? `'${s.value}'` : typeof s.value == "number" ? s.value.toString() : s.value instanceof Date ? `'${s.value.toISOString()}'` : `'${s.value}'`;
326
+ }, Y = (s, e, n) => {
327
+ const t = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), o = (l) => {
328
+ let h = l, _ = 1;
329
+ for (; r.has(h); )
330
+ h = `${l}_${_}`, _++;
331
+ return r.add(h), h;
332
+ }, i = (l) => {
333
+ if (c.has(l))
334
+ return c.get(l);
335
+ const h = l.includes("_") ? l : l.split("_")[0], _ = o(h);
336
+ return c.set(l, _), _;
337
+ };
338
+ ct(n, (l, h, _) => {
339
+ const f = h;
340
+ if (l !== "field" || f.includes(".") === !1) return;
341
+ const { relations: p, isForeignKey: m, propertyName: A } = s.rxdb.schemaManager.getFieldRelations(
342
+ e,
343
+ h
344
+ );
345
+ if (m) {
346
+ _.field = A;
347
+ return;
348
+ }
349
+ const d = f.replace(`.${A}`, ""), y = (O) => p.length === 1 ? O.name : `${d}_${O.name}`, k = (O) => (t.has(O) || t.set(O, []), t.get(O));
350
+ p.forEach(({ metadata: O, relation: S }, _e) => {
351
+ const W = s.rxdb.schemaManager.findMappedRelation(O, S);
352
+ if (!W) throw new R("mappedRelation not found");
353
+ const X = () => {
354
+ const q = k(W.metadata), I = y(S), F = i(I);
355
+ return {
356
+ joinArray: q,
357
+ uniqueAlias: F
358
+ };
359
+ };
360
+ let x = "_";
361
+ if (_e > 0) {
362
+ const q = p[_e - 1], I = y(q.relation);
363
+ x = i(I);
364
+ }
365
+ switch (S.kind) {
366
+ case B.ONE_TO_ONE:
367
+ case B.ONE_TO_MANY:
368
+ {
369
+ const { joinArray: q, uniqueAlias: I } = X();
370
+ q.push({
371
+ joinTableName: I,
372
+ on: `'${I}'.${W.relation.name}Id = ${x === "_" ? x : `'${x}'`}.id`
373
+ });
374
+ }
375
+ break;
376
+ case B.MANY_TO_ONE:
377
+ {
378
+ const { joinArray: q, uniqueAlias: I } = X();
379
+ q.push({
380
+ joinTableName: I,
381
+ on: `'${I}'.id = ${x === "_" ? x : `'${x}'`}.${S.name}Id`
382
+ });
383
+ }
384
+ break;
385
+ case B.MANY_TO_MANY:
386
+ {
387
+ const q = N(S.junctionEntityType), I = k(q), F = o(`${S.name}_m_n`);
388
+ I.push({
389
+ joinTableName: F,
390
+ on: `'${F}'.${W.relation.name}Id = ${x === "_" ? x : `'${x}'`}.id`
391
+ });
392
+ const { joinArray: De, uniqueAlias: fe } = X();
393
+ De.push({
394
+ joinTableName: fe,
395
+ on: `'${fe}'.id = '${F}'.${S.name}Id`
396
+ });
397
+ }
398
+ break;
399
+ }
400
+ });
401
+ const C = p[p.length - 1];
402
+ if (s.rxdb.schemaManager.findMappedRelation(
403
+ C.metadata,
404
+ C.relation
405
+ )) {
406
+ const O = y(C.relation), S = i(O);
407
+ a.set(f, `'${S}'.${A}`);
408
+ }
409
+ });
410
+ let u = "";
411
+ for (const [l, h] of t.entries()) {
412
+ const _ = b(l);
413
+ for (const f of h)
414
+ u += ` LEFT JOIN "${_}" "${f.joinTableName}" ON ${f.on}`;
415
+ }
416
+ return { joinSQL: u, fieldAliasMap: a };
417
+ }, J = (s) => {
418
+ const { tableName: e, where: n, limit: t, offset: r, orderBy: a, join: c } = s;
419
+ let o = `SELECT _.rowid as ${v}, _.* FROM '${e}' _`;
420
+ return c && (o += c), n && (o += ` where ${n}`), a && (o += ` order by ${a}`), t && (o += ` limit ${t}`), r && (o += ` offset ${r}`), o += ";", o;
421
+ }, At = (s, e, n) => {
422
+ const t = n.where, { joinSQL: r, fieldAliasMap: a } = Y(s, e, t), c = b(e), o = L(t, a), i = ue(n?.orderBy), u = n?.limit || 100, l = n?.offset || 0;
423
+ return {
424
+ sql: J({ tableName: c, where: o, orderBy: i, join: r, limit: u, offset: l }),
425
+ params: []
426
+ };
427
+ }, oe = (s, e, n) => {
428
+ const t = n.where, { joinSQL: r, fieldAliasMap: a } = Y(s, e, t), c = b(e), o = L(t, a), i = ue(n?.orderBy);
429
+ return {
430
+ sql: J({ tableName: c, where: o, orderBy: i, join: r }),
431
+ params: []
432
+ };
433
+ }, It = (s, e, n) => {
434
+ const t = n.where, { joinSQL: r, fieldAliasMap: a } = Y(s, e, t), c = b(e), o = L(t, a);
435
+ let i = `SELECT count(_.rowid) as count FROM "${c}" _`;
436
+ return n?.groupBy, r && (i += r), o && (i += ` where ${o}`), {
437
+ sql: i,
438
+ params: []
439
+ };
440
+ }, te = (s, e, n) => {
441
+ const t = n.where, { joinSQL: r, fieldAliasMap: a } = Y(s, e, t), c = b(e), o = L(t, a), i = ue(n?.orderBy);
442
+ return {
443
+ sql: J({ tableName: c, where: o, orderBy: i, join: r, limit: 1 }),
444
+ params: []
445
+ };
446
+ }, vt = (s, e) => {
447
+ const n = `${v} IN (${e.join(",")})`, t = b(s);
448
+ return {
449
+ sql: J({ tableName: t, where: n }),
450
+ params: []
451
+ };
452
+ }, ye = async (s, e) => {
453
+ const n = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
454
+ for (let o = 0; o < e.length; o++) {
455
+ const i = e[o];
456
+ if (M(i).local) {
457
+ let l = [];
458
+ t.has(i.constructor) ? l = t.get(i.constructor) : t.set(i.constructor, l), l.push(i);
459
+ } else {
460
+ let l = [];
461
+ n.has(i.constructor) ? l = n.get(i.constructor) : n.set(i.constructor, l), l.push(i);
462
+ }
463
+ }
464
+ let a = "";
465
+ return n.forEach((o, i) => {
466
+ const u = N(i), l = Be(u, o, s.rxdb.context), h = o.map((m) => m.id);
467
+ h.forEach((m) => r.set(m, i));
468
+ const { sql: _, params: f } = oe(s, u, {
469
+ where: {
470
+ combinator: "and",
471
+ rules: [
472
+ {
473
+ field: "id",
474
+ operator: "in",
475
+ value: h
476
+ }
477
+ ]
478
+ }
479
+ }), p = ee(_, f);
480
+ a += l + p;
481
+ }), t.forEach((o, i) => {
482
+ const u = N(i), l = Object.groupBy(o, (h) => {
483
+ const _ = M(h);
484
+ return it(_.patch);
485
+ });
486
+ Object.values(l).forEach((h) => {
487
+ const _ = h[0], f = M(_), p = /* @__PURE__ */ new Date(), m = ke(u, h, f.patch, {
488
+ ...s.rxdb.context,
489
+ returning: !1,
490
+ updatedAt: p
491
+ }), A = ee(m.sql, m.params);
492
+ a += A;
493
+ const d = h.map((C) => C.id);
494
+ d.forEach((C) => r.set(C, i));
495
+ const y = oe(s, u, {
496
+ where: {
497
+ combinator: "and",
498
+ rules: [
499
+ {
500
+ field: "id",
501
+ operator: "in",
502
+ value: d
503
+ }
504
+ ]
505
+ }
506
+ }), k = ee(y.sql, y.params);
507
+ a += k;
508
+ });
509
+ }), (await g(s.execute(a))).results.forEach(({ columns: o, rows: i }) => {
510
+ const u = o.findIndex((_) => _ === "id"), l = o.findIndex((_) => _ === v), h = s.rxdb.entityManager;
511
+ i.forEach((_) => {
512
+ const f = _[u], p = r.get(f), m = N(p);
513
+ let A;
514
+ if (h.hasEntityRef(p, f)) {
515
+ A = h.getEntityRef(p, f);
516
+ const d = ce(m, o, _);
517
+ s.getRepository(p).updateEntity(A, d);
518
+ const y = M(A);
519
+ y.local = !0, l !== -1 && (y.rowId = BigInt(_[l])), y.modified = !1;
520
+ }
521
+ });
522
+ }), n.forEach((o) => {
523
+ s.rxdb.dispatchEvent(new je(o));
524
+ }), t.forEach((o) => {
525
+ s.rxdb.dispatchEvent(new Fe(o));
526
+ }), r.clear(), n.clear(), t.clear(), e;
527
+ }, Ot = (s, e, n) => {
528
+ let t = "";
529
+ if (s.rxdb.options.entities.forEach((r) => {
530
+ const a = N(r);
531
+ if (a.log !== !1) {
532
+ const c = le(s, a, e, n);
533
+ t += `
534
+ ` + c;
535
+ }
536
+ }), t) {
537
+ const r = N(ie), a = b(r);
538
+ t = `
539
+ ${t}
540
+ UPDATE "${a}" SET activated = 1 WHERE id = '${e}' and activated != 1 RETURNING rowid as ${v},*;
541
+ UPDATE "${a}" SET activated = 0 WHERE id != '${e}' and activated = 1 RETURNING rowid as ${v},*;
542
+ `;
543
+ }
544
+ return t;
545
+ }, xt = async (s, e) => {
546
+ const n = s.localRxDBBranch(), t = s.localRxDBChange(), r = await g(
547
+ n.findOne({
548
+ where: {
549
+ combinator: "and",
550
+ rules: [{ field: "activated", operator: "=", value: !0 }]
551
+ }
552
+ })
553
+ );
554
+ if (!r) throw new R("Current branch not found");
555
+ if (r.id === e) return;
556
+ const a = await g(
557
+ t.findOne({
558
+ where: {
559
+ combinator: "and",
560
+ rules: [
561
+ { field: "branchId", operator: "=", value: r.id },
562
+ {
563
+ field: "revertChangedAt",
564
+ operator: "=",
565
+ value: null
566
+ }
567
+ ]
568
+ },
569
+ orderBy: [{ field: "id", sort: "desc" }]
570
+ })
571
+ );
572
+ a && (a.parentId ? console.log("把当前分支的数据切换记录到:", a.parentId) : console.log("不应该出现这个情况,如果为空,应该还原所有记录"));
573
+ const c = await g(
574
+ t.findOne({
575
+ where: {
576
+ combinator: "and",
577
+ rules: [{ field: "branchId", operator: "=", value: e }]
578
+ },
579
+ orderBy: [{ field: "id", sort: "desc" }]
580
+ })
581
+ );
582
+ let o = "";
583
+ if (s.rxdb.options.entities.forEach((i) => {
584
+ const u = N(i);
585
+ if (u.log !== !1) {
586
+ const l = le(s, u, e, c?.id);
587
+ o += `
588
+ ` + l;
589
+ }
590
+ }), o) {
591
+ o = `
592
+ BEGIN;
593
+ ${Ot(s, e, c?.id)}
594
+ COMMIT;
595
+ `;
596
+ const u = await g(s.execute(o));
597
+ s.getRepository(ie).addQueryCache(u, !0);
598
+ }
599
+ };
600
+ var P = /* @__PURE__ */ ((s) => (s[s.SQLITE_DELETE = 9] = "SQLITE_DELETE", s[s.SQLITE_INSERT = 18] = "SQLITE_INSERT", s[s.SQLITE_UPDATE = 23] = "SQLITE_UPDATE", s))(P || {});
601
+ const St = "sqlite", qt = () => import("wa-sqlite/dist/wa-sqlite-async.mjs").then((s) => s.default), Bt = () => import("wa-sqlite/dist/wa-sqlite.mjs").then((s) => s.default), kt = [
602
+ {
603
+ name: "MemoryVFS",
604
+ vfsModule: () => import("wa-sqlite/src/examples/MemoryVFS.js").then((s) => s.MemoryVFS),
605
+ sync: !0,
606
+ async: !0,
607
+ worker: !0,
608
+ sharedWorker: !0,
609
+ jsContext: !0,
610
+ multipleConnections: !1
611
+ },
612
+ {
613
+ name: "MemoryAsyncVFS",
614
+ vfsModule: () => import("wa-sqlite/src/examples/MemoryAsyncVFS.js").then((s) => s.MemoryAsyncVFS),
615
+ sync: !1,
616
+ async: !0,
617
+ worker: !0,
618
+ sharedWorker: !0,
619
+ jsContext: !0,
620
+ multipleConnections: !1
621
+ },
622
+ {
623
+ name: "IDBBatchAtomicVFS",
624
+ vfsModule: () => import("wa-sqlite/src/examples/IDBBatchAtomicVFS.js").then((s) => s.IDBBatchAtomicVFS),
625
+ vfsOptions: { lockPolicy: "shared+hint" },
626
+ sync: !1,
627
+ async: !0,
628
+ worker: !0,
629
+ sharedWorker: !0,
630
+ jsContext: !0,
631
+ multipleConnections: !0
632
+ },
633
+ {
634
+ name: "OPFSAdaptiveVFS",
635
+ vfsModule: () => import("wa-sqlite/src/examples/OPFSAdaptiveVFS.js").then((s) => s.OPFSAdaptiveVFS),
636
+ vfsOptions: { lockPolicy: "shared+hint" },
637
+ sync: !1,
638
+ async: !0,
639
+ worker: !0,
640
+ sharedWorker: !1,
641
+ jsContext: !1,
642
+ multipleConnections: !0
643
+ },
644
+ {
645
+ name: "AccessHandlePoolVFS",
646
+ vfsModule: () => import("wa-sqlite/src/examples/AccessHandlePoolVFS.js").then((s) => s.AccessHandlePoolVFS),
647
+ sync: !0,
648
+ async: !0,
649
+ worker: !0,
650
+ sharedWorker: !1,
651
+ jsContext: !1,
652
+ multipleConnections: !1
653
+ },
654
+ {
655
+ name: "OPFSAnyContextVFS",
656
+ vfsModule: () => import("wa-sqlite/src/examples/OPFSAnyContextVFS.js").then((s) => s.OPFSAnyContextVFS),
657
+ vfsOptions: { lockPolicy: "shared+hint" },
658
+ sync: !1,
659
+ async: !0,
660
+ worker: !0,
661
+ sharedWorker: !1,
662
+ jsContext: !0,
663
+ multipleConnections: !0
664
+ },
665
+ {
666
+ name: "OPFSCoopSyncVFS",
667
+ vfsModule: () => import("wa-sqlite/src/examples/OPFSCoopSyncVFS.js").then((s) => s.OPFSCoopSyncVFS),
668
+ sync: !0,
669
+ async: !0,
670
+ worker: !0,
671
+ sharedWorker: !1,
672
+ jsContext: !1,
673
+ multipleConnections: !0
674
+ },
675
+ {
676
+ name: "OPFSPermutedVFS",
677
+ vfsModule: () => import("wa-sqlite/src/examples/OPFSPermutedVFS.js").then((s) => s.OPFSPermutedVFS),
678
+ sync: !1,
679
+ async: !0,
680
+ worker: !0,
681
+ sharedWorker: !1,
682
+ jsContext: !1,
683
+ multipleConnections: !0
684
+ }
685
+ ], Ce = (s) => {
686
+ const e = kt.find((a) => a.name === s.vfs), { vfs: n, async: t, worker: r } = s;
687
+ if (!e) throw new R(`vfs ${n} not found`);
688
+ if (t !== t) throw new R(`vfs ${n} not support async: ${t}`);
689
+ if (r && !e.worker) throw new R(`vfs ${n} not support worker`);
690
+ if (!r && !e.jsContext) throw new R(`vfs ${n} only support worker`);
691
+ return e;
692
+ }, Ct = async (s) => {
693
+ const e = Ce(s), n = s.async ?? !0;
694
+ let t;
695
+ n ? t = qt : t = Bt;
696
+ const [r, a] = await Promise.all([t(), e.vfsModule()]), c = {};
697
+ s.locateFile ? c.locateFile = s.locateFile : s.wasmPath && (c.locateFile = () => s.wasmPath);
698
+ const o = await r(c), i = lt(o), u = await a.create(s.vfs, o, e.vfsOptions);
699
+ return i.vfs_register(u, !0), i;
700
+ }, Mt = async (s, e, n, t) => {
701
+ const r = performance.now(), a = t ? [t] : [[]], c = [];
702
+ let o = 0;
703
+ const i = {
704
+ sql: n,
705
+ results: c
706
+ };
707
+ for await (const u of s.statements(e, n)) {
708
+ if (t)
709
+ for (const _ of a)
710
+ s.reset(u), t && s.bind_collection(u, _);
711
+ const l = [];
712
+ for (; await s.step(u) === ut; ) {
713
+ const _ = s.row(u);
714
+ l.push(_);
715
+ }
716
+ const h = s.column_names(u);
717
+ h.length && c.push({ columns: h, rows: l }), o += s.changes(e);
718
+ }
719
+ return {
720
+ ...i,
721
+ rowsAffected: o,
722
+ elapsed: performance.now() - r
723
+ };
724
+ }, Dt = (s, e) => s.create_function(e, "regexp", 2, Ie | ve, 0, (n, t) => {
725
+ const r = new RegExp(s.value_text(t[0])), a = s.value_text(t[1]);
726
+ s.result(n, r.test(a) ? 1 : 0);
727
+ }), Lt = (s, e) => s.create_function(e, "regexp_replace", -1, Ie | ve, 0, (n, t) => {
728
+ if (t.length < 3) {
729
+ s.result(n, "");
730
+ return;
731
+ }
732
+ const r = s.value_text(t[0]), a = s.value_text(t[1]), c = s.value_text(t[2]), o = t.length > 3 ? s.value_text(t[3]) : "";
733
+ s.result(n, a.replace(new RegExp(r, o), c));
734
+ });
735
+ class jt {
736
+ #e;
737
+ #t;
738
+ #r = [];
739
+ #s;
740
+ #n;
741
+ set onChange(e) {
742
+ this.#n = e;
743
+ }
744
+ async init(e, n) {
745
+ const t = await Ct(n), r = e + ".sqlite";
746
+ this.#t = await t.open_v2(r), this.#e = t, Dt(t, this.#t), Lt(t, this.#t);
747
+ const a = n?.cacheSizeKb || 50 * 1024;
748
+ await this.execute(`
749
+ PRAGMA temp_store = memory;
750
+ PRAGMA journal_mode = delete;
751
+ PRAGMA foreign_keys = ON;
752
+ PRAGMA cache_size = -${a};
753
+ `), this.#e.update_hook(
754
+ this.#t,
755
+ (c, o, i, u) => {
756
+ if (i !== "public$RxDBChange" || !o || !i || !this.#n) return;
757
+ const l = {
758
+ type: c,
759
+ dbName: o,
760
+ tableName: i,
761
+ rowId: u
762
+ };
763
+ this.#r.push(l), this.#s && clearTimeout(this.#s), this.#s = setTimeout(() => {
764
+ this.#a(), this.#s = void 0;
765
+ });
766
+ }
767
+ );
768
+ }
769
+ async version() {
770
+ const e = await this.execute("SELECT sqlite_version()");
771
+ return ot(e, "results[0].rows[0][0]");
772
+ }
773
+ async disconnect() {
774
+ await this.#e.close(this.#t);
775
+ }
776
+ /**
777
+ * 执行 sql
778
+ * @param sql
779
+ * @param bindings
780
+ * @returns
781
+ */
782
+ async execute(e, n) {
783
+ return Mt(this.#e, this.#t, e, n);
784
+ }
785
+ #a() {
786
+ const e = Object.groupBy(this.#r, (n) => `${n.type}_${n.dbName}_${n.tableName}`);
787
+ Object.values(e).forEach((n) => {
788
+ const t = n[0], r = n.map((a) => a.rowId);
789
+ this.#n?.({
790
+ type: t.type,
791
+ dbName: t.dbName,
792
+ tableName: t.tableName,
793
+ rowIds: r,
794
+ recordAt: /* @__PURE__ */ new Date()
795
+ });
796
+ }), this.#r.length = 0;
797
+ }
798
+ }
799
+ const Ft = (s, e, n) => {
800
+ const t = b(s), r = [e.id];
801
+ return {
802
+ sql: `DELETE FROM "${t}" WHERE id = ?;`,
803
+ params: r
804
+ };
805
+ }, Ut = (s, e, n) => {
806
+ const t = b(s), r = Se(s, e);
807
+ n?.userId && (s.propertyMap.has("createdBy") && (r.createdBy = n.userId), s.propertyMap.has("updatedBy") && (r.updatedBy = n.userId));
808
+ const a = Object.keys(r), c = H(s, r), o = Array(a.length).fill("?").join(","), i = Object.values(c);
809
+ let u = `INSERT INTO "${t}" (${a.join(",")}) VALUES (${o})`;
810
+ return n?.returning !== !1 ? u += ` RETURNING rowid as ${v}, *;` : u += ";", {
811
+ sql: u,
812
+ params: i
813
+ };
814
+ }, Wt = (s, e, n) => {
815
+ const t = {};
816
+ s.propertyMap.has("removedAt") && (t.removedAt = /* @__PURE__ */ new Date()), n?.userId && s.propertyMap.has("removedBy") && (t.removedBy = n.userId);
817
+ const r = b(s), c = Object.keys(t).map((l) => `${l} = ?`).join(","), o = H(s, t), i = [...Object.values(o), e.id];
818
+ let u = `UPDATE "${r}" SET ${c} WHERE id = ? and removedAt is null and removedBy is null`;
819
+ return n?.returning !== !1 ? u += ` RETURNING rowid as ${v}, *;` : u += ";", {
820
+ sql: u,
821
+ params: i
822
+ };
823
+ }, he = (s, e, n, t, r) => {
824
+ if (s.length === 0 && e.length === 0) return { refresh: !1, recalculate: !1 };
825
+ const { options: a } = n, c = t.resultEntityIds, o = T(() => r.map((d) => d.id)), i = T(() => r.some((d) => Q(d, a.where))), u = T(
826
+ () => a.orderBy && r.some(
827
+ (d) => ge(d, t.resultEntities || [], a.orderBy)
828
+ )
829
+ ), l = T(() => u() !== !1), h = T(() => i() === !1), _ = T(
830
+ () => c ? c.some((d) => o().includes(d)) : !0
831
+ ), f = T(() => _() === !1), p = {
832
+ match_where: i,
833
+ not_match_where: h,
834
+ match_order_by: l,
835
+ result_contains: _,
836
+ result_not_contains: f
837
+ }, m = e.some(
838
+ (d) => d.every((y) => p[y]())
839
+ );
840
+ return {
841
+ refresh: m === !1 && s.some(
842
+ (d) => d.every((y) => p[y]())
843
+ ),
844
+ recalculate: m
845
+ };
846
+ }, Vt = (s, e, n) => {
847
+ switch (e.type) {
848
+ case "findAll":
849
+ {
850
+ const { options: t } = e;
851
+ let r = s.resultEntities;
852
+ r = r.concat(n), r = r.filter((a) => Q(a, e.options.where)), t.orderBy && t.orderBy.length && (r = $e(r, t.orderBy)), s.updateResult(r), e.refresh();
853
+ }
854
+ break;
855
+ }
856
+ }, Pt = (s, e, n) => {
857
+ const t = [], r = [];
858
+ switch (e.type) {
859
+ case "find":
860
+ t.push(["match_where"]);
861
+ break;
862
+ case "findAll":
863
+ r.push(["match_where"]);
864
+ break;
865
+ case "findOne":
866
+ case "findOneOrFail":
867
+ case "count":
868
+ t.push(["match_where"]);
869
+ break;
870
+ }
871
+ const a = he(t, r, e, s, n);
872
+ a.refresh ? s.refresh() : a.recalculate && Vt(s, e, n);
873
+ }, Gt = (s, e, n) => {
874
+ if (Array.isArray(s.result)) {
875
+ const t = s.result.filter((r) => !n.includes(r));
876
+ s.updateResult(t), e.refresh();
877
+ }
878
+ }, Qt = (s, e, n) => {
879
+ const t = [], r = [];
880
+ switch (e.type) {
881
+ case "find":
882
+ t.push(["match_where"], ["not_match_where", "result_contains"]);
883
+ break;
884
+ case "findAll":
885
+ r.push(["result_contains"]);
886
+ break;
887
+ case "findOne":
888
+ case "findOneOrFail":
889
+ case "count":
890
+ t.push(["match_where"]);
891
+ break;
892
+ }
893
+ const a = he(t, r, e, s, n);
894
+ a.refresh ? s.refresh() : a.recalculate && Gt(s, e, n);
895
+ }, Kt = (s, e) => {
896
+ switch (e.type) {
897
+ case "findOne":
898
+ case "findOneOrFail":
899
+ case "find":
900
+ case "findAll": {
901
+ let n = s.resultEntities;
902
+ n = n.filter((t) => Q(t, e.options.where)), e.options.orderBy && e.options.orderBy.length && (n = $e(n, e.options.orderBy)), s.updateResult(n), e.refresh();
903
+ return;
904
+ }
905
+ }
906
+ }, Ht = (s, e, n) => {
907
+ const t = [], r = [];
908
+ switch (e.type) {
909
+ case "find":
910
+ t.push(["match_where"], ["not_match_where", "result_contains"]);
911
+ break;
912
+ case "findAll":
913
+ r.push(["match_where"], ["not_match_where", "result_contains"]);
914
+ break;
915
+ case "findOne":
916
+ case "findOneOrFail":
917
+ case "count":
918
+ t.push(["match_where"], ["not_match_where", "result_contains"]);
919
+ break;
920
+ }
921
+ const a = he(t, r, e, s, n);
922
+ a.refresh ? s.refresh() : a.recalculate && Kt(s, e);
923
+ }, be = (s, e = []) => s + e.join(",");
924
+ class Yt extends Ue {
925
+ constructor(e, n, t) {
926
+ super(e.rxdb, t), this.adapter = e, this.client$ = n, this.metadata = N(t), this.run_task$.subscribe(() => this.#e());
927
+ const r = (c) => {
928
+ const o = c.entities.filter((i) => i.constructor === t);
929
+ o.length && this.db_changes_sub.next({ ...c, entities: o });
930
+ };
931
+ this.rxdb.addEventListener(se, (c) => r(c)), this.rxdb.addEventListener(ne, (c) => r(c)), this.rxdb.addEventListener(V, (c) => r(c));
932
+ const a = (c, o) => {
933
+ if (o.EntityType !== t || this.cache_query_task_map.size === 0) return;
934
+ const { rowIds: i, recordAt: u } = o.data, l = [], h = [];
935
+ if (i.forEach((f) => {
936
+ const p = this.rxdb.entityManager.getEntityByRowId(t, f);
937
+ p ? l.push(p) : h.push(f);
938
+ }), c === V && l.length) {
939
+ this.db_changes_sub.next({ type: c, entities: l });
940
+ return;
941
+ }
942
+ h.length && this.db_checks_sub.next({ type: c, changes: o.data }), l.filter(
943
+ (f) => f.updatedAt && f.updatedAt.getTime && u.getTime() - f.updatedAt.getTime() > 500
944
+ ).length && this.db_checks_sub.next({ type: c, changes: o.data });
945
+ };
946
+ this.rxdb.addEventListener(We, (c) => a(V, c)), this.rxdb.addEventListener(Ve, (c) => a(se, c)), this.rxdb.addEventListener(Pe, (c) => a(ne, c));
947
+ }
948
+ metadata;
949
+ // 任务队列
950
+ need_run_task = new z();
951
+ run_task$ = this.need_run_task.asObservable().pipe(Z(0));
952
+ // 根据条件缓存的任务
953
+ cache_query_task_map = /* @__PURE__ */ new Map();
954
+ // 任务队列
955
+ queue_tasks = [];
956
+ // db changes
957
+ db_changes_sub = new z();
958
+ db_changes_next$ = this.db_changes_sub.asObservable().pipe(Z(16));
959
+ db_changes$ = this.db_changes_sub.asObservable().pipe(
960
+ pe(() => this.db_changes_next$),
961
+ G((e) => e.length > 0),
962
+ w((e) => {
963
+ const n = /* @__PURE__ */ new Map();
964
+ e.forEach(({ type: r, entities: a }) => {
965
+ n.has(r) || n.set(r, /* @__PURE__ */ new Set()), a.forEach((c) => n.get(r).add(c));
966
+ });
967
+ const t = Array.from(n.entries()).map(([r, a]) => ({
968
+ type: r,
969
+ entities: Array.from(a)
970
+ }));
971
+ return n.clear(), t;
972
+ }),
973
+ U(1)
974
+ );
975
+ // db checks
976
+ db_checks_sub = new z();
977
+ db_checks_next$ = this.db_checks_sub.asObservable().pipe(Z(16));
978
+ db_checks$ = this.db_checks_sub.asObservable().pipe(
979
+ pe(() => this.db_checks_next$),
980
+ G((e) => e.length > 0),
981
+ w((e) => {
982
+ const n = /* @__PURE__ */ new Map();
983
+ return e.forEach(({ type: t, changes: r }) => {
984
+ n.has(t) || n.set(t, /* @__PURE__ */ new Set());
985
+ const a = n.get(t);
986
+ r.rowIds.forEach((c) => a.add(c));
987
+ }), Array.from(n.entries()).map(([t, r]) => ({
988
+ type: t,
989
+ rowIds: Array.from(r)
990
+ }));
991
+ }),
992
+ U(1)
993
+ );
994
+ /**
995
+ * 添加缓存
996
+ * @param sqliteSuccessResult
997
+ * @param forcedUpdate 强制刷新,在数据有的情况下也会更新数据,在修改数据的情况下需要
998
+ */
999
+ addQueryCache(e, n = !1) {
1000
+ const t = [];
1001
+ return e.results.forEach(({ columns: r, rows: a }) => {
1002
+ const c = r.findIndex((i) => i === "id"), o = r.findIndex((i) => i === v);
1003
+ a.forEach((i) => {
1004
+ const u = i[c];
1005
+ let l;
1006
+ if (this.hasEntityRef(u)) {
1007
+ if (l = this.getEntityRef(u), t.push(l), n) {
1008
+ const _ = ce(this.metadata, r, i);
1009
+ this.updateEntity(l, _);
1010
+ }
1011
+ } else {
1012
+ const _ = ce(this.metadata, r, i);
1013
+ l = this.createEntityRef(_), t.push(l);
1014
+ }
1015
+ const h = M(l);
1016
+ h.local = !0, o !== -1 && (h.rowId = BigInt(i[o])), h.modified = !1;
1017
+ });
1018
+ }), t;
1019
+ }
1020
+ /**
1021
+ * 创建查询任务
1022
+ */
1023
+ create_query_task(e) {
1024
+ const { sql: n, params: t } = e, r = be(n, t), a = /* @__PURE__ */ new Set();
1025
+ let c = !1;
1026
+ const o = new re(), i = o.asObservable(), u = new K(0), l = u.asObservable();
1027
+ let h;
1028
+ if (this.cache_query_task_map.has(r) === !1) {
1029
+ const _ = new Re((p) => (f.observerCount++, h && p.next(h), a.add(p), c || (c = !0, this.queue_tasks.push(f), this.need_run_task.next()), () => {
1030
+ if (f.observerCount--, f.observerCount <= 0) {
1031
+ o.next(), o.complete(), u.unsubscribe(), o.unsubscribe(), a.delete(p), this.cache_query_task_map.delete(r);
1032
+ const m = this.queue_tasks.indexOf(f);
1033
+ m >= 0 && this.queue_tasks.splice(m, 1);
1034
+ }
1035
+ })), f = {
1036
+ sql: n,
1037
+ params: t,
1038
+ observerCount: 0,
1039
+ refreshCount: 0,
1040
+ result$: _,
1041
+ destroy$: i,
1042
+ refresh$: l,
1043
+ resultEntities: [],
1044
+ resultEntityIds: [],
1045
+ refresh: () => u.next(f.refreshCount + 1),
1046
+ updateResult: (p) => {
1047
+ f.result = p, Array.isArray(p) && (f.resultEntities = p, f.resultEntityIds = p.map((m) => m.id));
1048
+ },
1049
+ next: (p) => {
1050
+ h = p, a.forEach((m) => m.next(p));
1051
+ },
1052
+ error: (p) => a.forEach((m) => m.error(p))
1053
+ };
1054
+ return this.cache_query_task_map.set(r, f), f;
1055
+ }
1056
+ return this.cache_query_task_map.get(r);
1057
+ }
1058
+ delete_task(e) {
1059
+ const n = be(e.sql, e.params);
1060
+ this.cache_query_task_map.delete(n);
1061
+ }
1062
+ /**
1063
+ * 队列执行任务
1064
+ */
1065
+ #e() {
1066
+ const e = this.queue_tasks.shift();
1067
+ if (!e) return;
1068
+ const { sql: n, params: t, refresh$: r } = e;
1069
+ r.pipe(
1070
+ Te(e.destroy$),
1071
+ tt(),
1072
+ D(() => e.refreshCount++),
1073
+ E(
1074
+ () => this.client$.pipe(
1075
+ ae(1),
1076
+ E(() => this.adapter.execute(n, t))
1077
+ )
1078
+ )
1079
+ ).subscribe({
1080
+ next: (a) => e.next(a),
1081
+ error: (a) => e.error(a)
1082
+ });
1083
+ }
1084
+ }
1085
+ class Me extends Yt {
1086
+ #e = /* @__PURE__ */ new Map();
1087
+ constructor(e, n, t) {
1088
+ super(e, n, t), this.db_changes$.subscribe((r) => {
1089
+ for (let a = 0; a < r.length; a++) {
1090
+ const { type: c, entities: o } = r[a];
1091
+ for (const i of this.cache_query_task_map.values()) {
1092
+ if (!i.resultEntityIds) return;
1093
+ this.merge_cache(c, i, o);
1094
+ }
1095
+ }
1096
+ }), this.db_checks$.subscribe((r) => {
1097
+ for (let a = 0; a < r.length; a++) {
1098
+ const { type: c, rowIds: o } = r[a];
1099
+ for (const i of this.cache_query_task_map.values()) {
1100
+ if (!i.resultEntityIds || !this.#e.get(i)) return;
1101
+ const l = () => setTimeout(() => h.unsubscribe(), 0), h = this.findByRowIds(o, !0).subscribe({
1102
+ next: (_) => {
1103
+ _.length && this.db_changes_sub.next({ type: c, entities: _ }), l();
1104
+ },
1105
+ complete: l
1106
+ });
1107
+ }
1108
+ }
1109
+ });
1110
+ }
1111
+ get(e) {
1112
+ const n = {
1113
+ where: {
1114
+ combinator: "and",
1115
+ rules: [
1116
+ {
1117
+ field: "id",
1118
+ operator: "=",
1119
+ value: e
1120
+ }
1121
+ ]
1122
+ }
1123
+ }, t = te(this.adapter, this.metadata, n), r = this.create_query_task(t), a = this.#s(r, { type: "get", options: n });
1124
+ return r.result$.pipe(
1125
+ E((c) => a.calculate(c)),
1126
+ w((c) => {
1127
+ if (c.length === 0) throw new R("not found");
1128
+ return c[0];
1129
+ })
1130
+ );
1131
+ }
1132
+ findOne(e) {
1133
+ const n = te(this.adapter, this.metadata, e), t = this.create_query_task(n), r = this.#s(t, { type: "findOne", options: e });
1134
+ return t.result$.pipe(
1135
+ E((a) => r.calculate(a)),
1136
+ w((a) => a[0])
1137
+ );
1138
+ }
1139
+ findOneOrFail(e) {
1140
+ const n = te(this.adapter, this.metadata, e), t = this.create_query_task(n), r = this.#s(t, { type: "findOneOrFail", options: e });
1141
+ return t.result$.pipe(
1142
+ E((a) => r.calculate(a)),
1143
+ w((a) => {
1144
+ if (a.length === 0)
1145
+ throw new R("not found");
1146
+ return a[0];
1147
+ })
1148
+ );
1149
+ }
1150
+ find(e) {
1151
+ const n = At(this.adapter, this.metadata, e), t = this.create_query_task(n), r = this.#s(t, { type: "find", options: e });
1152
+ return t.result$.pipe(E((a) => r.calculate(a)));
1153
+ }
1154
+ findAll(e) {
1155
+ const n = oe(this.adapter, this.metadata, e), t = this.create_query_task(n), r = this.#s(t, { type: "findAll", options: e });
1156
+ return t.result$.pipe(E((a) => r.calculate(a)));
1157
+ }
1158
+ findByRowIds(e, n = !1) {
1159
+ const t = vt(this.metadata, e), r = this.create_query_task(t);
1160
+ return r.result$.pipe(w((a) => this.transform_query_result(r, a, n)));
1161
+ }
1162
+ count(e) {
1163
+ const n = It(this.adapter, this.metadata, e), t = this.create_query_task(n), r = this.#s(t, { type: "count", options: e });
1164
+ return t.result$.pipe(E((a) => r.calculate(a)));
1165
+ }
1166
+ create(e) {
1167
+ return g(this.#t(e));
1168
+ }
1169
+ update(e, n) {
1170
+ return g(this.#r(e, n));
1171
+ }
1172
+ remove(e) {
1173
+ const n = M(e), t = () => {
1174
+ this.rxdb.context?.userId && (e.removedBy = this.rxdb.context.userId), n.origin = structuredClone({ ...e }), n.modified = !1, e.removedAt = /* @__PURE__ */ new Date(), n.removed = !0;
1175
+ };
1176
+ if (n.local === !0) {
1177
+ const { sql: a, params: c } = Ft(this.metadata, e, this.rxdb.context), o = this.client$.pipe(
1178
+ ae(1),
1179
+ E(() => this.adapter.execute(a, c)),
1180
+ w(() => (t(), e))
1181
+ );
1182
+ return g(o);
1183
+ } else if (n.remote === !0) {
1184
+ const { sql: a, params: c } = Wt(this.metadata, e, this.rxdb.context), o = this.#n(a, c).pipe(
1185
+ D(() => t()),
1186
+ w((i) => i[0])
1187
+ );
1188
+ return g(o);
1189
+ }
1190
+ const r = N(e);
1191
+ throw new R(`Remove Error${r.name}(${e.id}) not saved local.`);
1192
+ }
1193
+ merge_cache(e, n, t) {
1194
+ const r = this.#e.get(n);
1195
+ if (r)
1196
+ switch (e) {
1197
+ case se:
1198
+ Pt(n, r, t);
1199
+ break;
1200
+ case ne:
1201
+ Ht(n, r, t);
1202
+ break;
1203
+ case V:
1204
+ Qt(n, r, t);
1205
+ break;
1206
+ }
1207
+ }
1208
+ transform_query_result(e, n, t = !1) {
1209
+ const r = this.addQueryCache(n, t);
1210
+ return e.resultEntities = r, e.resultEntityIds = r.map((a) => a.id), r;
1211
+ }
1212
+ #t(e) {
1213
+ const { sql: n, params: t } = Ut(this.metadata, e, this.rxdb.context);
1214
+ return this.#n(n, t).pipe(w((r) => r[0]));
1215
+ }
1216
+ #r(e, n) {
1217
+ const { sql: t, params: r } = ke(this.metadata, e, n, this.rxdb.context);
1218
+ return this.#n(t, r).pipe(w((a) => a[0]));
1219
+ }
1220
+ #s(e, n) {
1221
+ this.#e.set(e, n), e.destroy$.subscribe(() => this.#e.delete(e));
1222
+ const t = new K(0), r = t.asObservable(), a = n;
1223
+ return a.refresh = () => t.next(t.value + 1), a.calculate = (c) => {
1224
+ switch (n.type) {
1225
+ case "get":
1226
+ case "find":
1227
+ case "findAll":
1228
+ case "findOne":
1229
+ case "findOneOrFail":
1230
+ {
1231
+ const o = this.addQueryCache(c);
1232
+ e.updateResult(o);
1233
+ }
1234
+ break;
1235
+ case "count":
1236
+ e.updateResult(c.results[0].rows[0][0]);
1237
+ break;
1238
+ }
1239
+ return r.pipe(w(() => e.result));
1240
+ }, a;
1241
+ }
1242
+ /**
1243
+ * 执行修改语句
1244
+ */
1245
+ #n(e, n) {
1246
+ return this.client$.pipe(
1247
+ ae(1),
1248
+ E(() => this.adapter.execute(e, n)),
1249
+ w((t) => this.addQueryCache(t, !0))
1250
+ );
1251
+ }
1252
+ }
1253
+ const j = (s, e) => {
1254
+ const n = e.where, t = e.isFindRoot ?? !1, r = e?.level || 0, a = b(s), c = `c.level < ${r}`;
1255
+ let o = "";
1256
+ const i = [c, n && L(n)].filter(Boolean).join(" AND ");
1257
+ i && (o = `WHERE ${i}`);
1258
+ let u = "*";
1259
+ return e.count && (e.isFindRoot ? u = "count(*)" : u = "count(*)-1"), {
1260
+ sql: `WITH RECURSIVE __children AS (
1261
+ SELECT *,rowid as ${v}, 0 AS level
1262
+ FROM "${a}"
1263
+ WHERE ${t ? "parentId is null" : "id = ?"}
1264
+ UNION ALL
1265
+ SELECT children.*,children.rowid as ${v}, c.level + 1
1266
+ FROM "${a}" children
1267
+ JOIN __children c ON ${e.descendants ? "children.parentId = c.id" : "children.id = c.parentId"}
1268
+ ${o}
1269
+ )
1270
+
1271
+ SELECT ${u} FROM __children ORDER BY level, id;`,
1272
+ params: t ? [] : [e.entity && e.entity.id || e.entity]
1273
+ };
1274
+ }, Jt = (s, e) => j(s, { ...e, isFindRoot: !0, descendants: !0 }), Xt = (s, e) => j(s, { ...e, isFindRoot: !0, descendants: !0, count: !0 }), zt = (s, e) => j(s, { ...e, descendants: !0 }), Zt = (s, e) => j(s, { ...e, descendants: !0, count: !0 }), es = (s, e) => j(s, { ...e, descendants: !1 }), ts = (s, e) => j(s, { ...e, descendants: !1, count: !0 }), de = (s, e, n, t, r) => {
1275
+ if (s.length === 0 && e.length === 0) return { refresh: !1, recalculate: !1 };
1276
+ const { options: a } = n, c = t.resultEntityIds, o = T(() => r.map((d) => d.id)), i = T(
1277
+ () => a?.where ? r.some((d) => Q(d, a.where)) : !0
1278
+ ), u = T(
1279
+ () => a.orderBy && r.some(
1280
+ (d) => ge(d, t.resultEntities || [], a.orderBy)
1281
+ )
1282
+ ), l = T(() => u() !== !1), h = T(() => i() === !1), _ = T(
1283
+ () => c ? c.some((d) => o().includes(d)) : !0
1284
+ ), f = T(() => _() === !1), p = {
1285
+ match_where: i,
1286
+ not_match_where: h,
1287
+ match_order_by: l,
1288
+ result_contains: _,
1289
+ result_not_contains: f
1290
+ }, m = e.some(
1291
+ (d) => d.every((y) => p[y]())
1292
+ );
1293
+ return {
1294
+ refresh: m === !1 && s.some(
1295
+ (d) => d.every((y) => p[y]())
1296
+ ),
1297
+ recalculate: m
1298
+ };
1299
+ }, ss = (s, e, n) => {
1300
+ e.type;
1301
+ }, ns = (s, e, n) => {
1302
+ const t = [], r = [];
1303
+ switch (e.type) {
1304
+ case "countRoot":
1305
+ case "countAncestors":
1306
+ case "countDescendants":
1307
+ t.push(["match_where"]);
1308
+ break;
1309
+ case "findRoot":
1310
+ case "findDescendants":
1311
+ case "findAncestors":
1312
+ t.push(["match_where"]);
1313
+ break;
1314
+ }
1315
+ const a = de(t, r, e, s, n);
1316
+ a.refresh ? s.refresh() : a.recalculate && ss(s, e);
1317
+ }, rs = (s, e, n) => {
1318
+ e.type;
1319
+ }, as = (s, e, n) => {
1320
+ const t = [], r = [];
1321
+ switch (e.type) {
1322
+ case "countRoot":
1323
+ case "countAncestors":
1324
+ case "countDescendants":
1325
+ t.push(["match_where"]);
1326
+ break;
1327
+ case "findRoot":
1328
+ case "findDescendants":
1329
+ case "findAncestors":
1330
+ t.push(["match_where"]);
1331
+ break;
1332
+ }
1333
+ const a = de(t, r, e, s, n);
1334
+ a.refresh ? s.refresh() : a.recalculate && rs(s, e);
1335
+ }, cs = (s, e, n) => {
1336
+ e.type;
1337
+ }, os = (s, e, n) => {
1338
+ const t = [], r = [];
1339
+ switch (e.type) {
1340
+ case "countRoot":
1341
+ case "countAncestors":
1342
+ case "countDescendants":
1343
+ t.push(["match_where"]);
1344
+ break;
1345
+ case "findRoot":
1346
+ case "findDescendants":
1347
+ case "findAncestors":
1348
+ t.push(["match_where"]);
1349
+ break;
1350
+ }
1351
+ const a = de(t, r, e, s, n);
1352
+ a.refresh ? s.refresh() : a.recalculate && cs(s, e);
1353
+ };
1354
+ class is extends Me {
1355
+ #e = /* @__PURE__ */ new Map();
1356
+ findRoot(e) {
1357
+ const n = Jt(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "findRoot", options: e });
1358
+ return t.result$.pipe(E((a) => r.calculate(a)));
1359
+ }
1360
+ countRoot(e) {
1361
+ const n = Xt(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "countRoot", options: e });
1362
+ return t.result$.pipe(E((a) => r.calculate(a)));
1363
+ }
1364
+ findDescendants(e) {
1365
+ const n = zt(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "findDescendants", options: e });
1366
+ return t.result$.pipe(E((a) => r.calculate(a)));
1367
+ }
1368
+ countDescendants(e) {
1369
+ const n = Zt(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "countDescendants", options: e });
1370
+ return t.result$.pipe(E((a) => r.calculate(a)));
1371
+ }
1372
+ findAncestors(e) {
1373
+ const n = es(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "findAncestors", options: e });
1374
+ return t.result$.pipe(E((a) => r.calculate(a)));
1375
+ }
1376
+ countAncestors(e) {
1377
+ const n = ts(this.metadata, e), t = this.create_query_task(n), r = this.#t(t, { type: "countAncestors", options: e });
1378
+ return t.result$.pipe(E((a) => r.calculate(a)));
1379
+ }
1380
+ /**
1381
+ * 根据 type 计算主动更新缓存策略
1382
+ */
1383
+ merge_cache(e, n, t) {
1384
+ super.merge_cache(e, n, t);
1385
+ const r = this.#e.get(n);
1386
+ if (r)
1387
+ switch (e) {
1388
+ case "create":
1389
+ ns(n, r, t);
1390
+ break;
1391
+ case "update":
1392
+ os(n, r, t);
1393
+ break;
1394
+ case "remove":
1395
+ as(n, r, t);
1396
+ break;
1397
+ }
1398
+ }
1399
+ #t(e, n) {
1400
+ this.#e.set(e, n), e.destroy$.subscribe(() => this.#e.delete(e));
1401
+ const t = new K(0), r = t.asObservable(), a = n;
1402
+ return a.calculate = (c) => {
1403
+ switch (a.refresh = () => t.next(t.value + 1), n.type) {
1404
+ case "findRoot":
1405
+ case "findDescendants":
1406
+ case "findAncestors":
1407
+ {
1408
+ const o = this.addQueryCache(c);
1409
+ e.updateResult(o);
1410
+ }
1411
+ break;
1412
+ case "countRoot":
1413
+ case "countAncestors":
1414
+ case "countDescendants":
1415
+ e.updateResult(c.results[0].rows[0][0]);
1416
+ break;
1417
+ }
1418
+ return r.pipe(w(() => e.result));
1419
+ }, a;
1420
+ }
1421
+ }
1422
+ class bs extends He {
1423
+ constructor(e, n) {
1424
+ super(e), this.options = n;
1425
+ const t = (r) => {
1426
+ const { tableName: a, rowIds: c, recordAt: o } = r, [i, u] = a.split("$"), l = this.rxdb.schemaManager.getEntityType(u, i);
1427
+ if (!l) return;
1428
+ const h = {
1429
+ rowIds: c,
1430
+ recordAt: o
1431
+ };
1432
+ setTimeout(() => {
1433
+ switch (r.type) {
1434
+ case P.SQLITE_DELETE:
1435
+ this.rxdb.dispatchEvent(new ze(l, h));
1436
+ break;
1437
+ case P.SQLITE_INSERT:
1438
+ this.rxdb.dispatchEvent(new Xe(l, h));
1439
+ break;
1440
+ case P.SQLITE_UPDATE:
1441
+ this.rxdb.dispatchEvent(new Je(l, h));
1442
+ break;
1443
+ }
1444
+ }, 100);
1445
+ };
1446
+ this.#c.subscribe((r) => r.onChange = Ze(t)), this.#_.pipe(Te(this.#e)).subscribe();
1447
+ }
1448
+ #e = new re();
1449
+ #t = /* @__PURE__ */ new Map();
1450
+ #r;
1451
+ #s = !1;
1452
+ // 查询缓存
1453
+ #n = [];
1454
+ #a = /* @__PURE__ */ new Map();
1455
+ #o = !1;
1456
+ #i = new K(0);
1457
+ #h = this.#i.asObservable();
1458
+ // sqlite 客户端
1459
+ #c = new Re((e) => {
1460
+ const { vfs: n, async: t, worker: r, wasmPath: a, locateFile: c, workerInstance: o } = this.options, i = {
1461
+ vfs: n,
1462
+ async: t,
1463
+ worker: r,
1464
+ wasmPath: a,
1465
+ locateFile: c
1466
+ };
1467
+ Ce(i);
1468
+ let u;
1469
+ r && o ? u = et(o) : u = new jt(), this.#r = u, u.init(this.rxdb.options.dbName, i).then(() => e.next(u));
1470
+ }).pipe(U(1));
1471
+ // 已连接
1472
+ #d = st(() => this.rxdb.connect(this.name)).pipe(U(1));
1473
+ // 队列
1474
+ #_ = this.#h.pipe(
1475
+ G(() => this.#o === !1),
1476
+ w(() => this.#n.shift()),
1477
+ G(Boolean),
1478
+ D(() => this.#o = !0),
1479
+ E((e) => {
1480
+ const n = this.#a.get(e.key);
1481
+ return this.#d.pipe(
1482
+ E(() => this.#c),
1483
+ E((t) => t.execute(e.sql, e.bindings)),
1484
+ D((t) => n.next(t)),
1485
+ D(
1486
+ () => setTimeout(() => {
1487
+ this.#a.get(e.key)?.unsubscribe(), this.#a.delete(e.key);
1488
+ }, 0)
1489
+ ),
1490
+ nt((t) => {
1491
+ const r = t.message || "执行错误";
1492
+ return n.error(new R(`${r} ${e.sql} ${JSON.stringify(e.bindings)}`)), rt({ error: t });
1493
+ })
1494
+ );
1495
+ }),
1496
+ D(() => {
1497
+ this.#o = !1, this.#l();
1498
+ })
1499
+ );
1500
+ name = St;
1501
+ /**
1502
+ * 数据库版本
1503
+ */
1504
+ version$ = this.#c.pipe(
1505
+ E((e) => me(e.version())),
1506
+ U(1)
1507
+ );
1508
+ /**
1509
+ * 连接 wab sqlite
1510
+ */
1511
+ connect() {
1512
+ return this.#c.pipe(w(() => this));
1513
+ }
1514
+ /**
1515
+ * 断开连接
1516
+ */
1517
+ async disconnect() {
1518
+ this.#r && (await this.#r.disconnect(), this.#e.next(), this.#e.complete());
1519
+ }
1520
+ /**
1521
+ * 获取版本
1522
+ */
1523
+ version() {
1524
+ return g(this.version$);
1525
+ }
1526
+ /**
1527
+ * 获取实体仓库
1528
+ * @param entity 实体类
1529
+ */
1530
+ getRepository(e) {
1531
+ if (!this.#t.has(e)) {
1532
+ const n = N(e);
1533
+ let t;
1534
+ switch (n.repository) {
1535
+ case "Repository":
1536
+ t = new Me(this, this.#c, e);
1537
+ break;
1538
+ case "TreeRepository":
1539
+ t = new is(this, this.#c, e);
1540
+ break;
1541
+ default:
1542
+ throw new R("Unsupported repository type: " + n.repository);
1543
+ }
1544
+ return this.#t.set(e, t), t;
1545
+ }
1546
+ return this.#t.get(e);
1547
+ }
1548
+ /**
1549
+ * 保存多个实体
1550
+ * TODO: 优化事件
1551
+ * @param entities
1552
+ */
1553
+ async saveMany(e) {
1554
+ return this.#s ? await ye(this, e) : e.length > 1 ? await this.transaction(() => ye(this, e)) : e.length === 1 && await e[0].save(), e;
1555
+ }
1556
+ /**
1557
+ * 判断表是否存在
1558
+ * @param EntityType
1559
+ */
1560
+ isTableExisted(e) {
1561
+ return g(this.isTableExisted$(e));
1562
+ }
1563
+ /**
1564
+ * 判断表是否存在
1565
+ * @param EntityType
1566
+ */
1567
+ isTableExisted$(e) {
1568
+ const n = N(e), t = b(n);
1569
+ return this.#u(ht(t)).pipe(w((r) => dt(r) === !1));
1570
+ }
1571
+ /**
1572
+ * 创建表和初始化数据
1573
+ * @param entities 表结构
1574
+ * @param data 视图数据
1575
+ * @returns
1576
+ */
1577
+ createTables(e, n) {
1578
+ const t = gt(this, e, n);
1579
+ return g(this.#u(t).pipe(w(() => !0)));
1580
+ }
1581
+ /**
1582
+ * 创建分支
1583
+ * @param branchId 分支 ID
1584
+ * @param fromChangeId
1585
+ */
1586
+ async createBranch(e, n) {
1587
+ return Et(this, e, n);
1588
+ }
1589
+ /**
1590
+ * 切换分支
1591
+ * @param branchId
1592
+ * @returns
1593
+ */
1594
+ async switchBranch(e) {
1595
+ return xt(this, e);
1596
+ }
1597
+ /**
1598
+ * 恢复某个实体
1599
+ * @param entity
1600
+ * @param options
1601
+ */
1602
+ restoreEntity(e, n) {
1603
+ throw new Error("Method not implemented.");
1604
+ }
1605
+ /**
1606
+ * 执行 sql
1607
+ * @param sql
1608
+ * @param bindings
1609
+ */
1610
+ execute(e, n) {
1611
+ const t = e + n?.join(",");
1612
+ if (!this.#a.has(t)) {
1613
+ const r = new re(1);
1614
+ this.#a.set(t, r), this.#n.push({ key: t, sql: e, bindings: n }), this.#l();
1615
+ }
1616
+ return this.#a.get(t).asObservable();
1617
+ }
1618
+ /**
1619
+ * 处理事务
1620
+ * @param callback
1621
+ */
1622
+ transaction(e) {
1623
+ return g(this.transaction$(e));
1624
+ }
1625
+ transaction$(e, n = !0) {
1626
+ return this.rxdb.connect(this.name).pipe(
1627
+ E(() => this.#c),
1628
+ E(async (t) => {
1629
+ this.#s = !0, this.rxdb.dispatchEvent(ls);
1630
+ let r = "", a = "";
1631
+ if (n) {
1632
+ const c = Ye(), o = (i) => `INSERT INTO "public$RxDBChange" (type,branchId,transactionId) VALUES ('${i}','main','${c}');`;
1633
+ r = o("TRANSACTION_BEGIN"), a = o("TRANSACTION_COMMIT");
1634
+ }
1635
+ await t.execute(`
1636
+ BEGIN;
1637
+ PRAGMA defer_foreign_keys = ON;
1638
+ ${r}
1639
+ `);
1640
+ try {
1641
+ const c = await e();
1642
+ return await t.execute(`${a}
1643
+ COMMIT;`), this.#s = !1, this.rxdb.dispatchEvent(hs), c;
1644
+ } catch (c) {
1645
+ await t.execute("ROLLBACK"), this.#s = !1, this.rxdb.dispatchEvent(us);
1646
+ const o = c?.message || "Transaction Error";
1647
+ throw new R(o);
1648
+ }
1649
+ })
1650
+ );
1651
+ }
1652
+ /**
1653
+ * 本地分支仓库
1654
+ */
1655
+ localRxDBBranch() {
1656
+ return this.getRepository(ie);
1657
+ }
1658
+ /**
1659
+ * 本地变更仓库
1660
+ */
1661
+ localRxDBChange() {
1662
+ return this.getRepository(we);
1663
+ }
1664
+ #l() {
1665
+ this.#i.next(this.#i.value + 1);
1666
+ }
1667
+ /**
1668
+ * 内部执行的 sql
1669
+ * @param sql
1670
+ * @param bindings
1671
+ */
1672
+ #u(e, n) {
1673
+ return this.#c.pipe(E((t) => me(t.execute(e, n))));
1674
+ }
1675
+ }
1676
+ const ls = new Ge(), us = new Qe(), hs = new Ke();
1677
+ export {
1678
+ bs as RxDBAdapterSqlite,
1679
+ R as RxdbAdapterSqliteError,
1680
+ jt as SqliteClient,
1681
+ kt as WA_SQLITE_VFS_LIST,
1682
+ Ct as sqliteLoad
1683
+ };