@aiao/rxdb-plugin-sync 0.0.0-stage → 0.0.26

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/README.md +81 -2
  3. package/dist/SyncManager.d.ts +412 -0
  4. package/dist/SyncManager.d.ts.map +1 -0
  5. package/dist/branch-change-id.d.ts +31 -0
  6. package/dist/branch-change-id.d.ts.map +1 -0
  7. package/dist/branch-utils.d.ts +8 -0
  8. package/dist/branch-utils.d.ts.map +1 -0
  9. package/dist/bulk-sync.d.ts +117 -0
  10. package/dist/bulk-sync.d.ts.map +1 -0
  11. package/dist/cascade-blocking.d.ts +38 -0
  12. package/dist/cascade-blocking.d.ts.map +1 -0
  13. package/dist/check-repository-updates.d.ts +47 -0
  14. package/dist/check-repository-updates.d.ts.map +1 -0
  15. package/dist/cleanup-expired.d.ts +56 -0
  16. package/dist/cleanup-expired.d.ts.map +1 -0
  17. package/dist/dependency-graph.d.ts +128 -0
  18. package/dist/dependency-graph.d.ts.map +1 -0
  19. package/dist/get-all-repository-sync-status.d.ts +58 -0
  20. package/dist/get-all-repository-sync-status.d.ts.map +1 -0
  21. package/dist/get-repository-sync-status.d.ts +68 -0
  22. package/dist/get-repository-sync-status.d.ts.map +1 -0
  23. package/dist/index.d.ts +39 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +3273 -0
  26. package/dist/plugin.d.ts +70 -0
  27. package/dist/plugin.d.ts.map +1 -0
  28. package/dist/pull-ancestor-changes.d.ts +41 -0
  29. package/dist/pull-ancestor-changes.d.ts.map +1 -0
  30. package/dist/pull-batch.d.ts +16 -0
  31. package/dist/pull-batch.d.ts.map +1 -0
  32. package/dist/pull-conflict-utils.d.ts +43 -0
  33. package/dist/pull-conflict-utils.d.ts.map +1 -0
  34. package/dist/pull-repository.d.ts +36 -0
  35. package/dist/pull-repository.d.ts.map +1 -0
  36. package/dist/pull.d.ts +16 -0
  37. package/dist/pull.d.ts.map +1 -0
  38. package/dist/push-branch.d.ts +22 -0
  39. package/dist/push-branch.d.ts.map +1 -0
  40. package/dist/push-repository.d.ts +63 -0
  41. package/dist/push-repository.d.ts.map +1 -0
  42. package/dist/push.d.ts +14 -0
  43. package/dist/push.d.ts.map +1 -0
  44. package/dist/query-cache-outbox.d.ts +120 -0
  45. package/dist/query-cache-outbox.d.ts.map +1 -0
  46. package/dist/sync-branches.d.ts +35 -0
  47. package/dist/sync-branches.d.ts.map +1 -0
  48. package/dist/sync-listeners.d.ts +20 -0
  49. package/dist/sync-listeners.d.ts.map +1 -0
  50. package/dist/sync-manager.utils.d.ts +36 -0
  51. package/dist/sync-manager.utils.d.ts.map +1 -0
  52. package/dist/sync-repository.d.ts +63 -0
  53. package/dist/sync-repository.d.ts.map +1 -0
  54. package/dist/topological-sort.d.ts +126 -0
  55. package/dist/topological-sort.d.ts.map +1 -0
  56. package/dist/version.utils.d.ts +3 -0
  57. package/dist/version.utils.d.ts.map +1 -0
  58. package/package.json +58 -3
  59. package/src/SyncManager.ts +662 -0
  60. package/src/branch-change-id.ts +70 -0
  61. package/src/branch-utils.ts +37 -0
  62. package/src/bulk-sync.ts +338 -0
  63. package/src/cascade-blocking.ts +61 -0
  64. package/src/check-repository-updates.ts +143 -0
  65. package/src/cleanup-expired.ts +271 -0
  66. package/src/dependency-graph.ts +324 -0
  67. package/src/get-all-repository-sync-status.ts +115 -0
  68. package/src/get-repository-sync-status.ts +237 -0
  69. package/src/index.ts +53 -0
  70. package/src/plugin.ts +124 -0
  71. package/src/pull-ancestor-changes.ts +61 -0
  72. package/src/pull-batch.ts +410 -0
  73. package/src/pull-conflict-utils.ts +280 -0
  74. package/src/pull-repository.ts +701 -0
  75. package/src/pull.ts +204 -0
  76. package/src/push-branch.ts +61 -0
  77. package/src/push-repository.ts +1002 -0
  78. package/src/push.ts +104 -0
  79. package/src/query-cache-outbox.ts +866 -0
  80. package/src/sync-branches.ts +156 -0
  81. package/src/sync-listeners.ts +289 -0
  82. package/src/sync-manager.utils.ts +48 -0
  83. package/src/sync-repository.ts +302 -0
  84. package/src/topological-sort.ts +246 -0
  85. package/src/version.utils.ts +20 -0
