@rocicorp/zero 0.25.0-canary.3 → 0.25.0-canary.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/chunk-ASRS2LFV.js +35 -0
- package/out/chunk-ASRS2LFV.js.map +7 -0
- package/out/{chunk-U2KJIWVC.js → chunk-EZM3XBAB.js} +2 -47
- package/out/chunk-EZM3XBAB.js.map +7 -0
- package/out/{chunk-5H7WNLPK.js → chunk-HCZQVP5R.js} +2 -2
- package/out/{chunk-SRLXXPNB.js → chunk-PFM5IJC4.js} +4 -4
- package/out/{chunk-JKP7HDC6.js → chunk-TAUDS4QP.js} +48 -7
- package/out/chunk-TAUDS4QP.js.map +7 -0
- package/out/{chunk-RYFBHAD4.js → chunk-WPAQ4EPM.js} +16 -19
- package/out/chunk-WPAQ4EPM.js.map +7 -0
- package/out/{chunk-IWL6EEA6.js → chunk-WWNKZSEE.js} +590 -73
- package/out/chunk-WWNKZSEE.js.map +7 -0
- package/out/expo-sqlite.js +4 -4
- package/out/{lazy-inspector-4CO3DXP5.js → lazy-inspector-XLKVABX2.js} +6 -6
- package/out/op-sqlite.js +3 -3
- package/out/react-native.js +4 -4
- package/out/react.js +5 -4
- package/out/react.js.map +2 -2
- package/out/replicache/src/kv/sqlite-store.d.ts +1 -7
- package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
- package/out/replicache/src/sqlite.d.ts +1 -1
- package/out/replicache/src/sqlite.d.ts.map +1 -1
- package/out/shared/src/deep-merge.d.ts +6 -3
- package/out/shared/src/deep-merge.d.ts.map +1 -1
- package/out/solid.js +5 -5
- package/out/sqlite.js +3 -5
- package/out/zero/package.json +2 -2
- package/out/zero/src/zero-cache-dev.js +57 -40
- package/out/zero/src/zero-cache-dev.js.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.d.ts +10 -0
- package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -1
- package/out/zero-cache/src/db/pg-to-lite.js +16 -2
- package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
- package/out/zero-cache/src/services/change-source/column-metadata.d.ts +10 -3
- package/out/zero-cache/src/services/change-source/column-metadata.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/column-metadata.js +26 -13
- package/out/zero-cache/src/services/change-source/column-metadata.js.map +1 -1
- package/out/zero-cache/src/services/change-source/replica-schema.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/replica-schema.js +13 -0
- package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
- package/out/zero-cache/src/services/replicator/change-processor.js +33 -0
- package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +2 -24
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +4 -29
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +2 -2
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/mutation-tracker.d.ts +2 -2
- package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
- package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
- package/out/zero-client/src/mod.d.ts +1 -1
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/mod.d.ts +1 -1
- package/out/zero-react/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +1 -0
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero.js +6 -7
- package/out/zql/src/builder/builder.d.ts +1 -1
- package/out/zql/src/builder/builder.d.ts.map +1 -1
- package/out/zql/src/planner/planner-join.js +1 -1
- package/out/zql/src/planner/planner-join.js.map +1 -1
- package/package.json +2 -2
- package/out/chunk-HYS7YLNL.js +0 -575
- package/out/chunk-HYS7YLNL.js.map +0 -7
- package/out/chunk-IWL6EEA6.js.map +0 -7
- package/out/chunk-JKP7HDC6.js.map +0 -7
- package/out/chunk-RYFBHAD4.js.map +0 -7
- package/out/chunk-U2KJIWVC.js.map +0 -7
- /package/out/{chunk-5H7WNLPK.js.map → chunk-HCZQVP5R.js.map} +0 -0
- /package/out/{chunk-SRLXXPNB.js.map → chunk-PFM5IJC4.js.map} +0 -0
- /package/out/{lazy-inspector-4CO3DXP5.js.map → lazy-inspector-XLKVABX2.js.map} +0 -0
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
getBrowserGlobal,
|
|
8
|
-
getBrowserGlobalMethod,
|
|
9
|
-
localNavigator,
|
|
10
|
-
mustGetBrowserGlobal,
|
|
11
|
-
newIDBStoreWithMemFallback,
|
|
12
|
-
promiseVoid
|
|
13
|
-
} from "./chunk-HYS7YLNL.js";
|
|
2
|
+
maybeTransactionIsClosedRejection,
|
|
3
|
+
storeIsClosedRejection,
|
|
4
|
+
throwIfStoreClosed,
|
|
5
|
+
transactionIsClosedRejection
|
|
6
|
+
} from "./chunk-ASRS2LFV.js";
|
|
14
7
|
import {
|
|
15
8
|
BTreeRead,
|
|
16
9
|
Chunk,
|
|
@@ -87,6 +80,7 @@ import {
|
|
|
87
80
|
localMutations,
|
|
88
81
|
localMutationsDD31,
|
|
89
82
|
localMutationsGreaterThan,
|
|
83
|
+
makeClientID,
|
|
90
84
|
mapAST,
|
|
91
85
|
mapAllEntries,
|
|
92
86
|
mapEntries,
|
|
@@ -124,26 +118,27 @@ import {
|
|
|
124
118
|
toMutationResponseKey,
|
|
125
119
|
toPrimaryKeyString,
|
|
126
120
|
toStaticParam,
|
|
121
|
+
using,
|
|
127
122
|
valita_exports,
|
|
123
|
+
withRead,
|
|
124
|
+
withWrite,
|
|
125
|
+
withWriteNoImplicitCommit,
|
|
128
126
|
wrapIterable
|
|
129
|
-
} from "./chunk-
|
|
127
|
+
} from "./chunk-TAUDS4QP.js";
|
|
130
128
|
import {
|
|
131
129
|
assert,
|
|
132
130
|
assertArray,
|
|
133
131
|
assertBoolean,
|
|
132
|
+
assertNotNull,
|
|
134
133
|
assertNumber,
|
|
135
134
|
assertObject,
|
|
136
135
|
assertString,
|
|
137
136
|
deepFreeze,
|
|
137
|
+
deepFreezeAllowUndefined,
|
|
138
138
|
hasOwn,
|
|
139
139
|
isProd,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
using,
|
|
143
|
-
withRead,
|
|
144
|
-
withWrite,
|
|
145
|
-
withWriteNoImplicitCommit
|
|
146
|
-
} from "./chunk-U2KJIWVC.js";
|
|
140
|
+
unreachable
|
|
141
|
+
} from "./chunk-EZM3XBAB.js";
|
|
147
142
|
import {
|
|
148
143
|
__export
|
|
149
144
|
} from "./chunk-424PT5DM.js";
|
|
@@ -303,6 +298,262 @@ function assertPullerResultV1(v) {
|
|
|
303
298
|
}
|
|
304
299
|
}
|
|
305
300
|
|
|
301
|
+
// ../replicache/src/kv/idb-store.ts
|
|
302
|
+
import { resolver } from "@rocicorp/resolver";
|
|
303
|
+
|
|
304
|
+
// ../shared/src/browser-env.ts
|
|
305
|
+
var overrides = /* @__PURE__ */ new Map();
|
|
306
|
+
function getBrowserGlobal(name) {
|
|
307
|
+
if (overrides.has(name)) {
|
|
308
|
+
return overrides.get(name);
|
|
309
|
+
}
|
|
310
|
+
return globalThis[name];
|
|
311
|
+
}
|
|
312
|
+
function getBrowserGlobalMethod(name) {
|
|
313
|
+
return getBrowserGlobal(name)?.bind(globalThis);
|
|
314
|
+
}
|
|
315
|
+
function mustGetBrowserGlobal(name) {
|
|
316
|
+
const r = getBrowserGlobal(name);
|
|
317
|
+
if (r === void 0) {
|
|
318
|
+
throw new Error(
|
|
319
|
+
`Unsupported JavaScript environment: Could not find ${name}.`
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
return r;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// ../shared/src/resolved-promises.ts
|
|
326
|
+
var promiseTrue = Promise.resolve(true);
|
|
327
|
+
var promiseFalse = Promise.resolve(false);
|
|
328
|
+
var promiseUndefined = Promise.resolve(void 0);
|
|
329
|
+
var promiseVoid = Promise.resolve();
|
|
330
|
+
var promiseNever = new Promise(() => {
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
// ../replicache/src/kv/write-impl-base.ts
|
|
334
|
+
var deleteSentinel = Symbol();
|
|
335
|
+
var WriteImplBase = class {
|
|
336
|
+
_pending = /* @__PURE__ */ new Map();
|
|
337
|
+
#read;
|
|
338
|
+
constructor(read) {
|
|
339
|
+
this.#read = read;
|
|
340
|
+
}
|
|
341
|
+
has(key) {
|
|
342
|
+
if (this.#read.closed) {
|
|
343
|
+
return transactionIsClosedRejection();
|
|
344
|
+
}
|
|
345
|
+
switch (this._pending.get(key)) {
|
|
346
|
+
case void 0:
|
|
347
|
+
return this.#read.has(key);
|
|
348
|
+
case deleteSentinel:
|
|
349
|
+
return promiseFalse;
|
|
350
|
+
default:
|
|
351
|
+
return promiseTrue;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
async get(key) {
|
|
355
|
+
if (this.#read.closed) {
|
|
356
|
+
return transactionIsClosedRejection();
|
|
357
|
+
}
|
|
358
|
+
const v = this._pending.get(key);
|
|
359
|
+
switch (v) {
|
|
360
|
+
case deleteSentinel:
|
|
361
|
+
return void 0;
|
|
362
|
+
case void 0: {
|
|
363
|
+
const v2 = await this.#read.get(key);
|
|
364
|
+
return deepFreezeAllowUndefined(v2);
|
|
365
|
+
}
|
|
366
|
+
default:
|
|
367
|
+
return v;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
put(key, value) {
|
|
371
|
+
return maybeTransactionIsClosedRejection(this.#read) ?? (this._pending.set(key, deepFreeze(value)), promiseVoid);
|
|
372
|
+
}
|
|
373
|
+
del(key) {
|
|
374
|
+
return maybeTransactionIsClosedRejection(this.#read) ?? (this._pending.set(key, deleteSentinel), promiseVoid);
|
|
375
|
+
}
|
|
376
|
+
release() {
|
|
377
|
+
this.#read.release();
|
|
378
|
+
}
|
|
379
|
+
get closed() {
|
|
380
|
+
return this.#read.closed;
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
// ../replicache/src/kv/idb-store.ts
|
|
385
|
+
var RELAXED = { durability: "relaxed" };
|
|
386
|
+
var OBJECT_STORE = "chunks";
|
|
387
|
+
var IDBStore = class {
|
|
388
|
+
#db;
|
|
389
|
+
#closed = false;
|
|
390
|
+
#idbDeleted = false;
|
|
391
|
+
constructor(name) {
|
|
392
|
+
this.#db = openDatabase(name);
|
|
393
|
+
}
|
|
394
|
+
read() {
|
|
395
|
+
if (this.#closed) {
|
|
396
|
+
return storeIsClosedRejection();
|
|
397
|
+
}
|
|
398
|
+
return this.#withReopen(readImpl);
|
|
399
|
+
}
|
|
400
|
+
write() {
|
|
401
|
+
if (this.#closed) {
|
|
402
|
+
return storeIsClosedRejection();
|
|
403
|
+
}
|
|
404
|
+
return this.#withReopen(writeImpl);
|
|
405
|
+
}
|
|
406
|
+
async close() {
|
|
407
|
+
if (!this.#idbDeleted) {
|
|
408
|
+
const db = await this.#db;
|
|
409
|
+
db.close();
|
|
410
|
+
}
|
|
411
|
+
this.#closed = true;
|
|
412
|
+
}
|
|
413
|
+
get closed() {
|
|
414
|
+
return this.#closed;
|
|
415
|
+
}
|
|
416
|
+
async #withReopen(fn) {
|
|
417
|
+
const reopenExistingDB = async (name) => {
|
|
418
|
+
const { promise, resolve, reject } = resolver();
|
|
419
|
+
const req = indexedDB.open(name);
|
|
420
|
+
req.onupgradeneeded = () => {
|
|
421
|
+
const tx = req.transaction;
|
|
422
|
+
assertNotNull(tx);
|
|
423
|
+
tx.abort();
|
|
424
|
+
this.#idbDeleted = true;
|
|
425
|
+
reject(
|
|
426
|
+
new IDBNotFoundError(
|
|
427
|
+
`Expected IndexedDB not found: ${name}. This likely means that the user deleted IndexedDB instances while the app was running. This is non-fatal. The app will continue running in memory until reload.`
|
|
428
|
+
)
|
|
429
|
+
);
|
|
430
|
+
};
|
|
431
|
+
req.onsuccess = () => resolve(req.result);
|
|
432
|
+
req.onerror = () => reject(req.error);
|
|
433
|
+
const db2 = await promise;
|
|
434
|
+
db2.onversionchange = () => db2.close();
|
|
435
|
+
return db2;
|
|
436
|
+
};
|
|
437
|
+
const db = await this.#db;
|
|
438
|
+
try {
|
|
439
|
+
return fn(db);
|
|
440
|
+
} catch (e) {
|
|
441
|
+
if (!this.#closed && e instanceof DOMException) {
|
|
442
|
+
if (e.name === "InvalidStateError") {
|
|
443
|
+
this.#db = reopenExistingDB(db.name);
|
|
444
|
+
const reopened = await this.#db;
|
|
445
|
+
return fn(reopened);
|
|
446
|
+
} else if (e.name === "NotFoundError") {
|
|
447
|
+
this.#idbDeleted = true;
|
|
448
|
+
mustGetBrowserGlobal("indexedDB").deleteDatabase(db.name);
|
|
449
|
+
throw new IDBNotFoundError(
|
|
450
|
+
`Expected IndexedDB ${db.name} missing object store. Deleting db. This is non-fatal, the app will continue working in memory until it is reloaded.`
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
throw e;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
var ReadImpl = class {
|
|
459
|
+
#tx;
|
|
460
|
+
#closed = false;
|
|
461
|
+
constructor(tx) {
|
|
462
|
+
this.#tx = tx;
|
|
463
|
+
}
|
|
464
|
+
has(key) {
|
|
465
|
+
if (this.#closed) {
|
|
466
|
+
return transactionIsClosedRejection();
|
|
467
|
+
}
|
|
468
|
+
return new Promise((resolve, reject) => {
|
|
469
|
+
const req = objectStore(this.#tx).count(key);
|
|
470
|
+
req.onsuccess = () => resolve(req.result > 0);
|
|
471
|
+
req.onerror = () => reject(req.error);
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
get(key) {
|
|
475
|
+
if (this.#closed) {
|
|
476
|
+
return transactionIsClosedRejection();
|
|
477
|
+
}
|
|
478
|
+
return new Promise((resolve, reject) => {
|
|
479
|
+
const req = objectStore(this.#tx).get(key);
|
|
480
|
+
req.onsuccess = () => resolve(deepFreezeAllowUndefined(req.result));
|
|
481
|
+
req.onerror = () => reject(req.error);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
release() {
|
|
485
|
+
this.#closed = true;
|
|
486
|
+
}
|
|
487
|
+
get closed() {
|
|
488
|
+
return this.#closed;
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
var WriteImpl = class extends WriteImplBase {
|
|
492
|
+
#tx;
|
|
493
|
+
#closed = false;
|
|
494
|
+
constructor(tx) {
|
|
495
|
+
super(new ReadImpl(tx));
|
|
496
|
+
this.#tx = tx;
|
|
497
|
+
}
|
|
498
|
+
commit() {
|
|
499
|
+
if (this.#closed) {
|
|
500
|
+
return transactionIsClosedRejection();
|
|
501
|
+
}
|
|
502
|
+
if (this._pending.size === 0) {
|
|
503
|
+
return promiseVoid;
|
|
504
|
+
}
|
|
505
|
+
return new Promise((resolve, reject) => {
|
|
506
|
+
const tx = this.#tx;
|
|
507
|
+
const store = objectStore(tx);
|
|
508
|
+
for (const [key, val] of this._pending) {
|
|
509
|
+
if (val === deleteSentinel) {
|
|
510
|
+
store.delete(key);
|
|
511
|
+
} else {
|
|
512
|
+
store.put(val, key);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
tx.oncomplete = () => resolve();
|
|
516
|
+
tx.onerror = () => reject(tx.error);
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
release() {
|
|
520
|
+
this.#closed = true;
|
|
521
|
+
super.release();
|
|
522
|
+
}
|
|
523
|
+
get closed() {
|
|
524
|
+
return this.#closed;
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
function writeImpl(db) {
|
|
528
|
+
const tx = db.transaction(OBJECT_STORE, "readwrite", RELAXED);
|
|
529
|
+
return new WriteImpl(tx);
|
|
530
|
+
}
|
|
531
|
+
function readImpl(db) {
|
|
532
|
+
const tx = db.transaction(OBJECT_STORE, "readonly");
|
|
533
|
+
return new ReadImpl(tx);
|
|
534
|
+
}
|
|
535
|
+
function objectStore(tx) {
|
|
536
|
+
return tx.objectStore(OBJECT_STORE);
|
|
537
|
+
}
|
|
538
|
+
function openDatabase(name) {
|
|
539
|
+
const idb = mustGetBrowserGlobal("indexedDB");
|
|
540
|
+
return new Promise((resolve, reject) => {
|
|
541
|
+
const req = idb.open(name);
|
|
542
|
+
req.onupgradeneeded = () => {
|
|
543
|
+
req.result.createObjectStore(OBJECT_STORE);
|
|
544
|
+
};
|
|
545
|
+
req.onsuccess = () => {
|
|
546
|
+
const db = req.result;
|
|
547
|
+
db.onversionchange = () => db.close();
|
|
548
|
+
resolve(db);
|
|
549
|
+
};
|
|
550
|
+
req.onerror = () => reject(req.error);
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
var IDBNotFoundError = class extends Error {
|
|
554
|
+
name = "IDBNotFoundError";
|
|
555
|
+
};
|
|
556
|
+
|
|
306
557
|
// ../replicache/src/make-idb-name.ts
|
|
307
558
|
function makeIDBName(name, schemaVersion) {
|
|
308
559
|
return makeIDBNameInternal(name, schemaVersion, Latest);
|
|
@@ -318,9 +569,9 @@ var AbortError = class extends Error {
|
|
|
318
569
|
};
|
|
319
570
|
|
|
320
571
|
// ../shared/src/sleep.ts
|
|
321
|
-
import { resolver } from "@rocicorp/resolver";
|
|
572
|
+
import { resolver as resolver2 } from "@rocicorp/resolver";
|
|
322
573
|
var promiseVoid2 = Promise.resolve();
|
|
323
|
-
var
|
|
574
|
+
var promiseNever2 = new Promise(() => void 0);
|
|
324
575
|
function sleep(ms, signal) {
|
|
325
576
|
const newAbortError = () => new AbortError("Aborted");
|
|
326
577
|
if (signal?.aborted) {
|
|
@@ -346,9 +597,9 @@ function sleep(ms, signal) {
|
|
|
346
597
|
}
|
|
347
598
|
function sleepWithAbort(ms, signal) {
|
|
348
599
|
if (ms === 0) {
|
|
349
|
-
return [promiseVoid2,
|
|
600
|
+
return [promiseVoid2, promiseNever2];
|
|
350
601
|
}
|
|
351
|
-
const { promise: abortedPromise, resolve: abortedResolve } =
|
|
602
|
+
const { promise: abortedPromise, resolve: abortedResolve } = resolver2();
|
|
352
603
|
const sleepPromise = new Promise((resolve) => {
|
|
353
604
|
const handleAbort = () => {
|
|
354
605
|
clearTimeout(id);
|
|
@@ -534,10 +785,10 @@ var StoreImpl = class {
|
|
|
534
785
|
this.#assertValidHash = assertValidHash;
|
|
535
786
|
}
|
|
536
787
|
async read() {
|
|
537
|
-
return new
|
|
788
|
+
return new ReadImpl2(await this.#kv.read(), this.#assertValidHash);
|
|
538
789
|
}
|
|
539
790
|
async write() {
|
|
540
|
-
return new
|
|
791
|
+
return new WriteImpl2(
|
|
541
792
|
await this.#kv.write(),
|
|
542
793
|
this.#chunkHasher,
|
|
543
794
|
this.#assertValidHash
|
|
@@ -547,7 +798,7 @@ var StoreImpl = class {
|
|
|
547
798
|
return this.#kv.close();
|
|
548
799
|
}
|
|
549
800
|
};
|
|
550
|
-
var
|
|
801
|
+
var ReadImpl2 = class {
|
|
551
802
|
_tx;
|
|
552
803
|
assertValidHash;
|
|
553
804
|
constructor(kv, assertValidHash) {
|
|
@@ -590,7 +841,7 @@ var ReadImpl = class {
|
|
|
590
841
|
return this._tx.closed;
|
|
591
842
|
}
|
|
592
843
|
};
|
|
593
|
-
var
|
|
844
|
+
var WriteImpl2 = class extends ReadImpl2 {
|
|
594
845
|
#chunkHasher;
|
|
595
846
|
#putChunks = /* @__PURE__ */ new Set();
|
|
596
847
|
#changedHeads = /* @__PURE__ */ new Map();
|
|
@@ -786,6 +1037,175 @@ async function confirmDeletedClients(dagWrite, deletedClientIds, deletedClientGr
|
|
|
786
1037
|
);
|
|
787
1038
|
}
|
|
788
1039
|
|
|
1040
|
+
// ../shared/src/navigator.ts
|
|
1041
|
+
var localNavigator = typeof navigator !== "undefined" ? navigator : void 0;
|
|
1042
|
+
|
|
1043
|
+
// ../replicache/src/kv/mem-store.ts
|
|
1044
|
+
import { RWLock } from "@rocicorp/lock";
|
|
1045
|
+
|
|
1046
|
+
// ../replicache/src/kv/read-impl.ts
|
|
1047
|
+
var ReadImpl3 = class {
|
|
1048
|
+
#map;
|
|
1049
|
+
#release;
|
|
1050
|
+
#closed = false;
|
|
1051
|
+
constructor(map, release) {
|
|
1052
|
+
this.#map = map;
|
|
1053
|
+
this.#release = release;
|
|
1054
|
+
}
|
|
1055
|
+
release() {
|
|
1056
|
+
this.#release();
|
|
1057
|
+
this.#closed = true;
|
|
1058
|
+
}
|
|
1059
|
+
get closed() {
|
|
1060
|
+
return this.#closed;
|
|
1061
|
+
}
|
|
1062
|
+
has(key) {
|
|
1063
|
+
return maybeTransactionIsClosedRejection(this) ?? Promise.resolve(this.#map.has(key));
|
|
1064
|
+
}
|
|
1065
|
+
get(key) {
|
|
1066
|
+
return maybeTransactionIsClosedRejection(this) ?? Promise.resolve(this.#map.get(key));
|
|
1067
|
+
}
|
|
1068
|
+
};
|
|
1069
|
+
|
|
1070
|
+
// ../replicache/src/kv/write-impl.ts
|
|
1071
|
+
var WriteImpl3 = class extends WriteImplBase {
|
|
1072
|
+
#map;
|
|
1073
|
+
constructor(map, release) {
|
|
1074
|
+
super(new ReadImpl3(map, release));
|
|
1075
|
+
this.#map = map;
|
|
1076
|
+
}
|
|
1077
|
+
commit() {
|
|
1078
|
+
if (this.closed) {
|
|
1079
|
+
return transactionIsClosedRejection();
|
|
1080
|
+
}
|
|
1081
|
+
this._pending.forEach((value, key) => {
|
|
1082
|
+
if (value === deleteSentinel) {
|
|
1083
|
+
this.#map.delete(key);
|
|
1084
|
+
} else {
|
|
1085
|
+
this.#map.set(key, value);
|
|
1086
|
+
}
|
|
1087
|
+
});
|
|
1088
|
+
this._pending.clear();
|
|
1089
|
+
this.release();
|
|
1090
|
+
return promiseVoid;
|
|
1091
|
+
}
|
|
1092
|
+
};
|
|
1093
|
+
|
|
1094
|
+
// ../replicache/src/kv/mem-store.ts
|
|
1095
|
+
var stores = /* @__PURE__ */ new Map();
|
|
1096
|
+
function dropMemStore(name) {
|
|
1097
|
+
stores.delete(name);
|
|
1098
|
+
return promiseVoid;
|
|
1099
|
+
}
|
|
1100
|
+
var MemStore = class {
|
|
1101
|
+
#map;
|
|
1102
|
+
#rwLock;
|
|
1103
|
+
#closed = false;
|
|
1104
|
+
constructor(name) {
|
|
1105
|
+
const entry = stores.get(name);
|
|
1106
|
+
let lock;
|
|
1107
|
+
let map;
|
|
1108
|
+
if (entry) {
|
|
1109
|
+
({ lock, map } = entry);
|
|
1110
|
+
} else {
|
|
1111
|
+
lock = new RWLock();
|
|
1112
|
+
map = /* @__PURE__ */ new Map();
|
|
1113
|
+
stores.set(name, { lock, map });
|
|
1114
|
+
}
|
|
1115
|
+
this.#rwLock = lock;
|
|
1116
|
+
this.#map = map;
|
|
1117
|
+
}
|
|
1118
|
+
async read() {
|
|
1119
|
+
throwIfStoreClosed(this);
|
|
1120
|
+
const release = await this.#rwLock.read();
|
|
1121
|
+
return new ReadImpl3(this.#map, release);
|
|
1122
|
+
}
|
|
1123
|
+
async write() {
|
|
1124
|
+
throwIfStoreClosed(this);
|
|
1125
|
+
const release = await this.#rwLock.write();
|
|
1126
|
+
return new WriteImpl3(this.#map, release);
|
|
1127
|
+
}
|
|
1128
|
+
close() {
|
|
1129
|
+
this.#closed = true;
|
|
1130
|
+
return promiseVoid;
|
|
1131
|
+
}
|
|
1132
|
+
get closed() {
|
|
1133
|
+
return this.#closed;
|
|
1134
|
+
}
|
|
1135
|
+
};
|
|
1136
|
+
|
|
1137
|
+
// ../replicache/src/kv/idb-store-with-mem-fallback.ts
|
|
1138
|
+
var IDBStoreWithMemFallback = class {
|
|
1139
|
+
#lc;
|
|
1140
|
+
#name;
|
|
1141
|
+
#store;
|
|
1142
|
+
constructor(lc, name) {
|
|
1143
|
+
this.#lc = lc;
|
|
1144
|
+
this.#name = name;
|
|
1145
|
+
this.#store = new IDBStore(name);
|
|
1146
|
+
}
|
|
1147
|
+
read() {
|
|
1148
|
+
return this.#withBrainTransplant((s) => s.read());
|
|
1149
|
+
}
|
|
1150
|
+
write() {
|
|
1151
|
+
return this.#withBrainTransplant((s) => s.write());
|
|
1152
|
+
}
|
|
1153
|
+
async #withBrainTransplant(f) {
|
|
1154
|
+
try {
|
|
1155
|
+
return await f(this.#store);
|
|
1156
|
+
} catch (e) {
|
|
1157
|
+
if (isFirefoxPrivateBrowsingError(e)) {
|
|
1158
|
+
if (this.#store instanceof IDBStore) {
|
|
1159
|
+
this.#lc.info?.(
|
|
1160
|
+
"Switching to MemStore because of Firefox private browsing error"
|
|
1161
|
+
);
|
|
1162
|
+
this.#store = new MemStore(this.#name);
|
|
1163
|
+
}
|
|
1164
|
+
return f(this.#store);
|
|
1165
|
+
}
|
|
1166
|
+
throw e;
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
close() {
|
|
1170
|
+
return this.#store.close();
|
|
1171
|
+
}
|
|
1172
|
+
get closed() {
|
|
1173
|
+
return this.#store.closed;
|
|
1174
|
+
}
|
|
1175
|
+
};
|
|
1176
|
+
function isFirefoxPrivateBrowsingError(e) {
|
|
1177
|
+
return isFirefox() && e instanceof DOMException && e.name === "InvalidStateError" && e.message === "A mutation operation was attempted on a database that did not allow mutations.";
|
|
1178
|
+
}
|
|
1179
|
+
function isFirefox() {
|
|
1180
|
+
return localNavigator?.userAgent?.includes("Firefox") ?? false;
|
|
1181
|
+
}
|
|
1182
|
+
function newIDBStoreWithMemFallback(lc, name) {
|
|
1183
|
+
if (isFirefox()) {
|
|
1184
|
+
return new IDBStoreWithMemFallback(lc, name);
|
|
1185
|
+
}
|
|
1186
|
+
return new IDBStore(name);
|
|
1187
|
+
}
|
|
1188
|
+
function dropIDBStoreWithMemFallback(name) {
|
|
1189
|
+
if (!isFirefox()) {
|
|
1190
|
+
return dropIDBStore(name);
|
|
1191
|
+
}
|
|
1192
|
+
try {
|
|
1193
|
+
return dropIDBStore(name);
|
|
1194
|
+
} catch (e) {
|
|
1195
|
+
if (isFirefoxPrivateBrowsingError(e)) {
|
|
1196
|
+
return dropMemStore(name);
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
return promiseVoid;
|
|
1200
|
+
}
|
|
1201
|
+
function dropIDBStore(name) {
|
|
1202
|
+
return new Promise((resolve, reject) => {
|
|
1203
|
+
const req = indexedDB.deleteDatabase(name);
|
|
1204
|
+
req.onsuccess = () => resolve();
|
|
1205
|
+
req.onerror = () => reject(req.error);
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
|
|
789
1209
|
// ../replicache/src/get-kv-store-provider.ts
|
|
790
1210
|
function getKVStoreProvider(lc, kvStore) {
|
|
791
1211
|
switch (kvStore) {
|
|
@@ -816,6 +1236,99 @@ function createLogContext(logLevel = "info", logSinks = [consoleLogSink], contex
|
|
|
816
1236
|
return new LogContext(logLevel, context, logSink);
|
|
817
1237
|
}
|
|
818
1238
|
|
|
1239
|
+
// ../replicache/src/persist/idb-databases-store-db-name.ts
|
|
1240
|
+
var IDB_DATABASES_VERSION = 0;
|
|
1241
|
+
var IDB_DATABASES_DB_NAME = "replicache-dbs-v" + IDB_DATABASES_VERSION;
|
|
1242
|
+
var testNamespace = "";
|
|
1243
|
+
function getIDBDatabasesDBName() {
|
|
1244
|
+
return testNamespace + IDB_DATABASES_DB_NAME;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
// ../replicache/src/persist/idb-databases-store.ts
|
|
1248
|
+
var DBS_KEY = "dbs";
|
|
1249
|
+
var PROFILE_ID_KEY = "profileId";
|
|
1250
|
+
function assertIndexedDBDatabaseRecord(value) {
|
|
1251
|
+
assertObject(value);
|
|
1252
|
+
for (const [name, db] of Object.entries(value)) {
|
|
1253
|
+
assertString(name);
|
|
1254
|
+
assertIndexedDBDatabase(db);
|
|
1255
|
+
assert(name === db.name);
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
function assertIndexedDBDatabase(value) {
|
|
1259
|
+
assertObject(value);
|
|
1260
|
+
assertString(value.name);
|
|
1261
|
+
assertString(value.replicacheName);
|
|
1262
|
+
assertNumber(value.replicacheFormatVersion);
|
|
1263
|
+
assertString(value.schemaVersion);
|
|
1264
|
+
if (value.lastOpenedTimestampMS !== void 0) {
|
|
1265
|
+
assertNumber(value.lastOpenedTimestampMS);
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
var IDBDatabasesStore = class {
|
|
1269
|
+
#kvStore;
|
|
1270
|
+
constructor(createKVStore) {
|
|
1271
|
+
this.#kvStore = createKVStore(getIDBDatabasesDBName());
|
|
1272
|
+
}
|
|
1273
|
+
putDatabase(db) {
|
|
1274
|
+
return this.#putDatabase({ ...db, lastOpenedTimestampMS: Date.now() });
|
|
1275
|
+
}
|
|
1276
|
+
putDatabaseForTesting(db) {
|
|
1277
|
+
return this.#putDatabase(db);
|
|
1278
|
+
}
|
|
1279
|
+
#putDatabase(db) {
|
|
1280
|
+
return withWrite(this.#kvStore, async (write) => {
|
|
1281
|
+
const oldDbRecord = await getDatabases(write);
|
|
1282
|
+
const dbRecord = {
|
|
1283
|
+
...oldDbRecord,
|
|
1284
|
+
[db.name]: db
|
|
1285
|
+
};
|
|
1286
|
+
await write.put(DBS_KEY, dbRecord);
|
|
1287
|
+
return dbRecord;
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
1290
|
+
clearDatabases() {
|
|
1291
|
+
return withWrite(this.#kvStore, (write) => write.del(DBS_KEY));
|
|
1292
|
+
}
|
|
1293
|
+
deleteDatabases(names) {
|
|
1294
|
+
return withWrite(this.#kvStore, async (write) => {
|
|
1295
|
+
const oldDbRecord = await getDatabases(write);
|
|
1296
|
+
const dbRecord = {
|
|
1297
|
+
...oldDbRecord
|
|
1298
|
+
};
|
|
1299
|
+
for (const name of names) {
|
|
1300
|
+
delete dbRecord[name];
|
|
1301
|
+
}
|
|
1302
|
+
await write.put(DBS_KEY, dbRecord);
|
|
1303
|
+
});
|
|
1304
|
+
}
|
|
1305
|
+
getDatabases() {
|
|
1306
|
+
return withRead(this.#kvStore, getDatabases);
|
|
1307
|
+
}
|
|
1308
|
+
close() {
|
|
1309
|
+
return this.#kvStore.close();
|
|
1310
|
+
}
|
|
1311
|
+
getProfileID() {
|
|
1312
|
+
return withWrite(this.#kvStore, async (write) => {
|
|
1313
|
+
let profileId = await write.get(PROFILE_ID_KEY);
|
|
1314
|
+
if (profileId === void 0) {
|
|
1315
|
+
profileId = `p${makeClientID()}`;
|
|
1316
|
+
await write.put(PROFILE_ID_KEY, profileId);
|
|
1317
|
+
}
|
|
1318
|
+
assertString(profileId);
|
|
1319
|
+
return profileId;
|
|
1320
|
+
});
|
|
1321
|
+
}
|
|
1322
|
+
};
|
|
1323
|
+
async function getDatabases(read) {
|
|
1324
|
+
let dbRecord = await read.get(DBS_KEY);
|
|
1325
|
+
if (!dbRecord) {
|
|
1326
|
+
dbRecord = deepFreeze({});
|
|
1327
|
+
}
|
|
1328
|
+
assertIndexedDBDatabaseRecord(dbRecord);
|
|
1329
|
+
return dbRecord;
|
|
1330
|
+
}
|
|
1331
|
+
|
|
819
1332
|
// ../replicache/src/persist/collect-idb-databases.ts
|
|
820
1333
|
var COLLECT_IDB_INTERVAL = 12 * 60 * 60 * 1e3;
|
|
821
1334
|
var INITIAL_COLLECT_IDB_DELAY = 5 * 60 * 1e3;
|
|
@@ -1960,7 +2473,7 @@ var QueryParseError = class extends Error {
|
|
|
1960
2473
|
};
|
|
1961
2474
|
|
|
1962
2475
|
// ../zql/src/query/query-impl.ts
|
|
1963
|
-
import { resolver as
|
|
2476
|
+
import { resolver as resolver3 } from "@rocicorp/resolver";
|
|
1964
2477
|
|
|
1965
2478
|
// ../zero-protocol/src/query-hash.ts
|
|
1966
2479
|
var hashCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -5396,7 +5909,7 @@ var PlannerJoin = class {
|
|
|
5396
5909
|
} else {
|
|
5397
5910
|
costEstimate = {
|
|
5398
5911
|
startupCost: child.startupCost,
|
|
5399
|
-
scanEst: parent.limit === void 0 ? parent.returnedRows : Math.min(
|
|
5912
|
+
scanEst: parent.limit === void 0 ? parent.returnedRows * child.returnedRows : Math.min(
|
|
5400
5913
|
parent.returnedRows * child.returnedRows,
|
|
5401
5914
|
parent.limit / downstreamChildSelectivity
|
|
5402
5915
|
),
|
|
@@ -7117,7 +7630,7 @@ function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
|
|
|
7117
7630
|
const { ast, format, customQueryID } = qi;
|
|
7118
7631
|
const queryHash = qi.hash();
|
|
7119
7632
|
const queryID = customQueryID ? hashOfNameAndArgs(customQueryID.name, customQueryID.args) : queryHash;
|
|
7120
|
-
const queryCompleteResolver =
|
|
7633
|
+
const queryCompleteResolver = resolver3();
|
|
7121
7634
|
let queryComplete = delegate.defaultQueryComplete;
|
|
7122
7635
|
const updateTTL = customQueryID ? (newTTL) => delegate.updateCustomQuery(customQueryID, newTTL) : (newTTL) => delegate.updateServerQuery(ast, newTTL);
|
|
7123
7636
|
const gotCallback = (got, error) => {
|
|
@@ -7197,7 +7710,7 @@ async function runImpl(query, delegate, options) {
|
|
|
7197
7710
|
function preloadImpl(query, delegate, options) {
|
|
7198
7711
|
const qi = delegate.withContext(query);
|
|
7199
7712
|
const ttl = options?.ttl ?? DEFAULT_PRELOAD_TTL_MS;
|
|
7200
|
-
const { resolve, promise: complete } =
|
|
7713
|
+
const { resolve, promise: complete } = resolver3();
|
|
7201
7714
|
const { customQueryID, ast } = qi;
|
|
7202
7715
|
if (customQueryID) {
|
|
7203
7716
|
const cleanup2 = delegate.addCustomQuery(ast, customQueryID, ttl, (got) => {
|
|
@@ -7584,15 +8097,15 @@ var SchemaVersionNotSupported2 = "SchemaVersionNotSupported";
|
|
|
7584
8097
|
|
|
7585
8098
|
// ../zero-client/src/client/zero.ts
|
|
7586
8099
|
import "@rocicorp/logger";
|
|
7587
|
-
import { resolver as
|
|
8100
|
+
import { resolver as resolver11 } from "@rocicorp/resolver";
|
|
7588
8101
|
|
|
7589
8102
|
// ../replicache/src/replicache-impl.ts
|
|
7590
8103
|
import { Lock } from "@rocicorp/lock";
|
|
7591
8104
|
import { consoleLogSink as consoleLogSink2 } from "@rocicorp/logger";
|
|
7592
|
-
import { resolver as
|
|
8105
|
+
import { resolver as resolver7 } from "@rocicorp/resolver";
|
|
7593
8106
|
|
|
7594
8107
|
// ../shared/src/document-visible.ts
|
|
7595
|
-
import { resolver as
|
|
8108
|
+
import { resolver as resolver4 } from "@rocicorp/resolver";
|
|
7596
8109
|
function getDocumentVisibilityWatcher(doc, hiddenIntervalMS, signal) {
|
|
7597
8110
|
return doc ? new DocumentVisibilityWatcherImpl(doc, hiddenIntervalMS, signal) : new DocumentVisibilityWatcherNoDoc();
|
|
7598
8111
|
}
|
|
@@ -7646,7 +8159,7 @@ var DocumentVisibilityWatcherImpl = class {
|
|
|
7646
8159
|
if (this.visibilityState === state) {
|
|
7647
8160
|
return Promise.resolve();
|
|
7648
8161
|
}
|
|
7649
|
-
const { promise, resolve } =
|
|
8162
|
+
const { promise, resolve } = resolver4();
|
|
7650
8163
|
this.#promises.add({ resolve, state });
|
|
7651
8164
|
return promise;
|
|
7652
8165
|
}
|
|
@@ -7695,7 +8208,7 @@ var PushDelegate = class extends ConnectionLoopDelegateImpl {
|
|
|
7695
8208
|
};
|
|
7696
8209
|
|
|
7697
8210
|
// ../replicache/src/connection-loop.ts
|
|
7698
|
-
import { resolver as
|
|
8211
|
+
import { resolver as resolver5 } from "@rocicorp/resolver";
|
|
7699
8212
|
var MIN_DELAY_MS = 30;
|
|
7700
8213
|
var MAX_DELAY_MS = 6e4;
|
|
7701
8214
|
var ConnectionLoop = class {
|
|
@@ -7727,17 +8240,17 @@ var ConnectionLoop = class {
|
|
|
7727
8240
|
// Back to the pending!
|
|
7728
8241
|
// Controls whether the next iteration of the loop will wait at the pending
|
|
7729
8242
|
// state.
|
|
7730
|
-
#pendingResolver =
|
|
8243
|
+
#pendingResolver = resolver5();
|
|
7731
8244
|
/**
|
|
7732
8245
|
* This resolver is used to allow us to skip sleeps when we do send(true)
|
|
7733
8246
|
*/
|
|
7734
|
-
#skipSleepsResolver =
|
|
8247
|
+
#skipSleepsResolver = resolver5();
|
|
7735
8248
|
/**
|
|
7736
8249
|
* Resolver for the next send. Never rejects. Returns an error instead since
|
|
7737
8250
|
* this resolver is used in cases where they might not be someone waiting,
|
|
7738
8251
|
* and we don't want an unhandled promise rejection in that case.
|
|
7739
8252
|
*/
|
|
7740
|
-
#sendResolver =
|
|
8253
|
+
#sendResolver = resolver5();
|
|
7741
8254
|
#delegate;
|
|
7742
8255
|
#closed = false;
|
|
7743
8256
|
#abortSignal = new AbortController();
|
|
@@ -7786,7 +8299,7 @@ var ConnectionLoop = class {
|
|
|
7786
8299
|
}
|
|
7787
8300
|
async run() {
|
|
7788
8301
|
const sendRecords = [];
|
|
7789
|
-
let recoverResolver =
|
|
8302
|
+
let recoverResolver = resolver5();
|
|
7790
8303
|
let lastSendTime;
|
|
7791
8304
|
let counter = 0;
|
|
7792
8305
|
const delegate = this.#delegate;
|
|
@@ -7810,7 +8323,7 @@ var ConnectionLoop = class {
|
|
|
7810
8323
|
await sleepMaybeSkip(delegate.debounceDelay);
|
|
7811
8324
|
if (this.#closed) break;
|
|
7812
8325
|
debug?.("debounced");
|
|
7813
|
-
this.#pendingResolver =
|
|
8326
|
+
this.#pendingResolver = resolver5();
|
|
7814
8327
|
if (counter >= delegate.maxConnections) {
|
|
7815
8328
|
debug?.("Too many request in flight. Waiting until one finishes...");
|
|
7816
8329
|
await this.#waitUntilAvailableConnection();
|
|
@@ -7849,7 +8362,7 @@ var ConnectionLoop = class {
|
|
|
7849
8362
|
try {
|
|
7850
8363
|
lastSendTime = start;
|
|
7851
8364
|
debug?.("Sending request");
|
|
7852
|
-
this.#skipSleepsResolver =
|
|
8365
|
+
this.#skipSleepsResolver = resolver5();
|
|
7853
8366
|
ok = await delegate.invokeSend();
|
|
7854
8367
|
debug?.("Send returned", ok);
|
|
7855
8368
|
} catch (e) {
|
|
@@ -7865,12 +8378,12 @@ var ConnectionLoop = class {
|
|
|
7865
8378
|
sendRecords.push({ duration: Date.now() - start, ok });
|
|
7866
8379
|
if (recovered(sendRecords)) {
|
|
7867
8380
|
recoverResolver.resolve();
|
|
7868
|
-
recoverResolver =
|
|
8381
|
+
recoverResolver = resolver5();
|
|
7869
8382
|
}
|
|
7870
8383
|
counter--;
|
|
7871
8384
|
this.#connectionAvailable();
|
|
7872
8385
|
const sendResolver = this.#sendResolver;
|
|
7873
|
-
this.#sendResolver =
|
|
8386
|
+
this.#sendResolver = resolver5();
|
|
7874
8387
|
if (error) {
|
|
7875
8388
|
sendResolver.resolve({ error });
|
|
7876
8389
|
} else {
|
|
@@ -7891,7 +8404,7 @@ var ConnectionLoop = class {
|
|
|
7891
8404
|
}
|
|
7892
8405
|
}
|
|
7893
8406
|
#waitUntilAvailableConnection() {
|
|
7894
|
-
const { promise, resolve } =
|
|
8407
|
+
const { promise, resolve } = resolver5();
|
|
7895
8408
|
this.#waitingConnectionResolve = resolve;
|
|
7896
8409
|
return promise;
|
|
7897
8410
|
}
|
|
@@ -7941,7 +8454,7 @@ function recovered(sendRecords) {
|
|
|
7941
8454
|
}
|
|
7942
8455
|
|
|
7943
8456
|
// ../replicache/src/dag/lazy-store.ts
|
|
7944
|
-
import { RWLock } from "@rocicorp/lock";
|
|
8457
|
+
import { RWLock as RWLock2 } from "@rocicorp/lock";
|
|
7945
8458
|
var LazyStore = class {
|
|
7946
8459
|
/**
|
|
7947
8460
|
* This lock is used to ensure correct isolation of Reads and Writes.
|
|
@@ -7964,7 +8477,7 @@ var LazyStore = class {
|
|
|
7964
8477
|
* - write `_heads`
|
|
7965
8478
|
* - write `_memOnlyChunks`
|
|
7966
8479
|
*/
|
|
7967
|
-
#rwLock = new
|
|
8480
|
+
#rwLock = new RWLock2();
|
|
7968
8481
|
#heads = /* @__PURE__ */ new Map();
|
|
7969
8482
|
#sourceStore;
|
|
7970
8483
|
#chunkHasher;
|
|
@@ -10020,7 +10533,7 @@ function shouldAbortRefresh(memdagBaseSnapshot, perdagClientGroupBaseSnapshot, p
|
|
|
10020
10533
|
}
|
|
10021
10534
|
|
|
10022
10535
|
// ../replicache/src/process-scheduler.ts
|
|
10023
|
-
import { resolver as
|
|
10536
|
+
import { resolver as resolver6 } from "@rocicorp/resolver";
|
|
10024
10537
|
|
|
10025
10538
|
// ../replicache/src/request-idle.ts
|
|
10026
10539
|
function requestIdle(timeout) {
|
|
@@ -10084,7 +10597,7 @@ var ProcessScheduler = class {
|
|
|
10084
10597
|
if (this.#scheduledResolver) {
|
|
10085
10598
|
return this.#scheduledResolver.promise;
|
|
10086
10599
|
}
|
|
10087
|
-
this.#scheduledResolver =
|
|
10600
|
+
this.#scheduledResolver = resolver6();
|
|
10088
10601
|
void this.#scheduleInternal();
|
|
10089
10602
|
return this.#scheduledResolver.promise;
|
|
10090
10603
|
}
|
|
@@ -10740,7 +11253,7 @@ var ReplicacheImpl = class {
|
|
|
10740
11253
|
newRandomHash,
|
|
10741
11254
|
assertHash
|
|
10742
11255
|
);
|
|
10743
|
-
const readyResolver =
|
|
11256
|
+
const readyResolver = resolver7();
|
|
10744
11257
|
this.#ready = readyResolver.promise;
|
|
10745
11258
|
const { minDelayMs = MIN_DELAY_MS, maxDelayMs = MAX_DELAY_MS } = requestOptions;
|
|
10746
11259
|
this.#requestOptions = { maxDelayMs, minDelayMs };
|
|
@@ -10759,9 +11272,9 @@ var ReplicacheImpl = class {
|
|
|
10759
11272
|
new PushDelegate(this, () => this.#invokePush())
|
|
10760
11273
|
);
|
|
10761
11274
|
this.mutate = this.#registerMutators(mutators);
|
|
10762
|
-
const profileIDResolver =
|
|
11275
|
+
const profileIDResolver = resolver7();
|
|
10763
11276
|
this.#profileIDPromise = profileIDResolver.promise;
|
|
10764
|
-
const clientGroupIDResolver =
|
|
11277
|
+
const clientGroupIDResolver = resolver7();
|
|
10765
11278
|
this.#clientGroupIDPromise = clientGroupIDResolver.promise;
|
|
10766
11279
|
if (false) {
|
|
10767
11280
|
this.#mutationRecovery = new MutationRecovery({
|
|
@@ -10945,7 +11458,7 @@ var ReplicacheImpl = class {
|
|
|
10945
11458
|
*/
|
|
10946
11459
|
async close() {
|
|
10947
11460
|
this.#closed = true;
|
|
10948
|
-
const { promise, resolve } =
|
|
11461
|
+
const { promise, resolve } = resolver7();
|
|
10949
11462
|
closingInstances.set(this.name, promise);
|
|
10950
11463
|
this.#closeAbortController.abort();
|
|
10951
11464
|
getBrowserGlobal("document")?.removeEventListener(
|
|
@@ -12216,7 +12729,7 @@ function send(ws, data) {
|
|
|
12216
12729
|
}
|
|
12217
12730
|
|
|
12218
12731
|
// ../zero-client/src/client/active-clients-manager.ts
|
|
12219
|
-
import { resolver as
|
|
12732
|
+
import { resolver as resolver8 } from "@rocicorp/resolver";
|
|
12220
12733
|
var keyPrefix = "zero-active";
|
|
12221
12734
|
function toLockName(clientGroupID, clientID) {
|
|
12222
12735
|
return `${keyPrefix}/${clientGroupID}/${clientID}`;
|
|
@@ -12246,7 +12759,7 @@ function ignoreAbortError(e) {
|
|
|
12246
12759
|
var ActiveClientsManager = class _ActiveClientsManager {
|
|
12247
12760
|
clientGroupID;
|
|
12248
12761
|
clientID;
|
|
12249
|
-
#resolver =
|
|
12762
|
+
#resolver = resolver8();
|
|
12250
12763
|
#lockManager;
|
|
12251
12764
|
#activeClients = /* @__PURE__ */ new Set();
|
|
12252
12765
|
/**
|
|
@@ -12412,7 +12925,7 @@ var MockClientLockManager = class {
|
|
|
12412
12925
|
};
|
|
12413
12926
|
|
|
12414
12927
|
// ../zero-client/src/client/connection-manager.ts
|
|
12415
|
-
import { resolver as
|
|
12928
|
+
import { resolver as resolver9 } from "@rocicorp/resolver";
|
|
12416
12929
|
var DEFAULT_TIMEOUT_CHECK_INTERVAL_MS = 1e3;
|
|
12417
12930
|
var TERMINAL_STATES = [
|
|
12418
12931
|
connection_status_enum_exports.NeedsAuth,
|
|
@@ -12443,7 +12956,7 @@ var ConnectionManager = class _ConnectionManager extends Subscribable {
|
|
|
12443
12956
|
/**
|
|
12444
12957
|
* Resolver used to signal waiting callers when the state changes.
|
|
12445
12958
|
*/
|
|
12446
|
-
#stateChangeResolver =
|
|
12959
|
+
#stateChangeResolver = resolver9();
|
|
12447
12960
|
constructor(options) {
|
|
12448
12961
|
super();
|
|
12449
12962
|
const now = Date.now();
|
|
@@ -12656,7 +13169,7 @@ var ConnectionManager = class _ConnectionManager extends Subscribable {
|
|
|
12656
13169
|
};
|
|
12657
13170
|
#resolveNextStateWaiters() {
|
|
12658
13171
|
this.#stateChangeResolver.resolve(this.#state);
|
|
12659
|
-
this.#stateChangeResolver =
|
|
13172
|
+
this.#stateChangeResolver = resolver9();
|
|
12660
13173
|
}
|
|
12661
13174
|
#publishState() {
|
|
12662
13175
|
this.notify(this.#state);
|
|
@@ -14830,7 +15343,7 @@ function makeMessage(message, context, logLevel) {
|
|
|
14830
15343
|
}
|
|
14831
15344
|
|
|
14832
15345
|
// ../zero-client/src/client/version.ts
|
|
14833
|
-
var version2 = "0.25.0-canary.
|
|
15346
|
+
var version2 = "0.25.0-canary.6";
|
|
14834
15347
|
|
|
14835
15348
|
// ../zero-client/src/client/log-options.ts
|
|
14836
15349
|
var LevelFilterLogSink = class {
|
|
@@ -15146,7 +15659,7 @@ var State = class {
|
|
|
15146
15659
|
};
|
|
15147
15660
|
|
|
15148
15661
|
// ../zero-client/src/client/mutation-tracker.ts
|
|
15149
|
-
import { resolver as
|
|
15662
|
+
import { resolver as resolver10 } from "@rocicorp/resolver";
|
|
15150
15663
|
var currentEphemeralID = 0;
|
|
15151
15664
|
function nextEphemeralID() {
|
|
15152
15665
|
return ++currentEphemeralID;
|
|
@@ -15187,7 +15700,7 @@ var MutationTracker = class {
|
|
|
15187
15700
|
}
|
|
15188
15701
|
trackMutation() {
|
|
15189
15702
|
const id = nextEphemeralID();
|
|
15190
|
-
const mutationResolver =
|
|
15703
|
+
const mutationResolver = resolver10();
|
|
15191
15704
|
this.#outstandingMutations.set(id, {
|
|
15192
15705
|
resolver: mutationResolver
|
|
15193
15706
|
});
|
|
@@ -15599,7 +16112,10 @@ var MutatorProxy = class {
|
|
|
15599
16112
|
};
|
|
15600
16113
|
}
|
|
15601
16114
|
#normalizeResultPromise(promise, wrapError) {
|
|
15602
|
-
return promise.then(
|
|
16115
|
+
return promise.then(
|
|
16116
|
+
successResult,
|
|
16117
|
+
wrapError
|
|
16118
|
+
);
|
|
15603
16119
|
}
|
|
15604
16120
|
#makeZeroErrorResultDetails(zeroError) {
|
|
15605
16121
|
const { message, ...errorBody } = zeroError.errorBody;
|
|
@@ -16631,13 +17147,13 @@ var Zero = class _Zero {
|
|
|
16631
17147
|
#pendingPullsByRequestID = /* @__PURE__ */ new Map();
|
|
16632
17148
|
#lastMutationIDReceived = 0;
|
|
16633
17149
|
#socket = void 0;
|
|
16634
|
-
#socketResolver =
|
|
17150
|
+
#socketResolver = resolver11();
|
|
16635
17151
|
/**
|
|
16636
17152
|
* Utility promise that resolves when the socket transitions to connected.
|
|
16637
17153
|
* It rejects if we hit an error or timeout before the connected message.
|
|
16638
17154
|
* Used by push/pull helpers to queue work until the connection is usable.
|
|
16639
17155
|
*/
|
|
16640
|
-
#connectResolver =
|
|
17156
|
+
#connectResolver = resolver11();
|
|
16641
17157
|
#closeAbortController = new AbortController();
|
|
16642
17158
|
#visibilityWatcher;
|
|
16643
17159
|
#connectionManager;
|
|
@@ -17669,9 +18185,9 @@ ${error.errorBody.message}`, error);
|
|
|
17669
18185
|
default:
|
|
17670
18186
|
unreachable(connectionStatus);
|
|
17671
18187
|
}
|
|
17672
|
-
this.#socketResolver =
|
|
18188
|
+
this.#socketResolver = resolver11();
|
|
17673
18189
|
lc.debug?.("Creating new connect resolver");
|
|
17674
|
-
this.#connectResolver =
|
|
18190
|
+
this.#connectResolver = resolver11();
|
|
17675
18191
|
this.#messageCount = 0;
|
|
17676
18192
|
this.#connectStart = void 0;
|
|
17677
18193
|
this.#connectedAt = 0;
|
|
@@ -17741,12 +18257,12 @@ ${error.errorBody.message}`, error);
|
|
|
17741
18257
|
const body = pullResponseMessage[1];
|
|
17742
18258
|
lc = lc.withContext("requestID", body.requestID);
|
|
17743
18259
|
lc.debug?.("Handling pull response", body);
|
|
17744
|
-
const
|
|
17745
|
-
if (!
|
|
18260
|
+
const resolver12 = this.#pendingPullsByRequestID.get(body.requestID);
|
|
18261
|
+
if (!resolver12) {
|
|
17746
18262
|
lc.debug?.("No resolver found");
|
|
17747
18263
|
return;
|
|
17748
18264
|
}
|
|
17749
|
-
|
|
18265
|
+
resolver12.resolve(pullResponseMessage[1]);
|
|
17750
18266
|
}
|
|
17751
18267
|
async #pusher(req, requestID) {
|
|
17752
18268
|
assert(req.pushVersion === 1);
|
|
@@ -18015,7 +18531,7 @@ ${error.errorBody.message}`, error);
|
|
|
18015
18531
|
}
|
|
18016
18532
|
];
|
|
18017
18533
|
send(socket, pullRequestMessage);
|
|
18018
|
-
const pullResponseResolver =
|
|
18534
|
+
const pullResponseResolver = resolver11();
|
|
18019
18535
|
this.#pendingPullsByRequestID.set(requestID, pullResponseResolver);
|
|
18020
18536
|
try {
|
|
18021
18537
|
const raceResult = await promiseRace({
|
|
@@ -18090,7 +18606,7 @@ ${error.errorBody.message}`, error);
|
|
|
18090
18606
|
*/
|
|
18091
18607
|
async #ping(lc) {
|
|
18092
18608
|
lc.debug?.("pinging");
|
|
18093
|
-
const { promise, resolve } =
|
|
18609
|
+
const { promise, resolve } = resolver11();
|
|
18094
18610
|
this.#onPong = resolve;
|
|
18095
18611
|
const pingMessage = ["ping", {}];
|
|
18096
18612
|
const t0 = performance.now();
|
|
@@ -18299,6 +18815,7 @@ async function makeActiveClientsManager(clientGroupID, clientID, signal, onDelet
|
|
|
18299
18815
|
|
|
18300
18816
|
export {
|
|
18301
18817
|
getDefaultPuller,
|
|
18818
|
+
IDBNotFoundError,
|
|
18302
18819
|
makeIDBName,
|
|
18303
18820
|
dropDatabase,
|
|
18304
18821
|
dropAllDatabases,
|
|
@@ -18337,4 +18854,4 @@ export {
|
|
|
18337
18854
|
update_needed_reason_type_enum_exports,
|
|
18338
18855
|
Zero
|
|
18339
18856
|
};
|
|
18340
|
-
//# sourceMappingURL=chunk-
|
|
18857
|
+
//# sourceMappingURL=chunk-WWNKZSEE.js.map
|