@rocicorp/zero 0.21.2025070201 → 0.22.2025070200
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-CESYRWV4.js → chunk-43L7S6AU.js} +46 -34
- package/out/{chunk-CESYRWV4.js.map → chunk-43L7S6AU.js.map} +4 -4
- package/out/{chunk-UOYRI2SS.js → chunk-HTNKB2W7.js} +253 -55
- package/out/chunk-HTNKB2W7.js.map +7 -0
- package/out/{chunk-UYT6AWSA.js → chunk-ODTJYJ37.js} +3 -3
- package/out/{inspector-LF6RTN44.js → inspector-WSEHHWA3.js} +7 -3
- package/out/{inspector-LF6RTN44.js.map → inspector-WSEHHWA3.js.map} +2 -2
- package/out/react.js +2 -2
- package/out/shared/src/broadcast-channel.d.ts.map +1 -0
- package/out/solid.js +111 -99
- package/out/solid.js.map +4 -4
- package/out/zero-cache/src/config/zero-config.d.ts +8 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +9 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
- package/out/zero-cache/src/server/change-streamer.js +2 -2
- package/out/zero-cache/src/server/change-streamer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/copy-runner.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/copy-runner.js +4 -3
- package/out/zero-cache/src/services/change-source/pg/copy-runner.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +4 -4
- package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/storer.js +10 -3
- package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +6 -2
- package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +12 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +41 -10
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +4 -6
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +16 -29
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +8 -7
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +7 -0
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/types.js +3 -0
- package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +2 -4
- 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 +144 -48
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +1 -25
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-client/src/client/active-clients-manager.d.ts +49 -0
- package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -0
- package/out/zero-client/src/client/inspector/types.d.ts +4 -2
- package/out/zero-client/src/client/inspector/types.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +2 -1
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.d.ts +4 -0
- package/out/zero-protocol/src/close-connection.d.ts.map +1 -1
- package/out/zero-protocol/src/close-connection.js +2 -0
- package/out/zero-protocol/src/close-connection.js.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +14 -0
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +7 -0
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +3 -1
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.d.ts +12 -4
- package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
- package/out/zero-protocol/src/inspect-down.js +7 -1
- package/out/zero-protocol/src/inspect-down.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +3 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +1 -0
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/table-builder.js +6 -1
- package/out/zero-schema/src/builder/table-builder.js.map +1 -1
- package/out/zero-solid/src/mod.d.ts +2 -2
- package/out/zero-solid/src/mod.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +8 -6
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/{create-query.d.ts → use-query.d.ts} +7 -7
- package/out/zero-solid/src/use-query.d.ts.map +1 -0
- package/out/zero-solid/src/use-zero.d.ts +11 -0
- package/out/zero-solid/src/use-zero.d.ts.map +1 -0
- package/out/zero.js +3 -3
- package/out/zql/src/ivm/take.d.ts.map +1 -1
- package/out/zql/src/ivm/take.js +6 -0
- package/out/zql/src/ivm/take.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +3 -3
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +4 -4
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query.d.ts +1 -1
- package/out/zql/src/query/ttl.d.ts +4 -0
- package/out/zql/src/query/ttl.d.ts.map +1 -1
- package/out/zql/src/query/ttl.js +12 -1
- package/out/zql/src/query/ttl.js.map +1 -1
- package/package.json +3 -3
- package/out/chunk-UOYRI2SS.js.map +0 -7
- package/out/replicache/src/broadcast-channel.d.ts.map +0 -1
- package/out/shared/src/ref-count.d.ts +0 -16
- package/out/shared/src/ref-count.d.ts.map +0 -1
- package/out/zero-solid/src/create-query.d.ts.map +0 -1
- package/out/zero-solid/src/create-zero.d.ts +0 -3
- package/out/zero-solid/src/create-zero.d.ts.map +0 -1
- /package/out/{chunk-UYT6AWSA.js.map → chunk-ODTJYJ37.js.map} +0 -0
- /package/out/{replicache → shared}/src/broadcast-channel.d.ts +0 -0
|
@@ -126,7 +126,7 @@ import {
|
|
|
126
126
|
withWrite,
|
|
127
127
|
withWriteNoImplicitCommit,
|
|
128
128
|
wrapIterable
|
|
129
|
-
} from "./chunk-
|
|
129
|
+
} from "./chunk-43L7S6AU.js";
|
|
130
130
|
import {
|
|
131
131
|
__export
|
|
132
132
|
} from "./chunk-424PT5DM.js";
|
|
@@ -2815,7 +2815,7 @@ async function callPusher(pusher, body, requestID) {
|
|
|
2815
2815
|
// ../replicache/src/mutation-recovery.ts
|
|
2816
2816
|
var MUTATION_RECOVERY_LAZY_STORE_SOURCE_CHUNK_CACHE_SIZE_LIMIT = 10 * 2 ** 20;
|
|
2817
2817
|
|
|
2818
|
-
// ../
|
|
2818
|
+
// ../shared/src/broadcast-channel.ts
|
|
2819
2819
|
var NoopBroadcastChannel = class {
|
|
2820
2820
|
name;
|
|
2821
2821
|
onmessage = null;
|
|
@@ -5636,7 +5636,10 @@ var TableBuilder = class _TableBuilder {
|
|
|
5636
5636
|
from(serverName) {
|
|
5637
5637
|
return new _TableBuilder({
|
|
5638
5638
|
...this.#schema,
|
|
5639
|
-
|
|
5639
|
+
// Strip the "public." schema if specified, as tables in the upstream
|
|
5640
|
+
// "public" schema are created without the schema prefix on the replica.
|
|
5641
|
+
// See liteTableName() in zero-cache/src/types/names.ts
|
|
5642
|
+
serverName: serverName.startsWith("public.") ? serverName.substring("public.".length) : serverName
|
|
5640
5643
|
});
|
|
5641
5644
|
}
|
|
5642
5645
|
columns(columns) {
|
|
@@ -5838,7 +5841,7 @@ var SchemaVersionNotSupported2 = "SchemaVersionNotSupported";
|
|
|
5838
5841
|
|
|
5839
5842
|
// ../zero-client/src/client/zero.ts
|
|
5840
5843
|
import "@rocicorp/logger";
|
|
5841
|
-
import { resolver as
|
|
5844
|
+
import { resolver as resolver9 } from "@rocicorp/resolver";
|
|
5842
5845
|
|
|
5843
5846
|
// ../zero-protocol/src/delete-clients.ts
|
|
5844
5847
|
var deleteClientsBodySchema = valita_exports.union(
|
|
@@ -5897,7 +5900,14 @@ var initConnectionBodySchema = valita_exports.object({
|
|
|
5897
5900
|
desiredQueriesPatch: upQueriesPatchSchema,
|
|
5898
5901
|
clientSchema: clientSchemaSchema.optional(),
|
|
5899
5902
|
deleted: deleteClientsBodySchema.optional(),
|
|
5900
|
-
userPushParams: userPushParamsSchema.optional()
|
|
5903
|
+
userPushParams: userPushParamsSchema.optional(),
|
|
5904
|
+
/**
|
|
5905
|
+
* `activeClients` is an optional array of client IDs that are currently active
|
|
5906
|
+
* in the client group. This is used to inform the server about the clients
|
|
5907
|
+
* that are currently active (aka running, aka alive), so it can inactive
|
|
5908
|
+
* queries from inactive clients.
|
|
5909
|
+
*/
|
|
5910
|
+
activeClients: valita_exports.array(valita_exports.string()).optional()
|
|
5901
5911
|
});
|
|
5902
5912
|
var initConnectionMessageSchema = valita_exports.tuple([
|
|
5903
5913
|
valita_exports.literal("initConnection"),
|
|
@@ -6238,7 +6248,7 @@ var downstreamSchema = valita_exports.union(
|
|
|
6238
6248
|
);
|
|
6239
6249
|
|
|
6240
6250
|
// ../zero-protocol/src/protocol-version.ts
|
|
6241
|
-
var PROTOCOL_VERSION =
|
|
6251
|
+
var PROTOCOL_VERSION = 20;
|
|
6242
6252
|
var MIN_SERVER_SUPPORTED_SYNC_PROTOCOL = 6;
|
|
6243
6253
|
assert(MIN_SERVER_SUPPORTED_SYNC_PROTOCOL < PROTOCOL_VERSION);
|
|
6244
6254
|
|
|
@@ -6335,6 +6345,201 @@ function send(ws, data) {
|
|
|
6335
6345
|
ws.send(JSON.stringify(data));
|
|
6336
6346
|
}
|
|
6337
6347
|
|
|
6348
|
+
// ../zero-client/src/client/active-clients-manager.ts
|
|
6349
|
+
import { resolver as resolver7 } from "@rocicorp/resolver";
|
|
6350
|
+
var keyPrefix = "zero-active";
|
|
6351
|
+
function toLockName(clientGroupID, clientID) {
|
|
6352
|
+
return `${keyPrefix}/${clientGroupID}/${clientID}`;
|
|
6353
|
+
}
|
|
6354
|
+
function toBroadcastChannelName(clientGroupID) {
|
|
6355
|
+
return `${keyPrefix}/${clientGroupID}`;
|
|
6356
|
+
}
|
|
6357
|
+
function fromLockName(lockKey) {
|
|
6358
|
+
if (!lockKey || !lockKey.startsWith(keyPrefix)) {
|
|
6359
|
+
return void 0;
|
|
6360
|
+
}
|
|
6361
|
+
const parts = lockKey.slice(keyPrefix.length).split("/");
|
|
6362
|
+
if (parts.length !== 3) {
|
|
6363
|
+
return void 0;
|
|
6364
|
+
}
|
|
6365
|
+
return {
|
|
6366
|
+
clientGroupID: parts[1],
|
|
6367
|
+
clientID: parts[2]
|
|
6368
|
+
};
|
|
6369
|
+
}
|
|
6370
|
+
function ignoreAbortError(e) {
|
|
6371
|
+
if (e instanceof Error && e.name === "AbortError") {
|
|
6372
|
+
return;
|
|
6373
|
+
}
|
|
6374
|
+
throw e;
|
|
6375
|
+
}
|
|
6376
|
+
var ActiveClientsManager = class _ActiveClientsManager {
|
|
6377
|
+
clientGroupID;
|
|
6378
|
+
clientID;
|
|
6379
|
+
#resolver = resolver7();
|
|
6380
|
+
#lockManager;
|
|
6381
|
+
#activeClients = /* @__PURE__ */ new Set();
|
|
6382
|
+
/**
|
|
6383
|
+
* A callback that is called when a client is added to the client group.
|
|
6384
|
+
* It receives the client ID of the added client.
|
|
6385
|
+
*/
|
|
6386
|
+
onAdd;
|
|
6387
|
+
/**
|
|
6388
|
+
* A callback that is called when a client is deleted from the client group.
|
|
6389
|
+
* It receives the client ID of the deleted client.
|
|
6390
|
+
*/
|
|
6391
|
+
onDelete;
|
|
6392
|
+
/**
|
|
6393
|
+
* Creates an instance of `ActiveClientsManager` for the specified client
|
|
6394
|
+
* group and client ID. It will return a promise that resolves when the
|
|
6395
|
+
* instance is ready to use, which means that it has successfully acquired the
|
|
6396
|
+
* exclusive lock for the client and has retrieved the list of active clients.
|
|
6397
|
+
*/
|
|
6398
|
+
static async create(clientGroupID, clientID, signal) {
|
|
6399
|
+
const instance = new _ActiveClientsManager(clientGroupID, clientID, signal);
|
|
6400
|
+
await instance.#init(clientGroupID, clientID, signal);
|
|
6401
|
+
return instance;
|
|
6402
|
+
}
|
|
6403
|
+
constructor(clientGroupID, clientID, signal) {
|
|
6404
|
+
this.clientGroupID = clientGroupID;
|
|
6405
|
+
this.clientID = clientID;
|
|
6406
|
+
this.#lockManager = getClientLockManager(signal);
|
|
6407
|
+
this.#activeClients.add(clientID);
|
|
6408
|
+
}
|
|
6409
|
+
async #init(clientGroupID, clientID, signal) {
|
|
6410
|
+
const name = toLockName(clientGroupID, clientID);
|
|
6411
|
+
const channel = new bc(toBroadcastChannelName(clientGroupID));
|
|
6412
|
+
channel.addEventListener(
|
|
6413
|
+
"message",
|
|
6414
|
+
(e) => {
|
|
6415
|
+
const client = fromLockName(e.data);
|
|
6416
|
+
if (client?.clientGroupID === this.clientGroupID) {
|
|
6417
|
+
this.#addClient(client.clientID);
|
|
6418
|
+
}
|
|
6419
|
+
},
|
|
6420
|
+
{ signal }
|
|
6421
|
+
);
|
|
6422
|
+
this.#lockManager.request(name, "exclusive", () => this.#resolver.promise).catch(ignoreAbortError);
|
|
6423
|
+
signal.addEventListener(
|
|
6424
|
+
"abort",
|
|
6425
|
+
() => {
|
|
6426
|
+
this.#lockManager.release(name, () => this.#resolver.resolve());
|
|
6427
|
+
channel.close();
|
|
6428
|
+
},
|
|
6429
|
+
{ once: true }
|
|
6430
|
+
);
|
|
6431
|
+
for (const clientID2 of await this.#getActiveClients()) {
|
|
6432
|
+
if (clientID2 !== this.clientID) {
|
|
6433
|
+
this.#addClient(clientID2);
|
|
6434
|
+
}
|
|
6435
|
+
}
|
|
6436
|
+
if (!signal.aborted) {
|
|
6437
|
+
channel.postMessage(name);
|
|
6438
|
+
}
|
|
6439
|
+
}
|
|
6440
|
+
get activeClients() {
|
|
6441
|
+
return this.#activeClients;
|
|
6442
|
+
}
|
|
6443
|
+
async #getActiveClients() {
|
|
6444
|
+
const activeClients = /* @__PURE__ */ new Set();
|
|
6445
|
+
for await (const lockName of this.#lockManager.queryExclusive()) {
|
|
6446
|
+
const client = fromLockName(lockName);
|
|
6447
|
+
if (client?.clientGroupID === this.clientGroupID) {
|
|
6448
|
+
activeClients.add(client.clientID);
|
|
6449
|
+
}
|
|
6450
|
+
}
|
|
6451
|
+
return activeClients;
|
|
6452
|
+
}
|
|
6453
|
+
/**
|
|
6454
|
+
* This gets called when a new client is added to the client group.
|
|
6455
|
+
*
|
|
6456
|
+
* It will request a shared lock for the client, and when the exclusive lock
|
|
6457
|
+
* is released, it will notify that the client has been deactivated.
|
|
6458
|
+
*/
|
|
6459
|
+
#addSharedLockForOtherClient(clientID) {
|
|
6460
|
+
const name = toLockName(this.clientGroupID, clientID);
|
|
6461
|
+
this.#lockManager.request(name, "shared", () => this.#removeClient(clientID)).catch(ignoreAbortError);
|
|
6462
|
+
}
|
|
6463
|
+
#addClient(clientID) {
|
|
6464
|
+
if (!this.#activeClients.has(clientID)) {
|
|
6465
|
+
this.#activeClients.add(clientID);
|
|
6466
|
+
this.#addSharedLockForOtherClient(clientID);
|
|
6467
|
+
this.onAdd?.(clientID);
|
|
6468
|
+
}
|
|
6469
|
+
}
|
|
6470
|
+
#removeClient(clientID) {
|
|
6471
|
+
if (this.#activeClients.delete(clientID)) {
|
|
6472
|
+
this.onDelete?.(clientID);
|
|
6473
|
+
}
|
|
6474
|
+
}
|
|
6475
|
+
};
|
|
6476
|
+
function getClientLockManager(signal) {
|
|
6477
|
+
const locks = getBrowserGlobal("navigator")?.locks;
|
|
6478
|
+
if (locks) {
|
|
6479
|
+
return new NativeClientLockManager(locks, signal);
|
|
6480
|
+
}
|
|
6481
|
+
return new MockClientLockManager();
|
|
6482
|
+
}
|
|
6483
|
+
var NativeClientLockManager = class {
|
|
6484
|
+
#locks;
|
|
6485
|
+
#signal;
|
|
6486
|
+
constructor(locks, signal) {
|
|
6487
|
+
this.#locks = locks;
|
|
6488
|
+
this.#signal = signal;
|
|
6489
|
+
}
|
|
6490
|
+
request(name, mode, fn) {
|
|
6491
|
+
return this.#locks.request(name, { mode, signal: this.#signal }, fn);
|
|
6492
|
+
}
|
|
6493
|
+
release(_name, fn) {
|
|
6494
|
+
fn();
|
|
6495
|
+
}
|
|
6496
|
+
async *queryExclusive() {
|
|
6497
|
+
const snapshot = await this.#locks.query();
|
|
6498
|
+
for (const lock of [
|
|
6499
|
+
...snapshot.held ?? [],
|
|
6500
|
+
...snapshot.pending ?? []
|
|
6501
|
+
]) {
|
|
6502
|
+
if (lock.mode === "exclusive" && lock.name) {
|
|
6503
|
+
yield lock.name;
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
}
|
|
6507
|
+
};
|
|
6508
|
+
var mockLockNames = /* @__PURE__ */ new Set();
|
|
6509
|
+
var mockListeners = /* @__PURE__ */ new Set();
|
|
6510
|
+
var MockClientLockManager = class {
|
|
6511
|
+
#listeners = /* @__PURE__ */ new Set();
|
|
6512
|
+
request(name, mode, fn) {
|
|
6513
|
+
if (mode === "exclusive") {
|
|
6514
|
+
mockLockNames.add(name);
|
|
6515
|
+
} else {
|
|
6516
|
+
mode;
|
|
6517
|
+
const listener = (removed) => {
|
|
6518
|
+
if (removed === name) {
|
|
6519
|
+
mockListeners.delete(listener);
|
|
6520
|
+
return fn();
|
|
6521
|
+
}
|
|
6522
|
+
};
|
|
6523
|
+
mockListeners.add(listener);
|
|
6524
|
+
this.#listeners.add(listener);
|
|
6525
|
+
}
|
|
6526
|
+
return Promise.resolve();
|
|
6527
|
+
}
|
|
6528
|
+
release(name, fn) {
|
|
6529
|
+
mockLockNames.delete(name);
|
|
6530
|
+
for (const listener of mockListeners) {
|
|
6531
|
+
listener(name);
|
|
6532
|
+
}
|
|
6533
|
+
for (const listener of this.#listeners) {
|
|
6534
|
+
mockListeners.delete(listener);
|
|
6535
|
+
}
|
|
6536
|
+
fn();
|
|
6537
|
+
}
|
|
6538
|
+
async *queryExclusive() {
|
|
6539
|
+
yield* mockLockNames;
|
|
6540
|
+
}
|
|
6541
|
+
};
|
|
6542
|
+
|
|
6338
6543
|
// ../zero-client/src/client/connection-state-enum.ts
|
|
6339
6544
|
var Disconnected = 0;
|
|
6340
6545
|
var Connecting = 1;
|
|
@@ -8328,7 +8533,7 @@ function makeMessage(message, context, logLevel) {
|
|
|
8328
8533
|
}
|
|
8329
8534
|
|
|
8330
8535
|
// ../zero-client/src/client/version.ts
|
|
8331
|
-
var version2 = "0.
|
|
8536
|
+
var version2 = "0.22.2025070200";
|
|
8332
8537
|
|
|
8333
8538
|
// ../zero-client/src/client/log-options.ts
|
|
8334
8539
|
var LevelFilterLogSink = class {
|
|
@@ -8623,7 +8828,7 @@ var State = class {
|
|
|
8623
8828
|
};
|
|
8624
8829
|
|
|
8625
8830
|
// ../zero-client/src/client/mutation-tracker.ts
|
|
8626
|
-
import { resolver as
|
|
8831
|
+
import { resolver as resolver8 } from "@rocicorp/resolver";
|
|
8627
8832
|
var transientPushErrorTypes = [
|
|
8628
8833
|
"zeroPusher",
|
|
8629
8834
|
"http",
|
|
@@ -8653,7 +8858,7 @@ var MutationTracker = class {
|
|
|
8653
8858
|
}
|
|
8654
8859
|
trackMutation() {
|
|
8655
8860
|
const id = nextEphemeralID();
|
|
8656
|
-
const mutationResolver =
|
|
8861
|
+
const mutationResolver = resolver8();
|
|
8657
8862
|
this.#outstandingMutations.set(id, {
|
|
8658
8863
|
resolver: mutationResolver
|
|
8659
8864
|
});
|
|
@@ -9681,12 +9886,12 @@ var Zero = class _Zero {
|
|
|
9681
9886
|
};
|
|
9682
9887
|
#zeroContext;
|
|
9683
9888
|
queryDelegate;
|
|
9684
|
-
#connectResolver =
|
|
9889
|
+
#connectResolver = resolver9();
|
|
9685
9890
|
#pendingPullsByRequestID = /* @__PURE__ */ new Map();
|
|
9686
9891
|
#lastMutationIDReceived = 0;
|
|
9687
9892
|
#socket = void 0;
|
|
9688
|
-
#socketResolver =
|
|
9689
|
-
#connectionStateChangeResolver =
|
|
9893
|
+
#socketResolver = resolver9();
|
|
9894
|
+
#connectionStateChangeResolver = resolver9();
|
|
9690
9895
|
/**
|
|
9691
9896
|
* This resolver is only used for rejections. It is awaited in the connected
|
|
9692
9897
|
* state (including when waiting for a pong). It is rejected when we get an
|
|
@@ -9697,13 +9902,14 @@ var Zero = class _Zero {
|
|
|
9697
9902
|
#visibilityWatcher;
|
|
9698
9903
|
// We use an accessor pair to allow the subclass to override the setter.
|
|
9699
9904
|
#connectionState = Disconnected;
|
|
9905
|
+
#activeClientsManager;
|
|
9700
9906
|
#setConnectionState(state) {
|
|
9701
9907
|
if (state === this.#connectionState) {
|
|
9702
9908
|
return;
|
|
9703
9909
|
}
|
|
9704
9910
|
this.#connectionState = state;
|
|
9705
9911
|
this.#connectionStateChangeResolver.resolve(state);
|
|
9706
|
-
this.#connectionStateChangeResolver =
|
|
9912
|
+
this.#connectionStateChangeResolver = resolver9();
|
|
9707
9913
|
if (false) {
|
|
9708
9914
|
asTestZero(this)[onSetConnectionStateSymbol]?.(state);
|
|
9709
9915
|
}
|
|
@@ -9890,6 +10096,12 @@ var Zero = class _Zero {
|
|
|
9890
10096
|
this.userID = userID;
|
|
9891
10097
|
this.#lc = lc.withContext("clientID", rep.clientID);
|
|
9892
10098
|
this.#mutationTracker.clientID = rep.clientID;
|
|
10099
|
+
this.#activeClientsManager = makeActiveClientsManager(
|
|
10100
|
+
rep.clientGroupID,
|
|
10101
|
+
this.clientID,
|
|
10102
|
+
this.#closeAbortController.signal,
|
|
10103
|
+
(clientID) => this.#deleteClientsManager.onClientsDeleted([clientID], [])
|
|
10104
|
+
);
|
|
9893
10105
|
const onUpdateNeededCallback = (reason, serverErrorMsg) => {
|
|
9894
10106
|
if (onUpdateNeeded) {
|
|
9895
10107
|
onUpdateNeeded(reason);
|
|
@@ -10121,21 +10333,12 @@ var Zero = class _Zero {
|
|
|
10121
10333
|
const lc = this.#lc.withContext("close");
|
|
10122
10334
|
lc.debug?.("Closing Zero instance. Stack:", new Error().stack);
|
|
10123
10335
|
if (this.#connectionState !== Disconnected) {
|
|
10124
|
-
let closeReason = JSON.stringify([
|
|
10125
|
-
"closeConnection",
|
|
10126
|
-
[]
|
|
10127
|
-
]);
|
|
10128
|
-
if (closeReason.length > 123) {
|
|
10129
|
-
lc.warn?.("Close reason is too long. Removing it.");
|
|
10130
|
-
closeReason = "";
|
|
10131
|
-
}
|
|
10132
10336
|
this.#disconnect(
|
|
10133
10337
|
lc,
|
|
10134
10338
|
{
|
|
10135
10339
|
client: "ClientClosed"
|
|
10136
10340
|
},
|
|
10137
|
-
CLOSE_CODE_NORMAL
|
|
10138
|
-
closeReason
|
|
10341
|
+
CLOSE_CODE_NORMAL
|
|
10139
10342
|
);
|
|
10140
10343
|
}
|
|
10141
10344
|
lc.debug?.("Aborting closeAbortController due to close()");
|
|
@@ -10145,15 +10348,6 @@ var Zero = class _Zero {
|
|
|
10145
10348
|
this.#unexpose();
|
|
10146
10349
|
return ret;
|
|
10147
10350
|
}
|
|
10148
|
-
#onPageHide = (e) => {
|
|
10149
|
-
if (e.persisted) {
|
|
10150
|
-
this.#lc.debug?.("Ignoring pagehide event because it was persisted");
|
|
10151
|
-
} else {
|
|
10152
|
-
this.#lc.debug?.("Closing client because we got a clean close");
|
|
10153
|
-
this.close().catch(() => {
|
|
10154
|
-
});
|
|
10155
|
-
}
|
|
10156
|
-
};
|
|
10157
10351
|
#onMessage = (e) => {
|
|
10158
10352
|
const lc = this.#lc;
|
|
10159
10353
|
lc.debug?.("received message", e.data);
|
|
@@ -10414,7 +10608,8 @@ var Zero = class _Zero {
|
|
|
10414
10608
|
lc,
|
|
10415
10609
|
this.#options.push,
|
|
10416
10610
|
this.#options.maxHeaderLength,
|
|
10417
|
-
additionalConnectParams
|
|
10611
|
+
additionalConnectParams,
|
|
10612
|
+
await this.#activeClientsManager
|
|
10418
10613
|
);
|
|
10419
10614
|
if (this.closed) {
|
|
10420
10615
|
return;
|
|
@@ -10426,10 +10621,6 @@ var Zero = class _Zero {
|
|
|
10426
10621
|
ws.addEventListener("close", this.#onClose);
|
|
10427
10622
|
this.#socket = ws;
|
|
10428
10623
|
this.#socketResolver.resolve(ws);
|
|
10429
|
-
getBrowserGlobal("window")?.addEventListener?.(
|
|
10430
|
-
"pagehide",
|
|
10431
|
-
this.#onPageHide
|
|
10432
|
-
);
|
|
10433
10624
|
try {
|
|
10434
10625
|
lc.debug?.("Waiting for connection to be acknowledged");
|
|
10435
10626
|
await this.#connectResolver.promise;
|
|
@@ -10444,7 +10635,7 @@ var Zero = class _Zero {
|
|
|
10444
10635
|
);
|
|
10445
10636
|
}
|
|
10446
10637
|
}
|
|
10447
|
-
#disconnect(lc, reason, closeCode
|
|
10638
|
+
#disconnect(lc, reason, closeCode) {
|
|
10448
10639
|
if (this.#connectionState === Connecting) {
|
|
10449
10640
|
this.#connectErrorCount++;
|
|
10450
10641
|
}
|
|
@@ -10488,9 +10679,9 @@ var Zero = class _Zero {
|
|
|
10488
10679
|
lc.error?.("disconnect() called while disconnected");
|
|
10489
10680
|
break;
|
|
10490
10681
|
}
|
|
10491
|
-
this.#socketResolver =
|
|
10682
|
+
this.#socketResolver = resolver9();
|
|
10492
10683
|
lc.debug?.("Creating new connect resolver");
|
|
10493
|
-
this.#connectResolver =
|
|
10684
|
+
this.#connectResolver = resolver9();
|
|
10494
10685
|
this.#setConnectionState(Disconnected);
|
|
10495
10686
|
this.#messageCount = 0;
|
|
10496
10687
|
this.#connectStart = void 0;
|
|
@@ -10498,14 +10689,10 @@ var Zero = class _Zero {
|
|
|
10498
10689
|
this.#socket?.removeEventListener("message", this.#onMessage);
|
|
10499
10690
|
this.#socket?.removeEventListener("open", this.#onOpen);
|
|
10500
10691
|
this.#socket?.removeEventListener("close", this.#onClose);
|
|
10501
|
-
this.#socket?.close(closeCode
|
|
10692
|
+
this.#socket?.close(closeCode);
|
|
10502
10693
|
this.#socket = void 0;
|
|
10503
10694
|
this.#lastMutationIDSent = NULL_LAST_MUTATION_ID_SENT;
|
|
10504
10695
|
this.#pokeHandler.handleDisconnect();
|
|
10505
|
-
getBrowserGlobal("window")?.removeEventListener?.(
|
|
10506
|
-
"pagehide",
|
|
10507
|
-
this.#onPageHide
|
|
10508
|
-
);
|
|
10509
10696
|
}
|
|
10510
10697
|
#handlePokeStart(_lc, pokeMessage) {
|
|
10511
10698
|
this.#abortPingTimeout();
|
|
@@ -10541,12 +10728,12 @@ var Zero = class _Zero {
|
|
|
10541
10728
|
const body = pullResponseMessage[1];
|
|
10542
10729
|
lc = lc.withContext("requestID", body.requestID);
|
|
10543
10730
|
lc.debug?.("Handling pull response", body);
|
|
10544
|
-
const
|
|
10545
|
-
if (!
|
|
10731
|
+
const resolver10 = this.#pendingPullsByRequestID.get(body.requestID);
|
|
10732
|
+
if (!resolver10) {
|
|
10546
10733
|
lc.debug?.("No resolver found");
|
|
10547
10734
|
return;
|
|
10548
10735
|
}
|
|
10549
|
-
|
|
10736
|
+
resolver10.resolve(pullResponseMessage[1]);
|
|
10550
10737
|
}
|
|
10551
10738
|
async #pusher(req, requestID) {
|
|
10552
10739
|
assert(req.pushVersion === 1);
|
|
@@ -10677,7 +10864,7 @@ var Zero = class _Zero {
|
|
|
10677
10864
|
PING_INTERVAL_MS,
|
|
10678
10865
|
controller.signal
|
|
10679
10866
|
);
|
|
10680
|
-
this.#rejectMessageError =
|
|
10867
|
+
this.#rejectMessageError = resolver9();
|
|
10681
10868
|
const PING = 0;
|
|
10682
10869
|
const HIDDEN = 2;
|
|
10683
10870
|
const raceResult = await promiseRace([
|
|
@@ -10787,7 +10974,7 @@ var Zero = class _Zero {
|
|
|
10787
10974
|
}
|
|
10788
10975
|
];
|
|
10789
10976
|
send(socket, pullRequestMessage);
|
|
10790
|
-
const pullResponseResolver =
|
|
10977
|
+
const pullResponseResolver = resolver9();
|
|
10791
10978
|
this.#pendingPullsByRequestID.set(requestID, pullResponseResolver);
|
|
10792
10979
|
try {
|
|
10793
10980
|
const TIMEOUT = 0;
|
|
@@ -10845,7 +11032,7 @@ var Zero = class _Zero {
|
|
|
10845
11032
|
*/
|
|
10846
11033
|
async #ping(lc, messageErrorRejectionPromise) {
|
|
10847
11034
|
lc.debug?.("pinging");
|
|
10848
|
-
const { promise, resolve } =
|
|
11035
|
+
const { promise, resolve } = resolver9();
|
|
10849
11036
|
this.#onPong = resolve;
|
|
10850
11037
|
const pingMessage = ["ping", {}];
|
|
10851
11038
|
const t0 = performance.now();
|
|
@@ -10891,7 +11078,7 @@ var Zero = class _Zero {
|
|
|
10891
11078
|
*/
|
|
10892
11079
|
async inspect() {
|
|
10893
11080
|
BUNDLE_SIZE: {
|
|
10894
|
-
const m = await import("./inspector-
|
|
11081
|
+
const m = await import("./inspector-WSEHHWA3.js");
|
|
10895
11082
|
return m.newInspector(this.#rep, this.#schema, async () => {
|
|
10896
11083
|
await this.#connectResolver.promise;
|
|
10897
11084
|
return this.#socket;
|
|
@@ -10899,7 +11086,7 @@ var Zero = class _Zero {
|
|
|
10899
11086
|
}
|
|
10900
11087
|
}
|
|
10901
11088
|
};
|
|
10902
|
-
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, maxHeaderLength = 1024 * 8, additionalConnectParams) {
|
|
11089
|
+
async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushParams, maxHeaderLength = 1024 * 8, additionalConnectParams, activeClientsManager) {
|
|
10903
11090
|
const url = new URL(
|
|
10904
11091
|
appendPath(socketOrigin, `/sync/v${PROTOCOL_VERSION}/connect`)
|
|
10905
11092
|
);
|
|
@@ -10928,6 +11115,7 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
10928
11115
|
const queriesPatchP = rep.query((tx) => queryManager.getQueriesPatch(tx));
|
|
10929
11116
|
let deletedClients = await deleteClientsManager.getDeletedClients();
|
|
10930
11117
|
let queriesPatch = await queriesPatchP;
|
|
11118
|
+
const { activeClients } = activeClientsManager;
|
|
10931
11119
|
let secProtocol = encodeSecProtocols(
|
|
10932
11120
|
[
|
|
10933
11121
|
"initConnection",
|
|
@@ -10937,7 +11125,8 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
10937
11125
|
// The clientSchema only needs to be sent for the very first request.
|
|
10938
11126
|
// Henceforth it is stored with the CVR and verified automatically.
|
|
10939
11127
|
...baseCookie === null ? { clientSchema } : {},
|
|
10940
|
-
userPushParams
|
|
11128
|
+
userPushParams,
|
|
11129
|
+
activeClients: [...activeClients]
|
|
10941
11130
|
}
|
|
10942
11131
|
],
|
|
10943
11132
|
auth
|
|
@@ -10998,6 +11187,15 @@ var CloseError = class extends Error {
|
|
|
10998
11187
|
};
|
|
10999
11188
|
function assertValidRunOptions2(_options) {
|
|
11000
11189
|
}
|
|
11190
|
+
async function makeActiveClientsManager(clientGroupID, clientID, signal, onDelete) {
|
|
11191
|
+
const manager = await ActiveClientsManager.create(
|
|
11192
|
+
await clientGroupID,
|
|
11193
|
+
clientID,
|
|
11194
|
+
signal
|
|
11195
|
+
);
|
|
11196
|
+
manager.onDelete = onDelete;
|
|
11197
|
+
return manager;
|
|
11198
|
+
}
|
|
11001
11199
|
|
|
11002
11200
|
export {
|
|
11003
11201
|
getDefaultPuller,
|
|
@@ -11018,4 +11216,4 @@ export {
|
|
|
11018
11216
|
update_needed_reason_type_enum_exports,
|
|
11019
11217
|
Zero
|
|
11020
11218
|
};
|
|
11021
|
-
//# sourceMappingURL=chunk-
|
|
11219
|
+
//# sourceMappingURL=chunk-HTNKB2W7.js.map
|