package/dist/index.js ADDED
@@ -0,0 +1,3273 @@
1
+ import { ConflictDetectedEvent as e, ConflictPendingEvent as t, ENTITY_REMOTE_CREATE_EVENT as n, ENTITY_REMOTE_REMOVE_EVENT as r, ENTITY_REMOTE_UPDATE_EVENT as i, LWWConflictResolver as a, RelationKind as o, RepositorySyncBeginEvent as s, RepositorySyncCompleteEvent as c, RepositorySyncErrorEvent as l, RxDBBranch as u, RxDBChange as d, RxDBDependencyFailedError as f, RxDBError as p, RxDBPartialSyncError as m, RxDBPluginBase as h, RxDBSync as g, SYNC_DISABLED_REASON as _, SyncBeginEvent as v, SyncCompleteEvent as y, SyncErrorEvent as b, buildOfflineWriteRepositoryRules as x, compactChanges as S, findCurrentSyncRecord as C, getCurrentBranch as w, getEntityMetadata as T, getLocalSystemRepositories as E, getOrCreateSyncRecord as D, getRemoteSystemRepositories as O, getRxDBChangeEntityIdQueryValues as k, getRxDBChangeKey as A, getRxDBEntityIdentityKey as j, getSyncCapability as M, getSyncType as N, isRepositorySyncEnabled as P, isSystemEntity as ee, needsPull as te, needsPush as ne, repositoryKey as F, resolvePullIneligibility as re, resolvePushIneligibility as ie } from "@aiao/rxdb";
2
+ import { combineLatest as ae, firstValueFrom as I, merge as oe } from "rxjs";
3
+ import { isIgnorableDetachedVersionEventError as se } from "@aiao/rxdb-plugin-history";
4
+ //#region src/query-cache-outbox.ts
5
+ var ce = {
6
+ INSERT: {
7
+ kind: "replay",
8
+ verb: "create"
9
+ },
10
+ UPDATE: {
11
+ kind: "discard",
12
+ repair: "drop"
13
+ },
14
+ DELETE: { kind: "noop" }
15
+ }, le = {
16
+ INSERT: "update",
17
+ UPDATE: "update",
18
+ DELETE: "delete"
19
+ }, ue = [/* @__PURE__ */ new Set(["DELETE"]), /* @__PURE__ */ new Set(["INSERT", "UPDATE"])], de = /* @__PURE__ */ new WeakMap();
20
+ function fe(e, t, n, r) {
21
+ let i = de.get(e) ?? /* @__PURE__ */ new Map();
22
+ de.set(e, i);
23
+ let o = `${t}:${n}`, s = i.get(o);
24
+ if (s) return s;
25
+ let c = me(e, t, n, r?.conflictResolver ?? new a()).finally(() => {
26
+ i.delete(o);
27
+ });
28
+ return i.set(o, c), c;
29
+ }
30
+ var pe = (e, t) => ({
31
+ repository: {
32
+ namespace: e,
33
+ entity: t
34
+ },
35
+ originalCount: 0,
36
+ compacted: 0,
37
+ replayed: 0,
38
+ discarded: 0,
39
+ noop: 0,
40
+ watermark: null,
41
+ conflicts: [],
42
+ failures: []
43
+ });
44
+ async function me(e, t, n, r) {
45
+ let i = ve(e, t, n), a = await w(e), { adapter: o } = await E(e), s = o, c = s.getRepository(g), l = await D(c, {
46
+ namespace: t,
47
+ entity: n,
48
+ branchId: a.id,
49
+ syncType: i
50
+ }, () => e.entityManager.instantiate(g));
51
+ if (!P(l)) return {
52
+ ...pe(t, n),
53
+ skipped: _
54
+ };
55
+ let u = await ye(s.getRepository(d), t, n, a.id, l.lastPushedChangeId);
56
+ if (u.length === 0) return pe(t, n);
57
+ let f = u.reduce((e, t) => t.id > e ? t.id : e, u[0].id), p = be(u), m = {
58
+ ...pe(t, n),
59
+ originalCount: u.length
60
+ };
61
+ if (p.length === 0) return await c.update(l, {
62
+ lastPushedChangeId: f,
63
+ updatedAt: /* @__PURE__ */ new Date()
64
+ }), {
65
+ ...m,
66
+ compacted: u.length,
67
+ watermark: f
68
+ };
69
+ let h = await I(e.remoteAdapter$), v = {
70
+ ...m,
71
+ compacted: u.length - p.length,
72
+ restoreIds: [],
73
+ dropIds: [],
74
+ settled: /* @__PURE__ */ new Set()
75
+ }, y = await Ce(h, n, p, e, v);
76
+ if (y && await we(p, y, {
77
+ rxdb: e,
78
+ entity: n,
79
+ remoteAdapter: h,
80
+ conflictResolver: r,
81
+ run: v
82
+ }), await je(s, h, n, v), v.failures.length > 0) {
83
+ let e = Te(p, v.settled, f);
84
+ return e <= (l.lastPushedChangeId ?? 0) ? he(v) : (await c.update(l, {
85
+ lastPushedChangeId: e,
86
+ updatedAt: /* @__PURE__ */ new Date()
87
+ }), {
88
+ ...he(v),
89
+ watermark: e
90
+ });
91
+ }
92
+ return await c.update(l, {
93
+ lastPushedChangeId: f,
94
+ lastPushedAt: /* @__PURE__ */ new Date(),
95
+ updatedAt: /* @__PURE__ */ new Date()
96
+ }), {
97
+ ...he(v),
98
+ watermark: f
99
+ };
100
+ }
101
+ var he = (e) => ({
102
+ repository: e.repository,
103
+ originalCount: e.originalCount,
104
+ compacted: e.compacted,
105
+ replayed: e.replayed,
106
+ discarded: e.discarded,
107
+ noop: e.noop,
108
+ watermark: e.watermark,
109
+ conflicts: e.restoreIds,
110
+ failures: e.failures
111
+ });
112
+ async function ge(e) {
113
+ let t = await w(e), { adapter: n } = await E(e), r = await n.getRepository(g).find({ where: {
114
+ combinator: "and",
115
+ rules: [{
116
+ field: "branchId",
117
+ operator: "=",
118
+ value: t.id
119
+ }]
120
+ } }), i = x(e.config.entities, e.config.sync, r);
121
+ return i.length === 0 ? 0 : I(e.entityManager.getRepository(d).count({ where: {
122
+ combinator: "and",
123
+ rules: [
124
+ {
125
+ field: "branchId",
126
+ operator: "=",
127
+ value: t.id
128
+ },
129
+ {
130
+ field: "revertChangeId",
131
+ operator: "=",
132
+ value: null
133
+ },
134
+ {
135
+ field: "remoteId",
136
+ operator: "=",
137
+ value: null
138
+ },
139
+ {
140
+ combinator: "or",
141
+ rules: i
142
+ }
143
+ ]
144
+ } }));
145
+ }
146
+ async function _e(e, t, n) {
147
+ let r = await w(e), { adapter: i } = await E(e), a = i, o = await C(e, t, n), s = await ye(a.getRepository(d), t, n, r.id, o?.lastPushedChangeId ?? null);
148
+ return new Set(s.map((e) => String(e.entityId)));
149
+ }
150
+ function ve(e, t, n) {
151
+ let r = e.config.entities.find((e) => {
152
+ let r = T(e);
153
+ return r.namespace === t && r.name === n;
154
+ });
155
+ if (!r) throw new p(`Entity not found for QueryCache outbox flush: ${t}/${n}`);
156
+ let i = N(T(r), e.config.sync);
157
+ if (i !== "querycache") throw new p(`flushQueryCacheOutbox only handles syncType 'querycache'; ${t}/${n} is '${i}'. Repositories with a changelog endpoint push through syncManager.push().`);
158
+ return i;
159
+ }
160
+ async function ye(e, t, n, r, i) {
161
+ let a = [
162
+ {
163
+ field: "namespace",
164
+ operator: "=",
165
+ value: t
166
+ },
167
+ {
168
+ field: "entity",
169
+ operator: "=",
170
+ value: n
171
+ },
172
+ {
173
+ field: "branchId",
174
+ operator: "=",
175
+ value: r
176
+ },
177
+ {
178
+ field: "remoteId",
179
+ operator: "=",
180
+ value: null
181
+ },
182
+ {
183
+ field: "revertChangeId",
184
+ operator: "=",
185
+ value: null
186
+ }
187
+ ];
188
+ return i !== null && a.push({
189
+ field: "id",
190
+ operator: ">",
191
+ value: i
192
+ }), e.find({
193
+ where: {
194
+ combinator: "and",
195
+ rules: a
196
+ },
197
+ orderBy: [{
198
+ field: "id",
199
+ sort: "asc"
200
+ }]
201
+ });
202
+ }
203
+ function be(e) {
204
+ let t = /* @__PURE__ */ new Map();
205
+ for (let n of e) {
206
+ let e = A(n), r = t.get(e) ?? [];
207
+ r.push(n), t.set(e, r);
208
+ }
209
+ let n = S(e), r = [], i = (e, n) => {
210
+ for (let [i, a] of e) {
211
+ let e = t.get(i);
212
+ if (!e?.length) throw new p(`Missing source changes for compacted QueryCache action: ${i}`);
213
+ let o = e[e.length - 1], s = e.reduce((e, t) => t.id < e ? t.id : e, e[0].id);
214
+ r.push({
215
+ key: i,
216
+ entityId: String(o.entityId),
217
+ kind: n,
218
+ action: a,
219
+ lastChange: o,
220
+ minChangeId: s
221
+ });
222
+ }
223
+ };
224
+ return i(n.deletes, "DELETE"), i(n.updates, "UPDATE"), i(n.inserts, "INSERT"), r;
225
+ }
226
+ var xe = 100;
227
+ function Se(e, t) {
228
+ let n = [];
229
+ for (let r = 0; r < e.length; r += t) n.push(e.slice(r, r + t));
230
+ return n;
231
+ }
232
+ async function Ce(e, t, n, r, i) {
233
+ let a = n.map((e) => e.entityId), o = /* @__PURE__ */ new Map();
234
+ for (let n of Se(a, xe)) try {
235
+ let r = await I(e.fetchMetadata(t, {
236
+ combinator: "and",
237
+ rules: [{
238
+ field: "id",
239
+ operator: "in",
240
+ value: n
241
+ }]
242
+ }));
243
+ for (let e of r) o.set(e.id, e.updatedAt);
244
+ } catch (e) {
245
+ return r.reachability.report(e), i.failures.push({
246
+ entityId: null,
247
+ error: e instanceof Error ? e : Error(String(e))
248
+ }), null;
249
+ }
250
+ return r.reachability.report(null), o;
251
+ }
252
+ async function we(e, t, n) {
253
+ for (let r of ue) for (let i of e.filter((e) => r.has(e.kind))) {
254
+ if (n.run.failures.length > 0) return;
255
+ let e = n.run.failures.length;
256
+ await Ee(i, t.get(i.entityId), n), n.run.failures.length === e && n.run.settled.add(i);
257
+ }
258
+ }
259
+ function Te(e, t, n) {
260
+ let r;
261
+ for (let n of e) t.has(n) || (r === void 0 || n.minChangeId < r) && (r = n.minChangeId);
262
+ return r === void 0 ? n : r - 1;
263
+ }
264
+ async function Ee(e, t, n) {
265
+ let r = await De(e, t, n.conflictResolver), { run: i } = n;
266
+ if (r.kind === "noop") {
267
+ i.noop += 1;
268
+ return;
269
+ }
270
+ if (r.kind === "discard") {
271
+ i.discarded += 1, (r.repair === "restore" ? i.restoreIds : i.dropIds).push(e.entityId);
272
+ return;
273
+ }
274
+ if (r.kind === "unresolved") {
275
+ i.failures.push({
276
+ entityId: e.entityId,
277
+ error: new p(`Unsupported conflict resolution '${r.resolution}' during QueryCache outbox replay for ${e.key}. Only KEEP_LOCAL and KEEP_REMOTE can be applied over REST verbs.`)
278
+ });
279
+ return;
280
+ }
281
+ await ke(e, r.verb, n);
282
+ }
283
+ async function De(e, t, n) {
284
+ if (t === void 0) return ce[e.kind];
285
+ let r = await n.resolve({
286
+ entityKey: e.key,
287
+ local: e.lastChange,
288
+ remote: Oe(e, t)
289
+ });
290
+ return r.type === "KEEP_LOCAL" ? {
291
+ kind: "replay",
292
+ verb: le[e.kind]
293
+ } : r.type === "KEEP_REMOTE" ? {
294
+ kind: "discard",
295
+ repair: "restore"
296
+ } : {
297
+ kind: "unresolved",
298
+ resolution: r.type
299
+ };
300
+ }
301
+ function Oe(e, t) {
302
+ let n = new Date(t);
303
+ return {
304
+ id: 0,
305
+ namespace: e.lastChange.namespace,
306
+ entity: e.lastChange.entity,
307
+ entityId: e.lastChange.entityId,
308
+ branchId: e.lastChange.branchId,
309
+ type: e.kind,
310
+ patch: null,
311
+ inversePatch: null,
312
+ createdAt: n,
313
+ updatedAt: n
314
+ };
315
+ }
316
+ async function ke(e, t, n) {
317
+ let { entity: r, remoteAdapter: i, run: a, rxdb: o } = n, s = Ae(i, r, e, t);
318
+ if (!s) {
319
+ a.failures.push({
320
+ entityId: e.entityId,
321
+ error: new p(`Remote adapter does not support ${t} operation for ${r}`)
322
+ });
323
+ return;
324
+ }
325
+ try {
326
+ await I(s), o.reachability.report(null), a.replayed += 1;
327
+ } catch (t) {
328
+ o.reachability.report(t), a.failures.push({
329
+ entityId: e.entityId,
330
+ error: t instanceof Error ? t : Error(String(t))
331
+ });
332
+ }
333
+ }
334
+ function Ae(e, t, n, r) {
335
+ if (r === "delete") return e.delete ? e.delete(t, [n.entityId]) : null;
336
+ let i = n.action.patch ?? {};
337
+ if (r === "create") {
338
+ let r = {
339
+ id: n.entityId,
340
+ ...i
341
+ };
342
+ return e.create ? e.create(t, r) : null;
343
+ }
344
+ return e.update ? e.update(t, n.entityId, i) : null;
345
+ }
346
+ async function je(e, t, n, r) {
347
+ if (r.restoreIds.length > 0) {
348
+ let i = await I(t.findByIds(n, r.restoreIds));
349
+ await I(e.upsertMany(n, i));
350
+ }
351
+ r.dropIds.length > 0 && await I(e.deleteByIds(n, r.dropIds));
352
+ }
353
+ //#endregion
354
+ //#region src/branch-utils.ts
355
+ async function L(e, t) {
356
+ let n = [t];
357
+ if (t === "main") return n;
358
+ let { adapter: r } = await e.getLocalRepositories(), i = r.getRepository(u), a = t, o = /* @__PURE__ */ new Set([a]);
359
+ for (; a;) {
360
+ let e = (await i.find({
361
+ where: {
362
+ combinator: "and",
363
+ rules: [{
364
+ field: "id",
365
+ operator: "=",
366
+ value: a
367
+ }]
368
+ },
369
+ limit: 1
370
+ }))[0];
371
+ if (!e?.parentId || o.has(e.parentId)) break;
372
+ n.push(e.parentId), o.add(e.parentId), a = e.parentId;
373
+ }
374
+ return n;
375
+ }
376
+ //#endregion
377
+ //#region src/cascade-blocking.ts
378
+ function Me(e, t, n, r) {
379
+ let i = e.get(t);
380
+ if (i) for (let e of i[r]) {
381
+ let t = n.get(F(e));
382
+ if (t) return {
383
+ dependency: e,
384
+ cause: t
385
+ };
386
+ }
387
+ }
388
+ //#endregion
389
+ //#region src/dependency-graph.ts
390
+ function R(e) {
391
+ let t = /* @__PURE__ */ new Map();
392
+ for (let n of e) {
393
+ let e = `${n.namespace}:${n.name}`, r = {
394
+ repository: {
395
+ namespace: n.namespace,
396
+ entity: n.name
397
+ },
398
+ dependsOn: [],
399
+ requiredBy: []
400
+ };
401
+ if (n.relations) {
402
+ for (let e of n.relations) if (e.kind === o.MANY_TO_ONE || e.kind === o.ONE_TO_ONE) {
403
+ let t = e.mappedEntity, i = e.mappedNamespace || n.namespace;
404
+ r.dependsOn.push({
405
+ namespace: i,
406
+ entity: t
407
+ });
408
+ }
409
+ }
410
+ t.set(e, r);
411
+ }
412
+ for (let e of t.values()) for (let n of e.dependsOn) {
413
+ let r = t.get(`${n.namespace}:${n.entity}`);
414
+ r && r.requiredBy.push(e.repository);
415
+ }
416
+ return Ne(t), t;
417
+ }
418
+ function Ne(e) {
419
+ let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = [];
420
+ function i(a) {
421
+ t.add(a), n.add(a), r.push(a);
422
+ let o = e.get(a);
423
+ if (!o) return n.delete(a), r.pop(), !1;
424
+ for (let e of o.dependsOn) {
425
+ let o = `${e.namespace}:${e.entity}`;
426
+ if (o !== a) {
427
+ if (!t.has(o)) {
428
+ if (i(o)) return !0;
429
+ } else if (n.has(o)) {
430
+ let e = r.indexOf(o), t = [...r.slice(e), o];
431
+ throw new p(`Circular dependency detected: ${t.join(" -> ")}`);
432
+ }
433
+ }
434
+ }
435
+ return n.delete(a), r.pop(), !1;
436
+ }
437
+ for (let n of e.keys()) t.has(n) || i(n);
438
+ }
439
+ //#endregion
440
+ //#region src/pull-ancestor-changes.ts
441
+ async function Pe(e, t, n) {
442
+ let { namespace: r, entity: i, sinceId: a, limit: o, filter: s } = t, c = [`${r}:${i}`];
443
+ return (await Promise.all(n.map((t) => e.pullChanges(a, o, c, s, t)))).flat().sort((e, t) => e.id - t.id).slice(0, o);
444
+ }
445
+ //#endregion
446
+ //#region src/pull-conflict-utils.ts
447
+ function z() {
448
+ return {
449
+ deletes: /* @__PURE__ */ new Map(),
450
+ updates: /* @__PURE__ */ new Map(),
451
+ inserts: /* @__PURE__ */ new Map()
452
+ };
453
+ }
454
+ function B(e) {
455
+ return e.inserts.size + e.updates.size + e.deletes.size;
456
+ }
457
+ function Fe(e, t) {
458
+ if (t.type === "INSERT") {
459
+ e.inserts.set(t.key, t.change);
460
+ return;
461
+ }
462
+ if (t.type === "UPDATE") {
463
+ e.updates.set(t.key, t.change);
464
+ return;
465
+ }
466
+ e.deletes.set(t.key, t.change);
467
+ }
468
+ function Ie(e, t) {
469
+ let n = /* @__PURE__ */ new Map();
470
+ for (let t of e) {
471
+ let e = A(t), r = n.get(e);
472
+ (!r || t.id > r.id) && n.set(e, t);
473
+ }
474
+ let r = [], i = (e, t) => {
475
+ for (let [i, a] of e) {
476
+ let e = n.get(i);
477
+ e && r.push({
478
+ key: i,
479
+ entityId: e.entityId,
480
+ type: t,
481
+ change: a,
482
+ remote: {
483
+ ...e,
484
+ type: t,
485
+ patch: a.patch ?? null,
486
+ inversePatch: a.inversePatch ?? null
487
+ }
488
+ });
489
+ }
490
+ };
491
+ return i(t.inserts, "INSERT"), i(t.updates, "UPDATE"), i(t.deletes, "DELETE"), r;
492
+ }
493
+ async function Le(e, t, n, r, i, a) {
494
+ if (a.length === 0) return /* @__PURE__ */ new Map();
495
+ let o = [
496
+ {
497
+ field: "namespace",
498
+ operator: "=",
499
+ value: t
500
+ },
501
+ {
502
+ field: "entity",
503
+ operator: "=",
504
+ value: n
505
+ },
506
+ {
507
+ field: "branchId",
508
+ operator: "=",
509
+ value: r
510
+ },
511
+ {
512
+ field: "remoteId",
513
+ operator: "=",
514
+ value: null
515
+ },
516
+ {
517
+ field: "revertChangeId",
518
+ operator: "=",
519
+ value: null
520
+ },
521
+ {
522
+ field: "entityId",
523
+ operator: "in",
524
+ value: k(a)
525
+ }
526
+ ];
527
+ i !== null && o.push({
528
+ field: "id",
529
+ operator: ">",
530
+ value: i
531
+ });
532
+ let s = await e.find({
533
+ where: {
534
+ combinator: "and",
535
+ rules: o
536
+ },
537
+ orderBy: [{
538
+ field: "id",
539
+ sort: "asc"
540
+ }]
541
+ }), c = /* @__PURE__ */ new Map();
542
+ for (let e of s) {
543
+ let t = A(e);
544
+ c.has(t) || c.set(t, []), c.get(t).push(e);
545
+ }
546
+ return c;
547
+ }
548
+ async function Re(e, t, n) {
549
+ for (let r of t) await e.update(r, {
550
+ remoteId: n,
551
+ updatedAt: /* @__PURE__ */ new Date()
552
+ });
553
+ }
554
+ var ze = (e, t) => t ? Object.assign(Object.create(Object.getPrototypeOf(e)), e, { clientId: t }) : e;
555
+ async function Be(n, r, i) {
556
+ let a = z(), o = [], s = new Map(n.map((e) => [e.key, e])), c = [];
557
+ for (let e of n) {
558
+ let t = r.get(e.key);
559
+ if (!t || t.length === 0) {
560
+ Fe(a, e);
561
+ continue;
562
+ }
563
+ o.push({
564
+ entityKey: e.key,
565
+ local: ze(t[t.length - 1], i.localClientId),
566
+ remote: e.remote
567
+ });
568
+ }
569
+ let l = 0;
570
+ if (o.length > 0) {
571
+ let { conflictResolver: n, changeRepo: u, dispatchEvent: d, repoLabel: f } = i, m = n.resolveAll ? await n.resolveAll(o) : await Promise.all(o.map((e) => n.resolve(e))), h = [];
572
+ for (let e = 0; e < o.length; e += 1) {
573
+ let t = o[e], n = m[e], i = s.get(t.entityKey), u = r.get(t.entityKey) ?? [];
574
+ if (i) {
575
+ if (n.type === "KEEP_LOCAL") {
576
+ l += 1;
577
+ continue;
578
+ }
579
+ if (n.type === "KEEP_REMOTE") {
580
+ l += 1, c.push({
581
+ localChanges: u,
582
+ remoteId: i.remote.id
583
+ }), Fe(a, i);
584
+ continue;
585
+ }
586
+ h.push(t);
587
+ }
588
+ }
589
+ if (h.length > 0) throw d(new e(o, 0, h.length)), d(new t(h)), new p(`Unsupported conflict resolution returned during pull for ${f}. Only KEEP_LOCAL and KEEP_REMOTE can be applied automatically at runtime.`);
590
+ if (d(new e(o, o.length, 0)), !i.deferLocalChangeSupersession) for (let e of c) await Re(u, e.localChanges, e.remoteId);
591
+ }
592
+ return {
593
+ applyActions: a,
594
+ conflictsResolved: l,
595
+ localChangeSupersessions: c
596
+ };
597
+ }
598
+ //#endregion
599
+ //#region src/topological-sort.ts
600
+ function Ve(e) {
601
+ return e === "pull" ? "dependsOn" : "requiredBy";
602
+ }
603
+ function He(e) {
604
+ return e === "DELETE" ? "push" : "pull";
605
+ }
606
+ function Ue(e) {
607
+ return Ve(He(e));
608
+ }
609
+ function We(e, t) {
610
+ let n = [], r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set();
611
+ function a(o) {
612
+ if (r.has(o)) return;
613
+ if (i.has(o)) throw new p(`Circular dependency detected at ${o}`);
614
+ i.add(o);
615
+ let s = e.get(o);
616
+ if (!s) throw new p(`Repository ${o} not found in dependency graph`);
617
+ let c = s[Ve(t)];
618
+ for (let t of c) {
619
+ let n = `${t.namespace}:${t.entity}`;
620
+ n !== o && e.has(n) && a(n);
621
+ }
622
+ i.delete(o), r.add(o), n.push(s.repository);
623
+ }
624
+ for (let t of e.keys()) a(t);
625
+ return n;
626
+ }
627
+ function Ge(e) {
628
+ return We(e, "pull");
629
+ }
630
+ function Ke(e, t) {
631
+ return We(e, He(t));
632
+ }
633
+ //#endregion
634
+ //#region src/pull-repository.ts
635
+ function qe(e) {
636
+ if (!e || typeof e != "object") return !1;
637
+ let t = e;
638
+ return (t.combinator === "and" || t.combinator === "or") && Array.isArray(t.rules);
639
+ }
640
+ function Je() {
641
+ return {
642
+ pulled: 0,
643
+ compacted: 0,
644
+ applied: 0,
645
+ hasMore: !1,
646
+ conflictsResolved: 0,
647
+ conflictsDeferred: 0,
648
+ persistedProgress: !1,
649
+ historyInvalidated: !1,
650
+ failures: []
651
+ };
652
+ }
653
+ function Ye(e) {
654
+ if (!(e instanceof m)) return;
655
+ let t = e.result;
656
+ if (!t || typeof t != "object") return;
657
+ let n = t;
658
+ return typeof n.applied == "number" && typeof n.persistedProgress == "boolean" ? n : void 0;
659
+ }
660
+ var Xe = {
661
+ limit: 1e3,
662
+ fetchAll: !1,
663
+ includeRelated: !0,
664
+ filter: void 0,
665
+ conflictResolver: void 0
666
+ };
667
+ async function Ze(e, t, n, r) {
668
+ let i = {
669
+ ...Xe,
670
+ ...r
671
+ }, a = e.rxdb;
672
+ a.dispatchEvent(new s("pull", t, n, i.includeRelated));
673
+ try {
674
+ let r = await Qe(e, t, n, i);
675
+ return a.dispatchEvent(new c("pull", t, n, {
676
+ pulled: r.pulled,
677
+ compacted: r.compacted,
678
+ conflictsResolved: r.conflictsResolved,
679
+ conflictsDeferred: r.conflictsDeferred
680
+ })), r;
681
+ } catch (e) {
682
+ throw a.dispatchEvent(new l("pull", t, n, e)), e;
683
+ }
684
+ }
685
+ async function Qe(e, t, n, r) {
686
+ let i = e.rxdb.config.entities.find((e) => {
687
+ let r = T(e);
688
+ return r.namespace === t && r.name === n;
689
+ });
690
+ if (!i) throw new p(`Entity not found: ${t}:${n}`);
691
+ let a = T(i), o = N(a, e.rxdb.config.sync), s = await re(e.rxdb, t, n, o);
692
+ if (s) throw new p(`Cannot pull repository ${t}:${n}: ${s}.`);
693
+ let c = r.filter;
694
+ if (o === "filter" && !c) {
695
+ let e = a.sync;
696
+ if (e?.remote?.filter) {
697
+ try {
698
+ c = e.remote.filter();
699
+ } catch (e) {
700
+ throw new p(`Filter function failed for ${t}:${n}: ${e instanceof Error ? e.message : String(e)}`);
701
+ }
702
+ if (c && !qe(c)) throw new p(`Invalid RuleGroup returned by filter function for ${t}:${n}: RuleGroup must have 'combinator' ('and' | 'or') and 'rules' array properties.`);
703
+ }
704
+ }
705
+ let l = {
706
+ ...r,
707
+ filter: c
708
+ };
709
+ return r.includeRelated ? await $e(e, t, n, l) : await nt(e, t, n, l);
710
+ }
711
+ async function $e(e, t, n, r) {
712
+ let i = R(e.rxdb.config.entities.map((e) => T(e))), a = new Map(e.rxdb.config.entities.map((e) => {
713
+ let t = T(e);
714
+ return [`${t.namespace}:${t.name}`, e];
715
+ })), o = Ge(i), s = `${t}:${n}`;
716
+ if (!i.get(s)) throw new p(`Repository ${t}:${n} not found in dependency graph`);
717
+ let c = /* @__PURE__ */ new Set([s]), l = (e) => {
718
+ let t = i.get(e);
719
+ if (t) for (let e of t.dependsOn) {
720
+ let t = `${e.namespace}:${e.entity}`;
721
+ c.has(t) || (c.add(t), l(t));
722
+ }
723
+ };
724
+ l(s);
725
+ let u = o.filter((e) => {
726
+ let t = `${e.namespace}:${e.entity}`;
727
+ return c.has(t);
728
+ }), d = [], f = [], h = /* @__PURE__ */ new Map();
729
+ for (let t of u) {
730
+ let n = await et(e, i, a, t, r, h);
731
+ d.push(n), n.error && (h.set(F(t), n.error), f.push({
732
+ repository: t,
733
+ error: n.error
734
+ }));
735
+ }
736
+ let g = d.find((e) => e.repository.namespace === t && e.repository.entity === n);
737
+ if (!g) throw new p("Internal error: target repository result not found");
738
+ g.relatedResults = d.filter((e) => e !== g), g.failures = f;
739
+ for (let e of g.relatedResults) g.persistedProgress ||= e.persistedProgress, g.historyInvalidated ||= e.historyInvalidated;
740
+ let [_] = f;
741
+ if (!g.success && _) throw !g.persistedProgress && f.length === 1 ? _.error : new m(g, _.error);
742
+ return g;
743
+ }
744
+ async function et(e, t, n, r, i, a) {
745
+ let o = F(r), s = Me(t, o, a, "dependsOn");
746
+ if (s) return {
747
+ ...Je(),
748
+ repository: r,
749
+ success: !1,
750
+ skipped: `dependency ${F(s.dependency)} failed`,
751
+ error: new f(r, s.dependency, s.cause)
752
+ };
753
+ let c = n.get(o);
754
+ if (!c) throw new p(`Internal error: entity not found for cascade node ${o}`);
755
+ let l = T(c), u = N(l, e.rxdb.config.sync), d = await re(e.rxdb, r.namespace, r.entity, u);
756
+ if (d) return {
757
+ ...Je(),
758
+ repository: r,
759
+ success: !0,
760
+ skipped: d
761
+ };
762
+ try {
763
+ let t = await nt(e, r.namespace, r.entity, {
764
+ ...i,
765
+ filter: tt(o, l, u, i.filter),
766
+ includeRelated: !1
767
+ });
768
+ return t.success = !0, t;
769
+ } catch (e) {
770
+ let t = e instanceof Error ? e : Error(String(e)), n = t instanceof m ? t.cause : t;
771
+ return {
772
+ ...Ye(t) ?? Je(),
773
+ repository: r,
774
+ success: !1,
775
+ error: n,
776
+ failures: [{
777
+ repository: r,
778
+ error: n
779
+ }]
780
+ };
781
+ }
782
+ }
783
+ function tt(e, t, n, r) {
784
+ if (n === "full") return;
785
+ if (n !== "filter") return r;
786
+ let i = t.sync?.remote?.filter;
787
+ if (!i) return r;
788
+ let a;
789
+ try {
790
+ a = i();
791
+ } catch (t) {
792
+ throw new p(`Filter function failed for ${e}: ${t instanceof Error ? t.message : String(t)}`);
793
+ }
794
+ if (!qe(a)) throw new p(`Invalid RuleGroup returned by filter function for ${e}: RuleGroup must have 'combinator' ('and' | 'or') and 'rules' array properties.`);
795
+ return a;
796
+ }
797
+ async function nt(e, t, n, r) {
798
+ let i = e.rxdb;
799
+ if (!i.config.sync?.remote?.adapter) throw new p("Remote adapter not configured.");
800
+ let { adapter: o } = await e.getRemoteRepositories(), { adapter: s } = await e.getLocalRepositories(), c = await e.getCurrentBranch(), l = await L(e, c.id), u = s.getRepository(g), f = e.rxdb.config.entities.find((e) => {
801
+ let r = T(e);
802
+ return r.namespace === t && r.name === n;
803
+ }), h = T(f), _ = N(h, e.rxdb.config.sync), v = await D(u, {
804
+ namespace: t,
805
+ entity: n,
806
+ branchId: c.id,
807
+ syncType: _
808
+ }, () => i.entityManager.instantiate(g)), y = v.lastPullRemoteChangeId, b = 0, x = 0, C = 0, w = 0, E = !1, O, k, A = r.conflictResolver ?? new a(), j = y ?? 0, M = z();
809
+ try {
810
+ do {
811
+ let e = await Pe(o, {
812
+ namespace: t,
813
+ entity: n,
814
+ sinceId: j,
815
+ limit: r.limit,
816
+ filter: r.filter
817
+ }, l);
818
+ if (b += e.length, O = e.length >= r.limit, e.length === 0) {
819
+ await u.update(v, {
820
+ lastPulledAt: /* @__PURE__ */ new Date(),
821
+ updatedAt: /* @__PURE__ */ new Date()
822
+ });
823
+ break;
824
+ }
825
+ k = e[e.length - 1], j = k.id;
826
+ let a = i.context.clientId, f = [], p = [];
827
+ for (let t of e) t.clientId != null && t.clientId === a ? f.push(t) : p.push(t);
828
+ let m = 0;
829
+ await s.transaction(async (e) => {
830
+ let r = e.getRepository(d), a = e.getRepository(g), o = f.filter((e) => e.localId != null);
831
+ if (o.length > 0) {
832
+ let e = o.map((e) => e.localId), t = await r.find({ where: {
833
+ combinator: "and",
834
+ rules: [{
835
+ field: "id",
836
+ operator: "in",
837
+ value: e
838
+ }]
839
+ } }), n = new Map(t.map((e) => [e.id, e]));
840
+ for (let e of o) {
841
+ let t = n.get(e.localId);
842
+ t && t.remoteId == null && await r.update(t, { remoteId: e.id });
843
+ }
844
+ }
845
+ if (p.length > 0) {
846
+ S(p, M);
847
+ let a = B(M);
848
+ x += p.length - a;
849
+ let o = Ie(p, M), { applyActions: s, conflictsResolved: l, localChangeSupersessions: u } = await Be(o, await Le(r, t, n, c.id, v.lastPushedChangeId, [...new Set(o.map((e) => e.entityId))]), {
850
+ changeRepo: r,
851
+ conflictResolver: A,
852
+ dispatchEvent: (e) => i.dispatchEvent(e),
853
+ repoLabel: `${t}:${n}`,
854
+ deferLocalChangeSupersession: !0,
855
+ localClientId: i.context.clientId
856
+ });
857
+ w += l;
858
+ let d = B(s);
859
+ if (d > 0) {
860
+ await e.mergeChanges(s, void 0, !0);
861
+ for (let e of u) await Re(r, e.localChanges, e.remoteId);
862
+ m = d;
863
+ }
864
+ M = z();
865
+ }
866
+ let s = k.id;
867
+ v = await a.update(v, {
868
+ lastPullRemoteChangeId: s,
869
+ lastPulledAt: /* @__PURE__ */ new Date(),
870
+ updatedAt: /* @__PURE__ */ new Date()
871
+ });
872
+ }), E = !0, C += m;
873
+ } while (O && r.fetchAll);
874
+ } catch (e) {
875
+ throw E ? new m({
876
+ repository: {
877
+ namespace: t,
878
+ entity: n
879
+ },
880
+ pulled: b,
881
+ compacted: x,
882
+ applied: C,
883
+ hasMore: !0,
884
+ conflictsResolved: w,
885
+ conflictsDeferred: 0,
886
+ persistedProgress: !0,
887
+ historyInvalidated: C > 0,
888
+ failures: [{
889
+ repository: {
890
+ namespace: t,
891
+ entity: n
892
+ },
893
+ error: e instanceof Error ? e : Error(String(e))
894
+ }]
895
+ }, e instanceof Error ? e : Error(String(e))) : e;
896
+ }
897
+ return {
898
+ repository: {
899
+ namespace: t,
900
+ entity: n
901
+ },
902
+ pulled: b,
903
+ compacted: x,
904
+ applied: C,
905
+ hasMore: O,
906
+ conflictsResolved: w,
907
+ conflictsDeferred: 0,
908
+ persistedProgress: E,
909
+ historyInvalidated: C > 0,
910
+ failures: []
911
+ };
912
+ }
913
+ //#endregion
914
+ //#region src/push-repository.ts
915
+ var rt = {
916
+ batchSize: 1e3,
917
+ includeRelated: !0
918
+ };
919
+ function it(e) {
920
+ if (!Number.isSafeInteger(e) || e <= 0) throw RangeError("batchSize must be a positive safe integer");
921
+ }
922
+ function at(e) {
923
+ if (!(e instanceof m)) return;
924
+ let t = e.result;
925
+ if (!t || typeof t != "object") return;
926
+ let n = t;
927
+ return typeof n.pushed == "number" && typeof n.originalCount == "number" ? n : void 0;
928
+ }
929
+ function ot(e) {
930
+ let { error: t } = e;
931
+ throw t ? e.pushed === 0 ? t : new m(e, t) : new p(`Internal error: repository ${F(e.repository)} failed without an error`);
932
+ }
933
+ async function st(e, t, n, r) {
934
+ let i = {
935
+ batchSize: r?.batchSize === void 0 ? rt.batchSize : r.batchSize,
936
+ includeRelated: r?.includeRelated === void 0 ? rt.includeRelated : r.includeRelated
937
+ }, a = e.rxdb;
938
+ a.dispatchEvent(new s("push", t, n, i.includeRelated));
939
+ let o = e.pushInFlight.session();
940
+ try {
941
+ it(i.batchSize);
942
+ let r = await ct(e, t, n, i, o);
943
+ return a.dispatchEvent(new c("push", t, n, {
944
+ pushed: r.pushed,
945
+ compacted: r.compacted,
946
+ failed: r.failed
947
+ })), r;
948
+ } catch (e) {
949
+ throw a.dispatchEvent(new l("push", t, n, e)), e;
950
+ } finally {
951
+ o.release();
952
+ }
953
+ }
954
+ async function ct(e, t, n, r, i) {
955
+ let a = e.rxdb.config.entities.find((e) => {
956
+ let r = T(e);
957
+ return r.namespace === t && r.name === n;
958
+ });
959
+ if (!a) throw new p(`Entity not found: ${t}:${n}`);
960
+ let o = T(a), s = await ie(e.rxdb, t, n, N(o, e.rxdb.config.sync));
961
+ if (s) throw new p(`Cannot push repository ${t}:${n}: ${s}.`);
962
+ return r.includeRelated ? await lt(e, t, n, r, i) : await Ct(e, t, n, r, i);
963
+ }
964
+ async function lt(e, t, n, r, i) {
965
+ let a = R(e.rxdb.config.entities.map((e) => T(e))), o = `${t}:${n}`;
966
+ if (!a.get(o)) throw new p(`Repository ${t}:${n} not found in dependency graph`);
967
+ let s = /* @__PURE__ */ new Set([o]), c = (e) => {
968
+ let t = a.get(e);
969
+ if (t) for (let e of t.requiredBy) {
970
+ let t = `${e.namespace}:${e.entity}`;
971
+ s.has(t) || (s.add(t), c(t));
972
+ }
973
+ };
974
+ c(o);
975
+ let l = (e) => Ke(a, e).filter((e) => s.has(F(e))), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map();
976
+ for (let t of pt) for (let n of l(t.action)) await ut(e, a, n, t, r, u, d, i);
977
+ let f = [], m = [];
978
+ for (let e of l("INSERT")) {
979
+ let t = u.get(F(e));
980
+ if (!t) throw new p(`Internal error: cascade node missing for ${F(e)}`);
981
+ let n = t.result ?? await St(t.plan);
982
+ f.push(n), n.error && m.push({
983
+ repository: e,
984
+ error: n.error
985
+ });
986
+ }
987
+ let h = f.find((e) => e.repository.namespace === t && e.repository.entity === n);
988
+ if (!h) throw new p("Internal error: target repository result not found");
989
+ return h.relatedResults = f.filter((e) => e !== h), h.failures = m, h.success || ot(h), h;
990
+ }
991
+ async function ut(e, t, n, r, i, a, o, s) {
992
+ let c = F(n), l = a.get(c);
993
+ if (l || (l = { repo: n }, a.set(c, l)), l.result) return;
994
+ let u = Me(t, c, o, Ue(r.action));
995
+ if (u) {
996
+ let e = new f(n, u.dependency, u.cause);
997
+ l.result = {
998
+ ...ft(l.plan),
999
+ repository: n,
1000
+ success: !1,
1001
+ skipped: `dependency ${F(u.dependency)} failed`,
1002
+ error: e
1003
+ }, o.set(c, e);
1004
+ return;
1005
+ }
1006
+ if (!l.plan) {
1007
+ let t = await dt(e, n);
1008
+ if (t) {
1009
+ l.result = {
1010
+ ...V(),
1011
+ repository: n,
1012
+ success: !0,
1013
+ skipped: t
1014
+ };
1015
+ return;
1016
+ }
1017
+ try {
1018
+ let t = await bt(e, n.namespace, n.entity, s);
1019
+ if ("emptyResult" in t) {
1020
+ l.result = {
1021
+ ...t.emptyResult,
1022
+ success: t.emptyResult.success ?? !0
1023
+ };
1024
+ return;
1025
+ }
1026
+ l.plan = t;
1027
+ } catch (e) {
1028
+ let t = e instanceof Error ? e : Error(String(e));
1029
+ l.result = {
1030
+ ...V(),
1031
+ repository: n,
1032
+ success: !1,
1033
+ error: t,
1034
+ failures: [{
1035
+ repository: n,
1036
+ error: t
1037
+ }]
1038
+ }, o.set(c, t);
1039
+ return;
1040
+ }
1041
+ }
1042
+ await xt(l.plan, r.kinds, i.batchSize), l.plan.error && (l.result = await St(l.plan), o.set(c, l.plan.error));
1043
+ }
1044
+ async function dt(e, t) {
1045
+ let n = e.rxdb.config.entities.find((e) => {
1046
+ let n = T(e);
1047
+ return n.namespace === t.namespace && n.name === t.entity;
1048
+ });
1049
+ if (!n) throw new p(`Internal error: entity not found for cascade node ${F(t)}`);
1050
+ return ie(e.rxdb, t.namespace, t.entity, N(T(n), e.rxdb.config.sync));
1051
+ }
1052
+ function V() {
1053
+ return {
1054
+ pushed: 0,
1055
+ failed: 0,
1056
+ compacted: 0,
1057
+ originalCount: 0,
1058
+ failures: []
1059
+ };
1060
+ }
1061
+ function ft(e) {
1062
+ return e ? {
1063
+ pushed: e.pushed,
1064
+ failed: e.effectiveCount - e.pushed,
1065
+ compacted: e.compacted,
1066
+ originalCount: e.originalCount,
1067
+ failures: []
1068
+ } : V();
1069
+ }
1070
+ var pt = [{
1071
+ action: "DELETE",
1072
+ kinds: /* @__PURE__ */ new Set(["deletes"])
1073
+ }, {
1074
+ action: "INSERT",
1075
+ kinds: /* @__PURE__ */ new Set(["updates", "inserts"])
1076
+ }], mt = /* @__PURE__ */ new Set([
1077
+ "deletes",
1078
+ "updates",
1079
+ "inserts"
1080
+ ]);
1081
+ function ht(e, t) {
1082
+ let n = /* @__PURE__ */ new Map();
1083
+ for (let t of e) {
1084
+ let e = A(t), r = n.get(e) ?? [];
1085
+ r.push(t), n.set(e, r);
1086
+ }
1087
+ let r = [], i = (e, t) => {
1088
+ for (let [i, a] of t) {
1089
+ let t = n.get(i);
1090
+ if (!t?.length) throw new p(`Missing source changes for compacted action: ${i}`);
1091
+ r.push({
1092
+ actionKind: e,
1093
+ key: i,
1094
+ action: a,
1095
+ sourceChanges: t
1096
+ });
1097
+ }
1098
+ };
1099
+ return i("deletes", t.deletes), i("updates", t.updates), i("inserts", t.inserts), r;
1100
+ }
1101
+ function gt(e) {
1102
+ let t = {
1103
+ deletes: /* @__PURE__ */ new Map(),
1104
+ updates: /* @__PURE__ */ new Map(),
1105
+ inserts: /* @__PURE__ */ new Map()
1106
+ }, n = [], r = /* @__PURE__ */ new Map();
1107
+ for (let i of e) {
1108
+ t[i.actionKind].set(i.key, i.action);
1109
+ for (let e of i.sourceChanges) n.push(e), r.set(e.id, [e]);
1110
+ }
1111
+ return n.sort((e, t) => e.id - t.id), {
1112
+ actions: t,
1113
+ sourceChanges: n,
1114
+ sourceChangesByLocalId: r
1115
+ };
1116
+ }
1117
+ function _t(e) {
1118
+ return typeof e != "object" || !e ? [] : e.changeIdMapping ?? [];
1119
+ }
1120
+ function vt(e, t) {
1121
+ let n = e.map(({ localId: e, remoteId: n }) => {
1122
+ let r = t.get(e);
1123
+ if (!r) throw new p(`Remote change mapping references unknown local change: ${e}`);
1124
+ return {
1125
+ remoteId: n,
1126
+ sourceChanges: r
1127
+ };
1128
+ }), r = /* @__PURE__ */ new Map();
1129
+ for (let { remoteId: e, sourceChanges: t } of n) for (let n of t) r.set(n, e);
1130
+ return [...r].map(([e, t]) => ({
1131
+ change: e,
1132
+ remoteId: t
1133
+ }));
1134
+ }
1135
+ async function yt(e, t, n) {
1136
+ return vt(_t(await e.mergeChanges(n.actions, t, n.sourceChanges)), n.sourceChangesByLocalId);
1137
+ }
1138
+ async function bt(e, t, n, r) {
1139
+ let i = e.rxdb;
1140
+ if (!i.config.sync?.remote?.adapter) throw new p("Remote adapter not configured.");
1141
+ await e.getRemoteRepositories();
1142
+ let { adapter: a } = await e.getLocalRepositories(), o = await e.getCurrentBranch(), s = a.getRepository(g), c = e.rxdb.config.entities.find((e) => {
1143
+ let r = T(e);
1144
+ return r.namespace === t && r.name === n;
1145
+ }), l = T(c), u = N(l, e.rxdb.config.sync), f = await D(s, {
1146
+ namespace: t,
1147
+ entity: n,
1148
+ branchId: o.id,
1149
+ syncType: u
1150
+ }, () => i.entityManager.instantiate(g)), m = f.lastPushedChangeId, h = await L(e, o.id), _ = a.getRepository(d), v;
1151
+ if (h.length === 1) v = await wt(_, h, m, t, [n]);
1152
+ else {
1153
+ let e = m;
1154
+ for (let r of h.slice(1)) {
1155
+ let i = `${t}:${n}:${r}`, a = (await s.find({
1156
+ where: {
1157
+ combinator: "and",
1158
+ rules: [{
1159
+ field: "id",
1160
+ operator: "=",
1161
+ value: i
1162
+ }]
1163
+ },
1164
+ limit: 1
1165
+ }))[0]?.lastPushedChangeId ?? null;
1166
+ if (a === null) {
1167
+ e = null;
1168
+ break;
1169
+ }
1170
+ (e === null || a < e) && (e = a);
1171
+ }
1172
+ v = await wt(_, h, e, t, [n]);
1173
+ }
1174
+ let y = v.length;
1175
+ if (y === 0) return { emptyResult: {
1176
+ ...V(),
1177
+ repository: {
1178
+ namespace: t,
1179
+ entity: n
1180
+ }
1181
+ } };
1182
+ let b = {
1183
+ deletes: /* @__PURE__ */ new Map(),
1184
+ updates: /* @__PURE__ */ new Map(),
1185
+ inserts: /* @__PURE__ */ new Map()
1186
+ };
1187
+ S(v.map((e) => ({
1188
+ id: e.id,
1189
+ namespace: e.namespace,
1190
+ entity: e.entity,
1191
+ entityId: e.entityId,
1192
+ type: e.type,
1193
+ branchId: e.branchId,
1194
+ patch: e.patch,
1195
+ inversePatch: e.inversePatch,
1196
+ createdAt: e.createdAt,
1197
+ updatedAt: e.updatedAt
1198
+ })), b);
1199
+ let x = b.inserts.size + b.updates.size + b.deletes.size, C = y - x;
1200
+ if (x === 0) {
1201
+ let e = v.reduce((e, t) => t.id > e ? t.id : e, v[0].id);
1202
+ return await s.update(f, {
1203
+ lastPushedChangeId: e,
1204
+ updatedAt: /* @__PURE__ */ new Date()
1205
+ }), { emptyResult: {
1206
+ ...V(),
1207
+ repository: {
1208
+ namespace: t,
1209
+ entity: n
1210
+ },
1211
+ compacted: y,
1212
+ originalCount: y
1213
+ } };
1214
+ }
1215
+ let { adapter: w } = await e.getRemoteRepositories();
1216
+ return r.claim(`${t}:${n}`, v.reduce((e, t) => t.id > e ? t.id : e, v[0].id)), {
1217
+ repository: {
1218
+ namespace: t,
1219
+ entity: n
1220
+ },
1221
+ entries: ht(v, b),
1222
+ localChanges: v,
1223
+ repoSync: f,
1224
+ localAdapter: a,
1225
+ remoteAdapter: w,
1226
+ branchId: o.id,
1227
+ originalCount: y,
1228
+ effectiveCount: x,
1229
+ compacted: C,
1230
+ pushed: 0,
1231
+ remoteIdsByChange: /* @__PURE__ */ new Map()
1232
+ };
1233
+ }
1234
+ async function xt(e, t, n) {
1235
+ if (e.error) return;
1236
+ let r = e.entries.filter((e) => t.has(e.actionKind));
1237
+ if (r.length === 0) return;
1238
+ let { namespace: i, entity: a } = e.repository;
1239
+ for (let t = 0; t < r.length; t += n) {
1240
+ let o = r.slice(t, t + n), s = gt(o);
1241
+ try {
1242
+ let t = await yt(e.remoteAdapter, e.branchId, s);
1243
+ for (let { change: n, remoteId: r } of t) e.remoteIdsByChange.set(n, r);
1244
+ e.pushed += o.length;
1245
+ } catch (t) {
1246
+ console.error(`Error pushing changes to remote for repository [${i}/${a}]:`, t), e.error = t instanceof Error ? t : Error(String(t));
1247
+ return;
1248
+ }
1249
+ }
1250
+ }
1251
+ async function St(e) {
1252
+ let { repository: t, localChanges: n, repoSync: r, localAdapter: i, remoteIdsByChange: a, effectiveCount: o } = e, { namespace: s, entity: c } = t, l = e.pushed, u = e.error, d = o - l;
1253
+ if (d === 0) {
1254
+ let e = n.reduce((e, t) => t.id > e ? t.id : e, n[0].id), t = new Map([...a].map(([e]) => [e, e.remoteId])), f = {
1255
+ lastPushedChangeId: r.lastPushedChangeId,
1256
+ lastPushedAt: r.lastPushedAt,
1257
+ updatedAt: r.updatedAt
1258
+ }, p = /* @__PURE__ */ new Date();
1259
+ try {
1260
+ await i.transaction(async (t) => {
1261
+ let n = [...a].map(([e, t]) => (e.remoteId = t, e));
1262
+ n.length > 0 && await t.saveMany(n), await t.getRepository(g).update(r, {
1263
+ lastPushedChangeId: e,
1264
+ lastPushedAt: p,
1265
+ updatedAt: p
1266
+ });
1267
+ });
1268
+ } catch (e) {
1269
+ for (let [e, n] of t) e.remoteId = n;
1270
+ Object.assign(r, f), console.error(`Error saving push state for repository [${s}/${c}]:`, e), u = e instanceof Error ? e : Error(String(e)), l = 0, d = o;
1271
+ }
1272
+ }
1273
+ return {
1274
+ repository: t,
1275
+ success: d === 0,
1276
+ error: u,
1277
+ pushed: l,
1278
+ failed: d,
1279
+ compacted: e.compacted,
1280
+ originalCount: e.originalCount,
1281
+ failures: u ? [{
1282
+ repository: t,
1283
+ error: u
1284
+ }] : []
1285
+ };
1286
+ }
1287
+ async function Ct(e, t, n, r, i) {
1288
+ let a = await bt(e, t, n, i);
1289
+ if ("emptyResult" in a) return a.emptyResult;
1290
+ await xt(a, mt, r.batchSize);
1291
+ let o = await St(a);
1292
+ return o.success || ot(o), o;
1293
+ }
1294
+ async function wt(e, t, n, r, i) {
1295
+ let a = [
1296
+ {
1297
+ field: "revertChangeId",
1298
+ operator: "=",
1299
+ value: null
1300
+ },
1301
+ {
1302
+ field: "remoteId",
1303
+ operator: "=",
1304
+ value: null
1305
+ },
1306
+ {
1307
+ field: "namespace",
1308
+ operator: "=",
1309
+ value: r
1310
+ }
1311
+ ];
1312
+ return t.length === 1 ? a.push({
1313
+ field: "branchId",
1314
+ operator: "=",
1315
+ value: t[0]
1316
+ }) : a.push({
1317
+ field: "branchId",
1318
+ operator: "in",
1319
+ value: t
1320
+ }), i && i.length > 0 && a.push({
1321
+ field: "entity",
1322
+ operator: "in",
1323
+ value: i
1324
+ }), n !== null && a.push({
1325
+ field: "id",
1326
+ operator: ">",
1327
+ value: n
1328
+ }), await e.find({
1329
+ where: {
1330
+ combinator: "and",
1331
+ rules: a
1332
+ },
1333
+ orderBy: [{
1334
+ field: "id",
1335
+ sort: "asc"
1336
+ }]
1337
+ });
1338
+ }
1339
+ //#endregion
1340
+ //#region src/sync-repository.ts
1341
+ function Tt(e, t) {
1342
+ return {
1343
+ repository: {
1344
+ namespace: e,
1345
+ entity: t
1346
+ },
1347
+ pulled: 0,
1348
+ compacted: 0,
1349
+ applied: 0,
1350
+ hasMore: !1,
1351
+ conflictsResolved: 0,
1352
+ conflictsDeferred: 0,
1353
+ persistedProgress: !1,
1354
+ historyInvalidated: !1,
1355
+ failures: []
1356
+ };
1357
+ }
1358
+ function Et(e, t) {
1359
+ return {
1360
+ repository: {
1361
+ namespace: e,
1362
+ entity: t
1363
+ },
1364
+ pushed: 0,
1365
+ failed: 0,
1366
+ compacted: 0,
1367
+ originalCount: 0,
1368
+ failures: []
1369
+ };
1370
+ }
1371
+ function Dt(e, t, n) {
1372
+ if (!(e instanceof m)) return e;
1373
+ let r = Ye(e);
1374
+ if (!r) return e;
1375
+ let i = {
1376
+ pullResult: r,
1377
+ pushResult: Et(t, n),
1378
+ persistedProgress: r.persistedProgress,
1379
+ historyInvalidated: r.historyInvalidated
1380
+ };
1381
+ return new m(i, e.cause);
1382
+ }
1383
+ function Ot(e, t, n, r) {
1384
+ let i = e instanceof Error ? e : Error(String(e)), a = at(i), o = a === void 0 ? Et(n, r) : a, s = t.persistedProgress || o.pushed > 0;
1385
+ if (!s) return i;
1386
+ let c = {
1387
+ pullResult: t,
1388
+ pushResult: o,
1389
+ persistedProgress: s,
1390
+ historyInvalidated: t.historyInvalidated
1391
+ };
1392
+ return new m(c, i instanceof m ? i.cause : i);
1393
+ }
1394
+ async function kt(e, t, n, r) {
1395
+ let i = e.rxdb, a = r?.pull?.includeRelated ?? r?.push?.includeRelated ?? !0;
1396
+ i.dispatchEvent(new s("sync", t, n, a));
1397
+ try {
1398
+ let a = await At(e, t, n, r), { pullResult: o, pushResult: s } = a, l = {
1399
+ pulled: o.pulled,
1400
+ pushed: s.pushed,
1401
+ compacted: o.compacted + s.compacted,
1402
+ failed: s.failed,
1403
+ conflictsResolved: o.conflictsResolved,
1404
+ conflictsDeferred: o.conflictsDeferred
1405
+ };
1406
+ return i.dispatchEvent(new c("sync", t, n, l)), a;
1407
+ } catch (e) {
1408
+ throw i.dispatchEvent(new l("sync", t, n, e)), e;
1409
+ }
1410
+ }
1411
+ async function At(e, t, n, r) {
1412
+ let i = e.rxdb.config.entities.find((e) => {
1413
+ let r = T(e);
1414
+ return r.namespace === t && r.name === n;
1415
+ });
1416
+ if (!i) throw new p(`Entity not found: ${t}:${n}`);
1417
+ let a = T(i), o = N(a, e.rxdb.config.sync);
1418
+ if (o === "none") throw new p(`Cannot sync repository ${t}:${n}: syncType is 'none'. This entity is not configured for remote synchronization.`);
1419
+ let s;
1420
+ if ((r?.direction === "pull" || r?.direction === "sync" || !r?.direction) && M(o).pull) try {
1421
+ s = await Ze(e, t, n, r?.pull);
1422
+ } catch (e) {
1423
+ throw Dt(e, t, n);
1424
+ }
1425
+ else s = Tt(t, n);
1426
+ let c;
1427
+ if ((r?.direction === "push" || r?.direction === "sync" || !r?.direction) && M(o).push) try {
1428
+ c = await st(e, t, n, r?.push);
1429
+ } catch (e) {
1430
+ throw Ot(e, s, t, n);
1431
+ }
1432
+ else c = Et(t, n);
1433
+ return {
1434
+ pullResult: s,
1435
+ pushResult: c,
1436
+ persistedProgress: s.persistedProgress || c.pushed > 0,
1437
+ historyInvalidated: s.historyInvalidated
1438
+ };
1439
+ }
1440
+ //#endregion
1441
+ //#region src/bulk-sync.ts
1442
+ async function jt(e, t) {
1443
+ if (t.repositories && t.repositories.length > 0) return t.repositories;
1444
+ let n = [];
1445
+ for (let t of e.config.entities) {
1446
+ let r = T(t), i = M(N(r, e.config.sync));
1447
+ if (!i.pull && !i.push) continue;
1448
+ let a = await C(e, r.namespace, r.name);
1449
+ P(a) && n.push({
1450
+ namespace: r.namespace,
1451
+ entity: r.name
1452
+ });
1453
+ }
1454
+ return n;
1455
+ }
1456
+ async function Mt(e, t, n) {
1457
+ try {
1458
+ return {
1459
+ repository: t,
1460
+ success: !0,
1461
+ result: await kt(e, t.namespace, t.entity, n)
1462
+ };
1463
+ } catch (e) {
1464
+ let n = e instanceof Error ? e : Error(String(e));
1465
+ return {
1466
+ repository: t,
1467
+ success: !1,
1468
+ result: n instanceof m ? n.result : void 0,
1469
+ error: n
1470
+ };
1471
+ }
1472
+ }
1473
+ async function Nt(e, t, n) {
1474
+ let r = [];
1475
+ for (let i of t) {
1476
+ let t = await Mt(e, i, n);
1477
+ r.push(t);
1478
+ }
1479
+ return r;
1480
+ }
1481
+ async function Pt(e, t, n, r) {
1482
+ let i = [];
1483
+ for (let a = 0; a < t.length; a += r) {
1484
+ let o = t.slice(a, a + r).map((t) => Mt(e, t, n)), s = await Promise.all(o);
1485
+ i.push(...s);
1486
+ }
1487
+ return i;
1488
+ }
1489
+ async function Ft(e, t = {}) {
1490
+ let n = Date.now(), r = e.syncManager, i = await jt(e, t), a = {
1491
+ direction: t.operation,
1492
+ pull: t.pull,
1493
+ push: t.push
1494
+ }, o = t.concurrent ?? !1, s = t.concurrency ?? 3;
1495
+ if (o && (!Number.isSafeInteger(s) || s < 1)) throw new p(`bulkSync: concurrency 必须是不小于 1 的安全整数,收到 ${String(s)}`);
1496
+ let c;
1497
+ c = o ? await Pt(r, i, a, s) : await Nt(r, i, a);
1498
+ let l = c.filter((e) => e.success).length, u = c.filter((e) => !e.success).length, d = Date.now() - n;
1499
+ return {
1500
+ succeeded: l,
1501
+ failed: u,
1502
+ results: c,
1503
+ durationMs: d
1504
+ };
1505
+ }
1506
+ //#endregion
1507
+ //#region src/check-repository-updates.ts
1508
+ async function It(e, t, n) {
1509
+ let r = {
1510
+ namespace: t,
1511
+ entity: n
1512
+ }, i = e.config.entities.find((e) => {
1513
+ let r = T(e);
1514
+ return r.namespace === t && r.name === n;
1515
+ });
1516
+ if (!i) throw Error(`Entity not found: ${t}.${n}`);
1517
+ let a = T(i);
1518
+ if (!te(a, e.config.sync)) return {
1519
+ repository: r,
1520
+ remoteLatestChangeId: 0,
1521
+ localLastPullRemoteChangeId: null,
1522
+ pendingCount: 0,
1523
+ hasUpdates: !1
1524
+ };
1525
+ let o = e.syncManager, s = (await o.getCurrentBranch()).id, { adapter: c } = await o.getLocalRepositories(), l = c.getRepository(g), u = `${t}:${n}:${s}`, d = (await l.find({
1526
+ where: {
1527
+ combinator: "and",
1528
+ rules: [{
1529
+ field: "id",
1530
+ operator: "=",
1531
+ value: u
1532
+ }]
1533
+ },
1534
+ limit: 1
1535
+ }))[0]?.lastPullRemoteChangeId ?? null, { adapter: f } = await o.getRemoteRepositories();
1536
+ if (!f) throw Error("Remote adapter not configured");
1537
+ let p = d ?? 0, m = await L(o, s), h = await Promise.all(m.map((e) => f.getChangeCount(p, [`${t}:${a.name}`], e))), _ = h.reduce((e, t) => e + t.count, 0);
1538
+ return {
1539
+ repository: r,
1540
+ remoteLatestChangeId: h.reduce((e, t) => t.latestChangeId > e ? t.latestChangeId : e, 0),
1541
+ localLastPullRemoteChangeId: d,
1542
+ pendingCount: _,
1543
+ hasUpdates: _ > 0
1544
+ };
1545
+ }
1546
+ //#endregion
1547
+ //#region src/cleanup-expired.ts
1548
+ async function Lt(e, t, n, r) {
1549
+ let i = e.rxdb, { adapter: a } = await e.getLocalRepositories(), o = i.config.entities.find((e) => {
1550
+ let r = T(e);
1551
+ return r.namespace === t && r.name === n;
1552
+ });
1553
+ if (!o) throw new p(`Entity not found: ${t}:${n}`);
1554
+ let s = T(o), c = N(s, i.config.sync), l = r?.filter;
1555
+ if (!l && c === "filter") {
1556
+ let e = s.sync;
1557
+ if (e?.remote?.filter) try {
1558
+ l = e.remote.filter();
1559
+ } catch (e) {
1560
+ throw new p(`Filter function failed for ${t}:${n}: ${e instanceof Error ? e.message : String(e)}`);
1561
+ }
1562
+ }
1563
+ if (!l) throw new p(`No filter provided and entity ${t}:${n} does not have a Filter sync configuration.`);
1564
+ let u = Rt(l), f = async (e, r) => {
1565
+ if (e.length === 0) return e;
1566
+ let i = await r.getRepository(d).find({ where: {
1567
+ combinator: "and",
1568
+ rules: [
1569
+ {
1570
+ field: "namespace",
1571
+ operator: "=",
1572
+ value: t
1573
+ },
1574
+ {
1575
+ field: "entity",
1576
+ operator: "=",
1577
+ value: n
1578
+ },
1579
+ {
1580
+ field: "remoteId",
1581
+ operator: "=",
1582
+ value: null
1583
+ },
1584
+ {
1585
+ field: "revertChangeId",
1586
+ operator: "=",
1587
+ value: null
1588
+ },
1589
+ {
1590
+ field: "entityId",
1591
+ operator: "in",
1592
+ value: k(e.map((e) => e.id))
1593
+ }
1594
+ ]
1595
+ } }), a = new Set(i.map((e) => j(e.entityId)));
1596
+ return a.size === 0 ? e : e.filter((e) => !a.has(j(e.id)));
1597
+ };
1598
+ if (r?.dryRun) {
1599
+ let e = await f(await a.getRepository(o).find({ where: u }), a);
1600
+ return {
1601
+ removed: e.length,
1602
+ removedIds: e.map((e) => e.id)
1603
+ };
1604
+ }
1605
+ return a.transaction(async (e) => {
1606
+ let r = e.getRepository(o), i = await f(await r.find({ where: u }), e), a = i.map((e) => e.id);
1607
+ if (a.length > 0) {
1608
+ let r = /* @__PURE__ */ new Map();
1609
+ for (let e of i) r.set(`${t}:${n}:${j(e.id)}`, {
1610
+ patch: null,
1611
+ inversePatch: null
1612
+ });
1613
+ let a = {
1614
+ deletes: r,
1615
+ updates: /* @__PURE__ */ new Map(),
1616
+ inserts: /* @__PURE__ */ new Map()
1617
+ };
1618
+ await e.mergeChanges(a, void 0, !0);
1619
+ }
1620
+ return {
1621
+ removed: a.length,
1622
+ removedIds: a
1623
+ };
1624
+ });
1625
+ }
1626
+ function Rt(e) {
1627
+ return {
1628
+ combinator: e.combinator === "and" ? "or" : "and",
1629
+ rules: e.rules.map((e) => "combinator" in e ? Rt(e) : zt(e))
1630
+ };
1631
+ }
1632
+ function zt(e) {
1633
+ let t = {
1634
+ "=": "!=",
1635
+ "!=": "=",
1636
+ "<": ">=",
1637
+ "<=": ">",
1638
+ ">": "<=",
1639
+ ">=": "<",
1640
+ in: "notIn",
1641
+ notIn: "in",
1642
+ contains: "notContains",
1643
+ notContains: "contains",
1644
+ startsWith: "notStartsWith",
1645
+ notStartsWith: "startsWith",
1646
+ endsWith: "notEndsWith",
1647
+ notEndsWith: "endsWith",
1648
+ between: "notBetween",
1649
+ notBetween: "between",
1650
+ null: "notNull",
1651
+ notNull: "null",
1652
+ exists: "notExists",
1653
+ notExists: "exists"
1654
+ }[e.operator];
1655
+ if (!t) throw new p(`Cannot invert operator: ${e.operator}`);
1656
+ return {
1657
+ ...e,
1658
+ operator: t
1659
+ };
1660
+ }
1661
+ //#endregion
1662
+ //#region src/get-repository-sync-status.ts
1663
+ async function Bt(e, t, n, r, i) {
1664
+ let { adapter: a } = await e.getLocalRepositories(), o = a.getRepository(d), s = [
1665
+ {
1666
+ field: "namespace",
1667
+ operator: "=",
1668
+ value: t
1669
+ },
1670
+ {
1671
+ field: "entity",
1672
+ operator: "=",
1673
+ value: n
1674
+ },
1675
+ {
1676
+ field: "branchId",
1677
+ operator: "=",
1678
+ value: r
1679
+ },
1680
+ {
1681
+ field: "remoteId",
1682
+ operator: "=",
1683
+ value: null
1684
+ },
1685
+ {
1686
+ field: "revertChangeId",
1687
+ operator: "=",
1688
+ value: null
1689
+ }
1690
+ ];
1691
+ return i !== null && s.push({
1692
+ field: "id",
1693
+ operator: ">",
1694
+ value: i
1695
+ }), (await o.find({ where: {
1696
+ combinator: "and",
1697
+ rules: s
1698
+ } })).length;
1699
+ }
1700
+ async function Vt(e, t, n) {
1701
+ return (await It(e, t, n)).pendingCount;
1702
+ }
1703
+ async function Ht(e, t, n) {
1704
+ let r = e.config.entities.find((e) => {
1705
+ let r = T(e);
1706
+ return r.namespace === t && r.name === n;
1707
+ });
1708
+ if (!r) throw Error(`Entity not found: ${t}.${n}`);
1709
+ let i = T(r), a = N(i, e.config.sync), o = M(a), s = e.syncManager, c = (await s.getCurrentBranch()).id, { adapter: l } = await s.getLocalRepositories(), u = l.getRepository(g), d = {
1710
+ combinator: "and",
1711
+ rules: [{
1712
+ field: "id",
1713
+ operator: "=",
1714
+ value: `${t}:${n}:${c}`
1715
+ }]
1716
+ }, f = await u.find({
1717
+ where: d,
1718
+ limit: 1
1719
+ }), p = f.length > 0 ? f[0] : null, m = 0, h = 0;
1720
+ return ne(i, e.config.sync) && (m = await Bt(s, t, n, c, p?.lastPushedChangeId ?? null)), te(i, e.config.sync) && (h = await Vt(e, t, n)), {
1721
+ repository: {
1722
+ namespace: t,
1723
+ entity: n
1724
+ },
1725
+ branchId: c,
1726
+ syncType: a,
1727
+ enabled: o.pull || o.push ? P(p) : !1,
1728
+ lastPushedChangeId: p?.lastPushedChangeId ?? null,
1729
+ lastPushedAt: p?.lastPushedAt ?? null,
1730
+ lastPulledAt: p?.lastPulledAt ?? null,
1731
+ lastPullRemoteChangeId: p?.lastPullRemoteChangeId ?? null,
1732
+ pushableCount: m,
1733
+ pullableCount: h
1734
+ };
1735
+ }
1736
+ //#endregion
1737
+ //#region src/get-all-repository-sync-status.ts
1738
+ async function Ut(e, t) {
1739
+ let n = e.config.entities, r = [];
1740
+ for (let t of n) {
1741
+ let n = T(t), i = n.namespace, a = n.name, o = await Ht(e, i, a);
1742
+ r.push(o);
1743
+ }
1744
+ let i = r;
1745
+ return t?.syncType && t.syncType.length > 0 && (i = i.filter((e) => t.syncType.includes(e.syncType))), t?.enabled !== void 0 && (i = i.filter((e) => e.enabled === t.enabled)), t?.hasPendingChanges !== void 0 && (i = t.hasPendingChanges ? i.filter((e) => e.pushableCount > 0 || e.pullableCount > 0) : i.filter((e) => e.pushableCount === 0 && e.pullableCount === 0)), i;
1746
+ }
1747
+ //#endregion
1748
+ //#region src/pull-batch.ts
1749
+ var Wt = 1e3;
1750
+ async function Gt(e, t) {
1751
+ if (t?.fetchAll !== !0) return await Jt(e, t?.limit, t?.conflictResolver);
1752
+ let n = {
1753
+ pulled: 0,
1754
+ compacted: 0,
1755
+ applied: 0,
1756
+ hasMore: !1,
1757
+ conflictsResolved: 0,
1758
+ conflictsDeferred: 0,
1759
+ persistedProgress: !1,
1760
+ historyInvalidated: !1,
1761
+ failures: []
1762
+ }, r = (e) => {
1763
+ n.pulled += e.pulled, n.compacted += e.compacted, n.applied += e.applied, n.conflictsResolved += e.conflictsResolved, n.conflictsDeferred += e.conflictsDeferred, n.hasMore = e.hasMore, n.persistedProgress ||= e.persistedProgress, n.historyInvalidated ||= e.historyInvalidated, n.failures.push(...e.failures);
1764
+ };
1765
+ for (let i = 0; i < Wt; i++) {
1766
+ let i;
1767
+ try {
1768
+ i = await Jt(e, t.limit, t.conflictResolver);
1769
+ } catch (e) {
1770
+ throw qt(e, n);
1771
+ }
1772
+ if (r(i), !i.hasMore || i.pulled === 0) break;
1773
+ }
1774
+ return n;
1775
+ }
1776
+ var Kt = (e) => !e.persistedProgress;
1777
+ function qt(e, t) {
1778
+ let n = e instanceof Error ? e : Error(String(e));
1779
+ return Kt(t) ? n : new m(t, n);
1780
+ }
1781
+ async function Jt(e, t, n) {
1782
+ let r = e.rxdb, i = t ?? 1e3;
1783
+ if (!r.config.sync?.remote?.adapter) throw new p("Remote adapter not configured.");
1784
+ let { adapter: o } = await e.getRemoteRepositories(), { adapter: s } = await e.getLocalRepositories(), c = (await e.getCurrentBranch()).id, l = await L(e, c), u = s.getRepository(g), f = [];
1785
+ for (let e of r.config.entities) {
1786
+ let t = T(e), n = N(t, r.config.sync);
1787
+ if (!M(n).pull || n === "filter") continue;
1788
+ let i = await D(u, {
1789
+ namespace: t.namespace,
1790
+ entity: t.name,
1791
+ branchId: c,
1792
+ syncType: n
1793
+ }, () => r.entityManager.instantiate(g));
1794
+ P(i) && f.push({
1795
+ namespace: t.namespace,
1796
+ entity: t.name,
1797
+ syncId: i.id,
1798
+ repoSync: i,
1799
+ lastPullRemoteChangeId: i.lastPullRemoteChangeId ?? 0,
1800
+ syncType: n
1801
+ });
1802
+ }
1803
+ if (f.length === 0) return {
1804
+ pulled: 0,
1805
+ compacted: 0,
1806
+ applied: 0,
1807
+ hasMore: !1,
1808
+ conflictsResolved: 0,
1809
+ conflictsDeferred: 0,
1810
+ persistedProgress: !1,
1811
+ historyInvalidated: !1,
1812
+ failures: []
1813
+ };
1814
+ let m = Ge(R(r.config.entities.map((e) => T(e)))), h = new Map(f.map((e) => [`${e.namespace}:${e.entity}`, e])), _ = m.map((e) => h.get(`${e.namespace}:${e.entity}`)).filter((e) => e != null), v = i * _.length, y, b = _.map((e) => ({
1815
+ namespace: e.namespace,
1816
+ entity: e.entity,
1817
+ sinceId: e.lastPullRemoteChangeId
1818
+ }));
1819
+ y = o.pullChangesBatch ? await o.pullChangesBatch(b, v, l) : (await Promise.all(_.map((e) => Pe(o, {
1820
+ namespace: e.namespace,
1821
+ entity: e.entity,
1822
+ sinceId: e.lastPullRemoteChangeId,
1823
+ limit: i
1824
+ }, l)))).flat();
1825
+ let x = /* @__PURE__ */ new Map();
1826
+ for (let e of y) {
1827
+ let t = `${e.namespace}:${e.entity}`;
1828
+ x.has(t) || x.set(t, []), x.get(t).push(e);
1829
+ }
1830
+ let C = 0, w = 0, E = 0, O = 0, k = !1, A = r.context.clientId, j = n === void 0 ? new a() : n;
1831
+ return await s.transaction(async (e) => {
1832
+ let t = e.getRepository(d), n = e.getRepository(g);
1833
+ for (let a of _) {
1834
+ let o = (x.get(`${a.namespace}:${a.entity}`) ?? []).filter((e) => e.id > a.lastPullRemoteChangeId);
1835
+ if (o.length === 0) continue;
1836
+ C += o.length;
1837
+ let s = [], l = [];
1838
+ for (let e of o) e.clientId != null && e.clientId === A ? s.push(e) : l.push(e);
1839
+ let u = s.filter((e) => e.localId != null);
1840
+ if (u.length > 0) {
1841
+ let e = u.map((e) => e.localId), n = await t.find({ where: {
1842
+ combinator: "and",
1843
+ rules: [{
1844
+ field: "id",
1845
+ operator: "in",
1846
+ value: e
1847
+ }, {
1848
+ field: "remoteId",
1849
+ operator: "=",
1850
+ value: null
1851
+ }]
1852
+ } });
1853
+ if (n.length > 0) {
1854
+ let e = new Map(u.map((e) => [e.localId, e.id]));
1855
+ for (let r of n) {
1856
+ let n = e.get(r.id);
1857
+ n != null && await t.update(r, { remoteId: n });
1858
+ }
1859
+ }
1860
+ }
1861
+ if (l.length > 0) {
1862
+ let n = z();
1863
+ S(l, n);
1864
+ let i = B(n);
1865
+ w += l.length - i;
1866
+ let o = Ie(l, n), { applyActions: s, conflictsResolved: u } = await Be(o, await Le(t, a.namespace, a.entity, c, a.repoSync.lastPushedChangeId ?? null, [...new Set(o.map((e) => e.entityId))]), {
1867
+ changeRepo: t,
1868
+ conflictResolver: j,
1869
+ dispatchEvent: (e) => r.dispatchEvent(e),
1870
+ repoLabel: `${a.namespace}:${a.entity}`,
1871
+ localClientId: r.context.clientId
1872
+ });
1873
+ O += u;
1874
+ let d = B(s);
1875
+ d > 0 && (await e.mergeChanges(s, void 0, !0), E += d);
1876
+ }
1877
+ let d = o.reduce((e, t) => t.id > e ? t.id : e, o[0].id);
1878
+ a.repoSync = await n.update(a.repoSync, {
1879
+ lastPullRemoteChangeId: d,
1880
+ lastPulledAt: /* @__PURE__ */ new Date(),
1881
+ updatedAt: /* @__PURE__ */ new Date()
1882
+ }), o.length >= i && (k = !0);
1883
+ }
1884
+ }), {
1885
+ pulled: C,
1886
+ compacted: w,
1887
+ applied: E,
1888
+ hasMore: k,
1889
+ conflictsResolved: O,
1890
+ conflictsDeferred: 0,
1891
+ persistedProgress: C > 0,
1892
+ historyInvalidated: E > 0,
1893
+ failures: []
1894
+ };
1895
+ }
1896
+ //#endregion
1897
+ //#region src/pull.ts
1898
+ async function Yt(e, t) {
1899
+ let n = e.rxdb;
1900
+ if (!n.config.sync?.remote?.adapter) throw new p("Remote adapter not configured.");
1901
+ n.dispatchEvent(new v("pull"));
1902
+ try {
1903
+ let r;
1904
+ return t?.repositoryFilter?.length ? r = await Qt(e, t) : (r = await Gt(e, {
1905
+ limit: t?.limit,
1906
+ fetchAll: t?.fetchAll,
1907
+ conflictResolver: t?.conflictResolver
1908
+ }), await Xt(e, t, r)), n.dispatchEvent(new y("pull", r)), r;
1909
+ } catch (e) {
1910
+ throw n.dispatchEvent(new b("pull", e)), e;
1911
+ }
1912
+ }
1913
+ async function Xt(e, t, n) {
1914
+ let r = e.rxdb;
1915
+ for (let i of r.config.entities) {
1916
+ let a = T(i), o = N(a, r.config.sync);
1917
+ if (o !== "filter" || !M(o).pull) continue;
1918
+ let s = await C(e.rxdb, a.namespace, a.name);
1919
+ if (!P(s)) continue;
1920
+ let c;
1921
+ try {
1922
+ c = await Ze(e, a.namespace, a.name, {
1923
+ limit: t?.limit,
1924
+ fetchAll: t?.fetchAll,
1925
+ conflictResolver: t?.conflictResolver,
1926
+ includeRelated: !1
1927
+ });
1928
+ } catch (e) {
1929
+ let t = e instanceof Error ? e : Error(String(e));
1930
+ t instanceof m && Zt(n, t.result), n.failures.push({
1931
+ repository: {
1932
+ namespace: a.namespace,
1933
+ entity: a.name
1934
+ },
1935
+ error: t instanceof m ? t.cause : t
1936
+ });
1937
+ continue;
1938
+ }
1939
+ Zt(n, c), n.failures.push(...c.failures);
1940
+ }
1941
+ }
1942
+ function Zt(e, t) {
1943
+ e.pulled += t.pulled, e.compacted += t.compacted, e.applied += t.applied, e.conflictsResolved += t.conflictsResolved, e.conflictsDeferred += t.conflictsDeferred, e.hasMore ||= t.hasMore, e.persistedProgress ||= t.persistedProgress, e.historyInvalidated ||= t.historyInvalidated;
1944
+ }
1945
+ async function Qt(e, t) {
1946
+ let n = {
1947
+ operation: "pull",
1948
+ repositories: t.repositoryFilter?.map((e) => typeof e == "string" ? {
1949
+ namespace: "public",
1950
+ entity: e
1951
+ } : e),
1952
+ pull: {
1953
+ limit: t.limit,
1954
+ fetchAll: t.fetchAll,
1955
+ conflictResolver: t.conflictResolver
1956
+ }
1957
+ }, r = await e.bulkSync(n), i = {
1958
+ pulled: 0,
1959
+ compacted: 0,
1960
+ applied: 0,
1961
+ hasMore: !1,
1962
+ conflictsResolved: 0,
1963
+ conflictsDeferred: 0,
1964
+ persistedProgress: !1,
1965
+ historyInvalidated: !1,
1966
+ failures: []
1967
+ };
1968
+ for (let e of r.results) {
1969
+ let t = e.result?.pullResult;
1970
+ if (t && (i.pulled += t.pulled, i.compacted += t.compacted, i.applied += t.applied, i.conflictsResolved += t.conflictsResolved, i.conflictsDeferred += t.conflictsDeferred, i.hasMore ||= t.hasMore, i.persistedProgress ||= t.persistedProgress, i.historyInvalidated ||= t.historyInvalidated), e.success) continue;
1971
+ let n = e.error ?? new p(`Repository pull failed: ${e.repository.namespace}:${e.repository.entity}`);
1972
+ i.failures.push({
1973
+ repository: e.repository,
1974
+ error: n instanceof m ? n.cause : n
1975
+ });
1976
+ }
1977
+ let [a] = i.failures;
1978
+ if (a) throw !i.persistedProgress && i.failures.length === 1 ? a.error : new m(i, a.error);
1979
+ return i;
1980
+ }
1981
+ //#endregion
1982
+ //#region src/branch-change-id.ts
1983
+ var $t = async (e, t, n) => (await e.find({
1984
+ where: {
1985
+ combinator: "and",
1986
+ rules: [{
1987
+ field: t,
1988
+ operator: "=",
1989
+ value: n
1990
+ }]
1991
+ },
1992
+ limit: 1
1993
+ }))[0], en = async (e, t) => {
1994
+ let n = await $t(e, "id", t);
1995
+ if (!n) throw new p(`分支分叉点翻译失败:本地不存在 RxDBChange id=${t},分支表与变更表已不一致`);
1996
+ return n.remoteId ?? null;
1997
+ }, tn = async (e, t) => (await $t(e, "remoteId", t))?.id ?? null;
1998
+ //#endregion
1999
+ //#region src/push-branch.ts
2000
+ async function nn(e) {
2001
+ let t = await e.getCurrentBranch();
2002
+ if (!t || t.id === "main") return {
2003
+ synced: 0,
2004
+ skipped: t ? ["main"] : [],
2005
+ forkPointPending: !1
2006
+ };
2007
+ let { adapter: n } = await e.getRemoteRepositories();
2008
+ if (!n.pushBranches) return {
2009
+ synced: 0,
2010
+ skipped: [],
2011
+ forkPointPending: !1
2012
+ };
2013
+ let { branchRepository: r, changeRepository: i } = await e.getLocalRepositories(), a = t.fromChangeId ?? null, o = a === null ? null : await en(i, a), s = a !== null && o === null, c = {
2014
+ id: t.id,
2015
+ fromChangeId: o,
2016
+ local: t.local,
2017
+ remote: !0,
2018
+ parentId: t.parentId
2019
+ }, l = await n.pushBranches([c]);
2020
+ return l.synced > 0 && !t.remote && await r.update(t, {
2021
+ remote: !0,
2022
+ updatedAt: /* @__PURE__ */ new Date()
2023
+ }), {
2024
+ ...l,
2025
+ forkPointPending: s
2026
+ };
2027
+ }
2028
+ //#endregion
2029
+ //#region src/push.ts
2030
+ async function rn(e, t) {
2031
+ let n = e.rxdb;
2032
+ if (!n.config.sync?.remote?.adapter) throw new p("Remote adapter not configured.");
2033
+ n.dispatchEvent(new v("push"));
2034
+ try {
2035
+ let r = await nn(e), i = {
2036
+ operation: "push",
2037
+ repositories: t?.repositoryFilter?.map((e) => typeof e == "string" ? {
2038
+ namespace: "public",
2039
+ entity: e
2040
+ } : e),
2041
+ ...t?.batchSize === void 0 ? {} : { push: { batchSize: t.batchSize } }
2042
+ }, a = await e.bulkSync(i), o = {
2043
+ pushed: 0,
2044
+ failed: 0,
2045
+ compacted: 0,
2046
+ originalCount: 0,
2047
+ failures: []
2048
+ };
2049
+ for (let e of a.results) {
2050
+ let t = e.result?.pushResult;
2051
+ if (t && (o.pushed += t.pushed, o.failed += t.failed, o.compacted += t.compacted, o.originalCount += t.originalCount), e.success) continue;
2052
+ let n = e.error ?? new p(`Repository push failed: ${e.repository.namespace}:${e.repository.entity}`);
2053
+ o.failures.push({
2054
+ repository: e.repository,
2055
+ error: n instanceof m ? n.cause : n
2056
+ });
2057
+ }
2058
+ return r.forkPointPending && o.pushed > 0 && await nn(e), n.dispatchEvent(new y("push", o)), o;
2059
+ } catch (e) {
2060
+ throw n.dispatchEvent(new b("push", e)), e;
2061
+ }
2062
+ }
2063
+ //#endregion
2064
+ //#region src/sync-branches.ts
2065
+ function an(e, t) {
2066
+ let n = new Set(t), r = new Set(e.map((e) => e.id)), i = [], a = e;
2067
+ for (; a.length > 0;) {
2068
+ let e = a.filter((e) => {
2069
+ let t = e.parentId ?? null;
2070
+ return t === null || n.has(t);
2071
+ });
2072
+ if (e.length === 0) break;
2073
+ for (let t of e) i.push(t), n.add(t.id);
2074
+ a = a.filter((e) => !n.has(e.id));
2075
+ }
2076
+ if (a.length > 0) {
2077
+ let e = a.map((e) => {
2078
+ let t = e.parentId ?? null, n = t !== null && r.has(t) ? "cycle" : "missing parent";
2079
+ return `'${e.id}' -> '${String(t)}' (${n})`;
2080
+ }).join(", ");
2081
+ throw new p(`syncBranches: 远端分支拓扑无法解析,整批放弃:${e}`);
2082
+ }
2083
+ return i;
2084
+ }
2085
+ async function on(e) {
2086
+ let { adapter: t } = await e.getRemoteRepositories();
2087
+ if (!t.pullBranches) return {
2088
+ created: 0,
2089
+ updated: 0,
2090
+ total: 0,
2091
+ skipped: []
2092
+ };
2093
+ let n = await t.pullBranches();
2094
+ if (n.length === 0) return {
2095
+ created: 0,
2096
+ updated: 0,
2097
+ total: 0,
2098
+ skipped: []
2099
+ };
2100
+ let { adapter: r } = await e.getLocalRepositories();
2101
+ return r.transaction(async (e) => {
2102
+ let t = e.getRepository(u), r = e.getRepository(d), i = await t.find({ where: {
2103
+ combinator: "and",
2104
+ rules: []
2105
+ } }), a = new Map(i.map((e) => [e.id, e])), o = 0, s = 0, c = [];
2106
+ for (let e of an(n, new Set(a.keys()))) {
2107
+ let n = a.get(e.id);
2108
+ if (n) {
2109
+ n.remote || (await t.update(n, {
2110
+ remote: !0,
2111
+ updatedAt: /* @__PURE__ */ new Date()
2112
+ }), s++);
2113
+ continue;
2114
+ }
2115
+ let i = e.fromChangeId ?? null, l = i === null ? null : await tn(r, i);
2116
+ if (i !== null && l === null) {
2117
+ c.push(e.id);
2118
+ continue;
2119
+ }
2120
+ await t.create({
2121
+ id: e.id,
2122
+ activated: !1,
2123
+ local: !1,
2124
+ remote: !0,
2125
+ fromChangeId: l,
2126
+ parentId: e.parentId ?? null
2127
+ }), o++;
2128
+ }
2129
+ return {
2130
+ created: o,
2131
+ updated: s,
2132
+ total: n.length,
2133
+ skipped: c
2134
+ };
2135
+ });
2136
+ }
2137
+ //#endregion
2138
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js
2139
+ function H(e) {
2140
+ return typeof e == "function";
2141
+ }
2142
+ //#endregion
2143
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/lift.js
2144
+ function sn(e) {
2145
+ return H(e?.lift);
2146
+ }
2147
+ function U(e) {
2148
+ return function(t) {
2149
+ if (sn(t)) return t.lift(function(t) {
2150
+ try {
2151
+ return e(t, this);
2152
+ } catch (e) {
2153
+ this.error(e);
2154
+ }
2155
+ });
2156
+ throw TypeError("Unable to lift unknown Observable type");
2157
+ };
2158
+ }
2159
+ //#endregion
2160
+ //#region ../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs
2161
+ var cn = function(e, t) {
2162
+ return cn = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(e, t) {
2163
+ e.__proto__ = t;
2164
+ } || function(e, t) {
2165
+ for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);
2166
+ }, cn(e, t);
2167
+ };
2168
+ function ln(e, t) {
2169
+ if (typeof t != "function" && t !== null) throw TypeError("Class extends value " + String(t) + " is not a constructor or null");
2170
+ cn(e, t);
2171
+ function n() {
2172
+ this.constructor = e;
2173
+ }
2174
+ e.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());
2175
+ }
2176
+ function un(e, t, n, r) {
2177
+ function i(e) {
2178
+ return e instanceof n ? e : new n(function(t) {
2179
+ t(e);
2180
+ });
2181
+ }
2182
+ return new (n ||= Promise)(function(n, a) {
2183
+ function o(e) {
2184
+ try {
2185
+ c(r.next(e));
2186
+ } catch (e) {
2187
+ a(e);
2188
+ }
2189
+ }
2190
+ function s(e) {
2191
+ try {
2192
+ c(r.throw(e));
2193
+ } catch (e) {
2194
+ a(e);
2195
+ }
2196
+ }
2197
+ function c(e) {
2198
+ e.done ? n(e.value) : i(e.value).then(o, s);
2199
+ }
2200
+ c((r = r.apply(e, t || [])).next());
2201
+ });
2202
+ }
2203
+ function dn(e, t) {
2204
+ var n = {
2205
+ label: 0,
2206
+ sent: function() {
2207
+ if (a[0] & 1) throw a[1];
2208
+ return a[1];
2209
+ },
2210
+ trys: [],
2211
+ ops: []
2212
+ }, r, i, a, o = Object.create((typeof Iterator == "function" ? Iterator : Object).prototype);
2213
+ return o.next = s(0), o.throw = s(1), o.return = s(2), typeof Symbol == "function" && (o[Symbol.iterator] = function() {
2214
+ return this;
2215
+ }), o;
2216
+ function s(e) {
2217
+ return function(t) {
2218
+ return c([e, t]);
2219
+ };
2220
+ }
2221
+ function c(s) {
2222
+ if (r) throw TypeError("Generator is already executing.");
2223
+ for (; o && (o = 0, s[0] && (n = 0)), n;) try {
2224
+ if (r = 1, i && (a = s[0] & 2 ? i.return : s[0] ? i.throw || ((a = i.return) && a.call(i), 0) : i.next) && !(a = a.call(i, s[1])).done) return a;
2225
+ switch (i = 0, a && (s = [s[0] & 2, a.value]), s[0]) {
2226
+ case 0:
2227
+ case 1:
2228
+ a = s;
2229
+ break;
2230
+ case 4: return n.label++, {
2231
+ value: s[1],
2232
+ done: !1
2233
+ };
2234
+ case 5:
2235
+ n.label++, i = s[1], s = [0];
2236
+ continue;
2237
+ case 7:
2238
+ s = n.ops.pop(), n.trys.pop();
2239
+ continue;
2240
+ default:
2241
+ if (a = n.trys, !(a = a.length > 0 && a[a.length - 1]) && (s[0] === 6 || s[0] === 2)) {
2242
+ n = 0;
2243
+ continue;
2244
+ }
2245
+ if (s[0] === 3 && (!a || s[1] > a[0] && s[1] < a[3])) {
2246
+ n.label = s[1];
2247
+ break;
2248
+ }
2249
+ if (s[0] === 6 && n.label < a[1]) {
2250
+ n.label = a[1], a = s;
2251
+ break;
2252
+ }
2253
+ if (a && n.label < a[2]) {
2254
+ n.label = a[2], n.ops.push(s);
2255
+ break;
2256
+ }
2257
+ a[2] && n.ops.pop(), n.trys.pop();
2258
+ continue;
2259
+ }
2260
+ s = t.call(e, n);
2261
+ } catch (e) {
2262
+ s = [6, e], i = 0;
2263
+ } finally {
2264
+ r = a = 0;
2265
+ }
2266
+ if (s[0] & 5) throw s[1];
2267
+ return {
2268
+ value: s[0] ? s[1] : void 0,
2269
+ done: !0
2270
+ };
2271
+ }
2272
+ }
2273
+ function W(e) {
2274
+ var t = typeof Symbol == "function" && Symbol.iterator, n = t && e[t], r = 0;
2275
+ if (n) return n.call(e);
2276
+ if (e && typeof e.length == "number") return { next: function() {
2277
+ return e && r >= e.length && (e = void 0), {
2278
+ value: e && e[r++],
2279
+ done: !e
2280
+ };
2281
+ } };
2282
+ throw TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
2283
+ }
2284
+ function G(e, t) {
2285
+ var n = typeof Symbol == "function" && e[Symbol.iterator];
2286
+ if (!n) return e;
2287
+ var r = n.call(e), i, a = [], o;
2288
+ try {
2289
+ for (; (t === void 0 || t-- > 0) && !(i = r.next()).done;) a.push(i.value);
2290
+ } catch (e) {
2291
+ o = { error: e };
2292
+ } finally {
2293
+ try {
2294
+ i && !i.done && (n = r.return) && n.call(r);
2295
+ } finally {
2296
+ if (o) throw o.error;
2297
+ }
2298
+ }
2299
+ return a;
2300
+ }
2301
+ function K(e, t, n) {
2302
+ if (n || arguments.length === 2) for (var r = 0, i = t.length, a; r < i; r++) (a || !(r in t)) && (a ||= Array.prototype.slice.call(t, 0, r), a[r] = t[r]);
2303
+ return e.concat(a || Array.prototype.slice.call(t));
2304
+ }
2305
+ function q(e) {
2306
+ return this instanceof q ? (this.v = e, this) : new q(e);
2307
+ }
2308
+ function fn(e, t, n) {
2309
+ if (!Symbol.asyncIterator) throw TypeError("Symbol.asyncIterator is not defined.");
2310
+ var r = n.apply(e, t || []), i, a = [];
2311
+ return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), s("next"), s("throw"), s("return", o), i[Symbol.asyncIterator] = function() {
2312
+ return this;
2313
+ }, i;
2314
+ function o(e) {
2315
+ return function(t) {
2316
+ return Promise.resolve(t).then(e, d);
2317
+ };
2318
+ }
2319
+ function s(e, t) {
2320
+ r[e] && (i[e] = function(t) {
2321
+ return new Promise(function(n, r) {
2322
+ a.push([
2323
+ e,
2324
+ t,
2325
+ n,
2326
+ r
2327
+ ]) > 1 || c(e, t);
2328
+ });
2329
+ }, t && (i[e] = t(i[e])));
2330
+ }
2331
+ function c(e, t) {
2332
+ try {
2333
+ l(r[e](t));
2334
+ } catch (e) {
2335
+ f(a[0][3], e);
2336
+ }
2337
+ }
2338
+ function l(e) {
2339
+ e.value instanceof q ? Promise.resolve(e.value.v).then(u, d) : f(a[0][2], e);
2340
+ }
2341
+ function u(e) {
2342
+ c("next", e);
2343
+ }
2344
+ function d(e) {
2345
+ c("throw", e);
2346
+ }
2347
+ function f(e, t) {
2348
+ e(t), a.shift(), a.length && c(a[0][0], a[0][1]);
2349
+ }
2350
+ }
2351
+ function pn(e) {
2352
+ if (!Symbol.asyncIterator) throw TypeError("Symbol.asyncIterator is not defined.");
2353
+ var t = e[Symbol.asyncIterator], n;
2354
+ return t ? t.call(e) : (e = typeof W == "function" ? W(e) : e[Symbol.iterator](), n = {}, r("next"), r("throw"), r("return"), n[Symbol.asyncIterator] = function() {
2355
+ return this;
2356
+ }, n);
2357
+ function r(t) {
2358
+ n[t] = e[t] && function(n) {
2359
+ return new Promise(function(r, a) {
2360
+ n = e[t](n), i(r, a, n.done, n.value);
2361
+ });
2362
+ };
2363
+ }
2364
+ function i(e, t, n, r) {
2365
+ Promise.resolve(r).then(function(t) {
2366
+ e({
2367
+ value: t,
2368
+ done: n
2369
+ });
2370
+ }, t);
2371
+ }
2372
+ }
2373
+ //#endregion
2374
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js
2375
+ var mn = (function(e) {
2376
+ return e && typeof e.length == "number" && typeof e != "function";
2377
+ });
2378
+ //#endregion
2379
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isPromise.js
2380
+ function hn(e) {
2381
+ return H(e?.then);
2382
+ }
2383
+ //#endregion
2384
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js
2385
+ function gn(e) {
2386
+ var t = e(function(e) {
2387
+ Error.call(e), e.stack = (/* @__PURE__ */ Error()).stack;
2388
+ });
2389
+ return t.prototype = Object.create(Error.prototype), t.prototype.constructor = t, t;
2390
+ }
2391
+ //#endregion
2392
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js
2393
+ var _n = gn(function(e) {
2394
+ return function(t) {
2395
+ e(this), this.message = t ? t.length + " errors occurred during unsubscription:\n" + t.map(function(e, t) {
2396
+ return t + 1 + ") " + e.toString();
2397
+ }).join("\n ") : "", this.name = "UnsubscriptionError", this.errors = t;
2398
+ };
2399
+ });
2400
+ //#endregion
2401
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js
2402
+ function vn(e, t) {
2403
+ if (e) {
2404
+ var n = e.indexOf(t);
2405
+ 0 <= n && e.splice(n, 1);
2406
+ }
2407
+ }
2408
+ //#endregion
2409
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js
2410
+ var yn = function() {
2411
+ function e(e) {
2412
+ this.initialTeardown = e, this.closed = !1, this._parentage = null, this._finalizers = null;
2413
+ }
2414
+ return e.prototype.unsubscribe = function() {
2415
+ var e, t, n, r, i;
2416
+ if (!this.closed) {
2417
+ this.closed = !0;
2418
+ var a = this._parentage;
2419
+ if (a) {
2420
+ if (this._parentage = null, Array.isArray(a)) try {
2421
+ for (var o = W(a), s = o.next(); !s.done; s = o.next()) s.value.remove(this);
2422
+ } catch (t) {
2423
+ e = { error: t };
2424
+ } finally {
2425
+ try {
2426
+ s && !s.done && (t = o.return) && t.call(o);
2427
+ } finally {
2428
+ if (e) throw e.error;
2429
+ }
2430
+ }
2431
+ else a.remove(this);
2432
+ }
2433
+ var c = this.initialTeardown;
2434
+ if (H(c)) try {
2435
+ c();
2436
+ } catch (e) {
2437
+ i = e instanceof _n ? e.errors : [e];
2438
+ }
2439
+ var l = this._finalizers;
2440
+ if (l) {
2441
+ this._finalizers = null;
2442
+ try {
2443
+ for (var u = W(l), d = u.next(); !d.done; d = u.next()) {
2444
+ var f = d.value;
2445
+ try {
2446
+ xn(f);
2447
+ } catch (e) {
2448
+ i ??= [], e instanceof _n ? i = K(K([], G(i)), G(e.errors)) : i.push(e);
2449
+ }
2450
+ }
2451
+ } catch (e) {
2452
+ n = { error: e };
2453
+ } finally {
2454
+ try {
2455
+ d && !d.done && (r = u.return) && r.call(u);
2456
+ } finally {
2457
+ if (n) throw n.error;
2458
+ }
2459
+ }
2460
+ }
2461
+ if (i) throw new _n(i);
2462
+ }
2463
+ }, e.prototype.add = function(t) {
2464
+ if (t && t !== this) {
2465
+ if (this.closed) xn(t);
2466
+ else {
2467
+ if (t instanceof e) {
2468
+ if (t.closed || t._hasParent(this)) return;
2469
+ t._addParent(this);
2470
+ }
2471
+ (this._finalizers = this._finalizers ?? []).push(t);
2472
+ }
2473
+ }
2474
+ }, e.prototype._hasParent = function(e) {
2475
+ var t = this._parentage;
2476
+ return t === e || Array.isArray(t) && t.includes(e);
2477
+ }, e.prototype._addParent = function(e) {
2478
+ var t = this._parentage;
2479
+ this._parentage = Array.isArray(t) ? (t.push(e), t) : t ? [t, e] : e;
2480
+ }, e.prototype._removeParent = function(e) {
2481
+ var t = this._parentage;
2482
+ t === e ? this._parentage = null : Array.isArray(t) && vn(t, e);
2483
+ }, e.prototype.remove = function(t) {
2484
+ var n = this._finalizers;
2485
+ n && vn(n, t), t instanceof e && t._removeParent(this);
2486
+ }, e.EMPTY = (function() {
2487
+ var t = new e();
2488
+ return t.closed = !0, t;
2489
+ })(), e;
2490
+ }();
2491
+ yn.EMPTY;
2492
+ function bn(e) {
2493
+ return e instanceof yn || e && "closed" in e && H(e.remove) && H(e.add) && H(e.unsubscribe);
2494
+ }
2495
+ function xn(e) {
2496
+ H(e) ? e() : e.unsubscribe();
2497
+ }
2498
+ //#endregion
2499
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js
2500
+ var J = {
2501
+ onUnhandledError: null,
2502
+ onStoppedNotification: null,
2503
+ Promise: void 0,
2504
+ useDeprecatedSynchronousErrorHandling: !1,
2505
+ useDeprecatedNextContext: !1
2506
+ }, Y = {
2507
+ setTimeout: function(e, t) {
2508
+ var n = [...arguments].slice(2), r = Y.delegate;
2509
+ return r?.setTimeout ? r.setTimeout.apply(r, K([e, t], G(n))) : setTimeout.apply(void 0, K([e, t], G(n)));
2510
+ },
2511
+ clearTimeout: function(e) {
2512
+ return (Y.delegate?.clearTimeout || clearTimeout)(e);
2513
+ },
2514
+ delegate: void 0
2515
+ };
2516
+ //#endregion
2517
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js
2518
+ function Sn(e) {
2519
+ Y.setTimeout(function() {
2520
+ var t = J.onUnhandledError;
2521
+ if (t) t(e);
2522
+ else throw e;
2523
+ });
2524
+ }
2525
+ //#endregion
2526
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js
2527
+ function Cn() {}
2528
+ //#endregion
2529
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js
2530
+ var wn = (function() {
2531
+ return Dn("C", void 0, void 0);
2532
+ })();
2533
+ function Tn(e) {
2534
+ return Dn("E", void 0, e);
2535
+ }
2536
+ function En(e) {
2537
+ return Dn("N", e, void 0);
2538
+ }
2539
+ function Dn(e, t, n) {
2540
+ return {
2541
+ kind: e,
2542
+ value: t,
2543
+ error: n
2544
+ };
2545
+ }
2546
+ //#endregion
2547
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js
2548
+ var X = null;
2549
+ function On(e) {
2550
+ if (J.useDeprecatedSynchronousErrorHandling) {
2551
+ var t = !X;
2552
+ if (t && (X = {
2553
+ errorThrown: !1,
2554
+ error: null
2555
+ }), e(), t) {
2556
+ var n = X, r = n.errorThrown, i = n.error;
2557
+ if (X = null, r) throw i;
2558
+ }
2559
+ } else e();
2560
+ }
2561
+ function kn(e) {
2562
+ J.useDeprecatedSynchronousErrorHandling && X && (X.errorThrown = !0, X.error = e);
2563
+ }
2564
+ //#endregion
2565
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js
2566
+ var An = function(e) {
2567
+ ln(t, e);
2568
+ function t(t) {
2569
+ var n = e.call(this) || this;
2570
+ return n.isStopped = !1, t ? (n.destination = t, bn(t) && t.add(n)) : n.destination = Ln, n;
2571
+ }
2572
+ return t.create = function(e, t, n) {
2573
+ return new Pn(e, t, n);
2574
+ }, t.prototype.next = function(e) {
2575
+ this.isStopped ? In(En(e), this) : this._next(e);
2576
+ }, t.prototype.error = function(e) {
2577
+ this.isStopped ? In(Tn(e), this) : (this.isStopped = !0, this._error(e));
2578
+ }, t.prototype.complete = function() {
2579
+ this.isStopped ? In(wn, this) : (this.isStopped = !0, this._complete());
2580
+ }, t.prototype.unsubscribe = function() {
2581
+ this.closed || (this.isStopped = !0, e.prototype.unsubscribe.call(this), this.destination = null);
2582
+ }, t.prototype._next = function(e) {
2583
+ this.destination.next(e);
2584
+ }, t.prototype._error = function(e) {
2585
+ try {
2586
+ this.destination.error(e);
2587
+ } finally {
2588
+ this.unsubscribe();
2589
+ }
2590
+ }, t.prototype._complete = function() {
2591
+ try {
2592
+ this.destination.complete();
2593
+ } finally {
2594
+ this.unsubscribe();
2595
+ }
2596
+ }, t;
2597
+ }(yn), jn = Function.prototype.bind;
2598
+ function Mn(e, t) {
2599
+ return jn.call(e, t);
2600
+ }
2601
+ var Nn = function() {
2602
+ function e(e) {
2603
+ this.partialObserver = e;
2604
+ }
2605
+ return e.prototype.next = function(e) {
2606
+ var t = this.partialObserver;
2607
+ if (t.next) try {
2608
+ t.next(e);
2609
+ } catch (e) {
2610
+ Z(e);
2611
+ }
2612
+ }, e.prototype.error = function(e) {
2613
+ var t = this.partialObserver;
2614
+ if (t.error) try {
2615
+ t.error(e);
2616
+ } catch (e) {
2617
+ Z(e);
2618
+ }
2619
+ else Z(e);
2620
+ }, e.prototype.complete = function() {
2621
+ var e = this.partialObserver;
2622
+ if (e.complete) try {
2623
+ e.complete();
2624
+ } catch (e) {
2625
+ Z(e);
2626
+ }
2627
+ }, e;
2628
+ }(), Pn = function(e) {
2629
+ ln(t, e);
2630
+ function t(t, n, r) {
2631
+ var i = e.call(this) || this, a;
2632
+ if (H(t) || !t) a = {
2633
+ next: t ?? void 0,
2634
+ error: n ?? void 0,
2635
+ complete: r ?? void 0
2636
+ };
2637
+ else {
2638
+ var o;
2639
+ i && J.useDeprecatedNextContext ? (o = Object.create(t), o.unsubscribe = function() {
2640
+ return i.unsubscribe();
2641
+ }, a = {
2642
+ next: t.next && Mn(t.next, o),
2643
+ error: t.error && Mn(t.error, o),
2644
+ complete: t.complete && Mn(t.complete, o)
2645
+ }) : a = t;
2646
+ }
2647
+ return i.destination = new Nn(a), i;
2648
+ }
2649
+ return t;
2650
+ }(An);
2651
+ function Z(e) {
2652
+ J.useDeprecatedSynchronousErrorHandling ? kn(e) : Sn(e);
2653
+ }
2654
+ function Fn(e) {
2655
+ throw e;
2656
+ }
2657
+ function In(e, t) {
2658
+ var n = J.onStoppedNotification;
2659
+ n && Y.setTimeout(function() {
2660
+ return n(e, t);
2661
+ });
2662
+ }
2663
+ var Ln = {
2664
+ closed: !0,
2665
+ next: Cn,
2666
+ error: Fn,
2667
+ complete: Cn
2668
+ }, Rn = (function() {
2669
+ return typeof Symbol == "function" && Symbol.observable || "@@observable";
2670
+ })();
2671
+ //#endregion
2672
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js
2673
+ function zn(e) {
2674
+ return e;
2675
+ }
2676
+ //#endregion
2677
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js
2678
+ function Bn(e) {
2679
+ return e.length === 0 ? zn : e.length === 1 ? e[0] : function(t) {
2680
+ return e.reduce(function(e, t) {
2681
+ return t(e);
2682
+ }, t);
2683
+ };
2684
+ }
2685
+ //#endregion
2686
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js
2687
+ var Q = function() {
2688
+ function e(e) {
2689
+ e && (this._subscribe = e);
2690
+ }
2691
+ return e.prototype.lift = function(t) {
2692
+ var n = new e();
2693
+ return n.source = this, n.operator = t, n;
2694
+ }, e.prototype.subscribe = function(e, t, n) {
2695
+ var r = this, i = Un(e) ? e : new Pn(e, t, n);
2696
+ return On(function() {
2697
+ var e = r, t = e.operator, n = e.source;
2698
+ i.add(t ? t.call(i, n) : n ? r._subscribe(i) : r._trySubscribe(i));
2699
+ }), i;
2700
+ }, e.prototype._trySubscribe = function(e) {
2701
+ try {
2702
+ return this._subscribe(e);
2703
+ } catch (t) {
2704
+ e.error(t);
2705
+ }
2706
+ }, e.prototype.forEach = function(e, t) {
2707
+ var n = this;
2708
+ return t = Vn(t), new t(function(t, r) {
2709
+ var i = new Pn({
2710
+ next: function(t) {
2711
+ try {
2712
+ e(t);
2713
+ } catch (e) {
2714
+ r(e), i.unsubscribe();
2715
+ }
2716
+ },
2717
+ error: r,
2718
+ complete: t
2719
+ });
2720
+ n.subscribe(i);
2721
+ });
2722
+ }, e.prototype._subscribe = function(e) {
2723
+ return this.source?.subscribe(e);
2724
+ }, e.prototype[Rn] = function() {
2725
+ return this;
2726
+ }, e.prototype.pipe = function() {
2727
+ return Bn([...arguments])(this);
2728
+ }, e.prototype.toPromise = function(e) {
2729
+ var t = this;
2730
+ return e = Vn(e), new e(function(e, n) {
2731
+ var r;
2732
+ t.subscribe(function(e) {
2733
+ return r = e;
2734
+ }, function(e) {
2735
+ return n(e);
2736
+ }, function() {
2737
+ return e(r);
2738
+ });
2739
+ });
2740
+ }, e.create = function(t) {
2741
+ return new e(t);
2742
+ }, e;
2743
+ }();
2744
+ function Vn(e) {
2745
+ return e ?? J.Promise ?? Promise;
2746
+ }
2747
+ function Hn(e) {
2748
+ return e && H(e.next) && H(e.error) && H(e.complete);
2749
+ }
2750
+ function Un(e) {
2751
+ return e && e instanceof An || Hn(e) && bn(e);
2752
+ }
2753
+ //#endregion
2754
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js
2755
+ function Wn(e) {
2756
+ return H(e[Rn]);
2757
+ }
2758
+ //#endregion
2759
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js
2760
+ function Gn(e) {
2761
+ return Symbol.asyncIterator && H(e?.[Symbol.asyncIterator]);
2762
+ }
2763
+ //#endregion
2764
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js
2765
+ function Kn(e) {
2766
+ return /* @__PURE__ */ TypeError("You provided " + (typeof e == "object" && e ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
2767
+ }
2768
+ //#endregion
2769
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js
2770
+ function qn() {
2771
+ return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
2772
+ }
2773
+ var Jn = qn();
2774
+ //#endregion
2775
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isIterable.js
2776
+ function Yn(e) {
2777
+ return H(e?.[Jn]);
2778
+ }
2779
+ //#endregion
2780
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js
2781
+ function Xn(e) {
2782
+ return fn(this, arguments, function() {
2783
+ var t, n, r, i;
2784
+ return dn(this, function(a) {
2785
+ switch (a.label) {
2786
+ case 0: t = e.getReader(), a.label = 1;
2787
+ case 1: a.trys.push([
2788
+ 1,
2789
+ ,
2790
+ 9,
2791
+ 10
2792
+ ]), a.label = 2;
2793
+ case 2: return [4, q(t.read())];
2794
+ case 3: return n = a.sent(), r = n.value, i = n.done, i ? [4, q(void 0)] : [3, 5];
2795
+ case 4: return [2, a.sent()];
2796
+ case 5: return [4, q(r)];
2797
+ case 6: return [4, a.sent()];
2798
+ case 7: return a.sent(), [3, 2];
2799
+ case 8: return [3, 10];
2800
+ case 9: return t.releaseLock(), [7];
2801
+ case 10: return [2];
2802
+ }
2803
+ });
2804
+ });
2805
+ }
2806
+ function Zn(e) {
2807
+ return H(e?.getReader);
2808
+ }
2809
+ //#endregion
2810
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js
2811
+ function Qn(e) {
2812
+ if (e instanceof Q) return e;
2813
+ if (e != null) {
2814
+ if (Wn(e)) return $n(e);
2815
+ if (mn(e)) return er(e);
2816
+ if (hn(e)) return tr(e);
2817
+ if (Gn(e)) return rr(e);
2818
+ if (Yn(e)) return nr(e);
2819
+ if (Zn(e)) return ir(e);
2820
+ }
2821
+ throw Kn(e);
2822
+ }
2823
+ function $n(e) {
2824
+ return new Q(function(t) {
2825
+ var n = e[Rn]();
2826
+ if (H(n.subscribe)) return n.subscribe(t);
2827
+ throw TypeError("Provided object does not correctly implement Symbol.observable");
2828
+ });
2829
+ }
2830
+ function er(e) {
2831
+ return new Q(function(t) {
2832
+ for (var n = 0; n < e.length && !t.closed; n++) t.next(e[n]);
2833
+ t.complete();
2834
+ });
2835
+ }
2836
+ function tr(e) {
2837
+ return new Q(function(t) {
2838
+ e.then(function(e) {
2839
+ t.closed || (t.next(e), t.complete());
2840
+ }, function(e) {
2841
+ return t.error(e);
2842
+ }).then(null, Sn);
2843
+ });
2844
+ }
2845
+ function nr(e) {
2846
+ return new Q(function(t) {
2847
+ var n, r;
2848
+ try {
2849
+ for (var i = W(e), a = i.next(); !a.done; a = i.next()) {
2850
+ var o = a.value;
2851
+ if (t.next(o), t.closed) return;
2852
+ }
2853
+ } catch (e) {
2854
+ n = { error: e };
2855
+ } finally {
2856
+ try {
2857
+ a && !a.done && (r = i.return) && r.call(i);
2858
+ } finally {
2859
+ if (n) throw n.error;
2860
+ }
2861
+ }
2862
+ t.complete();
2863
+ });
2864
+ }
2865
+ function rr(e) {
2866
+ return new Q(function(t) {
2867
+ ar(e, t).catch(function(e) {
2868
+ return t.error(e);
2869
+ });
2870
+ });
2871
+ }
2872
+ function ir(e) {
2873
+ return rr(Xn(e));
2874
+ }
2875
+ function ar(e, t) {
2876
+ var n, r, i, a;
2877
+ return un(this, void 0, void 0, function() {
2878
+ var o, s;
2879
+ return dn(this, function(c) {
2880
+ switch (c.label) {
2881
+ case 0: c.trys.push([
2882
+ 0,
2883
+ 5,
2884
+ 6,
2885
+ 11
2886
+ ]), n = pn(e), c.label = 1;
2887
+ case 1: return [4, n.next()];
2888
+ case 2:
2889
+ if (r = c.sent(), r.done) return [3, 4];
2890
+ if (o = r.value, t.next(o), t.closed) return [2];
2891
+ c.label = 3;
2892
+ case 3: return [3, 1];
2893
+ case 4: return [3, 11];
2894
+ case 5: return s = c.sent(), i = { error: s }, [3, 11];
2895
+ case 6: return c.trys.push([
2896
+ 6,
2897
+ ,
2898
+ 9,
2899
+ 10
2900
+ ]), r && !r.done && (a = n.return) ? [4, a.call(n)] : [3, 8];
2901
+ case 7: c.sent(), c.label = 8;
2902
+ case 8: return [3, 10];
2903
+ case 9:
2904
+ if (i) throw i.error;
2905
+ return [7];
2906
+ case 10: return [7];
2907
+ case 11: return t.complete(), [2];
2908
+ }
2909
+ });
2910
+ });
2911
+ }
2912
+ //#endregion
2913
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js
2914
+ function $(e, t, n, r, i) {
2915
+ return new or(e, t, n, r, i);
2916
+ }
2917
+ var or = function(e) {
2918
+ ln(t, e);
2919
+ function t(t, n, r, i, a, o) {
2920
+ var s = e.call(this, t) || this;
2921
+ return s.onFinalize = a, s.shouldUnsubscribe = o, s._next = n ? function(e) {
2922
+ try {
2923
+ n(e);
2924
+ } catch (e) {
2925
+ t.error(e);
2926
+ }
2927
+ } : e.prototype._next, s._error = i ? function(e) {
2928
+ try {
2929
+ i(e);
2930
+ } catch (e) {
2931
+ t.error(e);
2932
+ } finally {
2933
+ this.unsubscribe();
2934
+ }
2935
+ } : e.prototype._error, s._complete = r ? function() {
2936
+ try {
2937
+ r();
2938
+ } catch (e) {
2939
+ t.error(e);
2940
+ } finally {
2941
+ this.unsubscribe();
2942
+ }
2943
+ } : e.prototype._complete, s;
2944
+ }
2945
+ return t.prototype.unsubscribe = function() {
2946
+ var t;
2947
+ if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
2948
+ var n = this.closed;
2949
+ e.prototype.unsubscribe.call(this), !n && ((t = this.onFinalize) == null || t.call(this));
2950
+ }
2951
+ }, t;
2952
+ }(An);
2953
+ //#endregion
2954
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/args.js
2955
+ function sr(e) {
2956
+ return e[e.length - 1];
2957
+ }
2958
+ function cr(e) {
2959
+ return H(sr(e)) ? e.pop() : void 0;
2960
+ }
2961
+ //#endregion
2962
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/map.js
2963
+ function lr(e, t) {
2964
+ return U(function(n, r) {
2965
+ var i = 0;
2966
+ n.subscribe($(r, function(n) {
2967
+ r.next(e.call(t, n, i++));
2968
+ }));
2969
+ });
2970
+ }
2971
+ //#endregion
2972
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js
2973
+ function ur(e, t) {
2974
+ return t === void 0 && (t = zn), e ??= dr, U(function(n, r) {
2975
+ var i, a = !0;
2976
+ n.subscribe($(r, function(n) {
2977
+ var o = t(n);
2978
+ (a || !e(i, o)) && (a = !1, i = o, r.next(n));
2979
+ }));
2980
+ });
2981
+ }
2982
+ function dr(e, t) {
2983
+ return e === t;
2984
+ }
2985
+ //#endregion
2986
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js
2987
+ function fr(e, t) {
2988
+ return U(function(n, r) {
2989
+ var i = 0;
2990
+ n.subscribe($(r, function(n) {
2991
+ return e.call(t, n, i++) && r.next(n);
2992
+ }));
2993
+ });
2994
+ }
2995
+ //#endregion
2996
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/exhaustMap.js
2997
+ function pr(e, t) {
2998
+ return t ? function(n) {
2999
+ return n.pipe(pr(function(n, r) {
3000
+ return Qn(e(n, r)).pipe(lr(function(e, i) {
3001
+ return t(n, e, r, i);
3002
+ }));
3003
+ }));
3004
+ } : U(function(t, n) {
3005
+ var r = 0, i = null, a = !1;
3006
+ t.subscribe($(n, function(t) {
3007
+ i || (i = $(n, void 0, function() {
3008
+ i = null, a && n.complete();
3009
+ }), Qn(e(t, r++)).subscribe(i));
3010
+ }, function() {
3011
+ a = !0, !i && n.complete();
3012
+ }));
3013
+ });
3014
+ }
3015
+ //#endregion
3016
+ //#region ../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/withLatestFrom.js
3017
+ function mr() {
3018
+ var e = [...arguments], t = cr(e);
3019
+ return U(function(n, r) {
3020
+ for (var i = e.length, a = Array(i), o = e.map(function() {
3021
+ return !1;
3022
+ }), s = !1, c = function(t) {
3023
+ Qn(e[t]).subscribe($(r, function(e) {
3024
+ a[t] = e, !s && !o[t] && (o[t] = !0, (s = o.every(zn)) && (o = null));
3025
+ }, Cn));
3026
+ }, l = 0; l < i; l++) c(l);
3027
+ n.subscribe($(r, function(e) {
3028
+ if (s) {
3029
+ var n = K([e], G(a));
3030
+ r.next(t ? t.apply(void 0, K([], G(n))) : n);
3031
+ }
3032
+ }));
3033
+ });
3034
+ }
3035
+ //#endregion
3036
+ //#region src/sync-listeners.ts
3037
+ async function hr(e, t) {
3038
+ try {
3039
+ return await t(), !0;
3040
+ } catch (t) {
3041
+ return e.reportError(t), !1;
3042
+ }
3043
+ }
3044
+ function gr(e) {
3045
+ return e.rxdb.config.entities.filter((e) => !ee(e));
3046
+ }
3047
+ function _r(e) {
3048
+ let t = [];
3049
+ for (let n of gr(e)) {
3050
+ let r = T(n), i = M(N(r, e.rxdb.config.sync));
3051
+ i.offlineWrite && !i.push && t.push({
3052
+ namespace: r.namespace,
3053
+ entity: r.name
3054
+ });
3055
+ }
3056
+ return t;
3057
+ }
3058
+ async function vr(e, t, n) {
3059
+ let { syncState: r } = e.rxdb, i = await fe(e.rxdb, t, n);
3060
+ for (let e of i.conflicts) r.reportConflict({
3061
+ namespace: t,
3062
+ entity: n,
3063
+ entityId: e,
3064
+ winner: "remote"
3065
+ });
3066
+ }
3067
+ async function yr(e, t) {
3068
+ let { syncState: n } = e.rxdb, r = !0;
3069
+ for (let { namespace: i, entity: a } of t) r = await hr(n, () => vr(e, i, a)) && r;
3070
+ return r;
3071
+ }
3072
+ async function br(e) {
3073
+ try {
3074
+ e.rxdb.syncState.reportOutboxCount(await ge(e.rxdb));
3075
+ } catch {}
3076
+ }
3077
+ async function xr(e) {
3078
+ let t = _r(e);
3079
+ if (t.length === 0) return;
3080
+ let { syncState: n } = e.rxdb;
3081
+ n.beginRound();
3082
+ try {
3083
+ await yr(e, t) && n.reportSuccess(), await br(e);
3084
+ } finally {
3085
+ n.endRound();
3086
+ }
3087
+ }
3088
+ function Sr(e) {
3089
+ let t = e.rxdb.connected$, n = ae([t, e.rxdb.reachability.online$]).pipe(lr(([e, t]) => e && t), ur());
3090
+ return oe(n.pipe(fr((e) => e)), e.rxdb.reachability.wakeup$.pipe(mr(t), fr(([, e]) => e)));
3091
+ }
3092
+ function Cr(e) {
3093
+ let t = [], a = [];
3094
+ if (e.rxdb.config.sync?.remote?.adapter) {
3095
+ let n = Sr(e).pipe(pr(() => xr(e).catch((t) => {
3096
+ e.rxdb.syncState.reportError(t);
3097
+ }))).subscribe();
3098
+ t.push(n);
3099
+ }
3100
+ let o = async (t) => {
3101
+ let n = await e.getCurrentBranch();
3102
+ return t.filter((e) => !e.branchId || e.branchId === n.id).length;
3103
+ }, s = (t) => (n) => {
3104
+ (async () => {
3105
+ try {
3106
+ let t = await o(n.entities);
3107
+ t > 0 && e.history.incrementPullableCount(t);
3108
+ } catch (e) {
3109
+ se(e) || console.error(`[SyncManager] ${t} failed:`, e);
3110
+ }
3111
+ })();
3112
+ }, c = [
3113
+ {
3114
+ type: n,
3115
+ handler: s("onRemoteCreate")
3116
+ },
3117
+ {
3118
+ type: i,
3119
+ handler: s("onRemoteUpdate")
3120
+ },
3121
+ {
3122
+ type: r,
3123
+ handler: s("onRemoteRemove")
3124
+ }
3125
+ ];
3126
+ for (let { type: t, handler: n } of c) e.rxdb.addEventListener(t, n), a.push(() => e.rxdb.removeEventListener(t, n));
3127
+ return {
3128
+ subscriptions: t,
3129
+ removers: a
3130
+ };
3131
+ }
3132
+ //#endregion
3133
+ //#region src/sync-manager.utils.ts
3134
+ var wr = (e) => e?.historyInvalidated === !0 || (e?.pushResult?.pushed ?? 0) > 0, Tr = (e) => e instanceof m && wr(e.result), Er = (e) => e instanceof m ? e.result : void 0, Dr = class {
3135
+ rxdb;
3136
+ history;
3137
+ #e = [];
3138
+ #t = [];
3139
+ get pushInFlight() {
3140
+ return this.history.pushInFlight;
3141
+ }
3142
+ constructor(e, t) {
3143
+ this.rxdb = e, this.history = t;
3144
+ }
3145
+ init() {
3146
+ let { subscriptions: e, removers: t } = Cr(this);
3147
+ this.#t.push(...e), this.#e.push(...t);
3148
+ }
3149
+ destroy() {
3150
+ for (let e of this.#e) e();
3151
+ this.#e.length = 0;
3152
+ for (let e of this.#t) e.unsubscribe();
3153
+ this.#t.length = 0;
3154
+ }
3155
+ async getLocalRepositories() {
3156
+ return E(this.rxdb);
3157
+ }
3158
+ async getRemoteRepositories() {
3159
+ return O(this.rxdb);
3160
+ }
3161
+ async getCurrentBranch() {
3162
+ return w(this.rxdb);
3163
+ }
3164
+ async syncBranches() {
3165
+ return on(this);
3166
+ }
3167
+ async pull(e) {
3168
+ let t;
3169
+ try {
3170
+ t = await this.history.syncing(() => this.#n(e));
3171
+ } catch (e) {
3172
+ throw Tr(e) && this.history.clearUndoHistory(), e;
3173
+ }
3174
+ return t.historyInvalidated && this.history.clearUndoHistory(), t;
3175
+ }
3176
+ async push(e) {
3177
+ let t = await this.history.syncing(() => rn(this, e));
3178
+ return t.pushed > 0 && this.history.clearUndoHistory(), t;
3179
+ }
3180
+ async sync(e) {
3181
+ let t, n;
3182
+ try {
3183
+ n = await this.history.syncing(async () => {
3184
+ t = await this.#n(e?.pull);
3185
+ let n = await rn(this, e?.push);
3186
+ return {
3187
+ pullResult: t,
3188
+ pushResult: n
3189
+ };
3190
+ });
3191
+ } catch (e) {
3192
+ throw (t?.historyInvalidated === !0 || Tr(e)) && this.history.clearUndoHistory(), e;
3193
+ }
3194
+ return (n.pullResult.historyInvalidated || n.pushResult.pushed > 0) && this.history.clearUndoHistory(), n;
3195
+ }
3196
+ async pullRepository(e, t, n) {
3197
+ let r;
3198
+ try {
3199
+ r = await this.history.syncing(() => Ze(this, e, t, n));
3200
+ } catch (e) {
3201
+ throw Tr(e) && this.history.clearUndoHistory(), e;
3202
+ }
3203
+ return r.historyInvalidated && this.history.clearUndoHistory(), r;
3204
+ }
3205
+ async pushRepository(e, t, n) {
3206
+ let r = await this.history.syncing(() => st(this, e, t, n));
3207
+ return r.pushed > 0 && this.history.clearUndoHistory(), r;
3208
+ }
3209
+ async syncRepository(e, t, n) {
3210
+ let r;
3211
+ try {
3212
+ r = await this.history.syncing(() => kt(this, e, t, n));
3213
+ } catch (e) {
3214
+ throw Tr(e) && this.history.clearUndoHistory(), e;
3215
+ }
3216
+ return (r.pullResult.historyInvalidated || r.pushResult.pushed > 0) && this.history.clearUndoHistory(), r;
3217
+ }
3218
+ async cleanupExpired(e, t, n) {
3219
+ return Lt(this, e, t, n);
3220
+ }
3221
+ async checkRepositoryUpdates(e, t) {
3222
+ return It(this.rxdb, e, t);
3223
+ }
3224
+ async getRepositorySyncStatus(e, t) {
3225
+ return Ht(this.rxdb, e, t);
3226
+ }
3227
+ async getAllRepositorySyncStatus(e) {
3228
+ return Ut(this.rxdb, e);
3229
+ }
3230
+ async refreshPullableCount() {
3231
+ let e = this.history.beginPullableSettlement(), t = (await Ut(this.rxdb)).reduce((e, t) => e + (t.enabled ? t.pullableCount : 0), 0);
3232
+ return this.history.reconcilePullableCount(e, t), t;
3233
+ }
3234
+ async bulkSync(e) {
3235
+ let t = await this.history.syncing(() => Ft(this.rxdb, e));
3236
+ return t.results.some((e) => wr(e.result) || wr(Er(e.error))) && this.history.clearUndoHistory(), t;
3237
+ }
3238
+ getRepositoryDependencyGraph() {
3239
+ return R(this.rxdb.config.entities.map((e) => T(e)));
3240
+ }
3241
+ getRepositorySyncOrder(e) {
3242
+ return We(this.getRepositoryDependencyGraph(), e);
3243
+ }
3244
+ async #n(e) {
3245
+ let t = this.history.beginPullableSettlement(), n;
3246
+ try {
3247
+ n = await Yt(this, e);
3248
+ } catch (e) {
3249
+ let n = e instanceof m ? e.result : void 0;
3250
+ throw this.history.settleAbortedPull(t, n ? n.pulled : 0), e;
3251
+ }
3252
+ return this.history.settlePull(t, e, n), n;
3253
+ }
3254
+ }, Or = class extends h {
3255
+ lifecycle = "scoped";
3256
+ inject = ["plugin:history"];
3257
+ name = "sync";
3258
+ install(e) {
3259
+ let t = new Dr(this.rxdb, this.rxdb.versionManager.syncBridge);
3260
+ e.acquire(() => () => t.destroy(), "sync:syncManager"), e.acquire(() => (Object.defineProperty(this.rxdb, "syncManager", {
3261
+ value: t,
3262
+ configurable: !0,
3263
+ enumerable: !0
3264
+ }), () => void Reflect.deleteProperty(this.rxdb, "syncManager")), "sync:slot"), this.rxdb.queryCacheOutbox({ pendingWriteIds: (e, t) => _e(this.rxdb, e, t) }, e), e.acquire(() => this.rxdb.reachability.watch(), "sync:reachability"), t.init(), e.acquire(() => this.rxdb.syncState.bindPullableRefresh(() => {
3265
+ t.refreshPullableCount().catch((e) => {
3266
+ let t = e instanceof Error ? e.message : String(e);
3267
+ console.warn(`[RxDB Sync] 重算待拉数失败:${t}。`);
3268
+ });
3269
+ }), "sync:pullableRefresh");
3270
+ }
3271
+ }, kr = (e) => new Or(e);
3272
+ //#endregion
3273
+ export { Or as RxDBPluginSync, Lt as cleanupExpired, ge as countQueryCacheOutbox, fe as flushQueryCacheOutbox, _e as pendingQueryCacheWriteIds, kr as rxDBPluginSync, on as syncBranches };