@rocicorp/zero 0.14.2025021100 → 0.14.2025021201
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-OPWNICE2.js → chunk-M54D33ZI.js} +333 -477
- package/out/chunk-M54D33ZI.js.map +7 -0
- package/out/replicache/src/persist/client-gc.d.ts.map +1 -1
- package/out/replicache/src/persist/client-group-gc.d.ts +2 -5
- package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
- package/out/replicache/src/persist/clients.d.ts +1 -0
- package/out/replicache/src/persist/clients.d.ts.map +1 -1
- package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
- package/out/replicache/src/replicache-impl.d.ts +1 -1
- package/out/replicache/src/replicache-impl.d.ts.map +1 -1
- package/out/shared/src/queue.d.ts +0 -15
- package/out/shared/src/queue.d.ts.map +1 -1
- package/out/shared/src/queue.js +0 -23
- package/out/shared/src/queue.js.map +1 -1
- package/out/shared/src/resolved-promises.d.ts +0 -4
- package/out/shared/src/resolved-promises.d.ts.map +1 -1
- package/out/shared/src/resolved-promises.js +0 -4
- package/out/shared/src/resolved-promises.js.map +1 -1
- package/out/solid.js +1 -1
- package/out/zero-cache/src/auth/load-schema.d.ts +3 -5
- package/out/zero-cache/src/auth/load-schema.d.ts.map +1 -1
- package/out/zero-cache/src/auth/load-schema.js +13 -19
- package/out/zero-cache/src/auth/load-schema.js.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts +2 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +6 -11
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +205 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +22 -0
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/multi/config.d.ts +0 -4
- package/out/zero-cache/src/server/multi/config.d.ts.map +1 -1
- package/out/zero-cache/src/server/multi/config.js +0 -4
- package/out/zero-cache/src/server/multi/config.js.map +1 -1
- package/out/zero-cache/src/server/multi/run-worker.d.ts.map +1 -1
- package/out/zero-cache/src/server/multi/run-worker.js +2 -4
- package/out/zero-cache/src/server/multi/run-worker.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +3 -3
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/change-source/custom/change-source.js +0 -4
- package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/init.js +1 -3
- package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +1 -2
- package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js +0 -16
- package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts +2 -1
- package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
- package/out/zero-cache/src/services/mutagen/mutagen.js +2 -2
- package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +4 -6
- package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/client-handler.js +11 -49
- package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +1 -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 +3 -18
- 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 +8 -8
- 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 -14
- package/out/zero-cache/src/services/view-syncer/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 +0 -8
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +0 -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 +16 -40
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/types/pg.d.ts +0 -6
- package/out/zero-cache/src/types/pg.d.ts.map +1 -1
- package/out/zero-cache/src/types/pg.js +2 -15
- package/out/zero-cache/src/types/pg.js.map +1 -1
- package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connection.js +7 -13
- package/out/zero-cache/src/workers/connection.js.map +1 -1
- package/out/zero-client/src/client/crud.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.d.ts +1 -1
- package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts +0 -1
- package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.d.ts +1 -6
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.d.ts +0 -2
- package/out/zero-protocol/src/connect.d.ts.map +1 -1
- package/out/zero-protocol/src/connect.js +0 -1
- package/out/zero-protocol/src/connect.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +0 -3
- package/out/zero-protocol/src/down.d.ts.map +1 -1
- package/out/zero-protocol/src/down.js +1 -2
- package/out/zero-protocol/src/down.js.map +1 -1
- package/out/zero-protocol/src/poke.d.ts +0 -2
- package/out/zero-protocol/src/poke.d.ts.map +1 -1
- package/out/zero-protocol/src/poke.js +0 -4
- package/out/zero-protocol/src/poke.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +3 -11
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +4 -14
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +0 -1
- package/out/zero-protocol/src/up.d.ts.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.d.ts +1 -0
- package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
- package/out/zero-schema/src/builder/schema-builder.js +49 -0
- package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
- package/out/zero-schema/src/compiled-permissions.d.ts +19 -23
- package/out/zero-schema/src/compiled-permissions.d.ts.map +1 -1
- package/out/zero-schema/src/compiled-permissions.js +4 -7
- package/out/zero-schema/src/compiled-permissions.js.map +1 -1
- package/out/zero-schema/src/mod.d.ts +1 -1
- package/out/zero-schema/src/mod.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.d.ts.map +1 -1
- package/out/zero.js +1 -1
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +2 -6
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/query/{static-query.d.ts → auth-query.d.ts} +3 -7
- package/out/zql/src/query/auth-query.d.ts.map +1 -0
- package/out/zql/src/query/{static-query.js → auth-query.js} +5 -9
- package/out/zql/src/query/auth-query.js.map +1 -0
- package/out/zql/src/query/query-impl.d.ts +2 -2
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +8 -6
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/package.json +3 -4
- package/out/chunk-OPWNICE2.js.map +0 -7
- package/out/replicache/src/deleted-clients.d.ts +0 -20
- package/out/replicache/src/deleted-clients.d.ts.map +0 -1
- package/out/zero/src/deploy-permissions.d.ts +0 -3
- package/out/zero/src/deploy-permissions.d.ts.map +0 -1
- package/out/zero/src/deploy-permissions.js +0 -3
- package/out/zero/src/deploy-permissions.js.map +0 -1
- package/out/zero-cache/src/scripts/deploy-permissions.d.ts +0 -2
- package/out/zero-cache/src/scripts/deploy-permissions.d.ts.map +0 -1
- package/out/zero-cache/src/scripts/deploy-permissions.js +0 -122
- package/out/zero-cache/src/scripts/deploy-permissions.js.map +0 -1
- package/out/zero-client/src/client/delete-clients-manager.d.ts +0 -34
- package/out/zero-client/src/client/delete-clients-manager.d.ts.map +0 -1
- package/out/zql/src/query/static-query.d.ts.map +0 -1
- package/out/zql/src/query/static-query.js.map +0 -1
|
@@ -397,8 +397,6 @@ var promiseTrue = Promise.resolve(true);
|
|
|
397
397
|
var promiseFalse = Promise.resolve(false);
|
|
398
398
|
var promiseUndefined = Promise.resolve(void 0);
|
|
399
399
|
var promiseVoid = Promise.resolve();
|
|
400
|
-
var promiseNever = new Promise(() => {
|
|
401
|
-
});
|
|
402
400
|
|
|
403
401
|
// ../replicache/src/frozen-json.ts
|
|
404
402
|
var deepFrozenObjects = /* @__PURE__ */ new WeakSet();
|
|
@@ -725,7 +723,7 @@ var AbortError = class extends Error {
|
|
|
725
723
|
// ../shared/src/sleep.ts
|
|
726
724
|
import { resolver as resolver2 } from "@rocicorp/resolver";
|
|
727
725
|
var promiseVoid2 = Promise.resolve();
|
|
728
|
-
var
|
|
726
|
+
var promiseNever = new Promise(() => void 0);
|
|
729
727
|
function sleep(ms, signal) {
|
|
730
728
|
const newAbortError = () => new AbortError("Aborted");
|
|
731
729
|
if (signal?.aborted) {
|
|
@@ -751,7 +749,7 @@ function sleep(ms, signal) {
|
|
|
751
749
|
}
|
|
752
750
|
function sleepWithAbort(ms, signal) {
|
|
753
751
|
if (ms === 0) {
|
|
754
|
-
return [promiseVoid2,
|
|
752
|
+
return [promiseVoid2, promiseNever];
|
|
755
753
|
}
|
|
756
754
|
const { promise: abortedPromise, resolve: abortedResolve } = resolver2();
|
|
757
755
|
const sleepPromise = new Promise((resolve) => {
|
|
@@ -1418,40 +1416,6 @@ var WriteImpl2 = class extends ReadImpl2 {
|
|
|
1418
1416
|
}
|
|
1419
1417
|
};
|
|
1420
1418
|
|
|
1421
|
-
// ../replicache/src/deleted-clients.ts
|
|
1422
|
-
var DELETED_CLIENTS_HEAD_NAME = "deleted-clients";
|
|
1423
|
-
async function setDeletedClients(dagWrite, deletedClients) {
|
|
1424
|
-
const normalized = normalize(deletedClients);
|
|
1425
|
-
const chunkData = deepFreeze(normalized);
|
|
1426
|
-
const chunk = dagWrite.createChunk(chunkData, []);
|
|
1427
|
-
await dagWrite.putChunk(chunk);
|
|
1428
|
-
await dagWrite.setHead(DELETED_CLIENTS_HEAD_NAME, chunk.hash);
|
|
1429
|
-
return normalized;
|
|
1430
|
-
}
|
|
1431
|
-
var deletedClientsSchema = valita_exports.array(valita_exports.string());
|
|
1432
|
-
async function getDeletedClients(dagRead) {
|
|
1433
|
-
const hash2 = await dagRead.getHead(DELETED_CLIENTS_HEAD_NAME);
|
|
1434
|
-
if (hash2 === void 0) {
|
|
1435
|
-
return [];
|
|
1436
|
-
}
|
|
1437
|
-
const chunk = await dagRead.mustGetChunk(hash2);
|
|
1438
|
-
return parse(chunk.data, deletedClientsSchema);
|
|
1439
|
-
}
|
|
1440
|
-
async function addDeletedClients(dagWrite, clientIDs) {
|
|
1441
|
-
const deletedClients = await getDeletedClients(dagWrite);
|
|
1442
|
-
return setDeletedClients(dagWrite, [...deletedClients, ...clientIDs]);
|
|
1443
|
-
}
|
|
1444
|
-
async function removeDeletedClients(dagWrite, clientIDs) {
|
|
1445
|
-
const deletedClients = await getDeletedClients(dagWrite);
|
|
1446
|
-
const newDeletedClients = deletedClients.filter(
|
|
1447
|
-
(clientID) => !clientIDs.includes(clientID)
|
|
1448
|
-
);
|
|
1449
|
-
return setDeletedClients(dagWrite, newDeletedClients);
|
|
1450
|
-
}
|
|
1451
|
-
function normalize(arr) {
|
|
1452
|
-
return [...new Set(arr)].sort();
|
|
1453
|
-
}
|
|
1454
|
-
|
|
1455
1419
|
// ../replicache/src/format-version-enum.ts
|
|
1456
1420
|
var DD31 = 5;
|
|
1457
1421
|
var V6 = 6;
|
|
@@ -3095,13 +3059,13 @@ var DataNodeImpl = class extends NodeImpl {
|
|
|
3095
3059
|
}
|
|
3096
3060
|
}
|
|
3097
3061
|
};
|
|
3098
|
-
function readonlySplice(
|
|
3099
|
-
const arr =
|
|
3062
|
+
function readonlySplice(array9, start, deleteCount, ...items) {
|
|
3063
|
+
const arr = array9.slice(0, start);
|
|
3100
3064
|
for (let i = 0; i < items.length; i++) {
|
|
3101
3065
|
arr.push(items[i]);
|
|
3102
3066
|
}
|
|
3103
|
-
for (let i = start + deleteCount; i <
|
|
3104
|
-
arr.push(
|
|
3067
|
+
for (let i = start + deleteCount; i < array9.length; i++) {
|
|
3068
|
+
arr.push(array9[i]);
|
|
3105
3069
|
}
|
|
3106
3070
|
return arr;
|
|
3107
3071
|
}
|
|
@@ -6009,8 +5973,7 @@ function gcClients(clientID, dagStore, clientMaxInactiveTime, onClientsDeleted)
|
|
|
6009
5973
|
return clients;
|
|
6010
5974
|
}
|
|
6011
5975
|
await setClients(newClients, dagWrite);
|
|
6012
|
-
|
|
6013
|
-
onClientsDeleted(normalized);
|
|
5976
|
+
onClientsDeleted(deletedClients);
|
|
6014
5977
|
return newClients;
|
|
6015
5978
|
});
|
|
6016
5979
|
}
|
|
@@ -6018,11 +5981,11 @@ function gcClients(clientID, dagStore, clientMaxInactiveTime, onClientsDeleted)
|
|
|
6018
5981
|
// ../replicache/src/persist/client-group-gc.ts
|
|
6019
5982
|
var GC_INTERVAL_MS = 5 * 60 * 1e3;
|
|
6020
5983
|
var latestGCUpdate2;
|
|
6021
|
-
function initClientGroupGC(dagStore,
|
|
5984
|
+
function initClientGroupGC(dagStore, lc, signal) {
|
|
6022
5985
|
initBgIntervalProcess(
|
|
6023
5986
|
"ClientGroupGC",
|
|
6024
5987
|
() => {
|
|
6025
|
-
latestGCUpdate2 = gcClientGroups(dagStore
|
|
5988
|
+
latestGCUpdate2 = gcClientGroups(dagStore);
|
|
6026
5989
|
return latestGCUpdate2;
|
|
6027
5990
|
},
|
|
6028
5991
|
() => GC_INTERVAL_MS,
|
|
@@ -6030,16 +5993,17 @@ function initClientGroupGC(dagStore, enableMutationRecovery, lc, signal) {
|
|
|
6030
5993
|
signal
|
|
6031
5994
|
);
|
|
6032
5995
|
}
|
|
6033
|
-
function gcClientGroups(dagStore
|
|
5996
|
+
function gcClientGroups(dagStore) {
|
|
6034
5997
|
return withWrite(dagStore, async (tx) => {
|
|
6035
5998
|
const clients = await getClients(tx);
|
|
6036
5999
|
const clientGroupIDs = /* @__PURE__ */ new Set();
|
|
6037
6000
|
for (const client of clients.values()) {
|
|
6001
|
+
assertClientV6(client);
|
|
6038
6002
|
clientGroupIDs.add(client.clientGroupID);
|
|
6039
6003
|
}
|
|
6040
6004
|
const clientGroups = /* @__PURE__ */ new Map();
|
|
6041
6005
|
for (const [clientGroupID, clientGroup] of await getClientGroups(tx)) {
|
|
6042
|
-
if (clientGroupIDs.has(clientGroupID) ||
|
|
6006
|
+
if (clientGroupIDs.has(clientGroupID) || clientGroupHasPendingMutations(clientGroup)) {
|
|
6043
6007
|
clientGroups.set(clientGroupID, clientGroup);
|
|
6044
6008
|
}
|
|
6045
6009
|
}
|
|
@@ -7056,14 +7020,14 @@ function diffBinarySearch(diff2, prefix, compareKey) {
|
|
|
7056
7020
|
}
|
|
7057
7021
|
|
|
7058
7022
|
// ../shared/src/random-values.ts
|
|
7059
|
-
function getNonCryptoRandomValues(
|
|
7060
|
-
if (
|
|
7023
|
+
function getNonCryptoRandomValues(array9) {
|
|
7024
|
+
if (array9 === null) {
|
|
7061
7025
|
throw new TypeError("array cannot be null");
|
|
7062
7026
|
}
|
|
7063
|
-
for (let i = 0; i <
|
|
7064
|
-
|
|
7027
|
+
for (let i = 0; i < array9.length; i++) {
|
|
7028
|
+
array9[i] = Math.floor(Math.random() * 256);
|
|
7065
7029
|
}
|
|
7066
|
-
return
|
|
7030
|
+
return array9;
|
|
7067
7031
|
}
|
|
7068
7032
|
|
|
7069
7033
|
// ../replicache/src/sync/request-id.ts
|
|
@@ -7280,7 +7244,8 @@ var ReplicacheImpl = class {
|
|
|
7280
7244
|
enableScheduledRefresh = true,
|
|
7281
7245
|
enablePullAndPushInOpen = true,
|
|
7282
7246
|
enableClientGroupForking = true,
|
|
7283
|
-
onClientsDeleted = () => {
|
|
7247
|
+
onClientsDeleted = (clientIDs) => {
|
|
7248
|
+
this.#lc.info?.("ClientIDs deleted", clientIDs);
|
|
7284
7249
|
}
|
|
7285
7250
|
} = implOptions;
|
|
7286
7251
|
this.auth = auth ?? "";
|
|
@@ -7424,7 +7389,7 @@ var ReplicacheImpl = class {
|
|
|
7424
7389
|
this.#lc,
|
|
7425
7390
|
signal
|
|
7426
7391
|
);
|
|
7427
|
-
initClientGroupGC(this.perdag,
|
|
7392
|
+
initClientGroupGC(this.perdag, this.#lc, signal);
|
|
7428
7393
|
initNewClientChannel(
|
|
7429
7394
|
this.name,
|
|
7430
7395
|
this.idbName,
|
|
@@ -8286,14 +8251,11 @@ async function collectIDBDatabases(idbDatabasesStore, now, maxAge, kvDropStore,
|
|
|
8286
8251
|
)
|
|
8287
8252
|
);
|
|
8288
8253
|
const dbNamesToRemove = [];
|
|
8289
|
-
const dbNamesToKeep = [];
|
|
8290
8254
|
const clientIDsToRemove = [];
|
|
8291
8255
|
for (const [dbName, [canCollect, clientIDs]] of collectResults) {
|
|
8292
8256
|
if (canCollect) {
|
|
8293
8257
|
dbNamesToRemove.push(dbName);
|
|
8294
8258
|
clientIDsToRemove.push(...clientIDs);
|
|
8295
|
-
} else {
|
|
8296
|
-
dbNamesToKeep.push(dbName);
|
|
8297
8259
|
}
|
|
8298
8260
|
}
|
|
8299
8261
|
const { errors } = await dropDatabases(
|
|
@@ -8305,15 +8267,7 @@ async function collectIDBDatabases(idbDatabasesStore, now, maxAge, kvDropStore,
|
|
|
8305
8267
|
throw errors[0];
|
|
8306
8268
|
}
|
|
8307
8269
|
if (clientIDsToRemove.length) {
|
|
8308
|
-
|
|
8309
|
-
for (const name of dbNamesToKeep) {
|
|
8310
|
-
await withWrite(newDagStore(name), async (dagWrite) => {
|
|
8311
|
-
toRemoveIncludingOld.push(
|
|
8312
|
-
...await addDeletedClients(dagWrite, clientIDsToRemove)
|
|
8313
|
-
);
|
|
8314
|
-
});
|
|
8315
|
-
}
|
|
8316
|
-
onClientsDeleted(normalize(toRemoveIncludingOld));
|
|
8270
|
+
onClientsDeleted(clientIDsToRemove);
|
|
8317
8271
|
}
|
|
8318
8272
|
}
|
|
8319
8273
|
async function dropDatabaseInternal(name, idbDatabasesStore, kvDropStore) {
|
|
@@ -8391,8 +8345,7 @@ function canDatabaseBeCollectedAndGetDeletedClientIDs(enableMutationRecovery, pe
|
|
|
8391
8345
|
}
|
|
8392
8346
|
}
|
|
8393
8347
|
const clients = await getClients(read);
|
|
8394
|
-
|
|
8395
|
-
return [true, [...clients.keys(), ...oldDeletedClients]];
|
|
8348
|
+
return [true, [...clients.keys()]];
|
|
8396
8349
|
});
|
|
8397
8350
|
}
|
|
8398
8351
|
|
|
@@ -8421,6 +8374,87 @@ function one(...args) {
|
|
|
8421
8374
|
}));
|
|
8422
8375
|
}
|
|
8423
8376
|
|
|
8377
|
+
// ../zero-schema/src/name-mapper.ts
|
|
8378
|
+
function clientToServer(tables) {
|
|
8379
|
+
return createMapperFrom("client", tables);
|
|
8380
|
+
}
|
|
8381
|
+
function serverToClient(tables) {
|
|
8382
|
+
return createMapperFrom("server", tables);
|
|
8383
|
+
}
|
|
8384
|
+
function createMapperFrom(src, tables) {
|
|
8385
|
+
const mapping = new Map(
|
|
8386
|
+
Object.entries(tables).map(
|
|
8387
|
+
([tableName, { serverName: serverTableName, columns }]) => {
|
|
8388
|
+
let allColumnsSame = true;
|
|
8389
|
+
const names = {};
|
|
8390
|
+
for (const [name, { serverName }] of Object.entries(columns)) {
|
|
8391
|
+
if (serverName && serverName !== name) {
|
|
8392
|
+
allColumnsSame = false;
|
|
8393
|
+
}
|
|
8394
|
+
if (src === "client") {
|
|
8395
|
+
names[name] = serverName ?? name;
|
|
8396
|
+
} else {
|
|
8397
|
+
names[serverName ?? name] = name;
|
|
8398
|
+
}
|
|
8399
|
+
}
|
|
8400
|
+
return [
|
|
8401
|
+
src === "client" ? tableName : serverTableName ?? tableName,
|
|
8402
|
+
{
|
|
8403
|
+
tableName: src === "client" ? serverTableName ?? tableName : tableName,
|
|
8404
|
+
columns: names,
|
|
8405
|
+
allColumnsSame
|
|
8406
|
+
}
|
|
8407
|
+
];
|
|
8408
|
+
}
|
|
8409
|
+
)
|
|
8410
|
+
);
|
|
8411
|
+
return new NameMapper(mapping);
|
|
8412
|
+
}
|
|
8413
|
+
var NameMapper = class {
|
|
8414
|
+
#tables = /* @__PURE__ */ new Map();
|
|
8415
|
+
constructor(tables) {
|
|
8416
|
+
this.#tables = tables;
|
|
8417
|
+
}
|
|
8418
|
+
#getTable(src, ctx) {
|
|
8419
|
+
const table2 = this.#tables.get(src);
|
|
8420
|
+
if (!table2) {
|
|
8421
|
+
throw new Error(
|
|
8422
|
+
`unknown table "${src}" ${!ctx ? "" : `in ${JSON.stringify(ctx)}`}`
|
|
8423
|
+
);
|
|
8424
|
+
}
|
|
8425
|
+
return table2;
|
|
8426
|
+
}
|
|
8427
|
+
tableName(src, context) {
|
|
8428
|
+
return this.#getTable(src, context).tableName;
|
|
8429
|
+
}
|
|
8430
|
+
columnName(table2, src, ctx) {
|
|
8431
|
+
const dst = this.#getTable(table2, ctx).columns[src];
|
|
8432
|
+
if (!dst) {
|
|
8433
|
+
throw new Error(
|
|
8434
|
+
`unknown column "${src}" of "${table2}" table ${!ctx ? "" : `in ${JSON.stringify(ctx)}`}`
|
|
8435
|
+
);
|
|
8436
|
+
}
|
|
8437
|
+
return dst;
|
|
8438
|
+
}
|
|
8439
|
+
row(table2, row) {
|
|
8440
|
+
const dest = this.#getTable(table2);
|
|
8441
|
+
const { allColumnsSame, columns } = dest;
|
|
8442
|
+
if (allColumnsSame) {
|
|
8443
|
+
return row;
|
|
8444
|
+
}
|
|
8445
|
+
const clientRow = {};
|
|
8446
|
+
for (const col in row) {
|
|
8447
|
+
clientRow[columns[col] ?? col] = row[col];
|
|
8448
|
+
}
|
|
8449
|
+
return clientRow;
|
|
8450
|
+
}
|
|
8451
|
+
columns(table2, cols) {
|
|
8452
|
+
const dest = this.#getTable(table2);
|
|
8453
|
+
const { allColumnsSame, columns } = dest;
|
|
8454
|
+
return cols === void 0 || allColumnsSame ? cols : cols.map((col) => columns[col] ?? col);
|
|
8455
|
+
}
|
|
8456
|
+
};
|
|
8457
|
+
|
|
8424
8458
|
// ../zero-schema/src/builder/table-builder.ts
|
|
8425
8459
|
function table(name) {
|
|
8426
8460
|
return new TableBuilder({
|
|
@@ -8429,7 +8463,7 @@ function table(name) {
|
|
|
8429
8463
|
primaryKey: []
|
|
8430
8464
|
});
|
|
8431
8465
|
}
|
|
8432
|
-
function
|
|
8466
|
+
function string7() {
|
|
8433
8467
|
return new ColumnBuilder({
|
|
8434
8468
|
type: "string",
|
|
8435
8469
|
optional: false,
|
|
@@ -8937,12 +8971,157 @@ function compareUTF8MaybeNull(a, b) {
|
|
|
8937
8971
|
return 0;
|
|
8938
8972
|
}
|
|
8939
8973
|
|
|
8940
|
-
// ../
|
|
8941
|
-
var
|
|
8942
|
-
|
|
8943
|
-
|
|
8944
|
-
|
|
8945
|
-
|
|
8974
|
+
// ../zql/src/query/expression.ts
|
|
8975
|
+
var ExpressionBuilder = class {
|
|
8976
|
+
#exists;
|
|
8977
|
+
constructor(exists) {
|
|
8978
|
+
this.#exists = exists;
|
|
8979
|
+
this.exists = this.exists.bind(this);
|
|
8980
|
+
}
|
|
8981
|
+
get eb() {
|
|
8982
|
+
return this;
|
|
8983
|
+
}
|
|
8984
|
+
cmp(field, opOrValue, value) {
|
|
8985
|
+
return cmp(field, opOrValue, value);
|
|
8986
|
+
}
|
|
8987
|
+
cmpLit(left, op, right) {
|
|
8988
|
+
return {
|
|
8989
|
+
type: "simple",
|
|
8990
|
+
left: isParameterReference(left) ? left[toStaticParam]() : { type: "literal", value: left },
|
|
8991
|
+
right: isParameterReference(right) ? right[toStaticParam]() : { type: "literal", value: right },
|
|
8992
|
+
op
|
|
8993
|
+
};
|
|
8994
|
+
}
|
|
8995
|
+
and = and;
|
|
8996
|
+
or = or;
|
|
8997
|
+
not = not;
|
|
8998
|
+
exists(relationship, cb) {
|
|
8999
|
+
return this.#exists(relationship, cb);
|
|
9000
|
+
}
|
|
9001
|
+
};
|
|
9002
|
+
function and(...conditions) {
|
|
9003
|
+
const expressions = filterTrue(filterUndefined(conditions));
|
|
9004
|
+
if (expressions.length === 1) {
|
|
9005
|
+
return expressions[0];
|
|
9006
|
+
}
|
|
9007
|
+
if (expressions.some(isAlwaysFalse)) {
|
|
9008
|
+
return FALSE;
|
|
9009
|
+
}
|
|
9010
|
+
return { type: "and", conditions: expressions };
|
|
9011
|
+
}
|
|
9012
|
+
function or(...conditions) {
|
|
9013
|
+
const expressions = filterFalse(filterUndefined(conditions));
|
|
9014
|
+
if (expressions.length === 1) {
|
|
9015
|
+
return expressions[0];
|
|
9016
|
+
}
|
|
9017
|
+
if (expressions.some(isAlwaysTrue)) {
|
|
9018
|
+
return TRUE;
|
|
9019
|
+
}
|
|
9020
|
+
return { type: "or", conditions: expressions };
|
|
9021
|
+
}
|
|
9022
|
+
function not(expression) {
|
|
9023
|
+
switch (expression.type) {
|
|
9024
|
+
case "and":
|
|
9025
|
+
return {
|
|
9026
|
+
type: "or",
|
|
9027
|
+
conditions: expression.conditions.map(not)
|
|
9028
|
+
};
|
|
9029
|
+
case "or":
|
|
9030
|
+
return {
|
|
9031
|
+
type: "and",
|
|
9032
|
+
conditions: expression.conditions.map(not)
|
|
9033
|
+
};
|
|
9034
|
+
case "correlatedSubquery":
|
|
9035
|
+
return {
|
|
9036
|
+
type: "correlatedSubquery",
|
|
9037
|
+
related: expression.related,
|
|
9038
|
+
op: negateOperator(expression.op)
|
|
9039
|
+
};
|
|
9040
|
+
case "simple":
|
|
9041
|
+
return {
|
|
9042
|
+
type: "simple",
|
|
9043
|
+
op: negateOperator(expression.op),
|
|
9044
|
+
left: expression.left,
|
|
9045
|
+
right: expression.right
|
|
9046
|
+
};
|
|
9047
|
+
}
|
|
9048
|
+
}
|
|
9049
|
+
function cmp(field, opOrValue, value) {
|
|
9050
|
+
let op;
|
|
9051
|
+
if (value === void 0) {
|
|
9052
|
+
value = opOrValue;
|
|
9053
|
+
op = "=";
|
|
9054
|
+
} else {
|
|
9055
|
+
op = opOrValue;
|
|
9056
|
+
}
|
|
9057
|
+
return {
|
|
9058
|
+
type: "simple",
|
|
9059
|
+
left: { type: "column", name: field },
|
|
9060
|
+
right: isParameterReference(value) ? value[toStaticParam]() : { type: "literal", value },
|
|
9061
|
+
op
|
|
9062
|
+
};
|
|
9063
|
+
}
|
|
9064
|
+
function isParameterReference(value) {
|
|
9065
|
+
return value !== null && typeof value === "object" && value[toStaticParam];
|
|
9066
|
+
}
|
|
9067
|
+
var TRUE = {
|
|
9068
|
+
type: "and",
|
|
9069
|
+
conditions: []
|
|
9070
|
+
};
|
|
9071
|
+
var FALSE = {
|
|
9072
|
+
type: "or",
|
|
9073
|
+
conditions: []
|
|
9074
|
+
};
|
|
9075
|
+
function isAlwaysTrue(condition) {
|
|
9076
|
+
return condition.type === "and" && condition.conditions.length === 0;
|
|
9077
|
+
}
|
|
9078
|
+
function isAlwaysFalse(condition) {
|
|
9079
|
+
return condition.type === "or" && condition.conditions.length === 0;
|
|
9080
|
+
}
|
|
9081
|
+
function flatten(type, conditions) {
|
|
9082
|
+
const flattened2 = [];
|
|
9083
|
+
for (const c of conditions) {
|
|
9084
|
+
if (c.type === type) {
|
|
9085
|
+
flattened2.push(...c.conditions);
|
|
9086
|
+
} else {
|
|
9087
|
+
flattened2.push(c);
|
|
9088
|
+
}
|
|
9089
|
+
}
|
|
9090
|
+
return flattened2;
|
|
9091
|
+
}
|
|
9092
|
+
var negateSimpleOperatorMap = {
|
|
9093
|
+
["="]: "!=",
|
|
9094
|
+
["!="]: "=",
|
|
9095
|
+
["<"]: ">=",
|
|
9096
|
+
[">"]: "<=",
|
|
9097
|
+
[">="]: "<",
|
|
9098
|
+
["<="]: ">",
|
|
9099
|
+
["IN"]: "NOT IN",
|
|
9100
|
+
["NOT IN"]: "IN",
|
|
9101
|
+
["LIKE"]: "NOT LIKE",
|
|
9102
|
+
["NOT LIKE"]: "LIKE",
|
|
9103
|
+
["ILIKE"]: "NOT ILIKE",
|
|
9104
|
+
["NOT ILIKE"]: "ILIKE",
|
|
9105
|
+
["IS"]: "IS NOT",
|
|
9106
|
+
["IS NOT"]: "IS"
|
|
9107
|
+
};
|
|
9108
|
+
var negateOperatorMap = {
|
|
9109
|
+
...negateSimpleOperatorMap,
|
|
9110
|
+
["EXISTS"]: "NOT EXISTS",
|
|
9111
|
+
["NOT EXISTS"]: "EXISTS"
|
|
9112
|
+
};
|
|
9113
|
+
function negateOperator(op) {
|
|
9114
|
+
return must(negateOperatorMap[op]);
|
|
9115
|
+
}
|
|
9116
|
+
function filterUndefined(array9) {
|
|
9117
|
+
return array9.filter((e) => e !== void 0);
|
|
9118
|
+
}
|
|
9119
|
+
function filterTrue(conditions) {
|
|
9120
|
+
return conditions.filter((c) => !isAlwaysTrue(c));
|
|
9121
|
+
}
|
|
9122
|
+
function filterFalse(conditions) {
|
|
9123
|
+
return conditions.filter((c) => !isAlwaysFalse(c));
|
|
9124
|
+
}
|
|
8946
9125
|
|
|
8947
9126
|
// ../zql/src/query/query-impl.ts
|
|
8948
9127
|
import { resolver as resolver7 } from "@rocicorp/resolver";
|
|
@@ -9440,11 +9619,11 @@ var Join = class {
|
|
|
9440
9619
|
const childSchema = child.getSchema();
|
|
9441
9620
|
this.#schema = {
|
|
9442
9621
|
...parentSchema,
|
|
9622
|
+
isHidden: hidden,
|
|
9443
9623
|
relationships: {
|
|
9444
9624
|
...parentSchema.relationships,
|
|
9445
9625
|
[relationshipName]: {
|
|
9446
9626
|
...childSchema,
|
|
9447
|
-
isHidden: hidden,
|
|
9448
9627
|
system
|
|
9449
9628
|
}
|
|
9450
9629
|
}
|
|
@@ -9507,15 +9686,7 @@ var Join = class {
|
|
|
9507
9686
|
});
|
|
9508
9687
|
break;
|
|
9509
9688
|
case "child":
|
|
9510
|
-
this.#output.push(
|
|
9511
|
-
type: "child",
|
|
9512
|
-
node: this.#processParentNode(
|
|
9513
|
-
change.node.row,
|
|
9514
|
-
change.node.relationships,
|
|
9515
|
-
"fetch"
|
|
9516
|
-
),
|
|
9517
|
-
child: change.child
|
|
9518
|
-
});
|
|
9689
|
+
this.#output.push(change);
|
|
9519
9690
|
break;
|
|
9520
9691
|
case "edit": {
|
|
9521
9692
|
if (rowEqualsForCompoundKey(
|
|
@@ -10393,11 +10564,11 @@ function createPredicateImpl(rhs, operator) {
|
|
|
10393
10564
|
case "LIKE":
|
|
10394
10565
|
return getLikePredicate(rhs, "");
|
|
10395
10566
|
case "NOT LIKE":
|
|
10396
|
-
return
|
|
10567
|
+
return not2(getLikePredicate(rhs, ""));
|
|
10397
10568
|
case "ILIKE":
|
|
10398
10569
|
return getLikePredicate(rhs, "i");
|
|
10399
10570
|
case "NOT ILIKE":
|
|
10400
|
-
return
|
|
10571
|
+
return not2(getLikePredicate(rhs, "i"));
|
|
10401
10572
|
case "IN": {
|
|
10402
10573
|
assert(Array.isArray(rhs));
|
|
10403
10574
|
const set = new Set(rhs);
|
|
@@ -10413,7 +10584,7 @@ function createPredicateImpl(rhs, operator) {
|
|
|
10413
10584
|
throw new Error(`Unexpected operator: ${operator}`);
|
|
10414
10585
|
}
|
|
10415
10586
|
}
|
|
10416
|
-
function
|
|
10587
|
+
function not2(f) {
|
|
10417
10588
|
return (lhs) => !f(lhs);
|
|
10418
10589
|
}
|
|
10419
10590
|
function transformFilters(filters) {
|
|
@@ -10784,158 +10955,6 @@ var ArrayView = class {
|
|
|
10784
10955
|
}
|
|
10785
10956
|
};
|
|
10786
10957
|
|
|
10787
|
-
// ../zql/src/query/expression.ts
|
|
10788
|
-
var ExpressionBuilder = class {
|
|
10789
|
-
#exists;
|
|
10790
|
-
constructor(exists) {
|
|
10791
|
-
this.#exists = exists;
|
|
10792
|
-
this.exists = this.exists.bind(this);
|
|
10793
|
-
}
|
|
10794
|
-
get eb() {
|
|
10795
|
-
return this;
|
|
10796
|
-
}
|
|
10797
|
-
cmp(field, opOrValue, value) {
|
|
10798
|
-
return cmp(field, opOrValue, value);
|
|
10799
|
-
}
|
|
10800
|
-
cmpLit(left, op, right) {
|
|
10801
|
-
return {
|
|
10802
|
-
type: "simple",
|
|
10803
|
-
left: isParameterReference(left) ? left[toStaticParam]() : { type: "literal", value: left },
|
|
10804
|
-
right: isParameterReference(right) ? right[toStaticParam]() : { type: "literal", value: right },
|
|
10805
|
-
op
|
|
10806
|
-
};
|
|
10807
|
-
}
|
|
10808
|
-
and = and;
|
|
10809
|
-
or = or;
|
|
10810
|
-
not = not2;
|
|
10811
|
-
exists(relationship, cb) {
|
|
10812
|
-
return this.#exists(relationship, cb);
|
|
10813
|
-
}
|
|
10814
|
-
};
|
|
10815
|
-
function and(...conditions) {
|
|
10816
|
-
const expressions = filterTrue(filterUndefined(conditions));
|
|
10817
|
-
if (expressions.length === 1) {
|
|
10818
|
-
return expressions[0];
|
|
10819
|
-
}
|
|
10820
|
-
if (expressions.some(isAlwaysFalse)) {
|
|
10821
|
-
return FALSE;
|
|
10822
|
-
}
|
|
10823
|
-
return { type: "and", conditions: expressions };
|
|
10824
|
-
}
|
|
10825
|
-
function or(...conditions) {
|
|
10826
|
-
const expressions = filterFalse(filterUndefined(conditions));
|
|
10827
|
-
if (expressions.length === 1) {
|
|
10828
|
-
return expressions[0];
|
|
10829
|
-
}
|
|
10830
|
-
if (expressions.some(isAlwaysTrue)) {
|
|
10831
|
-
return TRUE;
|
|
10832
|
-
}
|
|
10833
|
-
return { type: "or", conditions: expressions };
|
|
10834
|
-
}
|
|
10835
|
-
function not2(expression) {
|
|
10836
|
-
switch (expression.type) {
|
|
10837
|
-
case "and":
|
|
10838
|
-
return {
|
|
10839
|
-
type: "or",
|
|
10840
|
-
conditions: expression.conditions.map(not2)
|
|
10841
|
-
};
|
|
10842
|
-
case "or":
|
|
10843
|
-
return {
|
|
10844
|
-
type: "and",
|
|
10845
|
-
conditions: expression.conditions.map(not2)
|
|
10846
|
-
};
|
|
10847
|
-
case "correlatedSubquery":
|
|
10848
|
-
return {
|
|
10849
|
-
type: "correlatedSubquery",
|
|
10850
|
-
related: expression.related,
|
|
10851
|
-
op: negateOperator(expression.op)
|
|
10852
|
-
};
|
|
10853
|
-
case "simple":
|
|
10854
|
-
return {
|
|
10855
|
-
type: "simple",
|
|
10856
|
-
op: negateOperator(expression.op),
|
|
10857
|
-
left: expression.left,
|
|
10858
|
-
right: expression.right
|
|
10859
|
-
};
|
|
10860
|
-
}
|
|
10861
|
-
}
|
|
10862
|
-
function cmp(field, opOrValue, value) {
|
|
10863
|
-
let op;
|
|
10864
|
-
if (value === void 0) {
|
|
10865
|
-
value = opOrValue;
|
|
10866
|
-
op = "=";
|
|
10867
|
-
} else {
|
|
10868
|
-
op = opOrValue;
|
|
10869
|
-
}
|
|
10870
|
-
return {
|
|
10871
|
-
type: "simple",
|
|
10872
|
-
left: { type: "column", name: field },
|
|
10873
|
-
right: isParameterReference(value) ? value[toStaticParam]() : { type: "literal", value },
|
|
10874
|
-
op
|
|
10875
|
-
};
|
|
10876
|
-
}
|
|
10877
|
-
function isParameterReference(value) {
|
|
10878
|
-
return value !== null && typeof value === "object" && value[toStaticParam];
|
|
10879
|
-
}
|
|
10880
|
-
var TRUE = {
|
|
10881
|
-
type: "and",
|
|
10882
|
-
conditions: []
|
|
10883
|
-
};
|
|
10884
|
-
var FALSE = {
|
|
10885
|
-
type: "or",
|
|
10886
|
-
conditions: []
|
|
10887
|
-
};
|
|
10888
|
-
function isAlwaysTrue(condition) {
|
|
10889
|
-
return condition.type === "and" && condition.conditions.length === 0;
|
|
10890
|
-
}
|
|
10891
|
-
function isAlwaysFalse(condition) {
|
|
10892
|
-
return condition.type === "or" && condition.conditions.length === 0;
|
|
10893
|
-
}
|
|
10894
|
-
function flatten(type, conditions) {
|
|
10895
|
-
const flattened2 = [];
|
|
10896
|
-
for (const c of conditions) {
|
|
10897
|
-
if (c.type === type) {
|
|
10898
|
-
flattened2.push(...c.conditions);
|
|
10899
|
-
} else {
|
|
10900
|
-
flattened2.push(c);
|
|
10901
|
-
}
|
|
10902
|
-
}
|
|
10903
|
-
return flattened2;
|
|
10904
|
-
}
|
|
10905
|
-
var negateSimpleOperatorMap = {
|
|
10906
|
-
["="]: "!=",
|
|
10907
|
-
["!="]: "=",
|
|
10908
|
-
["<"]: ">=",
|
|
10909
|
-
[">"]: "<=",
|
|
10910
|
-
[">="]: "<",
|
|
10911
|
-
["<="]: ">",
|
|
10912
|
-
["IN"]: "NOT IN",
|
|
10913
|
-
["NOT IN"]: "IN",
|
|
10914
|
-
["LIKE"]: "NOT LIKE",
|
|
10915
|
-
["NOT LIKE"]: "LIKE",
|
|
10916
|
-
["ILIKE"]: "NOT ILIKE",
|
|
10917
|
-
["NOT ILIKE"]: "ILIKE",
|
|
10918
|
-
["IS"]: "IS NOT",
|
|
10919
|
-
["IS NOT"]: "IS"
|
|
10920
|
-
};
|
|
10921
|
-
var negateOperatorMap = {
|
|
10922
|
-
...negateSimpleOperatorMap,
|
|
10923
|
-
["EXISTS"]: "NOT EXISTS",
|
|
10924
|
-
["NOT EXISTS"]: "EXISTS"
|
|
10925
|
-
};
|
|
10926
|
-
function negateOperator(op) {
|
|
10927
|
-
return must(negateOperatorMap[op]);
|
|
10928
|
-
}
|
|
10929
|
-
function filterUndefined(array12) {
|
|
10930
|
-
return array12.filter((e) => e !== void 0);
|
|
10931
|
-
}
|
|
10932
|
-
function filterTrue(conditions) {
|
|
10933
|
-
return conditions.filter((c) => !isAlwaysTrue(c));
|
|
10934
|
-
}
|
|
10935
|
-
function filterFalse(conditions) {
|
|
10936
|
-
return conditions.filter((c) => !isAlwaysFalse(c));
|
|
10937
|
-
}
|
|
10938
|
-
|
|
10939
10958
|
// ../zql/src/query/dnf.ts
|
|
10940
10959
|
function dnf(condition) {
|
|
10941
10960
|
return unwrap(dnfInner(condition));
|
|
@@ -10990,7 +11009,6 @@ function unwrap(c) {
|
|
|
10990
11009
|
}
|
|
10991
11010
|
|
|
10992
11011
|
// ../zql/src/query/query-impl.ts
|
|
10993
|
-
var astForTestingSymbol = Symbol();
|
|
10994
11012
|
function newQuery(delegate, schema, table2) {
|
|
10995
11013
|
return new QueryImpl(delegate, schema, table2);
|
|
10996
11014
|
}
|
|
@@ -11021,10 +11039,6 @@ var AbstractQuery = class {
|
|
|
11021
11039
|
get format() {
|
|
11022
11040
|
return this.#format;
|
|
11023
11041
|
}
|
|
11024
|
-
// Not part of Query or QueryInternal interface
|
|
11025
|
-
get [astForTestingSymbol]() {
|
|
11026
|
-
return this.#ast;
|
|
11027
|
-
}
|
|
11028
11042
|
hash() {
|
|
11029
11043
|
if (!this.#hash) {
|
|
11030
11044
|
const ast = this._completeAst();
|
|
@@ -11152,7 +11166,6 @@ var AbstractQuery = class {
|
|
|
11152
11166
|
parentField: firstRelation.sourceField,
|
|
11153
11167
|
childField: firstRelation.destField
|
|
11154
11168
|
},
|
|
11155
|
-
hidden: true,
|
|
11156
11169
|
subquery: {
|
|
11157
11170
|
table: junctionSchema,
|
|
11158
11171
|
alias: relationship,
|
|
@@ -11167,6 +11180,7 @@ var AbstractQuery = class {
|
|
|
11167
11180
|
parentField: secondRelation.sourceField,
|
|
11168
11181
|
childField: secondRelation.destField
|
|
11169
11182
|
},
|
|
11183
|
+
hidden: true,
|
|
11170
11184
|
subquery: addPrimaryKeysToAst(
|
|
11171
11185
|
this.#schema.tables[destSchema],
|
|
11172
11186
|
sq.#ast
|
|
@@ -11379,14 +11393,21 @@ var AbstractQuery = class {
|
|
|
11379
11393
|
return this.#completedAST;
|
|
11380
11394
|
}
|
|
11381
11395
|
};
|
|
11396
|
+
var astForTestingSymbol = Symbol();
|
|
11382
11397
|
var completedAstSymbol = Symbol();
|
|
11383
11398
|
var QueryImpl = class extends AbstractQuery {
|
|
11384
11399
|
#delegate;
|
|
11400
|
+
#ast;
|
|
11385
11401
|
constructor(delegate, schema, tableName, ast = { table: tableName }, format) {
|
|
11386
11402
|
super(schema, tableName, ast, format);
|
|
11387
11403
|
this.#delegate = delegate;
|
|
11404
|
+
this.#ast = ast;
|
|
11388
11405
|
}
|
|
11389
11406
|
_system = "client";
|
|
11407
|
+
// Not part of Query or QueryInternal interface
|
|
11408
|
+
get [astForTestingSymbol]() {
|
|
11409
|
+
return this.#ast;
|
|
11410
|
+
}
|
|
11390
11411
|
get [completedAstSymbol]() {
|
|
11391
11412
|
return this._completeAst();
|
|
11392
11413
|
}
|
|
@@ -11477,8 +11498,8 @@ function isCompoundKey(field) {
|
|
|
11477
11498
|
return Array.isArray(field) && field.length >= 1;
|
|
11478
11499
|
}
|
|
11479
11500
|
|
|
11480
|
-
// ../zql/src/query/
|
|
11481
|
-
var
|
|
11501
|
+
// ../zql/src/query/auth-query.ts
|
|
11502
|
+
var AuthQuery = class _AuthQuery extends AbstractQuery {
|
|
11482
11503
|
constructor(schema, tableName, ast = { table: tableName }, format) {
|
|
11483
11504
|
super(schema, tableName, ast, format);
|
|
11484
11505
|
}
|
|
@@ -11487,7 +11508,7 @@ var StaticQuery = class _StaticQuery extends AbstractQuery {
|
|
|
11487
11508
|
}
|
|
11488
11509
|
_system = "permissions";
|
|
11489
11510
|
_newQuery(schema, tableName, ast, format) {
|
|
11490
|
-
return new
|
|
11511
|
+
return new _AuthQuery(schema, tableName, ast, format);
|
|
11491
11512
|
}
|
|
11492
11513
|
get ast() {
|
|
11493
11514
|
return this._completeAst();
|
|
@@ -11503,97 +11524,13 @@ var StaticQuery = class _StaticQuery extends AbstractQuery {
|
|
|
11503
11524
|
}
|
|
11504
11525
|
};
|
|
11505
11526
|
|
|
11506
|
-
// ../zero-schema/src/name-mapper.ts
|
|
11507
|
-
function clientToServer(tables) {
|
|
11508
|
-
return createMapperFrom("client", tables);
|
|
11509
|
-
}
|
|
11510
|
-
function serverToClient(tables) {
|
|
11511
|
-
return createMapperFrom("server", tables);
|
|
11512
|
-
}
|
|
11513
|
-
function createMapperFrom(src, tables) {
|
|
11514
|
-
const mapping = new Map(
|
|
11515
|
-
Object.entries(tables).map(
|
|
11516
|
-
([tableName, { serverName: serverTableName, columns }]) => {
|
|
11517
|
-
let allColumnsSame = true;
|
|
11518
|
-
const names = {};
|
|
11519
|
-
for (const [name, { serverName }] of Object.entries(columns)) {
|
|
11520
|
-
if (serverName && serverName !== name) {
|
|
11521
|
-
allColumnsSame = false;
|
|
11522
|
-
}
|
|
11523
|
-
if (src === "client") {
|
|
11524
|
-
names[name] = serverName ?? name;
|
|
11525
|
-
} else {
|
|
11526
|
-
names[serverName ?? name] = name;
|
|
11527
|
-
}
|
|
11528
|
-
}
|
|
11529
|
-
return [
|
|
11530
|
-
src === "client" ? tableName : serverTableName ?? tableName,
|
|
11531
|
-
{
|
|
11532
|
-
tableName: src === "client" ? serverTableName ?? tableName : tableName,
|
|
11533
|
-
columns: names,
|
|
11534
|
-
allColumnsSame
|
|
11535
|
-
}
|
|
11536
|
-
];
|
|
11537
|
-
}
|
|
11538
|
-
)
|
|
11539
|
-
);
|
|
11540
|
-
return new NameMapper(mapping);
|
|
11541
|
-
}
|
|
11542
|
-
var NameMapper = class {
|
|
11543
|
-
#tables = /* @__PURE__ */ new Map();
|
|
11544
|
-
constructor(tables) {
|
|
11545
|
-
this.#tables = tables;
|
|
11546
|
-
}
|
|
11547
|
-
#getTable(src, ctx) {
|
|
11548
|
-
const table2 = this.#tables.get(src);
|
|
11549
|
-
if (!table2) {
|
|
11550
|
-
throw new Error(
|
|
11551
|
-
`unknown table "${src}" ${!ctx ? "" : `in ${JSON.stringify(ctx)}`}`
|
|
11552
|
-
);
|
|
11553
|
-
}
|
|
11554
|
-
return table2;
|
|
11555
|
-
}
|
|
11556
|
-
tableName(src, context) {
|
|
11557
|
-
return this.#getTable(src, context).tableName;
|
|
11558
|
-
}
|
|
11559
|
-
columnName(table2, src, ctx) {
|
|
11560
|
-
const dst = this.#getTable(table2, ctx).columns[src];
|
|
11561
|
-
if (!dst) {
|
|
11562
|
-
throw new Error(
|
|
11563
|
-
`unknown column "${src}" of "${table2}" table ${!ctx ? "" : `in ${JSON.stringify(ctx)}`}`
|
|
11564
|
-
);
|
|
11565
|
-
}
|
|
11566
|
-
return dst;
|
|
11567
|
-
}
|
|
11568
|
-
row(table2, row) {
|
|
11569
|
-
const dest = this.#getTable(table2);
|
|
11570
|
-
const { allColumnsSame, columns } = dest;
|
|
11571
|
-
if (allColumnsSame) {
|
|
11572
|
-
return row;
|
|
11573
|
-
}
|
|
11574
|
-
const clientRow = {};
|
|
11575
|
-
for (const col in row) {
|
|
11576
|
-
clientRow[columns[col] ?? col] = row[col];
|
|
11577
|
-
}
|
|
11578
|
-
return clientRow;
|
|
11579
|
-
}
|
|
11580
|
-
columns(table2, cols) {
|
|
11581
|
-
const dest = this.#getTable(table2);
|
|
11582
|
-
const { allColumnsSame, columns } = dest;
|
|
11583
|
-
return cols === void 0 || allColumnsSame ? cols : cols.map((col) => columns[col] ?? col);
|
|
11584
|
-
}
|
|
11585
|
-
};
|
|
11586
|
-
|
|
11587
11527
|
// ../zero-schema/src/permissions.ts
|
|
11588
11528
|
var ANYONE_CAN = void 0;
|
|
11589
11529
|
var NOBODY_CAN = [];
|
|
11590
11530
|
async function definePermissions(schema, definer) {
|
|
11591
11531
|
const expressionBuilders = {};
|
|
11592
11532
|
for (const name of Object.keys(schema.tables)) {
|
|
11593
|
-
expressionBuilders[name] = new
|
|
11594
|
-
schema,
|
|
11595
|
-
name
|
|
11596
|
-
).expressionBuilder();
|
|
11533
|
+
expressionBuilders[name] = new AuthQuery(schema, name).expressionBuilder();
|
|
11597
11534
|
}
|
|
11598
11535
|
const config = await definer();
|
|
11599
11536
|
return compilePermissions(schema, config, expressionBuilders);
|
|
@@ -11603,13 +11540,10 @@ function compilePermissions(schema, authz, expressionBuilders) {
|
|
|
11603
11540
|
return void 0;
|
|
11604
11541
|
}
|
|
11605
11542
|
const nameMapper = clientToServer(schema.tables);
|
|
11606
|
-
const ret = {
|
|
11607
|
-
protocolVersion: PROTOCOL_VERSION,
|
|
11608
|
-
tables: {}
|
|
11609
|
-
};
|
|
11543
|
+
const ret = {};
|
|
11610
11544
|
for (const [tableName, tableConfig] of Object.entries(authz)) {
|
|
11611
11545
|
const serverName = schema.tables[tableName].serverName ?? tableName;
|
|
11612
|
-
ret
|
|
11546
|
+
ret[serverName] = {
|
|
11613
11547
|
row: compileRowConfig(
|
|
11614
11548
|
nameMapper,
|
|
11615
11549
|
tableName,
|
|
@@ -11786,8 +11720,7 @@ var connectedMessageSchema = valita_exports.tuple([
|
|
|
11786
11720
|
connectedBodySchema
|
|
11787
11721
|
]);
|
|
11788
11722
|
var initConnectionBodySchema = valita_exports.object({
|
|
11789
|
-
desiredQueriesPatch: queriesPatchSchema
|
|
11790
|
-
deletedClients: valita_exports.array(valita_exports.string()).optional()
|
|
11723
|
+
desiredQueriesPatch: queriesPatchSchema
|
|
11791
11724
|
});
|
|
11792
11725
|
var initConnectionMessageSchema = valita_exports.tuple([
|
|
11793
11726
|
valita_exports.literal("initConnection"),
|
|
@@ -11801,15 +11734,6 @@ function encodeSecProtocols(initConnectionMessage, authToken) {
|
|
|
11801
11734
|
return encodeURIComponent(btoa(JSON.stringify(protocols)));
|
|
11802
11735
|
}
|
|
11803
11736
|
|
|
11804
|
-
// ../zero-protocol/src/delete-clients.ts
|
|
11805
|
-
var deleteClientsBodySchema = valita_exports.object({
|
|
11806
|
-
clientIDs: valita_exports.array(valita_exports.string())
|
|
11807
|
-
});
|
|
11808
|
-
var deleteClientsMessageSchema = valita_exports.tuple([
|
|
11809
|
-
valita_exports.literal("deleteClients"),
|
|
11810
|
-
deleteClientsBodySchema
|
|
11811
|
-
]);
|
|
11812
|
-
|
|
11813
11737
|
// ../zero-protocol/src/error-kind-enum.ts
|
|
11814
11738
|
var AuthInvalidated = "AuthInvalidated";
|
|
11815
11739
|
var ClientNotFound = "ClientNotFound";
|
|
@@ -11971,10 +11895,6 @@ var pokePartBodySchema = valita_exports.object({
|
|
|
11971
11895
|
});
|
|
11972
11896
|
var pokeEndBodySchema = valita_exports.object({
|
|
11973
11897
|
pokeID: valita_exports.string(),
|
|
11974
|
-
// If present, this should be the cookie stored with the client,
|
|
11975
|
-
// instead of the cookie presented in pokeStart.
|
|
11976
|
-
// TODO: Consider making this required and removing it from pokeStart.
|
|
11977
|
-
cookie: versionSchema.optional(),
|
|
11978
11898
|
// If `true`, the poke with id `pokeID` should be discarded without
|
|
11979
11899
|
// applying it.
|
|
11980
11900
|
cancel: valita_exports.boolean().optional()
|
|
@@ -12034,14 +11954,18 @@ var downstreamSchema = valita_exports.union(
|
|
|
12034
11954
|
pokeStartMessageSchema,
|
|
12035
11955
|
pokePartMessageSchema,
|
|
12036
11956
|
pokeEndMessageSchema,
|
|
12037
|
-
pullResponseMessageSchema
|
|
12038
|
-
deleteClientsMessageSchema
|
|
11957
|
+
pullResponseMessageSchema
|
|
12039
11958
|
);
|
|
12040
11959
|
|
|
12041
11960
|
// ../zero-protocol/src/mutation-type-enum.ts
|
|
12042
11961
|
var CRUD = "crud";
|
|
12043
11962
|
var Custom = "custom";
|
|
12044
11963
|
|
|
11964
|
+
// ../zero-protocol/src/protocol-version.ts
|
|
11965
|
+
var PROTOCOL_VERSION = 4;
|
|
11966
|
+
var MIN_SERVER_SUPPORTED_PROTOCOL_VERSION = 2;
|
|
11967
|
+
assert(MIN_SERVER_SUPPORTED_PROTOCOL_VERSION < PROTOCOL_VERSION);
|
|
11968
|
+
|
|
12045
11969
|
// ../zero-protocol/src/push.ts
|
|
12046
11970
|
var CRUD_MUTATION_NAME = "_zero_crud";
|
|
12047
11971
|
var insertOpSchema = valita_exports.object({
|
|
@@ -13384,28 +13308,48 @@ var ZeroContext = class {
|
|
|
13384
13308
|
// ../zero-client/src/client/crud.ts
|
|
13385
13309
|
function makeCRUDMutate(schema, repMutate) {
|
|
13386
13310
|
const { [CRUD_MUTATION_NAME]: zeroCRUD } = repMutate;
|
|
13311
|
+
let inBatch = false;
|
|
13387
13312
|
const mutateBatch = async (body) => {
|
|
13388
|
-
|
|
13389
|
-
|
|
13390
|
-
|
|
13391
|
-
|
|
13313
|
+
if (inBatch) {
|
|
13314
|
+
throw new Error("Cannot call mutate inside a batch");
|
|
13315
|
+
}
|
|
13316
|
+
inBatch = true;
|
|
13317
|
+
try {
|
|
13318
|
+
const ops = [];
|
|
13319
|
+
const m = {};
|
|
13320
|
+
for (const name of Object.keys(schema.tables)) {
|
|
13321
|
+
m[name] = makeBatchCRUDMutate(name, schema, ops);
|
|
13322
|
+
}
|
|
13323
|
+
const rv = await body(m);
|
|
13324
|
+
await zeroCRUD({ ops });
|
|
13325
|
+
return rv;
|
|
13326
|
+
} finally {
|
|
13327
|
+
inBatch = false;
|
|
13328
|
+
}
|
|
13329
|
+
};
|
|
13330
|
+
const assertNotInBatch = (tableName, op) => {
|
|
13331
|
+
if (inBatch) {
|
|
13332
|
+
throw new Error(`Cannot call mutate.${tableName}.${op} inside a batch`);
|
|
13392
13333
|
}
|
|
13393
|
-
const rv = await body(m);
|
|
13394
|
-
await zeroCRUD({ ops });
|
|
13395
|
-
return rv;
|
|
13396
13334
|
};
|
|
13397
13335
|
const mutate = {};
|
|
13398
13336
|
for (const [name, tableSchema] of Object.entries(schema.tables)) {
|
|
13399
|
-
mutate[name] = makeEntityCRUDMutate(
|
|
13337
|
+
mutate[name] = makeEntityCRUDMutate(
|
|
13338
|
+
name,
|
|
13339
|
+
tableSchema.primaryKey,
|
|
13340
|
+
zeroCRUD,
|
|
13341
|
+
assertNotInBatch
|
|
13342
|
+
);
|
|
13400
13343
|
}
|
|
13401
13344
|
return {
|
|
13402
13345
|
mutate,
|
|
13403
13346
|
mutateBatch
|
|
13404
13347
|
};
|
|
13405
13348
|
}
|
|
13406
|
-
function makeEntityCRUDMutate(tableName, primaryKey, zeroCRUD) {
|
|
13349
|
+
function makeEntityCRUDMutate(tableName, primaryKey, zeroCRUD, assertNotInBatch) {
|
|
13407
13350
|
return {
|
|
13408
13351
|
insert: (value) => {
|
|
13352
|
+
assertNotInBatch(tableName, "insert");
|
|
13409
13353
|
const op = {
|
|
13410
13354
|
op: "insert",
|
|
13411
13355
|
tableName,
|
|
@@ -13415,6 +13359,7 @@ function makeEntityCRUDMutate(tableName, primaryKey, zeroCRUD) {
|
|
|
13415
13359
|
return zeroCRUD({ ops: [op] });
|
|
13416
13360
|
},
|
|
13417
13361
|
upsert: (value) => {
|
|
13362
|
+
assertNotInBatch(tableName, "upsert");
|
|
13418
13363
|
const op = {
|
|
13419
13364
|
op: "upsert",
|
|
13420
13365
|
tableName,
|
|
@@ -13424,6 +13369,7 @@ function makeEntityCRUDMutate(tableName, primaryKey, zeroCRUD) {
|
|
|
13424
13369
|
return zeroCRUD({ ops: [op] });
|
|
13425
13370
|
},
|
|
13426
13371
|
update: (value) => {
|
|
13372
|
+
assertNotInBatch(tableName, "update");
|
|
13427
13373
|
const op = {
|
|
13428
13374
|
op: "update",
|
|
13429
13375
|
tableName,
|
|
@@ -13433,6 +13379,7 @@ function makeEntityCRUDMutate(tableName, primaryKey, zeroCRUD) {
|
|
|
13433
13379
|
return zeroCRUD({ ops: [op] });
|
|
13434
13380
|
},
|
|
13435
13381
|
delete: (id) => {
|
|
13382
|
+
assertNotInBatch(tableName, "delete");
|
|
13436
13383
|
const op = {
|
|
13437
13384
|
op: "delete",
|
|
13438
13385
|
tableName,
|
|
@@ -13683,53 +13630,6 @@ function makeTableCRUD(schema, tableName, tx, ivmBranch) {
|
|
|
13683
13630
|
};
|
|
13684
13631
|
}
|
|
13685
13632
|
|
|
13686
|
-
// ../zero-client/src/client/delete-clients-manager.ts
|
|
13687
|
-
var DeleteClientsManager = class {
|
|
13688
|
-
#send;
|
|
13689
|
-
#lc;
|
|
13690
|
-
#dagStore;
|
|
13691
|
-
constructor(send2, dagStore, lc) {
|
|
13692
|
-
this.#send = send2;
|
|
13693
|
-
this.#dagStore = dagStore;
|
|
13694
|
-
this.#lc = lc;
|
|
13695
|
-
}
|
|
13696
|
-
/**
|
|
13697
|
-
* This gets called by Replicache when it deletes clients from the persistent
|
|
13698
|
-
* storage.
|
|
13699
|
-
*/
|
|
13700
|
-
onClientsDeleted(clientIDs) {
|
|
13701
|
-
this.#lc.debug?.("DeletedClientsManager, send:", clientIDs);
|
|
13702
|
-
this.#send(["deleteClients", { clientIDs }]);
|
|
13703
|
-
}
|
|
13704
|
-
/**
|
|
13705
|
-
* Zero calls this after it connects to ensure that the server knows about all
|
|
13706
|
-
* the clients that might have been deleted locally since the last connection.
|
|
13707
|
-
*/
|
|
13708
|
-
async sendDeletedClientsToServer() {
|
|
13709
|
-
const deletedClients = await withRead(
|
|
13710
|
-
this.#dagStore,
|
|
13711
|
-
(dagRead) => getDeletedClients(dagRead)
|
|
13712
|
-
);
|
|
13713
|
-
if (deletedClients.length > 0) {
|
|
13714
|
-
this.#send(["deleteClients", { clientIDs: deletedClients }]);
|
|
13715
|
-
this.#lc.debug?.("DeletedClientsManager, send:", deletedClients);
|
|
13716
|
-
}
|
|
13717
|
-
}
|
|
13718
|
-
/**
|
|
13719
|
-
* This is called as a response to the server telling us which clients it
|
|
13720
|
-
* actually deleted.
|
|
13721
|
-
*/
|
|
13722
|
-
clientsDeletedOnServer(clientIDs) {
|
|
13723
|
-
return withWrite(this.#dagStore, async (dagWrite) => {
|
|
13724
|
-
this.#lc.debug?.("clientsDeletedOnServer:", clientIDs);
|
|
13725
|
-
await removeDeletedClients(dagWrite, clientIDs);
|
|
13726
|
-
});
|
|
13727
|
-
}
|
|
13728
|
-
getDeletedClients() {
|
|
13729
|
-
return withRead(this.#dagStore, getDeletedClients);
|
|
13730
|
-
}
|
|
13731
|
-
};
|
|
13732
|
-
|
|
13733
13633
|
// ../zero-client/src/client/enable-analytics.ts
|
|
13734
13634
|
var IPV4_ADDRESS_REGEX = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
13735
13635
|
var IPV6_ADDRESS_HOSTNAME_REGEX = /^\[[a-fA-F0-9:]*:[a-fA-F0-9:]*\]$/;
|
|
@@ -13978,7 +13878,7 @@ function makeMessage(message, context, logLevel) {
|
|
|
13978
13878
|
}
|
|
13979
13879
|
|
|
13980
13880
|
// ../zero-client/src/client/version.ts
|
|
13981
|
-
var version2 = "0.14.
|
|
13881
|
+
var version2 = "0.14.2025021201";
|
|
13982
13882
|
|
|
13983
13883
|
// ../zero-client/src/client/log-options.ts
|
|
13984
13884
|
var LevelFilterLogSink = class {
|
|
@@ -14668,7 +14568,7 @@ var PokeHandler = class {
|
|
|
14668
14568
|
this.#receivingPoke = void 0;
|
|
14669
14569
|
return;
|
|
14670
14570
|
}
|
|
14671
|
-
this.#pokeBuffer.push(
|
|
14571
|
+
this.#pokeBuffer.push(this.#receivingPoke);
|
|
14672
14572
|
this.#receivingPoke = void 0;
|
|
14673
14573
|
if (!this.#pokePlaybackLoopRunning) {
|
|
14674
14574
|
this.#startPlaybackLoop();
|
|
@@ -14744,8 +14644,7 @@ function mergePokes(pokeBuffer, schema, serverToClient2) {
|
|
|
14744
14644
|
return void 0;
|
|
14745
14645
|
}
|
|
14746
14646
|
const { baseCookie } = pokeBuffer[0].pokeStart;
|
|
14747
|
-
const
|
|
14748
|
-
const cookie = lastPoke.pokeEnd.cookie ?? lastPoke.pokeStart.cookie;
|
|
14647
|
+
const { cookie } = pokeBuffer[pokeBuffer.length - 1].pokeStart;
|
|
14749
14648
|
const mergedPatch = [];
|
|
14750
14649
|
const mergedLastMutationIDChanges = {};
|
|
14751
14650
|
let prevPokeStart = void 0;
|
|
@@ -14951,7 +14850,6 @@ var Zero = class {
|
|
|
14951
14850
|
#queryManager;
|
|
14952
14851
|
#ivmSources;
|
|
14953
14852
|
#clientToServer;
|
|
14954
|
-
#deleteClientsManager;
|
|
14955
14853
|
/**
|
|
14956
14854
|
* The queries we sent when inside the sec-protocol header when establishing a connection.
|
|
14957
14855
|
* More queries could be registered while we're waiting for the 'connected' message
|
|
@@ -14962,12 +14860,6 @@ var Zero = class {
|
|
|
14962
14860
|
* and an `initConnection` message must be sent to the server after receiving the `connected` message.
|
|
14963
14861
|
*/
|
|
14964
14862
|
#initConnectionQueries;
|
|
14965
|
-
/**
|
|
14966
|
-
* We try to send the deleted clients as part of the sec-protocol header. If we can't
|
|
14967
|
-
* because the header would get to long we keep track of the deleted clients and send
|
|
14968
|
-
* them after the connection is established.
|
|
14969
|
-
*/
|
|
14970
|
-
#deletedClients;
|
|
14971
14863
|
#lastMutationIDSent = NULL_LAST_MUTATION_ID_SENT;
|
|
14972
14864
|
#onPong = () => void 0;
|
|
14973
14865
|
#online = false;
|
|
@@ -15103,8 +14995,7 @@ var Zero = class {
|
|
|
15103
14995
|
};
|
|
15104
14996
|
const replicacheImplOptions = {
|
|
15105
14997
|
enableClientGroupForking: false,
|
|
15106
|
-
enableMutationRecovery: false
|
|
15107
|
-
onClientsDeleted: (clientIDs) => this.#deleteClientsManager.onClientsDeleted(clientIDs)
|
|
14998
|
+
enableMutationRecovery: false
|
|
15108
14999
|
};
|
|
15109
15000
|
const rep = new ReplicacheImpl(replicacheOptions, replicacheImplOptions);
|
|
15110
15001
|
this.#rep = rep;
|
|
@@ -15163,11 +15054,6 @@ var Zero = class {
|
|
|
15163
15054
|
maxRecentQueries
|
|
15164
15055
|
);
|
|
15165
15056
|
this.#clientToServer = clientToServer(schema.tables);
|
|
15166
|
-
this.#deleteClientsManager = new DeleteClientsManager(
|
|
15167
|
-
(msg) => this.#send(msg),
|
|
15168
|
-
rep.perdag,
|
|
15169
|
-
this.#lc
|
|
15170
|
-
);
|
|
15171
15057
|
this.#zeroContext = new ZeroContext(
|
|
15172
15058
|
this.#ivmSources.main,
|
|
15173
15059
|
(ast, gotCallback) => this.#queryManager.add(ast, gotCallback),
|
|
@@ -15218,9 +15104,6 @@ var Zero = class {
|
|
|
15218
15104
|
}
|
|
15219
15105
|
}
|
|
15220
15106
|
#sendChangeDesiredQueries(msg) {
|
|
15221
|
-
this.#send(msg);
|
|
15222
|
-
}
|
|
15223
|
-
#send(msg) {
|
|
15224
15107
|
if (this.#socket && this.#connectionState === Connected) {
|
|
15225
15108
|
send(this.#socket, msg);
|
|
15226
15109
|
}
|
|
@@ -15367,10 +15250,6 @@ var Zero = class {
|
|
|
15367
15250
|
return this.#handlePullResponse(lc, downMessage);
|
|
15368
15251
|
case "warm":
|
|
15369
15252
|
break;
|
|
15370
|
-
case "deleteClients":
|
|
15371
|
-
return this.#deleteClientsManager.clientsDeletedOnServer(
|
|
15372
|
-
downMessage[1].clientIDs
|
|
15373
|
-
);
|
|
15374
15253
|
default:
|
|
15375
15254
|
msgType;
|
|
15376
15255
|
rejectInvalidMessage();
|
|
@@ -15441,8 +15320,8 @@ var Zero = class {
|
|
|
15441
15320
|
this.#metrics.lastConnectError.clear();
|
|
15442
15321
|
const proceedingConnectErrorCount = this.#connectErrorCount;
|
|
15443
15322
|
this.#connectErrorCount = 0;
|
|
15444
|
-
let timeToConnectMs;
|
|
15445
|
-
let connectMsgLatencyMs;
|
|
15323
|
+
let timeToConnectMs = void 0;
|
|
15324
|
+
let connectMsgLatencyMs = void 0;
|
|
15446
15325
|
if (this.#connectStart === void 0) {
|
|
15447
15326
|
lc.error?.(
|
|
15448
15327
|
"Got connected message but connect start time is undefined. This should not happen."
|
|
@@ -15453,7 +15332,7 @@ var Zero = class {
|
|
|
15453
15332
|
connectMsgLatencyMs = connectBody.timestamp !== void 0 ? now - connectBody.timestamp : void 0;
|
|
15454
15333
|
this.#connectStart = void 0;
|
|
15455
15334
|
}
|
|
15456
|
-
let totalTimeToConnectMs;
|
|
15335
|
+
let totalTimeToConnectMs = void 0;
|
|
15457
15336
|
if (this.#totalToConnectStart === void 0) {
|
|
15458
15337
|
lc.error?.(
|
|
15459
15338
|
"Got connected message but total to connect start time is undefined. This should not happen."
|
|
@@ -15473,38 +15352,26 @@ var Zero = class {
|
|
|
15473
15352
|
});
|
|
15474
15353
|
this.#lastMutationIDSent = NULL_LAST_MUTATION_ID_SENT;
|
|
15475
15354
|
lc.debug?.("Resolving connect resolver");
|
|
15476
|
-
|
|
15355
|
+
assert(this.#socket);
|
|
15477
15356
|
const queriesPatch = await this.#rep.query(
|
|
15478
15357
|
(tx) => this.#queryManager.getQueriesPatch(tx, this.#initConnectionQueries)
|
|
15479
15358
|
);
|
|
15480
|
-
const maybeSendDeletedClients = () => {
|
|
15481
|
-
if (this.#deletedClients) {
|
|
15482
|
-
if (this.#deletedClients.length > 0) {
|
|
15483
|
-
send(socket, ["deleteClients", { clientIDs: this.#deletedClients }]);
|
|
15484
|
-
}
|
|
15485
|
-
this.#deletedClients = void 0;
|
|
15486
|
-
}
|
|
15487
|
-
};
|
|
15488
15359
|
if (queriesPatch.size > 0 && this.#initConnectionQueries !== void 0) {
|
|
15489
|
-
|
|
15490
|
-
send(socket, [
|
|
15360
|
+
send(this.#socket, [
|
|
15491
15361
|
"changeDesiredQueries",
|
|
15492
15362
|
{
|
|
15493
15363
|
desiredQueriesPatch: [...queriesPatch.values()]
|
|
15494
15364
|
}
|
|
15495
15365
|
]);
|
|
15496
15366
|
} else if (this.#initConnectionQueries === void 0) {
|
|
15497
|
-
send(socket, [
|
|
15367
|
+
send(this.#socket, [
|
|
15498
15368
|
"initConnection",
|
|
15499
15369
|
{
|
|
15500
|
-
desiredQueriesPatch: [...queriesPatch.values()]
|
|
15501
|
-
deletedClients: this.#deletedClients && this.#deletedClients.length > 0 ? this.#deletedClients : void 0
|
|
15370
|
+
desiredQueriesPatch: [...queriesPatch.values()]
|
|
15502
15371
|
}
|
|
15503
15372
|
]);
|
|
15504
|
-
this.#deletedClients = void 0;
|
|
15505
15373
|
}
|
|
15506
15374
|
this.#initConnectionQueries = void 0;
|
|
15507
|
-
maybeSendDeletedClients();
|
|
15508
15375
|
this.#setConnectionState(Connected);
|
|
15509
15376
|
this.#connectResolver.resolve();
|
|
15510
15377
|
}
|
|
@@ -15558,10 +15425,9 @@ var Zero = class {
|
|
|
15558
15425
|
clearTimeout(timeoutID);
|
|
15559
15426
|
};
|
|
15560
15427
|
this.#closeAbortController.signal.addEventListener("abort", abortHandler);
|
|
15561
|
-
const [ws, initConnectionQueries
|
|
15428
|
+
const [ws, initConnectionQueries] = await createSocket(
|
|
15562
15429
|
this.#rep,
|
|
15563
15430
|
this.#queryManager,
|
|
15564
|
-
this.#deleteClientsManager,
|
|
15565
15431
|
toWSString(this.#server),
|
|
15566
15432
|
this.#connectCookie,
|
|
15567
15433
|
this.clientID,
|
|
@@ -15580,7 +15446,6 @@ var Zero = class {
|
|
|
15580
15446
|
return;
|
|
15581
15447
|
}
|
|
15582
15448
|
this.#initConnectionQueries = initConnectionQueries;
|
|
15583
|
-
this.#deletedClients = deletedClients;
|
|
15584
15449
|
ws.addEventListener("message", this.#onMessage);
|
|
15585
15450
|
ws.addEventListener("open", this.#onOpen);
|
|
15586
15451
|
ws.addEventListener("close", this.#onClose);
|
|
@@ -16036,7 +15901,7 @@ var Zero = class {
|
|
|
16036
15901
|
return rv;
|
|
16037
15902
|
}
|
|
16038
15903
|
};
|
|
16039
|
-
async function createSocket(rep, queryManager,
|
|
15904
|
+
async function createSocket(rep, queryManager, socketOrigin, baseCookie, clientID, clientGroupID, schemaVersion, userID, auth, lmid, wsid, debugPerf, lc, maxHeaderLength = 1024 * 8, additionalConnectParams) {
|
|
16040
15905
|
const url = new URL(
|
|
16041
15906
|
appendPath(socketOrigin, `/sync/v${PROTOCOL_VERSION}/connect`)
|
|
16042
15907
|
);
|
|
@@ -16063,24 +15928,16 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
16063
15928
|
}
|
|
16064
15929
|
lc.info?.("Connecting to", url.toString());
|
|
16065
15930
|
const WS = mustGetBrowserGlobal("WebSocket");
|
|
16066
|
-
|
|
16067
|
-
|
|
16068
|
-
|
|
15931
|
+
let queriesPatch = await rep.query(
|
|
15932
|
+
(tx) => queryManager.getQueriesPatch(tx)
|
|
15933
|
+
);
|
|
16069
15934
|
let secProtocol = encodeSecProtocols(
|
|
16070
|
-
[
|
|
16071
|
-
"initConnection",
|
|
16072
|
-
{
|
|
16073
|
-
desiredQueriesPatch: [...queriesPatch.values()],
|
|
16074
|
-
deletedClients: deletedClients.length > 0 ? deletedClients : void 0
|
|
16075
|
-
}
|
|
16076
|
-
],
|
|
15935
|
+
["initConnection", { desiredQueriesPatch: [...queriesPatch.values()] }],
|
|
16077
15936
|
auth
|
|
16078
15937
|
);
|
|
16079
15938
|
if (secProtocol.length > maxHeaderLength) {
|
|
16080
15939
|
secProtocol = encodeSecProtocols(void 0, auth);
|
|
16081
15940
|
queriesPatch = void 0;
|
|
16082
|
-
} else {
|
|
16083
|
-
deletedClients = void 0;
|
|
16084
15941
|
}
|
|
16085
15942
|
return [
|
|
16086
15943
|
new WS(
|
|
@@ -16088,8 +15945,7 @@ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigi
|
|
|
16088
15945
|
url.toString(),
|
|
16089
15946
|
secProtocol
|
|
16090
15947
|
),
|
|
16091
|
-
queriesPatch
|
|
16092
|
-
deletedClients
|
|
15948
|
+
queriesPatch
|
|
16093
15949
|
];
|
|
16094
15950
|
}
|
|
16095
15951
|
function addWebSocketIDFromSocketToLogContext({ url }, lc) {
|
|
@@ -16122,7 +15978,7 @@ export {
|
|
|
16122
15978
|
dropAllDatabases,
|
|
16123
15979
|
relationships,
|
|
16124
15980
|
table,
|
|
16125
|
-
|
|
15981
|
+
string7 as string,
|
|
16126
15982
|
number4 as number,
|
|
16127
15983
|
boolean3 as boolean,
|
|
16128
15984
|
json,
|
|
@@ -16134,4 +15990,4 @@ export {
|
|
|
16134
15990
|
escapeLike,
|
|
16135
15991
|
Zero
|
|
16136
15992
|
};
|
|
16137
|
-
//# sourceMappingURL=chunk-
|
|
15993
|
+
//# sourceMappingURL=chunk-M54D33ZI.js.map
|